package module.battle.chapter0;
import java.io.BufferedReader;
import module.battle.BattleTask;
import module.character.Group;
import module.character.PlayerGroup;
import module.character.api.ICharacter;
import module.character.constants.CConfig.config;
import module.command.CommandServer;
import module.utility.EventUtil;
import module.utility.IOUtil;
public class FirstTutorialBattle extends BattleTask{
private int playerMoveCount;
public FirstTutorialBattle(Group team1, Group team2) {
super(team1, team2);
playerMoveCount = 0;
}
@Override
public void run() {
if (isBlocked) return;
synchronized (this) {
ready = updateTime();
updatePlayerStatus();
}
updatePlayerStatus(team1List.gList);
updatePlayerStatus(team2List.gList);
try {
for (ICharacter c : ready) {
if (c.getMyGroup() instanceof PlayerGroup) {
if (((PlayerGroup) c.getMyGroup()).getConfigData().get(config.TUTORIAL_ON)){
isBlocked = true;
playerMoveCount++;
boolean skip = doEvent((PlayerGroup) c.getMyGroup());
isBlocked = false;
if (skip) continue;
}
if (((PlayerGroup) c.getMyGroup()).getConfigData().get(
config.REALTIMEBATTLE)) {
// real time battle
} else {
// blocks when a character in player's group is ready
try {
synchronized (this) {
wait();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
c.battleAction(getEnemyGroups(c));
}
} catch (NullPointerException e) {
return; // no one is ready, return
}
}
private boolean doEvent(PlayerGroup g){
StringBuffer buf = new StringBuffer();
BufferedReader in = g.getInFromClient();
String input;
switch (playerMoveCount){
case 1:
g.getAtRoom().informRoom("<ENTER>\n");
IOUtil.clearBufferedReader(in);
buf.append("�N�ؤ߷Q�G����A���W������i�H�Ϊ��F���?");
EventUtil.informReset(g, buf, in);
buf.append("�����G��J\"inventory\"��\"i\"�i�d�ݲ{�b���W�a�����~�����ǡC\n");
buf.append("�п�J\"inventory\"��\"i\"�Ӭd�ݨ��W�����~�C");
g.getAtRoom().informRoom(buf.toString() + "\n");
buf.setLength(0);
input = IOUtil.readLineFromClientSocket(in);
while (!input.equals("inventory") && !input.equals("i")){
g.getAtRoom().informRoom("�п�J\"inventory\"��\"i\"�Ӭd�ݨ��W�����~�C\n");
input = IOUtil.readLineFromClientSocket(in);
}
String[] msg = {"inventory"};
CommandServer.readCommand(g, msg);
buf.append("�N�ثr�ۤ��G\"�����ҥ��S�p�S���A�N���o�Ө����ԧa�C\"");
EventUtil.informReset(g, buf, in);
buf.append("�����G�A�i�H�ϥ�\"wear\"���O���������W�Y��˳ơC���O�榡��\n");
buf.append("\"<����^��W�r> <wear> <�˳ƦW��>\"�C��i�ϥ�\"remove\"\n");
buf.append("���O�Ӳ�U�˳ơC�榡��\"<����^��W�r> <remove> <�˳ƦW��>\"�C\n");
buf.append("�Y�̫e�����[�W����W�١A�h�۰ʫ��w������Ĥ@�Ө���i��ʧ@�C\n");
buf.append("�b����wear/remove�Ү��Ө���@�^�X���ɶ��C�Բӻ����i��J\n");
buf.append("\"help wear\"�H��\"help remove\"�Ӭd�ߡC");
EventUtil.informReset(g, buf, in);
g.getAtRoom().informRoom("�п�J\"wear book\"�N�����ҥ��˳ư_�ӡC\n");
input = IOUtil.readLineFromClientSocket(in);
while (!input.equals("wear book")){
g.getAtRoom().informRoom("�п�J\"wear book\"�N�����ҥ��˳ư_�ӡC\n");
input = IOUtil.readLineFromClientSocket(in);
}
String[] msg2 = {"wear", "book"};
CommandServer.readCommand(g, msg2);
return true;
case 2:
g.getAtRoom().informRoom("<ENTER>\n");
IOUtil.clearBufferedReader(in);
buf.append("�N�ءG\"�S��k�F�A�u����]�k��L���w�A���M�s�ڦۤv���ʩR���O!\"");
EventUtil.informReset(g, buf, in);
buf.append("�����G�A�i�H��J\"equipment\"��\"eq\"�Ӭd�ݶ�����⪺�˳�\n");
buf.append("���p�A���O�榡��\"<����^��W�r> <equipment>\"�C�Y�e������J\n");
buf.append("����W�١A�h�۰ʫ��w����Ĥ@�쨤��@���ާ@��H�C\n");
buf.append("�Բӻ����i��J\"help equipment\"�Ӭd�ߡC");
EventUtil.informReset(g, buf, in);
g.getAtRoom().informRoom("�п�J\"equipment\"��\"eq\"�Ӭd���N�ت��˳ơC\n");
input = IOUtil.readLineFromClientSocket(in);
while (!input.equals("equipment") && !input.equals("eq")){
g.getAtRoom().informRoom("�п�J\"equipment\"��\"eq\"�Ӭd���N�ت��˳ơC\n");
input = IOUtil.readLineFromClientSocket(in);
}
String[] msg3 = {"equipment"};
CommandServer.readCommand(g, msg3);
buf.append("�����G���q�������O��\"attack\"��\"at\"�A���O�榡��\n");
buf.append("\"<�ڤ訤��W��> <attack> <�Ĥ訤��W��>\"�C�Y�����w�ڤ�\n");
buf.append("����W�١A�h�۰ʫ��w������Ĥ@�쨤��Ӱʧ@�C�t�~�A�b����\n");
buf.append("�Y�����w�S�w�Ĥ�ؼСA�h�۰ʫ��w�Ĥ趤��Ĥ@�쨤��i�����\n");
buf.append("�C�Բӻ����i��J\"help attack\"�Ӭd�ߡC");
EventUtil.informReset(g, buf, in);
g.getAtRoom().informRoom("�п�J\"at roommate\"��\"at\"�ӧ����Ǥ͡C\n");
input = IOUtil.readLineFromClientSocket(in);
while (!input.equals("at roommate") && !input.equals("at")){
g.getAtRoom().informRoom("�п�J\"at roommate\"��\"at\"�ӧ����Ǥ͡C\n");
input = IOUtil.readLineFromClientSocket(in);
}
String[] msg4 = {"at", "roommate"};
CommandServer.readCommand(g, msg4);
g.setInEvent(false);
return true;
case 5:
buf.append("���ܡG���ƿ�J�P�˪����O�ܷж�? �A�i�H�Q��\"!\"���O�N��A\n");
buf.append("�W�@����J�����O��! �A�i�H�յۨϥ�\"!\"�ӥN��\"at\"��\n");
buf.append("\"at roommate\"�C\n");
g.getAtRoom().informRoom(buf.toString());
}
return false;
}
}