Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.mysticworlds;
- import it.gotoandplay.smartfoxserver.data.Room;
- import it.gotoandplay.smartfoxserver.data.User;
- import it.gotoandplay.smartfoxserver.data.Zone;
- import it.gotoandplay.smartfoxserver.db.DataRow;
- import it.gotoandplay.smartfoxserver.db.DbManager;
- import it.gotoandplay.smartfoxserver.events.InternalEventObject;
- import it.gotoandplay.smartfoxserver.exceptions.ExtensionHelperException;
- import it.gotoandplay.smartfoxserver.exceptions.LoginException;
- import it.gotoandplay.smartfoxserver.extensions.AbstractExtension;
- import it.gotoandplay.smartfoxserver.extensions.ExtensionHelper;
- import it.gotoandplay.smartfoxserver.lib.ActionscriptObject;
- import net.sf.json.JSONArray;
- import net.sf.json.JSONObject;
- import org.mysticworlds.ai.ActiveMonster;
- import org.mysticworlds.world.*;
- import org.mysticworlds.world.Class;
- import java.io.*;
- import java.nio.channels.SocketChannel;
- import java.util.*;
- /**
- * MysticWorld.java
- * <p/>
- * MysticWorlds SmartFox Server Java Extension
- *
- * @author Mystical<br>
- * (c) 2011 MysticWorlds
- */
- @SuppressWarnings({"unchecked"})
- public class MysticWorld extends AbstractExtension {
- private String serverName;
- private boolean debug;
- private ExtensionHelper helper;
- private Zone zone;
- private DbManager db;
- private Map<Integer, Item> worldItems = new HashMap<Integer, Item>();
- private Map<String, Area> worldAreas = new HashMap<String, Area>();
- private Map<Integer, Monster> worldMonsters = new HashMap<Integer, Monster>();
- private Map<Integer, ActiveSkill> worldActiveSkills = new HashMap<Integer, ActiveSkill>();
- private Map<Integer, PassiveSkill> worldPassiveSkills = new HashMap<Integer, PassiveSkill>();
- private Map<Integer, Class> worldClasses = new HashMap<Integer, Class>();
- private Properties config;
- private Map<String, Object> cvu = new HashMap<String, Object>();
- private String newsString;
- private int[] arrRanks = new int[11];
- @Override
- public void init() {
- System.out.println();
- System.out.println("::::::::: { Project 6 SmartFox Extension Core } :::::::::");
- System.out.println(":: :: ::");
- System.out.println(":::::::: Version: 0.0.1.50 -- (c) 2011 Project 6 ::::::::");
- System.out.println(":: :: ::");
- System.out.println(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
- System.out.println();
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- helper = ExtensionHelper.instance();
- zone = helper.getZone(this.getOwnerZone());
- db = zone.dbManager;
- loadConfigurations();
- cacheWorldItems();
- initCVU();
- initArrRep();
- StringBuilder sb = new StringBuilder();
- ArrayList queryRes = db.executeQuery("SELECT * FROM settings_login");
- int i = 0;
- for (Object rowObj : queryRes) {
- DataRow row = (DataRow) rowObj;
- if (i != 0) {
- sb.append(",");
- }
- sb.append(row.getItem("name"));
- sb.append("=");
- sb.append(row.getItem("value"));
- i++;
- }
- newsString = sb.toString();
- }
- private void initCVU() {
- System.out.println("--- [ CVU Properties ] -----------------------------------");
- System.out.println();
- ArrayList queryRes = db.executeQuery("SELECT * FROM settings_rates");
- for (Object rowObj : queryRes) {
- DataRow row = (DataRow) rowObj;
- cvu.put(row.getItem("name"), Double.parseDouble(row.getItem("value")));
- System.out.println(row.getItem("name") + ": " + row.getItem("value"));
- }
- System.out.println();
- }
- private void initArrRep() {
- System.out.println("--- [ Reputation ] -----------------------------------");
- System.out.println();
- int i = 1;
- while (i < 10) {
- int rankExp = (int) (Math.pow((i + 1), 3) * 100);
- if (i > 1) {
- arrRanks[i] = (rankExp + arrRanks[(i - 1)]);
- } else {
- arrRanks[i] = (rankExp + 100);
- }
- System.out.println("Rank " + i + ": " + arrRanks[i]);
- i++;
- }
- System.out.println();
- }
- int getRankFromCP(int cp) {
- int i = 1;
- while (i < 10) {
- if (arrRanks[i] >= cp) {
- return i;
- }
- i++;
- }
- return -1;
- }
- void debug(Object s) {
- if(debug) System.out.println(">> " + s);
- }
- void loadConfigurations() {
- try {
- config = new Properties();
- //Get Current Directory
- String curDir = (new File(".").getCanonicalPath());
- //If config folder does not exist, create it.
- File dir = new File(curDir + "\\conf\\");
- if (!dir.exists()) {
- dir.mkdir();
- }
- //If config file does not exist, create it.
- File conf = new File(curDir + "\\conf\\MExt.conf");
- if (!conf.exists()) {
- if (conf.createNewFile()) {
- Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(curDir + "\\conf\\MExt.conf"), "8859_1"));
- config.setProperty("org.mysticworlds.servername", "Test Server");
- config.setProperty("org.mysticworlds.staffonly", "false");
- config.setProperty("org.mysticworlds.memberonly", "false");
- config.setProperty("org.mysticworlds.debug", "false");
- config.store(writer, "MExt Properties");
- writer.close();
- }
- }
- FileInputStream fin = new FileInputStream(curDir + "\\conf\\MExt.conf");
- config.load(fin);
- serverName = config.getProperty("org.mysticworlds.servername");
- debug = Boolean.parseBoolean(config.get("org.mysticworlds.debug").toString());
- System.out.println("--- [ MExt Properties ] -----------------------------------");
- System.out.println();
- for (Object wat : config.keySet()) {
- System.out.println(wat + ": " + config.get(wat));
- }
- System.out.println();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- private void cacheWorldItems() {
- System.out.println("--- [ World Cache Operation ] -----------------------------");
- System.out.println();
- System.out.println(">> Caching world items...");
- String sql = "SELECT * FROM items";
- ArrayList queryRes = db.executeQuery(sql);
- for (Object queryRe : queryRes) {
- DataRow row = (DataRow) queryRe;
- int id = Integer.parseInt(row.getItem("id"));
- Item item = new Item(row);
- worldItems.put(id, item);
- }
- System.out.println(" -> Cached " + worldItems.size() + " world items.");
- System.out.println(">> Caching world areas...");
- sql = "SELECT * FROM maps";
- queryRes = db.executeQuery(sql);
- for (Object queryRe : queryRes) {
- DataRow row = (DataRow) queryRe;
- String name = row.getItem("Name");
- Area area = new Area(row);
- worldAreas.put(name, area);
- }
- System.out.println(" -> Cached " + worldAreas.size() + " world areas.");
- System.out.println(">> Caching world monsters...");
- sql = "SELECT * FROM monsters";
- queryRes = db.executeQuery(sql);
- for (Object queryRe : queryRes) {
- DataRow row = (DataRow) queryRe;
- int id = Integer.parseInt(row.getItem("id"));
- Monster monster = new Monster(row);
- worldMonsters.put(id, monster);
- }
- System.out.println(" -> Cached " + worldMonsters.size() + " world monsters.");
- System.out.println(">> Caching world active skills...");
- sql = "SELECT * FROM skills";
- queryRes = db.executeQuery(sql);
- for (Object queryRe : queryRes) {
- DataRow row = (DataRow) queryRe;
- int id = Integer.parseInt(row.getItem("id"));
- ActiveSkill activeSkill = new ActiveSkill(row);
- worldActiveSkills.put(id, activeSkill);
- }
- System.out.println(" -> Cached " + worldActiveSkills.size() + " world active skills.");
- System.out.println(">> Caching world passive skills...");
- sql = "SELECT * FROM passives";
- queryRes = db.executeQuery(sql);
- for (Object queryRe : queryRes) {
- DataRow row = (DataRow) queryRe;
- int id = Integer.parseInt(row.getItem("id"));
- PassiveSkill passiveSkill = new PassiveSkill(row);
- worldPassiveSkills.put(id, passiveSkill);
- }
- System.out.println(" -> Cached " + worldPassiveSkills.size() + " world passive skills.");
- System.out.println(">> Caching world classes...");
- sql = "SELECT * FROM classes";
- queryRes = db.executeQuery(sql);
- for (Object queryRe : queryRes) {
- DataRow row = (DataRow) queryRe;
- int id = Integer.parseInt(row.getItem("id"));
- Class _class = new Class(row);
- worldClasses.put(id, _class);
- }
- System.out.println(" -> Cached " + worldClasses.size() + " world classes.");
- System.out.println();
- }
- private void sendRoomData(User user, Room room) {
- String mapName = room.getName().split("-")[0];
- LinkedList<SocketChannel> userChan = new LinkedList<SocketChannel>();
- userChan.add(user.getChannel());
- Area area = worldAreas.get(mapName);
- Map<Integer, ActiveMonster> monVars = (Map<Integer, ActiveMonster>) room.properties.get("monVars");
- JSONObject object = new JSONObject();
- object.put("cmd", "moveToArea");
- object.put("areaName", room.getName());
- object.put("intKillCount", 0);
- object.put("strMapFileName", area.FileName);
- object.put("uoBranch", getUserBranch(room));
- object.put("mondef", getMonDef(mapName));
- object.put("monBranch", getMonBranch(monVars));
- object.put("intType", 1);
- object.put("wB", new Object[0]);
- object.put("monmap", getMonMap(mapName));
- object.put("sExtra", area.Extra);
- object.put("areaId", room.getId());
- object.put("strMapName", mapName);
- sendResponse(object, -1, null, userChan);
- }
- private JSONArray getMonBranch(Map<Integer, ActiveMonster> monVars) {
- JSONArray monBranch = new JSONArray();
- if (monVars.size() > 0) {
- for (int i = 1; i < (monVars.size() + 1); i++) {
- JSONObject mon = new JSONObject();
- ActiveMonster actMon = monVars.get(i);
- mon.put("intHPMax", actMon.HPMax);
- mon.put("iLvl", actMon.Level);
- mon.put("MonMapID", i);
- mon.put("MonID", actMon.MonID);
- mon.put("intMP", actMon.MP);
- mon.put("wDPS", actMon.DPS);
- mon.put("intState", actMon.State);
- mon.put("intMPMax", actMon.MPMax);
- mon.put("intHP", actMon.HP);
- mon.put("bRed", "0");
- monBranch.add(mon);
- }
- }
- return monBranch;
- }
- private JSONArray getMonDef(String mapName) {
- JSONArray monDef = new JSONArray();
- Area area = worldAreas.get(mapName);
- for (String MonID : area.monsters) {
- JSONObject mon = new JSONObject();
- int monId = Integer.parseInt(MonID);
- Monster monObj = worldMonsters.get(monId);
- mon.put("sRace", monObj.Race);
- mon.put("MonID", monId);
- mon.put("intMP", monObj.MP);
- mon.put("intLevel", monObj.Level);
- mon.put("intMPMax", monObj.MP);
- mon.put("intHPMax", monObj.HP);
- mon.put("intHP", monObj.HP);
- mon.put("strBehave", "walk");
- mon.put("strElement", monObj.Element);
- mon.put("strLinkage", monObj.Linkage);
- mon.put("strMonFileName", monObj.FileName);
- mon.put("strMonName", monObj.Name);
- monDef.add(mon);
- }
- return monDef;
- }
- private JSONArray getMonMap(String mapName) {
- JSONArray monMap = new JSONArray();
- Area area = worldAreas.get(mapName);
- if (area.monTree.length > 0) {
- for (int i = 0; i < area.monTree.length; i++) {
- JSONObject mon = new JSONObject();
- mon.put("MonMapID", (i + 1));
- mon.put("strFrame", area.monFrame[i]);
- mon.put("intRSS", -1);
- mon.put("MonID", area.monTree[i]);
- mon.put("bRed", 0);
- monMap.add(mon);
- }
- }
- return monMap;
- }
- private JSONArray getUserBranch(Room room) {
- JSONArray userBranch = new JSONArray();
- User[] users = room.getAllUsers();
- for (User user : users) {
- JSONObject uObj = new JSONObject();
- uObj.put("uoName", user.getName());
- uObj.put("strUsername", user.getName());
- uObj.put("afk", user.properties.get("afk"));
- uObj.put("ty", user.properties.get("ty"));
- uObj.put("tx", user.properties.get("tx"));
- uObj.put("strPad", user.properties.get("Pad"));
- uObj.put("strFrame", user.properties.get("Frame"));
- uObj.put("intHP", user.properties.get("HP"));
- uObj.put("intMP", user.properties.get("MP"));
- uObj.put("intState", user.properties.get("State"));
- uObj.put("entType", "p");
- uObj.put("entID", user.getUserId());
- uObj.put("showHelm", true);
- uObj.put("showCloak", true);
- uObj.put("intHPMax", user.properties.get("HPMax"));
- uObj.put("intMPMax", user.properties.get("MPMax"));
- uObj.put("intLevel", user.properties.get("Level"));
- userBranch.add(uObj);
- }
- return userBranch;
- }
- private boolean isInteger(String input) {
- try {
- Integer.parseInt(input);
- return true;
- } catch (NumberFormatException nfe) {
- return false;
- }
- }
- int availableRoomNumber(String roomName) {
- int lastRoomNum = 0;
- Object[] rooms = zone.getRooms();
- for (Object roomObj : rooms) {
- Room room = (Room) roomObj;
- String[] arr = room.getName().split("-");
- String rName = arr[0];
- String rKey = arr[1];
- if (rName.equals(roomName)) {
- if (isInteger(rKey)) {
- if (room.howManyUsers() >= room.getMaxUsers()) {
- lastRoomNum = Integer.parseInt(rKey);
- } else if (room.howManyUsers() < room.getMaxUsers()) {
- return Integer.parseInt(rKey);
- }
- }
- }
- }
- lastRoomNum = (lastRoomNum == 0) ? (1) : (lastRoomNum + 1);
- return lastRoomNum;
- }
- private void joinRoom(User user, String roomName) throws ExtensionHelperException {
- roomName = roomName.toLowerCase();
- String roomKey;
- String areaName;
- if (roomName.contains("-")) {
- areaName = roomName.split("-")[0];
- } else {
- roomKey = String.valueOf(availableRoomNumber(roomName));
- areaName = roomName;
- roomName = roomName + "-" + roomKey;
- }
- LinkedList<SocketChannel> userChan = new LinkedList<SocketChannel>();
- userChan.add(user.getChannel());
- if (!worldAreas.containsKey(areaName)) {
- String[] failed = {"warning", "\"" + areaName + "\" is not a recognized map name."};
- sendResponse(failed, -1, null, userChan);
- return;
- }
- Area area = worldAreas.get(areaName);
- String extra = area.Extra;
- int Upgrade = Integer.parseInt(user.properties.get("UpgradeDays").toString());
- if (extra.equals("bStaff") && (user.isAdmin() || user.isModerator())) {
- String[] failed = {"warning", "\"" + areaName + "\" is staff only."};
- sendResponse(failed, -1, null, userChan);
- return;
- } else if (extra.equals("bUpg") && Upgrade < 0) {
- String[] failed = {"warning", "\"" + areaName + "\" is member only."};
- sendResponse(failed, -1, null, userChan);
- return;
- }
- Room room = zone.getRoomByName(roomName);
- if (room != null) {
- if (room.howManyUsers() < room.getMaxUsers()) {
- if (room.contains(user.getName())) {
- String[] failed = {"warning", "Cannot join a room you are currently in!"};
- sendResponse(failed, -1, null, userChan);
- return;
- }
- helper.joinRoom(user, user.getRoom(), room.getId(), true, "", false, true);
- sendRoomData(user, room);
- System.out.println(user.getName() + " joined room '" + room.getName() + "'");
- String[] success = {"server", "You joined \"" + room.getName() + "\"!"};
- sendResponse(success, -1, null, userChan);
- } else {
- String[] failed = {"warning", "Room join failed, destination room is full."};
- sendResponse(failed, -1, null, userChan);
- }
- } else {
- Room newRoom = createRoom(roomName);
- if (newRoom != null) {
- helper.joinRoom(user, user.getRoom(), newRoom.getId(), true, "", false, true);
- sendRoomData(user, newRoom);
- String[] success = {"server", "You joined \"" + newRoom.getName() + "\"!"};
- sendResponse(success, -1, null, userChan);
- }
- }
- }
- Room createRoom(String roomName) {
- Room newRoom = null;
- String areaName = roomName.split("-")[0];
- Area area = worldAreas.get(areaName);
- HashMap<String, String> map = new HashMap<String, String>();
- map.put("name", roomName);
- map.put("pwd", "");
- map.put("maxU", String.valueOf(area.MaxPlayers));
- map.put("maxS", "0");
- map.put("isGame", "false");
- map.put("uCount", "false");
- //Create Room Monster Vars
- Map<Integer, ActiveMonster> monVars = new HashMap<Integer, ActiveMonster>();
- if (area.monTree.length > 0) {
- int i = 1;
- for (String MonID : area.monTree) {
- Monster monObj = worldMonsters.get(Integer.parseInt(MonID));
- ActiveMonster actMon = new ActiveMonster();
- actMon.HP = monObj.HP;
- actMon.MP = monObj.MP;
- actMon.HPMax = monObj.HP;
- actMon.MPMax = monObj.MP;
- actMon.State = 1;
- actMon.MonID = Integer.parseInt(MonID);
- actMon.Level = monObj.Level;
- actMon.Exp = monObj.Exp;
- actMon.Gold = monObj.Gold;
- actMon.Rep = monObj.Rep;
- actMon.DPS = monObj.DPS;
- monVars.put(i, actMon);
- i++;
- }
- }
- try {
- newRoom = helper.createRoom(zone, map, null, false, false);
- newRoom.properties.put("monVars", monVars);
- } catch (ExtensionHelperException ehe) {
- System.out.println("Could not create room: " + roomName + ", Reason: " + ehe.getMessage());
- }
- return newRoom;
- }
- private void sendUserDatas(User user, String[] userIds) {
- LinkedList<SocketChannel> channels = new LinkedList<SocketChannel>();
- channels.add(user.getChannel());
- JSONObject ud = new JSONObject();
- ud.put("cmd", "initUserDatas");
- ud.put("a", getUserDatas(userIds, user.getUserId()));
- sendResponse(ud, -1, user, channels);
- }
- private void sendUserData(User user, int userId) {
- JSONObject userData = getUserData(userId, false);
- JSONObject userInfo = new JSONObject();
- userInfo.put("uid", userId);
- userInfo.put("strFrame", user.properties.get("Frame"));
- userInfo.put("strPad", user.properties.get("Pad"));
- userInfo.put("data", userData);
- userInfo.put("cmd", "initUserData");
- sendResponse(userInfo, -1, user, getUserChannelList(user));
- }
- private LinkedList<SocketChannel> getUserChannelList(User user) {
- LinkedList<SocketChannel> channels = new LinkedList<SocketChannel>();
- channels.add(user.getChannel());
- return channels;
- }
- private JSONArray getUserDatas(String[] userIds, int callerId) {
- JSONArray a = new JSONArray();
- for (String userId : userIds) {
- User user = helper.getUserById(Integer.parseInt(userId));
- boolean addInfo = (callerId == Integer.parseInt(userId));
- JSONObject userData = getUserData(Integer.parseInt(userId), addInfo);
- JSONObject userInfo = new JSONObject();
- userInfo.put("uid", userId);
- userInfo.put("strFrame", user.properties.get("Frame"));
- userInfo.put("strPad", user.properties.get("Pad"));
- userInfo.put("data", userData);
- a.add(userInfo);
- }
- return a;
- }
- private JSONObject getUserData(int id, boolean addInfo) {
- JSONObject ud = new JSONObject();
- User user = helper.getUserById(id);
- System.out.println(">> Retrieve user data for:" + user.getName());
- JSONObject eqp = (JSONObject) user.properties.get("eqp");
- int classItemId = Integer.parseInt(eqp.getJSONObject("ar").get("ItemID").toString());
- ud.put("intColorAccessory", user.properties.get("ColorAccessory"));
- ud.put("iCP", user.properties.get("ClassPoints"));
- ud.put("intLevel", user.properties.get("Level"));
- ud.put("intMP", user.properties.get("MP"));
- ud.put("eqp", eqp);
- ud.put("intColorSkin", user.properties.get("ColorSkin"));
- ud.put("intMPMax", user.properties.get("MPMax"));
- ud.put("intHPMax", user.properties.get("HPMax"));
- ud.put("intColorTrim", user.properties.get("ColorTrim"));
- ud.put("intColorBase", user.properties.get("ColorBase"));
- ud.put("intHP", user.properties.get("HP"));
- ud.put("intColorEye", user.properties.get("ColorEye"));
- ud.put("intAccessLevel", user.properties.get("Access"));
- ud.put("strHairName", user.properties.get("HairName"));
- ud.put("strHairFilename", user.properties.get("HairFile"));
- ud.put("intColorHair", user.properties.get("ColorHair"));
- ud.put("HairID", user.properties.get("HairID"));
- ud.put("strClassName", worldItems.get(classItemId).Name);
- ud.put("strGender", user.properties.get("Gender"));
- ud.put("strUsername", user.getName());
- if (addInfo) {
- ud.put("strClassName", "");
- ud.put("iCP", 0);
- ud.put("eqp", new Object[0]);
- ud.put("iCP", user.properties.get("ClassPoints"));
- ud.put("iBagSlots", user.properties.get(""));
- ud.put("ig0", 0);
- ud.put("iUpgDays", user.properties.get(""));
- ud.put("sCountry", user.properties.get("Country"));
- ud.put("iSTR", "0");
- ud.put("ip0", 0);
- ud.put("iq0", 0);
- ud.put("iWIS", "0");
- ud.put("iAge", user.properties.get("Age"));
- ud.put("intExpToLevel", "20000");
- ud.put("intGold", user.properties.get("Gold"));
- ud.put("sHouseInfo", new Object[0]);
- ud.put("iBankSlots", user.properties.get("BankSlots"));
- ud.put("iHouseSlots", user.properties.get("HouseSlots"));
- ud.put("id0", 0);
- ud.put("id1", 0);
- ud.put("iUpgMAS", "3");
- ud.put("dUpgExp", user.properties.get("UpgradeExpire").toString().replaceAll(" ", "T"));
- ud.put("iUpg", user.properties.get("Upgrade"));
- ud.put("iBoostXP", 0);
- ud.put("iBoostG", 0);
- ud.put("CharID", user.properties.get("id"));
- ud.put("strEmail", user.properties.get("Email"));
- ud.put("iINT", "0");
- ud.put("lastArea", user.properties.get("LastArea"));
- ud.put("iFounder", "0");
- ud.put("intDBExp", user.properties.get("Exp"));
- ud.put("intExp", user.properties.get("Exp"));
- ud.put("UserID", user.getUserId());
- ud.put("ia1", user.properties.get("Settings"));
- ud.put("ia0", user.properties.get("Achievement"));
- ud.put("dCreated", user.properties.get("DateCreated").toString().replaceAll(" ", "T"));
- //ud.put("iup0", "4");
- ud.put("strQuests", user.properties.get("Quests"));
- ud.put("bitSuccess", "1");
- ud.put("bPermaMute", user.properties.get("Permamute"));
- ud.put("iLCK", "0");
- ud.put("iDailyAds", 0);
- ud.put("iDBCP", 0);
- ud.put("intDBGold", user.properties.get("Gold"));
- ud.put("intActivationFlag", user.properties.get("ActivationFlag"));
- ud.put("iDEX", "0");
- ud.put("iDailyAdCap", 6);
- ud.put("intCoins", user.properties.get("Coins"));
- ud.put("iEND", "0");
- ud.put("strMapName", zone.getRoom(user.getRoom()).getName().split("-")[0]);
- }
- return ud;
- }
- private boolean isNoneEnhancement(String type) {
- return (type.equals("Enhancement") || type.equals("Armor")
- || type.equals("Quest Item") || type.equals("Item")
- || type.equals("Necklace") || type.equals("Pet"));
- }
- private void loadSkills(User user) {
- Class classObj = worldClasses.get(Integer.parseInt(String.valueOf(user.properties.get("ClassID"))));
- int rank = getRankFromCP((Integer) user.properties.get("ClassPoints"));
- JSONArray active = new JSONArray();
- JSONArray passive = new JSONArray();
- JSONObject sAct = new JSONObject();
- sAct.put("cmd", "sAct");
- for (int i = 0; i < 2; i++) {
- PassiveSkill passiveSkill = worldPassiveSkills.get(Integer.parseInt(classObj.Passives[i]));
- JSONObject passObj = new JSONObject();
- passObj.put("icon", passiveSkill.Icon);
- passObj.put("ref", passiveSkill.Ref);
- passObj.put("nam", passiveSkill.Name);
- passObj.put("desc", passiveSkill.Desc);
- if (rank <= 3) {
- passObj.put("isOK", false);
- } else {
- passObj.put("isOK", true);
- }
- passObj.put("auras", new Object[0]);
- passObj.put("typ", passiveSkill.Type);
- passive.add(passObj);
- }
- for (int i = 0; i < 5; i++) {
- ActiveSkill activeSkill = worldActiveSkills.get(Integer.parseInt(classObj.Skills[i]));
- JSONObject actObj = new JSONObject();
- actObj.put("icon", activeSkill.Icon);
- actObj.put("mp", activeSkill.Mana);
- actObj.put("nam", activeSkill.Name);
- actObj.put("anim", activeSkill.Anim);
- actObj.put("desc", activeSkill.Desc);
- if (rank <= 1 && i == 2) {
- actObj.put("isOK", false);
- } else if (rank <= 2 && i == 3) {
- actObj.put("isOK", false);
- } else if (rank <= 4 && i == 4) {
- actObj.put("isOK", false);
- } else {
- actObj.put("isOK", true);
- }
- if (activeSkill.TgtMax > 0) {
- actObj.put("tgtMax", activeSkill.TgtMax);
- actObj.put("tgtMin", activeSkill.TgtMin);
- }
- actObj.put("range", activeSkill.Range);
- actObj.put("fx", activeSkill.FX);
- actObj.put("damage", activeSkill.Damage);
- actObj.put("dsrc", activeSkill.Dsrc);
- actObj.put("ref", activeSkill.Ref);
- if (activeSkill.Ref.equals("aa")) {
- actObj.put("auto", true);
- }
- actObj.put("tgt", activeSkill.Tgt);
- actObj.put("typ", activeSkill.Typ);
- actObj.put("str1", activeSkill.Str1);
- actObj.put("cd", activeSkill.CD);
- active.add(actObj);
- }
- JSONObject potionObj = new JSONObject();
- potionObj.put("icon", "icu1");
- potionObj.put("nam", "Potions");
- potionObj.put("anim", "Salute");
- potionObj.put("mp", 0);
- potionObj.put("desc", "Equip a potion or scroll from your inventory to use it here.");
- potionObj.put("isOK", true);
- potionObj.put("range", 808);
- potionObj.put("fx", "");
- potionObj.put("ref", "i1");
- potionObj.put("tgt", "f");
- potionObj.put("typ", "m");
- potionObj.put("str1", "");
- potionObj.put("cd", 5000);
- active.add(potionObj);
- JSONObject actions = new JSONObject();
- actions.put("passive", passive);
- actions.put("active", active);
- sAct.put("actions", actions);
- sendResponse(sAct, -1, user, getUserChannelList(user));
- }
- private void updateClass(User user, String className, int classId) {
- ArrayList queryRes = db.executeQuery("SELECT quantity FROM users_items WHERE equipped=1 AND equipment='ar' AND userid=" + user.properties.get("id"));
- int classPoints = Integer.parseInt(((DataRow) queryRes.get(0)).getItem("quantity"));
- user.properties.put("ClassID", classId);
- user.properties.put("ClassPoints", classPoints);
- Class classObj = worldClasses.get(classId);
- JSONObject updateClass = new JSONObject();
- updateClass.put("uid", user.getUserId());
- updateClass.put("sStats", classObj.Stats);
- updateClass.put("iCP", classPoints);
- updateClass.put("cmd", "updateClass");
- updateClass.put("sDesc", classObj.Desc);
- updateClass.put("sClassCat", classObj.ClassCat);
- if (classObj.MRM.contains(":")) {
- updateClass.put("aMRM", classObj.MRM.split(","));
- } else {
- updateClass.put("aMRM", classObj.MRM);
- }
- updateClass.put("sClassName", className);
- sendResponse(updateClass, -1, user, getUserChannelList(user));
- updateClass.clear();
- updateClass.put("uid", user.getUserId());
- updateClass.put("iCP", classPoints);
- updateClass.put("cmd", "updateClass");
- updateClass.put("sClassCat", classObj.ClassCat);
- updateClass.put("sClassName", className);
- sendToUsersButOne(zone.getRoom(user.getRoom()), user, updateClass);
- }
- private void unequipItem(User user, int id) {
- JSONObject uni = new JSONObject();
- String es = worldItems.get(id).ES;
- uni.put("cmd", "unequipItem");
- uni.put("ItemID", id);
- uni.put("uid", user.getUserId());
- uni.put("strES", es);
- //Send to room
- sendResponse(uni, -1, user, zone.getRoom(user.getRoom()).getChannellList());
- //Update equipment
- JSONObject eqp = (JSONObject) user.properties.get("eqp");
- eqp.remove(es);
- user.properties.put("eqp", eqp);
- //Update database
- db.executeCommand("UPDATE users_items SET equipped=0 WHERE userid=" + user.properties.get("id") + " AND itemid=" + id);
- }
- private void equipItem(User user, int id) {
- JSONObject equipItem = new JSONObject();
- Room room = zone.getRoom(user.getRoom());
- Item itemObj = worldItems.get(id);
- equipItem.put("uid", user.getUserId());
- equipItem.put("cmd", "equipItem");
- equipItem.put("ItemID", id);
- equipItem.put("strES", itemObj.ES);
- equipItem.put("sFile", itemObj.File);
- equipItem.put("sLink", itemObj.Link);
- if (itemObj.ES.equals("Weapon")) {
- equipItem.put("sType", itemObj.Type);
- }
- //Send to room
- sendResponse(equipItem, -1, user, room.getChannellList());
- //Update equipment
- JSONObject eqp = (JSONObject) user.properties.get("eqp");
- JSONObject eqpObj = new JSONObject();
- eqpObj.put("ItemID", id);
- eqpObj.put("sFile", itemObj.File);
- eqpObj.put("sLink", itemObj.Link);
- if (itemObj.ES.equals("Weapon")) {
- eqpObj.put("sType", itemObj.Type);
- }
- eqp.put(itemObj.ES, eqpObj);
- user.properties.put("eqp", eqp);
- //If item is Class then
- if (itemObj.ES.equals("ar")) {
- updateClass(user, itemObj.Name, itemObj.ClassID);
- loadSkills(user);
- }
- //Update Database
- db.executeCommand("UPDATE users_items SET equipped=0 WHERE userid=" + user.properties.get("id") + " AND equipment='" + itemObj.ES + "'");
- db.executeCommand("UPDATE users_items SET equipped=1 WHERE userid=" + user.properties.get("id") + " AND equipment='" + itemObj.ES + "' AND itemid=" + id);
- }
- private void equipItems(User user) {
- JSONObject eqp = (JSONObject) user.properties.get("eqp");
- for (Object key : eqp.keySet()) {
- debug("Equipping set: " + key);
- equipItem(user, (Integer) eqp.getJSONObject(key.toString()).get("ItemID"));
- }
- }
- private void loadInventoryBig(User user) {
- equipItems(user);
- JSONObject lib = new JSONObject();
- JSONArray items = new JSONArray();
- String sql = "SELECT id,itemid,equipped,level,quantity,enhid FROM users_items WHERE inbank=0 AND userid=" + user.properties.get("id");
- ArrayList queryRes = db.executeQuery(sql);
- for (Object rowObj : queryRes) {
- DataRow row = (DataRow) rowObj;
- JSONObject item = new JSONObject();
- int itemId = Integer.parseInt(row.getItem("itemid"));
- if (worldItems.containsKey(itemId)) {
- Item itemObj = worldItems.get(itemId);
- item.put("sIcon", itemObj.Icon);
- item.put("ItemID", itemId);
- item.put("iLvl", itemObj.Lvl);
- item.put("sElmt", itemObj.Elmt);
- item.put("bTemp", itemObj.Temp);
- item.put("sLink", itemObj.Link);
- item.put("bStaff", itemObj.Staff);
- item.put("CharItemID", row.getItem("id"));
- item.put("iRng", itemObj.Rng);
- item.put("bCoins", itemObj.Coins);
- item.put("sES", itemObj.ES);
- item.put("sFile", itemObj.File);
- item.put("sType", itemObj.Type);
- item.put("sDesc", itemObj.Desc);
- item.put("iStk", itemObj.Stk);
- item.put("bBank", "0");
- item.put("iCost", itemObj.Cost);
- item.put("bEquip", row.getItem("equipped"));
- item.put("bUpg", itemObj.Upg);
- item.put("iRty", itemObj.Rty);
- item.put("sName", itemObj.Name);
- item.put("iQty", row.getItem("quantity"));
- if (itemObj.ES.equals("Weapon")) {
- item.put("iDPS", "" + itemObj.DPS);
- }
- if (isNoneEnhancement(itemObj.Type)) {
- item.put("EnhID", itemObj.EnhID);
- item.put("PatternID", itemObj.EnhPatternID);
- item.put("iLvl", itemObj.Lvl);
- } else if (itemObj.EnhID > 0) {
- item.put("iLvl", row.getItem("level"));
- item.put("EnhLvl", row.getItem("level"));
- item.put("EnhID", itemObj.EnhID);
- item.put("EnhRty", itemObj.Rty);
- item.put("EnhPatternID", row.getItem("enhid"));
- if (itemObj.ES.equals("Weapon")) {
- item.put("EnhDPS", itemObj.DPS);
- }
- } else {
- item.put("EnhID", "" + itemObj.EnhID);
- }
- items.add(item);
- }
- }
- lib.put("cmd", "loadInventoryBig");
- lib.put("friends", new Object[0]);
- lib.put("items", items);
- lib.put("factions", new Object[0]);
- lib.put("hitems", new Object[0]);
- LinkedList userChan = getUserChannelList(user);
- sendResponse(lib, -1, user, userChan);
- String[] success = {"server", "Character load complete."};
- sendResponse(success, -1, user, userChan);
- }
- private void initUserProperties(User user) {
- String sql = "SELECT * FROM users WHERE id=" + user.properties.get("id");
- ArrayList queryRes = db.executeQuery(sql);
- if (queryRes != null && queryRes.size() > 0) {
- DataRow row = (DataRow) queryRes.get(0);
- user.properties.put("Access", row.getItem("Access"));
- user.properties.put("ActivationFlag", row.getItem("ActivationFlag"));
- user.properties.put("Age", row.getItem("Age"));
- user.properties.put("Gender", row.getItem("Gender"));
- user.properties.put("Email", row.getItem("Email"));
- user.properties.put("Level", row.getItem("Level"));
- user.properties.put("Gold", row.getItem("Gold"));
- user.properties.put("Coins", row.getItem("Coins"));
- user.properties.put("Exp", row.getItem("Exp"));
- user.properties.put("ColorHair", row.getItem("ColorHair"));
- user.properties.put("ColorTrim", row.getItem("ColorTrim"));
- user.properties.put("ColorBase", row.getItem("ColorBase"));
- user.properties.put("ColorSkin", row.getItem("ColorSkin"));
- user.properties.put("ColorEye", row.getItem("ColorEye"));
- user.properties.put("ColorAccessory", row.getItem("ColorAccessory"));
- user.properties.put("DateCreated", row.getItem("DateCreated"));
- user.properties.put("UpgradeExpire", row.getItem("UpgradeExpire"));
- user.properties.put("UpgradeDays", row.getItem("UpgradeDays"));
- user.properties.put("BankSlots", row.getItem("BankSlots"));
- user.properties.put("HouseSlots", row.getItem("HouseSlots"));
- user.properties.put("BagSlots", row.getItem("BagSlots"));
- user.properties.put("HairID", row.getItem("HairID"));
- user.properties.put("HairFile", row.getItem("HairFile"));
- user.properties.put("HairName", row.getItem("HairName"));
- user.properties.put("Permamute", row.getItem("Permamute"));
- user.properties.put("Quests", row.getItem("Quests"));
- user.properties.put("Settings", row.getItem("Settings"));
- user.properties.put("Achievement", row.getItem("Achievement"));
- user.properties.put("LastArea", row.getItem("LastArea"));
- user.properties.put("Country", row.getItem("Country"));
- //User DataLeaf
- user.properties.put("Pad", "Spawn");
- user.properties.put("Frame", "Enter");
- user.properties.put("tx", 0);
- user.properties.put("ty", 0);
- user.properties.put("afk", false);
- user.properties.put("State", 1);
- user.properties.put("HP", 1000);
- user.properties.put("MP", 1000);
- user.properties.put("HPMax", 1000);
- user.properties.put("MPMax", 1000);
- System.out.println("User properties init >> " + user.getName());
- }
- JSONObject eqp = new JSONObject();
- sql = "SELECT itemid,quantity FROM users_items WHERE equipped=1 AND userid=" + user.properties.get("id");
- queryRes = db.executeQuery(sql);
- if (queryRes != null && queryRes.size() > 0) {
- for (Object queryRe : queryRes) {
- DataRow row = (DataRow) queryRe;
- int id = Integer.parseInt(row.getItem("itemid"));
- Item item = worldItems.get(id);
- JSONObject itemObj = new JSONObject();
- itemObj.put("ItemID", id);
- itemObj.put("sFile", item.File);
- itemObj.put("sLink", item.Link);
- if (item.ES.equals("Weapon")) {
- itemObj.put("sType", item.Type);
- }
- if (item.ES.equals("ar")) {
- user.properties.put("ClassPoints", Integer.parseInt(row.getItem("quantity")));
- user.properties.put("ClassID", item.ClassID);
- }
- eqp.put(item.ES, itemObj);
- }
- }
- user.properties.put("eqp", eqp);
- }
- @Override
- public void handleInternalEvent(InternalEventObject ieo) {
- String evtName = ieo.getEventName();
- if (evtName.equals("loginRequest")) {
- String username = ieo.getParam("nick").split("~")[1];
- String password = ieo.getParam("pass");
- SocketChannel channel = (SocketChannel) ieo.getObject("chan");
- LinkedList<SocketChannel> channels = new LinkedList<SocketChannel>();
- channels.add(channel);
- String sql = "SELECT id,Access FROM users WHERE Username='" + username + "' AND Password='" + password + "'";
- ArrayList queryRes = db.executeQuery(sql);
- if (queryRes != null && queryRes.size() > 0) {
- try {
- DataRow row = (DataRow) queryRes.get(0);
- User user = helper.canLogin(username, password, channel, this.getOwnerZone());
- user.properties.put("id", row.getItem("id"));
- initUserProperties(user);
- int access = Integer.parseInt(row.getItem("Access"));
- if(access > 39) {
- user.setAsModerator();
- }
- if(access > 59) {
- user.setAsAdmin();
- }
- String[] party = {"server", "Accepting party invites."};
- sendResponse(party, -1, null, channels);
- String[] gotos = {"server", "Accepting goto requests."};
- sendResponse(gotos, -1, null, channels);
- String[] friend = {"server", "Accepting Friend invites."};
- sendResponse(friend, -1, null, channels);
- String[] tooltip = {"server", "Ability ToolTips will always show on mouseover."};
- sendResponse(tooltip, -1, null, channels);
- String[] duel = {"server", "Accepting duel invites."};
- sendResponse(duel, -1, null, channels);
- String[] facebook = {"warning", "Event sharing via Facebook is disabled."};
- sendResponse(facebook, -1, null, channels);
- String[] loginResponse = new String[7];
- loginResponse[0] = "loginResponse";
- loginResponse[1] = "true";
- loginResponse[2] = String.valueOf(user.getUserId());
- loginResponse[3] = username;
- loginResponse[4] = "Welcome to Pre-Alpha Project 6!";
- loginResponse[5] = Long.toString(new Date().getTime());
- loginResponse[6] = newsString;
- sendResponse(loginResponse, -1, null, channels);
- JSONObject _cvu = new JSONObject();
- JSONObject o = new JSONObject();
- for (String key : cvu.keySet()) {
- o.put(key, cvu.get(key));
- }
- _cvu.put("cmd", "cvu");
- _cvu.put("o", o);
- sendResponse(_cvu, -1, user, channels);
- } catch (LoginException le) {
- System.out.println(le.getMessage());
- }
- } else {
- String[] loginResponse = new String[5];
- loginResponse[0] = "loginResponse";
- loginResponse[1] = "false";
- loginResponse[2] = "-1";
- loginResponse[3] = username;
- loginResponse[4] = "User Data for '" + username + "' could not be retrieved. Please contact the staff to resolve the issue.";
- sendResponse(loginResponse, -1, null, channels);
- }
- } else if (evtName.equals("userJoin")) {
- User user = (User) ieo.getObject("user");
- Room room = (Room) ieo.getObject("room");
- JSONObject userObj = new JSONObject();
- userObj.put("uoName", user.getName());
- userObj.put("strUsername", user.getName());
- userObj.put("strFrame", "Enter");
- userObj.put("strPad", "Spawn");
- userObj.put("intState", Integer.parseInt(user.properties.get("State").toString()));
- userObj.put("intLevel", Integer.parseInt(user.properties.get("Level").toString()));
- userObj.put("entID", user.getUserId());
- userObj.put("entType", "p");
- userObj.put("showHelm", true);
- userObj.put("showCloak", true);
- userObj.put("intHP", Integer.parseInt(user.properties.get("HP").toString()));
- userObj.put("intMP", Integer.parseInt(user.properties.get("MP").toString()));
- userObj.put("intHPMax", Integer.parseInt(user.properties.get("HPMax").toString()));
- userObj.put("intMPMax", Integer.parseInt(user.properties.get("MPMax").toString()));
- userObj.put("tx", Integer.parseInt(user.properties.get("tx").toString()));
- userObj.put("ty", Integer.parseInt(user.properties.get("ty").toString()));
- userObj.put("afk", Boolean.parseBoolean(user.properties.get("afk").toString()));
- JSONObject uJoin = new JSONObject();
- uJoin.put("cmd", "uotls");
- uJoin.put("o", userObj);
- uJoin.put("unm", user.getName());
- sendToUsersButOne(room, user, uJoin);
- } else if (evtName.equals("serverReady")) {
- System.out.println("--- [ " + serverName + " ] -----------------------------------");
- System.out.println();
- System.out.println(">> Ready for connections");
- } else if (evtName.equals("userExit")) {
- Room room = (Room) ieo.getObject("room");
- User user = (User) ieo.getObject("user");
- exitUser(room, user);
- } else if (evtName.equals("userLost")) {
- User user = (User) ieo.getObject("user");
- exitUser(zone.getRoom(user.getRoom()), user);
- }
- }
- void exitUser(Room room, User user) {
- String[] exit = {"exitArea", String.valueOf(user.getUserId()), user.getName()};
- sendToUsersButOne(room, user, exit);
- if (room.howManyUsers() < 1)
- helper.destroyRoom(zone, room.getId());
- }
- void sendToUsersButOne(Room room, User _user, JSONObject o) {
- User[] users = room.getAllUsersButOne(_user);
- LinkedList<SocketChannel> channels = new LinkedList<SocketChannel>();
- for (User user : users) {
- channels.add(user.getChannel());
- }
- sendResponse(o, -1, _user, channels);
- }
- void sendToUsersButOne(Room room, User _user, String[] o) {
- User[] users = room.getAllUsersButOne(_user);
- LinkedList<SocketChannel> channels = new LinkedList<SocketChannel>();
- for (User user : users) {
- channels.add(user.getChannel());
- }
- sendResponse(o, -1, _user, channels);
- }
- void handleException(Exception e, User user) {
- System.out.println(e.getMessage() + " User: " + user.getName());
- }
- private void handleCmd(User user, String[] params) throws ExtensionHelperException {
- String cmd = params[0];
- if (cmd.equals("tfer")) {
- if (params.length > 3) {
- user.properties.put("Pad", params[4]);
- user.properties.put("Frame", params[3]);
- }
- user.properties.put("tx", 0);
- user.properties.put("ty", 0);
- joinRoom(user, params[2]);
- } else if (cmd.equals("restartnow") && (user.isAdmin() || user.isModerator())) {
- helper.rebootServer();
- } else if ((cmd.equals("iay") || cmd.equals("adminyell") && (user.isAdmin() || user.isModerator()))) {
- String[] iay = {"moderator", "(" + user.getName() + "): " + params[1]};
- sendResponse(iay, -1, user, zone.getChannelList());
- } else if ((cmd.equals("ban") && (user.isAdmin() || user.isModerator()))) {
- db.executeCommand("UPDATE users SET banned=1 WHERE userid=" + params[1]);
- String[] ban = {"warning", "(" + user.getName() + "): " + params[1] + " has been banned!"};
- sendResponse(ban, -1, user, zone.getChannelList());
- }
- }
- private void handleMove(String[] param, User user) {
- Room room = zone.getRoom(user.getRoom());
- user.properties.put("tx", param[0]);
- user.properties.put("ty", param[1]);
- String[] uotls = new String[3];
- uotls[0] = "uotls";
- uotls[1] = user.getName();
- uotls[2] = "sp:" + param[2] + ",tx:" + param[0] + ",ty:" + param[1] + ",strFrame:" + user.properties.get("Frame");
- sendToUsersButOne(room, user, uotls);
- }
- private void handleMTC(String[] params, User user) {
- user.properties.put("intState", 1);
- user.properties.put("strFrame", params[0]);
- user.properties.put("strPad", params[1]);
- user.properties.put("tx", 0);
- user.properties.put("ty", 0);
- String[] mtc = {"uotls", user.getName(), "strPad:" + params[1] + ",tx:0,strFrame:" + params[0] + ",ty:0"};
- sendToUsersButOne(zone.getRoom(user.getRoom()), user, mtc);
- }
- private void handleMessage(String[] params, User user) {
- int access = Integer.parseInt(user.properties.get("Access").toString());
- if (access > 0 && access < 40) params[1] = "zone";
- if (user.isModerator()) params[1] = "mod";
- if (user.isAdmin()) params[1] = "trade";
- Room room = zone.getRoom(user.getRoom());
- String[] chat = {"chatm", params[1] + "~" + params[0], user.getName(), String.valueOf(user.getRoom())};
- sendResponse(chat, -1, user, room.getChannellList());
- }
- @Override
- public void handleRequest(String cmd, String[] params, User user, int fromRoom) {
- try {
- //Long start = System.currentTimeMillis();
- if (cmd.equals("firstJoin")) {
- joinRoom(user, "battleon");
- } else if (cmd.equals("cmd")) {
- handleCmd(user, params);
- } else if (cmd.equals("moveToCell")) {
- handleMTC(params, user);
- } else if (cmd.equals("retrieveUserDatas")) {
- sendUserDatas(user, params);
- } else if (cmd.equals("retrieveUserData")) {
- sendUserData(user, Integer.parseInt(params[0]));
- } else if (cmd.equals("retrieveInventory")) {
- loadInventoryBig(user);
- } else if (cmd.equals("mv")) {
- handleMove(params, user);
- } else if (cmd.equals("message")) {
- handleMessage(params, user);
- } else if (cmd.equals("equipItem")) {
- equipItem(user, Integer.parseInt(params[0]));
- } else if (cmd.equals("unequipItem")) {
- unequipItem(user, Integer.parseInt(params[0]));
- }
- //Long end = System.currentTimeMillis();
- //System.out.println("For CMD: " + cmd + " " + (end - start) + "ms");
- } catch (ExtensionHelperException e) {
- handleException(e, user);
- }
- }
- @Override
- public void handleRequest(String cmd, ActionscriptObject aso, User user, int fromRoom) {
- // TODO Auto-generated method stub
- }
- @Override
- public void destroy() {
- db = null;
- }
- }
Add Comment
Please, Sign In to add comment