package module.command.group; import module.character.Group; import module.character.api.ICharacter; import module.command.CommandServer; import module.command.api.ICommand; import module.item.api.IContainer; import module.item.api.IItem; import module.map.api.IDoor; import module.map.constants.CDoorAttribute.doorStatus; import module.map.constants.CExit.exit; import module.utility.BattleUtil; import module.utility.EventUtil; import module.utility.HelpUtil; import module.utility.ItemUtil; import module.utility.MoveUtil; public class Look implements ICommand { private String[] name; public Look() { name = new String[2]; name[0] = "look"; name[1] = "l"; } @Override public boolean action(ICharacter c, String[] command) { Group g = c.getMyGroup(); // add for room event boolean triggerRoomEvent = false; synchronized (g.getAtRoom()) { if (command.length == 1) { // look at the environment CommandServer.informGroup(g, g.getAtRoom() .displayRoomExceptGroup(g)); triggerRoomEvent = EventUtil.triggerRoomEvent(g); if (triggerRoomEvent) g.setTalking(true); } else if (command.length >= 3 && command[1].equals("in")){ // look in container IContainer container = ItemUtil.checkIsContainer(g, g.getAtRoom().getItemList(), command[2]); if (container != null){ container.displayContent(c); } return false; } else { // look at the specific object if (command.length == 2) { IItem obj = ItemUtil.findEquipByName(g, command[1]); if (obj == null) obj = g.getInventory().findItem(command[1]); if (obj != null) { CommandServer.informGroup(g, obj.display()); return false; } obj = g.getAtRoom().getItemList().findItem(command[1]); if (obj != null) { CommandServer.informGroup(g, obj.display()); return false; } // look at direction exit way = MoveUtil.getWay(command[1]); if (way != null){ if (g.getAtRoom().getExits().containsKey(way)){ IDoor door = g.getAtRoom().getExits().get(way).getDoor(); if (door == null || door.getDoorStatus() == doorStatus.OPENED){ CommandServer.informGroup(g, g.getAtRoom().getExits().get(way).getRoom().displayRoom()); return false; } else { CommandServer.informGroup(g, door.getDescription() + "\n"); return false; } } else { CommandServer.informGroup(g, "���Ӥ�V�èS������S�O���C\n"); return false; } } } // group name case Group tg = g.getAtRoom().getGroupList() .findGroupExceptGroup(command[1], g); if (tg != null) { if (command.length == 2) { CommandServer.informGroup(g, tg.displayInfo()); } else { ICharacter tc = tg.findAliveChar(command[2]); if (tc != null) { String out = tc.getDesc() + "\n"; out += BattleUtil.showStatusInBattle(tc) + "\n"; out += ItemUtil.showLookEquip(tc); CommandServer.informGroup(g, out); } else CommandServer.informGroup(g, "�Ӷ���S���A�Q�[���H�C\n"); } } else CommandServer.informGroup(g, "�o�̨S���A�Q�n�ݪ��F��C\n"); } } if (triggerRoomEvent){ EventUtil.doRoomEvent(g); g.setTalking(false); } return false; } @Override public String getHelp() { String output = HelpUtil.getHelp("resources/help/look.help"); return output; } @Override public String[] getName() { return name; } }