/*
* JavaXYQ Source Code
* by kylixs
* at 2009-11-23
* http://javaxyq.googlecode.com
* kylixs@qq.com
*/
package com.javaxyq.task;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.javaxyq.action.Actions;
import com.javaxyq.battle.BattleEvent;
import com.javaxyq.battle.BattleListener;
import com.javaxyq.core.ApplicationHelper;
import com.javaxyq.core.Context;
import com.javaxyq.core.DataManager;
import com.javaxyq.core.Environment;
import com.javaxyq.core.GameWindow;
import com.javaxyq.data.ItemInstance;
import com.javaxyq.model.Task;
import com.javaxyq.ui.UIHelper;
import com.javaxyq.util.StringUtils;
import com.javaxyq.widget.Player;
/**
* "��������"����Ԫ
* @author dewitt
* @date 2009-11-23 create
*/
public class SchoolTaskCoolie extends TaskCoolie {
/** ÿ10��Ϊһ������ */
private static final int ROUND = 10;
private Random rand = new Random();
/** ������� */
int times;
int rounds = 1;
private Context context;
private DataManager dataManager;
private UIHelper helper;
private GameWindow window;
public SchoolTaskCoolie() {
dataManager = ApplicationHelper.getApplication().getDataManager();
context = ApplicationHelper.getApplication().getContext();
window = context.getWindow();
helper = window.getHelper();
}
/**
* ����
* @param task
* @return
*/
public boolean deliver(Task task) {
//System.out.println("deliver $task");
if(!task.isFinished()) {
Player player =context.getPlayer();
Player target = (Player) task.get("target");
task.setFinished(true);
rounds = task.getInt("rounds");
times = task.getInt("times");
ApplicationHelper.getApplication().doTalk(target,"�����յ���ʦ�������ţ��Ͽ��ȥ�����ɡ�", null);
return true;
}else {
System.out.println("��������ɣ�"+task);
}
return false;
}
/**
* Ѱ��
* @param task
* @return
*/
public boolean lookfor(Task task) {
//System.out.println("lookfor $task");
if(!task.isFinished()) {
Player player =context.getPlayer();
Player target = (Player) task.get("target");
String required = (String) task.get("item");
ItemInstance[] items = dataManager.getItems(player);
for (ItemInstance item : items) {
if(item!=null && StringUtils.equals(required, item.getName())) {
item.alterAmount(-1);
if(item.getAmount() == 0) {//TODO ��Ʒ���٣�
dataManager.removeItemFromPlayer(player,item);
}
task.setFinished(true);
rounds = (Integer)task.get("rounds");
times = (Integer)task.get("times");
return true;
}
}
}
return false;
}
/**
* Ѳ��
* @param task
* @return
*/
public boolean patrol(final Task task) {
//System.out.println("patrol $task");
final Player player = context.getPlayer();
player.stop(true);
//��ʼ��С�ֶ���
int level = context.getPlayer().getData().getLevel();
List<Player> t1 = new ArrayList<Player>();
List<Player> t2 = new ArrayList<Player>();
String[] elfs = {"2036","2037","2009","2010","2011","2012"};
String[] elfNames = {"��","����","ܽ������","����","��������","����"};
Random random = new Random();
final int elfCount = random.nextInt(3)+1;
for(int i=0;i<elfCount;i++) {
int elflevel = Math.max(0,level+random.nextInt(4)-2);
int elfIndex = random.nextInt(elfs.length);
t2.add(dataManager.createElf(elfs[elfIndex], elfNames[elfIndex],elflevel));
}
t1.add(player);
//����ս��
ApplicationHelper.getApplication().doAction(this, Actions.ENTER_BATTLE,new Object[] {t1,t2});
helper.prompt("һȺС�������ƻ����ɣ�����ץ�����š�",3000);
window.addBattleListener(new BattleListener() {
//ս��ʤ������
public void battleWin(BattleEvent e) {
System.out.println("ս��ʤ��");
task.add("battle",1);
int exp = player.getData().level*(150 + rand.nextInt(20))*elfCount/10;
player.getData().exp += exp;
helper.prompt("���"+exp+"�㾭�顣",3000);
if((Integer)task.get("battle") == 2) {
task.setFinished(true);
rounds = (Integer) task.get("rounds");
times = (Integer)task.get("times");
helper.prompt("ʦ��Ѳ��������ɣ���ȥ����ʦ���ɡ�",3000);
}else {
helper.prompt("С���dz��㲻ע�⣬�ֲ�֪���ﵽ���",3000);
}
Environment.set(Environment.LAST_PATROL_TIME,System.currentTimeMillis());
}
public void battleTimeout(BattleEvent e) {
}
//ս��ʧ�ܴ���
public void battleDefeated(BattleEvent e) {
System.out.println("ս��ʧ��");
//��ѪΪ0������ָ�һ����Ѫ
if(player.getData().hp ==0) {
player.getData().hp = 1;
}
Environment.set(Environment.LAST_PATROL_TIME,System.currentTimeMillis());
helper.prompt("�벻��С����Ҳ���ո�ǿ~~!",3000);
//helper.prompt("ʦ��Ѳ������ʧ�ܣ�����ʦ��ȡ������",3000);
}
public void battleBreak(BattleEvent e) {
}
});
return true;
}
/**
* ������������
* @param sender
* @return
*/
public Task create_deliver(String sender) {
Task task = new Task("school","deliver",sender,randomNpc());
task.setAutoSpark(true);
this.times ++;
if(this.times >ROUND) {
this.rounds ++;
this.times %= ROUND;
}
task.set("times",times);
task.set("rounds",rounds);
int level = context.getPlayer().getData().level;
task.setExp(this.times*780*level);
task.setMoney(this.times * 1150*level);
return task;
}
/**
* ����Ѱ������
* @param sender
* @return
*/
public Task create_lookfor(String sender) {
Task task = new Task("school","lookfor",sender,sender);
task.set("item",randomItem());
this.times ++;
if(this.times >ROUND) {
this.rounds ++;
this.times %= ROUND;
}
task.set("times",times);
task.set("rounds",rounds);
int level = context.getPlayer().getData().level;
task.setExp(this.times*980*level);
task.setMoney(this.times * 2150*level);
return task;
}
/**
* ����Ѳ������
* @param sender
* @return
*/
public Task create_patrol(String sender) {
Task task = new Task("school","patrol",sender,sender);
task.setAutoSpark(false);
//FIXME ������������Ѳ�ߵij���id
if("��Ԫ����".equals(sender)) {
task.set("sceneId","1146");
}
task.set("battle",0);
this.times ++;
if(this.times >ROUND) {
this.rounds ++;
this.times %= ROUND;
}
task.set("times",times);
task.set("rounds",rounds);
int level = context.getPlayer().getData().level;
task.setExp(this.times*1080*level);
task.setMoney(this.times * 1550*level);
return task;
}
/**�����������������
* @param task
* @return
*/
public String desc_deliver(Task task) {
return "ʦ��������#R"+task.getReceiver()+"#n���飬�㽫�ż���ȥ��";
}
public String desc_lookfor(Task task) {
return "���ɽ�����Ҫ#R"+task.get("item")+"#n������ɽȥѰ��һ��������";
}
public String desc_patrol(Task task) {
return "�����������춯���㵽���浽�����߿����������в���֮ͽ����ѵһ�¡�";
}
private String[] npclist = {"����","��ɫʦ","ҩ���ƹ�"};//FIXME
/**
* ���ѡ��һ��NPC
* @return
*/
public String randomNpc() {
//FIXME �������NPC
int index = rand.nextInt(npclist.length);
return npclist[index];
}
String[] items = {"��Ҷ��","��Ҷ��","����ذ�","�ݹ�","�����","ˮ����","�ϵ���","����","������","��ɫ��",
"��Ҷ","�����","��֬","�����ͷ","���в�","��٢��","ɽҩ","�˽���Ҷ","�˲�","�¼���"};
/**
* ���һ����Ʒ
* @return
*/
public String randomItem() {
return items[rand.nextInt(items.length)];
}
}