package module.utility; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import module.character.Group; import module.character.PlayerGroup; import module.command.CommandServer; import module.event.api.IEvent; import module.event.api.IRoomCommand; import module.event.map.SkipEventException; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class EventUtil { public static HashMap<String, IEvent> mapEventMap = new HashMap<String, IEvent>(); public static HashMap<String, IRoomCommand> mapCommandMap = new HashMap<String, IRoomCommand>(); public static HashMap<String, JSONArray> eventMessageMap = new HashMap<String, JSONArray>(); private static JSONParser parser = new JSONParser(); public static boolean triggerRoomEvent(Group g){ try { if (mapEventMap.get(g.getAtRoom().getPosition().toString()).isTriggered(g)) return true; } catch (Exception e){ // do nothing } return false; } public static void doRoomEvent(Group g){ mapEventMap.get(g.getAtRoom().getPosition().toString()).doEvent(g); } public static void checkSkipEvent(String msg) throws SkipEventException{ if (msg.equals("q")) throw new SkipEventException(); return; } public static void informCheckReset(Group g, StringBuffer buf, BufferedReader in) throws SkipEventException{ g.getAtRoom().informRoom(buf.toString() + "<ENTER>\n"); checkSkipEvent(IOUtil.readLineFromClientSocket(in)); buf.setLength(0); } public static void informReset(Group g, StringBuffer buf, BufferedReader in){ g.getAtRoom().informRoom(buf.toString() + "<ENTER>\n"); IOUtil.readLineFromClientSocket(in); buf.setLength(0); } public static boolean doRoomCommand(Group g, String[] msg){ IRoomCommand r = mapCommandMap.get(g.getAtRoom().getPosition().toString()); if (r != null) return r.roomSpecialCommand(g, msg); return false; } public static void parseEventFromJSON(String filename){ try { InputStreamReader isr = new InputStreamReader(new FileInputStream(filename), "UTF-8"); JSONObject oooo = (JSONObject) parser.parse(isr); JSONArray eventArray = (JSONArray) oooo.get("event"); for (Object obj : eventArray){ JSONObject eventObj = (JSONObject) obj; String eventName = (String) eventObj.get("name"); JSONArray descArray = (JSONArray) eventObj.get("description"); eventMessageMap.put(eventName, descArray); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void executeEventMessage(PlayerGroup pg, String eventName){ BufferedReader in = pg.getInFromClient(); StringBuffer buf = new StringBuffer(); JSONArray descArray = eventMessageMap.get(eventName); for (Object obj : descArray){ JSONArray oneTimeDesc = (JSONArray) obj; int i = 0; buf.append((String) oneTimeDesc.get(0)); for (i = 1; i < oneTimeDesc.size(); i++) buf.append("\n" + (String) oneTimeDesc.get(i)); try { informCheckReset(pg, buf, in); } catch (SkipEventException e) { CommandServer.informGroup(pg, "���L�@���C\n"); return; } } } public static void showMessageToClient(DataOutputStream toClient, String eventName){ JSONArray descArray = eventMessageMap.get(eventName); StringBuffer buf = new StringBuffer(); for (Object obj : descArray) { JSONArray oneTimeDesc = (JSONArray) obj; for (int i = 0; i < oneTimeDesc.size(); i++) buf.append(((String) oneTimeDesc.get(i)) + "\n"); } EnDecoder.sendUTF8Packet(toClient, buf.toString()); } }