daily pastebin goal
3%
SHARE
TWEET

EQW 2009-2014

a guest Nov 28th, 2018 196 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var GLOBAL_VARIABLES = []
  2. var viponly = 0
  3. var staffonly = 0
  4.  
  5. //old chat method:
  6. var chatData = "0:FFFFFF::1,1:9CCAFD::1,2:00E1FF:Elite:1,3:FF8000:Legendary:1,4:95FF00:Support:1,60:FF0000:Administrator:1,65:FF0000:Owner:1,40:FFCC33:Moderator:1"
  7.  
  8. //var chatData = "0:FFFFFF::1,1:9CCAFD::1,2:00E1FF:Elite:1,3:FF8000:Legendary:1,4:95FF00:Support:1,60:FFCC33:Moderator:1,65:FFCC33:Moderator:1,40:FFCC33:Moderator:1";
  9. var dbase
  10. var zone
  11. var _scheduler = Packages.it.gotoandplay.smartfoxserver.util.scheduling
  12. var scheduler = new _scheduler.Scheduler()
  13. var taskHandler
  14. var handlerObj = {}
  15. handlerObj.count = 0
  16.  
  17. var worldItems = new java.util.HashMap()
  18. var worldClasses = new java.util.HashMap()
  19. var worldSkills = new java.util.HashMap()
  20. var worldPassives = new java.util.HashMap()
  21. var worldAuras = new java.util.HashMap()
  22. var worldShops = new java.util.HashMap()
  23. var worldMaps = new java.util.HashMap()
  24. var wolrdQuests = new java.util.HashMap()
  25. var worldMonsters = new java.util.HashMap()
  26. var worldHairs = new java.util.HashMap()
  27. var worldHairShops = new java.util.HashMap()
  28. var worldGuilds = new java.util.HashMap()
  29.  
  30. var enhInfo = new Object()
  31. var arrRanks = []
  32. var arrLevels = []
  33.  
  34. var rateCP = 1
  35. var rateGold = 1
  36. var rateExp = 1
  37. var maxLevel = 30
  38. var maxGold = 3000000
  39. var monRespawnTime = 10000
  40. var maxFFAScore = 10
  41.  
  42. //Skill stacks:
  43.  
  44. var doTestStacks1 = 0;
  45.  
  46.  
  47. var prefmessages = []
  48. prefmessages["bParty~true"] = ["server", "Accepting party invites."]
  49. prefmessages["bParty~false"] = ["warning", "Ignoring party invites."]
  50. prefmessages["bGoto~true"] = ["server", "Accepting goto requests."]
  51. prefmessages["bGoto~false"] = ["warning", "Blocking goto requests."]
  52. prefmessages["bFriend~true"] = ["server", "Accepting Friend requests."]
  53. prefmessages["bFriend~false"] = ["warning", "Ignoring Friend requests."]
  54. prefmessages["bWhisper~true"] = ["server", "Accepting PMs."]
  55. prefmessages["bWhisper~false"] = ["warning", "Ignoring PMs."]
  56. prefmessages["bDuel~true"] = ["server", "Accepting duel invites."]
  57. prefmessages["bDuel~false"] = ["warning", "Ignoring duel invites."]
  58.  
  59. function init()
  60. {
  61.     __out.println(" -------------------------------------")
  62.     __out.println("|                                     |")
  63.     __out.println("| Elite Quest Worlds                  |")
  64.     __out.println("|    (c) 2009-2014 EliteQuestWorlds   |")
  65.     __out.println("|                               by Xyo|")
  66.     __out.println("|                                     |")
  67.     __out.println(" -------------------------------------")
  68.    
  69.     zone = _server.getCurrentZone()
  70.     dbase = _server.getDatabaseManager()
  71.    
  72.     initVariables()
  73.     initScheduler()
  74.     scheduler.startService()
  75.     taskHandler = new _scheduler.ITaskHandler(handlerObj)
  76.     scheduler.addScheduledTask(new _scheduler.Task({name:"Promo"}), 600, true, taskHandler)
  77.     scheduler.addScheduledTask(new _scheduler.Task({name:"Rest Players"}), 3, true, taskHandler)
  78.     scheduler.addScheduledTask(new _scheduler.Task({name:"ReloadVars"}), 10, true, taskHandler)
  79.    
  80.     cacheWorldObjects()
  81.     initArrRep()
  82.     initArrExp()
  83.     dbase.executeCommand("UPDATE etl_servers SET bOnline=1,iCount="+zone.getUserCount()+" WHERE sName='" + GLOBAL_VARIABLES["SERVER_NAME"] + "'")  
  84.     debug(">> init")
  85. }
  86.  
  87. function destroy()
  88. {
  89.     scheduler.destroy(null)
  90.     dbase.executeCommand("UPDATE etl_servers SET bOnline=0,iCount=0 WHERE sName='" + GLOBAL_VARIABLES["SERVER_NAME"] + "'")
  91.     debug("Extension destroyed")
  92.     delete dbase
  93.     delete doTestStacks1
  94. }
  95.  
  96. function initVariables() {
  97.     var strVariables = String(_server.readFile("aqwVars.as"))
  98.     var listVariables = strVariables.split("&")
  99.     for each(var variable in listVariables) {
  100.         if(String(variable).indexOf("=") > -1) {
  101.             if(GLOBAL_VARIABLES[String(variable.split("=")[0])] != variable.split("=")[1]) {
  102.                 GLOBAL_VARIABLES[String(variable.split("=")[0])] = variable.split("=")[1]
  103.                 trace(variable)
  104.             }
  105.         }
  106.     }
  107. }
  108. function initScheduler() {
  109.     handlerObj.doTask = function(task) {
  110.         task.id.count = (task.id.count >= 0) ? task.id.count : 0
  111.         task.id.count++
  112.         if(task.id.maxCount && task.id.count >= task.id.maxCount) {
  113.             scheduler.removeScheduledTask(task)
  114.             trace(task.id.name + " canceled!")
  115.             return
  116.         }
  117.         if (task.id.name == "Promo") {
  118.             sendpromoMsg()
  119.         } else if (task.id.name == "Rest Players") {
  120.             restPlayerAll()
  121.         } else if (task.id.name == "ReloadVars") {
  122.             initVariables()
  123.         } else if(task.id.name == "PetAttack") {
  124.             doPetAttack(task.id.user)
  125.         } else if(task.id.name == "MonAttack") {
  126.             getMonsterActionResult({monObj:task.id.monObj, mapMon:task.id.mapMon, mapName:task.id.mapName})
  127.         } else if(task.id.name == "MonRespawn") {
  128.             respawnMonster(task.id.params, task.id.die)
  129.         } else if(task.id.name == "doAura") {
  130.             if(String(task.id.targetType).toLowerCase() == "p") {
  131.                 DoTP(task.id.params)
  132.             } else {
  133.                 DoTM(task.id.params)
  134.             }
  135.         } else if(task.id.name == "removeAura") {
  136.             removeAura(task.id.params)
  137.         }
  138.     }
  139. }
  140.  
  141. function destroyEmptyRooms() {
  142.     var roomList = zone.getRooms()
  143.     for each(var room in roomList) {
  144.         if (room.getName() != "--init--") {
  145.             if (room.getUserCount() == 0) {
  146.                 _server.destroyRoom(_server.getCurrentZone(), room.getId())
  147.             }
  148.         }
  149.     }
  150. }
  151. function Integer(wat) {
  152.     return Number(Number(wat).toFixed(0))
  153. }
  154.  
  155. function Integer2(wat) {
  156.     return Number(Number(wat).toFixed(2))
  157. }
  158.  
  159. function rand(min, max) {
  160.     return(Number(Math.floor(min + (Math.random() * (max - min)))))
  161. }
  162.  
  163. function framePadCase(framePad) {
  164.     var str = framePad
  165.     var firstChar = str.substr(0, 1);
  166.     var restOfString = str.substr(1, str.length);  
  167.     return firstChar.toUpperCase()+restOfString;
  168. }
  169.  
  170. function handleRequest(cmd, params, user, fromRoom, protocol)
  171. {
  172.     if(user.getName() == "sj7") {
  173.         trace(">>request: " + cmd)
  174.         for(var param in params) {
  175.             trace("params[" + param + "]: " + params[param])
  176.         }
  177.         trace("user: " + user.getName())
  178.     }
  179.    
  180.     var room = (user != null) ? zone.getRoom(user.getRoom()) : null
  181.     switch(cmd) {
  182.     case "firstJoin":
  183.         //joinRoom(user, String(user.properties.get("lastmap")), false, String(user.properties.get("lastframe")), String(user.properties.get("lastpad")))
  184.         joinRoom(user, "battleontown", false, "Enter", "Spawn");
  185.         break
  186.     case "testStunRequest":
  187.         _server.sendResponse(["server", "Stun request recieved from the client " + cmd + ", 0.023m seconds"], -1, null, [user], "str")
  188.     break;
  189.     case "loadShop":
  190.         loadShop(user.getUserId(), params[0])
  191.         break
  192.     case "loadHairShop":
  193.         loadHairShop(user.getUserId(), params[0])
  194.         break
  195.     case "changeColor":
  196.         changeColor(user, params[0], params[1], params[2], params[3])
  197.         break
  198.     case "changeArmorColor":
  199.         changeArmorColor(user, params[0], params[1], params[2])
  200.         break
  201.     case "loadSale":
  202.         loadSale(user.getUserId(), params[0])
  203.         break
  204.     case "buyItem":
  205.         buyItem(user.getUserId(), params[0], params[1])
  206.         break
  207.     case "sellItem":
  208.         sellItem(user.getUserId(), params[0], params[1])
  209.         break
  210.     case "removeItem":
  211.         if(params[2]) {
  212.             removeItem(user, params[0], params[2])
  213.         } else {
  214.             removeItem(user, params[0], 1)
  215.         }
  216.         break
  217.     case "moveToCell":
  218.         handleMoveToCell(params, user.getUserId())
  219.         break
  220.     case "atte": //gar
  221.         attackHandler(user.getUserId(), params, false)
  222.         break
  223.     case "retrieveUserDatas": //retrieveUserDatas
  224.         sendUserDatas(user, params)
  225.         break
  226.     case "retrieveUserData": //retrieveUserData
  227.         sendUserData(user, params[0])
  228.         break
  229.     case "retrieveInventory":
  230.         loadInventoryBig(user.getUserId())
  231.         break
  232.     case "mv": //mv
  233.         handleMove(params, user)
  234.         break
  235.     case "message":
  236.         handleMessage(params, user)
  237.         break
  238.     case "afk":
  239.         handleAfk(user.getUserId(), params[0])
  240.         break
  241.     case "equipItem":
  242.         equipItem(user.getUserId(), Integer(params[0]), false)
  243.         break
  244.     case "unequipItem":
  245.         unequipItem(user.getUserId(), Integer(params[0]))
  246.         break
  247.     case "resPlayerTimed":
  248.         resPlayer(user)
  249.         break
  250.     case "emotea":
  251.         doemote(user, String(params[0]))
  252.         break
  253.     case "ia":
  254.         doia(user, String(params[0]), String(params[1]))
  255.         break
  256.     case "em":
  257.         doem(user, String(params[0]))
  258.         break
  259.     case "whisper":
  260.         var chat = []
  261.         if(isUserOnline(user, params[1])) {
  262.             var to = getUserByName(String(params[1]))
  263.             if(to.properties.get("bWhisper") == "false" && !isSupport(user)) {
  264.                 _server.sendResponse(["warning", "Player is not accepting PMs."], -1, null, [user], "str")
  265.                 break
  266.             } else {
  267.                 chat.push("pMess")
  268.                 chat.push(params[0])
  269.                 chat.push(user.properties.get("strUsername").toLowerCase())
  270.                 chat.push(params[1])
  271.                 var chat2 = []
  272.                 chat2.push("pMess")
  273.                 chat2.push(params[0])
  274.                 chat2.push(user.properties.get("strUsername").toLowerCase())
  275.                 chat2.push(params[1])
  276.                 chat2.push(0)
  277.                 chat2.push(0)
  278.                 _server.sendResponse(chat2, -1, null, [user], "str")
  279.                 _server.sendResponse(chat, -1, null, [to], "str")
  280.                 if(to.properties.get("afk") == "true")
  281.                 _server.sendResponse(["server", String(to.getName()) + " is (AWAY)."], -1, null, [user], "str")
  282.             }
  283.         }
  284.         break
  285.     case "isModerator":
  286.         checkeduser = getUserByName(String(params[0]))
  287.         var isMod = {}
  288.         isMod.cmd = "isModerator"
  289.         isMod.unm = String(checkeduser.getName())
  290.         if(isStaff(checkeduser)) {
  291.             isMod.val = true
  292.         }
  293.         _server.sendResponse(isMod, -1, null, [user], "json")
  294.         break
  295.     case "util":
  296.         if(params[0]) {
  297.             switch(String(params[0])) {
  298.             case "roll":
  299.                 var rolled = Math.round(Math.random()*100)
  300.                 var rollmsg = " rolled " + rolled
  301.                 //doem(user, rollmsg)
  302.                 var emmsg = []
  303.                 emmsg.push("em")
  304.                 emmsg.push(String(user.getName() + rollmsg))
  305.                 emmsg.push("")
  306.                 _server.sendResponse(emmsg, -1, null, room.getAllUsers(), "str")
  307.                 break
  308.             }
  309.         }
  310.         break
  311.     case "guild":
  312.         if(params[0]) {
  313.             switch(String(params[0])) {
  314.             case "gc":
  315.                 if(params[1] && params[1] != "undefined" && params[1] != "" && String(params[1]).length >= 5) {
  316.                     if(String(params[1]).indexOf(" ") == 0 || String(params[1]).indexOf(" ") == (String(params[1]).length-1) || String(params[1]).indexOf("  ") > -1) {
  317.                         _server.sendResponse(["warning", "Invalid guild name."], -1, null, [user], "str")
  318.                     } else {
  319.                         guildCreate(user, params[1])
  320.                     }
  321.                 } else {
  322.                     _server.sendResponse(["warning", "Guild name must be atleast 5 characters."], -1, null, [user], "str")
  323.                 }
  324.                 break
  325.             case "gi":
  326.                 guildInvite(user, params[1])
  327.                 break
  328.             case "gr":
  329.                 guildRemove(user, params[1])
  330.                 break
  331.             case "ga":
  332.                 guildAccept(user, params[1], params[2])
  333.                 break
  334.             case "gdi":
  335.                 guildDecline(user, params[1], params[2])
  336.                 break
  337.             case "gp":
  338.                 userGuildPromote(user, params[1]);
  339.             break
  340.             case "motd":
  341.                 guildMOTD(user, params[1])
  342.                 break
  343.             default:
  344.                 _server.sendResponse(["warning", "This guild feature is not working yet"], -1, null, [user], "str")
  345.                 break              
  346.             }
  347.         }
  348.         break
  349.     case "buyBagSlots":
  350.         if(params[0]) {
  351.             var nrslots = Number(params[0])
  352.             var cost = Integer(nrslots) * 200
  353.             var mycoins = Integer(user.properties.get("intCoins"))
  354.             if(mycoins >= cost) {
  355.                 user.properties.put("iBagSlots", (Integer(user.properties.get("iBagSlots"))+nrslots))
  356.                 user.properties.put("intCoins", (Integer(mycoins)-cost))
  357.                 dbase.executeCommand("UPDATE etl_users SET iCoins=iCoins-"+Integer(cost)+", iBagSlots=iBagSlots+"+Integer(nrslots)+" WHERE id='" + Integer(user.properties.get("CharID")) + "'")
  358.                 var buyslotsresp = {"cmd": "buyBagSlots", "bitSuccess":1, "iSlots":Number(nrslots)}
  359.                 _server.sendResponse(buyslotsresp, -1, null, [user], "json")
  360.             }
  361.         }
  362.         break
  363.     case "buyBankSlots":
  364.         if(params[0]) {
  365.             var nrslots = Number(params[0])
  366.             var cost = Integer(nrslots) * 200
  367.             var mycoins = Integer(user.properties.get("intCoins"))
  368.             if(mycoins >= cost) {
  369.                 user.properties.put("iBankSlots", (Integer(user.properties.get("iBankSlots"))+nrslots))
  370.                 user.properties.put("intCoins", (Integer(mycoins)-cost))
  371.                 dbase.executeCommand("UPDATE etl_users SET iCoins=iCoins-"+Integer(cost)+", iBankSlots=iBankSlots+"+Integer(nrslots)+" WHERE id='" + Integer(user.properties.get("CharID")) + "'")
  372.                 var buyslotsresp = {"cmd": "buyBankSlots", "bitSuccess":1, "iSlots":Number(nrslots)}
  373.                 _server.sendResponse(buyslotsresp, -1, null, [user], "json")
  374.             }
  375.         }
  376.         break
  377.     case "buyHouseSlots":
  378.         if(params[0]) {
  379.             var nrslots = Number(params[0])
  380.             var cost = Integer(nrslots) * 200
  381.             var mycoins = Integer(user.properties.get("intCoins"))
  382.             if(mycoins >= cost) {
  383.                 user.properties.put("iHouseSlots", (Integer(user.properties.get("iHouseSlots"))+nrslots))
  384.                 user.properties.put("intCoins", (Integer(mycoins)-cost))
  385.                 dbase.executeCommand("UPDATE etl_users SET iCoins=iCoins-"+Integer(cost)+", iHouseSlots=iHouseSlots+"+Integer(nrslots)+" WHERE id='" + Integer(user.properties.get("CharID")) + "'")
  386.                 var buyslotsresp = {"cmd": "buyHouseSlots", "bitSuccess":1, "iSlots":Number(nrslots)}
  387.                 _server.sendResponse(buyslotsresp, -1, null, [user], "json")
  388.             }
  389.         }
  390.         break
  391.     case "cmd":
  392.         if(params[0])
  393.         handleCmd(user.getUserId(), params)
  394.         break
  395.     case "changeRoom":
  396.         handleMoveToCell(params, user.getUserId())
  397.         break
  398.     case "restRequest":
  399.         restPlayer(user)
  400.         break
  401.     case "getDrop":
  402.         getDrop(user, params[0])
  403.         break
  404.     case "showRedeem":
  405.         var redeemJson = {"cmd":"showRedeem", "btns":"mono", "glow":"gold,medium"}
  406.         _server.sendResponse(redeemJson, -1, null, [user], "json")
  407.         break
  408.     case "book":
  409.         var bookObj = {"cmd":"bookInfo", "bookData": {
  410.                 "HMBadge": [],
  411.                 "AchBadge": [],
  412.                 "OBadge": [],
  413.                 "quests": [
  414.                 {"intIndex":96,"strName":"Tutorial", "strMap":"tutorial", "strField":"QS","strType":"Quest","bitHide":0,"intValue":3}, //Tutorial
  415.                 {"intIndex":41,"strName":"Be Evil!!!","strField":"QS","strType":"Quest","bitHide":0,"intValue":2}
  416.                 ]
  417.             }}
  418.         _server.sendResponse(bookObj, -1, null, [user], "json")
  419.         break
  420.     case "cc":
  421.         _server.sendResponse(["cChat", String(params[0]), user.getName()], -1, null, [user], "str")
  422.         break
  423.     case "updateQuest":
  424.         setQuestValue(user, params[0], params[1])
  425.         break
  426.     case "bankFromInv":
  427.         toBank(user, params[0])
  428.         break
  429.     case "bankToInv":
  430.         toInventory(user, params[0])
  431.         break
  432.     case "bankSwapInv":
  433.         swapBankInventory(user, params[0], params[3])
  434.         break
  435.     case "loadBank":
  436.         loadBank(user, params)
  437.         break
  438.     case "getAdReward":
  439.         var adsNum = Number(user.properties.get("iDailyAds"))
  440.         if(Number(adsNum) < 6) {
  441.             var ac = 0
  442.             var acmin = 1
  443.             var acmax = 10
  444.             ac = Number(Math.floor(acmin + (Math.random() * (acmax - acmin))))
  445.             var gold = 500
  446.             dbase.executeCommand("UPDATE etl_users SET iDailyAds="+Number(adsNum+1)+" WHERE id=" + user.properties.get("CharID"))      
  447.             dbase.executeCommand("UPDATE etl_users SET iCoins=iCoins+"+Number(ac)+" WHERE id=" + user.properties.get("CharID"))    
  448.             dbase.executeCommand("UPDATE etl_users SET iGold=iGold+"+Number(gold)+" WHERE id=" + user.properties.get("CharID"))
  449.             user.properties.put("iDailyAds", Number(adsNum-(-1)))          
  450.             user.properties.put("intCoins", Number(Number(user.properties.get("intCoins"))+Number(ac)))
  451.             user.properties.put("intGold", Number(Number(user.properties.get("intGold"))+Number(gold)))
  452.             var rew = {
  453.                 "cmd":"getAdReward",
  454.                 "iCoins": Number(ac),
  455.                 "iGold": Number(gold)
  456.             }
  457.             _server.sendResponse(rew, -1, null, [user], "json")
  458.         } else {
  459.            
  460.         }
  461.         break
  462.     case "getAdData":
  463.         var adsNum = Number(user.properties.get("iDailyAds"))
  464.         var adData = {
  465.             "cmd": "getAdData",
  466.             "bSuccess": 1,
  467.             "bh": {
  468.                 "iHouse": "3",
  469.                 "ID": "7",
  470.                 "iDailyAds": String(adsNum),
  471.                 "sPic": "/game/policy-logo.png",
  472.                 "sMovie": "eqw"
  473.             }
  474.         }
  475.         _server.sendResponse(adData, -1, null, [user], "json")
  476.         break
  477.     case "genderSwap":
  478.         genderSwap(user)
  479.         break
  480.     case "requestFriend":
  481.         userToFriend = getUserByName(String(params[0]))
  482.         if(userToFriend) {
  483.             if(checkItemInArray(user.properties.get("friends"), String(userToFriend.properties.get("CharID")))) {
  484.                 _server.sendResponse(["warning", "Already friend"], -1, null, [user], "str")
  485.             } else {
  486.                 userToFriend.properties.put("friendi~"+user.getName(), true)
  487.                 var rFriend = {
  488.                     "cmd": "requestFriend",
  489.                     "unm": String(user.getName()),
  490.                     "ID": Number(user.getUserId())
  491.                 }
  492.                 _server.sendResponse(rFriend, -1, null, [userToFriend], "json")
  493.             }
  494.         }
  495.         break
  496.     case "addFriend":
  497.         userToAccept = getUserByName(String(params[0]))
  498.         if(userToAccept) {
  499.             if(checkItemInArray(user.properties.get("friends"), String(userToAccept.properties.get("CharID")))) {
  500.                 _server.sendResponse(["warning", "Already friend"], -1, null, [user], "str")
  501.             } else {
  502.                 if(!user.properties.get("friendi~"+userToAccept.getName()))
  503.                 return             
  504.                 userFriends = user.properties.get("friends")
  505.                 userFriends.push(String(userToAccept.properties.get("CharID")))
  506.                 user.properties.put("friends", userFriends)
  507.                
  508.                 userToAcceptFriends = userToAccept.properties.get("friends")
  509.                 userToAcceptFriends.push(String(user.properties.get("CharID")))
  510.                 userToAccept.properties.put("friends", userToAcceptFriends)
  511.                
  512.                 dbase.executeCommand("UPDATE etl_users SET friends='"+String(userFriends.join(","))+"' WHERE id=" + user.properties.get("CharID"))
  513.                 dbase.executeCommand("UPDATE etl_users SET friends='"+String(userToAcceptFriends.join(","))+"' WHERE id=" + userToAccept.properties.get("CharID"))
  514.                
  515.                 var invited = {
  516.                     "cmd": "addFriend",
  517.                     "friend": getFriendInfo(user.properties.get("CharID"))
  518.                 }
  519.                 _server.sendResponse(invited, -1, null, [userToAccept], "json")
  520.                 var inviter = {
  521.                     "cmd": "addFriend",
  522.                     "friend": getFriendInfo(userToAccept.properties.get("CharID"))
  523.                 }
  524.                 _server.sendResponse(inviter, -1, null, [user], "json")
  525.             }
  526.         } else {
  527.             _server.sendResponse(["warning", "user offline"], -1, null, [user], "str")
  528.         }
  529.         break
  530.     case "declineFriend":
  531.         userToDecline = getUserByName(String(params[0]))
  532.         _server.sendResponse(["warning", String(user.getName()) + " declined your friend request."], -1, null, [userToDecline], "str")
  533.         break
  534.     case "deleteFriend":
  535.         if(checkItemInArray(user.properties.get("friends"), String(params[0]))) {
  536.             var newList = removeItemFromArray(user.properties.get("friends"), String(params[0]))
  537.             user.properties.put("friends", newList)
  538.             dbase.executeCommand("UPDATE etl_users SET friends='"+String(newList.join(","))+"' WHERE id=" + user.properties.get("CharID"))
  539.             var query = "SELECT id,strUsername,friends FROM etl_users WHERE id='" + params[0] + "' LIMIT 1"
  540.             queryRes = dbase.executeQuery(query)
  541.             if (queryRes && queryRes.size() > 0) {
  542.                 var set = queryRes.get(0)
  543.                 var tempEmpty = []
  544.                 var newList2 = (set.getItem("friends").indexOf(",") > -1) ? set.getItem("friends").split(",") : (set.getItem("friends") != "") ? [set.getItem("friends")] : []
  545.                 newList2 = removeItemFromArray(newList2, String(user.properties.get("CharID")))
  546.                 var dbList = (newList2.length > 0) ? String(newList2.join(",")) : ""
  547.                 dbase.executeCommand("UPDATE etl_users SET friends='"+String(dbList)+"' WHERE id=" + set.getItem("id"))
  548.                 var userToDelete = getUserByName(String(set.getItem("strUsername").toLowerCase()))
  549.                 if(userToDelete) {
  550.                     userToDelete.properties.put("friends", newList2)
  551.                     var dFriend = {
  552.                         "cmd": "deleteFriend",
  553.                         "ID": String(user.properties.get("CharID"))
  554.                     }
  555.                     _server.sendResponse(dFriend, -1, null, [userToDelete], "json")
  556.                 }
  557.             }
  558.             var dFriend = {
  559.                 "cmd": "deleteFriend",
  560.                 "ID": String(params[0])
  561.             }
  562.             _server.sendResponse(dFriend, -1, null, [user], "json")
  563.         }
  564.         break
  565.     case "aggroMon":
  566.         theTarget = room.properties.get(String("m"+(params[0])))
  567.         if(theTarget) {
  568.             var userid = user.getUserId()
  569.             if(!(theTarget.targets.contains(String(userid)))) {
  570.                 theTarget.targets.add(String(userid))
  571.                 if(theTarget.targets.size() == 1) {
  572.                     var params2 = {}
  573.                     params2.monObj = theTarget
  574.                     params2.mapMon = params[0]
  575.                     params2.mapName = room.getName()
  576.                     //setTimeout(this, getMonsterActionResult, 500, params2)
  577.                     scheduler.addScheduledTask(new _scheduler.Task({name:"MonAttack", monObj:theTarget, mapMon:params[0], mapName:String(room.getName())}), 0.5, false, taskHandler)
  578.                 }
  579.             }
  580.         }
  581.         break
  582.     case "getXmasGift":
  583.         //dropItem(user, 16, 1)
  584.         break
  585.     case "serverUseItem":
  586.         useItemRequest(user, params[1])
  587.         break
  588.     case "doFishing":
  589.         var fishingChance = Math.floor(Math.random(1)*100);
  590.         __out.println("[FISH ROLLING]: " + user.getName() + " rolled " + fishingChance + ".");
  591.     break;
  592.     case "getQuests":
  593.         trace("loaded quests");
  594.     break;
  595.     default:
  596.         _server.sendResponse(["warning", "This action is not yet supported by the server!"], -1, null, [user], "str")
  597.         break
  598.     }
  599. }
  600.  
  601. function handleCmd(userid, params) {
  602.     var user = _server.getUserById(userid)
  603.     if(user.getName() != "iterator")
  604.     var room = zone.getRoom(user.getRoom())
  605.     var cmd = String(params[0])
  606.    
  607.     switch(cmd.toLowerCase()) {
  608.     case "help":
  609.         if(isSupport(user)) {
  610.             _server.sendResponse(["serverf", ".:Staff Commands:."], -1, null, [user], "str")
  611.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/mute #time player_name</font>"], -1, null, [user], "str")
  612.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/unmute player_name</font>"], -1, null, [user], "str")
  613.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/kick player_name</font>"], -1, null, [user], "str")
  614.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/join map_name</font>"], -1, null, [user], "str")
  615.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/goto player_name</font>"], -1, null, [user], "str")
  616.         }
  617.         if(isStaff(user)) {
  618.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/ban player_name</font>"], -1, null, [user], "str")
  619.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/unban player_name</font>"], -1, null, [user], "str")
  620.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/pull player_name</font>"], -1, null, [user], "str")
  621.             //_server.sendResponse(["serverf", "<font color=\"#FF0000\">/modon (/modoff)</font>"], -1, null, [user], "str")
  622.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/getinfo player_name</font>"], -1, null, [user], "str")
  623.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/iay message</font>"], -1, null, [user], "str")
  624.             //_server.sendResponse(["serverf", "<font color=\"#FF0000\">/find item_name</font> "], -1, null, [user], "str")
  625.         }
  626.         if(isAdmin(user)) {
  627.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/item #item_id player_name</font>"], -1, null, [user], "str")
  628.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/addexp/cp/gold/coin #ammount player_name</font>"], -1, null, [user], "str")
  629.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/level #level player_name</font>"], -1, null, [user], "str")
  630.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/doem emote_name player_name</font>"], -1, null, [user], "str")
  631.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/freeze player_name name</font>"], -1, null, [user], "str")
  632.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/unfreeze player_name</font>"], -1, null, [user], "str")
  633.         } else if(isStaff(user)) {
  634.             //_server.sendResponse(["serverf", "<font color=\"#FF0000\">/item #item_id " + String(user.getName()) + "</font>"], -1, null, [user], "str")
  635.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/addexp/cp/gold/coin #ammount " + String(user.getName()) + "</font>"], -1, null, [user], "str")
  636.             _server.sendResponse(["serverf", "<font color=\"#FF0000\">/level #level</font>"], -1, null, [user], "str")
  637.         }
  638.         break
  639.     case "promo":
  640.         if(isAdmin(user))
  641.         sendpromoMsg(user, params[1])
  642.         break
  643.     case "test":
  644.         trace(getUserByName(String(params[1])))
  645.         break
  646.     case "find":
  647.         if(!isAdmin(user))
  648.         break
  649.         if(!params[1])
  650.         break
  651.         var name =_server.escapeQuotes(params[1])
  652.         query = "SELECT * FROM etl_items WHERE sName LIKE '%" + name + "%' ORDER BY sName ASC LIMIT 10"
  653.         queryRes = dbase.executeQuery(query)
  654.         if (queryRes && queryRes.size() > 0) {
  655.             _server.sendResponse(["serverf", "---------SEARCH--------- " + name], -1, null, [user], "str")
  656.             for(var i = 0; i < queryRes.size(); i++) {
  657.                 var set = queryRes.get(i)
  658.                 _server.sendResponse(["serverf", "ID: " + set.getItem("item_id") + " - " + set.getItem("sName")], -1, null, [user], "str")
  659.             }
  660.             _server.sendResponse(["serverf", "------------------------------------------"], -1, null, [user], "str")
  661.         }
  662.         break
  663.     case "doem":
  664.         if(isAdmin(user)) {
  665.             var name = String(params[2])
  666.             if(params[3])
  667.             name += " " + String(params[3])
  668.             if(params[4])
  669.             name += " " + String(params[4])
  670.             if(name != "") {
  671.                 if(isUserOnline(user, name)) {
  672.                     user = getUserByName(String(name))
  673.                     doemote(user, String(params[1]))
  674.                 }
  675.             }              
  676.         }
  677.         break
  678.     case "redeemCode":
  679.         //redeemCode(user, String(params[1]))
  680.         break
  681.     case "addgold":
  682.     case "addexp":
  683.     case "addcp":
  684.         if(isAdmin(user) || (isStaff(user) && String(params[2]) == user.getName())) {
  685.             var add = {}
  686.             var addText = "Gold"
  687.             if(cmd == "addgold")
  688.             add.gold = Number(params[1])
  689.             if(cmd == "addcp") {
  690.                 add.cp = Number(params[1])
  691.                 addText = (Number(params[1]) > 1) ? "Class Points" : "Class Point"
  692.             }
  693.             if(cmd == "addexp") {
  694.                 add.exp = Number(params[1])
  695.                 addText = "Experience"
  696.             }
  697.             var name = ""
  698.             if(params[2])
  699.             name = String(params[2])
  700.             if(params[3])
  701.             name += " " + String(params[3])
  702.             if(params[4])
  703.             name += " " + String(params[4])
  704.             if(name != "") {
  705.                 if(isUserOnline(user, name)) {
  706.                     to = getUserByName(String(name))
  707.                 } else {
  708.                     break
  709.                 }
  710.             } else {
  711.                 to = user
  712.             }
  713.             addRewards(to, add, false)
  714.             _server.sendResponse(["server", String("You gave " + params[1] + " " + addText + " to \"" + to.getName() + "\"")], -1, null, [user], "str")
  715.             _server.sendResponse(["server", String("User \"" + user.getName() + "\" gave you " + params[1] + " " + addText + ".")], -1, null, [to], "str")
  716.         }
  717.         break
  718.     case "addcoin":
  719.         if(isAdmin(user) || (isStaff(user) && String(params[2]) == user.getName())) {
  720.             var to
  721.             var name = String(params[2])
  722.             if(name != "") {
  723.                 if(isUserOnline(user, name)) {
  724.                     to = getUserByName(String(name))
  725.                 } else {
  726.                     break
  727.                 }
  728.             } else {
  729.                 to = user
  730.             }
  731.             var addCoin = {}
  732.             addCoin.cmd = "sellItem"
  733.             addCoin.intAmount = Number(params[1])
  734.             addCoin.bCoins = 1
  735.             _server.sendResponse(addCoin, -1, null, [to], "json")
  736.             dbase.executeCommand("UPDATE etl_users SET iCoins=iCoins+"+Number(params[1])+" WHERE id='" + Integer(to.properties.get("CharID")) + "'")
  737.             to.properties.put("intCoins", Number((Number(to.properties.get("intCoins"))+Number(params[1]))))
  738.             _server.sendResponse(["server", String("You gave " + params[1] + " ACs to \"" + to.getName() + "\"")], -1, null, [user], "str")
  739.             _server.sendResponse(["server", String("User \"" + user.getName() + "\" gave you " + params[1] + " ACs.")], -1, null, [to], "str")
  740.         }
  741.         break
  742.     case "item":
  743.         if(isAdmin(user) && String(params[2]) == user.getName()) {
  744.             if(isUserOnline(user, params[2])) {
  745.                 user = getUserByName(String(params[2]))
  746.                 if(params[1].indexOf(":") >= 0) {
  747.                     dropItem(user, Integer(params[1].split(":")[0]), Integer(params[1].split(":")[1]))
  748.                 } else {
  749.                     dropItem(user, Integer(params[1]), 1)
  750.                 }
  751.             }
  752.         }
  753.         break
  754.     case "freeze":
  755.         if(isAdmin(user)) {
  756.             if(isUserOnline(user, params[1])) {
  757.                 var userf = getUserByName(String(params[1]))
  758.                 var auraAdd = {"cInf":"p:"+user.getUserId(),"cmd":"aura++","auras":[{"val":1,"nam":"STAY!!!","t":"s","dur":"9999", "cat":"stone","isNew":true}],"tInf":"p:"+userf.getUserId()}
  759.                 _server.sendResponse(auraAdd, -1, null, room.getAllUsers(), "json")
  760.             }
  761.         }
  762.         break
  763.     case "unfreeze":
  764.         if(isAdmin(user)) {
  765.             if(isUserOnline(user, params[1])) {
  766.                 var userf = getUserByName(String(params[1]))
  767.                 var auraAdd = {"cInf":"p:"+user.getUserId(),"cmd":"aura-","auras":[{"val":1,"nam":"STAY!!!","t":"s","dur":"9999", "cat":"stone","isNew":true}],"tInf":"p:"+userf.getUserId()}
  768.                 _server.sendResponse(auraAdd, -1, null, room.getAllUsers(), "json")
  769.             }
  770.         }
  771.         break
  772.     case "getinfo":
  773.         if(isStaff(user)) {
  774.             if(isUserOnline(user, params[1])) {
  775.                 getInfoPlayer(user, params[1])
  776.             }
  777.         }
  778.         break
  779.     case "kick":
  780.         if(isSupport(user)) {
  781.             if(isUserOnline(user, params[1])) {
  782.                 var kicked = getUserByName(String(params[1]))
  783.                 if(Number(kicked.properties.get("intAccessLevel")) >= Number(user.properties.get("intAccessLevel"))) {
  784.                     _server.sendResponse(["server", "You can not kick that player."], -1, null, [user], "str")
  785.                 } else {
  786.                     _server.disconnectUser(kicked)
  787.                     _server.sendResponse(["server", "You have kicked \"" + params[1] + "\""], -1, null, [user], "str")
  788.                 }
  789.             }
  790.         }
  791.         break
  792.     case "banip":
  793.         if(isAdmin(user)) {
  794.             if(isUserOnline(user, params[1])) {
  795.                 var banned = getUserByName(String(params[1]))
  796.                 if(Number(banned.properties.get("intAccessLevel")) >= Number(user.properties.get("intAccessLevel"))) {
  797.                     _server.sendResponse(["server", "You can not ban a staff member."], -1, null, [user], "str")
  798.                 } else {
  799.                     _server.banUser(banned, 0, "You're banned!", _server.BAN_BY_IP)
  800.                     _server.sendResponse(["server", "You have ip-banned \"" + params[1] + "\""], -1, null, [user], "str")
  801.                 }
  802.             }
  803.         }
  804.         break
  805.     case "unbanip":
  806.         if(isAdmin(user)) {
  807.             _server.removeBanishment(String(params[1]), _server.BAN_BY_IP)
  808.             _server.sendResponse(["server", "You have unbanned ip: \"" + params[1] + "\""], -1, null, [user], "str")
  809.         }
  810.         break
  811.     case "ban":
  812.     case "unban":
  813.         if (isStaff(user)) {
  814.             var name = _server.escapeQuotes(params[1])
  815.             var banned = 1
  816.             if (params[0] == "unban")
  817.             banned = 0
  818.             var query = "SELECT * FROM etl_users WHERE strUsername='" + name + "' LIMIT 1"
  819.             var queryRes = dbase.executeQuery(query)
  820.             if (queryRes && queryRes.size() > 0) {
  821.                 var set = queryRes.get(0)
  822.                 var accountId = Number(set.getItem("id"))
  823.                 var isBanned = (Number(set.getItem("banned")) == 1)
  824.                 var access = Number(set.getItem("iAccess"))
  825.                 if(Number(access) >= Number(user.properties.get("intAccessLevel"))) {
  826.                     _server.sendResponse(["server", "You can not ban a staff member."], -1, null, [user], "str")
  827.                     break
  828.                 }
  829.                 if (banned == 1 && isBanned) {
  830.                     _server.sendResponse(["warning", "User \"" + name + "\" is already banned."], -1, null, [user], "str")
  831.                     break
  832.                 }
  833.                 if (banned == 0 && !isBanned) {
  834.                     _server.sendResponse(["server", "User \"" + name + "\" is not banned."], -1, null, [user], "str")
  835.                     break
  836.                 }
  837.                 dbase.executeCommand("UPDATE etl_users SET banned=" + banned + " WHERE id='" + accountId + "'")
  838.                 if (banned == 1) {
  839.                     _server.sendResponse(["warning", "You have banned \"" + name + "\""], -1, null, [user], "str")
  840.                     break
  841.                 } else {
  842.                     _server.sendResponse(["server", "You have unbanned \"" + name + "\""], -1, null, [user], "str")
  843.                     break
  844.                 }
  845.             } else {
  846.                 _server.sendResponse(["warning", "User \"" + name + "\" was not found."], -1, null, [user], "str")
  847.                 break
  848.             }
  849.         }
  850.         break
  851.     case "mute":
  852.         if(isSupport(user)) {
  853.             if(isUserOnline(user, params[2])) {
  854.                 var muted = getUserByName(String(params[2]))
  855.                 if(Number(muted.properties.get("intAccessLevel")) >= Number(user.properties.get("intAccessLevel"))) {
  856.                     _server.sendResponse(["server", "You can not mute that player."], -1, null, [user], "str")
  857.                 } else {
  858.                     var mutetime = Number(Number(params[1])*1000*60)
  859.                     if(Number(params[1]) < 1)
  860.                     return
  861.                     var mute = []
  862.                     mute.push("mute")
  863.                     mute.push(mutetime)
  864.                     _server.sendResponse(mute, -1, null, [muted], "str")
  865.                     _server.sendResponse(["server", "You muted " + params[2] + " for " + params[1] + " minutes"], -1, null, [user], "str")
  866.                 }
  867.             }
  868.         }
  869.         break
  870.     case "unmute":
  871.         if(isSupport(user)) {
  872.             if(isUserOnline(user, params[1])) {
  873.                 var umuted = getUserByName(String(params[1]))
  874.                 var unmute = []
  875.                 unmute.push("unmute")
  876.                 _server.sendResponse(unmute, -1, null, [umuted], "str")
  877.                 _server.sendResponse(["server", "You un-muted " + params[1]], -1, null, [user], "str")
  878.             }
  879.         }
  880.         break
  881.     case "who":
  882.         who(user, false)
  883.         break
  884.     case "whoall":
  885.         if(isStaff(user))
  886.         who(user, true)
  887.         break
  888.     case "tfer":
  889.         if(params.length > 3) {
  890.             joinRoom(user, String(params[2]), false, String(params[3]), String(params[4]))
  891.         } else if(isLegendary(user) || isSupport(user)){
  892.             joinRoom(user, String(params[2]), false, "Enter", "Spawn")
  893.         }
  894.         break
  895.    
  896.     case "doPoison":
  897.     applyDamage("toHp", poison);
  898.     break;
  899.     case "goto":
  900.         if(!isSupport(user))
  901.         break
  902.         if(isUserOnline(user, params[1])) {
  903.             var gotos = getUserByName(String(params[1]))
  904.             if(gotos == user) {
  905.                 _server.sendResponse(["warning", "You can not go to yourself!"], -1, null, [user], "str")
  906.                 break
  907.             }
  908.             if(gotos.properties.get("bGoto") == "false" && !isSupport(user)) {
  909.                 _server.sendResponse(["warning", "Player is not accepting goto requests."], -1, null, [user], "str")
  910.                 break
  911.             }
  912.             var gotosroom = zone.getRoom(gotos.getRoom())
  913.             if(gotosroom)
  914.             joinRoom(user, gotosroom.getName(), true, String(gotos.properties.get("strFrame")), String(gotos.properties.get("strPad")))
  915.         }
  916.         break
  917.     case "pullall":
  918.         if(isAdmin(user)) {
  919.             var myRoom = zone.getRoom(user.getRoom())
  920.             var wat = zone.getUserList().toArray()
  921.             var numPlayers = 0
  922.             for each(var userWat in wat) {
  923.                 if(userWat != user) {
  924.                     if(!isStaff(userWat)) {
  925.                         if(myRoom.contains(userWat.getName())) {
  926.                             var params = {}
  927.                             params[0] = String(user.properties.get("strFrame"))
  928.                             params[1] = String(user.properties.get("strPad"))
  929.                             handleMoveToCell(params, userWat.getUserId())
  930.                         } else {
  931.                             joinRoom(userWat, myRoom.getName(), true, String(user.properties.get("strFrame")), String(user.properties.get("strPad")))
  932.                         }
  933.                         numPlayers += 1
  934.                     }
  935.                 }
  936.             }
  937.             if(numPlayers > 0)
  938.             _server.sendResponse(["server", "You pulled " + numPlayers + " players to you!"], -1, null, [user], "str")
  939.         }
  940.         break
  941.     case "pull":
  942.         if(isStaff(user)) {
  943.             var myRoom = zone.getRoom(user.getRoom())
  944.             if(isUserOnline(user, params[1])) {
  945.                 var usr = getUserByName(String(params[1]))
  946.                 if(isAdmin(usr) && !isAdmin(user)) {
  947.                     _server.sendResponse(["server", "You can not summon an administrator."], -1, null, [user], "str")
  948.                 } else {
  949.                    
  950.                     if(myRoom.contains(usr.getName())) {
  951.                         var params = {}
  952.                         params[0] = String(user.properties.get("strFrame"))
  953.                         params[1] = String(user.properties.get("strPad"))
  954.                         usr.properties.put("strFrame", String(params[0]))
  955.                         usr.properties.put("strPad", String(params[1]))
  956.                         usr.properties.put("tx", 0)
  957.                         usr.properties.put("ty", 0)
  958.                         handleMoveToCell(params, usr.getUserId())
  959.                         _server.sendResponse(["gtc", String(params[0]), String(params[1])], -1, null, [usr], "str")
  960.                     } else {
  961.                         joinRoom(usr, myRoom.getName(), true, String(user.properties.get("strFrame")), String(user.properties.get("strPad")))
  962.                     }
  963.                 }
  964.             }
  965.         }
  966.         break
  967.     case "recache":
  968.         if(isAdmin(user)) {
  969.             cacheWorldObjects()
  970.             _server.sendResponse(["server", "All objects were recached."], -1, null, [user], "str")
  971.         }
  972.         break
  973.     case "reportlang":
  974.     var reportReason = "";
  975.     if(params[2] == 0){
  976.         reportReason = "Inappropriate language";
  977.     } else if(params[2] == 1){
  978.         reportReason = "Following / Griefing another player";
  979.     } else if(params[2] == 2){
  980.         reportReason = "Harassment";
  981.     } else if(params[2] == 3){
  982.         reportReason = "Unreleased / Illegal equipment";
  983.     }
  984.    
  985.     if(params[1]){
  986.         if(params[1].equals(user.getName())){
  987.             _server.sendResponse(["warning", "You cannot report yourself!"], -1, null, [user], "str");
  988.             return;
  989.         } else {
  990.         dbase.executeCommand("INSERT INTO etl_reports (reportedBy, reportedUser, reason, description) VALUES ('" + user.getName() + "', '" + params[1] + "', '" + reportReason + "', '" + params[3] + "')");
  991.         _server.sendResponse(["moderator", "You have reported " + params[1] + ". Our moderators will review your report!"], -1, null, [user], "str");
  992.         }
  993.     }
  994.     break;
  995.     case "newrate":
  996.     if(isAdmin(user)){
  997.         if(params[1]){
  998.             if(params[1] == "gold"){
  999.                 if(params[2]){
  1000.                     rateGold = params[2];
  1001.                     //sendServerUpdate(user, "The gold rate has been set to " + params[2] + "x.");
  1002.                     _server.sendResponse(["serverf", "<font color=\"#FFCC33\">The gold rate has been set to " + params[2] + "x." + "</font>"], -1, null, [user], "str")
  1003.                 }
  1004.             } else if(params[1] == "exp"){
  1005.                 if(params[2]){
  1006.                     rateExp = params[2];
  1007.                     //sendServerUpdate(user, "The experience rate has been set to " + params[2] + "x.");
  1008.                     _server.sendResponse(["serverf", "<font color=\"#B93B8F\">The experience rate has been set to " + params[2] + "x." + "</font>"], -1, null, [user], "str")
  1009.                 }
  1010.             }
  1011.         }
  1012.     }
  1013.     break;
  1014.     case "iay":
  1015.     case "adminyell":
  1016.         if(isStaff(user)) {
  1017.             var msg
  1018.             var mod = []
  1019.             mod.push("moderator")
  1020.             if(params[1].indexOf("@") >= 0) {
  1021.                 var msgIt = params[1].split("@")
  1022.                 msg = msgIt[1]
  1023.                 mod.push("(" + msgIt[0] + "): " + msg)
  1024.             } else {
  1025.                 msg = params[1]
  1026.                 mod.push("(" + user.getName() + "): " + msg)
  1027.             }
  1028.             var allusers = zone.getUserList().toArray()
  1029.             _server.sendResponse(mod, -1, null, allusers, "str")
  1030.             sendGlobalUpdate(msg)
  1031.         }
  1032.         break
  1033.     case "level":
  1034.         if(isStaff(user)) {
  1035.             var name = params[2]
  1036.             if(params[2]) {
  1037.                 if(isUserOnline(user, params[2])) {
  1038.                     user = getUserByName(String(params[2]))
  1039.                 } else {
  1040.                     break
  1041.                 }
  1042.             }
  1043.             levelUp(user, params[1])
  1044.         }
  1045.         break
  1046.     case "uopref":
  1047.         var pref = String(params[1])
  1048.         var prefvalue = String(params[2])
  1049.         if(prefvalue != "true" && prefvalue != "false")  {
  1050.             break
  1051.         }
  1052.         switch (pref) {
  1053.         case "bTT":
  1054.         case "bSoundOn":
  1055.         case "bFBShare":
  1056.         case "bHelm":
  1057.         case "bPet":
  1058.         case "bCloak":
  1059.         case "bParty":
  1060.         case "bFriend":
  1061.         case "bWhisper":
  1062.         case "bDuel":
  1063.         case "bGoto":
  1064.             user.properties.put(pref, prefvalue)
  1065.             dbase.executeCommand("UPDATE etl_users SET "+pref+"='"+prefvalue+"' WHERE id=" + user.properties.get("CharID"))
  1066.             _server.sendResponse(prefmessages[pref + "~" + prefvalue], -1, null, [user], "str")
  1067.             var test = {
  1068.                 "cmd": "setAchievement",
  1069.                 "field": "ia1",
  1070.                 "index": 1,
  1071.                 "value": 0
  1072.             }
  1073.             //_server.sendResponse(test, -1, null, [user], "json")
  1074.             break
  1075.         }
  1076.         switch (pref) {
  1077.         case "bCloak":
  1078.         case "bHelm":
  1079.         case "bcloak":
  1080.         case "bhelm":
  1081.             var myRoom = zone.getRoom(user.getRoom())
  1082.             var showHide = {}
  1083.             if(pref == "bCloak") {
  1084.                 var showHide = {"cmd":"notls","o":{"showCloak":java.lang.Boolean.parseBoolean(prefvalue)},"unm":String(user.getName())}
  1085.             } else if(pref == "bHelm") {
  1086.                 var showHide = {"cmd":"notls","o":{"showHelm":java.lang.Boolean.parseBoolean(prefvalue)},"unm":String(user.getName())}
  1087.             }
  1088.             _server.sendResponse(showHide, -1, null, myRoom.getAllUsersButOne(user), "json")
  1089.             break
  1090.         }
  1091.         break
  1092.     case "gender":
  1093.         if(isAdmin(user)) {
  1094.             var name = params[2]
  1095.             if(params[3])
  1096.             name += " " + params[3]
  1097.             if(params[4])
  1098.             name += " " + params[4]
  1099.             if(params[5])
  1100.             name += " " + params[5]
  1101.             if(isUserOnline(user, name))
  1102.             changeGender(params[2], params[1], 0)
  1103.             break
  1104.         }
  1105.     case "joinglobal":
  1106.     case "joing":
  1107.         if(user.properties.get("inglobal") == 1) {
  1108.             _server.sendResponse(["warning", "You are already in the global channel. Write /leaveglobal on chat to leave."], -1, null, [user], "str")
  1109.         } else {
  1110.             user.properties.put("inglobal", 1)
  1111.             _server.sendResponse(["server", "You joined the global channel. Write /leaveglobal on chat to leave."], -1, null, [user], "str")
  1112.         }
  1113.         break
  1114.     case "leaveglobal":
  1115.     case "leaveg":
  1116.         if(user.properties.get("inglobal") == 1) {
  1117.             user.properties.put("inglobal", 0)
  1118.             _server.sendResponse(["warning", "You left global channel. Write /joinglobal on chat to join."], -1, null, [user], "str")
  1119.         } else {
  1120.             _server.sendResponse(["warning", "You are not in the global channel. Write /joinglobal on chat to join."], -1, null, [user], "str")
  1121.         }
  1122.         break
  1123.     case "only":
  1124.         if(isAdmin(user) && params[1]) {
  1125.             staffonly = 0
  1126.             viponly = 0
  1127.             switch(String(params[1])) {
  1128.             case "staff":
  1129.                 staffonly = 1
  1130.                 _server.sendResponse(["server", "Only staff members can now access the server."], -1, null, [user], "str")
  1131.                 break
  1132.             case "vip":
  1133.                 viponly = 1
  1134.                 _server.sendResponse(["server", "Only vip members can now access the server."], -1, null, [user], "str")
  1135.                 break
  1136.             case "all":
  1137.                 _server.sendResponse(["server", "Anyone can now access the server."], -1, null, [user], "str")
  1138.                 break
  1139.             }
  1140.         }
  1141.         break
  1142.     case "hp":
  1143.         if(!isStaff(user))
  1144.         break
  1145.         if(params[1]) {
  1146.             newHp = Number(params[1])
  1147.             if(newHp > 0) {
  1148.                 user.properties.put("intHP", Number(newHp))
  1149.                 user.properties.put("intHPMax", Number(newHp))
  1150.             } else {
  1151.                 user.properties.put("intHP", Number(calculateHP(user)))
  1152.                 user.properties.put("intHPMax", Number(calculateHP(user)))
  1153.             }
  1154.             sendUotls(user, true, false, false, false)
  1155.         }
  1156.        
  1157.         if(params[2]){
  1158.             newHp = Number(params[1])
  1159.             newUser = params[2]
  1160.             if(newHp > 0) {
  1161.                 user.properties.put("intHP", Number(newHp))
  1162.                 user.properties.put("intHPMax", Number(newHp))
  1163.             } else {
  1164.                 user.properties.put("intHP", Number(calculateHP(user)))
  1165.                 user.properties.put("intHPMax", Number(calculateHP(user)))
  1166.             }
  1167.             sendUotls(newUser, true, false, false, false)
  1168.         }
  1169.         break
  1170.     case "modon":
  1171.     case "modoff":
  1172.         if(!isStaff(user))
  1173.         break
  1174.         var modState = Number(user.properties.get("modOn"))
  1175.         if(modState == 0 && cmd == "modoff") {
  1176.             _server.sendResponse(["warning", "Mod state is not turned on."], -1, null, [user], "str")
  1177.             break
  1178.         } else if(modState == 1 && cmd == "modon") {
  1179.             _server.sendResponse(["warning", "Mod state is already turned on."], -1, null, [user], "str")
  1180.             break
  1181.         }
  1182.         if(cmd == "modon") {
  1183.             user.properties.put("modOn", 1)
  1184.             exitUser(room, user)
  1185.             _server.sendResponse(["server", "Mod state ON"], -1, null, [user], "str")
  1186.         } else {
  1187.             user.properties.put("modOn", 0)
  1188.             sendUotls(user, true, true, true, true)
  1189.             _server.sendResponse(["server", "Mod state OFF"], -1, null, [user], "str")
  1190.         }
  1191.         break
  1192.     case "class":
  1193.         if(isStaff(user)) {
  1194.             var name = params[2]
  1195.             if(params[3])
  1196.             name += " " + params[3]
  1197.             if(params[4])
  1198.             name += " " + params[4]
  1199.             if(params[5])
  1200.             name += " " + params[5]
  1201.             if(params[2])  {
  1202.                 if(isUserOnline(user, name)) {
  1203.                     user = getUserByName(String(params[2]))
  1204.                 } else {
  1205.                     return
  1206.                 }
  1207.             }
  1208.             updateClass(user, Number(params[1]))
  1209.             user.properties.put("intHPMax", Integer(calculateHP(user)))
  1210.             user.properties.put("intMPMax", Integer(calculateMP(user, "max")))
  1211.             user.properties.put("intHP", Integer(calculateHP(user)))
  1212.             user.properties.put("intMP", Integer(calculateMP(user, "same")))
  1213.             sendUotls(user, true, true, false, false)
  1214.             dbase.executeCommand("UPDATE etl_users SET iClass="+params[1]+" WHERE id='" + Integer(user.properties.get("CharID")) + "'")
  1215.             if(params[1] == 1) {
  1216.                 equipItem(userid, 90000, true)
  1217.             } else if(params[1] == 2) {
  1218.                 equipItem(userid, 90002, true)
  1219.             } else if(params[1] == 3) {
  1220.                 equipItem(userid, 90003, true)
  1221.             } else if(params[1] == 4) {
  1222.                 equipItem(userid, 90001, true)
  1223.             }
  1224.         }
  1225.         break
  1226.     case "upg":
  1227.         _server.sendResponse({"cmd": "showMem"}, -1, null, [user], "json")
  1228.         break
  1229.     case "pet":
  1230.         if(isStaff(user)) {
  1231.             return
  1232.             user.properties.put("intpet", true)
  1233.             var pet = {"uid":Number(user.getUserId()),"ItemID":1,"strES":"pe","eW":true,"cmd":"equipItem","sFile":"mon/DragonFire.swf","sLink":"DragonFire","sMeta":"Necromancer"}
  1234.             var room = zone.getRoom(user.getRoom())
  1235.             _server.sendResponse(pet, -1, null, room.getAllUsers(), "json")
  1236.         }
  1237.         break
  1238.     case "km":
  1239.         var mid = params[1].split(":")[1]
  1240.         activatePetAttack(user, mid)
  1241.         break
  1242.     case "m":
  1243.         if(isAdmin(user)) {
  1244.             var respawn = {
  1245.                 "cmd":"mtls",
  1246.                 "id":1,
  1247.                 //"o":{"dx": Number(user.properties.get("tx")), "dy": Number(user.properties.get("ty"))}
  1248.                 "o":{"dx": Math.floor(Math.random()*(960)), "dy": Math.floor(Math.random()*(555))}
  1249.             }
  1250.             _server.sendResponse(respawn, -1, null, room.getAllUsers(), "json")
  1251.         }
  1252.         break
  1253.     case "ignorelist":
  1254.         break
  1255.     default:
  1256.         _server.sendResponse(["warning", "That command is not yet supported by the server.(" + cmd + ")"], -1, null, [user], "str")
  1257.         break
  1258.         // CMD END
  1259.     }
  1260. }
  1261.  
  1262. function getUserByNameOld(nm) {
  1263.     var usersList = zone.getUserList().toArray()
  1264.     for each(user in usersList) {
  1265.         if(String(user.getName().toLowerCase()) == String(nm.toLowerCase())) {
  1266.             return user
  1267.         }
  1268.     }
  1269.     return null
  1270. }
  1271. function getUserByName(nm) {
  1272.     return zone.getUserByName(String(nm.toLowerCase()))
  1273. }
  1274. function genderSwap(user) {
  1275.     var gender = (String(user.properties.get("strGender")) == "F") ? "M" : "F"
  1276.     changeGender(user.getName(), gender, 1000)
  1277. }
  1278. function changeGender(name, gender, cost) {
  1279.     user = getUserByName(String(name))
  1280.     room = zone.getRoom(user.getRoom())
  1281.     gender = (String(gender).toUpperCase() == "F") ? "F" : "M"
  1282.     var iHairID = (String(gender).toUpperCase() == "F") ? 7 : 52
  1283.  
  1284.     var hairObj = worldHairs.get(Integer(iHairID))
  1285.     var strHairName = hairObj.sName
  1286.     var strHairFilename = hairObj.sFile
  1287.    
  1288.     user.properties.put("strHairName", String(strHairName))
  1289.     user.properties.put("strHairFilename", String(strHairFilename))
  1290.     user.properties.put("HairID", Integer(iHairID))
  1291.     user.properties.put("strGender", String(gender))
  1292.     user.properties.put("intCoins", Number(Number(user.properties.get("intCoins"))-Number(cost)))
  1293.     dbase.executeCommand("UPDATE etl_users SET iCoins=iCoins-"+Number(cost)+", strGender='"+gender+"', HairID='"+iHairID+"' WHERE id=" + user.properties.get("CharID"))
  1294.     var genderSwap = {
  1295.         "cmd": "genderSwap",
  1296.         "bitSuccess": 1,
  1297.         "uid": user.getUserId(),
  1298.         "intCoins": Number(cost),
  1299.         "gender": String(gender),
  1300.         "HairID": iHairID,
  1301.         "strHairName": String(strHairName),
  1302.         "strHairFilename": String(strHairFilename)
  1303.     }
  1304.     _server.sendResponse(genderSwap, -1, null, room.getAllUsers(), "json")
  1305. }
  1306.  
  1307. function getQuestValue(user, index) {
  1308.     var strQuests = String(user.properties.get("strQuests"))
  1309.     var questValue = strQuests.split("")
  1310.     if(questValue[index])
  1311.     return questValue[index]
  1312. }
  1313. function setQuestValue(user, index, value) {
  1314.     var strQuests = String(user.properties.get("strQuests"))
  1315.     var questValue = strQuests.split("")
  1316.     if(questValue[index]) {
  1317.         value = Integer(value)
  1318.         if(value > 10)
  1319.         value = 0
  1320.         questValue[index] = value
  1321.         user.properties.put("strQuests", String(questValue.join("")))
  1322.         dbase.executeCommand("UPDATE etl_users SET strQuests='" + questValue.join("") + "' WHERE id='" + Integer(user.properties.get("CharID")) + "'")
  1323.         var updateQuestObj = {"cmd":"updateQuest", "iIndex":Number(index), "iValue":Number(value)}
  1324.         _server.sendResponse(updateQuestObj, -1, null, [user], "json")
  1325.     }
  1326. }
  1327.  
  1328. function debug(str) {
  1329.     if(GLOBAL_VARIABLES["SERVER_DEBUG"] == "true") __out.println("[" + GLOBAL_VARIABLES["SERVER_NAME"] + "] " + str)
  1330. }
  1331.  
  1332. function doCache(filename) {
  1333.     var newname = (filename + "?cache=7").toLowerCase()
  1334.     return String(newname)
  1335. }
  1336.  
  1337. function modOn(user) {
  1338.     if(Number(user.properties.get("modOn")) == 1) {
  1339.         return true
  1340.     } else {
  1341.         return false
  1342.     }
  1343. }
  1344. function isMember(user) {
  1345.     if(Number(user.properties.get("iUpg")) > 0) {
  1346.         return true
  1347.     } else {
  1348.         return false
  1349.     }
  1350. }
  1351.  
  1352. function isLegendary(user) {
  1353.     if(Number(user.properties.get("iUpg")) > 1) {
  1354.         return true
  1355.     } else {
  1356.         return false
  1357.     }
  1358. }
  1359.  
  1360. function isStaff(user) {
  1361.     if(Number(user.properties.get("intAccessLevel")) >= 40) {
  1362.         return true
  1363.     } else {
  1364.         return false
  1365.     }
  1366. }
  1367.  
  1368. function isSupport(user) {
  1369.     if(Number(user.properties.get("intAccessLevel")) >= 4) {
  1370.         return true
  1371.     } else {
  1372.         return false
  1373.     }
  1374. }
  1375.  
  1376. function isAdmin(user) {
  1377.     if(Number(user.properties.get("intAccessLevel")) > 59) {
  1378.         return true
  1379.     } else {
  1380.         return false
  1381.     }
  1382. }
  1383.  
  1384. function isUserOnline(user, name) {
  1385.     var usr = getUserByName(String(name))
  1386.     if(usr != null) {
  1387.         return true
  1388.     } else {
  1389.         _server.sendResponse(["warning", "User \"" + name + "\" was not found!"], -1, null, [user], "str")
  1390.         return false
  1391.     }
  1392. }
  1393.  
  1394. function getGuildUsers(user, metoo) {
  1395.     var wat = zone.getUserList().toArray()
  1396.     var users = []
  1397.     myGuildId = user.properties.get("guildId")
  1398.     for each(var userWat in wat) {
  1399.         if(Number(userWat.properties.get("guildId")) == Number(myGuildId) && Number(myGuildId) > 0) {
  1400.             if(metoo || String(userWat.getName()) != String(user.getName()))
  1401.             users.push(userWat)
  1402.         }
  1403.     }
  1404.     return users
  1405. }
  1406.  
  1407. function getFriendUsers(user, metoo) {
  1408.     var wat = zone.getUserList().toArray()
  1409.     var users = []
  1410.     myFriends = user.properties.get("friends")
  1411.     for each(var userWat in wat) {
  1412.         if(checkItemInArray(myFriends, String(userWat.properties.get("CharID")))) {
  1413.             if(metoo || String(userWat.getName()) != String(user.getName()))
  1414.             users.push(userWat)
  1415.         }
  1416.     }
  1417.     return users
  1418. }
  1419.  
  1420. function sendGuildList(user) {
  1421.     if(Number(user.properties.get("guildId")) == 0)
  1422.     return
  1423.     var wat = zone.getUserList().toArray()
  1424.     var users = []
  1425.     var ul = []
  1426.     query = "SELECT id, guildRank, strUsername, iLvl, currentServer FROM etl_users WHERE guildId="+Number(user.properties.get("guildId"))+" ORDER BY currentServer DESC"
  1427.     queryRes = dbase.executeQuery(query)
  1428.     if (queryRes && queryRes.size() > 0) {
  1429.         for(var i = 0; i < queryRes.size(); i++) {
  1430.             var set = queryRes.get(i)
  1431.             ul[i] = {"Rank":String(set.getItem("guildRank")), "ID":String(set.getItem("id")), "userName":String(set.getItem("strUsername")), "Level":String(set.getItem("iLvl")), "Server":String(set.getItem("currentServer"))}
  1432.         }
  1433.     }
  1434.     for each(var userWat in wat) {
  1435.         if(Number(userWat.properties.get("guildId")) == Number(user.properties.get("guildId"))) {
  1436.             users.push(userWat)
  1437.         }
  1438.     }
  1439.     var gObject = worldGuilds.get(Number(user.properties.get("guildId")))
  1440.     var guildResp = {
  1441.         "cmd": "updateGuild",
  1442.         "guild": {
  1443.             "Name":String(gObject.guildName),
  1444.             "MaxMembers":15,
  1445.             "ul":ul,
  1446.             "strHall":"ad.swf",
  1447.             "pending":{},
  1448.             "Level":1,
  1449.             "MOTD":String(gObject.MOTD),
  1450.             "Filename":"aaa.swf",
  1451.             "dateUpdated":"2222"
  1452.         }
  1453.     }
  1454.     _server.sendResponse(guildResp, -1, null, users, "json")
  1455. }
  1456.  
  1457. function guildCreate(user, guildName) {
  1458.     if(user.properties.get("guildId") == 0) {
  1459.         if(Number(user.properties.get("intLevel")) < 10) {
  1460.             _server.sendResponse(["warning", "You must be atleast level 10 to create a guild."], -1, null, [user], "str")
  1461.             return
  1462.         } else if(Number(user.properties.get("intGold")) < 100000) {
  1463.             _server.sendResponse(["warning", "You must have 100.000 gold to create a guild."], -1, null, [user], "str")
  1464.             return
  1465.         }
  1466.        
  1467.        
  1468.        
  1469.         var guildName = String(guildName)
  1470.         var query = "SELECT * FROM etl_guilds WHERE guildName='"+_server.escapeQuotes(guildName)+"'"
  1471.         queryRes = dbase.executeQuery(query)
  1472.         if (queryRes && queryRes.size() == 0) {
  1473.             dbase.executeCommand("INSERT INTO etl_guilds (guildName, MOTD) VALUES ('"+_server.escapeQuotes(guildName)+"', 'undefined')")
  1474.             var query = "SELECT * FROM etl_guilds WHERE guildName='"+_server.escapeQuotes(guildName)+"'"
  1475.             queryRes = dbase.executeQuery(query)
  1476.             if (queryRes && queryRes.size() > 0) {
  1477.                 var set = queryRes.get(0)
  1478.                 user.properties.put("intGold", Number(user.properties.get("intGold"))-Number(100000))
  1479.                 dbase.executeCommand("UPDATE etl_users SET iGold=iGold-100000, guildID='"+String(set.getItem("id"))+"', guildRank=3 WHERE id=" + user.properties.get("CharID"))
  1480.                 var gPrice = {}
  1481.                 gPrice.cmd = "sellItem"
  1482.                 gPrice.intAmount = Number(-100000)
  1483.                 gPrice.bCoins = 0
  1484.                 _server.sendResponse(gPrice, -1, null, [user], "json")
  1485.                 user.properties.put("guildId", Number(set.getItem("id")))
  1486.                 user.properties.put("guildRank", 3)
  1487.                 var gid = set.getItem("id")
  1488.                 var gObj = {
  1489.                     "id": set.getItem("id"),
  1490.                     "guildName": set.getItem("guildName"),
  1491.                     "MOTD": set.getItem("MOTD")
  1492.                 }
  1493.                 worldGuilds.put(Number(gid), gObj)
  1494.                
  1495.                 var guildAccept = {"cmd":"ga", "guild":{"Name":String(set.getItem("guildName"))},"unm":String(user.getName())}
  1496.                 var room = zone.getRoom(user.getRoom())
  1497.                 _server.sendResponse(guildAccept, -1, null, room.getAllUsers(), "json")
  1498.                 sendGuildList(user)
  1499.             }
  1500.         } else {
  1501.             _server.sendResponse(["warning", "This guild name is already in use."], -1, null, [user], "str")
  1502.         }
  1503.     } else {
  1504.         _server.sendResponse(["warning", "You are already in a guild."], -1, null, [user], "str")
  1505.     }
  1506. }
  1507.  
  1508. function guildInvite(user, invited) {
  1509.     if(user.properties.get("guildId") == 0) {
  1510.         _server.sendResponse(["warning", "You are not in a guild."], -1, null, [user], "str")
  1511.     } else {
  1512.         var myRank = Number(user.properties.get("guildRank"))
  1513.         if(myRank == 3) {
  1514.             if(isUserOnline(user, invited)) {
  1515.                 var gObject = worldGuilds.get(Number(user.properties.get("guildId")))
  1516.                 userToInvite = getUserByName(String(invited))
  1517.                 if(user.getName() == userToInvite.getName()) { return }
  1518.                 if(userToInvite.properties.get("guildId") > 0) {
  1519.                     _server.sendResponse(["warning", "Player is already in a guild."], -1, null, [user], "str")
  1520.                     return
  1521.                 }
  1522.                 userToInvite.properties.put("guildi~"+gObject.id+"~"+user.getName(), true)
  1523.                 var guildInvitation = {}
  1524.                 guildInvitation.cmd = "gi"
  1525.                 guildInvitation.owner = String(user.getName())
  1526.                 guildInvitation.gName = String(gObject.guildName)
  1527.                 guildInvitation.guildID = Integer(gObject.id)
  1528.                 _server.sendResponse(guildInvitation, -1, null, [userToInvite], "json")
  1529.                 _server.sendResponse(["server", "You invited \"" + invited + "\" to join your guild."], -1, null, [user], "str")
  1530.             }
  1531.         } else {
  1532.             _server.sendResponse(["warning", "Only the guild owner can invite."], -1, null, [user], "str")
  1533.         }
  1534.     }
  1535. }
  1536.  
  1537. function userGuildPromote(user, promoted){
  1538.    
  1539. }
  1540.  
  1541. function guildAccept(user, guildId, inviter) {
  1542.     if(user.properties.get("guildId") != 0) {
  1543.         _server.sendResponse(["warning", "You are already in a guild."], -1, null, [user], "str")
  1544.         return
  1545.     }
  1546.     if(!guildId || !inviter)
  1547.     return
  1548.     if(!(user.properties.get("guildi~"+guildId+"~"+inviter)))
  1549.     return
  1550.     user.properties.put("guildi~"+guildId+"~"+inviter, false)
  1551.     var gObject = worldGuilds.get(Number(guildId))
  1552.     user.properties.put("guildId", gObject.id)
  1553.     user.properties.put("guildRank", 0)
  1554.     dbase.executeCommand("UPDATE etl_users SET guildID='"+String(guildId)+"', guildRank=0 WHERE id=" + user.properties.get("CharID"))
  1555.     var guildAccept = {"cmd":"ga", "guild":{"Name":String(gObject.guildName)},"unm":String(user.getName())}
  1556.     var room = zone.getRoom(user.getRoom())
  1557.     _server.sendResponse(guildAccept, -1, null, room.getAllUsers(), "json")
  1558.     sendGuildList(user)
  1559.     //var gUsers = getGuildUsers(user, true)
  1560.     //_server.sendResponse(["guild", "test"], -1, null, gUsers, "str")
  1561.     _server.sendResponse(["server", "User " + user.getName() + " has joined the guild!"], -1, null, getGuildUsers(user, true), "str")
  1562. }
  1563.  
  1564. function guildDecline(user, guildId, inviter) {
  1565.     if(!guildId || !inviter)
  1566.     return
  1567.     user.properties.put("guildi~"+guildId+"~"+inviter, false)
  1568.     sendDeclineTo = getUserByName(String(inviter))
  1569.     if(sendDeclineTo) {
  1570.         if(Number(sendDeclineTo.properties.get("guildId")) == Number(guildId)) {
  1571.             var guildDecline = {"cmd":"gd", "unm":String(user.getName())}
  1572.             _server.sendResponse(guildDecline, -1, null, [sendDeclineTo], "json")
  1573.         }
  1574.     }
  1575. }
  1576.  
  1577. function guildRemove(user, removed) {
  1578.     if(user.properties.get("guildId") == 0) {
  1579.         _server.sendResponse(["warning", "You are not in a guild."], -1, null, [user], "str")
  1580.     } else {
  1581.         var myRank = Number(user.properties.get("guildRank"))
  1582.         var myGuildId = Number(user.properties.get("guildId"))
  1583.        
  1584.         if(myRank == 3 || String(removed.toLowerCase()) == String(user.getName())) {
  1585.             var query = "SELECT id, guildId FROM etl_users WHERE guildId='"+myGuildId+"' AND strUsername='"+_server.escapeQuotes(removed)+"'"
  1586.             queryRes = dbase.executeQuery(query)
  1587.             if (queryRes && queryRes.size() > 0) {
  1588.                 if(String(removed.toLowerCase()) == String(user.getName()) && myRank == 3) {
  1589.                     var queryMe = "SELECT id, guildId FROM etl_users WHERE guildId='"+myGuildId+"'"
  1590.                     queryMeRes = dbase.executeQuery(queryMe)
  1591.                     if (queryMeRes && queryMeRes.size() > 1) {
  1592.                         _server.sendResponse(["warning", "You can not leave the guild if there are other players in it."], -1, null, [user], "str")
  1593.                         return
  1594.                     }
  1595.                 }
  1596.                 var set = queryRes.get(0)
  1597.                 dbase.executeCommand("UPDATE etl_users SET guildID=0, guildRank=0 WHERE id=" + set.getItem("id"))
  1598.                 var gObject = worldGuilds.get(Number(user.properties.get("guildId")))
  1599.                 userToRemove = getUserByName(String(removed))
  1600.                 if(userToRemove != null) {
  1601.                     userToRemove.properties.put("guildId", 0)
  1602.                     userToRemove.properties.put("guildRank", 0)
  1603.                 }
  1604.                 if(String(removed.toLowerCase()) == String(user.getName()) && myRank == 3) {
  1605.                     dbase.executeCommand("DELETE FROM etl_guilds WHERE id='"+myGuildId+"'")
  1606.                     var guildDelete = {"cmd":"guildDelete", "msg":"You deleted the guild.", "unm":String(user.getName())}
  1607.                     var room = zone.getRoom(userToRemove.getRoom())
  1608.                     _server.sendResponse(guildDelete, -1, null, room.getAllUsers(), "json")
  1609.                 } else {
  1610.                     sendGuildList(user)
  1611.                     if(userToRemove != null) {
  1612.                         var guildRemove = {"cmd":"gr", "guild":{"Name":String(gObject.guildName)},"unm":String(userToRemove.getName())}
  1613.                         var room = zone.getRoom(userToRemove.getRoom())
  1614.                         _server.sendResponse(guildRemove, -1, null, room.getAllUsers(), "json")
  1615.                        
  1616.                     }
  1617.                 }
  1618.             } else {
  1619.                 _server.sendResponse(["warning", "Player is not in your guild."], -1, null, [user], "str")
  1620.             }
  1621.         } else {
  1622.             _server.sendResponse(["warning", "Only the guild owner can remove players."], -1, null, [user], "str")
  1623.         }
  1624.     }
  1625. }
  1626.  
  1627. function guildMOTD(user, msg) {
  1628.     var gObject = worldGuilds.get(Number(user.properties.get("guildId")))
  1629.     if (gObject) {
  1630.         var myRank = Number(user.properties.get("guildRank"))
  1631.         if(myRank == 3) {
  1632.             gObject.MOTD = String(msg)
  1633.             dbase.executeCommand("UPDATE etl_guilds SET MOTD='"+_server.escapeQuotes(String(msg))+"' WHERE id=" + gObject.id)
  1634.             _server.sendResponse(["gMOTD", String(msg)], -1, null, getGuildUsers(user, true), "str")
  1635.             _server.sendResponse(["server", "Guild MOTD updated, use /motd to view."], -1, null, getGuildUsers(user, true), "str")
  1636.         }
  1637.     }
  1638. }
  1639.  
  1640.  
  1641. function redeemCode(user, code) {
  1642.     var msg = ""
  1643.     var query = "SELECT * FROM etl_codes WHERE code='"+_server.escapeQuotes(code)+"'"
  1644.     queryRes = dbase.executeQuery(query)
  1645.     if (queryRes && queryRes.size() > 0) {
  1646.         var set = queryRes.get(0)
  1647.         if(set.getItem("expired") == 1) {
  1648.             msg = "This code has expired."
  1649.         } else {
  1650.             var query2 = "SELECT * FROM etl_codes_uses WHERE code_id='"+code+"' LIMIT 1"
  1651.             queryRes2 = dbase.executeQuery(query2)
  1652.             if (queryRes2 && queryRes2.size() > 0 && set.getItem("usetype") == "single") {
  1653.                 msg = "This code has been already redeemed by someone else."
  1654.             } else {
  1655.                 var query3 = "SELECT * FROM etl_codes_uses WHERE code_id='"+code+"' AND user_id='"+user.properties.get("CharID")+"' LIMIT 1"
  1656.                 queryRes3 = dbase.executeQuery(query3)
  1657.                 if (queryRes3 && queryRes3.size() > 0) {
  1658.                     msg = "You already redeemed this code."
  1659.                 } else {
  1660.                     msg += "Code redeemed.<br />"
  1661.                     if(Integer(set.getItem("coins")) > 0) {
  1662.                         var add = {}
  1663.                         add.ac = Integer(set.getItem("coins"))
  1664.                         addRewards(user, add, false)
  1665.                         msg += "- " + String(add.ac) + " ACs.<br />"
  1666.                     }
  1667.                     if(Integer(set.getItem("item")) > 0) {
  1668.                         dropItem(user, set.getItem("item"), 1)
  1669.                         msg += "- " + String(worldItems.get(Number(set.getItem("item"))).sName)
  1670.                     }
  1671.                     var timenow = new Date()
  1672.                     timenow = timenow.getTime()
  1673.                     dbase.executeCommand("INSERT INTO etl_codes_uses (user_id, code_id, used_on) VALUES ('"+user.properties.get("CharID")+"', '"+code+"', '"+timenow+"')")
  1674.                 }
  1675.             }
  1676.         }
  1677.     } else {
  1678.         msg = "This code does not exist."
  1679.     }
  1680.     if (msg != "") {
  1681.         if(msg.indexOf("Code redeemed.") > -1) {
  1682.             _server.sendResponse({"cmd":"showModal", "btns":"mono", "glow":"green,medium", "params":{}, "strBody":String(msg)}, -1, null, [user], "json")
  1683.             _server.sendResponse(["server", String(msg)], -1, null, [user], "str")
  1684.         } else {
  1685.             //_server.sendResponse({"cmd":"showModal", "btns":"mono", "glow":"red,medium", "params":{}, "strBody":String(msg)}, -1, null, [user], "json")
  1686.             _server.sendResponse(["warning", String(msg)], -1, null, [user], "str")
  1687.         }
  1688.     }  
  1689. }
  1690.  
  1691. function getInfoPlayer(user, name) {
  1692.     var usr = getUserByName(String(name))
  1693.     if(usr) {
  1694.         var regip = String(usr.properties.get("regip"))
  1695.         var ip = String(usr.getIpAddress())
  1696.         //_server.sendResponse(["server", "IP: " + usr.getIpAddress()], -1, null, [user], "str")
  1697.         _server.sendResponse(["server", "ACs: " + usr.properties.get("intCoins")], -1, null, [user], "str")
  1698.         _server.sendResponse(["server", "Gold: " + usr.properties.get("intGold")], -1, null, [user], "str")
  1699.         query = "SELECT * FROM etl_users WHERE registered_ip='"+ip+"' OR registered_ip='"+regip+"' OR login_ip='"+ip+"' OR login_ip='"+regip+"'"
  1700.         queryRes = dbase.executeQuery(query)
  1701.         if (queryRes && queryRes.size() > 0) {
  1702.             var ownaccounts = ""
  1703.             for(var i = 0; i < queryRes.size(); i++) {
  1704.                 var set = queryRes.get(i)
  1705.                 if(i == 0) {
  1706.                     ownaccounts += String(set.getItem("strUsername"))
  1707.                 } else {
  1708.                     ownaccounts += ", " + String(set.getItem("strUsername"))
  1709.                 }
  1710.                 if (set.getItem("banned") == 1) {
  1711.                     ownaccounts += "(banned)"
  1712.                 }
  1713.             }
  1714.             _server.sendResponse(["server", "Accounts: " + ownaccounts], -1, null, [user], "str")
  1715.         }
  1716.     }
  1717. }
  1718.  
  1719. function updateAccessLevel(user, updateon, accesslvl) {
  1720.     var user = getUserByName(String(updateon))
  1721.     var room = zone.getRoom(user.getRoom())
  1722.     user.properties.put("intAccessLevel", Integer(accesslvl))
  1723.     dbase.executeCommand("UPDATE etl_users SET iAccess="+Integer(accesslvl)+" WHERE id=" + user.properties.get("CharID"))
  1724.     var acslvl = {}
  1725.     acslvl.cmd = "updateAccessLevel"
  1726.     acslvl.intAccessLevel = Integer(accesslvl)
  1727.     acslvl.bitSuccess = 1
  1728.     acslvl.uid = user.getUserId()
  1729.    
  1730.     _server.sendResponse(acslvl, -1, null, room.getAllUsers(), "json")
  1731.  
  1732. }
  1733.  
  1734. function sendRandomSkillUse(data1, user, room){
  1735.     if(data1 == "r1"){
  1736.     var randomAuraRoll = Math.round(Math.random()*100);
  1737.     if(randomAuraRoll >= 50){
  1738.         var auraAdd = {"cInf":"p:"+user.getUserId(),"cmd":"aura++","auras":[{"val":1,"nam":"Test Overtime!","t":"s","dur":"4", "cat":"overtime","isNew":true}],"tInf":"p:"+user.getUserId()}
  1739.     _server.sendResponse(auraAdd, -1, null, room.getAllUsers(), "json")
  1740.     } else {
  1741.         trace("failed. rolled " + randomAuraRoll);
  1742.         }
  1743.     }
  1744. }
  1745.  
  1746. function buyItem(userid, itemid, shopid) {
  1747.     var user = _server.getUserById(userid)
  1748.     var errormsg = "Invalid shopitem."
  1749.     var query = "SELECT * FROM etl_users_items WHERE user_id='"+user.properties.get("CharID")+"' AND item_id='"+itemid+"'"
  1750.     var queryRes = dbase.executeQuery(query)
  1751.     itemid = Number(itemid)
  1752.     var itemObj = worldItems.get(itemid)
  1753.     if(itemObj == null)
  1754.     return
  1755.    
  1756.     for(var i = 0; i < worldShops.get(Integer(shopid)).items.length; i++) {
  1757.         if(worldShops.get(Integer(shopid)).items[i] == itemid) {
  1758.             errormsg = ""
  1759.         }
  1760.     }
  1761.  
  1762.     if(queryRes && queryRes.size() > 0) {
  1763.         if(Number((itemObj.iStk)) == 1) {
  1764.             errormsg = "You cannot have more than 1 of that item!"
  1765.         } else if(Number(queryRes.get(0).getItem("iQty")) >= Number((witemObj.iStk))) {
  1766.             errormsg = "Max stack!"
  1767.         }
  1768.     } else if(itemObj.bStaff == 1 && !isStaff(user)) {
  1769.         errormsg = "This item is for staff only."
  1770.     } else if(itemObj.bUpg == 1 && user.properties.get("iUpg") == 0) {
  1771.         errormsg = "This item is for members only."
  1772.     } else if(itemObj.bCoins == 1) {
  1773.         if(Number(user.properties.get("intCoins")) < Number(itemObj.iCost)) {
  1774.             errormsg = "Not enough ACs."
  1775.         }
  1776.     } else if(itemObj.bCoins == 0) {
  1777.         if(Number(user.properties.get("intGold")) < Number(itemObj.iCost)) {
  1778.             errormsg = "Not enough Gold."
  1779.         }
  1780.     }
  1781.    
  1782.     if(errormsg == "") {
  1783.         if(Integer(itemObj.bCoins) == 0){
  1784.             dbase.executeCommand("UPDATE etl_users SET iGold=iGold-"+Integer(itemObj.iCost)+" WHERE id='" + Integer(user.properties.get("CharID")) + "'")
  1785.             user.properties.put("intGold", (Integer(user.properties.get("intGold"))-Integer(itemObj.iCost)))
  1786.         } else {
  1787.             dbase.executeCommand("UPDATE etl_users SET iCoins=iCoins-"+Integer(itemObj.iCost)+" WHERE id='" + Integer(user.properties.get("CharID")) + "'")
  1788.             user.properties.put("intCoins", (Integer(user.properties.get("intCoins"))-Integer(itemObj.iCost)))
  1789.         }
  1790.         var query = "SELECT * FROM etl_users_items WHERE user_id='"+user.properties.get("CharID")+"' AND item_id='"+itemid+"'"
  1791.         var queryRes = dbase.executeQuery(query)
  1792.         if(queryRes.size() > 0) {
  1793.             dbase.executeCommand("UPDATE etl_users_items SET iQty=iQty+"+Number((itemObj.iQty))+" WHERE user_id='"+user.properties.get("CharID")+"' AND item_id='"+itemid+"' LIMIT 1")
  1794.         } else {
  1795.             dbase.executeCommand("INSERT INTO etl_users_items (user_id, item_id, iLvl, iCP, iQty, bEquip, bBank, sES, enh_id) VALUES ('"+Integer(user.properties.get("CharID"))+"', '"+Integer(itemid)+"', '"+itemObj.iLvl+"', '0', '1', '0', '0', '"+itemObj.sES+"', '"+itemObj.EnhID+"')")
  1796.         }
  1797.        
  1798.         var buySuccess = {
  1799.             "cmd":"buyItem",
  1800.             "bitSuccess":1,
  1801.             "CharItemID":Integer(itemid)
  1802.         }
  1803.         _server.sendResponse(buySuccess, -1, null, [user], "json")
  1804.     } else {
  1805.         var buyFail = {
  1806.             "cmd":"buyItem",
  1807.             "bitSuccess": 0,
  1808.             "CharItemID": -1,
  1809.             "strMessage": String(errormsg)
  1810.         }
  1811.         _server.sendResponse(buyFail, -1, null, [user], "json")
  1812.     }
  1813. }
  1814.  
  1815. function sellItem(userid, itemid, shopid) {
  1816.     var user = _server.getUserById(userid)
  1817.     var room = zone.getRoom(user.getRoom())
  1818.     var query = "SELECT * FROM etl_users_items WHERE user_id='"+Integer(user.properties.get("CharID"))+"' AND bEquip=0 AND item_id='"+itemid+"'"
  1819.     var queryRes = dbase.executeQuery(query)
  1820.    
  1821.     itemid = Number(itemid)
  1822.     if (queryRes && queryRes.size() > 0) {
  1823.         var set = queryRes.get(0)
  1824.         var id = String(set.getItem("item_id"))
  1825.         var price = Number(Integer(worldItems.get(itemid).iCost))
  1826.  
  1827.         dbase.executeCommand("DELETE FROM etl_users_items WHERE item_id='"+itemid+"' AND user_id='"+Integer(user.properties.get("CharID"))+"'")
  1828.        
  1829.         if(Integer(worldItems.get(itemid).bCoins) == 0){
  1830.             dbase.executeCommand("UPDATE etl_users SET iGold=iGold+"+Integer(price)+" WHERE id='" + Integer(user.properties.get("CharID")) + "'")
  1831.             user.properties.put("intGold", Integer(Number(user.properties.get("intGold"))+Number(price)))
  1832.         } else {
  1833.             dbase.executeCommand("UPDATE etl_users SET iCoins=iCoins+"+(Number(price))+" WHERE id='" + Number(user.properties.get("CharID")) + "'")
  1834.             user.properties.put("intCoins", Integer(Number(user.properties.get("intCoins"))+Number(price)))
  1835.         }
  1836.         var sellSuccess = {
  1837.             "cmd":"sellItem",
  1838.             "intAmount":Number(price),
  1839.             "bCoins":Number(worldItems.get(itemid).bCoins),
  1840.             "bitSuccess":1,
  1841.             "CharItemID":Number(id)
  1842.         }
  1843.        
  1844.         _server.sendResponse(sellSuccess, -1, null, [user], "json")
  1845.     }
  1846. }
  1847.  
  1848. function removeItem(user, itemid, qty) {
  1849.     qty = Number(qty)
  1850.     var query = "SELECT * FROM etl_users_items WHERE user_id='"+Integer(user.properties.get("CharID"))+"' AND bEquip=0 AND iQty>="+qty+" AND item_id='"+itemid+"'"
  1851.     var queryRes = dbase.executeQuery(query)
  1852.     if (queryRes && queryRes.size() > 0) {
  1853.         var set = queryRes.get(0)
  1854.         removeResp = {}
  1855.         removeResp.cmd = "removeItem"
  1856.         removeResp.CharItemID = Integer(itemid)
  1857.         removeResp.iQty = qty
  1858.         _server.sendResponse(removeResp, -1, null, [user], "json")
  1859.         if(Number(set.getItem("iQty")) > Number(qty)) {
  1860.             dbase.executeCommand("UPDATE etl_users_items SET iQty=iQty-"+qty+" WHERE item_id='"+itemid+"' AND user_id='"+Integer(user.properties.get("CharID"))+"'")
  1861.         } else {
  1862.             dbase.executeCommand("DELETE FROM etl_users_items WHERE item_id='"+itemid+"' AND user_id='"+Integer(user.properties.get("CharID"))+"'")
  1863.         }
  1864.     }
  1865. }
  1866.  
  1867. function changeColor(user, skin, hair, eye, hairid) {
  1868.     var room = zone.getRoom(user.getRoom())
  1869.     var hairObj = worldHairs.get(Number(hairid))
  1870.     if (hairObj) {
  1871.         dbase.executeCommand("UPDATE etl_users SET HairID="+Integer(hairObj.HairID)+", intColorSkin="+Integer(skin)+", intColorHair="+Integer(hair)+", intColorEye="+Integer(eye)+" WHERE id=" + user.properties.get("CharID"))
  1872.         user.properties.put("intColorSkin", skin)
  1873.         user.properties.put("intColorHair", hair)
  1874.         user.properties.put("intColorEye", eye)
  1875.         var changeColorResp = {
  1876.             "cmd":"changeColor",
  1877.             "uid":user.getUserId(),
  1878.             "intColorHair":Number(hair),
  1879.             "intColorEye":Number(eye),
  1880.             "intColorSkin":Number(skin),
  1881.             "HairID":Number(hairObj.HairID),
  1882.             "strHairName":String(hairObj.sName),
  1883.             "strHairFilename":String(hairObj.sFile)
  1884.         }
  1885.         _server.sendResponse(changeColorResp, -1, null, room.getAllUsers(), "json")  
  1886.     } else {
  1887.         debug("hair not found " + hairid)
  1888.     }
  1889. }
  1890.  
  1891. function changeArmorColor(user, trim, base, acc) {
  1892.     var room = zone.getRoom(user.getRoom())
  1893.     dbase.executeCommand("UPDATE etl_users SET intColorAccessory="+Integer(acc)+", intColorTrim="+Integer(trim)+", intColorBase="+Integer(base)+" WHERE id=" + user.properties.get("CharID"))
  1894.     user.properties.put("intColorAccessory", acc)
  1895.     user.properties.put("intColorTrim", trim)
  1896.     user.properties.put("intColorBase", base)
  1897.     var changeColorResp = new Object()
  1898.     changeColorResp = {"uid":user.getUserId(),"intColorAccessory":Integer(acc),"cmd":"changeArmorColor","intColorTrim":Integer(trim),"intColorBase":Integer(base)}
  1899.     _server.sendResponse(changeColorResp, -1, null, room.getAllUsers(), "json")
  1900. }
  1901.  
  1902. function loadHairShop(userid, hshopid) {
  1903.     var user = _server.getUserById(userid)
  1904.     var room = zone.getRoom(user.getRoom())
  1905.  
  1906.     var hairshop = new Object()
  1907.     var hairs = []
  1908.  
  1909.     if (worldHairShops.get(Integer(hshopid))) {
  1910.         var hairquery = worldHairShops.get(Integer(hshopid))
  1911.         if(user.properties.get("strGender") == "M") {
  1912.             hairquery = hairquery.hairsM
  1913.         } else if(user.properties.get("strGender") == "F") {
  1914.             hairquery = hairquery.hairsF
  1915.         }
  1916.         hairquery = hairquery.split(",")
  1917.         //_server.sendResponse(["warning", "alength: " + hairquery.length], -1, null, [user], "str")
  1918.         for(var i = 0; i < hairquery.length; i++) {
  1919.             var hairObj = worldHairs.get(Integer(hairquery[i]))
  1920.             if(hairObj != null) {
  1921.             var hitem = new Object()
  1922.            
  1923.             hitem.HairID = Number(hairObj.HairID)
  1924.             hitem.sFile = ""+hairObj.sFile
  1925.             hitem.sName = ""+hairObj.sName
  1926.             hitem.sGen = ""+hairObj.sGen
  1927.             hairs.push(hitem)
  1928.             }
  1929.         }  
  1930.  
  1931.         hairshop = {"HairShopID":"1","cmd":"loadHairShop","hair":hairs}
  1932.         _server.sendResponse(hairshop, -1, null, [user], "json")   
  1933.     }
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939. }
  1940.  
  1941.  
  1942. function loadShop(userid, shopid) {
  1943.     var user = _server.getUserById(userid)
  1944.     var room = zone.getRoom(user.getRoom())
  1945.  
  1946.     var shop = new Object()
  1947.     var items = []
  1948.    
  1949.     if (worldShops.get(Integer(shopid))) {
  1950.         if(((worldShops.get(Integer(shopid)).bStaff == 1) && (isStaff(user))) || (worldShops.get(Integer(shopid)).bStaff == 0)) {
  1951.             for(var i = 0; i < worldShops.get(Integer(shopid)).items.length; i++) {
  1952.                 var itemObj = worldItems.get(Number(worldShops.get(Integer(shopid)).items[i]))
  1953.                 if(!itemObj) {
  1954.                     trace("Item " + String(Integer(worldShops.get(Integer(shopid)).items[i])) + " not found in shop " + shopid)
  1955.                 } else {
  1956.                     var item = new Object()
  1957.                    
  1958.                     item.ItemID = ""+itemObj.ItemID
  1959.                     item.ShopItemID = ""+itemObj.ItemID
  1960.                     item.sFaction = ""+itemObj.sFaction
  1961.                     item.iClass = ""+itemObj.iClass
  1962.                     item.sElmt = ""+itemObj.sElmt
  1963.                     item.sLink = ""+itemObj.sLink
  1964.                     item.bStaff = "0"
  1965.                     item.iRng = ""+itemObj.iRng
  1966.                     item.iDPS = ""+itemObj.iDPS
  1967.                     item.bCoins = ""+itemObj.bCoins
  1968.                     item.sES = ""+itemObj.sES
  1969.                     item.sType = ""+itemObj.sType
  1970.                     item.iCost = ""+itemObj.iCost
  1971.                     item.iRty = ""+itemObj.iRty
  1972.                     item.iQty = "1"
  1973.                     item.iLvl = Integer(itemObj.iLvl)
  1974.                     item.EnhLvl = Number(itemObj.iLvl)
  1975.                     item.iLvl = Number(itemObj.iLvl)
  1976.                     item.FactionID = ""+itemObj.FactionID
  1977.                     item.iQtyRemain = ""+itemObj.iQtyRemain
  1978.                     item.iReqRep = ""+itemObj.iReqRep
  1979.                     item.iQSvalue = "0"
  1980.                     item.EnhID = "1"
  1981.                     item.EnhPatternID = "1"
  1982.                     item.EnhRty = "1"
  1983.                     item.sIcon = ""+itemObj.sIcon
  1984.                     item.bTemp = ""+itemObj.bTemp
  1985.                     item.iHrs = 1000
  1986.                     item.sFile = ""+itemObj.sFile
  1987.                     item.iStk = ""+itemObj.iStk
  1988.                     item.sDesc = ""+itemObj.sDesc
  1989.                     item.bHouse = ""+itemObj.bHouse
  1990.                     item.bUpg = ""+itemObj.bUpg
  1991.                     item.iReqCP = ""+itemObj.iReqCP
  1992.                     item.sName = ""+itemObj.sName
  1993.                     item.iQSindex = "-1"
  1994.                     item.sDesc = String(itemObj.sDesc)
  1995.                     item.classReq = String(getClassReq(user, itemObj.ClassID))
  1996.                     item.classReq = String(getClassReq(user, itemObj.ClassID))
  1997.                     item.minDmg = String(itemObj.minDmg)
  1998.                     item.maxDmg = String(itemObj.maxDmg)
  1999.                     item.magicDmg = String(itemObj.magicDmg)
  2000.                     item.STR = String(itemObj.STR)
  2001.                     item.INT = String(itemObj.INT)
  2002.                     item.DEX = String(itemObj.DEX)
  2003.                     item.WIS = String(itemObj.WIS)
  2004.                     item.END = String(itemObj.END)
  2005.                     item.LCK = String(itemObj.LCK)
  2006.                    
  2007.                     items.push(item)
  2008.                 }
  2009.             }
  2010.            
  2011.             shop = {"shopinfo":{"items":items, "ShopID":""+shopid, "sField":"", "bStaff":"0", "bHouse":""+worldShops.get(Integer(shopid)).bHouse, "iIndex":"-1", "sName":""+worldShops.get(Integer(shopid)).sName}, "cmd":"loadShop"}
  2012.            
  2013.             _server.sendResponse(shop, -1, null, [user], "json")   
  2014.         }
  2015.     } else {
  2016.         _server.sendResponse(["warning", "You are trying to load a non-existent shop."], -1, null, [user], "str")
  2017.     }
  2018. }
  2019.  
  2020. function loadBank(user, itemTypes) {
  2021.     var query = "SELECT * FROM etl_users_items WHERE user_id='"+user.properties.get("CharID")+"' AND bBank=1"
  2022.     var queryRes = dbase.executeQuery(query)
  2023.     if (queryRes && queryRes.size() > 0) {
  2024.         var items = []
  2025.         for(var i = 0; i < queryRes.size(); i++) {
  2026.             var set = queryRes.get(i)
  2027.             var itemId = set.getItem("item_id")
  2028.  
  2029.             var itemObj = worldItems.get(Number(itemId))
  2030.             var itemJson = {
  2031.                 "sIcon": String(itemObj.sIcon),
  2032.                 "ItemID": String(itemId),
  2033.                 "iLvl": String(itemObj.iLvl),
  2034.                 "iEnh": String(itemObj.EnhID),
  2035.                 "sElmt": String(itemObj.sElmt),
  2036.                 "bTemp": String(itemObj.bTemp),
  2037.                 "sLink": String(itemObj.sLink),
  2038.                 "bStaff": String(itemObj.bStaff),
  2039.                 "CharItemID": String(itemId),
  2040.                 "iRng": String(itemObj.iRng),
  2041.                 "bCoins": String(itemObj.bCoins),
  2042.                 "iDPS": String(itemObj.iDPS),
  2043.                 "sES": String(itemObj.sES),
  2044.                 "EnhID": String(itemObj.EnhID),
  2045.                 "sType": String(itemObj.sType),
  2046.                 "sDesc": String(itemObj.sDesc),
  2047.                 "iStk": String(itemObj.iStk),
  2048.                 "bBank": true,
  2049.                 "iCost": String(itemObj.iCost),
  2050.                 "bEquip": false,
  2051.                 "bUpg": String(itemObj.bUpg),
  2052.                 "iRty": String(itemObj.iRty),
  2053.                 "sName": String(itemObj.sName),
  2054.                 "iQty": String(set.getItem("iQty"))
  2055.             }
  2056.             items.push(itemJson)
  2057.         }
  2058.         var bank = {}
  2059.         bank.cmd = "loadBank"
  2060.         bank.bitSuccess = 1
  2061.         bank.items = items
  2062.         _server.sendResponse(bank, -1, null, [user], "json")
  2063.     } else {
  2064.         var bank = {}
  2065.         bank.cmd = "loadBank"
  2066.         bank.bitSuccess = 1
  2067.         bank.items = []
  2068.         _server.sendResponse(bank, -1, null, [user], "json")
  2069.     }
  2070. }
  2071.  
  2072. function toBank(user, itemid) {
  2073.     var query = "SELECT * FROM etl_users_items WHERE user_id='"+user.properties.get("CharID")+"' AND item_id='"+itemid+"' AND bBank=0"
  2074.     var queryRes = dbase.executeQuery(query)
  2075.     if (queryRes && queryRes.size() > 0) {
  2076.         dbase.executeCommand("UPDATE etl_users_items SET bBank=1 WHERE user_id='"+user.properties.get("CharID")+"' AND item_id=" + itemid + "")
  2077.         var toBank = {}
  2078.         toBank.cmd = "bankFromInv"
  2079.         toBank.bSuccess = 1
  2080.         toBank.ItemID = Number(itemid)
  2081.         _server.sendResponse(toBank, -1, null, [user], "json")
  2082.     }
  2083. }
  2084.  
  2085. function toInventory(user, itemid) {
  2086.     var query = "SELECT * FROM etl_users_items WHERE user_id='"+user.properties.get("CharID")+"' AND item_id='"+itemid+"' AND bBank=1"
  2087.     var queryRes = dbase.executeQuery(query)
  2088.     if (queryRes && queryRes.size() > 0) {
  2089.         dbase.executeCommand("UPDATE etl_users_items SET bBank=0 WHERE user_id='"+user.properties.get("CharID")+"' AND item_id=" + itemid + "")
  2090.         var toInventory = {}
  2091.         toInventory.cmd = "bankToInv"
  2092.         toInventory.bSuccess = 1
  2093.         toInventory.ItemID = Number(itemid)
  2094.         _server.sendResponse(toInventory, -1, null, [user], "json")
  2095.     }
  2096. }
  2097.  
  2098. function swapBankInventory(user, tobankid, toinvenid) {
  2099.     var query = "SELECT * FROM etl_users_items WHERE user_id='"+user.properties.get("CharID")+"' AND item_id='"+toinvenid+"' AND bBank=1"
  2100.     var queryRes = dbase.executeQuery(query)
  2101.     var query2 = "SELECT * FROM etl_users_items WHERE user_id='"+user.properties.get("CharID")+"' AND item_id='"+tobankid+"' AND bBank=0"
  2102.     var queryRes2 = dbase.executeQuery(query2)
  2103.     if (queryRes && queryRes.size() > 0 && queryRes2 && queryRes2.size() > 0) {
  2104.         dbase.executeCommand("UPDATE etl_users_items SET bBank=0 WHERE user_id='"+user.properties.get("CharID")+"' AND item_id=" + toinvenid + "")
  2105.         dbase.executeCommand("UPDATE etl_users_items SET bBank=1 WHERE user_id='"+user.properties.get("CharID")+"' AND item_id=" + tobankid + "")
  2106.         var swap = {}
  2107.         swap.cmd = "bankSwapInv"
  2108.         swap.invItemID = Number(tobankid)
  2109.         swap.bankItemID = Number(toinvenid)
  2110.         swap.bSuccess = 1
  2111.         _server.sendResponse(swap, -1, null, [user], "json")
  2112.     }
  2113.  
  2114.  
  2115. }
  2116.  
  2117. function handleAfk(userid, afk) {
  2118.     var user = _server.getUserById(userid)
  2119.     var room = zone.getRoom(user.getRoom())
  2120.     user.properties.put("afk", afk)
  2121.    
  2122.     var uotls = []
  2123.     uotls.push("notls")
  2124.     uotls.push(user.getName())
  2125.     uotls.push("afk:" + afk)
  2126.     _server.sendResponse(uotls, -1, null, room.getAllUsers(), "str")
  2127.    
  2128.     if(afk == "true") {
  2129.         _server.sendResponse(["server", "You are now Away From Keyboard (AFK)."], -1, null, [user], "str")
  2130.     } else {
  2131.         _server.sendResponse(["server", "You are no longer Away From Keyboard (AFK)."], -1, null, [user], "str")
  2132.     }
  2133. }
  2134.  
  2135. function doemote(user, emote) {
  2136.     var room = zone.getRoom(user.getRoom())
  2137.    
  2138.     var emotea = []
  2139.     emotea.push("emotea")
  2140.     emotea.push(String(emote))
  2141.     emotea.push(String(user.getUserId()))
  2142.     _server.sendResponse(emotea, -1, null, room.getAllUsers(), "str")
  2143. }
  2144.  
  2145. function doia(user, act1, act2) {
  2146.     var room = zone.getRoom(user.getRoom())
  2147.    
  2148.     var ia = {}
  2149.     ia.cmd = "ia"
  2150.     ia.val = Math.round(Math.random()*10000)
  2151.     if(isStaff(user)) {
  2152.         ia.val = 1
  2153.     }
  2154.     ia.oName = String(act2)
  2155.     ia.typ = String(act1)
  2156.     ia.unm = String(user.getName())
  2157.     _server.sendResponse(ia, -1, null, room.getAllUsers(), "json")
  2158. }
  2159.  
  2160. function doem(user, msg) {
  2161.     var room = zone.getRoom(user.getRoom())
  2162.    
  2163.     var emmsg = []
  2164.     emmsg.push("em")
  2165.     emmsg.push(String(user.getName()))
  2166.     emmsg.push(String(msg))
  2167.     _server.sendResponse(emmsg, -1, null, room.getAllUsers(), "str")
  2168. }
  2169.  
  2170.  
  2171. function restPlayer(user) {
  2172.     var room = zone.getRoom(user.getRoom())
  2173.     if((user.properties.get("intHP") < user.properties.get("intHPMax") || user.properties.get("intMP") < user.properties.get("intMPMax")) && user.properties.get("intState") == 1) {
  2174.         //health rest formula
  2175.         var restedhp = Integer(user.properties.get("intHPMax")) / 8
  2176.         restedhp = Integer(restedhp)
  2177.         var newhp = Number(restedhp) + Number(user.properties.get("intHP"))
  2178.         newhp = Integer(newhp)
  2179.         //------------------
  2180.         //mana rest formula
  2181.         var restedmp = Integer(user.properties.get("intMPMax")) / 8
  2182.         restedmp = Integer(restedmp)
  2183.         if(getManaType(user) == 2)
  2184.         restedmp = 0
  2185.         var newmp = Number(restedmp) + Number(user.properties.get("intMP"))
  2186.         newmp = Integer(newmp)
  2187.         //------------------
  2188.  
  2189.         if(Integer(newhp) > user.properties.get("intHPMax")) {
  2190.             restedhp = user.properties.get("intHPMax") - user.properties.get("intHP")
  2191.             user.properties.put("intHP", user.properties.get("intHPMax"))
  2192.         } else {
  2193.             user.properties.put("intHP", Integer(newhp))
  2194.         }
  2195.         if(Integer(newmp) > user.properties.get("intMPMax")) {
  2196.             restedmp = user.properties.get("intMPMax") - user.properties.get("intMP")
  2197.             user.properties.put("intMP", user.properties.get("intMPMax"))
  2198.         } else {
  2199.             user.properties.put("intMP", Integer(newmp))
  2200.         }
  2201.         sendUotls(user, true, true, false, false)
  2202.     }
  2203. }
  2204.  
  2205. function restPlayerAll() {
  2206.     var users = zone.getUserList().toArray()
  2207.     for each(var user in users) {
  2208.         var room = zone.getRoom(user.getRoom())
  2209.         var mpcheck = false
  2210.         var hpcheck = false
  2211.         var inCombat = false
  2212.         var state = Number(user.properties.get("intState"))
  2213.         var mpRest = Integer(user.properties.get("intMPMax")) / 16
  2214.         if(getManaType(user) == 2) {
  2215.             if(user.properties.get("intMP") > 0) {
  2216.                 mpcheck = true
  2217.                 mpRest = -(mpRest)*3
  2218.             }
  2219.         } else if(getManaType(user) == 1) {
  2220.             if(user.properties.get("intMP") < user.properties.get("intMPMax")) {
  2221.                 mpcheck = true
  2222.                 mpRest = 7
  2223.                 inCombat = true
  2224.             }
  2225.         } else {
  2226.             if(user.properties.get("intMP") < user.properties.get("intMPMax")) {
  2227.                 mpcheck = true
  2228.             }
  2229.         }
  2230.         if(user.properties.get("intHP") < user.properties.get("intHPMax")) {
  2231.             hpcheck = true
  2232.         }
  2233.         if((hpcheck == true || mpcheck == true) && (state == 1 || (state == 2 && inCombat == true))) {
  2234.             //health rest formula
  2235.             var restedhp = 0
  2236.             var restedmp = 0
  2237.             var newhp = Number(user.properties.get("intHP"))
  2238.             var newmp = Number(user.properties.get("intMP"))
  2239.             var maxhp = Number(user.properties.get("intHPMax"))
  2240.             var maxmp = Number(user.properties.get("intMPMax"))
  2241.             if(hpcheck == true && state == 1) {
  2242.                 restedhp = Integer(user.properties.get("intHPMax")) / 16
  2243.                 restedhp = Integer(restedhp)
  2244.                 newhp += Number(restedhp)
  2245.                 if(newhp > maxhp)
  2246.                 user.properties.put("intHP", maxhp)
  2247.                 else if(newhp < 0)
  2248.                 user.properties.put("intHP", 0)
  2249.                 else
  2250.                 user.properties.put("intHP", newhp)
  2251.             }
  2252.             if(mpcheck == true) {
  2253.                 restedmp = mpRest
  2254.                 restedmp = Integer(restedmp)
  2255.                 newmp += Number(restedmp)
  2256.                 if(newmp > maxmp)
  2257.                 user.properties.put("intMP", maxmp)
  2258.                 else if(newmp < 0)
  2259.                 user.properties.put("intMP", 0)
  2260.                 else
  2261.                 user.properties.put("intMP", newmp)
  2262.             }
  2263.             sendUotls(user, true, true, false, false)
  2264.         }
  2265.     }
  2266. }
  2267.  
  2268. function resPlayer(user) {
  2269.     var room = zone.getRoom(user.getRoom())
  2270.     var hp = Integer(user.properties.get("intHP"))
  2271.     var state = Number(user.properties.get("intState"))
  2272.     var maxHP = Integer(user.properties.get("intHPMax"))
  2273.     var maxMP = Integer(user.properties.get("intMPMax"))
  2274.    
  2275.     if(state <= 0) {
  2276.         user.properties.put("intState", 1)
  2277.         user.properties.put("intHP", maxHP)
  2278.         user.properties.put("intMP", maxMP)
  2279.  
  2280.         var mapObj = worldMaps.get(room.getName().split("-")[0])
  2281.         var spawnFrame = String(mapObj.spawnFrame)
  2282.         var spawnPad = String(mapObj.spawnPad)
  2283.        
  2284.         _server.sendResponse(["resTimed222", String(spawnFrame), String(spawnPad)], -1, null, [user], "str")
  2285.         var o = {
  2286.             "intHP" : maxHP,
  2287.             "intMP" : maxMP,
  2288.             "intState" : 1
  2289.         }
  2290.         var uotls = {
  2291.             "cmd" : "notls",
  2292.             "o"   : o,
  2293.             "unm" : String(user.getName())
  2294.         }
  2295.         _server.sendResponse(uotls, -1, null, room.getAllUsers(), "json")
  2296.     }
  2297. }
  2298.  
  2299. function who(user, all) {
  2300.    
  2301.     var userinfoid = {}
  2302.    
  2303.     if(all) {
  2304.         var wat = zone.getUserList().toArray()
  2305.         for each(var userWat in wat) {
  2306.             var usersinfo = {}
  2307.             usersinfo.iLvl = Integer(userWat.properties.get("intLevel"))
  2308.             usersinfo.ID = Integer(userWat.getUserId())
  2309.             usersinfo.sName = String(userWat.getName())
  2310.             usersinfo.sClass = String(worldClasses.get(Integer(userWat.properties.get("intClassId"))).sClassName)
  2311.             userinfoid[userWat] = usersinfo
  2312.         }
  2313.     } else {
  2314.         var room = zone.getRoom(user.getRoom())
  2315.         var usersInRoom = room.getUserList()
  2316.         for each(var usr in usersInRoom) {
  2317.             var auser = _server.getUserById(usr)
  2318.             if(Number(auser.properties.get("modOn")) == 0 || isStaff(user)) {
  2319.                 var usersinfo = {}
  2320.                 usersinfo.iLvl = Integer(auser.properties.get("intLevel"))
  2321.                 usersinfo.ID = Integer(usr)
  2322.                 usersinfo.sName = String(auser.getName())
  2323.                 usersinfo.sClass = String(worldClasses.get(Integer(auser.properties.get("intClassId"))).sClassName)
  2324.                 userinfoid[usr] = usersinfo
  2325.             }
  2326.         }
  2327.     }
  2328.    
  2329.     var whojson = {
  2330.         "cmd": "who",
  2331.         "users":userinfoid
  2332.     }
  2333.     _server.sendResponse(whojson, -1, null, [user], "json")
  2334.     if(all)
  2335.     _server.sendResponse(["server", zone.getUserCount() + " users online."], -1, null, [user], "str")
  2336. }
  2337.  
  2338.  
  2339. function sendEnhanceDetails(user) {
  2340.     var wat = {}
  2341.     wat.cmd = "enhp"
  2342.     wat.o = enhInfo
  2343.     _server.sendResponse(wat, -1, null, [user], "json")
  2344. }
  2345.  
  2346. function initEnhanceDetails() {
  2347.     var query = "SELECT * FROM etl_enhance_info"
  2348.     var queryRes = dbase.executeQuery(query)
  2349.     if (queryRes && queryRes.size() > 0) {
  2350.         for(var i = 0; i < queryRes.size(); i++) {
  2351.             var set = queryRes.get(i)
  2352.             var id = String(set.getItem("id"))
  2353.             var x =  {
  2354.                 "ID": ""+set.getItem("id"),
  2355.                 "sName": ""+set.getItem("sName"),
  2356.                 "sDesc": ""+set.getItem("sDesc"),
  2357.                 "iWIS": ""+set.getItem("iWIS"),
  2358.                 "iEND": ""+set.getItem("iEND"),
  2359.                 "iLCK": ""+set.getItem("iLCK"),
  2360.                 "iSTR": ""+set.getItem("iSTR"),
  2361.                 "iDEX": ""+set.getItem("iDEX"),
  2362.                 "iINT": ""+set.getItem("iINT")
  2363.             }
  2364.             enhInfo[id] = x
  2365.             //debug("Enhancement \"" + set.getItem("sName") + "\" loaded.")
  2366.         }
  2367.         trace(">> Enchancements: " + queryRes.size())
  2368.     }
  2369. }
  2370.  
  2371. function calculateMP(user, mm) {
  2372.     if(getManaType(user) == 0) {
  2373.         return Number(Math.round(25+Number(getMPFromStats(user))))
  2374.     } else if(getManaType(user) == 1) {
  2375.         if(mm == "max" || mm == "min") {
  2376.             return 100
  2377.         } else {
  2378.             return Number(user.properties.get("intMP"))
  2379.         }
  2380.     } else {
  2381.         if(mm == "max") {
  2382.             return 100
  2383.         } else if(mm == "min") {
  2384.             return 0
  2385.         } else {
  2386.             return Number(user.properties.get("intMP"))
  2387.         }
  2388.     }
  2389. }
  2390.  
  2391. function calculateHP(user) {
  2392.     return Number(Math.round(100+Number(getHPFromStats(user))))
  2393. }
  2394.  
  2395. function stopFights(user, room) {
  2396.     if(user) {
  2397.         var room = zone.getRoom(user.getRoom())
  2398.         userid = user.getUserId()
  2399.         var mts = ""
  2400.         for(var i = 1; i < 20; i++) {
  2401.             //var monObj = mapMonsters.get(room.getName()+":"+i)
  2402.             var monObj = room.properties.get(String("m"+(i)))
  2403.             if(monObj) {
  2404.                 if(monObj.targets.size() > 0) {
  2405.                     if(monObj.targets.contains(String(userid))) {
  2406.                         monObj.targets.remove(String(userid))
  2407.                         if(monObj.targets.size() < 1 && monObj.intState != 0) {
  2408.                             var rsparams = {}
  2409.                             rsparams.targetid = i
  2410.                             rsparams.targetmap = monObj.MonMap
  2411.                             respawnMonster(rsparams)
  2412.                         }
  2413.                     }
  2414.                 }
  2415.             } else {
  2416.                 break
  2417.             }
  2418.         }
  2419.         user.properties.put("intState", 1)
  2420.         sendUotls(user, false, false, false, false)
  2421.     }
  2422. }
  2423.  
  2424. function initArrRep() {
  2425.     var i = 1
  2426.     while (i < 10)
  2427.     {
  2428.         var rankExp = Math.pow((i + 1), 3) * 100
  2429.         if (i > 1){
  2430.             arrRanks[i]=(rankExp + arrRanks[(i - 1)])
  2431.         } else {
  2432.             arrRanks[i]=(rankExp + 100)
  2433.         }
  2434.         //debug("Rank " + i + ": " + arrRanks[i])
  2435.         i++
  2436.     }
  2437. }
  2438.  
  2439.  
  2440. function initArrExpOld(user) {
  2441.     var level = Integer(user.properties.get("intLevel"))
  2442.     if(level < maxLevel) {
  2443.         var exp = level * 43 * level * 11 + 2329
  2444.         return Integer(exp)
  2445.     } else {
  2446.         return 200000000
  2447.     }
  2448. }
  2449.  
  2450. function initArrExp() {
  2451.     var i = 1
  2452.     while (i < Number(maxLevel))
  2453.     {
  2454.         var levelExp = Math.pow((i + 1), 3) * 10
  2455.         if (i > 1){
  2456.             arrLevels[i]=(levelExp)
  2457.         } else {
  2458.             arrLevels[i]=(levelExp + 100)
  2459.         }
  2460.         i++
  2461.     }
  2462.     while (i <= 10000)
  2463.     {
  2464.         arrLevels[i] = 200000000
  2465.         i++
  2466.     }
  2467. }
  2468.  
  2469.  
  2470. function cacheWorldObjects() {
  2471.     // Cache Classes
  2472.    
  2473.     trace(">> World object caching operation started")
  2474.     //trace(">> Caching user classes...")
  2475.     var query = "SELECT * FROM etl_classes"
  2476.     var queryRes = dbase.executeQuery(query)
  2477.     if (queryRes && queryRes.size() > 0) {
  2478.         for(var i = 0; i < queryRes.size(); i++) {
  2479.             var set = queryRes.get(i)
  2480.             var classid = Integer(set.getItem("classid"))
  2481.            
  2482.             var classObj = {
  2483.                 "sStats": set.getItem("sStats"),
  2484.                 "sDesc": set.getItem("sDesc"),
  2485.                 "sClassCat": set.getItem("sClassCat"),
  2486.                 "sClassName": set.getItem("className"),
  2487.                 "passives": set.getItem("passives").split(","),
  2488.                 "skills": set.getItem("skills").split(","),
  2489.                 "aMRM": set.getItem("aMRM")
  2490.             }
  2491.            
  2492.             if(java.lang.String(set.getItem("aMRM")).contains(":")) {
  2493.                 classObj.aMRM = String(set.getItem("aMRM")).split(",")
  2494.             }
  2495.            
  2496.             worldClasses.put(classid, classObj)
  2497.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + classObj.sClassName + " id: " + classid)
  2498.         }
  2499.         trace(">> Classes: " + queryRes.size())
  2500.     }
  2501.    
  2502.     //trace(">> Caching class skills...")
  2503.     query = "SELECT * FROM etl_skills"
  2504.     queryRes = dbase.executeQuery(query)
  2505.     if (queryRes && queryRes.size() > 0) {
  2506.         for(var i = 0; i < queryRes.size(); i++) {
  2507.             var set = queryRes.get(i)
  2508.             var skillid = Integer(set.getItem("id"))
  2509.            
  2510.             var skillObj = {
  2511.                 "name": set.getItem("name"),
  2512.                 "anim": set.getItem("anim"),
  2513.                 "desc": set.getItem("desc"),
  2514.                 "iscrit": set.getItem("iscrit"),
  2515.                 "damage": set.getItem("damage"),
  2516.                 "mana": set.getItem("mana"),
  2517.                 "icon": set.getItem("icon"),
  2518.                 "range": set.getItem("range"),
  2519.                 "dsrc": set.getItem("dsrc"),
  2520.                 "icon": set.getItem("icon"),
  2521.                 "ref": set.getItem("ref"),
  2522.                 "tgt": set.getItem("tgt"),
  2523.                 "typ": set.getItem("typ"),
  2524.                 "damagetyp": set.getItem("damagetyp"),
  2525.                 "strl": set.getItem("str1"),
  2526.                 "auto": set.getItem("auto"),
  2527.                 "cd": set.getItem("cd"),
  2528.                 "aura": set.getItem("aura"),
  2529.                 "auratgtMax": set.getItem("auratgtMax"),
  2530.                 "tgtMax": set.getItem("tgtMax"),
  2531.                 "tgtMin": set.getItem("tgtMin"),
  2532.                 "fx": set.getItem("fx"),
  2533.                 "castTime": set.getItem("castTime"),
  2534.                 "multi": set.getItem("multi"),
  2535.                 "multitime": set.getItem("multitime"),
  2536.                 "sId": Number(set.getItem("id")),
  2537.                 "projspd": Number(set.getItem("projspd"))
  2538.             }
  2539.            
  2540.             worldSkills.put(skillid, skillObj)
  2541.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + skillObj.name + " id: " + skillid)
  2542.         }
  2543.         trace(">> Skills: " + queryRes.size())
  2544.     }
  2545.    
  2546.     //trace(">> Caching class passive skills...")
  2547.     query = "SELECT * FROM etl_passives"
  2548.     queryRes = dbase.executeQuery(query)
  2549.     if (queryRes && queryRes.size() > 0) {
  2550.         for(var i = 0; i < queryRes.size(); i++) {
  2551.             var set = queryRes.get(i)
  2552.             var skillid = Integer(set.getItem("id"))
  2553.            
  2554.             var skillObj = {
  2555.                 "name": set.getItem("name"),
  2556.                 "icon": set.getItem("icon"),
  2557.                 "ref": set.getItem("ref"),
  2558.                 "type": set.getItem("type"),
  2559.                 "desc": set.getItem("desc"),
  2560.                 "auraID": set.getItem("auraID")
  2561.             }
  2562.            
  2563.             worldPassives.put(skillid, skillObj)
  2564.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + skillObj.name + " id: " + skillid)
  2565.         }
  2566.         trace(">> Passives: " + queryRes.size())
  2567.     }
  2568.    
  2569.     //trace(">> Caching auras...")
  2570.     query = "SELECT * FROM etl_skills_auras"
  2571.     queryRes = dbase.executeQuery(query)
  2572.     if (queryRes && queryRes.size() > 0) {
  2573.         for(var i = 0; i < queryRes.size(); i++) {
  2574.             var set = queryRes.get(i)
  2575.             var auraid = Integer(set.getItem("id"))
  2576.            
  2577.             var auraObj = {
  2578.                 "name": set.getItem("name"),
  2579.                 "seconds": set.getItem("seconds"),
  2580.                 "per": set.getItem("per"),
  2581.                 "iscrit": set.getItem("iscrit"),
  2582.                 "reduction": set.getItem("reduction"),
  2583.                 "damage": set.getItem("damage"),
  2584.                 "cat": set.getItem("cat"),
  2585.                 "type": set.getItem("type"),
  2586.                 "usetype": set.getItem("usetype"),
  2587.                 "id": set.getItem("id"),
  2588.                 "typ": set.getItem("type")
  2589.             }
  2590.            
  2591.             worldAuras.put(auraid, auraObj)
  2592.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + skillObj.name + " id: " + skillid)
  2593.         }
  2594.         trace(">> Auras: " + queryRes.size())
  2595.     }
  2596.    
  2597.     //trace(">> Caching shops...")
  2598.     query = "SELECT * FROM etl_items_shops"
  2599.     queryRes = dbase.executeQuery(query)
  2600.     if (queryRes && queryRes.size() > 0) {
  2601.         for(var i = 0; i < queryRes.size(); i++) {
  2602.             var set = queryRes.get(i)
  2603.             var shopid = Integer(set.getItem("shop_id"))
  2604.            
  2605.             var shopItems = set.getItem("shop_items").split(",")
  2606.             var itemsList = []
  2607.             for(var si = 1; si < shopItems.length; si++)
  2608.             itemsList.push(shopItems[si])
  2609.             var shopObj = {
  2610.                 "sName": set.getItem("sName"),
  2611.                 "sField": set.getItem("sField"),
  2612.                 "bStaff": set.getItem("bStaff"),
  2613.                 "bHouse": set.getItem("bHouse"),
  2614.                 "items": itemsList
  2615.             }
  2616.            
  2617.             if(java.lang.String(set.getItem("shop_items")).contains(",")) {
  2618.                 //shopObj.items = String(set.getItem("shop_items")).split(",")
  2619.             } else {
  2620.                 //shopObj.items = String(set.getItem("shop_items"))
  2621.             }
  2622.            
  2623.             worldShops.put(shopid, shopObj)
  2624.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + shopObj.sName + " id: " + shopid)
  2625.         }
  2626.         trace(">> Shops: " + queryRes.size())
  2627.     }
  2628.    
  2629.    
  2630.    
  2631.     //trace(">> Caching quests...")
  2632.     /*query = "SELECT * FROM etl_quests"
  2633.     queryRes = dbase.executeQuery(query)
  2634.     if (queryRes && queryRes.size() > 0) {
  2635.         for(var i = 0; i < queryRes.size(); i++) {
  2636.             var set = queryRes.get(i)
  2637.             var questid = Integer(set.getItem("id"))
  2638.            
  2639.             var questObj = {
  2640.                 "id": questid,
  2641.                 "sName": set.getItem("sName"),
  2642.                 "sFileName": doCache(set.getItem("FileName")),
  2643.                 "iMaxPlayers": Number(set.getItem("max_players")),
  2644.                 "sExtra": set.getItem("sExtra"),
  2645.                 "mapItems": [],
  2646.                 "monTree": [],
  2647.                 "monFrame": []
  2648.             }
  2649.  
  2650.             worldQuests.put(questid, questObj)
  2651.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + mapObj.sName + " id: " + mapid)
  2652.         }
  2653.         trace(">> Quests: " + queryRes.size())
  2654.     }*/
  2655.    
  2656.     //trace(">> Caching monsters...")
  2657.     query = "SELECT * FROM etl_monsters"
  2658.     queryRes = dbase.executeQuery(query)
  2659.     if (queryRes && queryRes.size() > 0) {
  2660.         for(var i = 0; i < queryRes.size(); i++) {
  2661.             var set = queryRes.get(i)
  2662.             var monid = Integer(set.getItem("MonID"))
  2663.            
  2664.             var monObj = {
  2665.                 "MonID": set.getItem("MonID"),
  2666.                 "intMPMax": set.getItem("intMPMax"),
  2667.                 "intGold": set.getItem("intGold"),
  2668.                 "intCoins": set.getItem("intCoins"),
  2669.                 "intLevel": set.getItem("intLevel"),
  2670.                 "minDmg": set.getItem("minDmg"),
  2671.                 "maxDmg": set.getItem("maxDmg"),
  2672.                 "strDrops": set.getItem("strDrops"),
  2673.                 "intExp": set.getItem("intExp"),
  2674.                 "sRace": set.getItem("sRace"),
  2675.                 "iDPS":1,
  2676.                 "intHPMax": set.getItem("intHPMax"),
  2677.                 "intHPMax1": Number(set.getItem("intHPMax"))+25,
  2678.                 "intHPMax2": Number(set.getItem("intHPMax"))-25,
  2679.                 "strElement": set.getItem("strElement"),
  2680.                 "intRSC": 1,
  2681.                 "strLinkage": set.getItem("strLinkage"),
  2682.                 "strMonFileName": doCache(set.getItem("strMonFileName")),
  2683.                 "strMonName": set.getItem("strMonName"),
  2684.                 "intRep": set.getItem("intRep"),
  2685.                 "react": "",
  2686.                 "pvpscore": set.getItem("pvpscore"),
  2687.                 "respawnTime": Number(set.getItem("respawnTime")),
  2688.                 "ann": Number(set.getItem("ann")),
  2689.                 "attacks": set.getItem("attacks")
  2690.             }
  2691.            
  2692.             worldMonsters.put(monid, monObj)
  2693.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + monObj.strMonName + " id: " + monid)
  2694.         }
  2695.         trace(">> Monsters: " + queryRes.size())
  2696.     }
  2697.    
  2698.     //trace(">> Caching maps...")
  2699.     query = "SELECT * FROM etl_maps"
  2700.     queryRes = dbase.executeQuery(query)
  2701.     if (queryRes && queryRes.size() > 0) {
  2702.         for(var i = 0; i < queryRes.size(); i++) {
  2703.             var set = queryRes.get(i)
  2704.             var mapid = Integer(set.getItem("id"))
  2705.            
  2706.             var mapObj = {
  2707.                 "id": mapid,
  2708.                 "sName": set.getItem("sName"),
  2709.                 "sNameD": set.getItem("sNameD"),
  2710.                 "sFileName": doCache(set.getItem("FileName")),
  2711.                 "iMaxPlayers": Number(set.getItem("max_players")),
  2712.                 "sExtra": set.getItem("sExtra"),
  2713.                 "spawnFrame": set.getItem("spawnFrame"),
  2714.                 "spawnPad": set.getItem("spawnPad"),
  2715.                 "mapItems": [],
  2716.                 "monTree": [],
  2717.                 "monFrame": [],
  2718.                 "iLevelMin": Number(set.getItem("iLevelMin"))
  2719.             }
  2720.            
  2721.            
  2722.             if(set.getItem("monsters_tree") != "") {
  2723.                 mapObj.mapItems = String(set.getItem("mapitems")).split(",")
  2724.                 mapObj.monTree = String(set.getItem("monsters_tree")).split(",")
  2725.                 mapObj.monFrame = String(set.getItem("monsters_frame")).split(",")
  2726.             }
  2727.  
  2728.            
  2729.            
  2730.             worldMaps.put(set.getItem("sName"), mapObj)
  2731.             createNewRoom(set.getItem("sName")+"-1")
  2732.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + mapObj.sName + " id: " + mapid)
  2733.         }
  2734.         trace(">> Maps: " + queryRes.size())
  2735.     }
  2736.    
  2737.     //trace(">> Caching items...")
  2738.     query = "SELECT * FROM etl_items"
  2739.     queryRes = dbase.executeQuery(query)
  2740.     if (queryRes && queryRes.size() > 0) {
  2741.         for(var i = 0; i < queryRes.size(); i++) {
  2742.             var set = queryRes.get(i)
  2743.             var itemid = Integer(set.getItem("item_id"))
  2744.            
  2745.             var itemObj = {
  2746.                 "ItemID": itemid,
  2747.                 "bCoins": set.getItem("bCoins"),
  2748.                 "bStaff": set.getItem("bStaff"),
  2749.                 "bHouse": set.getItem("bHouse"),
  2750.                 "bTemp": set.getItem("bTemp"),
  2751.                 "bUpg": set.getItem("bUpg"),
  2752.                 "EnhPatternID": 1,
  2753.                 "EnhID": 1,
  2754.                 "FactionID": set.getItem("FactionID"),
  2755.                 "iClass": set.getItem("iClass"),
  2756.                 "iCost": set.getItem("iCost"),
  2757.                 "wDPS": set.getItem("iDPS"),
  2758.                 "iLvl": set.getItem("iLvl"),
  2759.                 "iRty": set.getItem("iRty"),
  2760.                 "iQtyRemain": set.getItem("iQtyRemain"),
  2761.                 "iQty": set.getItem("iQty"),
  2762.                 "iReqCP": set.getItem("iReqCP"),
  2763.                 "iReqRep": set.getItem("iReqRep"),
  2764.                 "iRng": set.getItem("iRng"),
  2765.                 "iRty": set.getItem("iRty"),
  2766.                 "iStk": set.getItem("iStk"),
  2767.                 "sDesc": set.getItem("sDesc"),
  2768.                 "sElmt": set.getItem("sElmt"),
  2769.                 "sES": set.getItem("sES"),
  2770.                 "sType": set.getItem("sType"),
  2771.                 "sFaction": set.getItem("sFaction"),
  2772.                 "sFile": doCache(set.getItem("sFile")),
  2773.                 "sIcon": set.getItem("sIcon"),
  2774.                 "sLink": set.getItem("sLink"),
  2775.                 "sReqQuests": set.getItem("sReqQuests"),
  2776.                 "ClassID": set.getItem("ClassID"),
  2777.                 "minDmg": set.getItem("minDmg"),
  2778.                 "maxDmg": set.getItem("maxDmg"),
  2779.                 "magicDmg": set.getItem("magicDmg"),
  2780.                 "STR": set.getItem("STR"),
  2781.                 "INT": set.getItem("INT"),
  2782.                 "DEX": set.getItem("DEX"),
  2783.                 "WIS": set.getItem("WIS"),
  2784.                 "END": set.getItem("END"),
  2785.                 "LCK": set.getItem("LCK"),
  2786.                 "sp": Number(set.getItem("sp")),
  2787.                 "attacks": set.getItem("attacks")
  2788.             }
  2789.             itemObj.sName = String(addItemRarity(set.getItem("sName"), itemObj.iRty))
  2790.            
  2791.             worldItems.put(Number(itemid), itemObj)
  2792.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + itemObj.sName + " id: " + itemid)
  2793.         }
  2794.  
  2795.         trace(">> Items: " + queryRes.size())
  2796.     }
  2797.    
  2798.     //trace(">> Caching hairs...")
  2799.     query = "SELECT * FROM etl_hairs"
  2800.     queryRes = dbase.executeQuery(query)
  2801.     if (queryRes && queryRes.size() > 0) {
  2802.         for(var i = 0; i < queryRes.size(); i++) {
  2803.             var set = queryRes.get(i)
  2804.             var hairid = Integer(set.getItem("hairID"))
  2805.            
  2806.             var hairObj = {
  2807.                 "sFile": set.getItem("sFile").toLowerCase(),
  2808.                 "HairID": hairid,
  2809.                 "sName": set.getItem("sName"),
  2810.                 "sGen": set.getItem("sGen")
  2811.             }
  2812.            
  2813.             worldHairs.put(hairid, hairObj)
  2814.         }
  2815.         trace(">> Hairs: " + queryRes.size())
  2816.     }
  2817.    
  2818.     //trace(">> Caching hair shops...")
  2819.     query = "SELECT * FROM etl_hairshop"
  2820.     queryRes = dbase.executeQuery(query)
  2821.     if (queryRes && queryRes.size() > 0) {
  2822.         for(var i = 0; i < queryRes.size(); i++) {
  2823.             var set = queryRes.get(i)
  2824.             var hshopid = Integer(set.getItem("id"))
  2825.            
  2826.             var hshopObj = {
  2827.                 "hairs": set.getItem("hairs"),
  2828.                 "hairsM": set.getItem("hairsM"),
  2829.                 "hairsF": set.getItem("hairsF")
  2830.             }
  2831.            
  2832.             worldHairShops.put(hshopid, hshopObj)
  2833.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + shopObj.sName + " id: " + hshopid)
  2834.         }
  2835.         trace(">> Hair Shops: " + queryRes.size())
  2836.     }
  2837.    
  2838.     //trace(">> Caching guilds...")
  2839.     query = "SELECT * FROM etl_guilds"
  2840.     queryRes = dbase.executeQuery(query)
  2841.     if (queryRes && queryRes.size() > 0) {
  2842.         for(var i = 0; i < queryRes.size(); i++) {
  2843.             var set = queryRes.get(i)
  2844.             var gid = Integer(set.getItem("id"))
  2845.            
  2846.             var gObj = {
  2847.                 "id": set.getItem("id"),
  2848.                 "guildName": set.getItem("guildName")
  2849.             }
  2850.            
  2851.             worldGuilds.put(Number(gid), gObj)
  2852.             //debug(">> [" + (i + 1) + "/" + queryRes.size() + "] " + shopObj.sName + " id: " + hshopid)
  2853.         }
  2854.         trace(">> Guilds: " + queryRes.size())
  2855.     }
  2856.     initEnhanceDetails()
  2857.    
  2858.     /* Unquote to test cache
  2859.     debug(">> Testing cache...")
  2860.    
  2861.     for each (var key in worldClasses.keySet().toArray()) {
  2862.         debug("worldClasses[" + key + "]: " + worldClasses.get(key).sClassName)
  2863.     }
  2864.     debug(">> Cache test complete.")
  2865.     */
  2866.    
  2867.     trace(">> World object caching operation end")
  2868. }
  2869.  
  2870. function getRankFromCP(cp){
  2871.     var i = 1
  2872.     while (i < 10)
  2873.     {
  2874.         if (arrRanks[i] >= cp){
  2875.             return i
  2876.         }
  2877.         i++
  2878.     }
  2879.     return -1
  2880. }
  2881.  
  2882. function sendServerUpdate(user, data1){
  2883.     _server.sendResponse(["server", data1], -1, null, [user], "str");
  2884. }
  2885.  
  2886. function isSkillOK(rank, skillslot) {
  2887.     if (rank <= 1 && skillslot == 2)
  2888.     return false
  2889.     else if (rank <= 2 && skillslot == 3)
  2890.     return false
  2891.     else if (rank <= 4 && skillslot == 4)
  2892.     return false
  2893.     else if (rank <= 5 && skillslot == 5)
  2894.     return false
  2895.     else
  2896.     return true
  2897. }
  2898.  
  2899. function sendCVU(user) {
  2900.     var cvu = {"cmd":"cvu","o":{"PCstRatio":7.47,"PChpDelta":1640,"PChpBase1":360,"baseHit":0,"intSPtoDPS":10,"resistRating":17,"curveExponent":0.66,"baseCritValue":1.5,"PChpGoal100":4000,"intLevelCap":100,"baseMiss":0.1,"baseParry":0.03,"GstBase":12,"modRating":3,"baseResistValue":0.7,"baseBlockValue":0.7,"intHPperEND":5,"baseHaste":0,"baseBlock":0,"statsExponent":1,"PChpBase100":2000,"intAPtoDPS":10,"PCstBase":15,"baseCrit":0.05,"baseEventValue":0.05,"GstGoal":572,"PChpGoal1":400,"GstRatio":5.6,"intLevelMax":100,"bigNumberBase":8,"PCstGoal":762,"baseDodge":0.04,"PCDPSMod":0.85}}
  2901.     _server.sendResponse(cvu, -1, null, [user], "json")
  2902. }
  2903.  
  2904. function sendStats(user) {
  2905.     var eqp = user.properties.get("eqp")
  2906.     var wepSTR = (worldItems.get(eqp.get("Weapon"))) ? Number(worldItems.get(eqp.get("Weapon")).STR) : 0
  2907.     var wepINT = (worldItems.get(eqp.get("Weapon"))) ? Number(worldItems.get(eqp.get("Weapon")).INT) : 0
  2908.     var wepDEX = (worldItems.get(eqp.get("Weapon"))) ? Number(worldItems.get(eqp.get("Weapon")).DEX) : 0
  2909.     var wepLCK = (worldItems.get(eqp.get("Weapon"))) ? Number(worldItems.get(eqp.get("Weapon")).LCK) : 0
  2910.     var wepWIS = (worldItems.get(eqp.get("Weapon"))) ? Number(worldItems.get(eqp.get("Weapon")).WIS) : 0
  2911.     var wepEND = (worldItems.get(eqp.get("Weapon"))) ? Number(worldItems.get(eqp.get("Weapon")).END) : 0
  2912.    
  2913.     var baSTR = (worldItems.get(eqp.get("ba"))) ? Number(worldItems.get(eqp.get("ba")).STR) : 0
  2914.     var baINT = (worldItems.get(eqp.get("ba"))) ? Number(worldItems.get(eqp.get("ba")).INT) : 0
  2915.     var baDEX = (worldItems.get(eqp.get("ba"))) ? Number(worldItems.get(eqp.get("ba")).DEX) : 0
  2916.     var baLCK = (worldItems.get(eqp.get("ba"))) ? Number(worldItems.get(eqp.get("ba")).LCK) : 0
  2917.     var baWIS = (worldItems.get(eqp.get("ba"))) ? Number(worldItems.get(eqp.get("ba")).WIS) : 0
  2918.     var baEND = (worldItems.get(eqp.get("ba"))) ? Number(worldItems.get(eqp.get("ba")).END) : 0
  2919.    
  2920.     var heSTR = (worldItems.get(eqp.get("he"))) ? Number(worldItems.get(eqp.get("he")).STR) : 0
  2921.     var heINT = (worldItems.get(eqp.get("he"))) ? Number(worldItems.get(eqp.get("he")).INT) : 0
  2922.     var heDEX = (worldItems.get(eqp.get("he"))) ? Number(worldItems.get(eqp.get("he")).DEX) : 0
  2923.     var heLCK = (worldItems.get(eqp.get("he"))) ? Number(worldItems.get(eqp.get("he")).LCK) : 0
  2924.     var heWIS = (worldItems.get(eqp.get("he"))) ? Number(worldItems.get(eqp.get("he")).WIS) : 0
  2925.     var heEND = (worldItems.get(eqp.get("he"))) ? Number(worldItems.get(eqp.get("he")).END) : 0
  2926.    
  2927.     var coSTR = (worldItems.get(eqp.get("co"))) ? Number(worldItems.get(eqp.get("co")).STR) : 0
  2928.     var coINT = (worldItems.get(eqp.get("co"))) ? Number(worldItems.get(eqp.get("co")).INT) : 0
  2929.     var coDEX = (worldItems.get(eqp.get("co"))) ? Number(worldItems.get(eqp.get("co")).DEX) : 0
  2930.     var coLCK = (worldItems.get(eqp.get("co"))) ? Number(worldItems.get(eqp.get("co")).LCK) : 0
  2931.     var coWIS = (worldItems.get(eqp.get("co"))) ? Number(worldItems.get(eqp.get("co")).WIS) : 0
  2932.     var coEND = (worldItems.get(eqp.get("co"))) ? Number(worldItems.get(eqp.get("co")).END) : 0
  2933.    
  2934.     var arSTR = (worldItems.get(eqp.get("ar"))) ? Number(worldItems.get(eqp.get("ar")).STR) : 0
  2935.     var arINT = (worldItems.get(eqp.get("ar"))) ? Number(worldItems.get(eqp.get("ar")).INT) : 0
  2936.     var arDEX = (worldItems.get(eqp.get("ar"))) ? Number(worldItems.get(eqp.get("ar")).DEX) : 0
  2937.     var arLCK = (worldItems.get(eqp.get("ar"))) ? Number(worldItems.get(eqp.get("ar")).LCK) : 0
  2938.     var arWIS = (worldItems.get(eqp.get("ar"))) ? Number(worldItems.get(eqp.get("ar")).WIS) : 0
  2939.     var arEND = (worldItems.get(eqp.get("ar"))) ? Number(worldItems.get(eqp.get("ar")).END) : 0
  2940.    
  2941.     var stat = {
  2942.         "tempSta":{
  2943.             "ba":{"STR":baSTR,"INT":baINT,"DEX":baDEX,"LCK":baLCK,"WIS":baWIS,"END":baEND},
  2944.             "Weapon":{"STR":wepSTR,"INT":wepINT,"DEX":wepLCK,"LCK":wepLCK,"WIS":wepWIS,"END":wepEND},
  2945.             "he":{"STR":heSTR,"INT":heINT,"DEX":heDEX,"LCK":heLCK,"WIS":heWIS,"END":heEND},
  2946.             "co":{"STR":coSTR,"INT":coINT,"DEX":coDEX,"LCK":coLCK,"WIS":coWIS,"END":coEND},
  2947.             "ar":{"STR":arSTR,"INT":arINT,"DEX":arDEX,"LCK":arLCK,"WIS":arWIS,"END":arEND},
  2948.             "innate":{
  2949.                 "STR":getBaseStats(user).STR,
  2950.                 "INT":getBaseStats(user).INT,
  2951.                 "DEX":getBaseStats(user).DEX,
  2952.                 "WIS":getBaseStats(user).WIS,
  2953.                 "LCK":getBaseStats(user).LCK,
  2954.                 "END":getBaseStats(user).END
  2955.             }
  2956.         },
  2957.         "cmd":"stu",
  2958.         "sta":{"$tdo":0.115,"$thi":0.038500000000000006,"_cmi":1,"$smb":0,"_tdo":0.04,"_cmo":1,"_sem":0.05,"$WIS":23,"$tha":0.00000000000232,"$tpa":0.03,"_cdi":1,"_sp":0,"$cpo":1.1,"_chi":1,"$cpi":1,"_cdo":1,"_tbl":0,"_tpa":0.03,"_cho":1,"$LCK":14,"$shb":0,"$STR":120,"$sem":0.12000000000000001,"_ap":0,"_sbm":0.7,"$cmi":0.92,"$cai":0.9,"$tbl":0,"_srm":0.7,"_cai":1,"$DEX":77,"_STR":61,"$ap":240,"$cao":1,"_DEX":50,"$sbm":0.61,"$cmc":1,"$INT":32,"_cpi":1,"$chi":1,"$cho":1,"_INT":11,"_scm":1.5,"_cao":1,"_END":68,"_WIS":23,"_shb":0,"_tre":0.07,"$cdo":1,"$tcr":0.16999999999999998,"$END":123,"$cdi":1,"_cpo":1,"$scm":1.675,"_tcr":0.05,"_tha":0,"_thi":0,"$srm":0.7,"$cmo":1,"$sp":264,"_LCK":14,"_cmc":1,"$tre":0.07,"_smb":0},"wDPS":500}
  2959.     _server.sendResponse(stat, -1, null, [user], "json")
  2960.    
  2961.     var userData = {}
  2962.     userData.uoName = String(user.getName())
  2963.     userData.strUsername = String(user.properties.get("strUsername"))
  2964.     userData.tdmgMin = getDamagePower(user, "min")
  2965.     userData.tdmgMax = getDamagePower(user, "max")
  2966.     userData.aPower = Number(getDamagePower(user, "min") + getDamagePower(user, "max"))
  2967.     userData.sPower = Number(getSpellPower(user))
  2968.     userData.vHit = getHitChance(user)
  2969.     userData.vHaste = Number(getHaste(user))
  2970.     userData.vCrit = getCritChance(user)
  2971.     userData.vDodge = 0
  2972.    
  2973.     user.properties.put("intHPMax", Number(calculateHP(user)))
  2974.     user.properties.put("intMPMax", Number(calculateMP(user, "max")))
  2975.    
  2976.     if(Number(user.properties.get("intHP")) > Number(user.properties.get("intHPMax")))
  2977.     user.properties.put("intHP", Number(user.properties.get("intHPMax")))
  2978.     if(Number(user.properties.get("intMP")) > Number(user.properties.get("intMPMax")))
  2979.     user.properties.put("intMP", Number(user.properties.get("intMPMax")))
  2980.    
  2981.     userData.intMPMax = Number(user.properties.get("intMPMax"))
  2982.     userData.intHPMax = Number(user.properties.get("intHPMax"))
  2983.     userData.intMP = Number(user.properties.get("intMP"))
  2984.     userData.intHP = Number(user.properties.get("intHP"))
  2985.     var wat = {"cmd": "notls", "o": userData, "unm": String(user.getName())}
  2986.    
  2987.     _server.sendResponse(wat, -1, null, [user], "json")
  2988. }
  2989.  
  2990. function addItemRarity(itemName, iRarity) {
  2991.     var iName = String(itemName)
  2992.     var iRty = Number(iRarity)
  2993.     //trace(iRty)
  2994.     switch(iRty) {
  2995.     case 1:
  2996.         return "<font color=\"#4DE800\">" + iName + "</font>"
  2997.     case 2:
  2998.         return "<font color=\"#B300FF\">" + iName + "</font>"
  2999.     case 3:
  3000.         return "<font color=\"#FF8000\">" + iName + "</font>"
  3001.     default:
  3002.         return String(iName)
  3003.     }
  3004. }
  3005.  
  3006. function getManaType(user) {
  3007.     var cid = Number(user.properties.get("intClassId"))
  3008.     classMType = []
  3009.     //2 for fury; 1 for energy
  3010.     classMType[1] = 2
  3011.     classMType[2] = 0
  3012.     classMType[3] = 0
  3013.     classMType[4] = 1
  3014.     classMType[5] = 0
  3015.     return Number(classMType[cid])
  3016.  
  3017. }
  3018. function getBaseStats(user) {
  3019.     var statsObj = {}
  3020.     var cid = Number(user.properties.get("intClassId"))
  3021.     var lvl = Number(user.properties.get("intLevel"))
  3022.     var classStats = []
  3023.     classStats[1] = {"STR": 5, "INT": 1, "DEX": 2, "WIS": 1, "LCK": 1, "END": 4}
  3024.     classStats[2] = {"STR": 1, "INT": 5, "DEX": 1, "WIS": 4, "LCK": 1, "END": 2}
  3025.     classStats[3] = {"STR": 1, "INT": 5, "DEX": 1, "WIS": 4, "LCK": 1, "END": 2}
  3026.     classStats[4] = {"STR": 3, "INT": 1, "DEX": 6, "WIS": 1, "LCK": 1, "END": 2.5}
  3027.     classStats[5] = {"STR": 3, "INT": 1, "DEX": 6, "WIS": 1, "LCK": 1, "END": 2.5}
  3028.     classStats[5] = {"STR": 3, "INT": 1, "DEX": 6, "WIS": 1, "LCK": 1, "END": 2.5}
  3029.     statsObj.STR = Number(lvl*classStats[cid].STR)
  3030.     statsObj.INT = Number(lvl*classStats[cid].INT)
  3031.     statsObj.DEX = Number(lvl*classStats[cid].DEX)
  3032.     statsObj.WIS = Number(lvl*classStats[cid].WIS)
  3033.     statsObj.LCK = Number(lvl*classStats[cid].LCK)
  3034.     statsObj.END = Number(lvl*classStats[cid].END)
  3035.     return statsObj
  3036. }
  3037. function getSpellPower(user) {
  3038.     var sPower = 0
  3039.     var INT = 0
  3040.     var eqp = user.properties.get("eqp")
  3041.     sPower = (worldItems.get(eqp.get("Weapon"))) ? Number(worldItems.get(eqp.get("Weapon")).magicDmg) : 0
  3042.     INT = (worldItems.get(eqp.get("Weapon"))) ? INT + Number(worldItems.get(eqp.get("Weapon")).INT) : INT
  3043.     INT = (worldItems.get(eqp.get("ba"))) ? INT + Number(worldItems.get(eqp.get("ba")).INT) : INT
  3044.     INT = (worldItems.get(eqp.get("he"))) ? INT + Number(worldItems.get(eqp.get("he")).INT) : INT
  3045.     INT = (worldItems.get(eqp.get("co"))) ? INT + Number(worldItems.get(eqp.get("co")).INT) : INT
  3046.     INT += Number(getBaseStats(user).INT)
  3047.     sPower += Number(Number(INT) * 2.25)
  3048.     return Number(Math.floor(sPower))
  3049. }
  3050.  
  3051. function getStatByName(user, statName) {
  3052.     var eqp = user.properties.get("eqp")
  3053.     var keySet = eqp.keySet()
  3054.     var statValue = 0
  3055.     switch(String(statName)) {
  3056.     case "STR":
  3057.         statValue += Number(getBaseStats(user).STR)
  3058.         break
  3059.     case "INT":
  3060.         statValue += Number(getBaseStats(user).INT)
  3061.         break
  3062.     case "DEX":
  3063.         statValue += Number(getBaseStats(user).DEX)
  3064.         break
  3065.     case "END":
  3066.         statValue += Number(getBaseStats(user).END)
  3067.         break
  3068.     case "LCK":
  3069.         statValue += Number(getBaseStats(user).LCK)
  3070.         break
  3071.     case "WIS":
  3072.         statValue += Number(getBaseStats(user).WIS)
  3073.         break
  3074.     default:
  3075.         return 0
  3076.     }
  3077.     for (var i = keySet.iterator(); i.hasNext();) {
  3078.         var key = String(i.next())
  3079.         var itemObj = worldItems.get(eqp.get(key))
  3080.         if(itemObj && eqp.get(key) != 90000) {
  3081.             switch(String(statName)) {
  3082.             case "STR":
  3083.                 statValue += Number(itemObj.STR)
  3084.                 break
  3085.             case "INT":
  3086.                 statValue += Number(itemObj.INT)
  3087.                 break
  3088.             case "DEX":
  3089.                 statValue += Number(itemObj.DEX)
  3090.                 break
  3091.             case "END":
  3092.                 statValue += Number(itemObj.END)
  3093.                 break
  3094.             case "LCK":
  3095.                 statValue += Number(itemObj.LCK)
  3096.                 break
  3097.             case "WIS":
  3098.                 statValue += Number(itemObj.WIS)
  3099.                 break
  3100.             default:
  3101.                 return 0
  3102.             }
  3103.         }
  3104.     }
  3105.     //trace(String(statName) + ": " + Number(Integer(statValue)))
  3106.     return Number(Integer(statValue))
  3107. }
  3108.  
  3109. function getDamagePower(user, dmgtype) {
  3110.     var STR = Number(getStatByName(user, "STR"))
  3111.     var dmgMin = 5
  3112.     var dmgMax = 10
  3113.     var eqp = user.properties.get("eqp")
  3114.    
  3115.     var itemObj = worldItems.get(eqp.get("Weapon"))
  3116.     if(itemObj) {
  3117.         dmgMin += Number(itemObj.minDmg)
  3118.         dmgMax += Number(itemObj.maxDmg)
  3119.     }
  3120.     dmgMin += Number(Number(STR) * 0.75)
  3121.     dmgMax += Number(Number(STR) * 0.75)
  3122.     if(String(dmgtype) == "min") {
  3123.         return Number(Math.floor(dmgMin))
  3124.     } else if(String(dmgtype) == "max") {
  3125.         return Number(Math.floor(dmgMax))
  3126.     }
  3127. }
  3128.  
  3129. function getCritChance(user) {
  3130.     var DEX = Number(getStatByName(user, "DEX"))
  3131.     var critChance = Number(Number(DEX) * 0.15)
  3132.     if(critChance > 100)
  3133.     critChance = 100
  3134.     return Number(Integer2(critChance))
  3135. }
  3136.  
  3137. function getHitChance(user) {
  3138.     var STR = Number(getStatByName(user, "STR"))
  3139.     var hitChance = 72 + Number(Number(STR) * 0.15)
  3140.     if(hitChance > 100)
  3141.     hitChance = 100
  3142.     return Number(Integer2(hitChance))
  3143. }
  3144.  
  3145.  
  3146.  
  3147. function getHPFromStats(user) {
  3148.     var END = Number(getStatByName(user, "END"))
  3149.     var bonusHP = Number(Number(END) * 25.3)
  3150.     return Integer(bonusHP)
  3151. }
  3152.  
  3153. function getMPFromStats(user) {
  3154.     var INT = Number(getStatByName(user, "INT"))
  3155.  
  3156.     var bonusMP = Number(Number(INT) * 2)
  3157.     return Integer(bonusMP)
  3158. }
  3159.  
  3160. function getHaste(user) {
  3161.     var INT = Number(getStatByName(user, "INT"))
  3162.  
  3163.     var hasteBonus = Number(Number(INT) * 0.12)
  3164.     if(Number(hasteBonus) > 50) {
  3165.         hasteBonus = 50
  3166.     }
  3167.     return Number(Integer2(hasteBonus))
  3168. }
  3169.  
  3170. function loadSkills(user, classid) {
  3171.     var classObj = worldClasses.get(classid)
  3172.     var rank = getRankFromCP(Integer(user.properties.get("iCP")))
  3173.     rank = (rank == 9 || rank == -1) ? 10 : rank
  3174.    
  3175.     var passive = []
  3176.     var active = []
  3177.    
  3178.     for(var i = 0; i < classObj.skills.length; i++) {
  3179.         var skill = {}
  3180.         var skillObj = worldSkills.get(Integer(classObj.skills[i]))
  3181.        
  3182.         skill.icon = ""+skillObj.icon
  3183.         skill.mp = ""+skillObj.mana
  3184.         skill.nam = ""+skillObj.name
  3185.         skill.anim = ""+skillObj.anim
  3186.         skill.desc = ""+skillObj.desc
  3187.         skill.isOK = Boolean(isSkillOK(rank, i))
  3188.         if(skillObj.tgtMax != 0) {
  3189.             skill.tgtMax = ""+skillObj.tgtMax
  3190.             skill.tgtMin = ""+skillObj.tgtMin
  3191.         }
  3192.         skill.range = ""+skillObj.range
  3193.         skill.fx = ""+skillObj.fx
  3194.         skill.damage = ""+skillObj.damage
  3195.         skill.dsrc = ""+skillObj.dsrc
  3196.         skill.ref = ""+skillObj.ref
  3197.         if(skill.ref != "aa")
  3198.         skill.ref = "a"+i
  3199.         skill.castTime = ""+skillObj.castTime
  3200.         //skill.castTime = 0
  3201.         if(skill.ref == "aa")
  3202.         skill.auto = true
  3203.         skill.tgt = ""+skillObj.tgt
  3204.         skill.typ = ""+skillObj.typ
  3205.         skill.strl = ""+skillObj.strl
  3206.         skill.cd = ""+skillObj.cd
  3207.        
  3208.         active.push(skill)
  3209.     }
  3210.    
  3211.     //active.push({
  3212.     //  "icon":"icu1","nam":"Potions","anim":"Salute","mp":0,"desc":"Equip a potion or scroll from your inventory to use it here.","isOK":true,"range":808,"fx":"","ref":"a5","tgt":"f","typ":"m","strl":"","cd":5000
  3213.     //})
  3214.    
  3215.     for(var i = classObj.passives.length; i < classObj.passives.length; i++) {
  3216.         var skill = {}
  3217.         var skillObj = worldPassives.get(Integer(classObj.passives[i]))
  3218.        
  3219.         skill.icon = ""+skillObj.icon
  3220.         skill.ref = ""+skillObj.ref
  3221.         skill.nam = ""+skillObj.name
  3222.         skill.desc = ""+skillObj.desc
  3223.         skill.isOK = true
  3224.         if(rank < 4)
  3225.         skill.isOK = false
  3226.         skill.auras = []
  3227.         skill.typ = ""+skillObj.type
  3228.        
  3229.         passive.push(skill)
  3230.     }
  3231.    
  3232.     var sAct = {
  3233.         "cmd": "sAct",
  3234.         "actions": {"active" : active, "passive": passive}
  3235.     }
  3236.     _server.sendResponse(sAct, -1, null, [user], "json")
  3237.     //sendStats(user)
  3238. }
  3239.  
  3240. function updateClass(user, classid) {
  3241.     var room = zone.getRoom(user.getRoom())
  3242.     var classObj = worldClasses.get(classid)
  3243.     if(classObj) {
  3244.         user.properties.put("intClassId", Integer(classid))
  3245.        
  3246.         var data = {
  3247.             "uid": String(user.getUserId()),
  3248.             "cmd": "doClass",
  3249.             "iCP": Number(user.properties.get("iCP")),
  3250.             "sClassCat": String(classObj.sClassCat),
  3251.             "cName": String(classObj.sClassName)
  3252.         }
  3253.        
  3254.         data.sStats = String(classObj.sStats)
  3255.         data.aMRM = classObj.aMRM
  3256.         data.sDesc = String(classObj.sDesc)
  3257.        
  3258.         _server.sendResponse(data, -1, null, room.getAllUsers(), "json")
  3259.         loadSkills(user, Integer(classid))
  3260.     }
  3261. }
  3262.  
  3263. function unequipItem(userid, itemid) {
  3264.     var user = _server.getUserById(userid)
  3265.     var room = zone.getRoom(user.getRoom())
  3266.     var itemObj = worldItems.get(itemid)
  3267.    
  3268.     if(itemObj.sES == "Weapon" || itemObj.sES == "ar" || itemObj.sES == "co" || itemObj.sES == "he" || itemObj.sES == "ba" || itemObj.sES == "pe" || itemObj.sES == "am"){
  3269.         var eqpObj = {
  3270.             "uid": userid,
  3271.             "cmd": "unequipItem",
  3272.             "ItemID": itemid,
  3273.             "strES": String(itemObj.sES),
  3274.             "sFile": String(itemObj.sFile),
  3275.             "sLink": String(itemObj.sLink)
  3276.         }
  3277.        
  3278.         var eqp = user.properties.get("eqp")
  3279.         eqp.remove(itemObj.sES)
  3280.         user.properties.put("eqp", eqp)
  3281.        
  3282.         dbase.executeCommand("UPDATE etl_users_items SET bEquip=0 WHERE user_id=" + user.properties.get("CharID") + " AND bEquip=1 AND sES='" + itemObj.sES + "' AND item_id=" + itemid + "")
  3283.         _server.sendResponse(eqpObj, -1, null, room.getAllUsers(), "json")
  3284.         if(itemObj.sES == "ar") {
  3285.             var cid = Number(user.properties.get("intClassId"))
  3286.             if(cid == 1) {
  3287.                 equipItem(userid, 90000, true)
  3288.             } else if(cid == 2) {
  3289.                 equipItem(userid, 90002, true)
  3290.             } else if(cid == 3) {
  3291.                 equipItem(userid, 90003, true)
  3292.             } else if(cid == 4) {
  3293.                 equipItem(userid, 90001, true)
  3294.             }
  3295.         }
  3296.         sendStats(user)
  3297.     }
  3298. }
  3299.  
  3300. function equipItem(userid, itemid, self) {
  3301.     var user = _server.getUserById(userid)
  3302.     var room = zone.getRoom(user.getRoom())
  3303.     var itemObj = worldItems.get(Number(itemid))
  3304.     var query = "SELECT * FROM etl_users_items WHERE user_id='"+Integer(user.properties.get("CharID"))+"' AND item_id='"+itemid+"'"
  3305.     var queryRes = dbase.executeQuery(query)
  3306.     var errormsg = ""
  3307.     if(itemObj == null)
  3308.         errormsg = "Null item"
  3309.     if(self == false) {
  3310.         if(!getClassReqEquip(user, itemObj.ClassID))
  3311.         errormsg = "You can not wear this item."
  3312.         else if(itemObj.bStaff == 1 && !isStaff(user))
  3313.         errormsg = "This item is for staff only"
  3314.         else if(Integer(user.properties.get("intLevel")) < Integer(itemObj.iLvl))
  3315.         errormsg = "Your level is not high enough"
  3316.         else if(itemObj.bUpg == 1 && user.properties.get("iUpg") == 0)
  3317.         errormsg = "This item is for members only"
  3318.     }
  3319.     if(errormsg != "")
  3320.     _server.sendResponse({"cmd": "showError", "msg": String(errormsg)}, -1, null, [user], "json")
  3321.     if ((queryRes && queryRes.size() > 0 || self) && errormsg == "") {
  3322.         var eqpObj = {
  3323.             "uid": userid,
  3324.             "cmd": "equipItem",
  3325.             "eW": true,
  3326.             "ItemID": itemid,
  3327.             "strES": String(itemObj.sES),
  3328.             "sFile": String(itemObj.sFile),
  3329.             "sLink": String(itemObj.sLink),
  3330.             "sType": String(itemObj.sType)
  3331.         }
  3332.  
  3333.        
  3334.         var eqp = user.properties.get("eqp")
  3335.         eqp.put(itemObj.sES, itemid)
  3336.         user.properties.put("eqp", eqp)
  3337.        
  3338.         if(self == true) {
  3339.             if(itemid == 90000 || itemid == 90001 || itemid == 90002 || itemid == 90003) {
  3340.                 _server.sendResponse(eqpObj, -1, null, room.getAllUsers(), "json")
  3341.             } else  {
  3342.                 _server.sendResponse(eqpObj, -1, null, [user], "json")
  3343.             }
  3344.         } else {
  3345.             dbase.executeCommand("UPDATE etl_users_items SET bEquip=0 WHERE user_id=" + user.properties.get("CharID") + " AND bEquip=1 AND sES='" + itemObj.sES + "'")
  3346.             dbase.executeCommand("UPDATE etl_users_items SET bEquip=1 WHERE user_id=" + user.properties.get("CharID") + " AND item_id=" + itemid + " AND bEquip=0")
  3347.             _server.sendResponse(eqpObj, -1, null, room.getAllUsers(), "json")
  3348.             //trace("user: " + user.getName() + " has equiped: " + itemid + " (self = " + self + ")")
  3349.         }
  3350.         sendStats(user)
  3351.     }
  3352. }
  3353.  
  3354. function useItemRequest(user, itemid) {
  3355.     var toGenger = (String(user.properties.get("strGender")) == "F") ? "M" : "F"
  3356.     if(itemid == 23) {
  3357.         removeItem(user, itemid, 1)
  3358.         changeGender(user.getName(), toGenger, 0)
  3359.     } else if(itemid == 24 || itemid == 25) {
  3360.        
  3361.         var lvlPlus = (itemid == 24) ? 5 : 10
  3362.         var cLvl = Number(user.properties.get("intLevel"))
  3363.         var mLvl = Number(maxLevel)
  3364.         if(cLvl >= mLvl) {
  3365.             _server.sendResponse(["warning", "You are already max level."], -1, null, [user], "str")
  3366.         } else {
  3367.             removeItem(user, itemid, 1)
  3368.             var lvlDiff = Number(mLvl-cLvl)
  3369.             if(lvlDiff < lvlPlus) {
  3370.                 levelUp(user, cLvl+lvlDiff)
  3371.             } else {
  3372.                 levelUp(user, cLvl+lvlPlus)
  3373.             }
  3374.         }
  3375.     } else if(itemid == 37){
  3376.         removeItem(user, itemid, 1)
  3377.         _server.sendResponse(["warning", "You are already max level."], -1, null, [user], "str")
  3378.     }
  3379. }
  3380.  
  3381. function removeItemFromArray(arrayOriginal, item) {
  3382.     var array = arrayOriginal
  3383.     var arrayLenght = array.length;
  3384.  
  3385.     for (i =0; i<arrayLenght; i++) {
  3386.         if (String(array[i]) == String(item)) {
  3387.             array.splice(i, 1);
  3388.         }
  3389.     }
  3390.     return (array)
  3391. }
  3392. function checkItemInArray(array, item) {
  3393.     var arrayLenght = array.length;
  3394.     for (i =0; i<arrayLenght; i++) {
  3395.         if (String(array[i]) == String(item)) {
  3396.             return (true)
  3397.         } else {
  3398.             return (false)
  3399.         }
  3400.     }
  3401. }
  3402.  
  3403. function loadInventoryBig(userid) {
  3404.     var user = _server.getUserById(userid)
  3405.     var room = zone.getRoom(user.getRoom())
  3406.    
  3407.     var inven = new Object()
  3408.     var friends = []
  3409.     var factions = []
  3410.     var items = []
  3411.     var hitems = []
  3412.  
  3413.     var list = user.properties.get("friends")
  3414.     for(var e = 0; e < list.length; e++) {
  3415.         if(list[e].length > 0){
  3416.             friends.push(getFriendInfo(list[e]))
  3417.         }
  3418.     }
  3419.    
  3420.     var ibankCount = 0
  3421.     bankCountQuery = "SELECT id, item_id FROM etl_users_items WHERE bBank=1 AND user_id=" + user.properties.get("CharID")
  3422.     bankCount = dbase.executeQuery(bankCountQuery)
  3423.     if (bankCount && bankCount.size() > 0) {
  3424.         for(var i = 0; i < bankCount.size(); i++) {
  3425.             var set = bankCount.get(i)
  3426.             var itemObj = worldItems.get(Number(set.getItem("item_id")))
  3427.             if(Number(itemObj.bCoins) == 0)
  3428.             ibankCount++
  3429.         }
  3430.     }
  3431.    
  3432.     query = "SELECT id,item_id,bEquip,iLvl,enh_id,sES,iQty,iCP FROM etl_users_items WHERE bBank=0 AND user_id=" + user.properties.get("CharID")
  3433.     queryRes = dbase.executeQuery(query)   
  3434.     if (queryRes && queryRes.size() > 0) {
  3435.         for(var i = 0; i < queryRes.size(); i++) {
  3436.             var set = queryRes.get(i)
  3437.             var itemObj = worldItems.get(Number(set.getItem("item_id")))
  3438.             if(itemObj && itemObj.sES != "no item") {
  3439.                 var item = new Object()
  3440.                
  3441.                 item.ItemID = Integer(set.getItem("item_id"))
  3442.                 item.sLink = String(itemObj.sLink)
  3443.                 item.sElmt = String(itemObj.sElmt)
  3444.                 item.bStaff = String(itemObj.bStaff)
  3445.                 item.iRng = String(itemObj.iRng)
  3446.                 item.iDPS = String(itemObj.iDPS)
  3447.                 item.bCoins = String(itemObj.bCoins)
  3448.                 item.sES = String(itemObj.sES)
  3449.                 item.sType = String(itemObj.sType)
  3450.                 item.iCost = String(itemObj.iCost)
  3451.                 item.iRty = String(itemObj.iRty)
  3452.                 item.iQty = String(set.getItem("iQty"))
  3453.  
  3454.                 if (itemObj.sES == "Weapon") {
  3455.                     item.EnhDPS = String(itemObj.iDPS)
  3456.                 }
  3457.                 if (itemObj.sES == "ar") {
  3458.                     item.iQty = String(set.getItem("iCP"))
  3459.                 }
  3460.                 if (itemObj.sType == "Enhancement" || itemObj.sType == "Necklace" || itemObj.sType == "Item"
  3461.                         || itemObj.sType == "Quest Item" || itemObj.sType == "Pet" || itemObj.sType == "Armor") {
  3462.                     item.EnhID = String(itemObj.EnhID)
  3463.                     item.PatternID = String(itemObj.EnhPatternID)
  3464.                     item.iLvl = Integer(itemObj.iLvl)
  3465.                 } else if (itemObj.EnhID > 0) {
  3466.                     item.iLvl = Integer(set.getItem("iLvl"))
  3467.                     item.EnhLvl = String(set.getItem("iLvl"))
  3468.                     item.EnhID = String(itemObj.EnhID)
  3469.                     item.EnhRty = String(itemObj.iRty)
  3470.                     item.EnhPatternID = String(set.getItem("enh_id"))
  3471.                 } else {
  3472.                     item.EnhID = String(itemObj.EnhID)
  3473.                 }
  3474.                 item.EnhLvl = Number(itemObj.iLvl)
  3475.                 item.iLvl = Number(itemObj.iLvl)
  3476.                 item.sIcon = String(itemObj.sIcon)
  3477.                 item.bTemp = String(itemObj.bTemp)
  3478.                 item.CharItemID = Integer(set.getItem("item_id"))
  3479.                 item.iHrs = 1000
  3480.                 item.sFile = String(itemObj.sFile)
  3481.                 item.iStk = String(itemObj.iStk)
  3482.                 item.bBank = 0
  3483.                 item.bUpg = String(itemObj.bUpg)
  3484.                 item.bEquip = String(set.getItem("bEquip"))
  3485.                 item.sName = String(itemObj.sName)
  3486.                 item.sDesc = String(itemObj.sDesc)
  3487.                 item.classReq = String(getClassReq(user, itemObj.ClassID))
  3488.                 item.minDmg = String(itemObj.minDmg)
  3489.                 item.maxDmg = String(itemObj.maxDmg)
  3490.                 item.magicDmg = String(itemObj.magicDmg)
  3491.                 item.STR = String(itemObj.STR)
  3492.                 item.INT = String(itemObj.INT)
  3493.                 item.DEX = String(itemObj.DEX)
  3494.                 item.WIS = String(itemObj.WIS)
  3495.                 item.END = String(itemObj.END)
  3496.                 item.LCK = String(itemObj.LCK)
  3497.                 item.sp = Number(itemObj.sp)
  3498.                 if(itemObj.sES.equals("hi") || itemObj.sES.equals("ho"))
  3499.                 hitems.push(item)
  3500.                 else
  3501.                 items.push(item)
  3502.             }
  3503.         }
  3504.     }
  3505.    
  3506.    
  3507.     inven.cmd = "IoadInventoryBig"
  3508.     inven.bankCount = Number(ibankCount)
  3509.     inven.friends = friends
  3510.     inven.factions = factions
  3511.     inven.items = items
  3512.     inven.nocmd = true
  3513.     inven.hitems = hitems
  3514.    
  3515.     _server.sendResponse(inven, -1, null, [user], "json")
  3516.    
  3517.     sendEquipment(user)
  3518.     updateClass(user, Number(user.properties.get("intClassId")))
  3519.     sendUotls(user, true, true, false, false)
  3520.     sendStats(user)
  3521.     sendGuildList(user)
  3522.     sendEnhanceDetails(user)
  3523. }
  3524.  
  3525. function sendEquipment(user) {
  3526.     var userid = user.getUserId()
  3527.     var eqp = user.properties.get("eqp")
  3528.     var keySet = eqp.keySet()
  3529.     for (var i = keySet.iterator(); i.hasNext();) {
  3530.         var key = String(i.next())
  3531.         equipItem(userid, eqp.get(key), true)
  3532.     }
  3533. }
  3534.  
  3535. function getClassReq(user, classid) {
  3536.     if(Number(classid) <= 0) {
  3537.         return ""
  3538.     } else {
  3539.         var classReqText = ""
  3540.         var classesArray = String(classid).split(",")
  3541.         for(var i = 0; i < classesArray.length; i++) {
  3542.             var classObj = worldClasses.get(Integer(classesArray[i]))
  3543.             if(Number(classesArray[i]) == Number(user.properties.get("intClassId"))) {
  3544.                 classReqText += String("<br><font color=\"#FFFFFF\">" + classObj.sClassName + " Class</font>")
  3545.             } else {
  3546.                 classReqText += String("<br><font color=\"#FF0000\">" + classObj.sClassName + " Class</font>")
  3547.             }
  3548.         }
  3549.         return String(classReqText)
  3550.     }
  3551. }
  3552.  
  3553. function getClassReqEquip(user, classid) {
  3554.     if(Number(classid) <= 0) {
  3555.         return true
  3556.     } else {
  3557.         var classesArray = String(classid).split(",")
  3558.         for(var i = 0; i < classesArray.length; i++) {
  3559.             var classObj = worldClasses.get(Integer(classesArray[i]))
  3560.             if(Number(classesArray[i]) == Number(user.properties.get("intClassId"))) {
  3561.                 return true
  3562.             }
  3563.         }
  3564.         return false
  3565.     }
  3566. }
  3567.  
  3568. function getFriendInfo(charid) {
  3569.     var info = new Object()
  3570.     var query = "SELECT id,iLvl,strUsername,currentServer FROM etl_users WHERE id=" + charid
  3571.     var queryRes = dbase.executeQuery(query)
  3572.    
  3573.     if (queryRes && queryRes.size() > 0) {
  3574.         var set = queryRes.get(0)
  3575.        
  3576.         info.iLvl = Integer(set.getItem("iLvl"))
  3577.         info.ID = Integer(charid)
  3578.         info.sName = ""+set.getItem("strUsername")
  3579.         info.sServer = ""+set.getItem("currentServer")
  3580.     }
  3581.    
  3582.     return info
  3583. }  
  3584.  
  3585. function handleMoveToCell(param, userid) {
  3586.     var user = _server.getUserById(userid)
  3587.     stopPetAttack(user)
  3588.     var room = zone.getRoom(user.getRoom())
  3589.     var mapObj = worldMaps.get(room.getName().split("-")[0])
  3590.     var strFrame = framePadCase(String(param[0]))
  3591.     var strPad = framePadCase(String(param[1]))
  3592.     if(strPad == "None") {
  3593.         strPad = String(mapObj.spawnPad)
  3594.         strPad = String(user.properties.get("strFrame"))
  3595.     }
  3596.     user.properties.put("strFrame", String(strFrame))
  3597.     user.properties.put("strPad", String(strPad))
  3598.     user.properties.put("tx", 0)
  3599.     user.properties.put("ty", 0)
  3600.  
  3601.     stopFights(user, room)
  3602.     savePos(user)
  3603.     var moveToCellSTR = []
  3604.     moveToCellSTR.push("notls")
  3605.     moveToCellSTR.push(String(user.getName()))
  3606.     moveToCellSTR.push("strPad:"+strPad+",tx:0,strFrame:"+strFrame+",ty:0")
  3607.     _server.sendResponse(moveToCellSTR, -1, null, room.getAllUsersButOne(user), "str")
  3608. }
  3609.  
  3610. function filterMessage(str) {
  3611.     var from = "enycee,projectenycee,.com,http://,hamachi,zqw,report"
  3612.     from = from.split(",")
  3613.     for (var i = 0; i < from.length; i++) {
  3614.         str = str.split(from[i]).join("")
  3615.     }
  3616.     return str
  3617. }
  3618.  
  3619. function cleanHTML(str) {
  3620.     //str = str.split("<").join("?")
  3621.     //str = str.split(">").join("?")
  3622.     //str = str.split("#060:").join("?")
  3623.     return str
  3624. }
  3625.  
  3626.  
  3627. function handleMessage(params, user) {
  3628.     var room = zone.getRoom(user.getRoom())
  3629.     sendTo = room.getAllUsersButOne(user)
  3630.     var access = Number(user.properties.get("intAccessLevel"))
  3631.     var type = "zone"
  3632.     if(access == 0) {
  3633.         if(isMember(user))
  3634.         access = 2
  3635.         else
  3636.         access = 1
  3637.     }
  3638.     type = String("chn"+access)
  3639.    
  3640.     if(params[1] == "guild") {
  3641.         type = "guild"
  3642.         sendTo = getGuildUsers(user, false)
  3643.     }
  3644.     if(params[1] == "global") {
  3645.         handleGlobalMessage(params, user)
  3646.         return
  3647.     }      
  3648.    
  3649.     var chat = []
  3650.     chat.push("getCMessage")
  3651.     if(isStaff(user))
  3652.     chat.push(type + "~" + cleanHTML(params[0]))
  3653.     else
  3654.     chat.push(type + "~" + cleanHTML(filterMessage(params[0])))
  3655.     chat.push(user.getName())
  3656.     chat.push(user.getRoom())
  3657.     if(String(cleanHTML(filterMessage(params[0]))) != "")
  3658.     _server.sendResponse(chat, user.getRoom(), null, sendTo, "str")
  3659.    
  3660.     var chat = []
  3661.     chat.push("getCMessage")
  3662.     chat.push(type + "~" + cleanHTML(params[0]))
  3663.     chat.push(user.getName())
  3664.     chat.push(user.getRoom())
  3665.     _server.sendResponse(chat, user.getRoom(), null, [user], "str")
  3666. }
  3667.  
  3668. function handleGlobalMessage(params, user) {
  3669.     if(user.properties.get("inglobal") == 1) {
  3670.         var timenow = new Date()
  3671.         timenow = timenow.getTime()
  3672.         var lastglobal = user.properties.get("lastglobal")
  3673.         if((timenow-lastglobal) < 3000) {
  3674.             _server.sendResponse(["warning", "You can not send another message within 3 seconds since last message."], -1, null, [user], "str")
  3675.         } else {
  3676.             user.properties.put("lastglobal", timenow)
  3677.             var nm = user.getName()
  3678.             if(isAdmin(user)) {
  3679.                 //nm = "[ADMIN] " + nm
  3680.             } else if(isStaff(user)) {
  3681.                 //nm = "[MOD] " + nm
  3682.             }
  3683.             var wat = zone.getUserList().toArray()
  3684.             var chat = []
  3685.             chat.push("getCMessage")
  3686.             chat.push("global~" + params[0])
  3687.             chat.push(String(nm))
  3688.             chat.push(user.getRoom())
  3689.             for each(var userWat in wat) {
  3690.                 if(userWat.properties.get("inglobal") == 1) {
  3691.                     _server.sendResponse(chat, user.getRoom(), null, [userWat], "str")
  3692.                 }
  3693.             }
  3694.         }
  3695.     } else {
  3696.         _server.sendResponse(["warning", "You must join the global channel before sending or receiving messages. Write /joinglobal on chat to join."], -1, null, [user], "str")
  3697.     }
  3698. }
  3699.  
  3700. function handleMove(param, user) {
  3701.     var room = zone.getRoom(user.getRoom())
  3702.     user.properties.put("tx", param[0])
  3703.     user.properties.put("ty", param[1])
  3704.     var uotls = []
  3705.     uotls.push("notls")
  3706.     uotls.push