package module.battle.chapter0; import module.battle.BattleTask; import module.character.CharList; import module.character.Group; import module.character.GroupList; import module.character.PlayerGroup; import module.character.api.ICharacter; import module.character.instance.main.Dawdw; import module.character.instance.main.Tao; import module.command.CommandServer; import module.mission.chapter0.MainMission; import module.server.PlayerServer; import module.utility.BattleUtil; import module.utility.EventUtil; import module.utility.ItemUtil; import module.utility.MapUtil; public class ShadowBattle extends BattleTask{ private PlayerGroup ggg; public ShadowBattle(Group team1, Group team2) { super(team1, team2); } @Override protected boolean checkGroupListDown(GroupList list) { boolean allDown = true; boolean groupDown; boolean isDown = false; while (!isDown) { isDown = true; for (Group g : list.gList) { groupDown = true; for (CharList cList : g.list) { for (ICharacter c : cList.charList) { if (!c.isDown()) { allDown = false; groupDown = false; } } } if (groupDown) { if (g instanceof PlayerGroup) { CommandServer.informGroup(g, "�A����������F...\n"); ggg = (PlayerGroup) g; return true; } else { ItemUtil.createLootingItem(g); // group inventory drop to the ground ItemUtil.dropAllItemOnDefeat(g); // do group down event if there's any GroupList oppositeGroups = getEnemyGroups(g); PlayerGroup pg = null; for (Group px : oppositeGroups.gList){ if (px instanceof PlayerGroup){ pg = (PlayerGroup) px; break; } } if (pg != null){ this.isBlocked = true; g.list.get(0).charList.get(0).doEventWhenGroupDown(pg); this.isBlocked = false; } } // a group is down, remove data from this battle removeGroupFromTimeMap(g); g.getAtRoom().getGroupList().gList.remove(g); g.setAtRoom(null); g.setInBattle(false); g.setBattleTask(null); list.gList.remove(g); isDown = false; break; } } } return allDown; } @Override public void checkBattleEnd() { super.checkBattleEnd(); ggg.setInEvent(true); ((MainMission) PlayerServer.getMissionMap().get( MainMission.class.toString())).setState(MainMission.State.AFTER_DEFEATED); EventUtil.executeEventMessage(ggg, "after_defeated_by_shadow"); Group taoG = new Group(new Tao()); taoG.addChar(new Dawdw()); MapUtil.initializeGroupAtMap(taoG, ggg.getAtRoom()); Group shadowG = ggg.getAtRoom().getGroupList().findGroup("shadow"); BattleUtil.attackMechanism(taoG.findAliveChar("tao"), shadowG.findAliveChar("shadow")); new ShadowTaoBattle(taoG, shadowG); ggg.setInEvent(false); ggg.setTalking(true); } }