package module.utility; import module.character.CharList; import module.character.Group; import module.character.GroupList; import module.character.PlayerGroup; import module.character.api.ICharacter; import module.command.CommandServer; import module.item.SingleItemList; import module.item.api.IItem; import module.map.api.IRoom; import module.map.constants.CExit; import module.server.PlayerServer; public class NpcActionUtil { public static void randomMove(Group g){ String[] select = CExit.getAccessibleExitsRoom(g.getAtRoom()); if (select == null) return; int ddd = PlayerServer.getRandom().nextInt(select.length); String[] output = {select[ddd]}; CommandServer.readCommand(g, output); } public static void randomGet(ICharacter c){ Group g = c.getMyGroup(); int itemNum = 0; for (SingleItemList sil : g.getAtRoom().getItemList().itemList){ itemNum += sil.list.size(); } if (itemNum == 0) return; int ddd = PlayerServer.getRandom().nextInt(itemNum); IItem target = null; int index = 0, count = 0; for (SingleItemList sil : g.getAtRoom().getItemList().itemList){ index = 1; for (IItem obj : sil.list){ if (count == ddd) { target = obj; break; } count++; index++; } } String[] result = new String[3]; result[0] = Parse.getFirstWord(c.getEngName()); result[1] = "get"; result[2] = index + "." + Parse.getFirstWord(target.getEngName()); CommandServer.readCommand(g, result); } public static void randomDrop(ICharacter c){ Group g = c.getMyGroup(); int itemNum = 0; for (SingleItemList sil : g.getInventory().itemList){ itemNum += sil.list.size(); } if (itemNum == 0) return; IItem target = null; int ddd = PlayerServer.getRandom().nextInt(itemNum); int index = 0, count = 0; for (SingleItemList sil : g.getInventory().itemList){ index = 1; for (IItem obj : sil.list){ if (count == ddd){ target = obj; break; } count++; index++; } } String[] result = {Parse.getFirstWord(c.getEngName()), "drop", index + "." + Parse.getFirstWord(target.getEngName())}; CommandServer.readCommand(g, result); } public static void attackRandomPlayerGroup(ICharacter c){ String[] targetS = locateRandomPlayerGroup(c.getMyGroup().getAtRoom().getGroupList()); if (targetS == null) return; String[] output = new String[targetS.length + 2]; output[0] = Parse.getFirstWord(c.getEngName()); output[1] = "attack"; for (int i = 0; i < targetS.length; i++) { output[i + 2] = targetS[i]; System.out.print(targetS[i] + " "); } System.out.println(); CommandServer.readCommand(c.getMyGroup(), output); } public static String[] locateRandomPlayerGroup(GroupList targetGList){ int num = 0; for (Group gg : targetGList.gList){ if (gg instanceof PlayerGroup) { num++; } } if (num == 0) return null; int ddd = PlayerServer.getRandom().nextInt(num); int count = 0, targetIndex = 0; for (Group gg : targetGList.gList){ if (gg instanceof PlayerGroup) { if (ddd == count) { int charNum = 0; for (CharList cList : gg.list){ charNum += cList.charList.size(); } targetIndex += PlayerServer.getRandom().nextInt(charNum); String[] result = NpcBattleActionUtil.locateTargetCommand( gg.getAtRoom().getGroupList(), targetIndex); return result; } count++; } for (CharList cList : gg.list){ targetIndex += cList.charList.size(); } } return null; } public static void checkAutoAttackPlayerGroup(IRoom r){ for (Group g : r.getGroupList().gList){ if (g.list.get(0).charList.get(0).getHostile()) attackRandomPlayerGroup(g.list.get(0).charList.get(0)); } } }