Guest User

Untitled

a guest
May 14th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 52.38 KB | None | 0 0
  1. package org.mysticworlds;
  2.  
  3. import it.gotoandplay.smartfoxserver.data.Room;
  4. import it.gotoandplay.smartfoxserver.data.User;
  5. import it.gotoandplay.smartfoxserver.data.Zone;
  6. import it.gotoandplay.smartfoxserver.db.DataRow;
  7. import it.gotoandplay.smartfoxserver.db.DbManager;
  8. import it.gotoandplay.smartfoxserver.events.InternalEventObject;
  9. import it.gotoandplay.smartfoxserver.exceptions.ExtensionHelperException;
  10. import it.gotoandplay.smartfoxserver.exceptions.LoginException;
  11. import it.gotoandplay.smartfoxserver.extensions.AbstractExtension;
  12. import it.gotoandplay.smartfoxserver.extensions.ExtensionHelper;
  13. import it.gotoandplay.smartfoxserver.lib.ActionscriptObject;
  14. import net.sf.json.JSONArray;
  15. import net.sf.json.JSONObject;
  16. import org.mysticworlds.ai.ActiveMonster;
  17. import org.mysticworlds.world.*;
  18. import org.mysticworlds.world.Class;
  19.  
  20. import java.io.*;
  21. import java.nio.channels.SocketChannel;
  22. import java.util.*;
  23.  
  24. /**
  25.  * MysticWorld.java
  26.  * <p/>
  27.  * MysticWorlds SmartFox Server Java Extension
  28.  *
  29.  * @author Mystical<br>
  30.  *         (c) 2011 MysticWorlds
  31.  */
  32. @SuppressWarnings({"unchecked"})
  33. public class MysticWorld extends AbstractExtension {
  34.  
  35.     private String serverName;
  36.     private boolean debug;
  37.     private ExtensionHelper helper;
  38.     private Zone zone;
  39.     private DbManager db;
  40.     private Map<Integer, Item> worldItems = new HashMap<Integer, Item>();
  41.     private Map<String, Area> worldAreas = new HashMap<String, Area>();
  42.     private Map<Integer, Monster> worldMonsters = new HashMap<Integer, Monster>();
  43.     private Map<Integer, ActiveSkill> worldActiveSkills = new HashMap<Integer, ActiveSkill>();
  44.     private Map<Integer, PassiveSkill> worldPassiveSkills = new HashMap<Integer, PassiveSkill>();
  45.     private Map<Integer, Class> worldClasses = new HashMap<Integer, Class>();
  46.     private Properties config;
  47.     private Map<String, Object> cvu = new HashMap<String, Object>();
  48.     private String newsString;
  49.  
  50.     private int[] arrRanks = new int[11];
  51.  
  52.     @Override
  53.     public void init() {
  54.         System.out.println();
  55.         System.out.println("::::::::: { Project 6 SmartFox Extension Core } :::::::::");
  56.         System.out.println("::                         ::                          ::");
  57.         System.out.println(":::::::: Version: 0.0.1.50 -- (c) 2011 Project 6 ::::::::");
  58.         System.out.println("::                         ::                          ::");
  59.         System.out.println(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
  60.         System.out.println();
  61.         try {
  62.             Thread.sleep(3000);
  63.         } catch (InterruptedException e) {
  64.             e.printStackTrace();
  65.         }
  66.  
  67.         helper = ExtensionHelper.instance();
  68.         zone = helper.getZone(this.getOwnerZone());
  69.         db = zone.dbManager;
  70.  
  71.         loadConfigurations();
  72.         cacheWorldItems();
  73.         initCVU();
  74.         initArrRep();
  75.  
  76.         StringBuilder sb = new StringBuilder();
  77.         ArrayList queryRes = db.executeQuery("SELECT * FROM settings_login");
  78.         int i = 0;
  79.         for (Object rowObj : queryRes) {
  80.             DataRow row = (DataRow) rowObj;
  81.             if (i != 0) {
  82.                 sb.append(",");
  83.             }
  84.  
  85.             sb.append(row.getItem("name"));
  86.             sb.append("=");
  87.             sb.append(row.getItem("value"));
  88.  
  89.             i++;
  90.         }
  91.  
  92.         newsString = sb.toString();
  93.     }
  94.  
  95.     private void initCVU() {
  96.         System.out.println("--- [ CVU Properties ] -----------------------------------");
  97.         System.out.println();
  98.         ArrayList queryRes = db.executeQuery("SELECT * FROM settings_rates");
  99.         for (Object rowObj : queryRes) {
  100.             DataRow row = (DataRow) rowObj;
  101.             cvu.put(row.getItem("name"), Double.parseDouble(row.getItem("value")));
  102.             System.out.println(row.getItem("name") + ": " + row.getItem("value"));
  103.         }
  104.         System.out.println();
  105.     }
  106.  
  107.     private void initArrRep() {
  108.         System.out.println("--- [ Reputation ] -----------------------------------");
  109.         System.out.println();
  110.         int i = 1;
  111.         while (i < 10) {
  112.             int rankExp = (int) (Math.pow((i + 1), 3) * 100);
  113.             if (i > 1) {
  114.                 arrRanks[i] = (rankExp + arrRanks[(i - 1)]);
  115.             } else {
  116.                 arrRanks[i] = (rankExp + 100);
  117.             }
  118.             System.out.println("Rank " + i + ": " + arrRanks[i]);
  119.             i++;
  120.         }
  121.         System.out.println();
  122.     }
  123.  
  124.     int getRankFromCP(int cp) {
  125.         int i = 1;
  126.         while (i < 10) {
  127.             if (arrRanks[i] >= cp) {
  128.                 return i;
  129.             }
  130.             i++;
  131.         }
  132.         return -1;
  133.     }
  134.  
  135.     void debug(Object s) {
  136.         if(debug) System.out.println(">> " + s);
  137.     }
  138.  
  139.     void loadConfigurations() {
  140.         try {
  141.             config = new Properties();
  142.             //Get Current Directory
  143.             String curDir = (new File(".").getCanonicalPath());
  144.             //If config folder does not exist, create it.
  145.             File dir = new File(curDir + "\\conf\\");
  146.             if (!dir.exists()) {
  147.                 dir.mkdir();
  148.             }
  149.  
  150.             //If config file does not exist, create it.
  151.             File conf = new File(curDir + "\\conf\\MExt.conf");
  152.             if (!conf.exists()) {
  153.                 if (conf.createNewFile()) {
  154.                     Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(curDir + "\\conf\\MExt.conf"), "8859_1"));
  155.                     config.setProperty("org.mysticworlds.servername", "Test Server");
  156.                     config.setProperty("org.mysticworlds.staffonly", "false");
  157.                     config.setProperty("org.mysticworlds.memberonly", "false");
  158.                     config.setProperty("org.mysticworlds.debug", "false");
  159.  
  160.                     config.store(writer, "MExt Properties");
  161.                     writer.close();
  162.                 }
  163.             }
  164.  
  165.             FileInputStream fin = new FileInputStream(curDir + "\\conf\\MExt.conf");
  166.             config.load(fin);
  167.  
  168.             serverName = config.getProperty("org.mysticworlds.servername");
  169.             debug = Boolean.parseBoolean(config.get("org.mysticworlds.debug").toString());
  170.  
  171.             System.out.println("--- [ MExt Properties ] -----------------------------------");
  172.             System.out.println();
  173.             for (Object wat : config.keySet()) {
  174.                 System.out.println(wat + ": " + config.get(wat));
  175.             }
  176.             System.out.println();
  177.         } catch (IOException e) {
  178.             e.printStackTrace();
  179.         }
  180.     }
  181.  
  182.     private void cacheWorldItems() {
  183.         System.out.println("--- [ World Cache Operation ] -----------------------------");
  184.         System.out.println();
  185.         System.out.println(">> Caching world items...");
  186.         String sql = "SELECT * FROM items";
  187.         ArrayList queryRes = db.executeQuery(sql);
  188.         for (Object queryRe : queryRes) {
  189.             DataRow row = (DataRow) queryRe;
  190.             int id = Integer.parseInt(row.getItem("id"));
  191.             Item item = new Item(row);
  192.             worldItems.put(id, item);
  193.         }
  194.         System.out.println(" -> Cached " + worldItems.size() + " world items.");
  195.  
  196.         System.out.println(">> Caching world areas...");
  197.         sql = "SELECT * FROM maps";
  198.         queryRes = db.executeQuery(sql);
  199.         for (Object queryRe : queryRes) {
  200.             DataRow row = (DataRow) queryRe;
  201.             String name = row.getItem("Name");
  202.             Area area = new Area(row);
  203.             worldAreas.put(name, area);
  204.         }
  205.         System.out.println(" -> Cached " + worldAreas.size() + " world areas.");
  206.  
  207.         System.out.println(">> Caching world monsters...");
  208.         sql = "SELECT * FROM monsters";
  209.         queryRes = db.executeQuery(sql);
  210.         for (Object queryRe : queryRes) {
  211.             DataRow row = (DataRow) queryRe;
  212.             int id = Integer.parseInt(row.getItem("id"));
  213.             Monster monster = new Monster(row);
  214.             worldMonsters.put(id, monster);
  215.         }
  216.         System.out.println(" -> Cached " + worldMonsters.size() + " world monsters.");
  217.  
  218.         System.out.println(">> Caching world active skills...");
  219.         sql = "SELECT * FROM skills";
  220.         queryRes = db.executeQuery(sql);
  221.         for (Object queryRe : queryRes) {
  222.             DataRow row = (DataRow) queryRe;
  223.             int id = Integer.parseInt(row.getItem("id"));
  224.             ActiveSkill activeSkill = new ActiveSkill(row);
  225.             worldActiveSkills.put(id, activeSkill);
  226.         }
  227.         System.out.println(" -> Cached " + worldActiveSkills.size() + " world active skills.");
  228.  
  229.         System.out.println(">> Caching world passive skills...");
  230.         sql = "SELECT * FROM passives";
  231.         queryRes = db.executeQuery(sql);
  232.         for (Object queryRe : queryRes) {
  233.             DataRow row = (DataRow) queryRe;
  234.             int id = Integer.parseInt(row.getItem("id"));
  235.             PassiveSkill passiveSkill = new PassiveSkill(row);
  236.             worldPassiveSkills.put(id, passiveSkill);
  237.         }
  238.         System.out.println(" -> Cached " + worldPassiveSkills.size() + " world passive skills.");
  239.  
  240.         System.out.println(">> Caching world classes...");
  241.         sql = "SELECT * FROM classes";
  242.         queryRes = db.executeQuery(sql);
  243.         for (Object queryRe : queryRes) {
  244.             DataRow row = (DataRow) queryRe;
  245.             int id = Integer.parseInt(row.getItem("id"));
  246.             Class _class = new Class(row);
  247.             worldClasses.put(id, _class);
  248.         }
  249.         System.out.println(" -> Cached " + worldClasses.size() + " world classes.");
  250.  
  251.         System.out.println();
  252.     }
  253.  
  254.     private void sendRoomData(User user, Room room) {
  255.         String mapName = room.getName().split("-")[0];
  256.         LinkedList<SocketChannel> userChan = new LinkedList<SocketChannel>();
  257.         userChan.add(user.getChannel());
  258.  
  259.         Area area = worldAreas.get(mapName);
  260.         Map<Integer, ActiveMonster> monVars = (Map<Integer, ActiveMonster>) room.properties.get("monVars");
  261.  
  262.         JSONObject object = new JSONObject();
  263.         object.put("cmd", "moveToArea");
  264.         object.put("areaName", room.getName());
  265.         object.put("intKillCount", 0);
  266.         object.put("strMapFileName", area.FileName);
  267.         object.put("uoBranch", getUserBranch(room));
  268.         object.put("mondef", getMonDef(mapName));
  269.         object.put("monBranch", getMonBranch(monVars));
  270.         object.put("intType", 1);
  271.         object.put("wB", new Object[0]);
  272.         object.put("monmap", getMonMap(mapName));
  273.         object.put("sExtra", area.Extra);
  274.         object.put("areaId", room.getId());
  275.         object.put("strMapName", mapName);
  276.  
  277.         sendResponse(object, -1, null, userChan);
  278.     }
  279.  
  280.     private JSONArray getMonBranch(Map<Integer, ActiveMonster> monVars) {
  281.         JSONArray monBranch = new JSONArray();
  282.  
  283.         if (monVars.size() > 0) {
  284.             for (int i = 1; i < (monVars.size() + 1); i++) {
  285.                 JSONObject mon = new JSONObject();
  286.                 ActiveMonster actMon = monVars.get(i);
  287.  
  288.                 mon.put("intHPMax", actMon.HPMax);
  289.                 mon.put("iLvl", actMon.Level);
  290.                 mon.put("MonMapID", i);
  291.                 mon.put("MonID", actMon.MonID);
  292.                 mon.put("intMP", actMon.MP);
  293.                 mon.put("wDPS", actMon.DPS);
  294.                 mon.put("intState", actMon.State);
  295.                 mon.put("intMPMax", actMon.MPMax);
  296.                 mon.put("intHP", actMon.HP);
  297.                 mon.put("bRed", "0");
  298.  
  299.                 monBranch.add(mon);
  300.             }
  301.         }
  302.  
  303.         return monBranch;
  304.     }
  305.  
  306.     private JSONArray getMonDef(String mapName) {
  307.         JSONArray monDef = new JSONArray();
  308.         Area area = worldAreas.get(mapName);
  309.  
  310.         for (String MonID : area.monsters) {
  311.             JSONObject mon = new JSONObject();
  312.             int monId = Integer.parseInt(MonID);
  313.             Monster monObj = worldMonsters.get(monId);
  314.  
  315.             mon.put("sRace", monObj.Race);
  316.             mon.put("MonID", monId);
  317.             mon.put("intMP", monObj.MP);
  318.             mon.put("intLevel", monObj.Level);
  319.             mon.put("intMPMax", monObj.MP);
  320.             mon.put("intHPMax", monObj.HP);
  321.             mon.put("intHP", monObj.HP);
  322.             mon.put("strBehave", "walk");
  323.             mon.put("strElement", monObj.Element);
  324.             mon.put("strLinkage", monObj.Linkage);
  325.             mon.put("strMonFileName", monObj.FileName);
  326.             mon.put("strMonName", monObj.Name);
  327.  
  328.             monDef.add(mon);
  329.         }
  330.  
  331.  
  332.         return monDef;
  333.     }
  334.  
  335.     private JSONArray getMonMap(String mapName) {
  336.         JSONArray monMap = new JSONArray();
  337.         Area area = worldAreas.get(mapName);
  338.  
  339.         if (area.monTree.length > 0) {
  340.             for (int i = 0; i < area.monTree.length; i++) {
  341.                 JSONObject mon = new JSONObject();
  342.  
  343.                 mon.put("MonMapID", (i + 1));
  344.                 mon.put("strFrame", area.monFrame[i]);
  345.                 mon.put("intRSS", -1);
  346.                 mon.put("MonID", area.monTree[i]);
  347.                 mon.put("bRed", 0);
  348.  
  349.                 monMap.add(mon);
  350.             }
  351.         }
  352.  
  353.         return monMap;
  354.     }
  355.  
  356.     private JSONArray getUserBranch(Room room) {
  357.         JSONArray userBranch = new JSONArray();
  358.  
  359.         User[] users = room.getAllUsers();
  360.         for (User user : users) {
  361.             JSONObject uObj = new JSONObject();
  362.  
  363.             uObj.put("uoName", user.getName());
  364.             uObj.put("strUsername", user.getName());
  365.             uObj.put("afk", user.properties.get("afk"));
  366.             uObj.put("ty", user.properties.get("ty"));
  367.             uObj.put("tx", user.properties.get("tx"));
  368.             uObj.put("strPad", user.properties.get("Pad"));
  369.             uObj.put("strFrame", user.properties.get("Frame"));
  370.             uObj.put("intHP", user.properties.get("HP"));
  371.             uObj.put("intMP", user.properties.get("MP"));
  372.             uObj.put("intState", user.properties.get("State"));
  373.             uObj.put("entType", "p");
  374.             uObj.put("entID", user.getUserId());
  375.             uObj.put("showHelm", true);
  376.             uObj.put("showCloak", true);
  377.             uObj.put("intHPMax", user.properties.get("HPMax"));
  378.             uObj.put("intMPMax", user.properties.get("MPMax"));
  379.             uObj.put("intLevel", user.properties.get("Level"));
  380.  
  381.             userBranch.add(uObj);
  382.         }
  383.  
  384.         return userBranch;
  385.     }
  386.  
  387.     private boolean isInteger(String input) {
  388.         try {
  389.             Integer.parseInt(input);
  390.             return true;
  391.         } catch (NumberFormatException nfe) {
  392.             return false;
  393.         }
  394.     }
  395.  
  396.     int availableRoomNumber(String roomName) {
  397.         int lastRoomNum = 0;
  398.         Object[] rooms = zone.getRooms();
  399.         for (Object roomObj : rooms) {
  400.             Room room = (Room) roomObj;
  401.             String[] arr = room.getName().split("-");
  402.             String rName = arr[0];
  403.             String rKey = arr[1];
  404.             if (rName.equals(roomName)) {
  405.                 if (isInteger(rKey)) {
  406.                     if (room.howManyUsers() >= room.getMaxUsers()) {
  407.                         lastRoomNum = Integer.parseInt(rKey);
  408.                     } else if (room.howManyUsers() < room.getMaxUsers()) {
  409.                         return Integer.parseInt(rKey);
  410.                     }
  411.                 }
  412.             }
  413.         }
  414.         lastRoomNum = (lastRoomNum == 0) ? (1) : (lastRoomNum + 1);
  415.         return lastRoomNum;
  416.     }
  417.  
  418.     private void joinRoom(User user, String roomName) throws ExtensionHelperException {
  419.         roomName = roomName.toLowerCase();
  420.         String roomKey;
  421.         String areaName;
  422.         if (roomName.contains("-")) {
  423.             areaName = roomName.split("-")[0];
  424.         } else {
  425.             roomKey = String.valueOf(availableRoomNumber(roomName));
  426.             areaName = roomName;
  427.             roomName = roomName + "-" + roomKey;
  428.         }
  429.  
  430.         LinkedList<SocketChannel> userChan = new LinkedList<SocketChannel>();
  431.         userChan.add(user.getChannel());
  432.  
  433.         if (!worldAreas.containsKey(areaName)) {
  434.             String[] failed = {"warning", "\"" + areaName + "\" is not a recognized map name."};
  435.             sendResponse(failed, -1, null, userChan);
  436.             return;
  437.         }
  438.  
  439.         Area area = worldAreas.get(areaName);
  440.         String extra = area.Extra;
  441.         int Upgrade = Integer.parseInt(user.properties.get("UpgradeDays").toString());
  442.  
  443.         if (extra.equals("bStaff") && (user.isAdmin() || user.isModerator())) {
  444.             String[] failed = {"warning", "\"" + areaName + "\" is staff only."};
  445.             sendResponse(failed, -1, null, userChan);
  446.             return;
  447.         } else if (extra.equals("bUpg") && Upgrade < 0) {
  448.             String[] failed = {"warning", "\"" + areaName + "\" is member only."};
  449.             sendResponse(failed, -1, null, userChan);
  450.             return;
  451.         }
  452.  
  453.         Room room = zone.getRoomByName(roomName);
  454.  
  455.         if (room != null) {
  456.             if (room.howManyUsers() < room.getMaxUsers()) {
  457.                 if (room.contains(user.getName())) {
  458.                     String[] failed = {"warning", "Cannot join a room you are currently in!"};
  459.                     sendResponse(failed, -1, null, userChan);
  460.                     return;
  461.                 }
  462.  
  463.                 helper.joinRoom(user, user.getRoom(), room.getId(), true, "", false, true);
  464.                 sendRoomData(user, room);
  465.                 System.out.println(user.getName() + " joined room '" + room.getName() + "'");
  466.                 String[] success = {"server", "You joined \"" + room.getName() + "\"!"};
  467.                 sendResponse(success, -1, null, userChan);
  468.             } else {
  469.                 String[] failed = {"warning", "Room join failed, destination room is full."};
  470.                 sendResponse(failed, -1, null, userChan);
  471.             }
  472.         } else {
  473.             Room newRoom = createRoom(roomName);
  474.  
  475.             if (newRoom != null) {
  476.                 helper.joinRoom(user, user.getRoom(), newRoom.getId(), true, "", false, true);
  477.                 sendRoomData(user, newRoom);
  478.                 String[] success = {"server", "You joined \"" + newRoom.getName() + "\"!"};
  479.                 sendResponse(success, -1, null, userChan);
  480.             }
  481.         }
  482.     }
  483.  
  484.     Room createRoom(String roomName) {
  485.         Room newRoom = null;
  486.         String areaName = roomName.split("-")[0];
  487.         Area area = worldAreas.get(areaName);
  488.  
  489.         HashMap<String, String> map = new HashMap<String, String>();
  490.         map.put("name", roomName);
  491.         map.put("pwd", "");
  492.         map.put("maxU", String.valueOf(area.MaxPlayers));
  493.         map.put("maxS", "0");
  494.         map.put("isGame", "false");
  495.         map.put("uCount", "false");
  496.  
  497.         //Create Room Monster Vars
  498.         Map<Integer, ActiveMonster> monVars = new HashMap<Integer, ActiveMonster>();
  499.  
  500.         if (area.monTree.length > 0) {
  501.             int i = 1;
  502.             for (String MonID : area.monTree) {
  503.                 Monster monObj = worldMonsters.get(Integer.parseInt(MonID));
  504.                 ActiveMonster actMon = new ActiveMonster();
  505.                 actMon.HP = monObj.HP;
  506.                 actMon.MP = monObj.MP;
  507.                 actMon.HPMax = monObj.HP;
  508.                 actMon.MPMax = monObj.MP;
  509.                 actMon.State = 1;
  510.                 actMon.MonID = Integer.parseInt(MonID);
  511.                 actMon.Level = monObj.Level;
  512.                 actMon.Exp = monObj.Exp;
  513.                 actMon.Gold = monObj.Gold;
  514.                 actMon.Rep = monObj.Rep;
  515.                 actMon.DPS = monObj.DPS;
  516.  
  517.                 monVars.put(i, actMon);
  518.                 i++;
  519.             }
  520.         }
  521.  
  522.         try {
  523.             newRoom = helper.createRoom(zone, map, null, false, false);
  524.             newRoom.properties.put("monVars", monVars);
  525.         } catch (ExtensionHelperException ehe) {
  526.             System.out.println("Could not create room: " + roomName + ", Reason: " + ehe.getMessage());
  527.         }
  528.  
  529.         return newRoom;
  530.     }
  531.  
  532.     private void sendUserDatas(User user, String[] userIds) {
  533.         LinkedList<SocketChannel> channels = new LinkedList<SocketChannel>();
  534.         channels.add(user.getChannel());
  535.  
  536.         JSONObject ud = new JSONObject();
  537.         ud.put("cmd", "initUserDatas");
  538.  
  539.         ud.put("a", getUserDatas(userIds, user.getUserId()));
  540.  
  541.         sendResponse(ud, -1, user, channels);
  542.     }
  543.  
  544.     private void sendUserData(User user, int userId) {
  545.         JSONObject userData = getUserData(userId, false);
  546.         JSONObject userInfo = new JSONObject();
  547.         userInfo.put("uid", userId);
  548.         userInfo.put("strFrame", user.properties.get("Frame"));
  549.         userInfo.put("strPad", user.properties.get("Pad"));
  550.         userInfo.put("data", userData);
  551.         userInfo.put("cmd", "initUserData");
  552.  
  553.         sendResponse(userInfo, -1, user, getUserChannelList(user));
  554.     }
  555.  
  556.     private LinkedList<SocketChannel> getUserChannelList(User user) {
  557.         LinkedList<SocketChannel> channels = new LinkedList<SocketChannel>();
  558.         channels.add(user.getChannel());
  559.  
  560.         return channels;
  561.     }
  562.  
  563.     private JSONArray getUserDatas(String[] userIds, int callerId) {
  564.         JSONArray a = new JSONArray();
  565.         for (String userId : userIds) {
  566.             User user = helper.getUserById(Integer.parseInt(userId));
  567.             boolean addInfo = (callerId == Integer.parseInt(userId));
  568.             JSONObject userData = getUserData(Integer.parseInt(userId), addInfo);
  569.             JSONObject userInfo = new JSONObject();
  570.  
  571.             userInfo.put("uid", userId);
  572.             userInfo.put("strFrame", user.properties.get("Frame"));
  573.             userInfo.put("strPad", user.properties.get("Pad"));
  574.             userInfo.put("data", userData);
  575.  
  576.             a.add(userInfo);
  577.         }
  578.  
  579.         return a;
  580.     }
  581.  
  582.     private JSONObject getUserData(int id, boolean addInfo) {
  583.         JSONObject ud = new JSONObject();
  584.         User user = helper.getUserById(id);
  585.  
  586.         System.out.println(">> Retrieve user data for:" + user.getName());
  587.  
  588.         JSONObject eqp = (JSONObject) user.properties.get("eqp");
  589.         int classItemId = Integer.parseInt(eqp.getJSONObject("ar").get("ItemID").toString());
  590.  
  591.         ud.put("intColorAccessory", user.properties.get("ColorAccessory"));
  592.         ud.put("iCP", user.properties.get("ClassPoints"));
  593.         ud.put("intLevel", user.properties.get("Level"));
  594.         ud.put("intMP", user.properties.get("MP"));
  595.         ud.put("eqp", eqp);
  596.         ud.put("intColorSkin", user.properties.get("ColorSkin"));
  597.         ud.put("intMPMax", user.properties.get("MPMax"));
  598.         ud.put("intHPMax", user.properties.get("HPMax"));
  599.         ud.put("intColorTrim", user.properties.get("ColorTrim"));
  600.         ud.put("intColorBase", user.properties.get("ColorBase"));
  601.         ud.put("intHP", user.properties.get("HP"));
  602.         ud.put("intColorEye", user.properties.get("ColorEye"));
  603.         ud.put("intAccessLevel", user.properties.get("Access"));
  604.         ud.put("strHairName", user.properties.get("HairName"));
  605.         ud.put("strHairFilename", user.properties.get("HairFile"));
  606.         ud.put("intColorHair", user.properties.get("ColorHair"));
  607.         ud.put("HairID", user.properties.get("HairID"));
  608.         ud.put("strClassName", worldItems.get(classItemId).Name);
  609.         ud.put("strGender", user.properties.get("Gender"));
  610.         ud.put("strUsername", user.getName());
  611.  
  612.         if (addInfo) {
  613.             ud.put("strClassName", "");
  614.             ud.put("iCP", 0);
  615.             ud.put("eqp", new Object[0]);
  616.             ud.put("iCP", user.properties.get("ClassPoints"));
  617.             ud.put("iBagSlots", user.properties.get(""));
  618.             ud.put("ig0", 0);
  619.             ud.put("iUpgDays", user.properties.get(""));
  620.             ud.put("sCountry", user.properties.get("Country"));
  621.             ud.put("iSTR", "0");
  622.             ud.put("ip0", 0);
  623.             ud.put("iq0", 0);
  624.             ud.put("iWIS", "0");
  625.             ud.put("iAge", user.properties.get("Age"));
  626.             ud.put("intExpToLevel", "20000");
  627.             ud.put("intGold", user.properties.get("Gold"));
  628.             ud.put("sHouseInfo", new Object[0]);
  629.             ud.put("iBankSlots", user.properties.get("BankSlots"));
  630.             ud.put("iHouseSlots", user.properties.get("HouseSlots"));
  631.             ud.put("id0", 0);
  632.             ud.put("id1", 0);
  633.             ud.put("iUpgMAS", "3");
  634.             ud.put("dUpgExp", user.properties.get("UpgradeExpire").toString().replaceAll(" ", "T"));
  635.             ud.put("iUpg", user.properties.get("Upgrade"));
  636.             ud.put("iBoostXP", 0);
  637.             ud.put("iBoostG", 0);
  638.             ud.put("CharID", user.properties.get("id"));
  639.             ud.put("strEmail", user.properties.get("Email"));
  640.             ud.put("iINT", "0");
  641.             ud.put("lastArea", user.properties.get("LastArea"));
  642.             ud.put("iFounder", "0");
  643.             ud.put("intDBExp", user.properties.get("Exp"));
  644.             ud.put("intExp", user.properties.get("Exp"));
  645.             ud.put("UserID", user.getUserId());
  646.             ud.put("ia1", user.properties.get("Settings"));
  647.             ud.put("ia0", user.properties.get("Achievement"));
  648.             ud.put("dCreated", user.properties.get("DateCreated").toString().replaceAll(" ", "T"));
  649.             //ud.put("iup0", "4");
  650.             ud.put("strQuests", user.properties.get("Quests"));
  651.             ud.put("bitSuccess", "1");
  652.             ud.put("bPermaMute", user.properties.get("Permamute"));
  653.             ud.put("iLCK", "0");
  654.             ud.put("iDailyAds", 0);
  655.             ud.put("iDBCP", 0);
  656.             ud.put("intDBGold", user.properties.get("Gold"));
  657.             ud.put("intActivationFlag", user.properties.get("ActivationFlag"));
  658.             ud.put("iDEX", "0");
  659.             ud.put("iDailyAdCap", 6);
  660.             ud.put("intCoins", user.properties.get("Coins"));
  661.             ud.put("iEND", "0");
  662.             ud.put("strMapName", zone.getRoom(user.getRoom()).getName().split("-")[0]);
  663.         }
  664.  
  665.         return ud;
  666.     }
  667.  
  668.     private boolean isNoneEnhancement(String type) {
  669.         return (type.equals("Enhancement") || type.equals("Armor")
  670.                 || type.equals("Quest Item") || type.equals("Item")
  671.                 || type.equals("Necklace") || type.equals("Pet"));
  672.     }
  673.  
  674.     private void loadSkills(User user) {
  675.         Class classObj = worldClasses.get(Integer.parseInt(String.valueOf(user.properties.get("ClassID"))));
  676.         int rank = getRankFromCP((Integer) user.properties.get("ClassPoints"));
  677.  
  678.         JSONArray active = new JSONArray();
  679.         JSONArray passive = new JSONArray();
  680.         JSONObject sAct = new JSONObject();
  681.         sAct.put("cmd", "sAct");
  682.  
  683.         for (int i = 0; i < 2; i++) {
  684.             PassiveSkill passiveSkill = worldPassiveSkills.get(Integer.parseInt(classObj.Passives[i]));
  685.             JSONObject passObj = new JSONObject();
  686.             passObj.put("icon", passiveSkill.Icon);
  687.             passObj.put("ref", passiveSkill.Ref);
  688.             passObj.put("nam", passiveSkill.Name);
  689.             passObj.put("desc", passiveSkill.Desc);
  690.             if (rank <= 3) {
  691.                 passObj.put("isOK", false);
  692.             } else {
  693.                 passObj.put("isOK", true);
  694.             }
  695.             passObj.put("auras", new Object[0]);
  696.             passObj.put("typ", passiveSkill.Type);
  697.             passive.add(passObj);
  698.         }
  699.  
  700.         for (int i = 0; i < 5; i++) {
  701.             ActiveSkill activeSkill = worldActiveSkills.get(Integer.parseInt(classObj.Skills[i]));
  702.             JSONObject actObj = new JSONObject();
  703.  
  704.             actObj.put("icon", activeSkill.Icon);
  705.             actObj.put("mp", activeSkill.Mana);
  706.             actObj.put("nam", activeSkill.Name);
  707.             actObj.put("anim", activeSkill.Anim);
  708.             actObj.put("desc", activeSkill.Desc);
  709.             if (rank <= 1 && i == 2) {
  710.                 actObj.put("isOK", false);
  711.             } else if (rank <= 2 && i == 3) {
  712.                 actObj.put("isOK", false);
  713.             } else if (rank <= 4 && i == 4) {
  714.                 actObj.put("isOK", false);
  715.             } else {
  716.                 actObj.put("isOK", true);
  717.             }
  718.             if (activeSkill.TgtMax > 0) {
  719.                 actObj.put("tgtMax", activeSkill.TgtMax);
  720.                 actObj.put("tgtMin", activeSkill.TgtMin);
  721.             }
  722.             actObj.put("range", activeSkill.Range);
  723.             actObj.put("fx", activeSkill.FX);
  724.             actObj.put("damage", activeSkill.Damage);
  725.             actObj.put("dsrc", activeSkill.Dsrc);
  726.             actObj.put("ref", activeSkill.Ref);
  727.             if (activeSkill.Ref.equals("aa")) {
  728.                 actObj.put("auto", true);
  729.             }
  730.             actObj.put("tgt", activeSkill.Tgt);
  731.             actObj.put("typ", activeSkill.Typ);
  732.             actObj.put("str1", activeSkill.Str1);
  733.             actObj.put("cd", activeSkill.CD);
  734.  
  735.             active.add(actObj);
  736.         }
  737.  
  738.         JSONObject potionObj = new JSONObject();
  739.         potionObj.put("icon", "icu1");
  740.         potionObj.put("nam", "Potions");
  741.         potionObj.put("anim", "Salute");
  742.         potionObj.put("mp", 0);
  743.         potionObj.put("desc", "Equip a potion or scroll from your inventory to use it here.");
  744.         potionObj.put("isOK", true);
  745.         potionObj.put("range", 808);
  746.         potionObj.put("fx", "");
  747.         potionObj.put("ref", "i1");
  748.         potionObj.put("tgt", "f");
  749.         potionObj.put("typ", "m");
  750.         potionObj.put("str1", "");
  751.         potionObj.put("cd", 5000);
  752.         active.add(potionObj);
  753.  
  754.         JSONObject actions = new JSONObject();
  755.  
  756.         actions.put("passive", passive);
  757.         actions.put("active", active);
  758.         sAct.put("actions", actions);
  759.  
  760.         sendResponse(sAct, -1, user, getUserChannelList(user));
  761.     }
  762.  
  763.     private void updateClass(User user, String className, int classId) {
  764.         ArrayList queryRes = db.executeQuery("SELECT quantity FROM users_items WHERE equipped=1 AND equipment='ar' AND userid=" + user.properties.get("id"));
  765.         int classPoints = Integer.parseInt(((DataRow) queryRes.get(0)).getItem("quantity"));
  766.  
  767.         user.properties.put("ClassID", classId);
  768.         user.properties.put("ClassPoints", classPoints);
  769.  
  770.         Class classObj = worldClasses.get(classId);
  771.  
  772.         JSONObject updateClass = new JSONObject();
  773.         updateClass.put("uid", user.getUserId());
  774.         updateClass.put("sStats", classObj.Stats);
  775.         updateClass.put("iCP", classPoints);
  776.         updateClass.put("cmd", "updateClass");
  777.         updateClass.put("sDesc", classObj.Desc);
  778.         updateClass.put("sClassCat", classObj.ClassCat);
  779.         if (classObj.MRM.contains(":")) {
  780.             updateClass.put("aMRM", classObj.MRM.split(","));
  781.         } else {
  782.             updateClass.put("aMRM", classObj.MRM);
  783.         }
  784.         updateClass.put("sClassName", className);
  785.  
  786.         sendResponse(updateClass, -1, user, getUserChannelList(user));
  787.  
  788.         updateClass.clear();
  789.         updateClass.put("uid", user.getUserId());
  790.         updateClass.put("iCP", classPoints);
  791.         updateClass.put("cmd", "updateClass");
  792.         updateClass.put("sClassCat", classObj.ClassCat);
  793.         updateClass.put("sClassName", className);
  794.  
  795.         sendToUsersButOne(zone.getRoom(user.getRoom()), user, updateClass);
  796.     }
  797.  
  798.     private void unequipItem(User user, int id) {
  799.         JSONObject uni = new JSONObject();
  800.         String es = worldItems.get(id).ES;
  801.         uni.put("cmd", "unequipItem");
  802.         uni.put("ItemID", id);
  803.         uni.put("uid", user.getUserId());
  804.         uni.put("strES", es);
  805.  
  806.         //Send to room
  807.         sendResponse(uni, -1, user, zone.getRoom(user.getRoom()).getChannellList());
  808.         //Update equipment
  809.         JSONObject eqp = (JSONObject) user.properties.get("eqp");
  810.         eqp.remove(es);
  811.         user.properties.put("eqp", eqp);
  812.         //Update database
  813.         db.executeCommand("UPDATE users_items SET equipped=0 WHERE userid=" + user.properties.get("id") + " AND itemid=" + id);
  814.     }
  815.  
  816.     private void equipItem(User user, int id) {
  817.         JSONObject equipItem = new JSONObject();
  818.         Room room = zone.getRoom(user.getRoom());
  819.         Item itemObj = worldItems.get(id);
  820.  
  821.         equipItem.put("uid", user.getUserId());
  822.         equipItem.put("cmd", "equipItem");
  823.         equipItem.put("ItemID", id);
  824.         equipItem.put("strES", itemObj.ES);
  825.         equipItem.put("sFile", itemObj.File);
  826.         equipItem.put("sLink", itemObj.Link);
  827.         if (itemObj.ES.equals("Weapon")) {
  828.             equipItem.put("sType", itemObj.Type);
  829.         }
  830.  
  831.         //Send to room
  832.         sendResponse(equipItem, -1, user, room.getChannellList());
  833.         //Update equipment
  834.         JSONObject eqp = (JSONObject) user.properties.get("eqp");
  835.         JSONObject eqpObj = new JSONObject();
  836.         eqpObj.put("ItemID", id);
  837.         eqpObj.put("sFile", itemObj.File);
  838.         eqpObj.put("sLink", itemObj.Link);
  839.         if (itemObj.ES.equals("Weapon")) {
  840.             eqpObj.put("sType", itemObj.Type);
  841.         }
  842.  
  843.         eqp.put(itemObj.ES, eqpObj);
  844.  
  845.         user.properties.put("eqp", eqp);
  846.  
  847.         //If item is Class then
  848.         if (itemObj.ES.equals("ar")) {
  849.             updateClass(user, itemObj.Name, itemObj.ClassID);
  850.             loadSkills(user);
  851.         }
  852.  
  853.         //Update Database
  854.         db.executeCommand("UPDATE users_items SET equipped=0 WHERE userid=" + user.properties.get("id") + " AND equipment='" + itemObj.ES + "'");
  855.         db.executeCommand("UPDATE users_items SET equipped=1 WHERE userid=" + user.properties.get("id") + " AND equipment='" + itemObj.ES + "' AND itemid=" + id);
  856.     }
  857.  
  858.     private void equipItems(User user) {
  859.         JSONObject eqp = (JSONObject) user.properties.get("eqp");
  860.         for (Object key : eqp.keySet()) {
  861.             debug("Equipping set: " + key);
  862.             equipItem(user, (Integer) eqp.getJSONObject(key.toString()).get("ItemID"));
  863.         }
  864.     }
  865.  
  866.     private void loadInventoryBig(User user) {
  867.         equipItems(user);
  868.  
  869.         JSONObject lib = new JSONObject();
  870.         JSONArray items = new JSONArray();
  871.  
  872.         String sql = "SELECT id,itemid,equipped,level,quantity,enhid FROM users_items WHERE inbank=0 AND userid=" + user.properties.get("id");
  873.         ArrayList queryRes = db.executeQuery(sql);
  874.         for (Object rowObj : queryRes) {
  875.             DataRow row = (DataRow) rowObj;
  876.             JSONObject item = new JSONObject();
  877.  
  878.             int itemId = Integer.parseInt(row.getItem("itemid"));
  879.             if (worldItems.containsKey(itemId)) {
  880.                 Item itemObj = worldItems.get(itemId);
  881.                 item.put("sIcon", itemObj.Icon);
  882.                 item.put("ItemID", itemId);
  883.                 item.put("iLvl", itemObj.Lvl);
  884.                 item.put("sElmt", itemObj.Elmt);
  885.                 item.put("bTemp", itemObj.Temp);
  886.                 item.put("sLink", itemObj.Link);
  887.                 item.put("bStaff", itemObj.Staff);
  888.                 item.put("CharItemID", row.getItem("id"));
  889.                 item.put("iRng", itemObj.Rng);
  890.                 item.put("bCoins", itemObj.Coins);
  891.                 item.put("sES", itemObj.ES);
  892.                 item.put("sFile", itemObj.File);
  893.                 item.put("sType", itemObj.Type);
  894.                 item.put("sDesc", itemObj.Desc);
  895.                 item.put("iStk", itemObj.Stk);
  896.                 item.put("bBank", "0");
  897.                 item.put("iCost", itemObj.Cost);
  898.                 item.put("bEquip", row.getItem("equipped"));
  899.                 item.put("bUpg", itemObj.Upg);
  900.                 item.put("iRty", itemObj.Rty);
  901.                 item.put("sName", itemObj.Name);
  902.                 item.put("iQty", row.getItem("quantity"));
  903.  
  904.                 if (itemObj.ES.equals("Weapon")) {
  905.                     item.put("iDPS", "" + itemObj.DPS);
  906.                 }
  907.  
  908.                 if (isNoneEnhancement(itemObj.Type)) {
  909.                     item.put("EnhID", itemObj.EnhID);
  910.                     item.put("PatternID", itemObj.EnhPatternID);
  911.                     item.put("iLvl", itemObj.Lvl);
  912.                 } else if (itemObj.EnhID > 0) {
  913.                     item.put("iLvl", row.getItem("level"));
  914.                     item.put("EnhLvl", row.getItem("level"));
  915.                     item.put("EnhID", itemObj.EnhID);
  916.                     item.put("EnhRty", itemObj.Rty);
  917.                     item.put("EnhPatternID", row.getItem("enhid"));
  918.                     if (itemObj.ES.equals("Weapon")) {
  919.                         item.put("EnhDPS", itemObj.DPS);
  920.                     }
  921.                 } else {
  922.                     item.put("EnhID", "" + itemObj.EnhID);
  923.                 }
  924.  
  925.                 items.add(item);
  926.             }
  927.         }
  928.  
  929.         lib.put("cmd", "loadInventoryBig");
  930.         lib.put("friends", new Object[0]);
  931.         lib.put("items", items);
  932.         lib.put("factions", new Object[0]);
  933.         lib.put("hitems", new Object[0]);
  934.  
  935.         LinkedList userChan = getUserChannelList(user);
  936.  
  937.         sendResponse(lib, -1, user, userChan);
  938.         String[] success = {"server", "Character load complete."};
  939.         sendResponse(success, -1, user, userChan);
  940.     }
  941.  
  942.     private void initUserProperties(User user) {
  943.         String sql = "SELECT * FROM users WHERE id=" + user.properties.get("id");
  944.         ArrayList queryRes = db.executeQuery(sql);
  945.         if (queryRes != null && queryRes.size() > 0) {
  946.             DataRow row = (DataRow) queryRes.get(0);
  947.             user.properties.put("Access", row.getItem("Access"));
  948.             user.properties.put("ActivationFlag", row.getItem("ActivationFlag"));
  949.             user.properties.put("Age", row.getItem("Age"));
  950.             user.properties.put("Gender", row.getItem("Gender"));
  951.             user.properties.put("Email", row.getItem("Email"));
  952.             user.properties.put("Level", row.getItem("Level"));
  953.             user.properties.put("Gold", row.getItem("Gold"));
  954.             user.properties.put("Coins", row.getItem("Coins"));
  955.             user.properties.put("Exp", row.getItem("Exp"));
  956.             user.properties.put("ColorHair", row.getItem("ColorHair"));
  957.             user.properties.put("ColorTrim", row.getItem("ColorTrim"));
  958.             user.properties.put("ColorBase", row.getItem("ColorBase"));
  959.             user.properties.put("ColorSkin", row.getItem("ColorSkin"));
  960.             user.properties.put("ColorEye", row.getItem("ColorEye"));
  961.             user.properties.put("ColorAccessory", row.getItem("ColorAccessory"));
  962.             user.properties.put("DateCreated", row.getItem("DateCreated"));
  963.             user.properties.put("UpgradeExpire", row.getItem("UpgradeExpire"));
  964.             user.properties.put("UpgradeDays", row.getItem("UpgradeDays"));
  965.             user.properties.put("BankSlots", row.getItem("BankSlots"));
  966.             user.properties.put("HouseSlots", row.getItem("HouseSlots"));
  967.             user.properties.put("BagSlots", row.getItem("BagSlots"));
  968.             user.properties.put("HairID", row.getItem("HairID"));
  969.             user.properties.put("HairFile", row.getItem("HairFile"));
  970.             user.properties.put("HairName", row.getItem("HairName"));
  971.             user.properties.put("Permamute", row.getItem("Permamute"));
  972.             user.properties.put("Quests", row.getItem("Quests"));
  973.             user.properties.put("Settings", row.getItem("Settings"));
  974.             user.properties.put("Achievement", row.getItem("Achievement"));
  975.             user.properties.put("LastArea", row.getItem("LastArea"));
  976.             user.properties.put("Country", row.getItem("Country"));
  977.  
  978.             //User DataLeaf
  979.             user.properties.put("Pad", "Spawn");
  980.             user.properties.put("Frame", "Enter");
  981.             user.properties.put("tx", 0);
  982.             user.properties.put("ty", 0);
  983.             user.properties.put("afk", false);
  984.             user.properties.put("State", 1);
  985.             user.properties.put("HP", 1000);
  986.             user.properties.put("MP", 1000);
  987.             user.properties.put("HPMax", 1000);
  988.             user.properties.put("MPMax", 1000);
  989.             System.out.println("User properties init >> " + user.getName());
  990.         }
  991.  
  992.         JSONObject eqp = new JSONObject();
  993.         sql = "SELECT itemid,quantity FROM users_items WHERE equipped=1 AND userid=" + user.properties.get("id");
  994.         queryRes = db.executeQuery(sql);
  995.         if (queryRes != null && queryRes.size() > 0) {
  996.             for (Object queryRe : queryRes) {
  997.                 DataRow row = (DataRow) queryRe;
  998.                 int id = Integer.parseInt(row.getItem("itemid"));
  999.                 Item item = worldItems.get(id);
  1000.                 JSONObject itemObj = new JSONObject();
  1001.  
  1002.                 itemObj.put("ItemID", id);
  1003.                 itemObj.put("sFile", item.File);
  1004.                 itemObj.put("sLink", item.Link);
  1005.                 if (item.ES.equals("Weapon")) {
  1006.                     itemObj.put("sType", item.Type);
  1007.                 }
  1008.                 if (item.ES.equals("ar")) {
  1009.                     user.properties.put("ClassPoints", Integer.parseInt(row.getItem("quantity")));
  1010.                     user.properties.put("ClassID", item.ClassID);
  1011.                 }
  1012.  
  1013.                 eqp.put(item.ES, itemObj);
  1014.             }
  1015.         }
  1016.  
  1017.         user.properties.put("eqp", eqp);
  1018.     }
  1019.  
  1020.     @Override
  1021.     public void handleInternalEvent(InternalEventObject ieo) {
  1022.         String evtName = ieo.getEventName();
  1023.  
  1024.         if (evtName.equals("loginRequest")) {
  1025.             String username = ieo.getParam("nick").split("~")[1];
  1026.             String password = ieo.getParam("pass");
  1027.             SocketChannel channel = (SocketChannel) ieo.getObject("chan");
  1028.             LinkedList<SocketChannel> channels = new LinkedList<SocketChannel>();
  1029.             channels.add(channel);
  1030.  
  1031.             String sql = "SELECT id,Access FROM users WHERE Username='" + username + "' AND Password='" + password + "'";
  1032.             ArrayList queryRes = db.executeQuery(sql);
  1033.             if (queryRes != null && queryRes.size() > 0) {
  1034.                 try {
  1035.                     DataRow row = (DataRow) queryRes.get(0);
  1036.                     User user = helper.canLogin(username, password, channel, this.getOwnerZone());
  1037.                     user.properties.put("id", row.getItem("id"));
  1038.                     initUserProperties(user);
  1039.                     int access = Integer.parseInt(row.getItem("Access"));
  1040.                     if(access > 39) {
  1041.                         user.setAsModerator();
  1042.                     }
  1043.                     if(access > 59) {
  1044.                         user.setAsAdmin();
  1045.                     }
  1046.  
  1047.                     String[] party = {"server", "Accepting party invites."};
  1048.                     sendResponse(party, -1, null, channels);
  1049.                     String[] gotos = {"server", "Accepting goto requests."};
  1050.                     sendResponse(gotos, -1, null, channels);
  1051.                     String[] friend = {"server", "Accepting Friend invites."};
  1052.                     sendResponse(friend, -1, null, channels);
  1053.                     String[] tooltip = {"server", "Ability ToolTips will always show on mouseover."};
  1054.                     sendResponse(tooltip, -1, null, channels);
  1055.                     String[] duel = {"server", "Accepting duel invites."};
  1056.                     sendResponse(duel, -1, null, channels);
  1057.                     String[] facebook = {"warning", "Event sharing via Facebook is disabled."};
  1058.                     sendResponse(facebook, -1, null, channels);
  1059.  
  1060.                     String[] loginResponse = new String[7];
  1061.                     loginResponse[0] = "loginResponse";
  1062.                     loginResponse[1] = "true";
  1063.                     loginResponse[2] = String.valueOf(user.getUserId());
  1064.                     loginResponse[3] = username;
  1065.                     loginResponse[4] = "Welcome to Pre-Alpha Project 6!";
  1066.                     loginResponse[5] = Long.toString(new Date().getTime());
  1067.                     loginResponse[6] = newsString;
  1068.  
  1069.                     sendResponse(loginResponse, -1, null, channels);
  1070.                     JSONObject _cvu = new JSONObject();
  1071.                     JSONObject o = new JSONObject();
  1072.                     for (String key : cvu.keySet()) {
  1073.                         o.put(key, cvu.get(key));
  1074.                     }
  1075.  
  1076.                     _cvu.put("cmd", "cvu");
  1077.                     _cvu.put("o", o);
  1078.  
  1079.                     sendResponse(_cvu, -1, user, channels);
  1080.  
  1081.                 } catch (LoginException le) {
  1082.                     System.out.println(le.getMessage());
  1083.                 }
  1084.             } else {
  1085.                 String[] loginResponse = new String[5];
  1086.                 loginResponse[0] = "loginResponse";
  1087.                 loginResponse[1] = "false";
  1088.                 loginResponse[2] = "-1";
  1089.                 loginResponse[3] = username;
  1090.                 loginResponse[4] = "User Data for '" + username + "' could not be retrieved. Please contact the staff to resolve the issue.";
  1091.                 sendResponse(loginResponse, -1, null, channels);
  1092.             }
  1093.         } else if (evtName.equals("userJoin")) {
  1094.             User user = (User) ieo.getObject("user");
  1095.             Room room = (Room) ieo.getObject("room");
  1096.  
  1097.             JSONObject userObj = new JSONObject();
  1098.  
  1099.             userObj.put("uoName", user.getName());
  1100.             userObj.put("strUsername", user.getName());
  1101.             userObj.put("strFrame", "Enter");
  1102.             userObj.put("strPad", "Spawn");
  1103.             userObj.put("intState", Integer.parseInt(user.properties.get("State").toString()));
  1104.             userObj.put("intLevel", Integer.parseInt(user.properties.get("Level").toString()));
  1105.             userObj.put("entID", user.getUserId());
  1106.             userObj.put("entType", "p");
  1107.             userObj.put("showHelm", true);
  1108.             userObj.put("showCloak", true);
  1109.             userObj.put("intHP", Integer.parseInt(user.properties.get("HP").toString()));
  1110.             userObj.put("intMP", Integer.parseInt(user.properties.get("MP").toString()));
  1111.             userObj.put("intHPMax", Integer.parseInt(user.properties.get("HPMax").toString()));
  1112.             userObj.put("intMPMax", Integer.parseInt(user.properties.get("MPMax").toString()));
  1113.             userObj.put("tx", Integer.parseInt(user.properties.get("tx").toString()));
  1114.             userObj.put("ty", Integer.parseInt(user.properties.get("ty").toString()));
  1115.             userObj.put("afk", Boolean.parseBoolean(user.properties.get("afk").toString()));
  1116.  
  1117.             JSONObject uJoin = new JSONObject();
  1118.             uJoin.put("cmd", "uotls");
  1119.             uJoin.put("o", userObj);
  1120.             uJoin.put("unm", user.getName());
  1121.  
  1122.             sendToUsersButOne(room, user, uJoin);
  1123.         } else if (evtName.equals("serverReady")) {
  1124.             System.out.println("--- [ " + serverName + " ] -----------------------------------");
  1125.             System.out.println();
  1126.             System.out.println(">> Ready for connections");
  1127.         } else if (evtName.equals("userExit")) {
  1128.             Room room = (Room) ieo.getObject("room");
  1129.             User user = (User) ieo.getObject("user");
  1130.             exitUser(room, user);
  1131.         } else if (evtName.equals("userLost")) {
  1132.             User user = (User) ieo.getObject("user");
  1133.             exitUser(zone.getRoom(user.getRoom()), user);
  1134.         }
  1135.     }
  1136.  
  1137.     void exitUser(Room room, User user) {
  1138.         String[] exit = {"exitArea", String.valueOf(user.getUserId()), user.getName()};
  1139.         sendToUsersButOne(room, user, exit);
  1140.  
  1141.         if (room.howManyUsers() < 1)
  1142.             helper.destroyRoom(zone, room.getId());
  1143.     }
  1144.  
  1145.     void sendToUsersButOne(Room room, User _user, JSONObject o) {
  1146.         User[] users = room.getAllUsersButOne(_user);
  1147.         LinkedList<SocketChannel> channels = new LinkedList<SocketChannel>();
  1148.         for (User user : users) {
  1149.             channels.add(user.getChannel());
  1150.         }
  1151.  
  1152.         sendResponse(o, -1, _user, channels);
  1153.     }
  1154.  
  1155.     void sendToUsersButOne(Room room, User _user, String[] o) {
  1156.         User[] users = room.getAllUsersButOne(_user);
  1157.         LinkedList<SocketChannel> channels = new LinkedList<SocketChannel>();
  1158.         for (User user : users) {
  1159.             channels.add(user.getChannel());
  1160.         }
  1161.  
  1162.         sendResponse(o, -1, _user, channels);
  1163.     }
  1164.  
  1165.     void handleException(Exception e, User user) {
  1166.         System.out.println(e.getMessage() + " User: " + user.getName());
  1167.     }
  1168.  
  1169.     private void handleCmd(User user, String[] params) throws ExtensionHelperException {
  1170.         String cmd = params[0];
  1171.         if (cmd.equals("tfer")) {
  1172.             if (params.length > 3) {
  1173.                 user.properties.put("Pad", params[4]);
  1174.                 user.properties.put("Frame", params[3]);
  1175.             }
  1176.             user.properties.put("tx", 0);
  1177.             user.properties.put("ty", 0);
  1178.             joinRoom(user, params[2]);
  1179.         } else if (cmd.equals("restartnow") && (user.isAdmin() || user.isModerator())) {
  1180.             helper.rebootServer();
  1181.         } else if ((cmd.equals("iay") || cmd.equals("adminyell") && (user.isAdmin() || user.isModerator()))) {
  1182.             String[] iay = {"moderator", "(" + user.getName() + "): " + params[1]};
  1183.             sendResponse(iay, -1, user, zone.getChannelList());
  1184.         } else if ((cmd.equals("ban") && (user.isAdmin() || user.isModerator()))) {
  1185.             db.executeCommand("UPDATE users SET banned=1 WHERE userid=" + params[1]);
  1186.             String[] ban = {"warning", "(" + user.getName() + "): " + params[1] + " has been banned!"};
  1187.             sendResponse(ban, -1, user, zone.getChannelList());
  1188.         }
  1189.     }
  1190.  
  1191.     private void handleMove(String[] param, User user) {
  1192.         Room room = zone.getRoom(user.getRoom());
  1193.         user.properties.put("tx", param[0]);
  1194.         user.properties.put("ty", param[1]);
  1195.         String[] uotls = new String[3];
  1196.         uotls[0] = "uotls";
  1197.         uotls[1] = user.getName();
  1198.         uotls[2] = "sp:" + param[2] + ",tx:" + param[0] + ",ty:" + param[1] + ",strFrame:" + user.properties.get("Frame");
  1199.  
  1200.         sendToUsersButOne(room, user, uotls);
  1201.     }
  1202.  
  1203.     private void handleMTC(String[] params, User user) {
  1204.         user.properties.put("intState", 1);
  1205.         user.properties.put("strFrame", params[0]);
  1206.         user.properties.put("strPad", params[1]);
  1207.         user.properties.put("tx", 0);
  1208.         user.properties.put("ty", 0);
  1209.  
  1210.         String[] mtc = {"uotls", user.getName(), "strPad:" + params[1] + ",tx:0,strFrame:" + params[0] + ",ty:0"};
  1211.  
  1212.         sendToUsersButOne(zone.getRoom(user.getRoom()), user, mtc);
  1213.     }
  1214.  
  1215.     private void handleMessage(String[] params, User user) {
  1216.         int access = Integer.parseInt(user.properties.get("Access").toString());
  1217.  
  1218.         if (access > 0 && access < 40) params[1] = "zone";
  1219.         if (user.isModerator()) params[1] = "mod";
  1220.         if (user.isAdmin()) params[1] = "trade";
  1221.  
  1222.         Room room = zone.getRoom(user.getRoom());
  1223.         String[] chat = {"chatm", params[1] + "~" + params[0], user.getName(), String.valueOf(user.getRoom())};
  1224.         sendResponse(chat, -1, user, room.getChannellList());
  1225.     }
  1226.  
  1227.     @Override
  1228.     public void handleRequest(String cmd, String[] params, User user, int fromRoom) {
  1229.         try {
  1230.             //Long start = System.currentTimeMillis();
  1231.  
  1232.             if (cmd.equals("firstJoin")) {
  1233.                 joinRoom(user, "battleon");
  1234.             } else if (cmd.equals("cmd")) {
  1235.                 handleCmd(user, params);
  1236.             } else if (cmd.equals("moveToCell")) {
  1237.                 handleMTC(params, user);
  1238.             } else if (cmd.equals("retrieveUserDatas")) {
  1239.                 sendUserDatas(user, params);
  1240.             } else if (cmd.equals("retrieveUserData")) {
  1241.                 sendUserData(user, Integer.parseInt(params[0]));
  1242.             } else if (cmd.equals("retrieveInventory")) {
  1243.                 loadInventoryBig(user);
  1244.             } else if (cmd.equals("mv")) {
  1245.                 handleMove(params, user);
  1246.             } else if (cmd.equals("message")) {
  1247.                 handleMessage(params, user);
  1248.             } else if (cmd.equals("equipItem")) {
  1249.                 equipItem(user, Integer.parseInt(params[0]));
  1250.             } else if (cmd.equals("unequipItem")) {
  1251.                 unequipItem(user, Integer.parseInt(params[0]));
  1252.             }
  1253.  
  1254.             //Long end = System.currentTimeMillis();
  1255.             //System.out.println("For CMD: " + cmd + " " + (end - start) + "ms");
  1256.         } catch (ExtensionHelperException e) {
  1257.             handleException(e, user);
  1258.         }
  1259.     }
  1260.  
  1261.     @Override
  1262.     public void handleRequest(String cmd, ActionscriptObject aso, User user, int fromRoom) {
  1263.         // TODO Auto-generated method stub
  1264.     }
  1265.  
  1266.     @Override
  1267.     public void destroy() {
  1268.         db = null;
  1269.     }
  1270. }
Add Comment
Please, Sign In to add comment