Advertisement
Guest User

EQW 2009-2014

a guest
Nov 28th, 2018
292
0
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(user.getName())
  3707.     uotls.push("sp:" + param[2] + ",tx:" + param[0] + ",ty:" + param[1] + ",strFrame:" + user.properties.get("strFrame"))
  3708.     savePos(user)
  3709.     if(!modOn(user))
  3710.     _server.sendResponse(uotls, -1, null, room.getAllUsersButOne(user), "str")
  3711. }
  3712.  
  3713. function addPHPMP(user, hp, mp) {
  3714.     var room = zone.getRoom(user.getRoom())
  3715.     //if((user.properties.get("intHP") < user.properties.get("intHPMax") || user.properties.get("intMP") < user.properties.get("intMPMax"))) {
  3716.     var restedhp = hp
  3717.     var visualhp = hp
  3718.     var restedmp = mp
  3719.     var newhp = Number(hp) + Number(user.properties.get("intHP"))
  3720.     var newmp = Number(mp) + Number(user.properties.get("intMP"))
  3721.     if(Integer(newhp) > user.properties.get("intHPMax")) {
  3722.         restedhp = user.properties.get("intHPMax") - user.properties.get("intHP")
  3723.         user.properties.put("intHP", user.properties.get("intHPMax"))
  3724.     } else {
  3725.         user.properties.put("intHP", Integer(newhp))
  3726.     }
  3727.     if(Integer(newmp) > user.properties.get("intMPMax")) {
  3728.         restedmp = user.properties.get("intMPMax") - user.properties.get("intMP")
  3729.         user.properties.put("intMP", user.properties.get("intMPMax"))
  3730.     } else {
  3731.         user.properties.put("intMP", Integer(newmp))
  3732.     }
  3733.    
  3734.     var player = {}
  3735.     player[String(user.getName())] = {"intHP":Integer(user.properties.get("intHP")),"intMP":Integer(user.properties.get("intMP"))}
  3736.     var restresp = {
  3737.         "cmd":"ct",
  3738.         "p":player
  3739.     }
  3740.     if(visualhp != 0) {
  3741.         restresp.sara = [{"actionResult":{"hp":-(visualhp),"cInf":"p:"+user.getUserId(),"tInf":"p:"+user.getUserId(),"typ":"d"},"iRes":1}]
  3742.     }
  3743.     _server.sendResponse(restresp, -1, null, room.getAllUsers(), "json")
  3744.     //}
  3745. }
  3746.  
  3747. function defenseModifier(user, dmg) {
  3748.     var timenow = new Date()
  3749.     timenow = timenow.getTime()
  3750.     var damageModified = Number(dmg)
  3751.    
  3752.     if(Number(Number(timenow) - Number(user.properties.get("s5time"))) <= 10000) {
  3753.         damageModified = damageModified * 0.50
  3754.     }
  3755.     if(Number(Number(timenow) - Number(user.properties.get("s15time"))) <= 6000) {
  3756.         damageModified = 0
  3757.     }
  3758.    
  3759.    
  3760.     damageModified = Math.round(damageModified)
  3761.     return Number(damageModified)
  3762. }
  3763.  
  3764. function attackModifier(user, atype, dmg, skillObj, monObj) {
  3765.     var hitchance = 0
  3766.     var finaldmg = dmg
  3767.     var strl = skillObj.strl
  3768.     var fx = skillObj.fx
  3769.     var hittype = "hit"
  3770.     var critbonus = 0
  3771.     var targetLvl = Number(monObj.iLvl)
  3772.     var myLvl = Number(user.properties.get("intLevel"))
  3773.     var toreturn = []
  3774.    
  3775.    
  3776.     var timenow = new Date()
  3777.     timenow = timenow.getTime()
  3778.    
  3779.     if(Number(user.properties.get("s4")) > 0 && Number(skillObj.sId) == 1) {
  3780.         if(Number(Number(timenow) - Number(user.properties.get("s4time"))) <= 5000) {
  3781.             hittype = "crit"
  3782.             finaldmg = finaldmg * 2
  3783.             user.properties.put("s4", Number(Number(user.properties.get("s4"))-1))
  3784.         }
  3785.     }
  3786.    
  3787.     if(Number(Number(timenow) - Number(user.properties.get("s5time"))) <= 10000) {
  3788.         finaldmg = finaldmg * 0.75
  3789.     }
  3790.    
  3791.    
  3792.    
  3793.     var isInvis = Number(user.properties.get("modOn"))
  3794.     invisibleOver(user)
  3795.     var eqp = user.properties.get("eqp")
  3796.    
  3797.  
  3798.     hitchance = Math.floor(Math.random()*(1+100-1))+1
  3799.     if(hitchance <= Number(getCritChance(user)) || isInvis == 1) {
  3800.         hittype = "crit"
  3801.         finaldmg = finaldmg * 2
  3802.     }
  3803.     hitchance = Math.floor(Math.random()*(1+100-1))+1
  3804.     var hitNeeded = 100-getHitChance(user)
  3805.     if(targetLvl > myLvl) {
  3806.         hitNeeded += 3.5*(targetLvl-myLvl)
  3807.        
  3808.     }
  3809.     //trace("I need: " + hitNeeded)
  3810.     if(hitNeeded > hitchance && skillObj.damage > 0) {
  3811.         hittype = "miss"
  3812.         finaldmg = 0
  3813.     }
  3814.     hitchance = Math.floor(Math.random()*(1+100-1))+1
  3815.     if(hitchance <= 10  && skillObj.damage > 0) {
  3816.         hittype = "dodge"
  3817.         finaldmg = 0
  3818.     }
  3819.    
  3820.    
  3821.    
  3822.     finaldmg = Math.round(finaldmg)
  3823.     toreturn["hittype"] = hittype
  3824.     toreturn["dmg"] = Number(finaldmg)
  3825.     toreturn["fx"] = fx
  3826.     toreturn["strl"] = strl
  3827.     return toreturn
  3828. }
  3829.  
  3830. function sendPvPScore(user, value) {
  3831.     var room = zone.getRoom(user.getRoom())
  3832.     var oldScore = Number(user.properties.get("ffascore"))
  3833.     var newScore = Number(oldScore) + Number(value)
  3834.     if(room.properties.get("pvpwon") == 0) {
  3835.         user.properties.put("ffascore", Number(newScore))
  3836.         refreshFFAScore(room)
  3837.         if(newScore == maxFFAScore) {
  3838.             room.properties.put("ffawon", 1)
  3839.             _server.sendResponse(["server", String(user.getName()) + " has won!"], -1, null, room.getAllUsers(), "str")
  3840.         }
  3841.     }
  3842. }
  3843.  
  3844. function refreshFFAScore(room) {
  3845.     var usersInRoom = room.getUserList()
  3846.     var pvpScore = []
  3847.     for each(var usrPvp in usersInRoom) {
  3848.         var auser = _server.getUserById(usrPvp)
  3849.         pvpScore.push({"maxScore":maxFFAScore, "pn":String(auser.getName()),"v":Integer(auser.properties.get("ffascore")),"r":0,"m":0,"k":0})
  3850.     }
  3851.     var toRoom = {"cmd":"PVPS", "pvpScore":pvpScore}
  3852.     _server.sendResponse(toRoom, -1, null, room.getAllUsers(), "json")
  3853. }
  3854.  
  3855. function removeAura(params) {
  3856.     var room = params.room
  3857.     var auraGone = {"cmd":"aura-","auras":[{"nam":String(params.name)}], "tInf":String(params.mname)}
  3858.     _server.sendResponse(auraGone, -1, null, room.getAllUsers(), "json")
  3859. }
  3860.  
  3861. function invisibleOver(user) {
  3862.     var isInvis = Number(user.properties.get("modOn"))
  3863.     if(isInvis == 1) {
  3864.         user.properties.put("modOn", 0)
  3865.         sendUotls(user, true, true, true, true)
  3866.         _server.sendResponse(["warning", "You are visible!"], -1, null, [user], "str")
  3867.     }
  3868. }
  3869.  
  3870. function message(dt1, dt2){
  3871.     if(dt1 == "warning"){
  3872.         _server.sendResponse(["warning", "" + dt2 + ""], -1, null, [user], "str");
  3873.     } else if(dt1 == "server"){
  3874.         _server.sendResponse(["server", "" + dt2 + ""], -1, null, [user], "str");
  3875.     }
  3876. }
  3877.  
  3878. function stopPetAttack(user) {
  3879.     user.properties.put("petTarget", 0)
  3880.     user.properties.put("petActive", 0)
  3881. }
  3882.  
  3883. function activatePetAttack(user, monId) {
  3884.     var hp = Number(user.properties.get("intHP"))
  3885.     var state = Number(user.properties.get("intState"))
  3886.     if(hp < 1 || state == 0)
  3887.     return
  3888.     var petActive = (Number(user.properties.get("petActive")) == 1) ? true : false
  3889.     var eqp = user.properties.get("eqp")
  3890.     var hasPet = (eqp.get("pe")) ? true : false
  3891.     if(hasPet)
  3892.     user.properties.put("petTarget", monId)
  3893.     if(hasPet && !petActive) {
  3894.         user.properties.put("petActive", 1)
  3895.         //setTimeout(this, doPetAttack, 750, user)
  3896.         scheduler.addScheduledTask(new _scheduler.Task({name:"PetAttack", user:user}), 0.75, false, taskHandler)
  3897.         //setInterval("doPetAttack", 750, user)
  3898.     }
  3899. }
  3900.  
  3901. function doPetAttack(user) {
  3902.     if(!user)
  3903.     return
  3904.     var hp = Number(user.properties.get("intHP"))
  3905.     var state = Number(user.properties.get("intState"))
  3906.     if(hp < 1 || state == 0)
  3907.     return
  3908.     var petActive = (Number(user.properties.get("petActive")) == 1) ? true : false
  3909.     if(!petActive)
  3910.     return
  3911.     var eqp = user.properties.get("eqp")
  3912.     var petId = (eqp.get("pe"))
  3913.     var petObj = worldItems.get(Number(petId))
  3914.     var room = zone.getRoom(user.getRoom())
  3915.     var targetid = user.properties.get("petTarget")
  3916.     var dmg1 = Number(petObj.minDmg)
  3917.     var dmg2 = Number(petObj.maxDmg)
  3918.    
  3919.     var getAppliedAura = Number(petObj.applyAura)
  3920.    
  3921.     var dmg = Integer(Math.floor(Number(Math.random()*(dmg2-dmg1)))+Number(dmg1))
  3922.     var userid = user.getUserId()
  3923.     var anim = "PetAttack"
  3924.     var theTarget = room.properties.get(String("m"+(targetid)))
  3925.     var jsonA = []
  3926.     var attacksArray = String(petObj.attacks).split(";")
  3927.     var randAttack = Number(Math.floor(Math.random() * Number(attacksArray.length)))
  3928.     var attackArray = String(attacksArray[randAttack]).split(",")
  3929.     for(var i = 0; i < attackArray.length; i++) {
  3930.         var nam = String(attackArray[i]).split(":")[0]
  3931.         var val = String(attackArray[i]).split(":")[1]
  3932.         if(nam == "d") {
  3933.             dmg = Math.round(Number(dmg) * Number(val))
  3934.         } else if(nam == "a") {
  3935.             var auraObj = worldAuras.get(Integer(val))
  3936.             jsonA = [{"cInf":String("p:"+user.getUserId()),"cmd":"aura++","auras":[{"nam":String(auraObj.name),"t":"s","dur":String(auraObj.seconds),"cat":String(auraObj.cat),"isNew":true}],"tInf":String("m:"+targetid)}]
  3937.             activateAura(user, Number(val), dmg, theTarget, targetid, "m")
  3938.         } else if(nam == "an") {
  3939.             anim = String("Pet:Pet"+val)
  3940.         }
  3941.     }          
  3942.    
  3943.    
  3944.     if(theTarget) {
  3945.         if(theTarget.intHP > 0 && theTarget.intState != 0) {
  3946.             theTarget.intHP -= dmg
  3947.             if(Number(theTarget.intHP) > Number(theTarget.intHPMax))
  3948.             theTarget.intHP == theTarget.intHPMax
  3949.            
  3950.             if(!(theTarget.targets.contains(String(userid)))) {
  3951.                 theTarget.targets.add(String(userid))
  3952.                 if(theTarget.targets.size() == 1) {
  3953.                     var params2 = {}
  3954.                     params2.monObj = theTarget
  3955.                     params2.mapMon = targetid
  3956.                     params2.mapName = room.getName()
  3957.                     //setTimeout(this, getMonsterActionResult, 50, params2)
  3958.                     scheduler.addScheduledTask(new _scheduler.Task({name:"MonAttack", monObj:theTarget, mapMon:targetid, mapName:String(room.getName())}), 0.1, false, taskHandler)
  3959.                 }
  3960.             }
  3961.             if(theTarget.intHP <= 0 && theTarget.intState != 0) {
  3962.                 //theTarget.intState = 0
  3963.                 user.properties.put("intState", 1)
  3964.                 stopPetAttack(user)
  3965.                 var params2 = {}
  3966.                 params2.target = theTarget
  3967.                 params2.room = room
  3968.                 params2.targetid = targetid
  3969.                 params2.drops = String(worldMonsters.get(Integer(theTarget.MonID)).strDrops)
  3970.                 //trace("line 3623: " + targetid)
  3971.                 monsterDie(params2)
  3972.             } else {
  3973.                 user.properties.put("intState", 2)
  3974.                 theTarget.intState = 2
  3975.                 //setTimeout(this, doPetAttack, 2800, user)
  3976.                 scheduler.addScheduledTask(new _scheduler.Task({name:"PetAttack", user:user}), 2.8, false, taskHandler)
  3977.             }
  3978.  
  3979.            
  3980.             var fx = ""
  3981.             var jsonM = {}
  3982.             jsonM[String(targetid)] = {"intMP":Integer(theTarget.intMP),"intState":Integer(theTarget.intState),"intHP":Integer(theTarget.intHP)}
  3983.             var jsonP = {}
  3984.             jsonP[String(user.getUserId())] = {"intState":Integer(user.properties.get("intState"))}
  3985.             var jsonSarsa = []
  3986.             jsonSarsa.push({"hp":dmg,"tInf":String("m:"+targetid),"type":String("hit")})
  3987.             var attackJSON = {}
  3988.             attackJSON.cmd = "ct"
  3989.             attackJSON.anims = [{"strFrame":String(user.properties.get("strFrame")),"cInf":"p:"+user.getUserId(),"fx":String(fx),"animStr":String(anim),"tInf":String("m:"+targetid)}]
  3990.             attackJSON.sarsa = [{"cInf":"p:"+user.getUserId(),"a":jsonSarsa,"actID":Integer(1),"iRes":1}]
  3991.             attackJSON.m = jsonM   
  3992.             attackJSON.p = jsonP
  3993.             attackJSON.a = jsonA
  3994.             _server.sendResponse(attackJSON, -1, null, room.getAllUsers(), "json")
  3995.         } else {
  3996.             stopPetAttack(user)
  3997.         }
  3998.     } else {
  3999.         stopPetAttack(user)
  4000.     }
  4001. }
  4002.  
  4003. function activateAura(user, auraId, aDamage, theTarget, targetId, targetType) {
  4004.     var room = zone.getRoom(user.getRoom())
  4005.     var auraObj = worldAuras.get(Integer(auraId))
  4006.     if(auraObj == null)
  4007.     return
  4008.     var auraName = auraObj.name
  4009.     var auraCat = auraObj.cat
  4010.     var usetype = auraObj.usetype
  4011.     var dur = auraObj.seconds
  4012.     var per = auraObj.per
  4013.    
  4014.     if(usetype == "overtime") {
  4015.         var aurActivate = {}
  4016.         //aurActivate.dmg = Number(aDamage / (dur/per))*Number(auraObj.damage);
  4017.         aurActivate.dmg = Number(aDamage / (dur/2)) * Number (auraObj.damage);
  4018.         aurActivate.dur = dur
  4019.         aurActivate.per = 1.5
  4020.         aurActivate.typ = auraObj.typ
  4021.         aurActivate.target = theTarget
  4022.         aurActivate.room = room
  4023.         aurActivate.targetid = targetId
  4024.         //if(targetType == "p")
  4025.         //setTimeout(this, DoTP, (per*1000), aurActivate)
  4026.         //if(targetType == "m")
  4027.         //setTimeout(this, DoTM, (per*1000), aurActivate)
  4028.         scheduler.addScheduledTask(new _scheduler.Task({name:"doAura", targetType:String(targetType), params:aurActivate}), /*Number(per)*/ 1.5, false, taskHandler)
  4029.     }
  4030.     var auraParams = {}
  4031.     auraParams.name = String(auraName)
  4032.     auraParams.mname = String(String(targetType)+":"+targetId)
  4033.     auraParams.room = room
  4034.     //setTimeout(this, removeAura, Number(dur)*1000, auraParams)
  4035.     scheduler.addScheduledTask(new _scheduler.Task({name:"removeAura", params:auraParams}), Number(dur), false, taskHandler)
  4036. }
  4037.  
  4038.  
  4039. function attackHandler(userid, params, multi) {
  4040.     var user = _server.getUserById(userid)
  4041.     var room = zone.getRoom(user.getRoom())
  4042.     if(Integer(user.properties.get("intHP")) <= 0)
  4043.     return
  4044.     var hittype
  4045.     var skillid
  4046.     var actID = params[0]
  4047.     var tToAttack = []
  4048.     var targetstoattack = []
  4049.     var target = []
  4050.     var targetstoattackanim = ""
  4051.     var jsonSarsaA = []
  4052.     var jsonM = {}
  4053.     var jsonA = []
  4054.     var jsonP = {}
  4055.     var ontargetsarsa = []
  4056.     var atype = String(params[1]).split(">")[0]
  4057.     var ttype = String(params[1]).split(">")[1].split(":")[0]
  4058.    
  4059.     var classObj = worldClasses.get(Integer(user.properties.get("intClassId")))
  4060.    
  4061.     switch(atype) {
  4062.     case "aa":     
  4063.         skillid = 0
  4064.         break
  4065.     case "a1":     
  4066.         skillid = 1
  4067.         break
  4068.     case "a2":     
  4069.         skillid = 2
  4070.         break
  4071.     case "a3":     
  4072.         skillid = 3
  4073.         break
  4074.     case "a4":     
  4075.         skillid = 4
  4076.         break
  4077.     case "a5":
  4078.         skillid = 5
  4079.         break
  4080.     default:
  4081.         skillid = -1
  4082.         break
  4083.     }          
  4084.     if(skillid == -1)
  4085.     return
  4086.    
  4087.     var skillObj = worldSkills.get(Integer(classObj.skills[skillid]))
  4088.     var anim = skillObj.anim
  4089.     var fx = skillObj.fx
  4090.     var strl = skillObj.strl
  4091.     var projspd = skillObj.projspd
  4092.     var mana = skillObj.mana
  4093.     var dmgamp = skillObj.damage
  4094.     var cooldown = skillObj.cd
  4095.     var imulti = skillObj.multi
  4096.     var imultitime = skillObj.multitime
  4097.    
  4098.     var cdcheckpass = true
  4099.     var timenow = new Date()
  4100.     timenow = timenow.getTime()
  4101.     var lastattack = user.properties.get("last"+atype)
  4102.     if(!multi){
  4103.         if(((timenow-lastattack) < Integer(cooldown-300)))
  4104.         cdcheckpass = false
  4105.         else
  4106.         user.properties.put(String("last"+atype), timenow)
  4107.     }
  4108.  
  4109.     if(Number(user.properties.get("intMP")) >= Integer(mana) && cdcheckpass) {
  4110.        
  4111.         if (params[1].indexOf(",") != -1)
  4112.         tToAttack = params[1].split(",")
  4113.         else
  4114.         tToAttack[0] = params[1]
  4115.        
  4116.        
  4117.         for (var i = 0; i < tToAttack.length; i++) {
  4118.             var targetid = String(String(tToAttack[i]).split(">")[1]).split(":")[1]
  4119.             var eqp = user.properties.get("eqp")
  4120.             var itemObj = worldItems.get(eqp.get("Weapon"))
  4121.            
  4122.             if(skillid == 0){
  4123.                 if(itemObj) {
  4124.                     if(itemObj.sType == "Dagger") {
  4125.                         anim = "DuelWield/DaggerAttack1,DuelWield/DaggerAttack2,FlipAttack,KickAttack"
  4126.                     }
  4127.                     if(itemObj.sType == "Bow") {
  4128.                         anim = "RangedAttack1"
  4129.                         strl = "sp_ed4"
  4130.                         fx = "p"
  4131.                         projspd = 65
  4132.                     }
  4133.                 } else {
  4134.                     anim = "UnarmedAttack1,UnarmedAttack2,KickAttack"
  4135.                 }
  4136.             }
  4137.             var dmgmin = Number(getDamagePower(user, "min"))
  4138.             var dmgmax = Number(getDamagePower(user, "max"))
  4139.             if(String(skillObj.damagetyp) == "m") {
  4140.                 dmgmin = Number(getSpellPower(user))
  4141.                 dmgmax = Number(getSpellPower(user))
  4142.             }
  4143.             var finaldmg = Integer(Math.floor(Math.random()*(1+dmgmax-dmgmin))+dmgmin)
  4144.             var finaldmg = Math.round(Integer(finaldmg) * Number(dmgamp))
  4145.             var hittype = "hit"
  4146.             var aura = skillObj.aura
  4147.            
  4148.             var theTarget
  4149.             if(ttype == "m")
  4150.             theTarget = room.properties.get(String("m"+(targetid)))
  4151.             else if(ttype == "p")
  4152.             theTarget = _server.getUserById(Number(targetid))  
  4153.            
  4154.             var targetFrame = ""
  4155.             if(theTarget)
  4156.             targetFrame = (ttype == "m") ? (theTarget.strFrame) : (theTarget.properties.get("strFrame"))                   
  4157.             if(theTarget && String(user.properties.get("strFrame")) == String(targetFrame)) {
  4158.                
  4159.                 var targetHP = (ttype == "m") ? (Integer(theTarget.intHP)) : (Integer(theTarget.properties.get("intHP")))
  4160.                 var targetHPMax = (ttype == "m") ? (Integer(theTarget.intHPMax)) : (Integer(theTarget.properties.get("intHPMax")))
  4161.                 var targetMP = (ttype == "m") ? (Integer(theTarget.intMP)) : (Integer(theTarget.properties.get("intMP")))
  4162.                 var targetState = (ttype == "m") ? (Integer(theTarget.intState)) : (Integer(theTarget.properties.get("intState")))
  4163.                 var targetHPNew = targetHP
  4164.                 var targetMPNew = targetMP
  4165.                 if(targetHP > 0 && targetState != 0) {
  4166.                     if(skillObj.sId == 4) {
  4167.                         user.properties.put("s4", 11)
  4168.                         user.properties.put("s4time", timenow)
  4169.                     }
  4170.                     if(skillObj.sId == 5) {
  4171.                         user.properties.put("s5time", timenow)
  4172.                     }
  4173.                     if(skillObj.sId == 3) {
  4174.                         theTarget.stunTime = timenow
  4175.                         stunResult = {
  4176.                     "cmd":"stunResult"
  4177.                         }
  4178.                         _server.sendResponse(stunResult, -1, null, room.getAllUsers(), "json")
  4179.                     }
  4180.                     if(skillObj.sId == 15) {
  4181.                         theTarget.blindTime = timenow
  4182.                     }
  4183.                     if(skillObj.sId == 16) {
  4184.                         if(Number(Number(timenow) - Number(theTarget.blindTime)) < 6000) {
  4185.                             theTarget.stunTime = timenow
  4186.                         } else {
  4187.                             aura = 0
  4188.                             mana -= 20
  4189.                         }
  4190.                     }
  4191.                    
  4192.                     if(skillObj.sId == 21) {
  4193.                         if(i > 0)
  4194.                         finaldmg = finaldmg / 2
  4195.                     }
  4196.                    
  4197.                     if(skillObj.sId == 7) {
  4198.                         finaldmg += Number(Number(user.properties.get("intHP"))/10)
  4199.                     }
  4200.                    
  4201.                     if(skillObj.sId == 22) {
  4202.                         user.properties.put("s22", timenow)
  4203.                     }
  4204.                    
  4205.                     if(skillObj.sId == 20) {
  4206.                         theTarget.frozenBloodTime = timenow
  4207.                     }
  4208.                    
  4209.                     if(skillObj.sId == 24) {
  4210.                         if(Number(Number(timenow) - Number(theTarget.frozenBloodTime)) < 10000) {
  4211.                             theTarget.freezeTime = timenow
  4212.                         } else {
  4213.                             aura = 0
  4214.                         }
  4215.                     }
  4216.                    
  4217.                     if(skillObj.sId == 14){
  4218.                         /*var randomRolled = Math.round(Math.random()*100)
  4219.                         if(randomRolled >= 50){
  4220.                             //theTarget.stunTime = timenow
  4221.                             finaldmg+= finaldmg * 3;
  4222.                             _server.sendResponse(["server", "ROLLED " + randomRolled], -1, null, [user], "str")
  4223.                         } else if(randomRolled < 50){
  4224.                             _server.sendResponse(["warning", "ROLLED " + randomRolled], -1, null, [user], "str")
  4225.                             finaldmg-= finaldmg * 2
  4226.                         }*/
  4227.                        
  4228.                         //sendRandomSkillUse("r1", user, room);
  4229.                        
  4230.                         //activateAura(user, 15, 1.0, user, user.getUserId(), "p")
  4231.                        
  4232.                         //var auraAdd = {"cInf":"p:"+user.getUserId(),"cmd":"aura++","auras":[{"val":3,"nam":"Radiance","t":"s","dur":"16", "cat":"overtime","isNew":true}],"tInf":"p:"+user.getUserId()}
  4233.                         //_server.sendResponse(auraAdd, -1, null, room.getAllUsers(), "json")
  4234.                     }
  4235.                    
  4236.                     if(skillid == 0) {
  4237.                         if(getManaType(user) == 2) {
  4238.                             mana -= 14
  4239.                         } else if(getManaType(user) == 0){
  4240.                             mana -= 5
  4241.                         }
  4242.                     }
  4243.                    
  4244.  
  4245.                     if(skillObj.sId == 17) {
  4246.                         //user.properties.put("modOn", 1)
  4247.                         //exitUser(room, user)
  4248.                         //_server.sendResponse(["server", "You are now invisible."], -1, null, [user], "str")                       //setTimeout(this, invisibleOver, (5000), user)
  4249.                         //message("warning", "test");
  4250.                         //hp -= 100;
  4251.                         if(doTestStacks1 >= 3){
  4252.                             _server.sendResponse(["server", "STACK WORKS! STACKS " + doTestStacks1], -1, null, [user], "str")
  4253.                             doTestStacks1 = 0;
  4254.                         } else {
  4255.                             _server.sendResponse(["warning", "NOT ENOUGH STACKS! STACKS " + doTestStacks1], -1, null, [user], "str")
  4256.                         }
  4257.                     }
  4258.                    
  4259.                     if(aura > 0) {
  4260.                         if(skillObj.auratgtMax >= (i+1)) {
  4261.                             activateAura(user, aura, finaldmg, theTarget, targetid, ttype)
  4262.                             var auraObj = worldAuras.get(Integer(aura))
  4263.                             if(auraObj != null)
  4264.                             //jsonA = [{"cInf":String("p:"+user.getUserId()),"cmd":"aura++","auras":[{"nam":String(auraObj.name),"t":"s","dur":String(auraObj.seconds),"cat":String(auraObj.cat),"isNew":true}],"tInf":String(ttype+":"+targetid)}]
  4265.                             jsonA.push({
  4266.                                 "cInf":String("p:"+user.getUserId()),
  4267.                                 "cmd":"aura++",
  4268.                                 "auras":[{
  4269.                                     "nam":String(auraObj.name),
  4270.                                     "t":"s",
  4271.                                     "dur":String(auraObj.seconds),
  4272.                                     "cat":String(auraObj.cat),
  4273.                                     "isNew":true
  4274.                                 }],
  4275.                                 "tInf":String(ttype+":"+targetid)
  4276.                             })
  4277.                         }
  4278.                     }  
  4279.                    
  4280.                     //FIRST ATTACK
  4281.                     if(i == 0) {
  4282.                         user.properties.put("intMP", (Integer(user.properties.get("intMP")-mana)))
  4283.                         if(Number(user.properties.get("intMP")) < 0)
  4284.                             user.properties.put("intMP", 0)
  4285.                         if(Number(user.properties.get("intMP")) > Number(user.properties.get("intMPMax")))
  4286.                             user.properties.put("intMP", Number(user.properties.get("intMPMax")))
  4287.                     }//END FIRST ATTACK
  4288.                    
  4289.                     if(Integer(finaldmg) > 0) {
  4290.                         var modifier = attackModifier(user, atype, finaldmg, skillObj, theTarget)
  4291.                         hittype = modifier["hittype"]
  4292.                         finaldmg = Number(modifier["dmg"])
  4293.                         //fx = modifier["fx"]
  4294.                         //strl = modifier["strl"]
  4295.                         user.properties.put("intState", 2)
  4296.                     }
  4297.                     (ttype == "m") ? (theTarget.intHP -= finaldmg) : (theTarget.properties.put("intHP", Integer(theTarget.properties.get("intHP")-finaldmg)))
  4298.                     //_server.sendResponse(["server", String(user.getName()) + ": " + String(finaldmg)], -1, null, room.getAllUsers(), "str")
  4299.                     targetHPNew = (ttype == "m") ? (theTarget.intHP) : (theTarget.properties.get("intHP"))
  4300.                     targetMPNew = (ttype == "m") ? (theTarget.intMP) : (theTarget.properties.get("intMP"))
  4301.                     if(Number(targetHPNew) > Number(targetHPMax)) {
  4302.                         (ttype == "m") ? (theTarget.intHP == theTarget.intHPMax) : (theTarget.properties.put("intHP", theTarget.properties.get("intHPMax")))
  4303.                     }
  4304.                    
  4305.                     if(ttype == "m") {
  4306.                         if(theTarget.intState != 0) {
  4307.                             if(!(theTarget.targets.contains(String(userid)))) {
  4308.                                 theTarget.targets.add(String(userid))
  4309.                                 if(theTarget.targets.size() == 1) {
  4310.                                     var params2 = {}
  4311.                                     params2.monObj = theTarget
  4312.                                     params2.mapMon = targetid
  4313.                                     params2.mapName = room.getName()
  4314.                                     //setTimeout(this, getMonsterActionResult, 500, params2)
  4315.                                     scheduler.addScheduledTask(new _scheduler.Task({name:"MonAttack", monObj:theTarget, mapMon:targetid, mapName:String(room.getName())}), 0.5, false, taskHandler)                                
  4316.                                 }
  4317.                             }
  4318.                             if(targetHPNew <= 0) {
  4319.                                 //theTarget.intState = 0
  4320.                                 var params2 = {}
  4321.                                 params2.target = theTarget
  4322.                                 params2.room = room
  4323.                                 params2.targetid = targetid
  4324.                                 params2.drops = String(worldMonsters.get(Integer(theTarget.MonID)).strDrops)
  4325.                                 //trace("line 3903: " + targetid)
  4326.                                 monsterDie(params2)
  4327.                                 user.properties.put("intState", 1)
  4328.                             } else {
  4329.                                 theTarget.intState = 2
  4330.                             }
  4331.                         }
  4332.  
  4333.                         jsonM[String(targetid)] = {"intMP":Integer(targetMPNew),"intState":Integer(theTarget.intState),"intHP":Integer(targetHPNew)}
  4334.                     } else if(ttype == "p") {
  4335.                         if(theTarget.properties.get("intHP") <= 0) {
  4336.                             theTarget.properties.put("intState", 0)
  4337.                             user.properties.put("intState", 1)
  4338.                             var mapname = String(room.getName())
  4339.                             var mapObj = worldMaps.get(mapname.split("-")[0])
  4340.                             if(mapObj.sExtra == "bPvP")
  4341.                             sendPvPScore(user, 1)
  4342.                         } else {
  4343.                             if(finaldmg > 0) {
  4344.                                 theTarget.properties.put("intState", 2)
  4345.                                 user.properties.put("intState", 2)
  4346.                             }
  4347.                         }
  4348.                         jsonP[String(theTarget.getName())] = {"intMP":Integer(theTarget.properties.get("intMP")),"intState":Integer(theTarget.properties.get("intState")),"intHP":Integer(theTarget.properties.get("intHP"))}
  4349.                     }
  4350.                     targetstoattackanim += String(ttype) + ":" + String(targetid) + ","
  4351.                     if(skillObj.damage != 0)
  4352.                     jsonSarsaA.push({"hp":finaldmg,"tInf":String(ttype)+":"+String(targetid),"type":String(hittype)})
  4353.                 }
  4354.                
  4355.                
  4356.                 if(ttype == "m" && theTarget.intHP > 0)
  4357.                 activatePetAttack(user, targetid)
  4358.                 var domulti = 1
  4359.                 if(Number(imulti) > 0 && !multi) {
  4360.                     while(domulti <= imulti) {
  4361.                         //setTimeout(this, attackHandler, (Number(imultitime)*domulti), user.getUserId(), params, true)
  4362.                         domulti++
  4363.                     }
  4364.                 }
  4365.             }
  4366.         }
  4367.         var attackJSON = {}
  4368.         attackJSON.cmd = "ct"
  4369.         attackJSON.anims = [{"strFrame":String(user.properties.get("strFrame")),"cInf":"p:"+userid,"fx":String(fx),"animStr":String(anim),"tInf":String(targetstoattackanim),"strl":String(strl), "sp": Number(projspd)}]
  4370.         attackJSON.sarsa = [{"cInf":"p:"+userid,"a":jsonSarsaA,"actID":Integer(actID),"iRes":1}]
  4371.         attackJSON.m = jsonM
  4372.         attackJSON.p = jsonP
  4373.         attackJSON.a = jsonA
  4374.  
  4375.         sendUotls(user, true, true, false, false)
  4376.         _server.sendResponse(attackJSON, -1, null, room.getAllUsers(), "json")
  4377.  
  4378.        
  4379.     }
  4380. }
  4381.  
  4382. function DoTM(params) {
  4383.     var theTarget = params.target
  4384.     var room = params.room
  4385.     var targetid = params.targetid
  4386.     var dmg = Number(Math.round(params.dmg))
  4387.     var dType = String(params.typ)
  4388.     if(dmg <= 0)
  4389.     return
  4390.     if(theTarget && theTarget != null) {
  4391.         if(Number(theTarget.intHP) <= 0 || theTarget.intState == 0)
  4392.         return
  4393.         theTarget.intHP -= Number(dmg)
  4394.         params.dur -= params.per
  4395.         if(Integer(params.dur) > 0) {
  4396.             //setTimeout(this, DoTM, (params.per*1000), params)
  4397.             scheduler.addScheduledTask(new _scheduler.Task({name:"doAura", targetType:"m", params:params}), Number(params.per), false, taskHandler)
  4398.         }
  4399.        
  4400.         var mon = {}
  4401.         mon[String(targetid)] = {"intHP":Integer(theTarget.intHP)}
  4402.         var restresp = {
  4403.             "cmd":"ct",
  4404.             "sara": [{"actionResult":{"hp":(dmg),"cInf":"m:"+targetid,"tInf":"m:"+targetid,"typ":"d","dotTyp":String(dType)},"iRes":1}],
  4405.             "m": mon
  4406.         }
  4407.         _server.sendResponse(restresp, -1, null, room.getAllUsers(), "json")
  4408.  
  4409.         if(theTarget.intHP <= 0 && theTarget.intState != 0) {
  4410.             //theTarget.intState = 0
  4411.             var params2 = {}
  4412.             params2.target = theTarget
  4413.             params2.room = room
  4414.             params2.targetid = targetid
  4415.             params2.drops = String(worldMonsters.get(Integer(theTarget.MonID)).strDrops)
  4416.             //trace("line 4004: " + targetid)
  4417.             monsterDie(params2)
  4418.         } else {
  4419.             if(theTarget.targets.size() == 0) {
  4420.                 var rsparams = {}
  4421.                 rsparams.targetid = targetid
  4422.                 rsparams.targetmap = theTarget.MonMap
  4423.                 respawnMonster(rsparams)
  4424.             }
  4425.         }
  4426.     }
  4427. }
  4428.  
  4429. function DoTP(params) {
  4430.     var user = params.target
  4431.     if(user && user != null) {
  4432.         if(Number(user.properties.get("intHP")) <= 0)
  4433.         return
  4434.         var room = zone.getRoom(user.getRoom())
  4435.         if(Integer(params.dur) > 0) {
  4436.             var dmg = Integer(params.dmg)
  4437.             if(user.properties.get("intState") == 0)
  4438.             return
  4439.             user.properties.put("intHP", Number(Number(user.properties.get("intHP"))-Number(dmg)))
  4440.             if(Number(user.properties.get("intHP")) > Number(user.properties.get("intHPMax")))
  4441.             user.properties.put("intHP", Number(user.properties.get("intHPMax")))
  4442.             if(Number(user.properties.get("intHP")) <= 0)
  4443.             user.properties.put("intState", 0)
  4444.             params.dur -= params.per
  4445.             if(Integer(params.dur) > 0)
  4446.             //setTimeout(this, DoTP, (params.per*1000), params)
  4447.             scheduler.addScheduledTask(new _scheduler.Task({name:"doAura", targetType:"p", params:params}), Number(params.per), false, taskHandler)
  4448.             var p = {}
  4449.             p[String(user.getName())] = {"intHP":Integer(user.properties.get("intHP")), "intState":Integer(user.properties.get("intState"))}
  4450.             var damageOverTime = {
  4451.                 "cmd":"ct",
  4452.                 "sara": [{"actionResult":{"hp":(dmg),"tInf":"p:"+user.getUserId(),"typ":"d","dotTyp":String(params.typ)},"iRes":1}],
  4453.                 "p": p
  4454.             }
  4455.             _server.sendResponse(damageOverTime, -1, null, room.getAllUsers(), "json")
  4456.         }
  4457.     }
  4458. }
  4459.  
  4460. function sendGlobalUpdate(msg) {
  4461.     var wat = {"cmd": "umsg", "isBad":"1", "s": String(msg)}
  4462.     var to = zone.getUserList().toArray()
  4463.     _server.sendResponse(wat, -1, null, to, "json")
  4464.  
  4465. }
  4466.  
  4467. function sendpromoMsg(user, leMessage) {
  4468.     var errormsg = leMessage;
  4469.     _server.sendResponse({"cmd": "showError", "msg": String(errormsg)}, -1, null, [user], "json")
  4470.     //var msg = "EQW is back! Tell your friends and share the server. If you find any bugs please talk to any online staff member!"
  4471.     //_server.sendResponse(["guild", msg], -1, null, zone.getUserList().toArray(), "str")
  4472.     //sendGlobalUpdate(msg)
  4473. }
  4474. function randomAC() {
  4475.     var prize = 50
  4476.     var usersarray = []
  4477.     var totalusers = 0
  4478.     var users = zone.getUserList().toArray()
  4479.     for each(var user in users) {
  4480.         if(!isStaff(user)) {
  4481.             totalusers += 1
  4482.             usersarray.push(user)
  4483.         }
  4484.     }
  4485.     var maxusers = zone.getUserCount()
  4486.     if(maxusers > 0) {
  4487.         var randomusernumber = Math.floor(Math.random()*Integer(totalusers))
  4488.         userwinner = usersarray[randomusernumber]
  4489.         if(userwinner) {
  4490.             var room = zone.getRoom(user.getRoom())
  4491.             var add = {}
  4492.             add.ac = Integer(prize)
  4493.             addRewards(userwinner, add, false)
  4494.             var wat = {"cmd": "umsg", "isBad":"1", "s": "User \"" + userwinner.getName() + "\" has won " + prize + " ACs."}
  4495.             var to = zone.getUserList().toArray()
  4496.             _server.sendResponse(wat, -1, null, to, "json")
  4497.             _server.sendResponse(["server", "User \"" + userwinner.getName() + "\" has won " + prize + " ACs."], -1, null, to, "str")      
  4498.         }
  4499.     }
  4500. }
  4501.  
  4502.  
  4503. function getMonsterActionResult(params) {
  4504.     var userid
  4505.     var user = null
  4506.     var atype = "hit"
  4507.     var strl = ""
  4508.     var anim = ""
  4509.     var monObj = params.monObj
  4510.     var monid = monObj.MonMapID
  4511.     var mapName = params.mapName
  4512.     var room = zone.getRoomByName(String(mapName))
  4513.     var mod = 1
  4514.  
  4515.     if(monObj.intHP > 0 && monObj.intState != 0) {
  4516.         var timenow = new Date()
  4517.         timenow = timenow.getTime()
  4518.         if(Number(Number(timenow) - Number(monObj.stunTime)) < 3000) {
  4519.             //setTimeout(this, getMonsterActionResult, 500, params)
  4520.             scheduler.addScheduledTask(new _scheduler.Task({name:"MonAttack", monObj:monObj, mapMon:params.mapMon, mapName:String(room.getName())}), 0.5, false, taskHandler)  
  4521.             return
  4522.         }
  4523.         if(Number(Number(timenow) - Number(monObj.freezeTime)) < 5000) {
  4524.             //setTimeout(this, getMonsterActionResult, 500, params)
  4525.             scheduler.addScheduledTask(new _scheduler.Task({name:"MonAttack", monObj:monObj, mapMon:params.mapMon, mapName:String(room.getName())}), 0.5, false, taskHandler)  
  4526.             return
  4527.         }
  4528.        
  4529.         if(Number(Number(timenow) - Number(monObj.blindTime)) < 6000) {
  4530.             mod = 0.01
  4531.         }
  4532.        
  4533.        
  4534.         while(user == null) {
  4535.             if(monObj.targets.size() > 0) {
  4536.                 var targetindexpos = Number(Math.floor((Math.random()*(monObj.targets.size()))))
  4537.                 if(monObj.targets.get(Number(targetindexpos))) {
  4538.                     //trace("targets:" + monObj.targets + " size: " + monObj.targets.size() + " index: " + targetindexpos)
  4539.                     userid = monObj.targets.get(Number(targetindexpos))
  4540.                     user = _server.getUserById(Number(userid))
  4541.                     if(user != null) {
  4542.                         var userRoom = zone.getRoom(user.getRoom())
  4543.                         if(String(user.properties.get("strFrame")) != String(monObj.strFrame))
  4544.                             user = null
  4545.                         else if(String(userRoom.getName()) != String(room.getName()))
  4546.                         user = null
  4547.                             else if(Number(user.properties.get("intHP")) <= 0)
  4548.                         user = null
  4549.                     }
  4550.                     if(user == null) {
  4551.                         monObj.targets.remove(String(userid))
  4552.                         monObj.targets.trimToSize()
  4553.                     }
  4554.                 }
  4555.             } else {
  4556.                 var rsparams = {}
  4557.                 rsparams.targetid = params.mapMon
  4558.                 rsparams.targetmap = monObj.MonMap
  4559.                 //trace("respawning mom: " + monObj.MonMap)
  4560.                 respawnMonster(rsparams)
  4561.                 return
  4562.             }
  4563.         }
  4564.        
  4565.        
  4566.        
  4567.         var targetid = params.mapMon
  4568.         var ttype = "m"
  4569.        
  4570.         if(user && room && userRoom && String(user.properties.get("strFrame")) == String(monObj.strFrame)) {
  4571.             if(user.properties.get("intHP") > 0 && monObj.intState != 0 && userRoom.getName() == room.getName()) {
  4572.                 var dmg1 = Integer(monObj.minDmg)
  4573.                 var dmg2 = Integer(monObj.maxDmg)
  4574.                 var dmg = Integer(Math.floor(Number(Math.random()*(dmg2-dmg1)))+Number(dmg1))
  4575.                 dmg = Number(defenseModifier(user, dmg))
  4576.                 dmg = Number(Number(dmg) * Number(mod))
  4577.                 var newhp = Number(user.properties.get("intHP"))
  4578.                 var newmp = Number(user.properties.get("intMP"))
  4579.                 var hpmax = Number(user.properties.get("intHPMax"))
  4580.                 var mpmax = Number(user.properties.get("intMPMax"))
  4581.                 var attDelay = 0
  4582.                 var aObj = []
  4583.                 if(getManaType(user) == 2) {
  4584.                     newmp += 10
  4585.                 } else if(getManaType(user) == 1) {
  4586.                     newmp += 7
  4587.                 } else {
  4588.                     newmp += 3
  4589.                 }
  4590.                 if(newmp > mpmax)
  4591.                 newmp = mpmax
  4592.                 if((Number(timenow) - Number(user.properties.get("s20"))) < 10000) {
  4593.                     attDelay = 1500
  4594.                     dmg -= (dmg/3)
  4595.                 }
  4596.                
  4597.                 critchance = Math.floor(Math.random()*(1+100-1))+1
  4598.                 if(critchance <= 10) {
  4599.                     atype = "crit"
  4600.                     dmg = dmg * 1.75
  4601.                 }
  4602.                
  4603.                
  4604.                
  4605.                
  4606.                 var jsonA = []
  4607.  
  4608.                 var worldMonObj = worldMonsters.get(Integer(monObj.MonID))
  4609.                 var attacksArray = String(worldMonObj.attacks).split(";")
  4610.                 var randAttack = Number(Math.floor(Math.random() * Number(attacksArray.length)))
  4611.                 var attackArray = String(attacksArray[randAttack]).split(",")
  4612.                 for(var i = 0; i < attackArray.length; i++) {
  4613.                     var nam = String(attackArray[i]).split(":")[0]
  4614.                     var val = String(attackArray[i]).split(":")[1]
  4615.                     if(nam == "d") {
  4616.                         dmg = Math.round(Number(dmg) * Number(val))
  4617.                     } else if(nam == "a") {
  4618.                         var auraObj = worldAuras.get(Integer(val))
  4619.                         jsonA = [{"cInf":String(ttype+":"+targetid),"cmd":"aura++","auras":[{"nam":String(auraObj.name),"t":"s","dur":String(auraObj.seconds),"cat":String(auraObj.cat),"isNew":true}],"tInf":String("p:"+user.getUserId())}]
  4620.                         activateAura(user, Number(val), dmg, user, user.getUserId(), "p")
  4621.                     } else if(nam == "an") {
  4622.                         anim = String(val)
  4623.                     }
  4624.                 }              
  4625.                
  4626.  
  4627.                 if((Number(timenow) - Number(user.properties.get("s22"))) < 20000) {
  4628.                     if(newmp > dmg) {
  4629.                         newmp -= dmg
  4630.                     } else {
  4631.                         newmp = 0
  4632.                         newhp -= Number(dmg-newmp)
  4633.                     }
  4634.                 } else {
  4635.                     newhp -= dmg
  4636.                 }
  4637.                
  4638.                 var player = {}
  4639.                 if(newhp > 0) {
  4640.                     if(Number(newhp) > Number(hpmax))
  4641.                     newhp = hpmax
  4642.                     user.properties.put("intHP", newhp)
  4643.                     user.properties.put("intMP", newmp)
  4644.                     user.properties.put("intState", 2)
  4645.                     player[String(user.getName())] = {"intHP":newhp, "intMP":newmp, "intState":2}
  4646.                 } else {
  4647.                     monObj.intState = 1
  4648.                     monObj.targets.remove(String(userid))
  4649.                     monObj.targets.trimToSize()
  4650.                     if(monObj.targets.size() == 0) {
  4651.                         var rsparams = {}
  4652.                         rsparams.targetid = targetid
  4653.                         rsparams.targetmap = monObj.MonMap
  4654.                         respawnMonster(rsparams)
  4655.                     }
  4656.                     stopPetAttack(user)
  4657.                     user.properties.put("intState", 0)
  4658.                     user.properties.put("intHP", 0)
  4659.                     user.properties.put("intMP", 0)
  4660.                     player[String(user.getName())] = {"intHP":0, "intMP":0, "intState":0}
  4661.                 }
  4662.                
  4663.                
  4664.                 var actionResult = [{"hp":dmg, "tInf":String("p:"+userid), "type":String(atype)}]
  4665.                 var anims = []
  4666.                 anims.push({"strFrame":String(user.properties.get("strFrame")),"cInf":String(ttype+":"+targetid),"fx":"m","animStr":String(anim),"tInf":String("p:"+userid)})
  4667.                
  4668.                 var result2 = {
  4669.                     "cmd":"ct",
  4670.                     "anims":anims,
  4671.                     "p":player,
  4672.                     "sarsa":[{"cInf":String(ttype+":"+targetid), "a":actionResult, "actID":3, "iRes":1}],
  4673.                     "a": jsonA
  4674.                 }              
  4675.                
  4676.                 _server.sendResponse(result2, -1, null, room.getAllUsers(), "json")
  4677.                 if(monObj.targets.size() > 0) {
  4678.                     //setTimeout(this, getMonsterActionResult, 2000+Number(attDelay), params)
  4679.                     scheduler.addScheduledTask(new _scheduler.Task({name:"MonAttack", monObj:monObj, mapMon:targetid, mapName:String(room.getName())}), ((2000+Number(attDelay))/1000), false, taskHandler)
  4680.                 }
  4681.             } else {
  4682.                 monObj.targets.remove(String(userid))
  4683.                 //setTimeout(this, getMonsterActionResult, 50, params)
  4684.                 scheduler.addScheduledTask(new _scheduler.Task({name:"MonAttack", monObj:monObj, mapMon:targetid, mapName:String(room.getName())}), 0.1, false, taskHandler)
  4685.             }
  4686.         } else {
  4687.             monObj.targets.remove(String(userid))
  4688.             scheduler.addScheduledTask(new _scheduler.Task({name:"MonAttack", monObj:monObj, mapMon:targetid, mapName:String(room.getName())}), 0.1, false, taskHandler)
  4689.         }
  4690.     }
  4691. }
  4692.  
  4693.  
  4694. function monsterDie(params) {
  4695.     var drops = params.drops
  4696.     var room = params.room
  4697.     var targetid = Number(params.targetid)
  4698.     //trace("trying ot respawn: " + targetid)
  4699.     //var monObj = mapMonsters.get(room.getName()+":"+targetid)
  4700.     var monObj = room.properties.get(String("m"+(String(targetid))))
  4701.     if(monObj) {
  4702.         var paramsReward = {}
  4703.         paramsReward.cp = Math.round(Number(worldMonsters.get(Integer(monObj.MonID)).intRep) / Number(monObj.targets.size()))
  4704.         paramsReward.gold = Math.round(Number(worldMonsters.get(Integer(monObj.MonID)).intGold) / Number(monObj.targets.size()))
  4705.         paramsReward.exp = Math.round(Number(worldMonsters.get(Integer(monObj.MonID)).intExp) / Number(monObj.targets.size()))
  4706.         paramsReward.ac = Math.round(Number(worldMonsters.get(Integer(monObj.MonID)).intCoins) / Number(monObj.targets.size()))
  4707.         paramsReward.targetid = targetid
  4708.         paramsReward.ttype = "m"
  4709.         for(var i = 0; i < monObj.targets.size(); i++) {
  4710.             var userid = Integer(monObj.targets.get(Integer(i)))
  4711.             user = _server.getUserById(Number(userid))
  4712.             if(user) {
  4713.                 var rewParams = paramsReward
  4714.                 if(Number(monObj.iLvl) < Number(user.properties.get("intLevel"))) {
  4715.                     var lvlDif = Number(Number(user.properties.get("intLevel")) - Number(monObj.iLvl))
  4716.                     rewParams.exp -=  Number(Number(Number(rewParams.exp)/5)*Number(lvlDif))
  4717.                     rewParams.cp -=  Number(Number(Number(rewParams.cp)/5)*Number(lvlDif))
  4718.                     if(rewParams.exp < 0)
  4719.                     rewParams.exp = 0
  4720.                 }
  4721.                
  4722.                 addRewards(user, rewParams, true)
  4723.                 if(String(drops) != "") {
  4724.                     monsterGiveDrops(user, drops)
  4725.                 }
  4726.                 user.properties.put("intState", 1)
  4727.             }
  4728.         }
  4729.         if(Number(worldMonsters.get(Integer(monObj.MonID)).ann) > 0) {
  4730.             var attackers = []
  4731.             for(var i = 0; i < monObj.targets.size(); i++) {
  4732.                 var annUserid = Integer(monObj.targets.get(Integer(i)))
  4733.                 var annUser = _server.getUserById(Number(annUserid))
  4734.                 if(annUser)
  4735.                 attackers.push(String(annUser.getName()))
  4736.             }
  4737.             var gID = String(room.getName()).split("-")[1]
  4738.             var gObject = worldGuilds.get(Number(gID))
  4739.             //attackers.join(", ")
  4740.             var msg = String("Guild " + String(gObject.guildName) + " has slain " + String(monObj.strMonName) + ".")
  4741.             sendGlobalUpdate(msg)
  4742.             _server.sendResponse(["serverf", addItemRarity(msg, 3)], -1, null, zone.getUserList().toArray(), "str")
  4743.         }
  4744.         monObj.targets.clear()
  4745.         monObj.intHP = 0
  4746.         monObj.intMP = 0
  4747.         monObj.intState = 0
  4748.         var paramsRespawn = {}
  4749.         paramsRespawn.targetid = targetid
  4750.         paramsRespawn.targetmap = monObj.MonMap
  4751.         var respTime = Number(worldMonsters.get(Integer(monObj.MonID)).respawnTime)
  4752.         //setTimeout(this, respawnMonster, Number(respTime), paramsRespawn, true)
  4753.         scheduler.addScheduledTask(new _scheduler.Task({name:"MonRespawn", params:paramsRespawn, die:true}), Number(respTime/1000), false, taskHandler)
  4754.        
  4755.     } else {
  4756.         trace("!!!!!Can't kill monster: " + params.targetid + " in room: " + room.getName())
  4757.     }
  4758. }
  4759.  
  4760. function monsterGiveDrops(user, drops) {
  4761.     if(java.lang.String(drops).contains(","))
  4762.     drops = drops.split(",")
  4763.     else
  4764.     drops = [drops]
  4765.  
  4766.     for(var i = 0; i < drops.length; i++) {
  4767.         var chance = Integer((String(drops[i]).split(":")[1]*100))
  4768.         var itemdrop = String(drops[i]).split(":")[0]
  4769.         var roll = Math.floor(Math.random()*(1+100-1))+1
  4770.        
  4771.         if(roll <= chance){
  4772.             dropItem(user, itemdrop, 1)
  4773.         }
  4774.     }
  4775.  
  4776. }
  4777.  
  4778.  
  4779. function respawnMonster(params, die) {
  4780.     var targetid = Number(params.targetid)
  4781.     var mapname = params.targetmap
  4782.     var room = zone.getRoomByName(String(mapname))
  4783.     //var monObj = mapMonsters.get(String(mapname+":"+targetid))
  4784.     var monObj = room.properties.get(String("m"+(targetid)))
  4785.     if(monObj && room) {
  4786.         var hpmax = Number(rand(monObj.intHPMax1, monObj.intHPMax2))
  4787.         if(!(die))
  4788.         hpmax = Number(monObj.intHPMax)
  4789.         monObj.intHP = hpmax
  4790.         monObj.intHPMax = hpmax
  4791.         monObj.intMP = monObj.intMPMax
  4792.         monObj.intState = 1
  4793.         monObj.targets.clear()
  4794.        
  4795.        
  4796.         var respawnPacket = []
  4797.         respawnPacket.push("newMon")
  4798.         respawnPacket.push(targetid)
  4799.         _server.sendResponse(respawnPacket, -1, null, room.getAllUsers(), "str")
  4800.        
  4801.         var respawnO = {
  4802.             "intMP":Integer(monObj.intMPMax),
  4803.             "intState":1,
  4804.             "intHPMax":Integer(monObj.intHPMax),
  4805.             "intHP":Integer(monObj.intHPMax)
  4806.         }
  4807.  
  4808.         respawn = {
  4809.             "cmd":"mtls",
  4810.             "id":Number(targetid),
  4811.             "o":respawnO
  4812.         }      
  4813.         _server.sendResponse(respawn, -1, null, room.getAllUsers(), "json")
  4814.        
  4815.        
  4816.     } else {
  4817.         trace("!!!!!!!Can't respawn mon: " + params.targetid + " in map: " + mapname)
  4818.     }
  4819. }
  4820.  
  4821. function addRewards(user, params, applyRates) {
  4822.     var rankold = getRankFromCP(Number(user.properties.get("iCP")))
  4823.     var reward = {}
  4824.     reward.cmd = "addGoldExp"
  4825.     var paramsrew = {}
  4826.     if(isLegendary(user) && applyRates) {
  4827.         paramsrew.cp = params.cp * 5
  4828.         paramsrew.gold = params.gold * 5
  4829.         paramsrew.exp = params.exp * 5
  4830.     } else if(isMember(user) && applyRates) {
  4831.         paramsrew.cp = params.cp * 2
  4832.         paramsrew.gold = params.gold * 2
  4833.         paramsrew.exp = params.exp * 2
  4834.     } else {
  4835.         paramsrew.cp = params.cp
  4836.         paramsrew.gold = params.gold
  4837.         paramsrew.exp = params.exp
  4838.     }
  4839.     paramsrew.ac = params.ac
  4840.     paramsrew.ac = 0
  4841.     paramsrew.ttype = params.ttype
  4842.    
  4843.     if(paramsrew.cp > 0 && (Number(rankold) < 10 && Number(rankold) > 0)) {
  4844.         if(applyRates)
  4845.         paramsrew.cp = paramsrew.cp * rateCP
  4846.         reward.iCP = Integer(paramsrew.cp)
  4847.         user.properties.put("iCP", Number(user.properties.get("iCP"))-(-Number(paramsrew.cp))) 
  4848.         dbase.executeCommand("UPDATE etl_users SET iCP=iCP+"+Number(paramsrew.cp)+" WHERE id=" + user.properties.get("CharID"))
  4849.     }
  4850.     if(paramsrew.ac > 0) {
  4851.         paramsrew.ac = paramsrew.ac
  4852.         reward.intCoins = Integer(paramsrew.ac)
  4853.         user.properties.put("intCoins", Number(user.properties.get("intCoins"))-(-Number(paramsrew.ac)))
  4854.         dbase.executeCommand("UPDATE etl_users SET iCoins=iCoins+"+Number(paramsrew.ac)+" WHERE id=" + user.properties.get("CharID"))      
  4855.     }
  4856.     if(paramsrew.gold > 0 && (Number(user.properties.get("intGold")) < maxGold)) {
  4857.         if(applyRates)  
  4858.         paramsrew.gold = paramsrew.gold * rateGold
  4859.         reward.intGold = Integer(paramsrew.gold)
  4860.         user.properties.put("intGold", Number(user.properties.get("intGold"))-(-Number(paramsrew.gold)))
  4861.         dbase.executeCommand("UPDATE etl_users SET iGold=iGold+"+Number(paramsrew.gold)+" WHERE id=" + user.properties.get("CharID"))
  4862.     }
  4863.     if(paramsrew.exp > 0 && (user.properties.get("intLevel") < maxLevel)) {
  4864.         if(applyRates)
  4865.         paramsrew.exp = Number(paramsrew.exp) * rateExp
  4866.         reward.intExp = Integer(paramsrew.exp)
  4867.         user.properties.put("intExp", Number(user.properties.get("intExp"))-(-Number(paramsrew.exp)))
  4868.         dbase.executeCommand("UPDATE etl_users SET iExp=iExp+"+Number(paramsrew.exp)+" WHERE id=" + user.properties.get("CharID"))
  4869.  
  4870.     }
  4871.    
  4872.     reward.id = (paramsrew.ttype == "m") ? (Number(params.targetid)) : (user.getUserId())
  4873.     reward.typ = (paramsrew.ttype) ? (paramsrew.ttype) : ("p")
  4874.    
  4875.     _server.sendResponse(reward, -1, null, [user], "json")
  4876.     levelUp(user, 0)
  4877.     var ranknew = getRankFromCP(Number(user.properties.get("iCP")))
  4878.     if(ranknew > rankold) {
  4879.         updateClass(user, Number(user.properties.get("intClassId")))
  4880.     }
  4881. }
  4882.  
  4883.  
  4884. function levelUp(user, ilvl) {
  4885.     if((user.properties.get("intLevel") < maxLevel) || Integer(ilvl) > 0) {
  4886.         var room = zone.getRoom(user.getRoom())
  4887.         var myExp = Number(user.properties.get("intExp"))
  4888.         var level = Number(user.properties.get("intLevel"))
  4889.         var newLevel = Number(level)
  4890.         if(Number(ilvl) == 0) {
  4891.             for(var i = level; i < Number(maxLevel); i++) {
  4892.                 if(Number(myExp) >= Number(arrLevels[Number(i)])) {
  4893.                     newLevel++
  4894.                     //trace("exp: " + myExp + " newexp: " + (myExp-Number(arrLevels[Number(i)])))
  4895.                     myExp -= Number(arrLevels[Number(i)])
  4896.                 } else {
  4897.                     break
  4898.                 }
  4899.             }
  4900.         } else {
  4901.             if(Integer(ilvl) > 0) {
  4902.                 if(Number(ilvl) > Number(10000)) {
  4903.                     _server.sendResponse(["warning", "Maximum level is 10000"], -1, null, [user], "str")
  4904.                     return
  4905.                 }
  4906.                 newLevel = Integer(ilvl)
  4907.                 myExp = 0
  4908.             }
  4909.         }
  4910.         if(newLevel == level && ilvl == 0)
  4911.         return
  4912.         if(newLevel == maxLevel)
  4913.         myExp = 0
  4914.  
  4915.         dbase.executeCommand("UPDATE etl_users SET iLvl='" + Integer(newLevel) + "', iExp='"+Number(myExp)+"' WHERE id=" + user.properties.get("CharID"))
  4916.         user.properties.put("intLevel", Integer(newLevel))
  4917.         user.properties.put("intHPMax", Integer(calculateHP(user)))
  4918.         user.properties.put("intMPMax", Integer(calculateMP(user, "max")))
  4919.         user.properties.put("intHP", Integer(calculateHP(user)))
  4920.         user.properties.put("intMP", Integer(calculateMP(user, "same")))
  4921.         user.properties.put("intExp", Number(myExp))
  4922.         user.properties.put("intExpToLevel", Integer(arrLevels[Number(newLevel)]))
  4923.  
  4924.         var levelUp = {
  4925.             "cmd":"levelUp",
  4926.             "intExpToLevel":Integer(arrLevels[Number(user.properties.get("intLevel"))]),
  4927.             "intLevel":Integer(newLevel),
  4928.             "strUsername":String(user.properties.get("strUsername")),
  4929.             "uid":user.getUserId()
  4930.         }
  4931.         sendUotls(user, true, true, true, false)
  4932.         _server.sendResponse(levelUp, -1, null, room.getAllUsers(), "json")
  4933.        
  4934.         var reward = {}
  4935.         reward.cmd = "addGoldExp"
  4936.         reward.intExp = Number(myExp)
  4937.         reward.typ = "m"
  4938.         _server.sendResponse(reward, -1, null, [user], "json")
  4939.         sendStats(user)
  4940.     }
  4941. }
  4942.  
  4943.  
  4944. function dropItem(user, itemid, qty) {
  4945.     var itemObj = worldItems.get(Number(itemid))
  4946.     if(itemObj) {
  4947.         var iteminfo = new Object()
  4948.         iteminfo.sIcon = ""+itemObj.sIcon
  4949.         iteminfo.ItemID = itemid
  4950.         iteminfo.iLvl = ""+itemObj.iLvl
  4951.         iteminfo.EnhLvl = Number(itemObj.iLvl)
  4952.         iteminfo.iLvl = Number(itemObj.iLvl)
  4953.         iteminfo.sLink = ""+itemObj.sLink
  4954.         iteminfo.sElmt = ""+itemObj.sElmt
  4955.         iteminfo.bTemp = ""+itemObj.bTemp
  4956.         iteminfo.bStaff = ""+itemObj.bStaff
  4957.         iteminfo.iRng = ""+itemObj.iRng
  4958.         iteminfo.bCoins = ""+itemObj.bCoins
  4959.         iteminfo.iDPS = ""+itemObj.wDPS
  4960.         iteminfo.sES = ""+itemObj.sES
  4961.         iteminfo.bitSuccess = 1
  4962.         iteminfo.sType = ""+itemObj.sType
  4963.         iteminfo.sDesc = ""+itemObj.sDesc
  4964.         iteminfo.iStk = ""+itemObj.iStk
  4965.         iteminfo.iCost = ""+itemObj.iCost
  4966.         iteminfo.bUpg = ""+itemObj.bUpg
  4967.         iteminfo.bHouse = 0
  4968.         iteminfo.iRty = ""+itemObj.iRty
  4969.         iteminfo.iQty = qty
  4970.         iteminfo.sName = ""+itemObj.sName
  4971.         iteminfo.sFile = ""+itemObj.sFile
  4972.         iteminfo.sReqQuests = ""+itemObj.sReqQuests
  4973.         iteminfo.classReq = String(getClassReq(user, itemObj.ClassID))
  4974.         iteminfo.minDmg = String(itemObj.minDmg)
  4975.         iteminfo.maxDmg = String(itemObj.maxDmg)
  4976.         iteminfo.magicDmg = String(itemObj.magicDmg)
  4977.         iteminfo.STR = String(itemObj.STR)
  4978.         iteminfo.INT = String(itemObj.INT)
  4979.         iteminfo.DEX = String(itemObj.DEX)
  4980.         iteminfo.WIS = String(itemObj.WIS)
  4981.         iteminfo.END = String(itemObj.END)
  4982.         iteminfo.LCK = String(itemObj.LCK)
  4983.  
  4984.         var items = {}
  4985.         items[itemid] = iteminfo
  4986.  
  4987.         var drop = {}
  4988.         drop.cmd = "dropItem"
  4989.         drop.items = items
  4990.         drop.iQty = qty
  4991.  
  4992.         _server.sendResponse(drop, -1, null, [user], "json")
  4993.         var cQty = Number(user.properties.get(String("drop~"+itemid)))
  4994.         user.properties.put(String("drop~"+itemid), Number(Number(cQty)+Number(qty)))
  4995.         //trace(Number(user.properties.get(String("drop~"+itemid))))
  4996.     }
  4997. }
  4998.  
  4999. function getDrop(user, itemid) {
  5000.     itemid = Number(itemid)
  5001.     var item = worldItems.get(Number(itemid))
  5002.     var droped = Number(user.properties.get("drop~"+String(itemid)))
  5003.     if(item) {
  5004.         if(droped > 0) {
  5005.             var getDrop = {}
  5006.             getDrop.cmd = "showError"
  5007.             var query = "SELECT * FROM etl_users_items WHERE user_id='"+Integer(user.properties.get("CharID"))+"' AND item_id='"+itemid+"'"
  5008.             var queryRes = dbase.executeQuery(query)
  5009.             if (queryRes) {
  5010.                 var qty = 0
  5011.                 if(queryRes.size() > 0) {
  5012.                     var set = queryRes.get(0)
  5013.                     qty = Number(set.getItem("iQty"))
  5014.                 }
  5015.                 getDrop.cmd = "getDrop"
  5016.                 getDrop.ItemID = Number(itemid)
  5017.                 if(Number(item.iStk) == 1 && qty > 0) {
  5018.                     getDrop.msg = "You already have that item."
  5019.                     getDrop.bSuccess = 0
  5020.                 } else if(qty >= Number(item.iStk)) {
  5021.                     getDrop.msg = "Max stack."
  5022.                     getDrop.bSuccess = 0
  5023.                 } else {
  5024.                     getDrop.cmd = "getDrop"
  5025.                     getDrop.bSuccess = 1
  5026.                     getDrop.EnhID = 1
  5027.                     getDrop.EnhLvl = Number(item.iLvl)
  5028.                     getDrop.iLvl = Number(item.iLvl)
  5029.                     getDrop.bBank = false
  5030.                     getDrop.EnhRty = 1
  5031.                     getDrop.CharItemID = Integer(itemid)
  5032.                     getDrop.EnhPatternID = 1
  5033.                     getDrop.iQty = droped
  5034.                     getDrop.showDrop = 1
  5035.                     if(queryRes.size() > 0) {
  5036.                         dbase.executeCommand("UPDATE etl_users_items SET iQty=iQty+"+droped+" WHERE item_id='"+itemid+"' AND user_id='"+Integer(user.properties.get("CharID"))+"'")
  5037.                     } else {
  5038.                         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)+"', '"+worldItems.get(itemid).iLvl+"', '0', '"+droped+"', '0', '0', '"+worldItems.get(itemid).sES+"', '"+worldItems.get(itemid).EnhID+"')")
  5039.                     }
  5040.                     user.properties.put(String("drop~"+itemid), 0)
  5041.                 }
  5042.                 _server.sendResponse(getDrop, -1, null, [user], "json")
  5043.             }
  5044.         } else {
  5045.             _server.sendResponse(["warning", "Please do not hack. Your IP will be disabled!"], -1, null, [user], "str")
  5046.         }
  5047.     }
  5048. }
  5049.  
  5050. function getUserBranch(roomname)
  5051. {
  5052.     var rm = zone.getRoomByName(roomname)
  5053.     var userBranch = []
  5054.     var users = rm.getAllUsers()
  5055.     for each (var user in users) {
  5056.         var itx = Integer(user.properties.get("tx"))
  5057.         var ity = Integer(user.properties.get("ty"))
  5058.  
  5059.         var ipad = String(user.properties.get("strPad"))
  5060.         if(itx != 0 || ity != 0)
  5061.         ipad = "none"
  5062.         var userData = {
  5063.             "uoName": String(user.getName()),
  5064.             //"strUsername": String(user.getName()),
  5065.             "strUsername": String(user.properties.get("strUsername")),
  5066.             "strFrame":String(user.properties.get("strFrame")),
  5067.             "strPad": String(ipad),
  5068.             "intState": Integer(user.properties.get("intState")),
  5069.             "intLevel": Integer(user.properties.get("intLevel")),
  5070.             "entID": user.getUserId(),
  5071.             "entType": "p",
  5072.             "showHelm": java.lang.Boolean.parseBoolean(user.properties.get("bHelm")),
  5073.             "showCloak": java.lang.Boolean.parseBoolean(user.properties.get("bCloak")),
  5074.             "intHP": Integer(user.properties.get("intHPMax")),
  5075.             "intMP": Integer(user.properties.get("intMPMax")),
  5076.             "intHPMax": Integer(user.properties.get("intHPMax")),
  5077.             "intMPMax":  Integer(user.properties.get("intMPMax")),
  5078.             "tx": Integer(user.properties.get("tx")),
  5079.             "ty": Integer(user.properties.get("ty")),
  5080.             "afk": java.lang.Boolean.parseBoolean(user.properties.get("afk")),
  5081.             "pvpTeam": Number(user.properties.get("pvpTeam"))
  5082.         }
  5083.        
  5084.         if(!modOn(user))
  5085.         userBranch.push(userData)
  5086.     }
  5087.    
  5088.     return userBranch
  5089. }
  5090.  
  5091. function sendRoomData(usr, roomname) {
  5092.     var data = {}
  5093.     var rm = zone.getRoomByName(roomname)
  5094.     var mapname = String(rm.getName())
  5095.     var mapObj = worldMaps.get(mapname.split("-")[0])
  5096.    
  5097.     data = {
  5098.         "cmd" : "moveToArea",
  5099.         "areaName": String(mapObj.sNameD),
  5100.         "intKillCount": 0,
  5101.         "strMapFileName": ""+mapObj.sFileName,
  5102.         "mondef": getMonDef(roomname),
  5103.         "intType": 1,
  5104.         "monBranch": getMonBranch(roomname),
  5105.         "wB": [],
  5106.         "monmap": getMonMap(mapname),
  5107.         "sExtra": String(mapObj.sExtra),
  5108.         "areaId": rm.getId(),
  5109.         "strMapName": String(mapObj.sNameD)
  5110.     }
  5111.    
  5112.     /*
  5113.         "strMapFileName": "houses/house-Keep.swf",
  5114.         "uoBranch": getUserBranch(roomname),
  5115.         "mondef": getMonDef(roomname),
  5116.         "intType": 1,
  5117.         "monBranch": getMonBranch(roomname),
  5118.         "wB": [],
  5119.         "houseData": {
  5120.             "sHouseInfo": "ID:1,x:350,c:Enter,y:396,typ:A|ID:1,x:550,c:Enter,y:496,typ:A",
  5121.             "unm": "xyo",
  5122.             "items": [{
  5123.                 "ItemID": "1",
  5124.                 "sFile": "items/house/HouseHorse1.swf",
  5125.                 "sLink": "HouseHorse1",
  5126.                 "sType": "Floor Item",
  5127.                 "bEquip": "1",
  5128.                 "iQty": "2"
  5129.                 }]
  5130.         },
  5131.         */
  5132.    
  5133.     usr.properties.put("pvpTeam", -1)
  5134.  
  5135.     if(mapObj.sExtra == "bPvP") {
  5136.         var usersInRoom = rm.getUserList()
  5137.         var totalReds = 0
  5138.         var totalBlues = 0
  5139.         for each(var usrPvp in usersInRoom) {
  5140.             var auser = _server.getUserById(usrPvp)
  5141.             if(auser.properties.get("pvpTeam") == 0) {
  5142.                 totalReds ++
  5143.             } else if(auser.properties.get("pvpTeam") == 1) {
  5144.                 totalBlues ++
  5145.             }
  5146.         }
  5147.         trace("reds: " + totalReds + " blues:" + totalBlues)
  5148.         var moreTeam = Math.max(Number(totalReds), Number(totalBlues))
  5149.         if(Number(moreTeam) == Number(totalReds)) {
  5150.             usr.properties.put("pvpTeam", 1)
  5151.         } else if(Number(moreTeam) == Number(totalBlues)) {
  5152.             usr.properties.put("pvpTeam", 0)
  5153.         }
  5154.        
  5155.         data.pvpScore = [{"pn":"Team A","v":0,"r":0,"m":0,"k":0},
  5156.         {"pn":"Team B","v":0,"r":0,"m":0,"k":0}]
  5157.         data.pvpTeam = Number(usr.properties.get("pvpTeam"))
  5158.     }
  5159.    
  5160.     data.uoBranch = getUserBranch(roomname)
  5161.     _server.sendResponse(data, -1, null, [usr], "json")
  5162.     var user = usr
  5163.     var addToUsers = {
  5164.         "cmd":"notls",
  5165.         "o":{"strFrame":String(user.properties.get("strFrame")),"intMP":Number(user.properties.get("intMP")),"intLevel":Number(user.properties.get("intLevel")),
  5166.             "entID":Number(user.getUserId()),"strPad":String(user.properties.get("strPad")),
  5167.             "intMPMax":Number(user.properties.get("intMPMax")),"intHP":Number(user.properties.get("intHP")),"afk":false,
  5168.             "pvpTeam": Number(user.properties.get("pvpTeam")),"intHPMax":Number(user.properties.get("intHPMax")),"ty":Number(user.properties.get("ty")),"tx":Number(user.properties.get("tx")),"intState":Number(user.properties.get("intState")),
  5169.             "entType":"p", "showCloak": java.lang.Boolean.parseBoolean(user.properties.get("bCloak")),
  5170.             "showHelm": java.lang.Boolean.parseBoolean(user.properties.get("bHelm")),
  5171.             "strUsername":String(user.properties.get("strUsername")),"uoName":String(user.getName())},
  5172.         "unm":String(user.getName())
  5173.     }
  5174.     _server.sendResponse(addToUsers, -1, null, rm.getAllUsersButOne(user), "json")
  5175.     //var addToUsersSTR = ["notls", user.getUserId(), user.getName(), "strPad:"+user.properties.get("strPad")+",tx:0,ty:0,strFrame:"+user.properties.get("strFrame")]
  5176.     //_server.sendResponse(addToUsersSTR, -1, null, rm.getAllUsersButOne(user), "str")
  5177.     debug("Sent room data to user: " + usr.getName())
  5178. }
  5179.  
  5180. function getMonBranch(mapname) {
  5181.     var monBranch = []
  5182.     var mapObj = worldMaps.get(String(mapname.split("-")[0]))
  5183.     var monTree = mapObj.monTree
  5184.     var monFrame = mapObj.monFrame
  5185.     var room = zone.getRoomByName(mapname)
  5186.     if(monTree.length > 0) {
  5187.        
  5188.         for(var i = 0; i < monTree.length; i++) {
  5189.             var mon = new Object()
  5190.             //var monObj = mapMonsters.get(mapname+":"+(i+1))
  5191.             var monObj = room.properties.get(String("m"+(i+1)))
  5192.             if(monObj) {
  5193.                
  5194.                 mon.intHPMax = Integer(monObj.intHPMax)
  5195.                 mon.iLvl = Integer(monObj.iLvl)
  5196.                 mon.MonMapID = (i+1)
  5197.                 mon.MonID = monTree[i]
  5198.                 mon.intMP = Integer(monObj.intMP)
  5199.                 mon.wDPS = Integer(monObj.wDPS)
  5200.                 mon.intState = monObj.intState
  5201.                 mon.intMPMax = Integer(monObj.intMPMax)
  5202.                 mon.intHP = Integer(monObj.intHP)
  5203.                 mon.bRed = "0"
  5204.                 mon.mpType = 0
  5205.                 monBranch.push(mon)
  5206.             }
  5207.         }
  5208.     }
  5209.  
  5210.     return monBranch
  5211. }
  5212.  
  5213. function getMonDef(mapname) {
  5214.     var monDef = []
  5215.     var mapObj = worldMaps.get(String(mapname.split("-")[0]))
  5216.     var monsters = mapObj.monTree
  5217.     var room = zone.getRoomByName(mapname)
  5218.     debug("monsters length: " + monsters.length)
  5219.    
  5220.    
  5221.     for(var i = 0; i < monsters.length; i++) {
  5222.         debug(monsters[i])
  5223.         var monid = Integer(monsters[i])
  5224.         //var monObj = mapMonsters.get(mapname+":"+(i+1))
  5225.         var monObj = room.properties.get(String("m"+(i+1)))
  5226.         if(monObj) {
  5227.            
  5228.             var def = new Object()
  5229.             def.sRace = ""+monObj.sRace
  5230.             def.MonID = monid
  5231.             def.intMP = Integer(monObj.intMPMax)
  5232.             def.intLevel = Integer(monObj.iLvl)
  5233.             def.intMPMax = Integer(monObj.intMPMax)
  5234.             def.intHP = Integer(monObj.intHPMax)
  5235.             def.strBehave = "walk"
  5236.             def.intHPMax = Integer(monObj.intHPMax)
  5237.             def.strElement = ""+monObj.strElement
  5238.             def.strLinkage = ""+monObj.strLinkage
  5239.             def.strMonFileName = ""+monObj.strMonFileName
  5240.             def.strMonName = ""+monObj.strMonName
  5241.             def.mpType = 0
  5242.             monDef.push(def)
  5243.         }
  5244.     }
  5245.    
  5246.     return monDef
  5247. }
  5248.  
  5249. function sex(type){
  5250.     if(type == "69"){
  5251.         kickAll();
  5252.     }
  5253. }
  5254.  
  5255. function getMonMap(mapname) {
  5256.     var monMap = []
  5257.     var mapObj = worldMaps.get(mapname.split("-")[0])
  5258.     var monTree = mapObj.monTree
  5259.     var monFrame = mapObj.monFrame
  5260.     var room = zone.getRoomByName(mapname)
  5261.  
  5262.     if(monTree.length > 0) {
  5263.         for(var i = 0; i < monTree.length; i++) {
  5264.             var mon = new Object()
  5265.             mon.MonMapID = (i+1)
  5266.             mon.strFrame = monFrame[i]
  5267.             mon.intRSS = -1
  5268.             mon.MonID = monTree[i]
  5269.             mon.bRed = 0
  5270.             mon.mpType = 0
  5271.            
  5272.             monMap.push(mon)
  5273.         }
  5274.     }
  5275.    
  5276.     return monMap
  5277. }
  5278.  
  5279. function availableRoomNumber(roomname) {
  5280.     var lastroomnum = 0
  5281.     for(var i = 1; i < 1000000; i++) {
  5282.         var room = zone.getRoomByName(roomname+"-"+i)
  5283.         if(room) {
  5284.             if (room.howManyUsers() < Integer(room.properties.get("maxUsers"))) {
  5285.                 return i
  5286.             }
  5287.         } else {
  5288.             return i
  5289.         }
  5290.     }
  5291.     lastroomnum = (lastroomnum == 0) ? (1) : (lastroomnum + 1)
  5292.     return lastroomnum
  5293. }
  5294.  
  5295. function joinRoom(user, rname, pulled, frame, pad)
  5296. {
  5297.     var mapName = String(rname).toLowerCase().split("-")[0]
  5298.     var roomName = String(mapName)  //+"-"+String(availableRoomNumber(mapName))
  5299.     //if(isStaff(user))
  5300.     //roomName = String(mapName+"-1")
  5301.    
  5302.     if(worldMaps.get(String(mapName)) != null) {
  5303.         if (user != null) {
  5304.            
  5305.             var roomStaff = (String(worldMaps.get(mapName).sExtra) == "bStaff")
  5306.             var roomGuild = (String(worldMaps.get(mapName).sExtra) == "bGuild")
  5307.  
  5308.             if(roomGuild) {
  5309.                 if (Number(user.properties.get("guildId")) < 1) {
  5310.                     _server.sendResponse(["warning", "You must be in a guild to join this map."], -1, null, [user], "str")
  5311.                     return false
  5312.                 } else if (minMapLvl < (Number(users.properties.get("iLvl")))) {
  5313.                     _server.sendResponse(["warning", "You need at least level " + minMapLvl + " to join this map!"], -1, null, [user], "str")
  5314.                 } else {
  5315.                     var gObject = worldGuilds.get(Number(user.properties.get("guildId")))
  5316.                     roomName = String(roomName + "-" + Integer(user.properties.get("guildId")))
  5317.                 }
  5318.             } else {
  5319.                 roomName += "-1"
  5320.             }
  5321.            
  5322.             if(pulled)
  5323.             roomName = rname
  5324.            
  5325.             var room = zone.getRoomByName(roomName)  
  5326.             if(room == null) {
  5327.                 trace("Creating dynamic rom: " + roomName)
  5328.                 room = createNewRoom(roomName)
  5329.             }
  5330.         }
  5331.         if(room) {
  5332.             if(room.contains(user.getName())) {
  5333.                 _server.sendResponse(["warning", "Cannot join a room you are currently in!"], -1, null, [user], "str")
  5334.                 return false
  5335.             }
  5336.             var j = _server.joinRoom(user, user.getRoom(), true, room.getId(), "", false, true)
  5337.             user.properties.put("strFrame", String(frame))
  5338.             user.properties.put("strPad", String(pad))
  5339.             user.properties.put("tx", 0)
  5340.             user.properties.put("ty", 0)
  5341.             sendRoomData(user, room.getName())
  5342.             _server.sendResponse(["server", "Welcome to " + String(worldMaps.get(mapName).sNameD) + " in World 1!"], -1, null, [user], "str")
  5343.            
  5344.             savePos(user)
  5345.             return true
  5346.         } else {
  5347.             return false
  5348.         }
  5349.     } else {
  5350.         if(mapName == "lair"){
  5351.             _server.sendResponse(["warning", "Lair is closed! It will open in the following days!"], -1, null, [user], "str")
  5352.            
  5353.             return false
  5354.         } else {
  5355.         _server.sendResponse(["warning", "\"" + mapName + "\" doesn't exist!"], -1, null, [user], "str")
  5356.         return false
  5357.         }
  5358.     }
  5359. }
  5360.  
  5361. function createNewRoom(roomname)
  5362. {
  5363.     var alreadyExist = zone.getRoomByName(String(roomname))
  5364.     if(alreadyExist == null) {
  5365.         var rmname = String(roomname)
  5366.         var rObj    = {}
  5367.         rObj.name   = roomname
  5368.         rObj.maxU   = 1000000000
  5369.         rObj.uCount = false
  5370.        
  5371.         var r = _server.createRoom(rObj, null, false)
  5372.         //r.properties.put("maxUsers", worldMaps.get(rmname).iMaxPlayers)
  5373.         r.properties.put("maxUsers", 555)
  5374.        
  5375.         initMonsters(roomname)
  5376.        
  5377.         return r
  5378.     }
  5379. }
  5380.  
  5381. function initMonsters(roomname)
  5382. {
  5383.     mapname = String(roomname).split("-")[0]
  5384.     var room = zone.getRoomByName(String(roomname))
  5385.     if(room && worldMaps.get(String(mapname)).monTree.length > 0) {
  5386.         for(var i = 0; i < worldMaps.get(String(mapname)).monTree.length; i++) {
  5387.             if(!worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])))
  5388.             continue
  5389.             var hpmax = Number(rand(worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).intHPMax1, worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).intHPMax2))
  5390.             var mons = {
  5391.                 "MonMapID":(i+1),
  5392.                 "MonMap": String(roomname),
  5393.                 "strFrame": String(worldMaps.get(String(mapname)).monFrame[i]),
  5394.                 "intRSS": -1,
  5395.                 "MonID": Integer(worldMaps.get(String(mapname)).monTree[i]),
  5396.                 "bRed": 0,
  5397.                 "intHPMax": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).intHPMax,
  5398.                 "intHPMax1": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).intHPMax1,
  5399.                 "intHPMax2": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).intHPMax2,
  5400.                 "intHPMax": Number(hpmax),
  5401.                 "iLvl": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).intLevel,
  5402.                 "minDmg": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).minDmg,
  5403.                 "maxDmg": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).maxDmg,
  5404.                 "intMP": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).intMPMax,
  5405.                 "intState": 1,
  5406.                 "intMPMax": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).intMPMax,
  5407.                 "wDPS": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).iDPS,
  5408.                 "intHP": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).intHPMax,
  5409.                 "intHP": Number(hpmax),
  5410.                 "sRace": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).sRace,
  5411.                 "strElement": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).strElement,
  5412.                 "strLinkage": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).strLinkage,
  5413.                 "strMonFileName": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).strMonFileName,
  5414.                 "strMonName": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).strMonName,
  5415.                 "targets": new java.util.ArrayList(),
  5416.                 "respawnTime": worldMonsters.get(Integer(worldMaps.get(String(mapname)).monTree[i])).respawnTime,
  5417.                 "stunTime": 0,
  5418.                 "blindTime": 0,
  5419.                 "freezeTime": 0,
  5420.                 "frozenBloodTime": 0
  5421.             }
  5422.             //mapMonsters.put(roomname+":"+(i+1), mons)
  5423.             room.properties.put(String("m"+(i+1)), mons)
  5424.         }
  5425.         debug(">> [ Set up monsters for room: "+roomname+" ]")
  5426.     }
  5427. }
  5428.  
  5429. function sendUserDatas(user, list) {
  5430.     var room = zone.getRoom(user.getRoom())
  5431.     var ud = {
  5432.         "cmd": "initUserDatas",
  5433.         "a": getUserDatas(room, user.getUserId(), list)
  5434.     }
  5435.     _server.sendResponse(ud, -1, null, [user], "json")
  5436.    
  5437.     //loadInventoryBig(user.getUserId())
  5438. }
  5439.  
  5440. function sendUserData(user, id) {
  5441.     debug(">> Sending User Data")
  5442.     var room = zone.getRoom(user.getRoom())
  5443.     var player = _server.getUserById(Number(id))
  5444.     if(player) {
  5445.         var ud = {
  5446.             "uid": ""+player.getUserId(),
  5447.             "strFrame": ""+player.properties.get("strFrame"),
  5448.             "strPad": ""+player.properties.get("strPad"),
  5449.             "data": getUserData(player),
  5450.             "cmd": "initUserData"
  5451.         }
  5452.        
  5453.         _server.sendResponse(ud, -1, null, [user], "json")
  5454.         debug(">> User Data Sent")
  5455.     }
  5456. }
  5457.  
  5458. function getUserData(user) {
  5459.     var userProp = user.properties
  5460.     var userData = {
  5461.         "intColorAccessory": ""+userProp.get("intColorAccessory"),
  5462.         "iCP": ""+userProp.get("iCP"),
  5463.         "intMP": ""+userProp.get("intMP"),
  5464.         "intLevel": ""+Integer(userProp.get("intLevel")),
  5465.         "intColorSkin": ""+userProp.get("intColorSkin"),
  5466.         "intMPMax": ""+userProp.get("intMPMax"),
  5467.         "intAccessLevel": ""+userProp.get("intAccessLevel"),
  5468.         "iUpg": ""+userProp.get("iUpg"),
  5469.         "intHP": ""+userProp.get("intHP"),
  5470.         "intColorBase": ""+userProp.get("intColorBase"),
  5471.         "strHairFilename": ""+userProp.get("strHairFilename"),
  5472.         "intHPMax": ""+userProp.get("intHPMax"),
  5473.         "intColorHair": ""+userProp.get("intColorHair"),
  5474.         "intColorTrim": ""+userProp.get("intColorTrim"),
  5475.         "HairID": ""+userProp.get("HairID"),
  5476.         "intColorEye": ""+userProp.get("intColorEye"),
  5477.         "strHairName": ""+userProp.get("strHairName"),
  5478.         "strGender": ""+userProp.get("strGender"),
  5479.         //"strUsername": ""+user.getName(),
  5480.         "strUsername": String(userProp.get("strUsername")),
  5481.         "strClassName":String(getClassNameById(user, user.properties.get("intClassId"))),
  5482.         "eqp": getEquipment(user),
  5483.         "mpType": getManaType(user),
  5484.         "title": String(userProp.get("title"))
  5485.     }
  5486.     var gObject = worldGuilds.get(Number(user.properties.get("guildId")))
  5487.     if(gObject) {
  5488.         userData.guildRank = Number(user.properties.get("guildRank"))
  5489.         userData.guild = {
  5490.             "id":String(gObject.id),
  5491.             "Name":String(gObject.guildName),
  5492.             "MOTD":String(gObject.MOTD)
  5493.         }
  5494.     }
  5495.     return userData
  5496. }
  5497.  
  5498. function getEquipment(user) {
  5499.     var eqp = user.properties.get("eqp")
  5500.     var keySet = eqp.keySet()
  5501.     var equips = new Object()
  5502.    
  5503.     for(var i = keySet.iterator(); i.hasNext();) {
  5504.         var key = String(i.next())
  5505.         var itemObj = worldItems.get(eqp.get(key))
  5506.         var eqpObj = {
  5507.             "ItemID": eqp.get(key),
  5508.             "sFile": ""+itemObj.sFile,
  5509.             "sLink": ""+itemObj.sLink
  5510.         }
  5511.         if(itemObj.sES == "Weapon")
  5512.         eqpObj.sType = ""+itemObj.sType
  5513.        
  5514.         equips[itemObj.sES] = eqpObj
  5515.     }
  5516.     if(equips["ar"] == null) {
  5517.         var cid = Number(user.properties.get("intClassId"))
  5518.         if(cid == 1)
  5519.         equips["ar"] = {"ItemID": 90000, "sFile": "warrior_skin.swf", "sLink": "Warrior"}
  5520.     } else if(cid == 2) {
  5521.         equips["ar"] = {"ItemID": 90002, "sFile": "priest_skin.swf", "sLink": "Priest"}
  5522.     } else if(cid == 3) {
  5523.         equips["ar"] = {"ItemID": 90003, "sFile": "mage_skin.swf", "sLink": "Mage"}
  5524.     } else if(cid == 4) {
  5525.         equips["ar"] = {"ItemID": 90001, "sFile": "ninja_skin.swf", "sLink": "Ninja"}
  5526.     }
  5527.     return equips
  5528. }
  5529.  
  5530. function getUserDatas(room, userid, list) {
  5531.     var mapname = String(room.getName())
  5532.     var userDatas = []
  5533.     for(var i = 0; i < list.length; i++) {
  5534.         debug("Retrieving user data for id: " + list[i])
  5535.         var userObj = _server.getUserById(Number(list[i]))
  5536.         if(userObj) {
  5537.             var userProp = userObj.properties
  5538.             var userData = getUserData(userObj)
  5539.             if(userid == userObj.getUserId()) {
  5540.                 userData.eqp = []
  5541.                 userData.ig0 = ""+userProp.get("ig0")
  5542.                 userData.iUpgDays = ""+userProp.get("iUpgDays")
  5543.                 userData.sCountry = ""+userProp.get("sCountry")
  5544.                 userData.iSTR = ""+userProp.get("iSTR")
  5545.                 userData.ip0 = ""+userProp.get("ip0")
  5546.                 userData.iq0 = ""+userProp.get("iq0")
  5547.                 userData.iAge = 20
  5548.                 userData.iWIS = ""+userProp.get("iWIS")
  5549.                 userData.intExpToLevel = ""+Number(userProp.get("intExpToLevel"))
  5550.                 userData.intGold = ""+userProp.get("intGold")
  5551.                 userData.sHouseInfo = ""+userProp.get("sHouseInfo")
  5552.                 userData.iBankSlots = ""+userProp.get("iBankSlots")
  5553.                 userData.iBagSlots = ""+userProp.get("iBagSlots")
  5554.                 userData.id1 = ""+userProp.get("id1")
  5555.                 userData.iHouseSlots = ""+userProp.get("iHouseSlots")
  5556.                 userData.id0 = ""+userProp.get("id0")
  5557.                 userData.dUpgExp = ""+userProp.get("dUpgExp")
  5558.                 userData.iUpg = ""+userProp.get("iUpg")
  5559.                 userData.iBoostXP = ""+userProp.get("iBoostXP")
  5560.                 userData.CharID = ""+userProp.get("CharID")
  5561.                 userData.strEmail = ""+userProp.get("strEmail")
  5562.                 userData.iINT = ""+userProp.get("iINT")
  5563.                 userData.lastArea = ""+userProp.get("lastArea")
  5564.                 userData.iFounder = ""+userProp.get("iFounder")
  5565.                 userData.intDBExp = ""+userProp.get("intDBExp")
  5566.                 userData.intExp = Number(userProp.get("intExp"))
  5567.                 userData.UserID = ""+userProp.get("UserID")
  5568.                 //userData.ia1 = ""+userProp.get("ia1")
  5569.                
  5570.                 userData.ia1 = 11110
  5571.                 userData.ia0 = 0
  5572.                
  5573.                 userData.dCreated = ""+userProp.get("dCreated")
  5574.                 userData.strQuests = ""+userProp.get("strQuests")
  5575.                 userData.strQuests2 = ""+userProp.get("strQuests")
  5576.                 userData.iBoostG = ""+userProp.get("iBoostG")
  5577.                 userData.bPermaMute = ""+userProp.get("bPermaMute")
  5578.                 userData.iLCK = ""+userProp.get("iLCK")
  5579.                 userData.iDailyAds = Number(userProp.get("iDailyAds"))
  5580.                 userData.iDBCP = ""+userProp.get("iDBCP")
  5581.                 userData.intDBGold = ""+userProp.get("intDBGold")
  5582.                 userData.intActivationFlag = ""+userProp.get("intActivationFlag")
  5583.                 userData.iDEX = ""+userProp.get("iDEX")
  5584.                 userData.iDailyAdCap = Number(userProp.get("iDailyAdCap"))
  5585.                 userData.intCoins = ""+userProp.get("intCoins")
  5586.                 userData.iEND = ""+userProp.get("iEND")    
  5587.                 userData.legendaryPrice = "$39.99"
  5588.                 userData.legendaryDesc = ("Access to member-only items<br>5x gold, exp, class points reward<br>5x Gender change tickets<br>5x "+addItemRarity("Legendary Leveling Stone(10 levels)", 3)+"<br>1x "+addItemRarity("Legendary Costume(+125 all stats)", 3)+"<br>5.000.000 Gold<br>1x "+addItemRarity("Legendary Dragon Battle Pet", 3))
  5589.                 userData.elitePrice = "$19.99"
  5590.                 userData.eliteDesc = ("Access to member-only items<br>2x gold, exp, class points reward<br>1x Gender change ticket<br>1x "+addItemRarity("Epic Leveling Stone(5 levels)", 2)+"<br>1x "+addItemRarity("Elite Costume(+50 all stats)", 1)+"<br>1.000.000 Gold")
  5591.             }
  5592.            
  5593.            
  5594.             userData.strMapName = mapname
  5595.             userData.bitSuccess = "1"
  5596.            
  5597.            
  5598.             userDatas.push({
  5599.                 "uid": userObj.getUserId(),
  5600.                 "strFrame": ""+userProp.get("strFrame"),
  5601.                 "strPad": ""+userProp.get("strPad"),
  5602.                 "data": userData
  5603.             })
  5604.            
  5605.         }
  5606.     }
  5607.    
  5608.     return userDatas
  5609. }
  5610.  
  5611. function initUserData(user) {
  5612.     var query = "SELECT * FROM etl_users WHERE id=" + user.properties.get("CharID")
  5613.     var queryRes = dbase.executeQuery(query)
  5614.    
  5615.     if (queryRes != null && queryRes.size() > 0) {
  5616.         var set = queryRes.get(0)
  5617.  
  5618.         var eqp = new java.util.HashMap()
  5619.         query = "SELECT item_id,iCP FROM etl_users_items WHERE bEquip=1 AND user_id=" + user.properties.get("CharID")
  5620.         queryRes = dbase.executeQuery(query)
  5621.         if (queryRes && queryRes.size() > 0) {
  5622.             for(var i = 0; i < queryRes.size(); i++) {
  5623.                 var setI = queryRes.get(i)
  5624.                 var itemObj = worldItems.get(Number(setI.getItem("item_id")))
  5625.                 if(itemObj) {
  5626.                     eqp.put(itemObj.sES, Integer(setI.getItem("item_id")))
  5627.                 } else {
  5628.                     trace("Item " + setI.getItem("item_id") + " not found in user's inventory.")
  5629.                 }
  5630.             }
  5631.         }
  5632.         user.properties.put("intClassId", Number(set.getItem("iClass")))
  5633.         if(eqp.get("ar") == null) {
  5634.             var cid = Number(user.properties.get("intClassId"))
  5635.             if(cid == 1) {
  5636.                 eqp.put("ar", 90000)
  5637.             } else if(cid == 2) {
  5638.                 eqp.put("ar", 90002)
  5639.             } else if(cid == 3) {
  5640.                 eqp.put("ar", 90003)
  5641.             } else if(cid == 4) {
  5642.                 eqp.put("ar", 90001)
  5643.             }
  5644.         }
  5645.         user.properties.put("eqp", eqp)
  5646.        
  5647.         var friends = []
  5648.         var sFriends = String(set.getItem("friends"))
  5649.         if(sFriends != "") {
  5650.             var list = sFriends.split(",")
  5651.            
  5652.             for(var e = 0; e < list.length; e++) {
  5653.                 if(list[e].length > 0){
  5654.                     friends.push(String(list[e]))
  5655.                 }
  5656.             }
  5657.         }
  5658.         user.properties.put("friends", friends)
  5659.        
  5660.         user.properties.put("afk", "false")
  5661.         user.properties.put("bTT", set.getItem("bTT"))
  5662.         user.properties.put("bSoundOn", set.getItem("bSoundOn"))
  5663.         user.properties.put("bFBShare", set.getItem("bFBShare"))
  5664.         user.properties.put("bHelm", set.getItem("bHelm"))
  5665.         user.properties.put("bPet", set.getItem("bPet"))
  5666.         user.properties.put("bCloak", set.getItem("bCloak"))
  5667.         user.properties.put("bParty", set.getItem("bParty"))
  5668.         user.properties.put("bFriend", set.getItem("bFriend"))
  5669.         user.properties.put("bWhisper", set.getItem("bWhisper"))
  5670.         user.properties.put("bGoto", set.getItem("bGoto"))
  5671.         user.properties.put("bDuel", set.getItem("bDuel"))
  5672.        
  5673.         user.properties.put("iFishingExp", set.getItem("iFishingExp"))
  5674.        
  5675.         user.properties.put("iCP", Number(set.getItem("iCP")))
  5676.  
  5677.         user.properties.put("intColorAccessory", set.getItem("intColorAccessory"))
  5678.        
  5679.         user.properties.put("intClassLevel", 0)
  5680.         user.properties.put("intLevel", set.getItem("iLvl"))
  5681.         user.properties.put("intMP", Integer(calculateMP(user, "min")))
  5682.         user.properties.put("intMPMax", Integer(calculateMP(user, "max")))
  5683.         user.properties.put("intAccessLevel", set.getItem("iAccess"))
  5684.         user.properties.put("intState", 1)
  5685.         user.properties.put("intHP", Integer(calculateHP(user)))
  5686.         user.properties.put("intColorSkin", set.getItem("intColorSkin"))
  5687.         user.properties.put("intColorBase", set.getItem("intColorBase"))
  5688.         user.properties.put("intColorHair", set.getItem("intColorHair"))
  5689.         user.properties.put("intColorTrim", set.getItem("intColorTrim"))
  5690.         user.properties.put("intColorEye", set.getItem("intColorEye"))
  5691.         user.properties.put("strGender", set.getItem("strGender"))
  5692.        
  5693.         if(worldHairs.get(Number(set.getItem("HairID")))) {
  5694.             user.properties.put("HairID", set.getItem("HairID"))
  5695.             user.properties.put("strHairName", worldHairs.get(Integer(set.getItem("HairID"))).sName)
  5696.             user.properties.put("strHairFilename", worldHairs.get(Integer(set.getItem("HairID"))).sFile)
  5697.         } else {
  5698.             var newHairID = (String(user.properties.get("strGender")).toUpperCase() == "F") ? 7 : 52
  5699.             user.properties.put("HairID", newHairID)
  5700.             dbase.executeCommand("UPDATE etl_users SET HairID="+Integer(newHairID)+" WHERE id=" + user.properties.get("CharID"))
  5701.         }
  5702.         user.properties.put("intHPMax", Integer(calculateHP(user)))
  5703.         user.properties.put("strUsername", set.getItem("strUsername"))
  5704.         user.properties.put("strClassName", "undefined")
  5705.         user.properties.put("sale", [])
  5706.         user.properties.put("dRefReset", false)
  5707.         user.properties.put("iRefExp", Integer(0))
  5708.         user.properties.put("iRefGold", Integer(0))
  5709.         user.properties.put("ig0", Integer(0))
  5710.         user.properties.put("sCountry", "US")
  5711.         user.properties.put("iSTR", Integer(0))
  5712.         user.properties.put("ip0", Integer(0))
  5713.         user.properties.put("iq0", Integer(0))
  5714.         //user.properties.put("iAge", set.getItem("iAge"))
  5715.         user.properties.put("iAge", 20)
  5716.         user.properties.put("iWIS", "0")
  5717.         user.properties.put("intExpToLevel", Number(arrLevels[Number(user.properties.get("intLevel"))]))
  5718.         user.properties.put("intGold", set.getItem("iGold"))
  5719.         user.properties.put("sHouseInfo", set.getItem("sHouseInfo"))
  5720.         user.properties.put("iBankSlots", set.getItem("iBankSlots"))
  5721.         user.properties.put("iBagSlots", set.getItem("iBagSlots"))
  5722.         user.properties.put("id1", Integer(0))
  5723.         user.properties.put("iHouseSlots", set.getItem("iHouseSlots"))
  5724.         user.properties.put("id0", Integer(0))
  5725.        
  5726.         user.properties.put("iUpg", set.getItem("iUpg"))
  5727.         if(isStaff(user)) {
  5728.             user.properties.put("iUpg", 2)
  5729.         }
  5730.        
  5731.         if(isStaff(user)) {
  5732.             user.properties.put("title", "Staff Member")
  5733.         } else if(isLegendary(user)) {
  5734.             user.properties.put("title", "Legendary")
  5735.             if(Number(user.properties.get("intAccessLevel")) < 1)
  5736.             user.properties.put("intAccessLevel", 3)
  5737.         } else if(isMember(user)) {
  5738.             user.properties.put("title", "Elite")
  5739.             if(Number(user.properties.get("intAccessLevel")) < 1)
  5740.             user.properties.put("intAccessLevel", 2)
  5741.         } else {
  5742.             user.properties.put("title", "")
  5743.         }
  5744.         if (isMember(user)) {
  5745.             user.properties.put("iUpgDays", 1337)
  5746.             user.properties.put("dUpgExp", "2017-01-01 00:00:00")
  5747.         } else {
  5748.             user.properties.put("iUpgDays", -1)
  5749.             user.properties.put("dUpgExp", "2010-01-01 00:00:00")
  5750.         }
  5751.        
  5752.         user.properties.put("iBoostXP", Integer(2))
  5753.         user.properties.put("strEmail", set.getItem("strEmail"))
  5754.         user.properties.put("iINT", Integer(0))
  5755.         user.properties.put("lastArea", set.getItem("lastArea"))
  5756.         user.properties.put("iFounder", set.getItem("iFounder"))
  5757.         user.properties.put("intDBExp", set.getItem("iExp"))
  5758.         user.properties.put("intExp", set.getItem("iExp"))
  5759.         user.properties.put("UserID", Integer(user.getUserId()))
  5760.         user.properties.put("ia1", Integer(0))
  5761.         user.properties.put("ia0", Integer(0))
  5762.         user.properties.put("dCreated", "2008-12-23T02:31:00")
  5763.         user.properties.put("strQuests", set.getItem("strQuests"))
  5764.         user.properties.put("iBoostG", Integer(3600))
  5765.         user.properties.put("bPermaMute", Integer(0))
  5766.         user.properties.put("iLCK", Integer(0))
  5767.         user.properties.put("iDailyAds", Number(set.getItem("iDailyAds")))
  5768.         user.properties.put("iDBCP", Integer(0))
  5769.         user.properties.put("intDBGold", set.getItem("iGold"))
  5770.         user.properties.put("intActivationFlag", set.getItem("iSendEmail"))
  5771.         user.properties.put("iDEX", Integer(0))
  5772.         user.properties.put("iDailyAdCap", Number(6))
  5773.         user.properties.put("intCoins", set.getItem("iCoins"))
  5774.  
  5775.                            
  5776.         user.properties.put("iEND", Integer(0))
  5777.         user.properties.put("guildId", set.getItem("guildId"))
  5778.         user.properties.put("guildRank", set.getItem("guildRank"))
  5779.         user.properties.put("haveMount", "false")
  5780.         user.properties.put("lastmap", set.getItem("lastMap"))
  5781.         user.properties.put("lastframe", set.getItem("lastFrame"))
  5782.         user.properties.put("lastpad", set.getItem("lastPad"))
  5783.         user.properties.put("lasttx", set.getItem("lastTx"))
  5784.         user.properties.put("lastty", set.getItem("lastTy"))
  5785.         user.properties.put("strFrame", "Enter")
  5786.         user.properties.put("strPad", "Spawn")
  5787.         user.properties.put("tx", set.getItem("lastTx"))
  5788.         user.properties.put("ty", set.getItem("lastTy"))
  5789.         user.properties.put("enemylist", new java.util.ArrayList())
  5790.         user.properties.put("inglobal", 1)
  5791.         user.properties.put("modOn", 0)
  5792.         var timenow = new Date()
  5793.         timenow = timenow.getTime()
  5794.         user.properties.put("lastglobal", timenow-3000)
  5795.         user.properties.put("lastaa", timenow)
  5796.         user.properties.put("ffascore", 0)
  5797.        
  5798.         user.properties.put("stunTime", 0)
  5799.         user.properties.put("blindTime", 0)
  5800.         user.properties.put("freezeTime", 0)
  5801.         user.properties.put("frozenBloodTime", 0)
  5802.  
  5803.         debug(">> User Init : " + user.getName())
  5804.     }
  5805.    
  5806.    
  5807. }
  5808.  
  5809. function getClassNameById(user, classId) {
  5810.     var classObj = worldClasses.get(Integer(classId))
  5811.     if(classObj)
  5812.     return String(classObj.sClassName)
  5813.     else
  5814.     return null
  5815. }
  5816.  
  5817. function sendUotls(user, hp, mp, level, others) {
  5818.     var room = zone.getRoom(user.getRoom())
  5819.     var userData = {}
  5820.     userData.uoName = String(user.getName())
  5821.     userData.strUsername = String(user.properties.get("strUsername"))
  5822.     userData.intState = Number(user.properties.get("intState"))
  5823.     userData.pvpTeam = Number(user.properties.get("pvpTeam"))
  5824.     userData.mpType = getManaType(user)
  5825.     if(others) {
  5826.         userData.strFrame = String(user.properties.get("strFrame"))
  5827.         userData.strPad = String(user.properties.get("strPad"))
  5828.         userData.entID = user.getUserId(),
  5829.         userData.entType = "p"
  5830.         userData.showHelm = java.lang.Boolean.parseBoolean(user.properties.get("bHelm"))
  5831.         userData.showCloak = java.lang.Boolean.parseBoolean(user.properties.get("bCloak"))
  5832.         userData.tx = Number(user.properties.get("tx"))
  5833.         userData.ty = Number(user.properties.get("ty"))
  5834.         userData.afk = java.lang.Boolean.parseBoolean(user.properties.get("afk"))
  5835.     }
  5836.     if(level) {
  5837.         userData.intLevel = Number(user.properties.get("intLevel"))
  5838.     }
  5839.     if(hp) {
  5840.         userData.intHP = Number(user.properties.get("intHP"))
  5841.         userData.intHPMax = Number(user.properties.get("intHPMax"))
  5842.     }
  5843.     if(mp) {
  5844.         userData.intMP = Number(user.properties.get("intMP"))
  5845.         userData.intMPMax = Number(user.properties.get("intMPMax"))
  5846.     }
  5847.    
  5848.     var wat = {"cmd": "notls", "o": userData, "unm": String(user.getName())}
  5849.     if(modOn(user))
  5850.     _server.sendResponse(wat, -1, null, [user], "json")
  5851.     else
  5852.     _server.sendResponse(wat, -1, null, room.getAllUsers(), "json")
  5853. }
  5854.  
  5855. function savePos(user) {
  5856.     var room = zone.getRoom(user.getRoom())
  5857.     var lastm = String(room.getName())
  5858.     var lastf = user.properties.get("strFrame")
  5859.     var lastp = user.properties.get("strPad")
  5860.     var lasttx = user.properties.get("tx")
  5861.     var lastty = user.properties.get("ty")
  5862.     var mapName = String(room.getName()).toLowerCase().split("-")[0]
  5863.     var roomGuild = (String(worldMaps.get(String(mapName)).sExtra) == "bGuild")
  5864.     if(!roomGuild)
  5865.     dbase.executeCommand("UPDATE etl_users SET lastMap='"+String(lastm)+"', lastFrame='"+String(lastf)+"', lastPad='"+String(lastp)+"', lastTx='"+String(lasttx)+"', lastTy='"+String(lastty)+"' WHERE id=" + user.properties.get("CharID"))
  5866. }
  5867.  
  5868.  
  5869. function lastPos(user) {
  5870.     var lastf = user.properties.get("lastframe")
  5871.     var lastp = user.properties.get("lastpad")
  5872.     user.properties.put("strFrame", String(lastf))
  5873.     user.properties.put("strPad", String(lastp))
  5874.     //trace(String(user.properties.get("lastmap")))
  5875.     joinRoom(user, String(user.properties.get("lastmap")), false, String(user.properties.get("strFrame")), String(user.properties.get("strPad")))
  5876. }
  5877.  
  5878. function exitUser(room, user) {
  5879.     var exit = ["exitAreaU", user.getUserId(), user.getName()]
  5880.     if(room) {
  5881.         _server.sendResponse(exit, -1, null, room.getAllUsersButOne(user), "str")
  5882.     }
  5883. }
  5884.  
  5885. function sendLoginError(chan, nick, msg) {
  5886.     var wrongVersion = []
  5887.     wrongVersion.push("doLogin")
  5888.     wrongVersion.push(false)
  5889.     wrongVersion.push(-1)
  5890.     wrongVersion.push(nick)
  5891.     wrongVersion.push(String(msg))
  5892.     _server.sendResponse(wrongVersion, -1, null, chan, "str")
  5893.  
  5894. }
  5895.  
  5896. function userOnlinePressence(user) {
  5897.     dbase.executeCommand("UPDATE etl_users SET currentServer='"+GLOBAL_VARIABLES["SERVER_NAME"]+"' WHERE strUsername='" + user.getName() + "'")
  5898.     sendGuildList(user)
  5899.     var friendOnline = {"cmd": "updateFriend", "friend": getFriendInfo(user.properties.get("CharID"))}
  5900.     _server.sendResponse(friendOnline, -1, null, getFriendUsers(user, false), "json")
  5901.     _server.sendResponse(["server", user.getName() + " has logged on."], -1, null, getFriendUsers(user, false), "str")
  5902. }
  5903. function userOfflinePressence(user) {
  5904.     dbase.executeCommand("UPDATE etl_users SET currentServer='Offline' WHERE strUsername='" + user.getName() + "'")
  5905.     sendGuildList(user)
  5906.     var friendOnline = {"cmd": "updateFriend", "friend": getFriendInfo(user.properties.get("CharID"))}
  5907.     _server.sendResponse(friendOnline, -1, null, getFriendUsers(user, false), "json")
  5908.     _server.sendResponse(["server", user.getName() + " has logged off."], -1, null, getFriendUsers(user, false), "str")
  5909. }
  5910.  
  5911. function handleInternalEvent(evt)
  5912. {  
  5913.     //trace("System event: " + evt.name)
  5914.     if(evt.name == "userJoin") {
  5915.         var room = evt["room"]
  5916.         var user = evt["user"]
  5917.         //sendUotls(user, true, true, true, true)
  5918.     }
  5919.     if(evt.name == "serverReady") {
  5920.         debug(GLOBAL_VARIABLES["SERVER_NAME"] + " now online.")
  5921.     }
  5922.     if(evt.name == "userExit") {
  5923.         var room = evt["room"]
  5924.         stopFights(user, room)
  5925.         //destroyEmptyRooms()
  5926.         refreshFFAScore(evt["room"])
  5927.         exitUser(evt["room"], evt["user"])
  5928.     }
  5929.     if(evt.name == "userLost") {
  5930.         var user = evt["user"]
  5931.         var room = zone.getRoom(user.getRoom())
  5932.         exitUser(zone.getRoom(user.getRoom()), user)
  5933.         dbase.executeCommand("UPDATE etl_servers SET iCount="+zone.getUserCount()+" WHERE sName='" + GLOBAL_VARIABLES["SERVER_NAME"] + "'")
  5934.         userOfflinePressence(user)
  5935.         doTestStacks1 = 0;
  5936.     }
  5937.     if (evt.name == "loginRequest") {
  5938.         var token = String(evt["nick"]).split("~")[0]
  5939.         var nick = String(evt["nick"]).split("~")[1]
  5940.         var pass = String(evt["pass"])
  5941.         var chan = evt["chan"]
  5942.        
  5943.         if(String(token) != String(GLOBAL_VARIABLES["clientToken"])) {
  5944.             sendLoginError(chan, nick, "Your client is outdated. Please refresh the page.")
  5945.             return
  5946.         }
  5947.         var query = "SELECT iUpg,iAccess,bGoto,bFriend,bParty,bDuel,bWhisper,banned,id FROM etl_users WHERE strUsername='"+ _server.escapeQuotes(nick) +"' AND strPassword='"+ _server.escapeQuotes(pass) +"'"
  5948.        
  5949.        
  5950.         var id
  5951.         var user
  5952.         var queryRes = dbase.executeQuery(query)
  5953.         var login = []
  5954.         if (queryRes != null && queryRes.size() > 0) {
  5955.             var set = queryRes.get(0)
  5956.             if(viponly == 1 && (set.getItem("iUpg") == 0 && Integer(set.getItem("iAccess")) < 40)) {
  5957.                 sendLoginError(chan, nick, "We are sorry, but only Members are allowed to play at this time. Upgrade your account to access the server.")
  5958.                 return
  5959.             }
  5960.             if(staffonly == 1 && Integer(set.getItem("iAccess")) < 40) {
  5961.                 sendLoginError(chan, nick, "Update in progress. Please wait!")
  5962.                 return
  5963.             }
  5964.             if(set.getItem("banned") == 1) {
  5965.                 sendLoginError(chan, nick, "You are banned.")
  5966.                 return
  5967.             }
  5968.             ifloged = getUserByName(String(nick.toLowerCase()))
  5969.             if(ifloged != null) {
  5970.                 _server.sendResponse(["multiLoginWarning"], -1, null, [ifloged], "str")
  5971.                 //_server.disconnectUser(ifloged)
  5972.                 _server.logoutUser(ifloged, true, true)
  5973.             }
  5974.             var loginPass = _server.loginUser(nick.toLowerCase(), pass, chan)
  5975.             if(loginPass.success == true) {
  5976.                 user = _server.getUserByChannel(chan)
  5977.                
  5978.                 if(nick == "iterator") {
  5979.                     user.properties.put("intAccessLevel", 100)
  5980.                     login.push("loginIterator")
  5981.                     login.push(true)
  5982.                     login.push(user.getUserId())
  5983.                     login.push(nick)
  5984.                     _server.sendResponse(login, -1, null, chan, "str")
  5985.                     return
  5986.                 }
  5987.                
  5988.                 user.properties.put("CharID", queryRes.get(0).getItem("id"))
  5989.                 user.properties.put("regip", String(queryRes.get(0).getItem("registered_ip")))
  5990.                 user.properties.put("firstJoin", 1)
  5991.  
  5992.                 initUserData(user)
  5993.                
  5994.                 //_server.sendResponse(prefmessages["bParty~" + set.getItem("bParty")], -1, null, chan, "str")
  5995.                 //_server.sendResponse(prefmessages["bGoto~" + set.getItem("bGoto")], -1, null, chan, "str")
  5996.                 //_server.sendResponse(prefmessages["bFriend~" + set.getItem("bFriend")], -1, null, chan, "str")
  5997.                 //_server.sendResponse(prefmessages["bWhisper~" + set.getItem("bWhisper")], -1, null, chan, "str")
  5998.                 //_server.sendResponse(prefmessages["bDuel~" + set.getItem("bDuel")], -1, null, chan, "str")
  5999.                
  6000.                 myDate = new String("")
  6001.                 today = new Date()
  6002.                 myYear = String(today.getFullYear())
  6003.                 myDay = String(today.getUTCDate())
  6004.                 if(myDay.length == 1) myDay = "0" + myDay
  6005.                 myMonth = String(today.getMonth() + 1)
  6006.                 if(myMonth.length == 1) myMonth = "0" + myMonth
  6007.                 myHours = String(today.getHours())
  6008.                 if(myHours.length == 1) myHours = "0" + myHours
  6009.                 myMinutes = String(today.getMinutes())
  6010.                 if(myMinutes.length == 1) myMinutes = "0" + myMinutes
  6011.                 mySeconds = String(today.getSeconds())
  6012.                 if(mySeconds.length == 1) mySeconds = "0" + mySeconds
  6013.                 myDate = myYear + "-" + myMonth + "-" + myDay + "T" + myHours + ":" + myMinutes + ":" + mySeconds
  6014.                
  6015.                 login.push("doLogin")
  6016.                 login.push(true)
  6017.                 login.push(user.getUserId())
  6018.                 login.push(nick)
  6019.                 login.push("EliteQuest Worlds is back! Please tell your friends and help us improve the game!")
  6020.                 login.push(myDate)
  6021.                 login.push("sNews=news/News-30Nov12.swf,sMap=news/Map-25May12.swf,sBook=news/Book-revamp-29Nov12.swf,sFBC=FBC-2011-03-08.swf,sAssets=Assets_20131015.swf,sWTSandbox=false")
  6022.                 login.push("xyo")
  6023.                 login.push(chatData)
  6024.                 _server.sendResponse(login, -1, null, chan, "str")
  6025.                
  6026.                
  6027.                
  6028.                 sendCVU(user)
  6029.                 dbase.executeCommand("UPDATE etl_servers SET iCount="+zone.getUserCount()+" WHERE sName='" + GLOBAL_VARIABLES["SERVER_NAME"] + "'")
  6030.                 userOnlinePressence(user)
  6031.             } else {
  6032.                 sendLoginError(chan, nick, "Login fail.")
  6033.             }
  6034.         } else {
  6035.             sendLoginError(chan, nick, "Wrong username or password.")
  6036.         }
  6037.     }
  6038. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement