From efc8884e19e9fb712d0f5a2d9b5f7ed3d8f9164d Mon Sep 17 00:00:00 2001 From: ronancpl Date: Thu, 31 Jan 2019 00:49:15 -0200 Subject: [PATCH] Mob aggro overhaul + STR-DEX autoassign patch + Guild & Pl. Store fix Reviewed Monster Magnet skill effect on mobs, now properly showing up to other players. Reworked concurrency protection on login handler, now properly synchronizing requests for the same accountId. Reviewed an expedition issue with attempting to send packets on loggedoff players. Expeditions no longer holds a character object list of its own, rather finding players through their id on the world storage. Added stat requirement definition as first message on 1st job NPCs. Fixed an issue with area triggered NPC conversations not getting properly disposed. Reviewed "launch.bat", internally referencing Java7 engine. Assuming it has been installed in the default directory on the system, it's no longer necessary to set precedence on PATH for it. Fixed need for "reapproval from the 3rd job instructors" to attempt Zakum once more. Reviewed goto command. Non-GM's no longer has access to area maps, only towns. Implemented a new server flag for enforcing base rates (server rate: 1x) on players level 10 or lower. Fixed player guild tooltips not being properly marshalled to others on the map, at the event of several guild actions. Reviewed event system allowing creation of same-name events, potentially leading to null EIM problems. Refactored some locks on MapleCharacter, potentially solving a deadlock case within expiring/forfeiting quest methods. Implemented a major overhaul on mob aggro system, now updating player aggro in real-time based on their latest DPS. Properly refactored and encapsulated aggro mechanics. Fixed NPE on disposing events with alive mobs. Added server-side birthday check handling when opening player shops or merchants having cash items in store. Fixed player shop tooltip not finishing properly when shop owner closes store with visitors still in there. Fixed forceChangeMap method not warping players to the designated event map (rather sending them to the starting event map). Reviewed "summon" command, now using forceChangeMap, also changing channels if needed. Reworked HeavenMS autoassigner: STR-based classes now ups a bit more DEX than before, since its a vital attribute for accuracy on their actions. Added meso ceil check on player transactions. Trades now gets suspended if the max amount is reached. Implemented server-side item limit check on player shops and merchants. Fixed an exploit with merchants, on where players would be able to save the selling item on DB before taking from inventory. --- README.md | 5 +- cores/HikariCP-java7-2.4.12.jar | Bin 134308 -> 0 bytes cores/HikariCP-java7-2.4.13.jar | Bin 0 -> 134017 bytes cores/slf4j-api-1.6.6.jar | Bin 26176 -> 0 bytes cores/slf4j-api-1.7.21.jar | Bin 0 -> 41071 bytes docs/mychanges_ptbr.txt | 48 +- launch.bat | 1 + nbproject/project.properties | 8 +- scripts/npc/1012100.js | 27 +- scripts/npc/1013001.js | 2 +- scripts/npc/1022000.js | 25 +- scripts/npc/1032001.js | 25 +- scripts/npc/1052001.js | 30 +- scripts/npc/1061014.js | 12 +- scripts/npc/1090000.js | 27 +- scripts/npc/2020008.js | 2 +- scripts/npc/2020009.js | 2 +- scripts/npc/2020010.js | 2 +- scripts/npc/2020011.js | 2 +- scripts/npc/2020013.js | 2 +- scripts/npc/2030006.js | 4 +- scripts/npc/2030008.js | 2 +- scripts/npc/2030013.js | 12 +- scripts/npc/2083004.js | 12 +- scripts/npc/2141001.js | 12 +- scripts/npc/9120201.js | 12 +- scripts/npc/9201014.js | 2 +- scripts/npc/9201113.js | 12 +- scripts/npc/9270047.js | 12 +- scripts/npc/9977777.js | 3 + scripts/portal/Zakum05.js | 2 +- scripts/quest/20101.js | 6 + scripts/quest/20102.js | 6 + scripts/quest/20103.js | 6 + scripts/quest/20104.js | 9 +- scripts/quest/20105.js | 6 + scripts/quest/21101.js | 2 +- scripts/quest/21201.js | 2 +- scripts/quest/21302.js | 2 +- sql/db_database.sql | 15 +- sql/db_drops.sql | 4 +- src/client/MapleCharacter.java | 148 +- src/client/MapleClient.java | 14 +- .../command/commands/gm0/RatesCommand.java | 2 +- .../commands/gm0/ShowRatesCommand.java | 4 +- .../command/commands/gm1/GotoCommand.java | 9 +- .../command/commands/gm2/SummonCommand.java | 36 +- .../command/commands/gm2/WarpAreaCommand.java | 3 +- .../command/commands/gm2/WarpMapCommand.java | 3 +- .../command/commands/gm3/ExpedsCommand.java | 8 +- .../commands/gm3/ReloadMapCommand.java | 3 +- .../commands/gm3/WarpSnowBallCommand.java | 11 +- .../command/commands/gm5/DebugCommand.java | 2 +- src/client/inventory/Item.java | 11 +- src/client/processor/AssignAPProcessor.java | 112 +- src/client/processor/DueyProcessor.java | 17 +- src/client/processor/FredrickProcessor.java | 2 +- src/constants/GameConstants.java | 36 +- src/constants/ServerConstants.java | 12 +- src/net/opcodes/SendOpcode.java | 6 +- src/net/server/audit/ThreadTracker.java | 1 - .../server/audit/locks/MonitoredLockType.java | 3 + .../handlers/AbstractDealDamageHandler.java | 2 +- .../AbstractMovementPacketHandler.java | 14 +- .../channel/handlers/AutoAggroHandler.java | 25 +- .../handlers/GuildOperationHandler.java | 15 +- .../channel/handlers/MoveLifeHandler.java | 28 +- .../handlers/PlayerInteractionHandler.java | 73 +- .../handlers/PlayerLoggedinHandler.java | 604 +- .../channel/handlers/SpecialMoveHandler.java | 24 +- .../channel/handlers/TakeDamageHandler.java | 2 +- .../MapleMonsterAggroCoordinator.java | 371 + src/net/server/guild/MapleGuild.java | 33 +- src/net/server/world/World.java | 10 +- src/scripting/AbstractPlayerInteraction.java | 11 +- src/scripting/event/EventInstanceManager.java | 23 +- src/scripting/event/EventManager.java | 62 +- src/scripting/npc/NPCConversationManager.java | 1 + src/server/MapleTrade.java | 16 + src/server/expeditions/MapleExpedition.java | 114 +- src/server/life/MapleMonster.java | 398 +- .../life/MapleMonsterInformationProvider.java | 27 +- src/server/life/MonsterGlobalDropEntry.java | 7 +- src/server/maps/MapleHiredMerchant.java | 29 +- src/server/maps/MapleMap.java | 134 +- src/server/maps/MaplePlayerShop.java | 39 +- src/server/movement/AbsoluteLifeMovement.java | 12 +- src/server/movement/ChairMovement.java | 12 +- src/server/movement/JumpDownMovement.java | 24 +- src/server/quest/actions/ExpAction.java | 16 +- src/server/quest/actions/MesoAction.java | 8 +- src/tools/LogHelper.java | 4 +- src/tools/MaplePacketCreator.java | 76 +- .../MapleEventMethodFiller.java | 2 +- wz/Map.wz/Map/Map0/001000006.img.xml | 30 +- wz/Map.wz/Map/Map0/001010400.img.xml | 24 +- wz/Map.wz/Map/Map1/105090310.img.xml | 30605 ++++++++-------- wz/Quest.wz/Check.img.xml | 2 +- wz/Quest.wz/QuestInfo.img.xml | 4 +- wz/Quest.wz/Say.img.xml | 7 +- wz/Skill.wz/MobSkill.img.xml | 2 +- 101 files changed, 17235 insertions(+), 16461 deletions(-) delete mode 100644 cores/HikariCP-java7-2.4.12.jar create mode 100644 cores/HikariCP-java7-2.4.13.jar delete mode 100644 cores/slf4j-api-1.6.6.jar create mode 100644 cores/slf4j-api-1.7.21.jar create mode 100644 src/net/server/coordinator/MapleMonsterAggroCoordinator.java diff --git a/README.md b/README.md index f82f4bf60a..df258ac230 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Besides myself for maintaining this repository, credits are to be given to Wizet Regarding distributability and usage of the code presented here: like it was before, this MapleStory server is open-source. By that, it is meant that anyone is **free to install, use, modify and redistribute the contents**, as long as there is **no kind of commercial trading involved** and the **credits to the original creators are maintained** within the codes. -This is a NetBeans 8.0.2 Project, that MUST be built and run under JDK/JRE 7 (1.7.0_79+) in order to run properly. This means that it's easier to install the project via opening the server project folder inside NetBeans' IDE. Once installed, build this project on your machine and run the server using the "launch.bat" application. +This is a NetBeans 8.0.2 Project, that MUST be built and run on Java 7 (JDK/JRE 1.7.0_79+) in order to run properly. This means that it's easier to install the project via opening the server project folder inside NetBeans' IDE. Once installed, build this project on your machine and run the server using the "launch.bat" application. In this project, many gameplay-wise issues generated from either the original WZ files and the server source have been partially or completely solved. Considering the use of the provided edited WZ's and server-side wz.xml files should be of the greatest importance when dealing with this instance of server source, in order to perceive it at it's full potential. My opinion, though! @@ -19,6 +19,8 @@ Server files: https://github.com/ronancpl/HeavenMS Client files & general tools: https://drive.google.com/drive/folders/0BzDsHSr-0V4MYVJ0TWIxd05hYUk +Java7 SDK: https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html + **Important note about localhosts**: these executables are red-flagged by antivirus tools as __potentially malicious softwares__, this happens due to the reverse engineering methods that were applied onto these software artifacts. Those depicted here have been put to use for years already and posed no harm so far, so they are soundly assumed to be safe. Latest localhost: https://hostr.co/m2bVtnizCtmD @@ -81,6 +83,7 @@ It's never enough to tell this, thanks to everyone that have been contributing s Our Discord channel is still available on: https://discord.gg/Q7wKxHX + ### Donation If you REALLY liked what you have seen on the project, please feel free to donate a little something as a helping hand for my contributions towards Maple development. Also remember to **support Nexon**! diff --git a/cores/HikariCP-java7-2.4.12.jar b/cores/HikariCP-java7-2.4.12.jar deleted file mode 100644 index 792b6905644606c2982d4b3648f494a0586c7c90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134308 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
    ;x4=VM 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 z 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 diff --git a/cores/HikariCP-java7-2.4.13.jar b/cores/HikariCP-java7-2.4.13.jar new file mode 100644 index 0000000000000000000000000000000000000000..6506cbac92c9bef6ee99bd529454addf3685a188 GIT binary patch literal 134017 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

    s(vHp0ic)6c`=Bn)@%YVr-KdnS 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

    @;-Zu>K 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 J6s#m*{{zRfanJw& literal 0 HcmV?d00001 diff --git a/cores/slf4j-api-1.6.6.jar b/cores/slf4j-api-1.6.6.jar deleted file mode 100644 index 4c03fa6bb21496873cc90e5442f89905c95e7316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26176 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 dq1Rl$mUFfcUNU*L5XivIO){|AIF>74)o diff --git a/cores/slf4j-api-1.7.21.jar b/cores/slf4j-api-1.7.21.jar new file mode 100644 index 0000000000000000000000000000000000000000..2a5c33ec55491e5b4be53525d8d7242e53e020c0 GIT binary patch literal 41071 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 R2!tB=Hz= 10 && cm.canGetFirstJob(jobType)) - cm.sendNext("So you decided to become a #rBowman#k?"); - else { - cm.sendOk("Train a bit more until you reach #blevel 10, " + cm.getFirstJobStatRequirement(jobType) + "#k and I can show you the way of the #rBowman#k."); - cm.dispose(); - } + cm.sendNext("So you decided to become a #rbowman#k? There are some standards to meet, y'know... #bYour level should be at least 10, with at least " + cm.getFirstJobStatRequirement(jobType) + "#k. Let's see."); // thanks Vcoc for noticing a need to state and check requirements on first job adv starting message } else if (cm.getLevel() >= 30 && cm.getJobId() == 300) { actionx["2ndJob"] = true; if (cm.haveItem(4031012)) @@ -79,8 +74,13 @@ function start() { function action(mode, type, selection) { status++; - if (mode == 0 && type != 1) + if (mode == -1 && selection == -1) { + cm.dispose(); + return; + } else if (mode == 0 && type != 1) { status -= 2; + } + if (status == -1){ start(); return; @@ -116,10 +116,15 @@ function action(mode, type, selection) { } if (actionx["1stJob"]){ - if (status == 0) - cm.sendNextPrev("It is an important and final choice. You will not be able to turn back."); - else if (status == 1){ - if (cm.canHold(1452051) && cm.canHold(2060000)){ + if (status == 0) { + if (cm.getLevel() >= 10 && cm.canGetFirstJob(jobType)) { + cm.sendNextPrev("It is an important and final choice. You will not be able to turn back."); + } else { + cm.sendOk("Train a bit more until you reach the base requirements and I can show you the way of the #rBowman#k."); + cm.dispose(); + } + } else if (status == 1){ + if (cm.canHold(1452051) && cm.canHold(2070000)){ if (cm.getJobId() == 0){ cm.changeJobById(300); cm.gainItem(1452051, 1); diff --git a/scripts/npc/1013001.js b/scripts/npc/1013001.js index 89c035317c..ba4813df37 100644 --- a/scripts/npc/1013001.js +++ b/scripts/npc/1013001.js @@ -8,7 +8,7 @@ function action(mode, type, selection) { if (mode == 0 && type == 0) { status--; } else if (mode == -1) { - qm.dispose(); + cm.dispose(); return; } else { status++; diff --git a/scripts/npc/1022000.js b/scripts/npc/1022000.js index a112e93b0c..4d4aaeae59 100644 --- a/scripts/npc/1022000.js +++ b/scripts/npc/1022000.js @@ -47,12 +47,7 @@ function start() { } else { if (cm.getJobId() == 0) { actionx["1stJob"] = true; - if (cm.getLevel() >= 10 && cm.canGetFirstJob(jobType)) - cm.sendNext("Do you want to become a Warrior? You need to meet some criteria in order to do so.#b You should be at least in level 10, with at least 35 in STR#k. Let's see..."); - else { - cm.sendOk("Train a bit more until you reach #blevel 10, " + cm.getFirstJobStatRequirement(jobType) + "#k and I can show you the way of the #rWarrior#k."); - cm.dispose(); - } + cm.sendNext("Do you want to become a #rwarrior#k? You need to meet some criteria in order to do so.#b You should be at least in level 10, and at least " + cm.getFirstJobStatRequirement(jobType) + "#k. Let's see..."); // thanks Vcoc for noticing a need to state and check requirements on first job adv starting message } else if (cm.getLevel() >= 30 && cm.getJobId() == 100) { actionx["2ndJob"] = true; if (cm.haveItem(4031012)) @@ -80,8 +75,13 @@ function start() { function action(mode, type, selection) { status++; - if (mode == 0 && type != 1) + if (mode == -1 && selection == -1) { + cm.dispose(); + return; + } else if (mode == 0 && type != 1) { status -= 2; + } + if (status == -1){ start(); return; @@ -117,9 +117,14 @@ function action(mode, type, selection) { } if (actionx["1stJob"]){ - if (status == 0) - cm.sendNextPrev("It is an important and final choice. You will not be able to turn back."); - else if (status == 1){ + if (status == 0) { + if (cm.getLevel() >= 10 && cm.canGetFirstJob(jobType)) { + cm.sendNextPrev("It is an important and final choice. You will not be able to turn back."); + } else { + cm.sendOk("Train a bit more until you reach the base requirements and I can show you the way of the #rWarrior#k."); + cm.dispose(); + } + } else if (status == 1){ if (cm.canHold(1302077)){ if (cm.getJobId() == 0){ cm.changeJobById(100); diff --git a/scripts/npc/1032001.js b/scripts/npc/1032001.js index 1d501ebf8c..98bb35d84a 100644 --- a/scripts/npc/1032001.js +++ b/scripts/npc/1032001.js @@ -47,12 +47,7 @@ function start() { } else { if (cm.getJobId() == 0) { actionx["1stJob"] = true; - if (cm.getLevel() >= 8 && cm.canGetFirstJob(jobType)) - cm.sendNext("Want to be a magician? There are some standards to meet. because we can't just accept EVERYONE in... #bYour level should be at least 8#k, with getting INT as your top priority. Let's see."); - else { - cm.sendOk("Train a bit more until you reach #blevel 8, " + cm.getFirstJobStatRequirement(jobType) + "#k and I can show you the way of the #rMagician#k."); - cm.dispose(); - } + cm.sendNext("Want to be a #rmagician#k? There are some standards to meet. because we can't just accept EVERYONE in... #bYour level should be at least 8#k, with getting " + cm.getFirstJobStatRequirement(jobType) + " as your top priority. Let's see."); // thanks Vcoc for noticing a need to state and check requirements on first job adv starting message } else if (cm.getLevel() >= 30 && cm.getJobId() == 200) { actionx["2ndJob"] = true; if (cm.haveItem(4031012)) @@ -80,8 +75,13 @@ function start() { function action(mode, type, selection) { status++; - if (mode == 0 && type == 0) + if (mode == -1 && selection == -1) { + cm.dispose(); + return; + } else if (mode == 0 && type == 0) { status -= 2; + } + if (status == -1){ start(); return; @@ -117,9 +117,14 @@ function action(mode, type, selection) { } if (actionx["1stJob"]){ - if (status == 0) - cm.sendYesNo("Oh...! You look like someone that can definitely be a part of us... all you need is a little sinister mind, and... yeah... so, what do you think? Wanna be the Magician?"); - else if (status == 1){ + if (status == 0) { + if (cm.getLevel() >= 8 && cm.canGetFirstJob(jobType)) { + cm.sendYesNo("Oh...! You look like someone that can definitely be a part of us... all you need is a little sinister mind, and... yeah... so, what do you think? Wanna be the Magician?"); + } else { + cm.sendOk("Train a bit more until you reach the base requirements and I can show you the way of the #rMagician#k."); + cm.dispose(); + } + } else if (status == 1){ if (cm.canHold(1372043)){ if (cm.getJobId() == 0){ cm.changeJobById(200); diff --git a/scripts/npc/1052001.js b/scripts/npc/1052001.js index 3f76c7fb14..a9ae74c161 100644 --- a/scripts/npc/1052001.js +++ b/scripts/npc/1052001.js @@ -46,12 +46,7 @@ function start() { } else { if (cm.getJobId() == 0) { actionx["1stJob"] = true; - if (cm.getLevel() >= 10 && cm.canGetFirstJob(jobType)) - cm.sendNext("Want to be a thief? There are some standards to meet. because we can't just accept EVERYONE in... #bYour level should be at least 10, with your DEX over 25#k. Let's see."); - else { - cm.sendOk("Train a bit more until you reach #blevel 10, " + cm.getFirstJobStatRequirement(jobType) + "#k and I can show you the way of the #rThief#k."); - cm.dispose(); - } + cm.sendNext("Want to be a #rthief#k? There are some standards to meet. because we can't just accept EVERYONE in... #bYour level should be at least 10, with at least your " + cm.getFirstJobStatRequirement(jobType) + "#k. Let's see."); // thanks Vcoc for noticing a need to state and check requirements on first job adv starting message } else if (cm.getLevel() >= 30 && cm.getJobId() == 400) { actionx["2ndJob"] = true; if (cm.haveItem(4031012)) @@ -81,8 +76,13 @@ function start() { function action(mode, type, selection) { status++; - if (mode == 0 && type != 1) + if (mode == -1 && selection == -1) { + cm.dispose(); + return; + } else if (mode == 0 && type != 1) { status -= 2; + } + if (status == -1){ start(); return; @@ -118,14 +118,20 @@ function action(mode, type, selection) { } if (actionx["1stJob"]){ - if (status == 0) - cm.sendYesNo("Oh...! You look like someone that can definitely be a part of us... all you need is a little sinister mind, and... yeah... so, what do you think? Wanna be the Rogue?"); - else if (status == 1){ - if (cm.canHold(2070000) && cm.canHold(1472061)){ + if (status == 0) { + if (cm.getLevel() >= 10 && cm.canGetFirstJob(jobType)) + cm.sendYesNo("Oh...! You look like someone that can definitely be a part of us... all you need is a little sinister mind, and... yeah... so, what do you think? Wanna be the Rogue?"); + else { + cm.sendOk("Train a bit more until you reach the base requirements and I can show you the way of the #rThief#k."); + cm.dispose(); + } + } else if (status == 1){ + if (cm.canHold(2070000) && cm.canHoldAll([1472061, 1332063])){ if (cm.getJobId() == 0){ cm.changeJobById(400); - cm.gainItem(2070000, 500); + cm.gainItem(2070015, 500); cm.gainItem(1472061, 1); + cm.gainItem(1332063, 1); cm.resetStats(); } cm.sendNext("Alright, from here out, you are a part of us! You'll be living the life of a wanderer at ..., but just be patient as soon, you'll be living the high life. Alright, it ain't much, but I'll give you some of my abilities... HAAAHHH!!!"); diff --git a/scripts/npc/1061014.js b/scripts/npc/1061014.js index 8d6e5b4932..b7c51c4891 100644 --- a/scripts/npc/1061014.js +++ b/scripts/npc/1061014.js @@ -29,6 +29,7 @@ importPackage(Packages.scripting.event); var status = 0; var expedition; +var expedMembers; var player; var em; var exped = MapleExpeditionType.BALROG_NORMAL; @@ -68,7 +69,7 @@ function action(mode, type, selection) { status = 2; } else if (expedition.isRegistering()) { //If the expedition is registering if (expedition.contains(player)) { //If you're in it but it hasn't started, be patient - cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin the expedition."); + cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin it."); cm.dispose(); } else { //If you aren't in it, you're going to get added cm.sendOk(expedition.addMember(cm.getPlayer())); @@ -120,7 +121,8 @@ function action(mode, type, selection) { cm.dispose(); return; } - var size = expedition.getMembers().size(); + expedMembers = expedition.getMemberList(); + var size = expedMembers.size(); if (size == 1) { cm.sendOk("You are the only member of the expedition."); cm.dispose(); @@ -129,13 +131,13 @@ function action(mode, type, selection) { var text = "The following members make up your expedition (Click on them to expel them):\r\n"; text += "\r\n\t\t1." + expedition.getLeader().getName(); for (var i = 1; i < size; i++) { - text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedition.getMembers().get(i).getName() + "#l\n"; + text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedMembers.get(i).getValue() + "#l\n"; } cm.sendSimple(text); status = 6; } else if (selection == 2) { var min = exped.getMinSize(); - var size = expedition.getMembers().size(); + var size = expedition.getMemberList().size(); if (size < min) { cm.sendOk("You need at least " + min + " players registered in your expedition."); cm.dispose(); @@ -170,7 +172,7 @@ function action(mode, type, selection) { return; } else if (status == 6) { if (selection > 0) { - var banned = expedition.getMembers().get(selection - 1); + var banned = expedMembers.get(selection - 1); expedition.ban(banned); cm.sendOk("You have banned " + banned.getName() + " from the expedition."); cm.dispose(); diff --git a/scripts/npc/1090000.js b/scripts/npc/1090000.js index 8595f29c3f..60b573219d 100644 --- a/scripts/npc/1090000.js +++ b/scripts/npc/1090000.js @@ -77,12 +77,7 @@ function start() { } else { if (cm.getJobId() == 0) { actionx["1stJob"] = true; - if (cm.getLevel() >= 10 && cm.canGetFirstJob(jobType)) - cm.sendNext("Want to be a pirate? There are some standards to meet. because we can't just accept EVERYONE in... #bYour level should be at least 10#k. Let's see."); - else { - cm.sendOk("Train a bit more until you reach #blevel 10, " + cm.getFirstJobStatRequirement(jobType) + "#k and I can show you the way of the #rPirate#k."); - cm.dispose(); - } + cm.sendNext("Want to be a #rpirate#k? There are some standards to meet. because we can't just accept EVERYONE in... #bYour level should be at least 10, with " + cm.getFirstJobStatRequirement(jobType) + " minimum#k. Let's see."); // thanks Vcoc for noticing a need to state and check requirements on first job adv starting message } else if (cm.getLevel() >= 30 && cm.getJobId() == 500) { actionx["2ndJob"] = true; if (cm.isQuestCompleted(2191) || cm.isQuestCompleted(2192)) @@ -107,8 +102,13 @@ function start() { function action(mode, type, selection) { status++; - if (mode == 0 && type != 1) + if (mode == -1 && selection == -1) { + cm.dispose(); + return; + } else if (mode == 0 && type != 1) { status -= 2; + } + if (status == -1){ start(); return; @@ -161,10 +161,15 @@ function action(mode, type, selection) { } if (actionx["1stJob"]){ - if (status == 0) - cm.sendYesNo("Oh...! You look like someone that can definitely be a part of us... all you need is a little slang, and... yeah... so, what do you think? Wanna be the Pirate?"); - else if (status == 1){ - if (cm.canHold(2070000) && cm.canHold(1472061)){ + if (status == 0) { + if (cm.getLevel() >= 10 && cm.canGetFirstJob(jobType)) { + cm.sendYesNo("Oh...! You look like someone that can definitely be a part of us... all you need is a little slang, and... yeah... so, what do you think? Wanna be the Pirate?"); + } else { + cm.sendOk("Train a bit more until you reach the base requirements and I can show you the way of the #rPirate#k."); + cm.dispose(); + } + } else if (status == 1){ + if (cm.canHold(2070000) && cm.canHoldAll([1482000, 1492000])){ if (cm.getJobId() == 0){ cm.changeJobById(500); cm.gainItem(1492000, 1); diff --git a/scripts/npc/2020008.js b/scripts/npc/2020008.js index 2ce3f079ad..bfe4b52f82 100644 --- a/scripts/npc/2020008.js +++ b/scripts/npc/2020008.js @@ -141,7 +141,7 @@ function action(mode, type, selection){ } else { if (cm.getPlayer().getLevel() >= 50){ cm.sendNext("Ok, go."); - if(!cm.isQuestStarted(100200)) cm.startQuest(100200); + if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) cm.startQuest(100200); if(Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS && !cm.isQuestCompleted(100201)) cm.completeQuest(100201); }else cm.sendNext("You're weak."); diff --git a/scripts/npc/2020009.js b/scripts/npc/2020009.js index 39ab767c6c..a44bdcf957 100644 --- a/scripts/npc/2020009.js +++ b/scripts/npc/2020009.js @@ -113,7 +113,7 @@ function action(mode, type, selection){ } else { if (cm.getPlayer().getLevel() >= 50){ cm.sendNext("Ok, go."); - if(!cm.isQuestStarted(100200)) cm.startQuest(100200); + if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) cm.startQuest(100200); if(Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS && !cm.isQuestCompleted(100201)) cm.completeQuest(100201); }else cm.sendNext("You're weak."); diff --git a/scripts/npc/2020010.js b/scripts/npc/2020010.js index cab227ff6f..6c51b76405 100644 --- a/scripts/npc/2020010.js +++ b/scripts/npc/2020010.js @@ -114,7 +114,7 @@ function action(mode, type, selection){ } else { if (cm.getPlayer().getLevel() >= 50){ cm.sendNext("Ok, go."); - if(!cm.isQuestStarted(100200)) cm.startQuest(100200); + if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) cm.startQuest(100200); if(Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS && !cm.isQuestCompleted(100201)) cm.completeQuest(100201); }else cm.sendNext("You're weak."); diff --git a/scripts/npc/2020011.js b/scripts/npc/2020011.js index a85730f09d..850b295c62 100644 --- a/scripts/npc/2020011.js +++ b/scripts/npc/2020011.js @@ -113,7 +113,7 @@ function action(mode, type, selection){ } else { if (cm.getPlayer().getLevel() >= 50){ cm.sendNext("Ok, go."); - if(!cm.isQuestStarted(100200)) cm.startQuest(100200); + if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) cm.startQuest(100200); if(Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS && !cm.isQuestCompleted(100201)) cm.completeQuest(100201); }else cm.sendNext("You're weak."); diff --git a/scripts/npc/2020013.js b/scripts/npc/2020013.js index edec8efb1a..1521740211 100644 --- a/scripts/npc/2020013.js +++ b/scripts/npc/2020013.js @@ -112,7 +112,7 @@ function action(mode, type, selection){ } else { if (cm.getPlayer().getLevel() >= 50){ cm.sendNext("Ok, go."); - if(!cm.isQuestStarted(100200)) cm.startQuest(100200); + if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) cm.startQuest(100200); if(Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS && !cm.isQuestCompleted(100201)) cm.completeQuest(100201); }else cm.sendNext("You're weak."); diff --git a/scripts/npc/2030006.js b/scripts/npc/2030006.js index 6cc117e1e1..f05dfb3945 100644 --- a/scripts/npc/2030006.js +++ b/scripts/npc/2030006.js @@ -32,14 +32,14 @@ var questionTree = [ //Questions Related to ITEMS ["Which of following monsters got CORRECT item corresponding to the monster?", ["Royal cactus - Needle", "Wild Boar - Boar fang", "Lazy Buffy - Buffy hat", "Chipmunk - Nut", "Stirge - Stirge's wing"], 4], ["Which of following monsters got WRONG item corresponding to the monster?", ["Greatest Oldies - Greatest oldies", "Nependeath - Nependeath's leaf", "Ghost stump - Seedling", "Sparker - Seal tooth", "Miner Zombie - Zombie's lost tooth"], 1], - ["In GM Event, how many FRUIT CAKE you can get as reward?", ["20", "200", "5", "25", "100"], 2], + //["In GM Event, how many FRUIT CAKE you can get as reward?", ["20", "200", "5", "25", "100"], 2], ["Which of following potions got CORRECT info.?", ["Warrior Elixir - Attack +5 for 3 minutes", "Pure Water - Recover 700 MP", "Cake - Recover 150 HP & MP", "Salad - Recover 300 MP", "Pizza - Recover 400 HP"], 4], ["Which of following potions got WRONG info.?", ["Mana Elixir - Recover 300 MP", "Tonic - Cures state of weakness", "Apple - Recover 30 HP", "Sunrise Dew - Recover 3000 MP", "Ramen - Recover 1000 HP"], 3], //Questions Related to MONSTERS ["Green Mushroom, Tree Stump, Bubbling, Axe Stump, Octopus, which is highest level of all?", ["Tree Stump", "Bubbling", "Axe Stump", "Octopus", "Green Mushroom"], 2], ["Which monster will be seen during the ship trip to Orbis/Ellinia?", ["Werewolf", "Slime", "Crimson Balrog", "Zakum", "Star Pixie"], 2], - ["Maple Island doesn't have which following monsters?", ["Green Mushroom", "Blue Snail", "Orange Mushroom", "Red Snail", "Pig"], 0], + ["Maple Island doesn't have which following monsters?", ["Shroom", "Blue Snail", "Slime", "Red Snail", "Pig"], 4], // to get conformant with website answers, thanks to Vcoc ["Which monster is not at Victoria Island and Sleepywood?", ["Evil Eye", "Sentinel", "Jr. Balrog", "Ghost Stump", "Snail"], 1], ["El Nath doesn't have which following monsters?", ["Dark Yeti", "Dark Ligator", "Yeti & Pepe", "Bain", "Coolie Zombie"], 1], ["Which of following monsters can fly?", ["Malady", "Ligator", "Cold Eye", "Meerkat", "Alishar"], 0], diff --git a/scripts/npc/2030008.js b/scripts/npc/2030008.js index 31a3afa6f4..c836e0234d 100644 --- a/scripts/npc/2030008.js +++ b/scripts/npc/2030008.js @@ -58,7 +58,7 @@ function action(mode, type, selection) { return; } - if(!cm.isQuestStarted(100200)) { + if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) { // thanks Vcoc for finding out a need of reapproval from the masters for Zakum expeditions cm.sendOk("Beware, for the power of olde has not been forgotten... "); cm.dispose(); return; diff --git a/scripts/npc/2030013.js b/scripts/npc/2030013.js index 77d0586a59..ef61b1d339 100644 --- a/scripts/npc/2030013.js +++ b/scripts/npc/2030013.js @@ -29,6 +29,7 @@ importPackage(Packages.scripting.event); var status = 0; var expedition; +var expedMembers; var player; var em; var exped = MapleExpeditionType.ZAKUM; @@ -69,7 +70,7 @@ function action(mode, type, selection) { status = 2; } else if (expedition.isRegistering()) { //If the expedition is registering if (expedition.contains(player)) { //If you're in it but it hasn't started, be patient - cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin the expedition."); + cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin it."); cm.dispose(); } else { //If you aren't in it, you're going to get added cm.sendOk(expedition.addMember(cm.getPlayer())); @@ -121,7 +122,8 @@ function action(mode, type, selection) { cm.dispose(); return; } - var size = expedition.getMembers().size(); + expedMembers = expedition.getMemberList(); + var size = expedMembers.size(); if (size == 1) { cm.sendOk("You are the only member of the expedition."); cm.dispose(); @@ -130,14 +132,14 @@ function action(mode, type, selection) { var text = "The following members make up your expedition (Click on them to expel them):\r\n"; text += "\r\n\t\t1." + expedition.getLeader().getName(); for (var i = 1; i < size; i++) { - text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedition.getMembers().get(i).getName() + "#l\n"; + text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedMembers.get(i).getValue() + "#l\n"; } cm.sendSimple(text); status = 6; } else if (selection == 2) { var min = exped.getMinSize(); - var size = expedition.getMembers().size(); + var size = expedition.getMemberList().size(); if (size < min) { cm.sendOk("You need at least " + min + " players registered in your expedition."); cm.dispose(); @@ -172,7 +174,7 @@ function action(mode, type, selection) { return; } else if (status == 6) { if (selection > 0) { - var banned = expedition.getMembers().get(selection - 1); + var banned = expedMembers.get(selection - 1); expedition.ban(banned); cm.sendOk("You have banned " + banned.getName() + " from the expedition."); cm.dispose(); diff --git a/scripts/npc/2083004.js b/scripts/npc/2083004.js index 6194b60125..17520857e5 100644 --- a/scripts/npc/2083004.js +++ b/scripts/npc/2083004.js @@ -29,6 +29,7 @@ importPackage(Packages.scripting.event); var status = 0; var expedition; +var expedMembers; var player; var em; var exped = MapleExpeditionType.HORNTAIL; @@ -67,7 +68,7 @@ function action(mode, type, selection) { status = 2; } else if (expedition.isRegistering()) { //If the expedition is registering if (expedition.contains(player)) { //If you're in it but it hasn't started, be patient - cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin the expedition."); + cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin it."); cm.dispose(); } else { //If you aren't in it, you're going to get added cm.sendOk(expedition.addMember(cm.getPlayer())); @@ -113,7 +114,8 @@ function action(mode, type, selection) { cm.dispose(); return; } - var size = expedition.getMembers().size(); + expedMembers = expedition.getMemberList(); + var size = expedMembers.size(); if (size == 1) { cm.sendOk("You are the only member of the expedition."); cm.dispose(); @@ -122,14 +124,14 @@ function action(mode, type, selection) { var text = "The following members make up your expedition (Click on them to expel them):\r\n"; text += "\r\n\t\t1." + expedition.getLeader().getName(); for (var i = 1; i < size; i++) { - text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedition.getMembers().get(i).getName() + "#l\n"; + text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedMembers.get(i).getValue() + "#l\n"; } cm.sendSimple(text); status = 6; } else if (selection == 2) { var min = exped.getMinSize(); - var size = expedition.getMembers().size(); + var size = expedition.getMemberList().size(); if (size < min) { cm.sendOk("You need at least " + min + " players registered in your expedition."); cm.dispose(); @@ -164,7 +166,7 @@ function action(mode, type, selection) { return; } else if (status == 6) { if (selection > 0) { - var banned = expedition.getMembers().get(selection - 1); + var banned = expedMembers.get(selection - 1); expedition.ban(banned); cm.sendOk("You have banned " + banned.getName() + " from the expedition."); cm.dispose(); diff --git a/scripts/npc/2141001.js b/scripts/npc/2141001.js index 210faf5fa7..9772b05adc 100644 --- a/scripts/npc/2141001.js +++ b/scripts/npc/2141001.js @@ -31,6 +31,7 @@ importPackage(Packages.scripting.event); var status = 0; var expedition; +var expedMembers; var player; var em; var exped = MapleExpeditionType.PINKBEAN; @@ -70,7 +71,7 @@ function action(mode, type, selection) { status = 2; } else if (expedition.isRegistering()) { //If the expedition is registering if (expedition.contains(player)) { //If you're in it but it hasn't started, be patient - cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin the expedition."); + cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin it."); cm.dispose(); } else { //If you aren't in it, you're going to get added cm.sendOk(expedition.addMember(cm.getPlayer())); @@ -116,7 +117,8 @@ function action(mode, type, selection) { cm.dispose(); return; } - var size = expedition.getMembers().size(); + expedMembers = expedition.getMemberList(); + var size = expedMembers.size(); if (size == 1) { cm.sendOk("You are the only member of the expedition."); cm.dispose(); @@ -125,14 +127,14 @@ function action(mode, type, selection) { var text = "The following members make up your expedition (Click on them to expel them):\r\n"; text += "\r\n\t\t1." + expedition.getLeader().getName(); for (var i = 1; i < size; i++) { - text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedition.getMembers().get(i).getName() + "#l\n"; + text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedMembers.get(i).getValue() + "#l\n"; } cm.sendSimple(text); status = 6; } else if (selection == 2) { var min = exped.getMinSize(); - var size = expedition.getMembers().size(); + var size = expedition.getMemberList().size(); if (size < min) { cm.sendOk("You need at least " + min + " players registered in your expedition."); cm.dispose(); @@ -167,7 +169,7 @@ function action(mode, type, selection) { return; } else if (status == 6) { if (selection > 0) { - var banned = expedition.getMembers().get(selection - 1); + var banned = expedMembers.get(selection - 1); expedition.ban(banned); cm.sendOk("You have banned " + banned.getName() + " from the expedition."); cm.dispose(); diff --git a/scripts/npc/9120201.js b/scripts/npc/9120201.js index 09e41bf0db..4f3b233776 100644 --- a/scripts/npc/9120201.js +++ b/scripts/npc/9120201.js @@ -28,6 +28,7 @@ importPackage(Packages.scripting.event); var status = 0; var expedition; +var expedMembers; var player; var em; var exped = MapleExpeditionType.SHOWA; @@ -68,7 +69,7 @@ function action(mode, type, selection) { status = 2; } else if (expedition.isRegistering()) { //If the expedition is registering if (expedition.contains(player)) { //If you're in it but it hasn't started, be patient - cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin the expedition."); + cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin it."); cm.dispose(); } else { //If you aren't in it, you're going to get added cm.sendOk(expedition.addMember(cm.getPlayer())); @@ -120,7 +121,8 @@ function action(mode, type, selection) { cm.dispose(); return; } - var size = expedition.getMembers().size(); + expedMembers = expedition.getMemberList(); + var size = expedMembers.size(); if (size == 1) { cm.sendOk("You are the only member of the expedition."); cm.dispose(); @@ -129,14 +131,14 @@ function action(mode, type, selection) { var text = "The following members make up your expedition (Click on them to expel them):\r\n"; text += "\r\n\t\t1." + expedition.getLeader().getName(); for (var i = 1; i < size; i++) { - text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedition.getMembers().get(i).getName() + "#l\n"; + text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedMembers.get(i).getValue() + "#l\n"; } cm.sendSimple(text); status = 6; } else if (selection == 2) { var min = exped.getMinSize(); - var size = expedition.getMembers().size(); + var size = expedition.getMemberList().size(); if (size < min) { cm.sendOk("You need at least " + min + " players registered in your expedition."); cm.dispose(); @@ -171,7 +173,7 @@ function action(mode, type, selection) { return; } else if (status == 6) { if (selection > 0) { - var banned = expedition.getMembers().get(selection - 1); + var banned = expedMembers.get(selection - 1); expedition.ban(banned); cm.sendOk("You have banned " + banned.getName() + " from the expedition."); cm.dispose(); diff --git a/scripts/npc/9201014.js b/scripts/npc/9201014.js index 6713b15fcf..9fd36866af 100644 --- a/scripts/npc/9201014.js +++ b/scripts/npc/9201014.js @@ -61,7 +61,7 @@ function action(mode, type, selection) { } else if (status == 1) { if (selection == 0) { if (cm.haveItem(4031424)) { - if (cm.isMarried()) { + if (cm.getPlayer().isMarried()) { // thanks MedicOP for solving an issue here if(cm.getInventory(2).getNextFreeSlot() >= 0) { var rand = Math.floor(Math.random() * bgPrizes.length); cm.gainItem(bgPrizes[rand][0], bgPrizes[rand][1]); diff --git a/scripts/npc/9201113.js b/scripts/npc/9201113.js index d513e4e4fb..4cd1baca90 100644 --- a/scripts/npc/9201113.js +++ b/scripts/npc/9201113.js @@ -29,6 +29,7 @@ importPackage(Packages.scripting.event); var status = 0; var expedition; +var expedMembers; var player; var em; var cwkpq = MapleExpeditionType.CWKPQ; @@ -64,7 +65,7 @@ function action(mode, type, selection) { status = 2; } else if (expedition.isRegistering()) { //If the expedition is registering if (expedition.contains(player)) { //If you're in it but it hasn't started, be patient - cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin the expedition."); + cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin it."); cm.dispose(); } else { //If you aren't in it, you're going to get added cm.sendOk(expedition.addMember(cm.getPlayer())); @@ -104,7 +105,8 @@ function action(mode, type, selection) { cm.dispose(); return; } - var size = expedition.getMembers().size(); + expedMembers = expedition.getMemberList(); + var size = expedMembers.size(); if (size == 1) { cm.sendOk("You are the only member of the expedition."); cm.dispose(); @@ -113,13 +115,13 @@ function action(mode, type, selection) { var text = "The following members make up your expedition (Click on them to expel them):\r\n"; text += "\r\n\t\t1." + expedition.getLeader().getName(); for (var i = 1; i < size; i++) { - text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedition.getMembers().get(i).getName() + "#l\n"; + text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedMembers.get(i).getValue() + "#l\n"; } cm.sendSimple(text); status = 6; } else if (selection == 2) { var min = cwkpq.getMinSize(); - var size = expedition.getMembers().size(); + var size = expedition.getMemberList().size(); if (size < min) { cm.sendOk("You need at least " + min + " players registered in your expedition."); cm.dispose(); @@ -154,7 +156,7 @@ function action(mode, type, selection) { return; } else if (status == 6) { if (selection > 0) { - var banned = expedition.getMembers().get(selection - 1); + var banned = expedMembers.get(selection - 1); expedition.ban(banned); cm.sendOk("You have banned " + banned.getName() + " from the expedition."); cm.dispose(); diff --git a/scripts/npc/9270047.js b/scripts/npc/9270047.js index a84ced3482..4d7288d24e 100644 --- a/scripts/npc/9270047.js +++ b/scripts/npc/9270047.js @@ -29,6 +29,7 @@ importPackage(Packages.scripting.event); var status = 0; var expedition; +var expedMembers; var player; var em; var exped = MapleExpeditionType.SCARGA; @@ -69,7 +70,7 @@ function action(mode, type, selection) { status = 2; } else if (expedition.isRegistering()) { //If the expedition is registering if (expedition.contains(player)) { //If you're in it but it hasn't started, be patient - cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin the expedition."); + cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin it."); cm.dispose(); } else { //If you aren't in it, you're going to get added cm.sendOk(expedition.addMember(cm.getPlayer())); @@ -121,7 +122,8 @@ function action(mode, type, selection) { cm.dispose(); return; } - var size = expedition.getMembers().size(); + expedMembers = expedition.getMemberList(); + var size = expedMembers.size(); if (size == 1) { cm.sendOk("You are the only member of the expedition."); cm.dispose(); @@ -130,13 +132,13 @@ function action(mode, type, selection) { var text = "The following members make up your expedition (Click on them to expel them):\r\n"; text += "\r\n\t\t1." + expedition.getLeader().getName(); for (var i = 1; i < size; i++) { - text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedition.getMembers().get(i).getName() + "#l\n"; + text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedMembers.get(i).getValue() + "#l\n"; } cm.sendSimple(text); status = 6; } else if (selection == 2) { var min = exped.getMinSize(); - var size = expedition.getMembers().size(); + var size = expedition.getMemberList().size(); if (size < min) { cm.sendOk("You need at least " + min + " players registered in your expedition."); cm.dispose(); @@ -171,7 +173,7 @@ function action(mode, type, selection) { return; } else if (status == 6) { if (selection > 0) { - var banned = expedition.getMembers().get(selection - 1); + var banned = expedMembers.get(selection - 1); expedition.ban(banned); cm.sendOk("You have banned " + banned.getName() + " from the expedition."); cm.dispose(); diff --git a/scripts/npc/9977777.js b/scripts/npc/9977777.js index d0136b8e9c..e3c07313a7 100644 --- a/scripts/npc/9977777.js +++ b/scripts/npc/9977777.js @@ -77,6 +77,7 @@ function writeFeatureTab_PlayerSocialNetwork() { addFeature("P. members' HPBar accounts HP gain on equips."); addFeature("Thoroughly reviewed P. Shops and H. Merchants."); addFeature("Transactions on Merchs instantly announced to owner."); + addFeature("Proper meso space check on player transactions."); addFeature("Game minirooms with functional pw system."); addFeature("Proper item pickup cooldown on non-owned items."); addFeature("Improved ranking system, with daily movement."); @@ -121,6 +122,7 @@ function writeFeatureTab_MonstersMapsReactors() { addFeature("Added meso drop data for many missing mobs."); addFeature("Monsterbook displays updated drop data info."); addFeature("Every skill/mastery book is now obtainable."); + addFeature("Enhanced aggro system: real-time DPS aggro detection."); addFeature("Mobs now can drop more than one of the same equip."); addFeature("Mobs only drop items collectable by the player/party."); addFeature("Mobs shouldn't fall from foothold too often now."); @@ -146,6 +148,7 @@ function writeFeatureTab_MonstersMapsReactors() { addFeature("Added world maps for M. Castle, W. Tour & Ellin areas."); addFeature("Added W. Tour & Masteria continents in the world map."); addFeature("Reviewed several issues with W. Map tooltips & links."); + addFeature("Continent separated global drops."); addFeature("Giant Cake boss drops s. bags and Maple items."); } diff --git a/scripts/portal/Zakum05.js b/scripts/portal/Zakum05.js index 1afbeb322c..7f0f674aab 100644 --- a/scripts/portal/Zakum05.js +++ b/scripts/portal/Zakum05.js @@ -24,7 +24,7 @@ */ function enter(pi) { - if (!pi.isQuestStarted(100200)) { + if (!(pi.isQuestStarted(100200) || pi.isQuestCompleted(100200))) { pi.getPlayer().dropMessage(5,"You need approval from the masters to battle. You may not attempt the boss right now."); return false; } diff --git a/scripts/quest/20101.js b/scripts/quest/20101.js index f6d2107782..9af9d25a2f 100644 --- a/scripts/quest/20101.js +++ b/scripts/quest/20101.js @@ -27,6 +27,12 @@ function end(mode, type, selection) { return; } + if (!(qm.canHoldAll([1302077, 1142066]))) { + qm.sendOk("Make some room in your inventory and talk back to me."); + qm.dispose(); + return; + } + qm.sendNext("I have just molded your body to make it perfect for a Dawn Warrior. If you wish to become more powerful, use Stat Window (S) to raise the appropriate stats. If you aren't sure what to raise, just click on #bAuto#k."); if (qm.getPlayer().getJob().getId() != 1100) { qm.gainItem(1302077, 1); diff --git a/scripts/quest/20102.js b/scripts/quest/20102.js index f4bd37ddcb..cbdf5aee82 100644 --- a/scripts/quest/20102.js +++ b/scripts/quest/20102.js @@ -27,6 +27,12 @@ function end(mode, type, selection) { return; } + if (!(qm.canHoldAll([1372043, 1142066]))) { + qm.sendOk("Make some room in your inventory and talk back to me."); + qm.dispose(); + return; + } + qm.sendNext("I have just molded your body to make it perfect for a Blaze Wizard. If you wish to become more powerful, use Stat Window (S) to raise the appropriate stats. If you aren't sure what to raise, just click on #bAuto#k."); if (qm.getPlayer().getJob().getId() != 1200) { qm.gainItem(1372043, 1); diff --git a/scripts/quest/20103.js b/scripts/quest/20103.js index 03d54ab4e8..9d603bf429 100644 --- a/scripts/quest/20103.js +++ b/scripts/quest/20103.js @@ -27,6 +27,12 @@ function end(mode, type, selection) { return; } + if (!(qm.canHoldAll([1452051, 1142066]) && qm.canHold(2070000))) { + qm.sendOk("Make some room in your inventory and talk back to me."); + qm.dispose(); + return; + } + qm.sendNext("I have just molded your body to make it perfect for a Wind Archer. If you wish to become more powerful, use Stat Window (S) to raise the appropriate stats. If you aren't sure what to raise, just click on #bAuto#k."); if (qm.getPlayer().getJob().getId() != 1300) { qm.gainItem(2060000, 2000); diff --git a/scripts/quest/20104.js b/scripts/quest/20104.js index a0fc3311a0..232a97ad5d 100644 --- a/scripts/quest/20104.js +++ b/scripts/quest/20104.js @@ -27,11 +27,16 @@ function end(mode, type, selection) { return; } + if (!(qm.canHoldAll([1472061, 1142066]) && qm.canHold(2070000))) { + qm.sendOk("Make some room in your inventory and talk back to me."); + qm.dispose(); + return; + } + qm.sendNext("I have just molded your body to make it perfect for a Night Walker. If you wish to become more powerful, use Stat Window (S) to raise the appropriate stats. If you aren't sure what to raise, just click on #bAuto#k."); if (qm.getPlayer().getJob().getId() != 1400) { qm.gainItem(1472061, 1); - qm.gainItem(2070015, 800); - qm.gainItem(2070015, 800); + qm.gainItem(2070000, 800); qm.gainItem(1142066, 1); qm.changeJob(MapleJob.NIGHTWALKER1); qm.getPlayer().resetStats(); diff --git a/scripts/quest/20105.js b/scripts/quest/20105.js index 5de72b98f4..6580c083c4 100644 --- a/scripts/quest/20105.js +++ b/scripts/quest/20105.js @@ -27,6 +27,12 @@ function end(mode, type, selection) { return; } + if (!(qm.canHoldAll([1482014, 1142066]))) { + qm.sendOk("Make some room in your inventory and talk back to me."); + qm.dispose(); + return; + } + qm.sendNext("I have just molded your body to make it perfect for a Thunder Breaker. If you wish to become more powerful, use Stat Window (S) to raise the appropriate stats. If you aren't sure what to raise, just click on #bAuto#k."); if (qm.getPlayer().getJob().getId() != 1500) { qm.gainItem(1482014, 1); diff --git a/scripts/quest/21101.js b/scripts/quest/21101.js index 74815877db..e59c0bb9a6 100644 --- a/scripts/quest/21101.js +++ b/scripts/quest/21101.js @@ -39,7 +39,7 @@ function start(mode, type, selection) { } else if (status == 1) { if (qm.getPlayer().getJob().getId() == 2000) { if(!qm.canHold(1142129)) { - cm.sendOk("Wow, your #bequip#k inventory is full. You need to make at least 1 empty slot to complete this quest."); + qm.sendOk("Wow, your #bequip#k inventory is full. You need to make at least 1 empty slot to complete this quest."); qm.dispose(); return; } diff --git a/scripts/quest/21201.js b/scripts/quest/21201.js index da8713a1cd..4d8f0f8d06 100644 --- a/scripts/quest/21201.js +++ b/scripts/quest/21201.js @@ -59,7 +59,7 @@ function end(mode, type, selection) { else if (status == 8) { if(!qm.isQuestCompleted(21201)) { if(!qm.canHold(1142130)) { - cm.sendOk("Wow, your #bequip#k inventory is full. I need you to make at least 1 empty slot to complete this quest."); + qm.sendOk("Wow, your #bequip#k inventory is full. I need you to make at least 1 empty slot to complete this quest."); // thanks MedicOP for finding an issue here qm.dispose(); return; } diff --git a/scripts/quest/21302.js b/scripts/quest/21302.js index 0d3e60695c..35556f9587 100644 --- a/scripts/quest/21302.js +++ b/scripts/quest/21302.js @@ -39,7 +39,7 @@ function end(mode, type, selection) { } else if (status == 2) { if(!qm.isQuestCompleted(21302)) { if(!qm.canHold(1142131)) { - cm.sendOk("Wow, your #bequip#k inventory is full. I need you to make at least 1 empty slot to complete this quest."); + qm.sendOk("Wow, your #bequip#k inventory is full. I need you to make at least 1 empty slot to complete this quest."); qm.dispose(); return; } diff --git a/sql/db_database.sql b/sql/db_database.sql index fc3c325ec5..aae28570c9 100644 --- a/sql/db_database.sql +++ b/sql/db_database.sql @@ -12776,8 +12776,7 @@ INSERT IGNORE INTO `temp_data` (`id`, `dropperid`, `itemid`, `minimum_quantity`, CREATE TABLE IF NOT EXISTS `drop_data_global` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, - `continent` int(11) NOT NULL, - `dropType` tinyint(1) NOT NULL DEFAULT '0', + `continent` tinyint(1) NOT NULL DEFAULT '-1', `itemid` int(11) NOT NULL DEFAULT '0', `minimum_quantity` int(11) NOT NULL DEFAULT '1', `maximum_quantity` int(11) NOT NULL DEFAULT '1', @@ -12788,12 +12787,12 @@ CREATE TABLE IF NOT EXISTS `drop_data_global` ( KEY `mobid` (`continent`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=5 ; -INSERT INTO `drop_data_global` (`id`, `continent`, `dropType`, `itemid`, `minimum_quantity`, `maximum_quantity`, `questid`, `chance`, `comments`) VALUES -(1, 0, 0, 4031865, 1, 1, 0, 35000, 'NX Card 100 PTS'), -(2, 0, 0, 4031866, 1, 1, 0, 20000, 'NX Card 250 PTS'), -(3, 0, 0, 4001126, 1, 2, 0, 8000, 'Maple Leaves'), -(4, 0, 0, 2049100, 1, 1, 0, 1200, 'Chaos Scroll 60%'), -(5, 0, 0, 4001006, 1, 1, 0, 10000, 'Flaming Feather'); +INSERT INTO `drop_data_global` (`id`, `continent`, `itemid`, `minimum_quantity`, `maximum_quantity`, `questid`, `chance`, `comments`) VALUES +(1, -1, 4031865, 1, 1, 0, 35000, 'NX Card 100 PTS'), +(2, -1, 4031866, 1, 1, 0, 20000, 'NX Card 250 PTS'), +(3, -1, 4001126, 1, 2, 0, 8000, 'Maple Leaves'), +(4, -1, 2049100, 1, 1, 0, 1200, 'Chaos Scroll 60%'), +(5, -1, 4001006, 1, 1, 0, 10000, 'Flaming Feather'); CREATE TABLE IF NOT EXISTS `dueyitems` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, diff --git a/sql/db_drops.sql b/sql/db_drops.sql index 6b906b2ba7..23e0864ebe 100644 --- a/sql/db_drops.sql +++ b/sql/db_drops.sql @@ -6719,8 +6719,8 @@ USE `heavenms`; (4220000, 4010002, 1, 1, 0, 7000), (4220001, 4010002, 1, 1, 0, 7000), (9303014, 4010002, 1, 1, 0, 7000), -(4220000, 1442018, 1, 1, 0, 40000), -(4220001, 1442018, 1, 1, 0, 40000), +(4220000, 1442018, 1, 1, 0, 25000), +(4220001, 1442018, 1, 1, 0, 25000), (9303014, 1442018, 1, 1, 0, 700), (4220000, 1302010, 1, 1, 0, 40000), (4220001, 1302010, 1, 1, 0, 40000), diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java index d32325605e..1c077d6024 100644 --- a/src/client/MapleCharacter.java +++ b/src/client/MapleCharacter.java @@ -273,7 +273,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private ScheduledFuture pendantOfSpirit = null; //1122017 private Lock chrLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_CHR, true); private Lock evtLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_EVT, true); - private Lock petLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_PET, true); // for meso & quest tasks as well + private Lock petLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_PET, true); private Lock prtLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_PRT); private Lock cpnLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHARACTER_CPN); private Map> excluded = new LinkedHashMap<>(); @@ -852,17 +852,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } List> ldsstat = Collections.singletonList(new Pair(MapleBuffStat.DARKSIGHT, 0)); getMap().broadcastGMMessage(this, MaplePacketCreator.giveForeignBuff(id, ldsstat), false); - for (MapleMonster mon : this.getControlledMonsters()) { - mon.lockMonster(); - try { - mon.setController(null); - mon.setControllerHasAggro(false); - mon.setControllerKnowsAboutAggro(false); - mon.getMap().updateMonsterController(mon); - } finally { - mon.unlockMonster(); - } - } + this.releaseControlledMonsters(); } announce(MaplePacketCreator.enableActions()); } @@ -1356,7 +1346,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } } - mapEim.registerPlayer(this); + // thanks Thora for finding an issue with players not being actually warped into the target event map (rather sent to the event starting map) + mapEim.registerPlayer(this, false); } MapleMap to = target; // warps directly to the target intead of the target's map id, this allows GMs to patrol players inside instances. @@ -1708,29 +1699,48 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } } - public void checkMonsterAggro(MapleMonster monster) { - monster.lockMonster(); - try { - if (!monster.isControllerHasAggro()) { - if (monster.getController() == this) { - monster.setControllerHasAggro(true); - } else { - monster.switchController(this, true); - } + public void controlMonster(MapleMonster monster) { + if (cpnLock.tryLock()) { + try { + controlled.add(monster); + } finally { + cpnLock.unlock(); } - } finally { - monster.unlockMonster(); } } - - public void controlMonster(MapleMonster monster, boolean aggro) { - monster.lockMonster(); + + public void stopControllingMonster(MapleMonster monster) { + if (cpnLock.tryLock()) { + try { + controlled.remove(monster); + } finally { + cpnLock.unlock(); + } + } + } + + public int getNumControlledMonsters() { + cpnLock.lock(); try { - monster.setController(this); - controlled.add(monster); - client.announce(MaplePacketCreator.controlMonster(monster, false, aggro)); + return controlled.size(); } finally { - monster.unlockMonster(); + cpnLock.unlock(); + } + } + + public void releaseControlledMonsters() { + Collection controlledMonsters; + + cpnLock.lock(); + try { + controlledMonsters = new ArrayList<>(controlled); + controlled.clear(); + } finally { + cpnLock.unlock(); + } + + for (MapleMonster monster : controlledMonsters) { + monster.aggroRedirectController(); } } @@ -2967,6 +2977,11 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } } + public boolean canHoldMeso(int gain) { // thanks lucasziron found pointing out a need to check space availability for mesos on player transactions + long nextMeso = (long) meso.get() + gain; + return nextMeso <= Integer.MAX_VALUE; + } + public void gainMeso(int gain) { gainMeso(gain, true, false, true); } @@ -4124,11 +4139,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { return Collections.unmodifiableList(ret); } } - - public Collection getControlledMonsters() { - return Collections.unmodifiableCollection(controlled); - } - + public List getCrushRings() { Collections.sort(crushRings); return crushRings; @@ -4343,7 +4354,15 @@ public class MapleCharacter extends AbstractMapleCharacterObject { return gachaexp.get(); } + public boolean hasNoviceExpRate() { + return ServerConstants.USE_ENFORCE_NOVICE_EXPRATE && isBeginnerJob() && level < 11; + } + public int getExpRate() { + if (hasNoviceExpRate()) { // base exp rate 1x for early levels idea thanks to Vcoc + return 1; + } + return expRate; } @@ -4383,7 +4402,17 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public int getRawMesoRate() { return mesoRate / (mesoCoupon * getWorldServer().getMesoRate()); } - + + public int getQuestExpRate() { + World w = getWorldServer(); + return w.getExpRate() * w.getQuestRate(); + } + + public int getQuestMesoRate() { + World w = getWorldServer(); + return w.getMesoRate() * w.getQuestRate(); + } + public int getFace() { return face; } @@ -4829,10 +4858,6 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } } - public int getNumControlledMonsters() { - return controlled.size(); - } - public MapleParty getParty() { prtLock.lock(); try { @@ -5635,9 +5660,9 @@ public class MapleCharacter extends AbstractMapleCharacterObject { public boolean isGuildLeader() { // true on guild master or jr. master return guildid > 0 && guildRank < 3; } - + public void leaveMap() { - controlled.clear(); + releaseControlledMonsters(); visibleMapObjects.clear(); setChair(0); if (hpDecreaseTask != null) { @@ -7772,17 +7797,22 @@ public class MapleCharacter extends AbstractMapleCharacterObject { throw new RuntimeException("Character not in database (" + id + ")"); } + List petList = new LinkedList<>(); petLock.lock(); try { for (int i = 0; i < 3; i++) { if (pets[i] != null) { - pets[i].saveToDb(); + petList.add(pets[i]); } } } finally { petLock.unlock(); } + for (MaplePet pet : petList) { + pet.saveToDb(); + } + for(Entry> es: getExcluded().entrySet()) { // this set is already protected try (PreparedStatement ps2 = con.prepareStatement("DELETE FROM petignores WHERE petid=?")) { ps2.setInt(1, es.getKey()); @@ -8912,11 +8942,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } }, duration); } - - public void stopControllingMonster(MapleMonster monster) { - controlled.remove(monster); - } - + public void unequipAllPets() { for (int i = 0; i < 3; i++) { MaplePet pet = getPet(i); @@ -9046,19 +9072,19 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } public void cancelQuestExpirationTask() { - petLock.lock(); + evtLock.lock(); try { if (questExpireTask != null) { questExpireTask.cancel(false); questExpireTask = null; } } finally { - petLock.unlock(); + evtLock.unlock(); } } public void forfeitExpirableQuests() { - petLock.lock(); + evtLock.lock(); try { for(MapleQuest quest : questExpirations.keySet()) { quest.forfeit(this); @@ -9066,12 +9092,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { questExpirations.clear(); } finally { - petLock.unlock(); + evtLock.unlock(); } } public void questExpirationTask() { - petLock.lock(); + evtLock.lock(); try { if(!questExpirations.isEmpty()) { if(questExpireTask == null) { @@ -9084,12 +9110,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } } } finally { - petLock.unlock(); + evtLock.unlock(); } } private void runQuestExpireTask() { - petLock.lock(); + evtLock.lock(); try { long timeNow = Server.getInstance().getCurrentTime(); List expireList = new LinkedList<>(); @@ -9110,12 +9136,12 @@ public class MapleCharacter extends AbstractMapleCharacterObject { } } } finally { - petLock.unlock(); + evtLock.unlock(); } } private void registerQuestExpire(MapleQuest quest, long time) { - petLock.lock(); + evtLock.lock(); try { if(questExpireTask == null) { questExpireTask = TimerManager.getInstance().register(new Runnable() { @@ -9128,7 +9154,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { questExpirations.put(quest, Server.getInstance().getCurrentTime() + time); } finally { - petLock.unlock(); + evtLock.unlock(); } } @@ -9671,7 +9697,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { if (pendantOfSpirit != null) { pendantOfSpirit.cancel(true); } pendantOfSpirit = null; - petLock.lock(); + evtLock.lock(); try { if (questExpireTask != null) { questExpireTask.cancel(false); @@ -9681,7 +9707,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { questExpirations = null; } } finally { - petLock.unlock(); + evtLock.unlock(); } if (maplemount != null) { diff --git a/src/client/MapleClient.java b/src/client/MapleClient.java index 50f77e86aa..4e5acbe135 100644 --- a/src/client/MapleClient.java +++ b/src/client/MapleClient.java @@ -175,22 +175,22 @@ public class MapleClient { return chars; } - public List loadCharacterNames(int serverId) { + public List loadCharacterNames(int worldId) { List chars = new ArrayList<>(15); - for (CharNameAndId cni : loadCharactersInternal(serverId)) { + for (CharNameAndId cni : loadCharactersInternal(worldId)) { chars.add(cni.name); } return chars; } - private List loadCharactersInternal(int serverId) { + private List loadCharactersInternal(int worldId) { PreparedStatement ps; List chars = new ArrayList<>(15); try { Connection con = DatabaseConnection.getConnection(); ps = con.prepareStatement("SELECT id, name FROM characters WHERE accountid = ? AND world = ?"); ps.setInt(1, this.getAccID()); - ps.setInt(2, serverId); + ps.setInt(2, worldId); try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { chars.add(new CharNameAndId(rs.getString("name"), rs.getInt("id"))); @@ -882,7 +882,7 @@ public class MapleClient { } public final void disconnect(final boolean shutdown, final boolean cashshop) { - if (isDisconnecting()) { + if (canDisconnect()) { ThreadManager.getInstance().newTask(new Runnable() { @Override public void run() { @@ -893,12 +893,12 @@ public class MapleClient { } public final void forceDisconnect() { - if (isDisconnecting()) { + if (canDisconnect()) { disconnectInternal(true, false); } } - private synchronized boolean isDisconnecting() { + private synchronized boolean canDisconnect() { if (disconnecting) { return false; } diff --git a/src/client/command/commands/gm0/RatesCommand.java b/src/client/command/commands/gm0/RatesCommand.java index 4ae23dc779..378923e632 100644 --- a/src/client/command/commands/gm0/RatesCommand.java +++ b/src/client/command/commands/gm0/RatesCommand.java @@ -39,7 +39,7 @@ public class RatesCommand extends Command { // travel rates not applicable since it's intrinsically a server/environment rate rather than a character rate String showMsg_ = "#eCHARACTER RATES#n" + "\r\n\r\n"; - showMsg_ += "EXP Rate: #e#b" + player.getExpRate() + "x#k#n" + "\r\n"; + showMsg_ += "EXP Rate: #e#b" + player.getExpRate() + "x#k#n" + (player.hasNoviceExpRate() ? " - novice rate" : "") + "\r\n"; showMsg_ += "MESO Rate: #e#b" + player.getMesoRate() + "x#k#n" + "\r\n"; showMsg_ += "DROP Rate: #e#b" + player.getDropRate() + "x#k#n" + "\r\n"; showMsg_ += "BOSS DROP Rate: #e#b" + player.getBossDropRate() + "x#k#n" + "\r\n"; diff --git a/src/client/command/commands/gm0/ShowRatesCommand.java b/src/client/command/commands/gm0/ShowRatesCommand.java index e1bf006477..0db9088efd 100644 --- a/src/client/command/commands/gm0/ShowRatesCommand.java +++ b/src/client/command/commands/gm0/ShowRatesCommand.java @@ -40,7 +40,7 @@ public class ShowRatesCommand extends Command { showMsg += "World EXP Rate: #k" + c.getWorldServer().getExpRate() + "x#k" + "\r\n"; showMsg += "Player EXP Rate: #k" + player.getRawExpRate() + "x#k" + "\r\n"; if(player.getCouponExpRate() != 1) showMsg += "Coupon EXP Rate: #k" + player.getCouponExpRate() + "x#k" + "\r\n"; - showMsg += "EXP Rate: #e#b" + player.getExpRate() + "x#k#n" + "\r\n"; + showMsg += "EXP Rate: #e#b" + player.getExpRate() + "x#k#n" + (player.hasNoviceExpRate() ? " - novice rate" : "") + "\r\n"; showMsg += "\r\n" + "#eMESO RATE#n" + "\r\n"; showMsg += "World MESO Rate: #k" + c.getWorldServer().getMesoRate() + "x#k" + "\r\n"; @@ -66,7 +66,7 @@ public class ShowRatesCommand extends Command { } showMsg += "\r\n"; - showMsg += "World TRAVEL Rate: #e#b" + c.getWorldServer().getTravelRate() + "x#k#n" + "\r\nServer\r\nPlayer"; + showMsg += "World TRAVEL Rate: #e#b" + c.getWorldServer().getTravelRate() + "x#k#n" + "\r\n"; player.showHint(showMsg, 300); } diff --git a/src/client/command/commands/gm1/GotoCommand.java b/src/client/command/commands/gm1/GotoCommand.java index f39df86498..3e1a816449 100644 --- a/src/client/command/commands/gm1/GotoCommand.java +++ b/src/client/command/commands/gm1/GotoCommand.java @@ -41,8 +41,6 @@ public class GotoCommand extends Command { @Override public void execute(MapleClient c, String[] params) { - final HashMap gotomaps = GameConstants.GOTO_MAPS; - MapleCharacter player = c.getPlayer(); if (params.length < 1){ player.yellowMessage("Syntax: @goto "); @@ -54,6 +52,13 @@ public class GotoCommand extends Command { return; } + HashMap gotomaps; + if (player.isGM()) { + gotomaps = new HashMap<>(GameConstants.GOTO_AREAS); // distinct map registry for GM/users suggested thanks to Vcoc + } else { + gotomaps = new HashMap<>(GameConstants.GOTO_TOWNS); + } + if (gotomaps.containsKey(params[0])) { MapleMap target = c.getChannelServer().getMapFactory().getMap(gotomaps.get(params[0])); diff --git a/src/client/command/commands/gm2/SummonCommand.java b/src/client/command/commands/gm2/SummonCommand.java index f46bafe726..1e413b392e 100644 --- a/src/client/command/commands/gm2/SummonCommand.java +++ b/src/client/command/commands/gm2/SummonCommand.java @@ -26,6 +26,7 @@ package client.command.commands.gm2; import client.command.Command; import client.MapleClient; import client.MapleCharacter; +import server.maps.MapleMap; import net.server.Server; import net.server.channel.Channel; @@ -54,33 +55,26 @@ public class SummonCommand extends Command { } } if (victim != null) { - boolean changingEvent = true; - - if (victim.getEventInstance() != null) { - if (player.getEventInstance() != null && victim.getEventInstance().getLeaderId() == player.getEventInstance().getLeaderId()) { - changingEvent = false; - } else { - victim.getEventInstance().unregisterPlayer(victim); - } + if (!victim.isLoggedinWorld()) { + player.dropMessage(6, "Player currently not logged in or unreachable."); + return; } - //Attempt to join the warpers instance. - if (player.getEventInstance() != null && changingEvent) { - if (player.getClient().getChannel() == victim.getClient().getChannel()) { - player.getEventInstance().registerPlayer(victim); - victim.saveLocationOnWarp(); - victim.changeMap(player.getEventInstance().getMapInstance(player.getMapId()), player.getMap().findClosestPortal(player.getPosition())); - } else { - player.dropMessage("Target isn't on your channel, not able to warp into event instance."); - } - } else {//If victim isn't in an event instance or is in the same event instance as the one the caller is, just warp them. - victim.saveLocationOnWarp(); - victim.changeMap(player.getMapId(), player.getMap().findClosestPortal(player.getPosition())); - } if (player.getClient().getChannel() != victim.getClient().getChannel()) {//And then change channel if needed. victim.dropMessage("Changing channel, please wait a moment."); victim.getClient().changeChannel(player.getClient().getChannel()); } + + try { + for (int i = 0; i < 7; i++) { // poll for a while until the player reconnects + if (victim.isLoggedinWorld()) break; + Thread.sleep(1777); + } + } catch (InterruptedException e) {} + + MapleMap map = player.getMap(); + victim.saveLocationOnWarp(); + victim.forceChangeMap(map, map.findClosestPortal(player.getPosition())); } else { player.dropMessage(6, "Unknown player."); } diff --git a/src/client/command/commands/gm2/WarpAreaCommand.java b/src/client/command/commands/gm2/WarpAreaCommand.java index b531215e24..1ec42d97b8 100644 --- a/src/client/command/commands/gm2/WarpAreaCommand.java +++ b/src/client/command/commands/gm2/WarpAreaCommand.java @@ -29,7 +29,6 @@ import client.command.Command; import server.maps.MapleMap; import java.awt.*; -import java.util.ArrayList; import java.util.Collection; public class WarpAreaCommand extends Command { @@ -54,7 +53,7 @@ public class WarpAreaCommand extends Command { Point pos = player.getPosition(); - Collection characters = new ArrayList<>(player.getMap().getCharacters()); + Collection characters = player.getMap().getAllPlayers(); for (MapleCharacter victim : characters) { if (victim.getPosition().distanceSq(pos) <= 50000) { diff --git a/src/client/command/commands/gm2/WarpMapCommand.java b/src/client/command/commands/gm2/WarpMapCommand.java index 238890d767..d4d1760ae9 100644 --- a/src/client/command/commands/gm2/WarpMapCommand.java +++ b/src/client/command/commands/gm2/WarpMapCommand.java @@ -28,7 +28,6 @@ import client.MapleClient; import client.command.Command; import server.maps.MapleMap; -import java.util.ArrayList; import java.util.Collection; public class WarpMapCommand extends Command { @@ -51,7 +50,7 @@ public class WarpMapCommand extends Command { return; } - Collection characters = new ArrayList<>(player.getMap().getCharacters()); + Collection characters = player.getMap().getAllPlayers(); for (MapleCharacter victim : characters) { victim.saveLocationOnWarp(); diff --git a/src/client/command/commands/gm3/ExpedsCommand.java b/src/client/command/commands/gm3/ExpedsCommand.java index c9acc0c431..f01e12f38e 100644 --- a/src/client/command/commands/gm3/ExpedsCommand.java +++ b/src/client/command/commands/gm3/ExpedsCommand.java @@ -30,6 +30,8 @@ import net.server.Server; import net.server.channel.Channel; import server.expeditions.MapleExpedition; +import java.util.Map.Entry; + public class ExpedsCommand extends Command { { setDescription(""); @@ -53,11 +55,11 @@ public class ExpedsCommand extends Command { player.yellowMessage(">> Size: " + exped.getMembers().size()); player.yellowMessage(">> Leader: " + exped.getLeader().getName()); int memId = 2; - for (MapleCharacter member : exped.getMembers()) { - if (exped.isLeader(member)) { + for (Entry e : exped.getMembers().entrySet()) { + if (exped.isLeader(e.getKey())) { continue; } - player.yellowMessage(">>> Member " + memId + ": " + member.getName()); + player.yellowMessage(">>> Member " + memId + ": " + e.getValue()); memId++; } } diff --git a/src/client/command/commands/gm3/ReloadMapCommand.java b/src/client/command/commands/gm3/ReloadMapCommand.java index 12a0c31c5b..589eab85d6 100644 --- a/src/client/command/commands/gm3/ReloadMapCommand.java +++ b/src/client/command/commands/gm3/ReloadMapCommand.java @@ -28,7 +28,6 @@ import client.MapleClient; import client.MapleCharacter; import server.maps.MapleMap; -import java.util.ArrayList; import java.util.Collection; public class ReloadMapCommand extends Command { @@ -42,7 +41,7 @@ public class ReloadMapCommand extends Command { MapleMap newMap = c.getChannelServer().getMapFactory().resetMap(player.getMapId()); int callerid = c.getPlayer().getId(); - Collection characters = new ArrayList<>(player.getMap().getCharacters()); + Collection characters = player.getMap().getAllPlayers(); for (MapleCharacter chr : characters) { chr.saveLocationOnWarp(); diff --git a/src/client/command/commands/gm3/WarpSnowBallCommand.java b/src/client/command/commands/gm3/WarpSnowBallCommand.java index 4018010e2e..afa0945df1 100644 --- a/src/client/command/commands/gm3/WarpSnowBallCommand.java +++ b/src/client/command/commands/gm3/WarpSnowBallCommand.java @@ -23,12 +23,11 @@ */ package client.command.commands.gm3; - import client.command.Command; - import client.MapleClient; - import client.MapleCharacter; +import client.command.Command; +import client.MapleClient; +import client.MapleCharacter; - import java.util.ArrayList; - import java.util.List; +import java.util.List; public class WarpSnowBallCommand extends Command { { @@ -38,7 +37,7 @@ public class WarpSnowBallCommand extends Command { @Override public void execute(MapleClient c, String[] params) { MapleCharacter player = c.getPlayer(); - List chars = new ArrayList<>(player.getMap().getCharacters()); + List chars = player.getMap().getAllPlayers(); for (MapleCharacter chr : chars) { chr.saveLocationOnWarp(); chr.changeMap(109060000, chr.getTeam()); diff --git a/src/client/command/commands/gm5/DebugCommand.java b/src/client/command/commands/gm5/DebugCommand.java index 9d1296867b..7346f522cb 100644 --- a/src/client/command/commands/gm5/DebugCommand.java +++ b/src/client/command/commands/gm5/DebugCommand.java @@ -72,7 +72,7 @@ public class DebugCommand extends Command { for (MapleMapObject monstermo : monsters) { MapleMonster monster = (MapleMonster) monstermo; MapleCharacter controller = monster.getController(); - player.message("Monster ID: " + monster.getId() + " Aggro target: " + ((controller != null) ? controller.getName() : "")); + player.message("Monster ID: " + monster.getId() + " Aggro target: " + ((controller != null) ? controller.getName() + " Has aggro: " + monster.isControllerHasAggro() + " Knowns aggro: " + monster.isControllerKnowsAboutAggro() : "")); } break; diff --git a/src/client/inventory/Item.java b/src/client/inventory/Item.java index 8173dd5b1d..74ca97932e 100644 --- a/src/client/inventory/Item.java +++ b/src/client/inventory/Item.java @@ -56,8 +56,13 @@ public class Item implements Comparable { this.id = id; this.position = position; this.quantity = quantity; + if (petid > -1) { // issue with null "pet" having petid > -1 found thanks to MedicOP + this.pet = MaplePet.loadFromDb(id, position, petid); + if (this.pet == null) { + petid = -1; + } + } this.petid = petid; - if (petid > -1) this.pet = MaplePet.loadFromDb(id, position, petid); this.flag = 0; this.log = new LinkedList<>(); } @@ -121,10 +126,6 @@ public class Item implements Comparable { public int getPetId() { return petid; } - - public void setPetId(int id) { - this.petid = id; - } @Override public int compareTo(Item other) { diff --git a/src/client/processor/AssignAPProcessor.java b/src/client/processor/AssignAPProcessor.java index b9a879ad67..fd9e2d8aa6 100644 --- a/src/client/processor/AssignAPProcessor.java +++ b/src/client/processor/AssignAPProcessor.java @@ -134,10 +134,10 @@ public class AssignAPProcessor { luk = scStat; str = 0; dex = 0; - if(luk + chr.getLuk() > CAP) { + if(ServerConstants.USE_AUTOASSIGN_SECONDARY_CAP && luk + chr.getLuk() > CAP) { temp = luk + chr.getLuk() - CAP; - luk -= temp; - int_ += temp; + scStat -= temp; + prStat += temp; } primary = MapleStat.INT; @@ -160,10 +160,10 @@ public class AssignAPProcessor { str = scStat; int_ = 0; luk = 0; - if(str + chr.getStr() > CAP) { + if(ServerConstants.USE_AUTOASSIGN_SECONDARY_CAP && str + chr.getStr() > CAP) { temp = str + chr.getStr() - CAP; - str -= temp; - dex += temp; + scStat -= temp; + prStat += temp; } primary = MapleStat.DEX; @@ -186,10 +186,10 @@ public class AssignAPProcessor { str = scStat; int_ = 0; luk = 0; - if(str + chr.getStr() > CAP) { + if(ServerConstants.USE_AUTOASSIGN_SECONDARY_CAP && str + chr.getStr() > CAP) { temp = str + chr.getStr() - CAP; - str -= temp; - dex += temp; + scStat -= temp; + prStat += temp; } primary = MapleStat.DEX; @@ -240,15 +240,15 @@ public class AssignAPProcessor { str = trStat; int_ = 0; - if(dex + chr.getDex() > CAP) { + if(ServerConstants.USE_AUTOASSIGN_SECONDARY_CAP && dex + chr.getDex() > CAP) { temp = dex + chr.getDex() - CAP; - dex -= temp; - luk += temp; + scStat -= temp; + prStat += temp; } - if(str + chr.getStr() > CAP) { + if(ServerConstants.USE_AUTOASSIGN_SECONDARY_CAP && str + chr.getStr() > CAP) { temp = str + chr.getStr() - CAP; - str -= temp; - luk += temp; + trStat -= temp; + prStat += temp; } primary = MapleStat.LUK; @@ -258,50 +258,64 @@ public class AssignAPProcessor { break; case BRAWLER: - CAP = 120; - - scStat = chr.getLevel() - (chr.getDex() + dex - eqpDex); - if(scStat < 0) scStat = 0; - scStat = Math.min(scStat, tempAp); - - if(tempAp > scStat) tempAp -= scStat; - else tempAp = 0; - - prStat = tempAp; - str = prStat; - dex = scStat; - int_ = 0; luk = 0; - - if(dex + chr.getDex() > CAP) { - temp = dex + chr.getDex() - CAP; - dex -= temp; - str += temp; - } - - primary = MapleStat.STR; - secondary = MapleStat.DEX; - - break; - default: //warrior, beginner, ... - CAP = 80; + CAP = 300; + + boolean highDex = false; // thanks lucasziron & Vcoc for finding out DEX autoassigning poorly for STR-based characters + if (chr.getLevel() < 40) { + if (chr.getDex() >= (2 * chr.getLevel()) + 2) { + highDex = true; + } + } else { + if (chr.getDex() >= chr.getLevel() + 42) { + highDex = true; + } + } + + // other classes will start favoring more DEX only if a level-based threshold is reached. + if(!highDex) { + scStat = 0; + if(chr.getDex() < 80) { + scStat = (2 * chr.getLevel()) - (chr.getDex() + dex - eqpDex); + if(scStat < 0) scStat = 0; - scStat = ((2 * chr.getLevel()) / 3) - (chr.getDex() + dex - eqpDex); - if(scStat < 0) scStat = 0; - scStat = Math.min(scStat, tempAp); + scStat = Math.min(80 - chr.getDex(), scStat); + scStat = Math.min(tempAp, scStat); + tempAp -= scStat; + } - if(tempAp > scStat) tempAp -= scStat; - else tempAp = 0; + temp = (chr.getLevel() + 40) - Math.max(80, scStat + chr.getDex() + dex - eqpDex); + if(temp < 0) temp = 0; + temp = Math.min(tempAp, temp); + scStat += temp; + tempAp -= temp; + } else { + scStat = 0; + if(chr.getDex() < 96) { + scStat = (int)(2.4 * chr.getLevel()) - (chr.getDex() + dex - eqpDex); + if(scStat < 0) scStat = 0; + scStat = Math.min(96 - chr.getDex(), scStat); + scStat = Math.min(tempAp, scStat); + tempAp -= scStat; + } + + temp = 96 + (int)(1.2 * (chr.getLevel() - 40)) - Math.max(96, scStat + chr.getDex() + dex - eqpDex); + if(temp < 0) temp = 0; + temp = Math.min(tempAp, temp); + scStat += temp; + tempAp -= temp; + } + prStat = tempAp; str = prStat; dex = scStat; int_ = 0; luk = 0; - if(dex + chr.getDex() > CAP) { + if(ServerConstants.USE_AUTOASSIGN_SECONDARY_CAP && dex + chr.getDex() > CAP) { temp = dex + chr.getDex() - CAP; - dex -= temp; - str += temp; + scStat -= temp; + prStat += temp; } primary = MapleStat.STR; diff --git a/src/client/processor/DueyProcessor.java b/src/client/processor/DueyProcessor.java index b06ffdd3d9..d4a8cc6674 100644 --- a/src/client/processor/DueyProcessor.java +++ b/src/client/processor/DueyProcessor.java @@ -469,6 +469,11 @@ public class DueyProcessor { } if (dp.getItem() != null) { + if (!c.getPlayer().canHoldMeso(dp.getMesos())) { + c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode())); + return; + } + if (!MapleInventoryManipulator.checkSpace(c, dp.getItem().getItemId(), dp.getItem().getQuantity(), dp.getItem().getOwner())) { int itemid = dp.getItem().getItemId(); if(MapleItemInformationProvider.getInstance().isPickupRestricted(itemid) && c.getPlayer().getInventory(ItemConstants.getInventoryType(itemid)).findById(itemid) != null) { @@ -483,17 +488,7 @@ public class DueyProcessor { } } - long gainmesos; - long totalmesos = (long) dp.getMesos() + c.getPlayer().getMeso(); - - if (totalmesos < 0 || dp.getMesos() < 0) { - gainmesos = 0; - } else { - totalmesos = Math.min(totalmesos, Integer.MAX_VALUE); - gainmesos = totalmesos - c.getPlayer().getMeso(); - } - - c.getPlayer().gainMeso((int)gainmesos, false); + c.getPlayer().gainMeso(dp.getMesos(), false); removeItemFromDB(packageid); c.announce(MaplePacketCreator.removeItemFromDuey(false, packageid)); diff --git a/src/client/processor/FredrickProcessor.java b/src/client/processor/FredrickProcessor.java index 50cd97f912..49311315a0 100644 --- a/src/client/processor/FredrickProcessor.java +++ b/src/client/processor/FredrickProcessor.java @@ -47,7 +47,7 @@ import tools.Pair; */ public class FredrickProcessor { private static boolean canRetrieveFromFredrick(MapleCharacter chr, List> items) { - if (chr.getMeso() + chr.getMerchantMeso() < 0) { + if (!chr.canHoldMeso(chr.getMerchantMeso())) { return false; } return MapleInventory.checkSpotsAndOwnership(chr, items); diff --git a/src/constants/GameConstants.java b/src/constants/GameConstants.java index 1c5b8c7dd7..d8cfc98e9f 100644 --- a/src/constants/GameConstants.java +++ b/src/constants/GameConstants.java @@ -45,9 +45,8 @@ public class GameConstants { return(EXP_RATE_GAIN[slot]); } - // used by the "goto" command - public static final HashMap GOTO_MAPS = new HashMap() {{ - put("gmmap", 180000000); + // used by the "goto" command for players + public static final HashMap GOTO_TOWNS = new HashMap() {{ put("southperry", 60000); put("amherst", 1000000); put("henesys", 100000000); @@ -72,6 +71,25 @@ public class GameConstants { put("korean", 222000000); put("ellin", 300000000); put("nlc", 600000000); + put("showa", 801000000); + put("shrine", 800000000); + put("ariant", 260000000); + put("magatia", 261000000); + put("singapore", 540000000); + put("quay", 541000000); + put("kampung", 551000000); + put("amoria", 680000000); + put("temple", 270000100); + put("square", 103040000); + put("neo", 240070000); + put("mushking", 106020000); + }}; + + // used by the "goto" command for only-GMs + public static final HashMap GOTO_AREAS = new HashMap() {{ + putAll(GOTO_TOWNS); + + put("gmmap", 180000000); put("excavation", 990000000); put("mushmom", 100000005); put("griffey", 240020101); @@ -80,25 +98,13 @@ public class GameConstants { put("balrog", 105090900); put("zakum", 211042300); put("papu", 220080001); - put("showa", 801000000); put("guild", 200000301); - put("shrine", 800000000); put("skelegon", 240040511); put("hpq", 100000200); put("pianus", 230040420); put("horntail", 240050400); put("pinkbean", 270050000); - put("ariant", 260000000); - put("magatia", 261000000); - put("singapore", 540000000); - put("quay", 541000000); - put("kampung", 551000000); put("keep", 610020006); - put("amoria", 680000000); - put("temple", 270000100); - put("square", 103040000); - put("neo", 240070000); - put("mushking", 106020000); put("dojo", 925020001); put("bosspq", 970030000); put("fm", 910000000); diff --git a/src/constants/ServerConstants.java b/src/constants/ServerConstants.java index 26a8ac20d7..90217e1d8a 100644 --- a/src/constants/ServerConstants.java +++ b/src/constants/ServerConstants.java @@ -76,13 +76,15 @@ public class ServerConstants { public static final boolean USE_ITEM_SORT_BY_NAME = false; //Item sorting based on name rather than id. public static final boolean USE_PARTY_SEARCH = false; public static final boolean USE_PARTY_FOR_STARTERS = true; //Players level 10 or below can create/invite other players on the given level range. - public static final boolean USE_AUTOASSIGN_STARTERS_AP = false; //Beginners level 10 or below have their AP autoassigned (they can't choose to levelup a stat). Set true if the localhost doesn't support AP assigning for beginners level 10 or below. + public static final boolean USE_AUTOASSIGN_STARTERS_AP = false; //Beginners level 10 or below have their AP autoassigned (they can't choose to levelup a stat). Set true ONLY if the localhost doesn't support AP assigning for beginners level 10 or below. + public static final boolean USE_AUTOASSIGN_SECONDARY_CAP = true;//Prevents AP autoassign from spending on secondary stats after the player class' cap (defined on the autoassign handler) has been reached. public static final boolean USE_AUTOBAN = false; //Commands the server to detect infractors automatically. public static final boolean USE_AUTOBAN_LOG = true; //Log autoban related messages. Still logs even with USE_AUTOBAN disabled. public static final boolean USE_AUTOSAVE = true; //Enables server autosaving feature (saves characters to DB each 1 hour). public static final boolean USE_SERVER_AUTOASSIGNER = true; //HeavenMS-builtin autoassigner, uses algorithm based on distributing AP accordingly with required secondary stat on equipments. public static final boolean USE_REFRESH_RANK_MOVE = true; public static final boolean USE_ENFORCE_ADMIN_ACCOUNT = false; //Forces accounts having GM characters to be treated as a "GM account" by the client (localhost). Some of the GM account perks is the ability to FLY, but unable to TRADE. + public static final boolean USE_ENFORCE_NOVICE_EXPRATE = false; //Hardsets experience rate 1x for beginners level 10 or under. Ideal for roaming on novice areas without caring too much about losing some stats. public static final boolean USE_ENFORCE_HPMP_SWAP = false; //Forces players to reuse stats (via AP Resetting) located on HP/MP pool only inside the HP/MP stats. public static final boolean USE_ENFORCE_MOB_LEVEL_RANGE = true; //Players N levels below the killed mob will gain no experience from defeating it. public static final boolean USE_ENFORCE_JOB_LEVEL_RANGE = false;//Caps the player level on the minimum required to advance their current jobs. @@ -166,11 +168,13 @@ public class ServerConstants { public static final int ITEM_EXPIRE_CHECK = 10 * 1000; //Interval between item expiring tasks on maps, which checks and makes disappear expired items. public static final int ITEM_LIMIT_ON_MAP = 200; //Max number of items allowed on a map. public static final int MAP_VISITED_SIZE = 5; //Max length for last mapids visited by a player. This is used to recover and update drops on these maps accordingly with player actions. - public static final int MAP_DAMAGE_OVERTIME_INTERVAL = 5000;//Interval in seconds between map environment damage (e.g. El Nath and Aqua Road surrondings). + public static final int MAP_DAMAGE_OVERTIME_INTERVAL = 5000;//Interval in milliseconds between map environment damage (e.g. El Nath and Aqua Road surrondings). //Channel Mob Disease Monitor Configuration - public static final int MOB_STATUS_MONITOR_PROC = 200; //Frequency in milliseconds between each proc on the mob disease monitor schedule. - public static final int MOB_STATUS_MONITOR_LIFE = 84; //Idle proc count the mob disease monitor is allowed to be there before closing it due to inactivity. + public static final int MOB_STATUS_MONITOR_PROC = 200; //Frequency in milliseconds between each proc on the mob disease monitor schedule. + public static final int MOB_STATUS_MONITOR_LIFE = 84; //Idle proc count the mob disease monitor is allowed to be there before closing it due to inactivity. + public static final int MOB_STATUS_AGGRO_PERSISTENCE = 2; //Idle proc count on aggro update for a mob to keep following the current controller, given him/her is the leading damage dealer. + public static final int MOB_STATUS_AGGRO_INTERVAL = 5000; //Interval in milliseconds between aggro logistics update. //Some Gameplay Enhancing Configurations //Scroll Configuration diff --git a/src/net/opcodes/SendOpcode.java b/src/net/opcodes/SendOpcode.java index 55110e68c6..7a48ee7c45 100644 --- a/src/net/opcodes/SendOpcode.java +++ b/src/net/opcodes/SendOpcode.java @@ -228,6 +228,8 @@ public enum SendOpcode { GIVE_FOREIGN_BUFF(0xC7), CANCEL_FOREIGN_BUFF(0xC8), UPDATE_PARTYMEMBER_HP(0xC9), + GUILD_NAME_CHANGED(0xCA), + GUILD_MARK_CHANGED(0xCB), THROW_GRENADE(0xCC), CANCEL_CHAIR(0xCD), SHOW_ITEM_GAIN_INCHAT(0xCE), @@ -257,8 +259,8 @@ public enum SendOpcode { DAMAGE_MONSTER(0xF6), ARIANT_THING(0xF9), SHOW_MONSTER_HP(0xFA), - SHOW_DRAGGED(0xFB),//CATCH - CATCH_MONSTER(0xFC), + CATCH_MONSTER(0xFB), + CATCH_MONSTER_WITH_ITEM(0xFC), SHOW_MAGNET(0xFD), SPAWN_NPC(0x101), REMOVE_NPC(0x102), diff --git a/src/net/server/audit/ThreadTracker.java b/src/net/server/audit/ThreadTracker.java index 319f1bd144..6a62633029 100644 --- a/src/net/server/audit/ThreadTracker.java +++ b/src/net/server/audit/ThreadTracker.java @@ -35,7 +35,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import constants.ServerConstants; import net.server.audit.locks.MonitoredLockType; import server.TimerManager; import tools.FilePrinter; diff --git a/src/net/server/audit/locks/MonitoredLockType.java b/src/net/server/audit/locks/MonitoredLockType.java index bcf84b12de..a477e4ab74 100644 --- a/src/net/server/audit/locks/MonitoredLockType.java +++ b/src/net/server/audit/locks/MonitoredLockType.java @@ -84,6 +84,7 @@ public enum MonitoredLockType { VISITOR_PSHOP, STORAGE, MOB, + MOB_AGGRO, MOB_ANI, MOB_EXT, MOB_STATI, @@ -96,6 +97,8 @@ public enum MonitoredLockType { MAP_ITEM, MAP_LOOT, MAP_BOUNDS, + MAP_AGGRO, + MAP_AGGRO_IDLE, MINIDUNGEON, REACTOR, REACTOR_HIT; diff --git a/src/net/server/channel/handlers/AbstractDealDamageHandler.java b/src/net/server/channel/handlers/AbstractDealDamageHandler.java index 27db3c4ee8..3299f3d5ba 100644 --- a/src/net/server/channel/handlers/AbstractDealDamageHandler.java +++ b/src/net/server/channel/handlers/AbstractDealDamageHandler.java @@ -274,7 +274,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl totDamageToOneMonster += eachd; } totDamage += totDamageToOneMonster; - player.checkMonsterAggro(monster); + monster.aggroMonsterDamage(player, totDamageToOneMonster); if (player.getBuffedValue(MapleBuffStat.PICKPOCKET) != null && (attack.skill == 0 || attack.skill == Rogue.DOUBLE_STAB || attack.skill == Bandit.SAVAGE_BLOW || attack.skill == ChiefBandit.ASSAULTER || attack.skill == ChiefBandit.BAND_OF_THIEVES || attack.skill == Shadower.ASSASSINATE || attack.skill == Shadower.TAUNT || attack.skill == Shadower.BOOMERANG_STEP)) { Skill pickpocket = SkillFactory.getSkill(ChiefBandit.PICKPOCKET); int picklv = (player.isGM()) ? pickpocket.getMaxLevel() : player.getSkillLevel(pickpocket); diff --git a/src/net/server/channel/handlers/AbstractMovementPacketHandler.java b/src/net/server/channel/handlers/AbstractMovementPacketHandler.java index 405bf21ece..47f2852c60 100644 --- a/src/net/server/channel/handlers/AbstractMovementPacketHandler.java +++ b/src/net/server/channel/handlers/AbstractMovementPacketHandler.java @@ -51,11 +51,11 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH short ypos = lea.readShort(); short xwobble = lea.readShort(); short ywobble = lea.readShort(); - short unk = lea.readShort(); + short fh = lea.readShort(); byte newstate = lea.readByte(); short duration = lea.readShort(); AbsoluteLifeMovement alm = new AbsoluteLifeMovement(command, new Point(xpos, ypos), duration, newstate); - alm.setUnk(unk); + alm.setFh(fh); alm.setPixelsPerSecond(new Point(xwobble, ywobble)); res.add(alm); break; @@ -105,11 +105,11 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH /*case 11: { // Chair short xpos = lea.readShort(); short ypos = lea.readShort(); - short unk = lea.readShort(); + short fh = lea.readShort(); byte newstate = lea.readByte(); short duration = lea.readShort(); ChairMovement cm = new ChairMovement(command, new Point(xpos, ypos), duration, newstate); - cm.setUnk(unk); + cm.setFh(fh); res.add(cm); break; }*/ @@ -118,14 +118,14 @@ public abstract class AbstractMovementPacketHandler extends AbstractMaplePacketH short ypos = lea.readShort(); short xwobble = lea.readShort(); short ywobble = lea.readShort(); - short unk = lea.readShort(); short fh = lea.readShort(); + short ofh = lea.readShort(); byte newstate = lea.readByte(); short duration = lea.readShort(); JumpDownMovement jdm = new JumpDownMovement(command, new Point(xpos, ypos), duration, newstate); - jdm.setUnk(unk); + jdm.setFh(fh); jdm.setPixelsPerSecond(new Point(xwobble, ywobble)); - jdm.setFH(fh); + jdm.setOriginFh(ofh); res.add(jdm); break; } diff --git a/src/net/server/channel/handlers/AutoAggroHandler.java b/src/net/server/channel/handlers/AutoAggroHandler.java index ffb1124803..448f2adb5e 100644 --- a/src/net/server/channel/handlers/AutoAggroHandler.java +++ b/src/net/server/channel/handlers/AutoAggroHandler.java @@ -32,32 +32,15 @@ public final class AutoAggroHandler extends AbstractMaplePacketHandler { @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - if (c.getPlayer().isHidden()) return; // Don't auto aggro GM's in hide... + MapleCharacter player = c.getPlayer(); + if (player.isHidden()) return; // Don't auto aggro GM's in hide... - MapleMap map = c.getPlayer().getMap(); + MapleMap map = player.getMap(); int oid = slea.readInt(); MapleMonster monster = map.getMonsterByOid(oid); if (monster != null) { - MapleCharacter currentController = monster.getController(); - monster.lockMonster(); - try { - if (currentController != null) { - if (!monster.isControllerHasAggro()) { - if (map.getCharacterById(currentController.getId()) == null) { - monster.switchController(c.getPlayer(), true); - } else { - monster.switchController(currentController, true); - } - } else if (map.getCharacterById(currentController.getId()) == null) { - monster.switchController(c.getPlayer(), true); - } - } else { - monster.switchController(c.getPlayer(), true); - } - } finally { - monster.unlockMonster(); - } + monster.aggroAutoAggroUpdate(player); } } } diff --git a/src/net/server/channel/handlers/GuildOperationHandler.java b/src/net/server/channel/handlers/GuildOperationHandler.java index dbfbf39572..92483e8c51 100644 --- a/src/net/server/channel/handlers/GuildOperationHandler.java +++ b/src/net/server/channel/handlers/GuildOperationHandler.java @@ -47,10 +47,6 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { return true; } - private void restancePlayer(MapleCharacter mc) { - mc.broadcastStance(); - } - private class Invited { public String name; public int gid; @@ -131,7 +127,8 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { c.announce(MaplePacketCreator.showGuildInfo(mc)); c.getPlayer().dropMessage(1, "You have successfully created a Guild."); - restancePlayer(mc); + mc.getGuild().broadcastNameChanged(); + mc.getGuild().broadcastEmblemChanged(); break; case 0x05: if (mc.getGuildId() <= 0 || mc.getGuildRank() > 2) { @@ -191,7 +188,8 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { if(allianceId > 0) Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc); mc.saveGuildStatus(); // update database - restancePlayer(mc); + mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildNameChanged(mc.getId(), mc.getGuild().getName())); // thanks Vcoc for pointing out an issue with updating guild tooltip to players in the map + mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildMarkChanged(mc.getId(), mc.getGuild())); break; case 0x07: cid = slea.readInt(); @@ -212,7 +210,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { mc.getMGC().setGuildId(0); mc.getMGC().setGuildRank(5); mc.saveGuildStatus(); - restancePlayer(mc); + mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildNameChanged(mc.getId(), "")); break; case 0x08: allianceId = mc.getGuild().getAllianceId(); @@ -272,7 +270,8 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler { } mc.gainMeso(-ServerConstants.CHANGE_EMBLEM_COST, true, false, true); - restancePlayer(mc); + mc.getGuild().broadcastNameChanged(); + mc.getGuild().broadcastEmblemChanged(); break; case 0x10: if (mc.getGuildId() <= 0 || mc.getGuildRank() > 2) { diff --git a/src/net/server/channel/handlers/MoveLifeHandler.java b/src/net/server/channel/handlers/MoveLifeHandler.java index 4ee2f0a88b..93c2c3035d 100644 --- a/src/net/server/channel/handlers/MoveLifeHandler.java +++ b/src/net/server/channel/handlers/MoveLifeHandler.java @@ -77,8 +77,6 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { boolean isAttack = inRangeInclusive(rawActivity, 24, 41); boolean isSkill = inRangeInclusive(rawActivity, 42, 59); - - boolean currentController = (monster.getController() == player); MobSkill toUse = null; int useSkillId = 0, useSkillLevel = 0; @@ -112,10 +110,6 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { int atkStatus = monster.canUseAttack(castPos, isSkill); if (atkStatus < 1) { - if (!currentController) { - return; - } - rawActivity = -1; pOption = 0; } @@ -147,24 +141,8 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { Point startPos = new Point(start_x, start_y - 2); List res = parseMovement(slea); - boolean aggro; - monster.lockMonster(); - try { - if (!currentController) { - if (monster.isAttackedBy(player)) { - monster.switchController(player, true); - } else { - return; - } - } - - aggro = monster.isControllerHasAggro(); - if (aggro) { - monster.setControllerKnowsAboutAggro(true); - } - } finally { - monster.unlockMonster(); - } + Boolean aggro = monster.aggroMoveLifeUpdate(player); + if (aggro == null) return; if (nextUse != null) { c.announce(MaplePacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro, nextSkillId, nextSkillLevel)); @@ -174,7 +152,7 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { if (res != null) { if (ServerConstants.USE_DEBUG_SHOW_RCVD_MVLIFE) { - System.out.println((isSkill ? "SKILL " : (isAttack ? "ATTCK " : " ")) + "castPos: " + castPos + " rawAct: " + rawActivity + " opt: " + pOption + " skillID: " + useSkillId + " skillLV: " + useSkillLevel + " " + "allowSkill: " + nextMovementCouldBeSkill); + System.out.println((isSkill ? "SKILL " : (isAttack ? "ATTCK " : " ")) + "castPos: " + castPos + " rawAct: " + rawActivity + " opt: " + pOption + " skillID: " + useSkillId + " skillLV: " + useSkillLevel + " " + "allowSkill: " + nextMovementCouldBeSkill + " mobMp: " + mobMp); } map.broadcastMessage(player, MaplePacketCreator.moveMonster(objectid, nextMovementCouldBeSkill, rawActivity, useSkillId, useSkillLevel, pOption, startPos, res), monster.getPosition()); diff --git a/src/net/server/channel/handlers/PlayerInteractionHandler.java b/src/net/server/channel/handlers/PlayerInteractionHandler.java index d674c85ac0..8e06663fea 100644 --- a/src/net/server/channel/handlers/PlayerInteractionHandler.java +++ b/src/net/server/channel/handlers/PlayerInteractionHandler.java @@ -35,6 +35,7 @@ import net.AbstractMaplePacketHandler; import server.MapleItemInformationProvider; import server.MapleTrade; import constants.GameConstants; +import java.sql.SQLException; import server.maps.FieldLimit; import server.maps.MapleHiredMerchant; import server.maps.MapleMapObject; @@ -61,8 +62,8 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { CHAT(6), CHAT_THING(8), EXIT(0xA), - OPEN(0xB), - TRADE_BIRTHDAY(0x0E), + OPEN_STORE(0xB), + OPEN_CASH(0xE), SET_ITEMS(0xF), SET_MESO(0x10), CONFIRM(0x11), @@ -74,7 +75,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { REMOVE_ITEM(0x1B), BAN_PLAYER(0x1C), MERCHANT_THING(0x1D), - OPEN_STORE(0x1E), + OPEN_THING(0x1E), PUT_ITEM(0x21), MERCHANT_BUY(0x22), TAKE_ITEM_BACK(0x26), @@ -136,7 +137,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { try { byte mode = slea.readByte(); final MapleCharacter chr = c.getPlayer(); - + if (mode == Action.CREATE.getCode()) { if(!chr.isAlive()) { // thanks GabrielSin for pointing this chr.getClient().announce(MaplePacketCreator.getMiniRoomError(4)); @@ -333,14 +334,25 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { chr.closeMiniGame(); chr.closeHiredMerchant(true); } - } else if (mode == Action.OPEN.getCode()) { + } else if (mode == Action.OPEN_STORE.getCode() || mode == Action.OPEN_CASH.getCode()) { if (isTradeOpen(chr)) return; + + if (mode == Action.OPEN_STORE.getCode()) { + slea.readByte(); //01 + } else { + slea.readShort(); + int birthday = slea.readInt(); + if (!CashOperationHandler.checkBirthday(c, birthday)) { // birthday check here found thanks to lucasziron + c.announce(MaplePacketCreator.serverNotice(1, "Please check again the birthday date.")); + return; + } + + c.announce(MaplePacketCreator.hiredMerchantOwnerMaintenanceLeave()); + } MaplePlayerShop shop = chr.getPlayerShop(); MapleHiredMerchant merchant = chr.getHiredMerchant(); if (shop != null && shop.isOwner(chr)) { - slea.readByte();//01 - if(ServerConstants.USE_ERASE_PERMIT_ON_OPENSHOP) { try { MapleInventoryManipulator.removeById(c, MapleInventoryType.CASH, shop.getItemId(), 1, true, false); @@ -355,7 +367,6 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { chr.getMap().addMapObject(merchant); chr.setHiredMerchant(null); chr.getMap().broadcastMessage(MaplePacketCreator.spawnHiredMerchantBox(merchant)); - slea.readByte(); } } else if (mode == Action.READY.getCode()) { MapleMiniGame game = chr.getMiniGame(); @@ -528,7 +539,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { c.announce(MaplePacketCreator.serverNotice(1, "Cash items are not allowed to be sold on the Player Store.")); return; } - + if (ServerConstants.USE_ENFORCE_UNMERCHABLE_PET && ItemConstants.isPet(ivItem.getItemId())) { c.announce(MaplePacketCreator.serverNotice(1, "Pets are not allowed to be sold on the Player Store.")); return; @@ -543,26 +554,44 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MaplePlayerShop shop = chr.getPlayerShop(); MapleHiredMerchant merchant = chr.getHiredMerchant(); if (shop != null && shop.isOwner(chr)) { - if (shop.isOpen()) { + if (shop.isOpen() || !shop.addItem(shopItem)) { // thanks Vcoc for pointing an exploit with unlimited shop slots c.announce(MaplePacketCreator.serverNotice(1, "You can't sell it anymore.")); return; } - - shop.addItem(shopItem); + + if (ItemConstants.isRechargeable(ivItem.getItemId())) { + MapleInventoryManipulator.removeFromSlot(c, ivType, slot, ivItem.getQuantity(), true); + } else { + MapleInventoryManipulator.removeFromSlot(c, ivType, slot, (short) (bundles * perBundle), true); + } + c.announce(MaplePacketCreator.getPlayerShopItemUpdate(shop)); } else if (merchant != null && merchant.isOwner(chr)) { - if (merchant.isOpen()) { + if (ivType.equals(MapleInventoryType.CASH) && merchant.isPublished()) { + c.announce(MaplePacketCreator.serverNotice(1, "Cash items are only allowed to be sold when first opening the store.")); + return; + } + + if (merchant.isOpen() || !merchant.addItem(shopItem)) { // thanks Vcoc for pointing an exploit with unlimited shop slots c.announce(MaplePacketCreator.serverNotice(1, "You can't sell it anymore.")); return; } - - merchant.addItem(shopItem); + + if (ItemConstants.isRechargeable(ivItem.getItemId())) { + MapleInventoryManipulator.removeFromSlot(c, ivType, slot, ivItem.getQuantity(), true); + } else { + MapleInventoryManipulator.removeFromSlot(c, ivType, slot, (short) (bundles * perBundle), true); + } + c.announce(MaplePacketCreator.updateHiredMerchant(merchant, chr)); - } - if (ItemConstants.isRechargeable(ivItem.getItemId())) { - MapleInventoryManipulator.removeFromSlot(c, ivType, slot, ivItem.getQuantity(), true); + + try { + merchant.saveItems(false); // thanks Masterrulax for realizing yet another dupe with merchants/Fredrick + } catch (SQLException ex) { + ex.printStackTrace(); + } } else { - MapleInventoryManipulator.removeFromSlot(c, ivType, slot, (short) (bundles * perBundle), true); + c.announce(MaplePacketCreator.serverNotice(1, "You can't sell without owning a shop.")); } } else if (mode == Action.REMOVE_ITEM.getCode()) { if (isTradeOpen(chr)) return; @@ -616,8 +645,9 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { MaplePlayerShop shop = chr.getPlayerShop(); MapleHiredMerchant merchant = chr.getHiredMerchant(); if (shop != null && shop.isVisitor(chr)) { - shop.buy(c, itemid, quantity); - shop.broadcast(MaplePacketCreator.getPlayerShopItemUpdate(shop)); + if (shop.buy(c, itemid, quantity)) { + shop.broadcast(MaplePacketCreator.getPlayerShopItemUpdate(shop)); + } } else if (merchant != null && !merchant.isOwner(chr)) { merchant.buy(c, itemid, quantity); merchant.broadcastToVisitorsThreadsafe(MaplePacketCreator.updateHiredMerchant(merchant, chr)); @@ -661,6 +691,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler { if (merchant.isOwner(chr)) { merchant.clearMessages(); merchant.setOpen(true); + merchant.getMap().broadcastMessage(MaplePacketCreator.updateHiredMerchantBox(merchant)); } } diff --git a/src/net/server/channel/handlers/PlayerLoggedinHandler.java b/src/net/server/channel/handlers/PlayerLoggedinHandler.java index 527d9581c6..cb56de4fe2 100644 --- a/src/net/server/channel/handlers/PlayerLoggedinHandler.java +++ b/src/net/server/channel/handlers/PlayerLoggedinHandler.java @@ -62,7 +62,9 @@ import constants.ServerConstants; import java.net.InetSocketAddress; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import net.server.coordinator.MapleEventRecallCoordinator; import net.server.coordinator.MapleSessionCoordinator; import org.apache.mina.core.session.IoSession; @@ -72,6 +74,25 @@ import tools.packets.Wedding; public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { + private static Set attemptingLoginAccounts = new HashSet<>(); + + private boolean tryAcquireAccount(int accId) { + synchronized (attemptingLoginAccounts) { + if (attemptingLoginAccounts.contains(accId)) { + return false; + } + + attemptingLoginAccounts.add(accId); + return true; + } + } + + private void releaseAccount(int accId) { + synchronized (attemptingLoginAccounts) { + attemptingLoginAccounts.remove(accId); + } + } + @Override public final boolean validateState(MapleClient c) { return !c.isLoggedIn(); @@ -82,298 +103,313 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler { final int cid = slea.readInt(); final Server server = Server.getInstance(); - World wserv = server.getWorld(c.getWorld()); - if(wserv == null) { - c.disconnect(true, false); - return; - } - - Channel cserv = wserv.getChannel(c.getChannel()); - if(cserv == null) { - c.setChannel(1); - cserv = wserv.getChannel(c.getChannel()); - - if(cserv == null) { - c.disconnect(true, false); - return; - } - } - - MapleCharacter player = wserv.getPlayerStorage().getCharacterById(cid); - boolean newcomer = false; - - IoSession session = c.getSession(); - String remoteHwid; - if (player == null) { - if (!server.validateCharacteridInTransition((InetSocketAddress) session.getRemoteAddress(), cid)) { - c.disconnect(true, false); - return; - } - - remoteHwid = MapleSessionCoordinator.getInstance().getGameSessionHwid(session); - if (remoteHwid == null) { - c.disconnect(true, false); - return; - } - + if (c.tryacquireClient()) { // thanks MedicOP for assisting on concurrency protection here try { - player = MapleCharacter.loadCharFromDB(cid, c, true); - newcomer = true; - } catch (SQLException e) { - e.printStackTrace(); - } - } else { - remoteHwid = player.getClient().getHWID(); - } - - if (player == null) { //If you are still getting null here then please just uninstall the game >.>, we dont need you fucking with the logs - c.disconnect(true, false); - return; - } - - c.setPlayer(player); - c.setAccID(player.getAccountID()); - - boolean allowLogin = true; - - /* is this check really necessary? - if (state == MapleClient.LOGIN_SERVER_TRANSITION || state == MapleClient.LOGIN_NOTLOGGEDIN) { - List charNames = c.loadCharacterNames(c.getWorld()); - if(!newcomer) { - charNames.remove(player.getName()); - } - - for (String charName : charNames) { - if(wserv.getPlayerStorage().getCharacterByName(charName) != null) { - allowLogin = false; - break; - } - } - } - */ - - c.lockClient(); // Sync this to prevent wrong login state for double channel changes - try { - int state = c.getLoginState(); - if (state != MapleClient.LOGIN_SERVER_TRANSITION || !allowLogin) { - c.setPlayer(null); - c.setAccID(0); - - if (state == MapleClient.LOGIN_LOGGEDIN) { + World wserv = server.getWorld(c.getWorld()); + if(wserv == null) { c.disconnect(true, false); - } else { - c.announce(MaplePacketCreator.getAfterLoginError(7)); + return; } - - return; - } - c.updateLoginState(MapleClient.LOGIN_LOGGEDIN); - } finally { - c.unlockClient(); - } - - if (!newcomer) { - c.setCharacterSlots((byte) player.getClient().getCharacterSlots()); - player.newClient(c); - } - - int hwidLen = remoteHwid.length(); - session.setAttribute(MapleClient.CLIENT_HWID, remoteHwid); - session.setAttribute(MapleClient.CLIENT_NIBBLEHWID, remoteHwid.substring(hwidLen - 8, hwidLen)); - c.setHWID(remoteHwid); - - cserv.addPlayer(player); - wserv.addPlayer(player); - player.setEnteredChannelWorld(); - - List buffs = server.getPlayerBuffStorage().getBuffsFromStorage(cid); - if (buffs != null) { - List> timedBuffs = getLocalStartTimes(buffs); - player.silentGiveBuffs(timedBuffs); - } - - Map> diseases = server.getPlayerBuffStorage().getDiseasesFromStorage(cid); - if (diseases != null) { - player.silentApplyDiseases(diseases); - } - - c.announce(MaplePacketCreator.getCharInfo(player)); - if (!player.isHidden()) { - if(player.isGM() && ServerConstants.USE_AUTOHIDE_GM) { - player.toggleHide(true); - } - } - player.sendKeymap(); - player.sendMacros(); - - // pot bindings being passed through other characters on the account detected thanks to Croosade dev team - MapleKeyBinding autohpPot = player.getKeymap().get(91); - player.announce(MaplePacketCreator.sendAutoHpPot(autohpPot != null ? autohpPot.getAction() : 0)); - - MapleKeyBinding autompPot = player.getKeymap().get(92); - player.announce(MaplePacketCreator.sendAutoMpPot(autompPot != null ? autompPot.getAction() : 0)); - - player.getMap().addPlayer(player); - player.visitMap(player.getMap()); - - BuddyList bl = player.getBuddylist(); - int buddyIds[] = bl.getBuddyIds(); - wserv.loggedOn(player.getName(), player.getId(), c.getChannel(), buddyIds); - for (CharacterIdChannelPair onlineBuddy : wserv.multiBuddyFind(player.getId(), buddyIds)) { - BuddylistEntry ble = bl.get(onlineBuddy.getCharacterId()); - ble.setChannel(onlineBuddy.getChannel()); - bl.put(ble); - } - c.announce(MaplePacketCreator.updateBuddylist(bl.getBuddies())); - - c.announce(MaplePacketCreator.loadFamily(player)); - if (player.getFamilyId() > 0) { - MapleFamily f = wserv.getFamily(player.getFamilyId()); - if (f == null) { - f = new MapleFamily(player.getId()); - wserv.addFamily(player.getFamilyId(), f); - } - player.setFamily(f); - c.announce(MaplePacketCreator.getFamilyInfo(f.getMember(player.getId()))); - } - if (player.getGuildId() > 0) { - MapleGuild playerGuild = server.getGuild(player.getGuildId(), player.getWorld(), player); - if (playerGuild == null) { - player.deleteGuild(player.getGuildId()); - player.getMGC().setGuildId(0); - player.getMGC().setGuildRank(5); - } else { - playerGuild.getMGC(player.getId()).setCharacter(player); - player.setMGC(playerGuild.getMGC(player.getId())); - server.setGuildMemberOnline(player, true, c.getChannel()); - c.announce(MaplePacketCreator.showGuildInfo(player)); - int allianceId = player.getGuild().getAllianceId(); - if (allianceId > 0) { - MapleAlliance newAlliance = server.getAlliance(allianceId); - if (newAlliance == null) { - newAlliance = MapleAlliance.loadAlliance(allianceId); - if (newAlliance != null) { - server.addAlliance(allianceId, newAlliance); - } else { - player.getGuild().setAllianceId(0); - } - } - if (newAlliance != null) { - c.announce(MaplePacketCreator.updateAllianceInfo(newAlliance, c)); - c.announce(MaplePacketCreator.allianceNotice(newAlliance.getId(), newAlliance.getNotice())); - - if (newcomer) { - server.allianceMessage(allianceId, MaplePacketCreator.allianceMemberOnline(player, true), player.getId(), -1); - } - } - } - } - } - player.showNote(); - if (player.getParty() != null) { - MaplePartyCharacter pchar = player.getMPC(); - - //Use this in case of enabling party HPbar HUD when logging in, however "you created a party" will appear on chat. - //c.announce(MaplePacketCreator.partyCreated(pchar)); - - pchar.setChannel(c.getChannel()); - pchar.setMapId(player.getMapId()); - pchar.setOnline(true); - wserv.updateParty(player.getParty().getId(), PartyOperation.LOG_ONOFF, pchar); - player.updatePartyMemberHP(); - } - - MapleInventory eqpInv = player.getInventory(MapleInventoryType.EQUIPPED); - eqpInv.lockInventory(); - try { - for(Item it : eqpInv.list()) { - player.equippedItem((Equip) it); - } - } finally { - eqpInv.unlockInventory(); - } - - c.announce(MaplePacketCreator.updateBuddylist(player.getBuddylist().getBuddies())); - - CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest(); - if (pendingBuddyRequest != null) { - c.announce(MaplePacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); - } - - c.announce(MaplePacketCreator.updateGender(player)); - player.checkMessenger(); - c.announce(MaplePacketCreator.enableReport()); - player.changeSkillLevel(SkillFactory.getSkill(10000000 * player.getJobType() + 12), (byte) (player.getLinkedLevel() / 10), 20, -1); - player.checkBerserk(player.isHidden()); - - if (newcomer) { - for(MaplePet pet : player.getPets()) { - if(pet != null) - wserv.registerPetHunger(player, player.getPetIndex(pet)); - } - - player.reloadQuestExpirations(); - - /* - if (!c.hasVotedAlready()){ - player.announce(MaplePacketCreator.earnTitleMessage("You can vote now! Vote and earn a vote point!")); - } - */ - if (player.isGM()){ - Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.earnTitleMessage((player.gmLevel() < 6 ? "GM " : "Admin ") + player.getName() + " has logged in")); - } - - if(diseases != null) { - for(Entry> e : diseases.entrySet()) { - final List> debuff = Collections.singletonList(new Pair<>(e.getKey(), Integer.valueOf(e.getValue().getRight().getX()))); - c.announce(MaplePacketCreator.giveDebuff(debuff, e.getValue().getRight())); + Channel cserv = wserv.getChannel(c.getChannel()); + if(cserv == null) { + c.setChannel(1); + cserv = wserv.getChannel(c.getChannel()); + + if(cserv == null) { + c.disconnect(true, false); + return; + } + } + + MapleCharacter player = wserv.getPlayerStorage().getCharacterById(cid); + boolean newcomer = false; + + IoSession session = c.getSession(); + String remoteHwid; + if (player == null) { + if (!server.validateCharacteridInTransition((InetSocketAddress) session.getRemoteAddress(), cid)) { + c.disconnect(true, false); + return; + } + + remoteHwid = MapleSessionCoordinator.getInstance().getGameSessionHwid(session); + if (remoteHwid == null) { + c.disconnect(true, false); + return; + } + + try { + player = MapleCharacter.loadCharFromDB(cid, c, true); + newcomer = true; + } catch (SQLException e) { + e.printStackTrace(); + } + } else { + remoteHwid = player.getClient().getHWID(); + } + + if (player == null) { //If you are still getting null here then please just uninstall the game >.>, we dont need you fucking with the logs + c.disconnect(true, false); + return; + } + + c.setPlayer(player); + c.setAccID(player.getAccountID()); + + boolean allowLogin = true; + + /* is this check really necessary? + if (state == MapleClient.LOGIN_SERVER_TRANSITION || state == MapleClient.LOGIN_NOTLOGGEDIN) { + List charNames = c.loadCharacterNames(c.getWorld()); + if(!newcomer) { + charNames.remove(player.getName()); + } + + for (String charName : charNames) { + if(wserv.getPlayerStorage().getCharacterByName(charName) != null) { + allowLogin = false; + break; + } + } + } + */ + + int accId = c.getAccID(); + if (tryAcquireAccount(accId)) { // Sync this to prevent wrong login state for double loggedin handling + try { + int state = c.getLoginState(); + if (state != MapleClient.LOGIN_SERVER_TRANSITION || !allowLogin) { + c.setPlayer(null); + c.setAccID(0); + + if (state == MapleClient.LOGIN_LOGGEDIN) { + c.disconnect(true, false); + } else { + c.announce(MaplePacketCreator.getAfterLoginError(7)); + } + + return; + } + c.updateLoginState(MapleClient.LOGIN_LOGGEDIN); + } finally { + releaseAccount(accId); + } + } else { + c.setPlayer(null); + c.setAccID(0); + c.announce(MaplePacketCreator.getAfterLoginError(10)); + return; } - player.announceDiseases(); + if (!newcomer) { + c.setCharacterSlots((byte) player.getClient().getCharacterSlots()); + player.newClient(c); + } + + int hwidLen = remoteHwid.length(); + session.setAttribute(MapleClient.CLIENT_HWID, remoteHwid); + session.setAttribute(MapleClient.CLIENT_NIBBLEHWID, remoteHwid.substring(hwidLen - 8, hwidLen)); + c.setHWID(remoteHwid); + + cserv.addPlayer(player); + wserv.addPlayer(player); + player.setEnteredChannelWorld(); + + List buffs = server.getPlayerBuffStorage().getBuffsFromStorage(cid); + if (buffs != null) { + List> timedBuffs = getLocalStartTimes(buffs); + player.silentGiveBuffs(timedBuffs); + } + + Map> diseases = server.getPlayerBuffStorage().getDiseasesFromStorage(cid); + if (diseases != null) { + player.silentApplyDiseases(diseases); + } + + c.announce(MaplePacketCreator.getCharInfo(player)); + if (!player.isHidden()) { + if(player.isGM() && ServerConstants.USE_AUTOHIDE_GM) { + player.toggleHide(true); + } + } + player.sendKeymap(); + player.sendMacros(); + + // pot bindings being passed through other characters on the account detected thanks to Croosade dev team + MapleKeyBinding autohpPot = player.getKeymap().get(91); + player.announce(MaplePacketCreator.sendAutoHpPot(autohpPot != null ? autohpPot.getAction() : 0)); + + MapleKeyBinding autompPot = player.getKeymap().get(92); + player.announce(MaplePacketCreator.sendAutoMpPot(autompPot != null ? autompPot.getAction() : 0)); + + player.getMap().addPlayer(player); + player.visitMap(player.getMap()); + + BuddyList bl = player.getBuddylist(); + int buddyIds[] = bl.getBuddyIds(); + wserv.loggedOn(player.getName(), player.getId(), c.getChannel(), buddyIds); + for (CharacterIdChannelPair onlineBuddy : wserv.multiBuddyFind(player.getId(), buddyIds)) { + BuddylistEntry ble = bl.get(onlineBuddy.getCharacterId()); + ble.setChannel(onlineBuddy.getChannel()); + bl.put(ble); + } + c.announce(MaplePacketCreator.updateBuddylist(bl.getBuddies())); + + c.announce(MaplePacketCreator.loadFamily(player)); + if (player.getFamilyId() > 0) { + MapleFamily f = wserv.getFamily(player.getFamilyId()); + if (f == null) { + f = new MapleFamily(player.getId()); + wserv.addFamily(player.getFamilyId(), f); + } + player.setFamily(f); + c.announce(MaplePacketCreator.getFamilyInfo(f.getMember(player.getId()))); + } + if (player.getGuildId() > 0) { + MapleGuild playerGuild = server.getGuild(player.getGuildId(), player.getWorld(), player); + if (playerGuild == null) { + player.deleteGuild(player.getGuildId()); + player.getMGC().setGuildId(0); + player.getMGC().setGuildRank(5); + } else { + playerGuild.getMGC(player.getId()).setCharacter(player); + player.setMGC(playerGuild.getMGC(player.getId())); + server.setGuildMemberOnline(player, true, c.getChannel()); + c.announce(MaplePacketCreator.showGuildInfo(player)); + int allianceId = player.getGuild().getAllianceId(); + if (allianceId > 0) { + MapleAlliance newAlliance = server.getAlliance(allianceId); + if (newAlliance == null) { + newAlliance = MapleAlliance.loadAlliance(allianceId); + if (newAlliance != null) { + server.addAlliance(allianceId, newAlliance); + } else { + player.getGuild().setAllianceId(0); + } + } + if (newAlliance != null) { + c.announce(MaplePacketCreator.updateAllianceInfo(newAlliance, c)); + c.announce(MaplePacketCreator.allianceNotice(newAlliance.getId(), newAlliance.getNotice())); + + if (newcomer) { + server.allianceMessage(allianceId, MaplePacketCreator.allianceMemberOnline(player, true), player.getId(), -1); + } + } + } + } + } + + player.showNote(); + if (player.getParty() != null) { + MaplePartyCharacter pchar = player.getMPC(); + + //Use this in case of enabling party HPbar HUD when logging in, however "you created a party" will appear on chat. + //c.announce(MaplePacketCreator.partyCreated(pchar)); + + pchar.setChannel(c.getChannel()); + pchar.setMapId(player.getMapId()); + pchar.setOnline(true); + wserv.updateParty(player.getParty().getId(), PartyOperation.LOG_ONOFF, pchar); + player.updatePartyMemberHP(); + } + + MapleInventory eqpInv = player.getInventory(MapleInventoryType.EQUIPPED); + eqpInv.lockInventory(); + try { + for(Item it : eqpInv.list()) { + player.equippedItem((Equip) it); + } + } finally { + eqpInv.unlockInventory(); + } + + c.announce(MaplePacketCreator.updateBuddylist(player.getBuddylist().getBuddies())); + + CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest(); + if (pendingBuddyRequest != null) { + c.announce(MaplePacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName())); + } + + c.announce(MaplePacketCreator.updateGender(player)); + player.checkMessenger(); + c.announce(MaplePacketCreator.enableReport()); + player.changeSkillLevel(SkillFactory.getSkill(10000000 * player.getJobType() + 12), (byte) (player.getLinkedLevel() / 10), 20, -1); + player.checkBerserk(player.isHidden()); + + if (newcomer) { + for(MaplePet pet : player.getPets()) { + if(pet != null) + wserv.registerPetHunger(player, player.getPetIndex(pet)); + } + + player.reloadQuestExpirations(); + + /* + if (!c.hasVotedAlready()){ + player.announce(MaplePacketCreator.earnTitleMessage("You can vote now! Vote and earn a vote point!")); + } + */ + if (player.isGM()){ + Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.earnTitleMessage((player.gmLevel() < 6 ? "GM " : "Admin ") + player.getName() + " has logged in")); + } + + if(diseases != null) { + for(Entry> e : diseases.entrySet()) { + final List> debuff = Collections.singletonList(new Pair<>(e.getKey(), Integer.valueOf(e.getValue().getRight().getX()))); + c.announce(MaplePacketCreator.giveDebuff(debuff, e.getValue().getRight())); + } + + player.announceDiseases(); + } + } else { + if(player.isRidingBattleship()) { + player.announceBattleshipHp(); + } + } + + player.buffExpireTask(); + player.diseaseExpireTask(); + player.skillCooldownTask(); + player.expirationTask(); + player.questExpirationTask(); + if (GameConstants.hasSPTable(player.getJob()) && player.getJob().getId() != 2001) { + player.createDragon(); + } + + player.commitExcludedItems(); + showDueyNotification(c, player); + + if (player.getMap().getHPDec() > 0) player.resetHpDecreaseTask(); + + player.resetPlayerRates(); + if(ServerConstants.USE_ADD_RATES_BY_LEVEL == true) player.setPlayerRates(); + player.setWorldRates(); + player.updateCouponRates(); + + player.receivePartyMemberHP(); + + if(player.getPartnerId() > 0) { + int partnerId = player.getPartnerId(); + final MapleCharacter partner = wserv.getPlayerStorage().getCharacterById(partnerId); + + if(partner != null && !partner.isAwayFromWorld()) { + player.announce(Wedding.OnNotifyWeddingPartnerTransfer(partnerId, partner.getMapId())); + partner.announce(Wedding.OnNotifyWeddingPartnerTransfer(player.getId(), player.getMapId())); + } + } + + if (newcomer) { + EventInstanceManager eim = MapleEventRecallCoordinator.getInstance().recallEventInstance(cid); + if (eim != null) { + eim.registerPlayer(player); + } + } + } finally { + c.releaseClient(); } } else { - if(player.isRidingBattleship()) { - player.announceBattleshipHp(); - } - } - - player.buffExpireTask(); - player.diseaseExpireTask(); - player.skillCooldownTask(); - player.expirationTask(); - player.questExpirationTask(); - if (GameConstants.hasSPTable(player.getJob()) && player.getJob().getId() != 2001) { - player.createDragon(); - } - - player.commitExcludedItems(); - showDueyNotification(c, player); - - if (player.getMap().getHPDec() > 0) player.resetHpDecreaseTask(); - - player.resetPlayerRates(); - if(ServerConstants.USE_ADD_RATES_BY_LEVEL == true) player.setPlayerRates(); - player.setWorldRates(); - player.updateCouponRates(); - - player.receivePartyMemberHP(); - - if(player.getPartnerId() > 0) { - int partnerId = player.getPartnerId(); - final MapleCharacter partner = wserv.getPlayerStorage().getCharacterById(partnerId); - - if(partner != null && !partner.isAwayFromWorld()) { - player.announce(Wedding.OnNotifyWeddingPartnerTransfer(partnerId, partner.getMapId())); - partner.announce(Wedding.OnNotifyWeddingPartnerTransfer(player.getId(), player.getMapId())); - } - } - - if (newcomer) { - EventInstanceManager eim = MapleEventRecallCoordinator.getInstance().recallEventInstance(cid); - if (eim != null) { - eim.registerPlayer(player); - } + c.announce(MaplePacketCreator.getAfterLoginError(10)); } } diff --git a/src/net/server/channel/handlers/SpecialMoveHandler.java b/src/net/server/channel/handlers/SpecialMoveHandler.java index 1fb868d340..b40b5ab874 100644 --- a/src/net/server/channel/handlers/SpecialMoveHandler.java +++ b/src/net/server/channel/handlers/SpecialMoveHandler.java @@ -91,26 +91,22 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler { } if (skillid == Hero.MONSTER_MAGNET || skillid == Paladin.MONSTER_MAGNET || skillid == DarkKnight.MONSTER_MAGNET) { // Monster Magnet int num = slea.readInt(); - int mobId; - byte success; for (int i = 0; i < num; i++) { - mobId = slea.readInt(); - success = slea.readByte(); - chr.getMap().broadcastMessage(chr, MaplePacketCreator.showMagnet(mobId, success), false); - MapleMonster monster = chr.getMap().getMonsterByOid(mobId); + int mobOid = slea.readInt(); + byte success = slea.readByte(); + chr.getMap().broadcastMessage(chr, MaplePacketCreator.catchMonster(mobOid, success), false); + MapleMonster monster = chr.getMap().getMonsterByOid(mobOid); if (monster != null) { if (!monster.isBoss()) { - monster.lockMonster(); - try { - monster.switchController(chr, monster.isControllerHasAggro()); - } finally { - monster.unlockMonster(); - } + monster.aggroClearDamages(); + monster.aggroMonsterDamage(chr, 1); + + monster.aggroSwitchController(chr, true); } } } - byte direction = slea.readByte(); - chr.getMap().broadcastMessage(chr, MaplePacketCreator.showBuffeffect(chr.getId(), skillid, chr.getSkillLevel(skillid), direction), false); + byte direction = slea.readByte(); // thanks MedicOP for pointing some 3rd-party related issues with Magnet + chr.getMap().broadcastMessage(chr, MaplePacketCreator.showBuffeffect(chr.getId(), skillid, chr.getSkillLevel(skillid), 1, direction), false); c.announce(MaplePacketCreator.enableActions()); return; } else if (skillid == Brawler.MP_RECOVERY) {// MP Recovery diff --git a/src/net/server/channel/handlers/TakeDamageHandler.java b/src/net/server/channel/handlers/TakeDamageHandler.java index b38e04a225..9a67b895a2 100644 --- a/src/net/server/channel/handlers/TakeDamageHandler.java +++ b/src/net/server/channel/handlers/TakeDamageHandler.java @@ -191,7 +191,7 @@ public final class TakeDamageHandler extends AbstractMaplePacketHandler { damage -= bouncedamage; map.damageMonster(chr, attacker, bouncedamage); map.broadcastMessage(chr, MaplePacketCreator.damageMonster(oid, bouncedamage), false, true); - chr.checkMonsterAggro(attacker); + attacker.aggroMonsterDamage(chr, bouncedamage); } if (attacker != null && damagefrom == -1 && chr.getBuffedValue(MapleBuffStat.BODY_PRESSURE) != null) { Skill skill = SkillFactory.getSkill(Aran.BODY_PRESSURE); diff --git a/src/net/server/coordinator/MapleMonsterAggroCoordinator.java b/src/net/server/coordinator/MapleMonsterAggroCoordinator.java new file mode 100644 index 0000000000..c2f2224afd --- /dev/null +++ b/src/net/server/coordinator/MapleMonsterAggroCoordinator.java @@ -0,0 +1,371 @@ +/* + This file is part of the HeavenMS MapleStory Server + Copyleft (L) 2016 - 2018 RonanLana + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package net.server.coordinator; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; + +import constants.ServerConstants; +import client.MapleCharacter; +import java.util.concurrent.ScheduledFuture; +import net.server.Server; +import net.server.audit.LockCollector; +import server.life.MapleMonster; +import server.maps.MapleMap; +import net.server.audit.locks.MonitoredLockType; +import net.server.audit.locks.MonitoredReentrantLock; +import net.server.audit.locks.factory.MonitoredReentrantLockFactory; +import server.TimerManager; +import tools.Pair; + +/** + * + * @author Ronan + */ +public class MapleMonsterAggroCoordinator { + + private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_AGGRO); + private MonitoredReentrantLock idleLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_AGGRO_IDLE, true); + private long lastStopTime = Server.getInstance().getCurrentTime(); + + private ScheduledFuture aggroMonitor = null; + + private Map> mobAggroEntries = new HashMap<>(); + private Map> mobSortedAggros = new HashMap<>(); + + private class PlayerAggroEntry { + protected int cid; + protected int averageDamage = 0; + protected int currentDamageInstances = 0; + protected long accumulatedDamage = 0; + + protected int expireStreak = 0; + protected int updateStreak = 0; + protected int toNextUpdate = 0; + protected int entryRank = -1; + + protected PlayerAggroEntry(int cid) { + this.cid = cid; + } + } + + public void stopAggroCoordinator() { + idleLock.lock(); + try { + if (aggroMonitor == null) return; + + aggroMonitor.cancel(false); + aggroMonitor = null; + } finally { + idleLock.unlock(); + } + + lastStopTime = Server.getInstance().getCurrentTime(); + } + + public void startAggroCoordinator() { + idleLock.lock(); + try { + if (aggroMonitor != null) return; + + aggroMonitor = TimerManager.getInstance().register(new Runnable() { + @Override + public void run() { + runAggroUpdate(1); + runSortLeadingCharactersAggro(); + } + }, ServerConstants.MOB_STATUS_AGGRO_INTERVAL, ServerConstants.MOB_STATUS_AGGRO_INTERVAL); + } finally { + idleLock.unlock(); + } + + int timeDelta = (int) Math.ceil((Server.getInstance().getCurrentTime() - lastStopTime) / ServerConstants.MOB_STATUS_AGGRO_INTERVAL); + if (timeDelta > 0) { + runAggroUpdate(timeDelta); + } + } + + private static void updateEntryExpiration(PlayerAggroEntry pae) { + pae.toNextUpdate = (int) Math.ceil((120000L / ServerConstants.MOB_STATUS_AGGRO_INTERVAL) / Math.pow(2, pae.expireStreak + pae.currentDamageInstances)); + } + + private static void insertEntryDamage(PlayerAggroEntry pae, int damage) { + synchronized (pae) { + long totalDamage = pae.averageDamage; + totalDamage *= pae.currentDamageInstances; + totalDamage += damage; + + pae.expireStreak = 0; + pae.updateStreak = 0; + updateEntryExpiration(pae); + + pae.currentDamageInstances += 1; + pae.averageDamage = (int)(totalDamage / pae.currentDamageInstances); + pae.accumulatedDamage = totalDamage; + } + } + + private static boolean expiredAfterUpdateEntryDamage(PlayerAggroEntry pae, int deltaTime) { + synchronized (pae) { + pae.updateStreak += 1; + pae.toNextUpdate -= deltaTime; + + if (pae.toNextUpdate <= 0) { // reached dmg instance expire time + pae.expireStreak += 1; + updateEntryExpiration(pae); + + pae.currentDamageInstances -= 1; + if (pae.currentDamageInstances < 1) { // expired aggro for this player + return true; + } + pae.accumulatedDamage = pae.averageDamage * pae.currentDamageInstances; + } + + return false; + } + } + + public void addAggroDamage(MapleMonster mob, int cid, int damage) { // assumption: should not trigger after dispose() + if (!mob.isAlive()) return; + + List sortedAggro = mobSortedAggros.get(mob); + Map mobAggro = mobAggroEntries.get(mob); + if (mobAggro == null) { + if (lock.tryLock()) { // can run unreliably, as fast as possible... try lock that is! + try { + mobAggro = mobAggroEntries.get(mob); + if (mobAggro == null) { + mobAggro = new HashMap<>(); + mobAggroEntries.put(mob, mobAggro); + + sortedAggro = new LinkedList<>(); + mobSortedAggros.put(mob, sortedAggro); + } else { + sortedAggro = mobSortedAggros.get(mob); + } + } finally { + lock.unlock(); + } + } else { + return; + } + } + + PlayerAggroEntry aggroEntry = mobAggro.get(cid); + if (aggroEntry == null) { + aggroEntry = new PlayerAggroEntry(cid); + + synchronized (mobAggro) { + synchronized (sortedAggro) { + PlayerAggroEntry mappedEntry = mobAggro.get(cid); + + if (mappedEntry == null) { + mobAggro.put(aggroEntry.cid, aggroEntry); + sortedAggro.add(aggroEntry); + } else { + aggroEntry = mappedEntry; + } + } + } + } else if (damage < 1) { + return; + } + + insertEntryDamage(aggroEntry, damage); + } + + private void runAggroUpdate(int deltaTime) { + List>> aggroMobs = new LinkedList<>(); + lock.lock(); + try { + for (Entry> e : mobAggroEntries.entrySet()) { + aggroMobs.add(new Pair<>(e.getKey(), e.getValue())); + } + } finally { + lock.unlock(); + } + + for (Pair> am : aggroMobs) { + Map mobAggro = am.getRight(); + List sortedAggro = mobSortedAggros.get(am.getLeft()); + + if (sortedAggro != null) { + List toRemove = new LinkedList<>(); + List toRemoveIdx = new ArrayList<>(mobAggro.size()); + List toRemoveByFetch = new LinkedList<>(); + + synchronized (mobAggro) { + synchronized (sortedAggro) { + for (PlayerAggroEntry pae : mobAggro.values()) { + if (expiredAfterUpdateEntryDamage(pae, deltaTime)) { + toRemove.add(pae.cid); + if (pae.entryRank > -1) toRemoveIdx.add(pae.entryRank); + else toRemoveByFetch.add(pae.cid); + } + } + + if (!toRemove.isEmpty()) { + for (Integer cid : toRemove) { + mobAggro.remove(cid); + } + + if (mobAggro.isEmpty()) { // all aggro on this mob expired + am.getLeft().aggroResetAggro(); + } + } + + if (!toRemoveIdx.isEmpty()) { + Collections.sort(toRemoveIdx, new Comparator() { // last to first indexes + @Override + public int compare(Integer p1, Integer p2) { + return p1 < p2 ? 1 : p1.equals(p2) ? 0 : -1; + } + }); + + for (int idx : toRemoveIdx) { + sortedAggro.remove(idx); + } + } + + if (!toRemoveByFetch.isEmpty()) { + for (Integer cid : toRemoveByFetch) { + for (int i = 0; i < sortedAggro.size(); i++) { + if (cid.equals(sortedAggro.get(i).cid)) { + sortedAggro.remove(i); + break; + } + } + } + } + } + } + } + } + } + + private static void insertionSortAggroList(List paeList) { + for (int i = 1; i < paeList.size(); i++) { + PlayerAggroEntry pae = paeList.get(i); + long curAccDmg = pae.accumulatedDamage; + + int j = i - 1; + while (j >= 0 && curAccDmg > paeList.get(j).accumulatedDamage) { + j -= 1; + } + + j += 1; + if (j != i) { + paeList.remove(i); + paeList.add(j, pae); + } + } + + int i = 0; + for (PlayerAggroEntry pae : paeList) { + pae.entryRank = i; + i += 1; + } + } + + public boolean isLeadingCharacterAggro(MapleMonster mob, MapleCharacter player) { + // by assuming the quasi-sorted nature of "mobAggroList", this method + // returns whether the player given as parameter can be elected as next aggro leader + + List mobAggroList = mobSortedAggros.get(mob); + if (mobAggroList != null) { + synchronized (mobAggroList) { + mobAggroList = new ArrayList<>(mobAggroList.subList(0, Math.min(mobAggroList.size(), 5))); + } + + MapleMap map = mob.getMap(); + for (PlayerAggroEntry pae : mobAggroList) { + MapleCharacter chr = map.getCharacterById(pae.cid); + if (chr != null) { + if (player.getId() == pae.cid) { + return true; + } else if (pae.updateStreak < ServerConstants.MOB_STATUS_AGGRO_PERSISTENCE && chr.isAlive()) { // verifies currently leading players activity + return false; + } + } + } + } + + return false; + } + + public void runSortLeadingCharactersAggro() { + List> aggroList; + lock.lock(); + try { + aggroList = new ArrayList<>(mobSortedAggros.values()); + } finally { + lock.unlock(); + } + + for (List mobAggroList : aggroList) { + synchronized (mobAggroList) { + insertionSortAggroList(mobAggroList); + } + } + } + + public void removeAggroEntries(MapleMonster mob) { + lock.lock(); + try { + mobAggroEntries.remove(mob); + mobSortedAggros.remove(mob); + } finally { + lock.unlock(); + } + } + + public void dispose() { + stopAggroCoordinator(); + + lock.lock(); + try { + mobAggroEntries.clear(); + mobSortedAggros.clear(); + } finally { + lock.unlock(); + } + + disposeLocks(); + } + + private void disposeLocks() { + LockCollector.getInstance().registerDisposeAction(new Runnable() { + @Override + public void run() { + emptyLocks(); + } + }); + } + + private void emptyLocks() { + lock = lock.dispose(); + } +} diff --git a/src/net/server/guild/MapleGuild.java b/src/net/server/guild/MapleGuild.java index 8d50395f9a..2969cb7ce4 100644 --- a/src/net/server/guild/MapleGuild.java +++ b/src/net/server/guild/MapleGuild.java @@ -39,6 +39,7 @@ import java.util.Set; import java.util.concurrent.locks.Lock; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; +import net.server.PlayerStorage; import net.server.Server; import net.server.channel.Channel; import tools.DatabaseConnection; @@ -109,11 +110,11 @@ public class MapleGuild { con.close(); } catch (SQLException se) { se.printStackTrace(); - System.out.println("Unable to read guild information from sql" + se); + System.out.println("Unable to read guild information from sql: " + se); } } - public void buildNotifications() { + private void buildNotifications() { if (!bDirty) { return; } @@ -260,10 +261,10 @@ public class MapleGuild { return name; } - public java.util.Collection getMembers() { + public List getMembers() { membersLock.lock(); try { - return java.util.Collections.unmodifiableCollection(members); + return new ArrayList<>(members); } finally { membersLock.unlock(); } @@ -277,6 +278,30 @@ public class MapleGuild { return signature; } + public void broadcastNameChanged() { + PlayerStorage ps = Server.getInstance().getWorld(world).getPlayerStorage(); + + for (MapleGuildCharacter mgc : getMembers()) { + MapleCharacter chr = ps.getCharacterById(mgc.getId()); + if (chr == null || !chr.isLoggedinWorld()) continue; + + byte[] packet = MaplePacketCreator.guildNameChanged(chr.getId(), this.getName()); + chr.getMap().broadcastMessage(chr, packet); + } + } + + public void broadcastEmblemChanged() { + PlayerStorage ps = Server.getInstance().getWorld(world).getPlayerStorage(); + + for (MapleGuildCharacter mgc : getMembers()) { + MapleCharacter chr = ps.getCharacterById(mgc.getId()); + if (chr == null || !chr.isLoggedinWorld()) continue; + + byte[] packet = MaplePacketCreator.guildMarkChanged(chr.getId(), this); + chr.getMap().broadcastMessage(chr, packet); + } + } + public void broadcast(final byte[] packet) { broadcast(packet, -1, BCOp.NONE); } diff --git a/src/net/server/world/World.java b/src/net/server/world/World.java index 8a73a67336..df5a70799f 100644 --- a/src/net/server/world/World.java +++ b/src/net/server/world/World.java @@ -612,7 +612,15 @@ public class World { mc.saveGuildStatus(); } if (bDifferentGuild) { - mc.broadcastStance(); + if (mc.isLoggedinWorld()) { + MapleGuild guild = Server.getInstance().getGuild(guildid); + if (guild != null) { + mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildNameChanged(cid, guild.getName())); + mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildMarkChanged(cid, guild)); + } else { + mc.getMap().broadcastMessage(mc, MaplePacketCreator.guildNameChanged(cid, "")); + } + } } } diff --git a/src/scripting/AbstractPlayerInteraction.java b/src/scripting/AbstractPlayerInteraction.java index 6b3363ef8a..10984129e1 100644 --- a/src/scripting/AbstractPlayerInteraction.java +++ b/src/scripting/AbstractPlayerInteraction.java @@ -237,6 +237,15 @@ public class AbstractPlayerInteraction { return intList; } + public boolean canHoldAll(List itemids) { + List quantity = new LinkedList<>(); + for (int i = 0; i < itemids.size(); i++) { + quantity.add(1.0); + } + + return canHoldAll(itemids, quantity); + } + public boolean canHoldAll(List itemids, List quantity) { return canHoldAll(convertToIntegerArray(itemids), convertToIntegerArray(quantity), true); } @@ -554,8 +563,6 @@ public class AbstractPlayerInteraction { if(expires >= 0) item.setExpiration(System.currentTimeMillis() + expires); - - item.setPetId(petId); if (!MapleInventoryManipulator.checkSpace(c, id, quantity, "")) { c.getPlayer().dropMessage(1, "Your inventory is full. Please remove an item from your " + ItemConstants.getInventoryType(id).name() + " inventory."); diff --git a/src/scripting/event/EventInstanceManager.java b/src/scripting/event/EventInstanceManager.java index 09929317b8..10ffc8070c 100644 --- a/src/scripting/event/EventInstanceManager.java +++ b/src/scripting/event/EventInstanceManager.java @@ -229,7 +229,11 @@ public class EventInstanceManager { } - public synchronized void registerPlayer(final MapleCharacter chr) { + public synchronized void registerPlayer(final MapleCharacter chr) { + registerPlayer(chr, true); + } + + public synchronized void registerPlayer(final MapleCharacter chr, boolean runEntryScript) { if (chr == null || !chr.isLoggedinWorld() || disposed) { return; } @@ -246,10 +250,12 @@ public class EventInstanceManager { wL.unlock(); } - try { - em.getIv().invokeFunction("playerEntry", EventInstanceManager.this, chr); - } catch (ScriptException | NoSuchMethodException ex) { - ex.printStackTrace(); + if (runEntryScript) { + try { + em.getIv().invokeFunction("playerEntry", EventInstanceManager.this, chr); + } catch (ScriptException | NoSuchMethodException ex) { + ex.printStackTrace(); + } } } @@ -372,7 +378,7 @@ public class EventInstanceManager { private void registerExpeditionTeam(MapleExpedition exped, int recruitMap) { expedition = exped; - for (MapleCharacter chr: exped.getMembers()) { + for (MapleCharacter chr: exped.getActiveMembers()) { if (chr.getMapId() == recruitMap) { registerPlayer(chr); } @@ -628,7 +634,6 @@ public class EventInstanceManager { sL.lock(); try { if(!eventCleared) em.disposeInstance(name); - em = null; } finally { sL.unlock(); } @@ -636,10 +641,11 @@ public class EventInstanceManager { TimerManager.getInstance().schedule(new Runnable() { @Override public void run() { - mapFactory.dispose(); // reactors issue on dispose event maps found thanks to MedicOP + mapFactory.dispose(); // issues from instantly disposing some event objects found thanks to MedicOP wL.lock(); try { mapFactory = null; + em = null; } finally { wL.unlock(); } @@ -675,7 +681,6 @@ public class EventInstanceManager { @Override public void run() { try { - if(em == null) return; em.getIv().invokeFunction(methodName, EventInstanceManager.this); } catch (ScriptException | NoSuchMethodException ex) { ex.printStackTrace(); diff --git a/src/scripting/event/EventManager.java b/src/scripting/event/EventManager.java index ce87183b7f..b91ce46206 100644 --- a/src/scripting/event/EventManager.java +++ b/src/scripting/event/EventManager.java @@ -22,7 +22,6 @@ package scripting.event; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -116,13 +115,16 @@ public class EventManager { ex.printStackTrace(); } + Collection eimList; synchronized(instances) { - for(EventInstanceManager eim : instances.values()) { - eim.dispose(true); - } + eimList = getInstances(); instances.clear(); } + for(EventInstanceManager eim : eimList) { + eim.dispose(true); + } + List readyEims; queueLock.lock(); try { @@ -253,7 +255,9 @@ public class EventManager { } public Collection getInstances() { - return Collections.unmodifiableCollection(instances.values()); + synchronized (instances) { + return new LinkedList<>(instances.values()); + } } public EventInstanceManager newInstance(String name) { @@ -265,7 +269,13 @@ public class EventManager { ret.setName(name); } - instances.put(name, ret); + synchronized (instances) { + if (instances.containsKey(name)) { + return null; + } + + instances.put(name, ret); + } return ret; } @@ -274,7 +284,10 @@ public class EventManager { @Override public void run() { freeLobbyInstance(name); - instances.remove(name); + + synchronized (instances) { + instances.remove(name); + } } }, ServerConstants.EVENT_LOBBY_DELAY * 1000); } @@ -379,14 +392,17 @@ public class EventManager { if(!startLobbyInstance(lobbyId)) return false; } - EventInstanceManager eim = (EventInstanceManager) (iv.invokeFunction("setup", leader.getClient().getChannel())); - if(eim == null) { + EventInstanceManager eim; + try { + eim = (EventInstanceManager) (iv.invokeFunction("setup", leader.getClient().getChannel())); + instanceLocks.put(eim.getName(), lobbyId); + } catch (NullPointerException npe) { if(lobbyId > -1) { setLockLobby(lobbyId, false); } return false; } - instanceLocks.put(eim.getName(), lobbyId); + eim.setLeader(leader); exped.start(); @@ -442,14 +458,16 @@ public class EventManager { } } - EventInstanceManager eim = (EventInstanceManager) (iv.invokeFunction("setup", difficulty, (lobbyId > -1) ? lobbyId : leader.getId())); - if(eim == null) { + EventInstanceManager eim; + try { + eim = (EventInstanceManager) (iv.invokeFunction("setup", difficulty, (lobbyId > -1) ? lobbyId : leader.getId())); + instanceLocks.put(eim.getName(), lobbyId); + } catch (NullPointerException npe) { if(lobbyId > -1) { setLockLobby(lobbyId, false); } return false; } - instanceLocks.put(eim.getName(), lobbyId); eim.setLeader(leader); if(chr != null) eim.registerPlayer(chr); @@ -500,14 +518,17 @@ public class EventManager { if(!startLobbyInstance(lobbyId)) return false; } - EventInstanceManager eim = (EventInstanceManager) (iv.invokeFunction("setup", (Object) null)); - if(eim == null) { + EventInstanceManager eim; + try { + eim = (EventInstanceManager) (iv.invokeFunction("setup", (Object) null)); + instanceLocks.put(eim.getName(), lobbyId); + } catch (NullPointerException npe) { if(lobbyId > -1) { setLockLobby(lobbyId, false); } return false; } - instanceLocks.put(eim.getName(), lobbyId); + eim.setLeader(leader); eim.registerParty(party, map); @@ -559,14 +580,17 @@ public class EventManager { if(!startLobbyInstance(lobbyId)) return false; } - EventInstanceManager eim = (EventInstanceManager) (iv.invokeFunction("setup", difficulty, (lobbyId > -1) ? lobbyId : party.getLeaderId())); - if(eim == null) { + EventInstanceManager eim; + try { + eim = (EventInstanceManager) (iv.invokeFunction("setup", difficulty, (lobbyId > -1) ? lobbyId : party.getLeaderId())); + instanceLocks.put(eim.getName(), lobbyId); + } catch (NullPointerException npe) { if(lobbyId > -1) { setLockLobby(lobbyId, false); } return false; } - instanceLocks.put(eim.getName(), lobbyId); + eim.setLeader(leader); eim.registerParty(party, map); diff --git a/src/scripting/npc/NPCConversationManager.java b/src/scripting/npc/NPCConversationManager.java index 8c205358ba..0a8746270c 100644 --- a/src/scripting/npc/NPCConversationManager.java +++ b/src/scripting/npc/NPCConversationManager.java @@ -100,6 +100,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction { public void dispose() { NPCScriptManager.getInstance().dispose(this); + getClient().announce(MaplePacketCreator.enableActions()); } public void sendNext(String text) { diff --git a/src/server/MapleTrade.java b/src/server/MapleTrade.java index b6a9ec82e3..f2110b31db 100644 --- a/src/server/MapleTrade.java +++ b/src/server/MapleTrade.java @@ -202,6 +202,10 @@ public class MapleTrade { return exchangeMeso; } + private boolean fitsMeso() { + return chr.canHoldMeso(exchangeMeso - getFee(exchangeMeso)); + } + private boolean fitsInInventory() { List> tradeItems = new LinkedList<>(); for (Item item : exchangeItems) { @@ -218,6 +222,18 @@ public class MapleTrade { if (partner.isLocked()) { local.complete1(); partner.complete1(); + if (!local.fitsMeso()) { + cancelTrade(c); + c.message("There is not enough meso inventory space to complete the trade."); + partner.getChr().message("Partner does not have enough meso inventory space to complete the trade."); + return; + } + else if (!partner.fitsMeso()) { + cancelTrade(c); + c.message("Partner does not have enough meso inventory space to complete the trade."); + partner.getChr().message("There is not enough meso inventory space to complete the trade."); + return; + } if (!local.fitsInInventory()) { cancelTrade(c); c.message("There is not enough inventory space to complete the trade."); diff --git a/src/server/expeditions/MapleExpedition.java b/src/server/expeditions/MapleExpedition.java index 3aefc4378a..341d6f649a 100644 --- a/src/server/expeditions/MapleExpedition.java +++ b/src/server/expeditions/MapleExpedition.java @@ -23,11 +23,17 @@ package server.expeditions; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; +import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ScheduledFuture; +import net.server.PlayerStorage; import net.server.Server; import server.TimerManager; import server.life.MapleMonster; @@ -78,18 +84,18 @@ public class MapleExpedition { private MapleExpeditionType type; private boolean registering; private MapleMap startMap; - private ArrayList bossLogs; + private List bossLogs; private ScheduledFuture schedule; - private List members = new ArrayList<>(); - private List banned = new ArrayList<>(); + private Map members = new ConcurrentHashMap<>(); + private List banned = new CopyOnWriteArrayList<>(); private long startTime; public MapleExpedition(MapleCharacter player, MapleExpeditionType met) { leader = player; - members.add(leader); + members.put(player.getId(), player.getName()); startMap = player.getMap(); type = met; - bossLogs = new ArrayList(); + bossLogs = new CopyOnWriteArrayList<>(); beginRegistration(); } @@ -109,7 +115,7 @@ public class MapleExpedition { @Override public void run() { if (registering){ - leader.getClient().getChannelServer().getExpeditions().remove(exped); + startMap.getChannelServer().getExpeditions().remove(exped); startMap.broadcastMessage(MaplePacketCreator.serverNotice(6, "[Expedition] The time limit has been reached. Expedition has been disbanded.")); dispose(false); @@ -134,7 +140,7 @@ public class MapleExpedition { broadcastExped(MaplePacketCreator.removeClock()); broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] The expedition has started! Good luck, brave heroes!")); startTime = System.currentTimeMillis(); - Server.getInstance().broadcastGMMessage(leader.getWorld(), MaplePacketCreator.serverNotice(6, "[Expedition] " + type.toString() + " Expedition started with leader: " + leader.getName())); + Server.getInstance().broadcastGMMessage(startMap.getWorld(), MaplePacketCreator.serverNotice(6, "[Expedition] " + type.toString() + " Expedition started with leader: " + leader.getName())); } public String addMember(MapleCharacter player) { @@ -147,22 +153,21 @@ public class MapleExpedition { if (members.size() >= type.getMaxSize()){ //Would be a miracle if anybody ever saw this return "Sorry, this expedition is full!"; } - if (members.add(player)){ - player.announce(MaplePacketCreator.getClock((int)(startTime - System.currentTimeMillis()) / 1000)); - broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] " + player.getName() + " has joined the expedition!")); - return "You have registered for the expedition successfully!"; - } - return "Sorry, something went really wrong. Report this on the forum with a screenshot!"; + + members.put(player.getId(), player.getName()); + player.announce(MaplePacketCreator.getClock((int)(startTime - System.currentTimeMillis()) / 1000)); + broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] " + player.getName() + " has joined the expedition!")); + return "You have registered for the expedition successfully!"; } - private void broadcastExped(byte [] data){ - for (MapleCharacter member : members){ - member.getClient().announce(data); + private void broadcastExped(byte[] packet){ + for (MapleCharacter chr : getActiveMembers()){ + chr.announce(packet); } } public boolean removeMember(MapleCharacter chr) { - if(members.remove(chr)) { + if(members.remove(chr.getId()) != null) { chr.announce(MaplePacketCreator.removeClock()); broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] " + chr.getName() + " has left the expedition.")); chr.dropMessage(6, "[Expedition] You have left this expedition."); @@ -175,9 +180,42 @@ public class MapleExpedition { public MapleExpeditionType getType() { return type; } - - public List getMembers() { - return members; + + public List getActiveMembers() { // thanks MedicOP for figuring out an issue with broadcasting packets to offline members + PlayerStorage ps = startMap.getWorldServer().getPlayerStorage(); + + List activeMembers = new LinkedList<>(); + for (Integer chrid : getMembers().keySet()){ + MapleCharacter chr = ps.getCharacterById(chrid); + if (chr != null && chr.isLoggedinWorld()) { + activeMembers.add(chr); + } + } + + return activeMembers; + } + + public Map getMembers() { + return new HashMap<>(members); + } + + public List> getMemberList() { + List> memberList = new LinkedList<>(); + Entry leaderEntry = null; + + for (Entry e : getMembers().entrySet()) { + if (!isLeader(e.getKey())) { + memberList.add(e); + } else { + leaderEntry = e; + } + } + + if (leaderEntry != null) { + memberList.add(0, leaderEntry); + } + + return memberList; } public MapleCharacter getLeader(){ @@ -189,16 +227,15 @@ public class MapleExpedition { } public boolean contains(MapleCharacter player) { - for (MapleCharacter member : members){ - if (member.getId() == player.getId()){ - return true; - } - } - return false; + return members.containsKey(player.getId()); } public boolean isLeader(MapleCharacter player) { - return leader.equals(player); + return isLeader(player.getId()); + } + + public boolean isLeader(int playerid) { + return leader.getId() == playerid; } public boolean isRegistering(){ @@ -209,15 +246,20 @@ public class MapleExpedition { return !registering; } - public void ban(MapleCharacter player) { - if (!banned.contains(player.getId())) { - banned.add(player.getId()); - members.remove(player); + public void ban(Entry chr) { + int cid = chr.getKey(); + + if (!banned.contains(cid)) { + banned.add(cid); + members.remove(cid); - broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] " + player.getName() + " has been banned from the expedition.")); + broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] " + chr.getValue() + " has been banned from the expedition.")); - player.announce(MaplePacketCreator.removeClock()); - player.dropMessage(6, "[Expedition] You have been banned from this expedition."); + MapleCharacter player = startMap.getWorldServer().getPlayerStorage().getCharacterById(cid); + if (player != null && player.isLoggedinWorld()) { + player.announce(MaplePacketCreator.removeClock()); + player.dropMessage(6, "[Expedition] You have been banned from this expedition."); + } } } @@ -225,7 +267,7 @@ public class MapleExpedition { return startTime; } - public ArrayList getBossLogs(){ + public List getBossLogs(){ return bossLogs; } diff --git a/src/server/life/MapleMonster.java b/src/server/life/MapleMonster.java index df73a292f2..92d0b141ef 100644 --- a/src/server/life/MapleMonster.java +++ b/src/server/life/MapleMonster.java @@ -55,7 +55,6 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import net.server.audit.locks.MonitoredReentrantLock; -import net.server.Server; import net.server.channel.Channel; import net.server.world.World; import net.server.world.MapleParty; @@ -72,6 +71,7 @@ import tools.Randomizer; import net.server.audit.LockCollector; import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; +import net.server.coordinator.MapleMonsterAggroCoordinator; public class MapleMonster extends AbstractLoadedMapleLife { private ChangeableStats ostats = null; //unused, v83 WZs offers no support for changeable stats. @@ -100,6 +100,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { private MonitoredReentrantLock monsterLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB, true); private MonitoredReentrantLock statiLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_STATI); private MonitoredReentrantLock animationLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_ANI); + private MonitoredReentrantLock aggroUpdateLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_AGGRO); public MapleMonster(int id, MapleMonsterStats stats) { super(id); @@ -578,31 +579,10 @@ public class MapleMonster extends AbstractLoadedMapleLife { } } - private Pair removeController() { - this.lockMonster(); - try { - MapleCharacter chrController = getController(); - boolean hadAggro = isControllerHasAggro(); - - if (chrController != null) { // this can/should only happen when a hidden gm attacks the monster - chrController.announce(MaplePacketCreator.stopControllingMonster(this.getObjectId())); - chrController.stopControllingMonster(this); - } - - setController(null); - setControllerHasAggro(false); - setControllerKnowsAboutAggro(false); - - return new Pair<>(chrController, hadAggro); - } finally { - this.unlockMonster(); - } - } - public MapleCharacter killBy(final MapleCharacter killer) { distributeExperience(killer != null ? killer.getId() : 0); - final Pair lastController = removeController(); + final Pair lastController = aggroRemoveController(); final List toSpawn = this.getRevives(); if (toSpawn != null) { final MapleMap reviveMap = map; @@ -675,7 +655,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { reviveMap.killMonster(reviveMap.getMonsterById(i), killer, true); } } else if (controller != null) { - mob.switchController(controller, aggro); + mob.aggroSwitchController(controller, aggro); } if(eim != null) { @@ -725,10 +705,12 @@ public class MapleMonster extends AbstractLoadedMapleLife { } private synchronized void processMonsterKilled(boolean hasKiller) { - if(!hasKiller) { + if(!hasKiller) { // players won't gain EXP from a mob that has no killer, but a quest count they should dispatchUpdateQuestMobCount(); } + this.aggroClearDamages(); + MonsterListener[] listenersList; statiLock.lock(); try { @@ -794,46 +776,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { public boolean isAlive() { return this.hp.get() > 0; } - - public MapleCharacter getController() { - monsterLock.lock(); - try { - return controller.get(); - } finally { - monsterLock.unlock(); - } - } - - public void setController(MapleCharacter controller) { - monsterLock.lock(); - try { - this.controller = new WeakReference<>(controller); - } finally { - monsterLock.unlock(); - } - } - - public void switchController(MapleCharacter newController, boolean immediateAggro) { - this.lockMonster(); - try { - MapleCharacter controllers = getController(); - if (controllers == newController) { - return; - } - - removeController(); - - newController.controlMonster(this, immediateAggro); - setController(newController); - if (immediateAggro) { - setControllerHasAggro(true); - } - setControllerKnowsAboutAggro(false); - } finally { - this.unlockMonster(); - } - } - + public void addListener(MonsterListener listener) { statiLock.lock(); try { @@ -843,46 +786,28 @@ public class MapleMonster extends AbstractLoadedMapleLife { } } - public boolean isControllerHasAggro() { - monsterLock.lock(); - try { - return fake ? false : controllerHasAggro; - } finally { - monsterLock.unlock(); - } + public MapleCharacter getController() { + return controller.get(); } - public void setControllerHasAggro(boolean controllerHasAggro) { - monsterLock.lock(); - try { - if (fake) { - return; - } - this.controllerHasAggro = controllerHasAggro; - } finally { - monsterLock.unlock(); - } + private void setController(MapleCharacter controller) { + this.controller = new WeakReference<>(controller); + } + + public boolean isControllerHasAggro() { + return fake ? false : controllerHasAggro; + } + + private void setControllerHasAggro(boolean controllerHasAggro) { + if (!fake) this.controllerHasAggro = controllerHasAggro; } public boolean isControllerKnowsAboutAggro() { - monsterLock.lock(); - try { - return fake ? false : controllerKnowsAboutAggro; - } finally { - monsterLock.unlock(); - } + return fake ? false : controllerKnowsAboutAggro; } - public void setControllerKnowsAboutAggro(boolean controllerKnowsAboutAggro) { - monsterLock.lock(); - try { - if (fake) { - return; - } - this.controllerKnowsAboutAggro = controllerKnowsAboutAggro; - } finally { - monsterLock.unlock(); - } + private void setControllerKnowsAboutAggro(boolean controllerKnowsAboutAggro) { + if (!fake) this.controllerKnowsAboutAggro = controllerKnowsAboutAggro; } public byte[] makeBossHPBarPacket() { @@ -956,15 +881,29 @@ public class MapleMonster extends AbstractLoadedMapleLife { } } + private MapleCharacter getActiveController() { + MapleCharacter chr = getController(); + + if (chr != null && chr.isLoggedinWorld() && chr.getMap() == this.getMap()) { + return chr; + } else { + return null; + } + } + + private void broadcastMonsterStatusMessage(byte[] packet) { + map.broadcastMessage(packet, getPosition()); + + MapleCharacter chrController = getActiveController(); + if (chrController != null && !chrController.isMapObjectVisible(MapleMonster.this)) { + chrController.announce(packet); + } + } + private int broadcastStatusEffect(final MonsterStatusEffect status) { int animationTime = status.getSkill().getAnimationTime(); byte[] packet = MaplePacketCreator.applyMonsterStatus(getObjectId(), status, null); - map.broadcastMessage(packet, getPosition()); - - MapleCharacter chrController = getController(); - if (chrController != null && !chrController.isMapObjectVisible(this)) { - chrController.getClient().announce(packet); - } + broadcastMonsterStatusMessage(packet); return animationTime; } @@ -1041,12 +980,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { public void run() { if (isAlive()) { byte[] packet = MaplePacketCreator.cancelMonsterStatus(getObjectId(), status.getStati()); - map.broadcastMessage(packet, getPosition()); - - MapleCharacter controller = getController(); - if (controller != null && !controller.isMapObjectVisible(MapleMonster.this)) { - controller.getClient().announce(packet); - } + broadcastMonsterStatusMessage(packet); } statiLock.lock(); @@ -1148,12 +1082,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { public void run() { if (isAlive()) { byte[] packet = MaplePacketCreator.cancelMonsterStatus(getObjectId(), stats); - map.broadcastMessage(packet, getPosition()); - - MapleCharacter controller = getController(); - if (controller != null && !controller.isMapObjectVisible(MapleMonster.this)) { - controller.getClient().announce(packet); - } + broadcastMonsterStatusMessage(packet); statiLock.lock(); try { @@ -1168,7 +1097,7 @@ public class MapleMonster extends AbstractLoadedMapleLife { }; final MonsterStatusEffect effect = new MonsterStatusEffect(stats, null, skill, true); byte[] packet = MaplePacketCreator.applyMonsterStatus(getObjectId(), effect, reflection); - map.broadcastMessage(packet, getPosition()); + broadcastMonsterStatusMessage(packet); statiLock.lock(); try { @@ -1180,11 +1109,6 @@ public class MapleMonster extends AbstractLoadedMapleLife { statiLock.unlock(); } - MapleCharacter controller = getController(); - if (controller != null && !controller.isMapObjectVisible(this)) { - controller.getClient().announce(packet); - } - map.getChannelServer().registerMobStatus(map.getId(), effect, cancelTask, duration); } @@ -1193,30 +1117,28 @@ public class MapleMonster extends AbstractLoadedMapleLife { } public void resetMobPosition(Point newPoint) { - removeController(); + aggroRemoveController(); + setPosition(newPoint); map.broadcastMessage(MaplePacketCreator.moveMonster(this.getObjectId(), false, -1, 0, 0, 0, this.getPosition(), this.getIdleMovement())); map.moveMonster(this, this.getPosition()); - map.updateMonsterController(this); + + aggroUpdateController(); } private void debuffMobStat(MonsterStatus stat) { + MonsterStatusEffect oldEffect; statiLock.lock(); try { - if (isBuffed(stat)) { - final MonsterStatusEffect oldEffect = stati.get(stat); - byte[] packet = MaplePacketCreator.cancelMonsterStatus(getObjectId(), oldEffect.getStati()); - map.broadcastMessage(packet, getPosition()); - - MapleCharacter chrController = getController(); - if (chrController != null && !chrController.isMapObjectVisible(MapleMonster.this)) { - chrController.getClient().announce(packet); - } - stati.remove(stat); - } + oldEffect = stati.remove(stat); } finally { statiLock.unlock(); } + + if (oldEffect != null) { + byte[] packet = MaplePacketCreator.cancelMonsterStatus(getObjectId(), oldEffect.getStati()); + broadcastMonsterStatusMessage(packet); + } } public void debuffMob(int skillid) { @@ -1280,7 +1202,11 @@ public class MapleMonster extends AbstractLoadedMapleLife { public MapleMap getMap() { return map; } - + + public MapleMonsterAggroCoordinator getMapAggroCoordinator() { + return map.getAggroCoordinator(); + } + public List> getSkills() { return stats.getSkills(); } @@ -1679,6 +1605,206 @@ public class MapleMonster extends AbstractLoadedMapleLife { changeLevelByDifficulty(difficulty, pqMob); } + private MapleCharacter getNextControllerCandidate() { + int mincontrolled = Integer.MAX_VALUE; + MapleCharacter newController = null; + + int mincontrolleddead = Integer.MAX_VALUE; + MapleCharacter newControllerDead = null; + + for (MapleCharacter chr : getMap().getAllPlayers()) { + if (!chr.isHidden()) { + int ctrlMonsSize = chr.getNumControlledMonsters(); + + if (chr.isAlive()) { + if (ctrlMonsSize < mincontrolled) { + mincontrolled = ctrlMonsSize; + newController = chr; + } + } else { + if (ctrlMonsSize < mincontrolleddead) { + mincontrolleddead = ctrlMonsSize; + newControllerDead = chr; + } + } + } + } + + return newController != null ? newController : newControllerDead; + } + + /** + * Removes controllability status from the current controller of this mob. + * + */ + private Pair aggroRemoveController() { + MapleCharacter chrController; + boolean hadAggro; + + aggroUpdateLock.lock(); + try { + chrController = getActiveController(); + hadAggro = isControllerHasAggro(); + + this.setController(null); + this.setControllerHasAggro(false); + this.setControllerKnowsAboutAggro(false); + } finally { + aggroUpdateLock.unlock(); + } + + if (chrController != null) { // this can/should only happen when a hidden gm attacks the monster + chrController.announce(MaplePacketCreator.stopControllingMonster(this.getObjectId())); + chrController.stopControllingMonster(this); + } + + return new Pair<>(chrController, hadAggro); + } + + /** + * Pass over the mob controllability and updates aggro status on the new + * player controller. + * + */ + public void aggroSwitchController(MapleCharacter newController, boolean immediateAggro) { + if (aggroUpdateLock.tryLock()) { + try { + MapleCharacter prevController = getController(); + if (prevController == newController) { + return; + } + + aggroRemoveController(); + if (!(newController != null && newController.isLoggedinWorld() && newController.getMap() == this.getMap())) { + return; + } + + this.setController(newController); + this.setControllerHasAggro(immediateAggro); + this.setControllerKnowsAboutAggro(false); + } finally { + aggroUpdateLock.unlock(); + } + + newController.announce(MaplePacketCreator.controlMonster(this, false, immediateAggro)); + newController.controlMonster(this); + } + } + + /** + * Automagically finds a new controller for the given monster from the chars + * on the map it is from... + * + */ + public void aggroUpdateController() { + MapleCharacter chrController = this.getActiveController(); + if (chrController != null && chrController.isAlive()) { + return; + } + + MapleCharacter newController = getNextControllerCandidate(); + if (newController == null) { // was a new controller found? (if not no one is on the map) + return; + } + + this.aggroSwitchController(newController, false); + } + + /** + * Ensures controllability removal of the current player controller, and + * fetches for any player on the map to start controlling in place. + * + */ + public void aggroRedirectController() { + this.aggroRemoveController(); // don't care if new controller not found, at least remove current controller + this.aggroUpdateController(); + } + + /** + * Returns the current aggro status on the specified player, or null if the + * specified player is currently not this mob's controller. + * + */ + public Boolean aggroMoveLifeUpdate(MapleCharacter player) { + MapleCharacter chrController = getController(); + if (chrController != null && player.getId() == chrController.getId()) { + boolean aggro = this.isControllerHasAggro(); + if (aggro) { + this.setControllerKnowsAboutAggro(true); + } + + return aggro; + } else { + return null; + } + } + + /** + * Refreshes auto aggro for the player passed as parameter, does nothing if + * there is already an active controller for this mob. + * + */ + public void aggroAutoAggroUpdate(MapleCharacter player) { + MapleCharacter chrController = this.getActiveController(); + + if (chrController == null) { + this.aggroSwitchController(player, true); + } else if (chrController.getId() == player.getId()) { + this.setControllerHasAggro(true); + } + } + + /** + * Applied damage input for this mob, enough damage taken implies + * an aggro target update for the attacker shortly. + * + */ + public void aggroMonsterDamage(MapleCharacter attacker, int damage) { + MapleMonsterAggroCoordinator mmac = this.getMapAggroCoordinator(); + mmac.addAggroDamage(this, attacker.getId(), damage); + + MapleCharacter chrController = this.getController(); // aggro based on DPS rather than first-come-first-served, now live after suggestions thanks to MedicOP, Thora, Vcoc + if (chrController != attacker) { + if (this.getMapAggroCoordinator().isLeadingCharacterAggro(this, attacker)) { + this.aggroSwitchController(attacker, true); + } + + /* + For some reason, some mobs loses aggro on controllers if other players also attacks them. + Maybe it was intended by Nexon to interchange controllers at every attack... + + else if (chrController != null) { + chrController.announce(MaplePacketCreator.stopControllingMonster(this.getObjectId())); + chrController.announce(MaplePacketCreator.controlMonster(this, false, true)); + } + */ + } else { + this.setControllerHasAggro(true); + } + } + + /** + * Clears all applied damage input for this mob, doesn't refresh target aggro. + * + */ + public void aggroClearDamages() { + this.getMapAggroCoordinator().removeAggroEntries(this); + } + + /** + * Clears this mob aggro on the current controller. + * + */ + public void aggroResetAggro() { + aggroUpdateLock.lock(); + try { + this.setControllerHasAggro(false); + this.setControllerKnowsAboutAggro(false); + } finally { + aggroUpdateLock.unlock(); + } + } + public final void disposeLocks() { LockCollector.getInstance().registerDisposeAction(new Runnable() { @Override diff --git a/src/server/life/MapleMonsterInformationProvider.java b/src/server/life/MapleMonsterInformationProvider.java index e8c92fa190..2a44456481 100644 --- a/src/server/life/MapleMonsterInformationProvider.java +++ b/src/server/life/MapleMonsterInformationProvider.java @@ -52,8 +52,9 @@ public class MapleMonsterInformationProvider { return instance; } - private final Map> drops = new HashMap<>(); + private final Map> drops = new HashMap<>(); private final List globaldrops = new ArrayList<>(); + private final Map> continentdrops = new HashMap<>(); private final Map> dropsChancePool = new HashMap<>(); // thanks to ronan private final Set hasNoMultiEquipDrops = new HashSet<>(); @@ -70,9 +71,24 @@ public class MapleMonsterInformationProvider { protected MapleMonsterInformationProvider() { retrieveGlobal(); } - - public final List getGlobalDrop() { - return globaldrops; + + public final List getRelevantGlobalDrops(int mapid) { + int continentid = mapid / 100000000; + + List contiItems = continentdrops.get(continentid); + if (contiItems == null) { // continent separated global drops found thanks to marcuswoon + contiItems = new ArrayList<>(); + + for (MonsterGlobalDropEntry e : globaldrops) { + if (e.continentid < 0 || e.continentid == continentid) { + contiItems.add(e); + } + } + + continentdrops.put(continentid, contiItems); + } + + return contiItems; } private void retrieveGlobal() { @@ -90,8 +106,7 @@ public class MapleMonsterInformationProvider { new MonsterGlobalDropEntry( rs.getInt("itemid"), rs.getInt("chance"), - rs.getInt("continent"), - rs.getByte("dropType"), + rs.getByte("continent"), rs.getInt("minimum_quantity"), rs.getInt("maximum_quantity"), rs.getShort("questid"))); diff --git a/src/server/life/MonsterGlobalDropEntry.java b/src/server/life/MonsterGlobalDropEntry.java index 1ae3ef3a04..136f219736 100644 --- a/src/server/life/MonsterGlobalDropEntry.java +++ b/src/server/life/MonsterGlobalDropEntry.java @@ -25,15 +25,14 @@ package server.life; * @author LightPepsi */ public class MonsterGlobalDropEntry { - public MonsterGlobalDropEntry(int itemId, int chance, int continent, byte dropType, int Minimum, int Maximum, short questid) { + public MonsterGlobalDropEntry(int itemId, int chance, int continent, int Minimum, int Maximum, short questid) { this.itemId = itemId; this.chance = chance; - this.dropType = dropType; this.questid = questid; + this.continentid = continent; this.Minimum = Minimum; this.Maximum = Maximum; } - public byte dropType; - public int itemId, chance, Minimum, Maximum; + public int itemId, chance, Minimum, Maximum, continentid; public short questid; } diff --git a/src/server/maps/MapleHiredMerchant.java b/src/server/maps/MapleHiredMerchant.java index 0c1e8ce759..e97a7ebe27 100644 --- a/src/server/maps/MapleHiredMerchant.java +++ b/src/server/maps/MapleHiredMerchant.java @@ -64,6 +64,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { private List> messages = new LinkedList<>(); private List sold = new LinkedList<>(); private AtomicBoolean open = new AtomicBoolean(); + private boolean published = false; private MapleMap map; private Lock visitorLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.VISITOR_MERCH, true); @@ -100,10 +101,14 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { visitorLock.lock(); try { byte count = 0; - for (MapleCharacter visitor : visitors) { - if (visitor != null) { - count++; + if (this.isOpen()) { + for (MapleCharacter visitor : visitors) { + if (visitor != null) { + count++; + } } + } else { + count = (byte) (visitors.length + 1); } return new byte[]{count, (byte) (visitors.length + 1)}; @@ -471,15 +476,12 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { return false; } - public void addItem(MaplePlayerShopItem item) { + public boolean addItem(MaplePlayerShopItem item) { synchronized (items) { + if (items.size() >= 16) return false; + items.add(item); - } - - try { - this.saveItems(false); - } catch (SQLException ex) { - ex.printStackTrace(); + return true; } } @@ -521,13 +523,18 @@ public class MapleHiredMerchant extends AbstractMapleMapObject { public void setDescription(String description) { this.description = description; } - + + public boolean isPublished() { + return published; + } + public boolean isOpen() { return open.get(); } public void setOpen(boolean set) { open.getAndSet(set); + published = true; } public int getItemId() { diff --git a/src/server/maps/MapleMap.java b/src/server/maps/MapleMap.java index 0d9839b1f0..b9f7198316 100644 --- a/src/server/maps/MapleMap.java +++ b/src/server/maps/MapleMap.java @@ -62,6 +62,7 @@ import net.server.audit.locks.MonitoredReentrantReadWriteLock; import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import java.lang.ref.WeakReference; import net.server.Server; +import net.server.coordinator.MapleMonsterAggroCoordinator; import net.server.channel.Channel; import net.server.world.World; import scripting.map.MapScriptManager; @@ -140,6 +141,7 @@ public class MapleMap { private int fieldType; private int fieldLimit = 0; private int mobCapacity = -1; + private MapleMonsterAggroCoordinator aggroMonitor = null; // aggroMonitor activity in sync with itemMonitor private ScheduledFuture mapMonitor = null; private ScheduledFuture itemMonitor = null; private ScheduledFuture expireItemsTask = null; @@ -185,6 +187,8 @@ public class MapleMap { final ReentrantReadWriteLock objectLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.MAP_OBJS, true); objectRLock = objectLock.readLock(); objectWLock = objectLock.writeLock(); + + aggroMonitor = new MapleMonsterAggroCoordinator(); } public void setEventInstance(EventInstanceManager eim) { @@ -709,7 +713,7 @@ public class MapleMap { if(useBaseRate) chRate = 1; final MapleMonsterInformationProvider mi = MapleMonsterInformationProvider.getInstance(); - final List globalEntry = mi.getGlobalDrop(); + final List globalEntry = mi.getRelevantGlobalDrops(this.getId()); final List dropEntry = new ArrayList<>(); final List visibleQuestEntry = new ArrayList<>(); @@ -777,6 +781,7 @@ public class MapleMap { if(itemMonitorTimeout == 0) { if(itemMonitor != null) { stopItemMonitor(); + aggroMonitor.stopAggroCoordinator(); } return; @@ -1144,12 +1149,10 @@ public class MapleMap { } public List getAllPlayers() { - List character = new LinkedList<>(); + List character; chrRLock.lock(); try { - for (MapleCharacter a : characters) { - character.add(a); - } + character = new ArrayList<>(characters); } finally { chrRLock.unlock(); } @@ -1316,7 +1319,7 @@ public class MapleMap { if (mons != null) { if (mons.getId() == 8800000) { makeMonsterReal(mons); - updateMonsterController(mons); + mons.aggroUpdateController(); break; } } @@ -1552,88 +1555,6 @@ public class MapleMap { } } - private MapleCharacter getNextControllerCandidate() { - int mincontrolled = Integer.MAX_VALUE; - MapleCharacter newController = null; - - int mincontrolleddead = Integer.MAX_VALUE; - MapleCharacter newControllerDead = null; - - chrRLock.lock(); - try { - for (MapleCharacter chr : characters) { - if (!chr.isHidden()) { - int ctrlMonsSize = chr.getControlledMonsters().size(); - - if (chr.isAlive()) { - if (ctrlMonsSize < mincontrolled) { - mincontrolled = ctrlMonsSize; - newController = chr; - } - } else { - if (ctrlMonsSize < mincontrolleddead) { - mincontrolleddead = ctrlMonsSize; - newControllerDead = chr; - } - } - } - } - } finally { - chrRLock.unlock(); - } - - return newController != null ? newController : newControllerDead; - } - - /** - * Automagically finds a new controller for the given monster from the chars - * on the map... - * - * @param monster - */ - public void updateMonsterController(MapleMonster monster) { - monster.lockMonster(); - try { - if (!monster.isAlive()) { - return; - } - - MapleCharacter newController; - MapleCharacter chrController = monster.getController(); - if (chrController != null) { - if (chrController.getMap() != this) { - chrController.stopControllingMonster(monster); - newController = getNextControllerCandidate(); - } else { - if (chrController.isAlive()) { - return; - } - - newController = getNextControllerCandidate(); - if (newController == null || !newController.isAlive()) { - return; - } - - chrController.stopControllingMonster(monster); - } - } else { - newController = getNextControllerCandidate(); - } - - if (newController != null) { // was a new controller found? (if not no one is on the map) - if (monster.isFirstAttack()) { - newController.controlMonster(monster, true); - monster.setControllerHasAggro(true); - monster.setControllerKnowsAboutAggro(true); - } else { - newController.controlMonster(monster, false); - } - } - } finally { - monster.unlockMonster(); - } - } - private Map getCopyMapObjects() { objectRLock.lock(); try { @@ -1862,7 +1783,7 @@ public class MapleMap { } }); - updateMonsterController(monster); + monster.aggroUpdateController(); if (monster.hasBossHPBar()) { broadcastBossHpMessage(monster, monster.hashCode(), monster.makeBossHPBarPacket(), monster.getPosition()); @@ -1948,7 +1869,7 @@ public class MapleMap { } }, null); - updateMonsterController(monster); + monster.aggroUpdateController(); if (monster.hasBossHPBar()) { broadcastBossHpMessage(monster, monster.hashCode(), monster.makeBossHPBarPacket(), monster.getPosition()); @@ -1993,7 +1914,8 @@ public class MapleMap { c.announce(MaplePacketCreator.spawnMonster(monster, true, effect)); } }); - updateMonsterController(monster); + + monster.aggroUpdateController(); if (monster.hasBossHPBar()) { broadcastBossHpMessage(monster, monster.hashCode(), monster.makeBossHPBarPacket(), monster.getPosition()); @@ -2019,7 +1941,8 @@ public class MapleMap { public void makeMonsterReal(final MapleMonster monster) { monster.setFake(false); broadcastMessage(MaplePacketCreator.makeMonsterReal(monster)); - updateMonsterController(monster); + + monster.aggroUpdateController(); } public void spawnReactor(final MapleReactor reactor) { @@ -2403,7 +2326,10 @@ public class MapleMap { chr.setMapId(mapid); if (chrSize == 1) { - if(!hasItemMonitor()) startItemMonitor(); + if(!hasItemMonitor()) { + startItemMonitor(); + aggroMonitor.startAggroCoordinator(); + } if (onFirstUserEnter.length() != 0 && !chr.hasEntered(onFirstUserEnter, mapid) && MapScriptManager.getInstance().scriptExists(onFirstUserEnter, true)) { chr.enteredScript(onFirstUserEnter, mapid); @@ -2688,19 +2614,8 @@ public class MapleMap { broadcastGMMessage(MaplePacketCreator.removePlayerFromMap(chr.getId())); } - for (MapleMonster monster : chr.getControlledMonsters()) { - monster.lockMonster(); - try { - monster.setController(null); - monster.setControllerHasAggro(false); - monster.setControllerKnowsAboutAggro(false); - updateMonsterController(monster); - } finally { - monster.unlockMonster(); - } - } - chr.leaveMap(); + for (MapleSummon summon : new ArrayList<>(chr.getSummonsValues())) { if (summon.isStationary()) { chr.cancelEffectFromBuffStat(MapleBuffStat.PUPPET); @@ -2926,7 +2841,7 @@ public class MapleMap { if (isNonRangedType(o.getType())) { o.sendSpawnData(mapleClient); } else if (o.getType() == MapleMapObjectType.MONSTER) { - updateMonsterController((MapleMonster) o); + ((MapleMonster) o).aggroUpdateController(); } else if (o.getType() == MapleMapObjectType.SUMMON) { MapleSummon summon = (MapleSummon) o; if (summon.getOwner() == chr) { @@ -3038,6 +2953,10 @@ public class MapleMap { mapArea.setBounds(vrLeft, vrTop, vrRight - vrLeft, vrBottom - vrTop); } + public MapleMonsterAggroCoordinator getAggroCoordinator() { + return aggroMonitor; + } + /** * it's threadsafe, gtfo :D * @@ -4091,6 +4010,9 @@ public class MapleMap { chrWLock.lock(); try { + aggroMonitor.dispose(); + aggroMonitor = null; + if(itemMonitor != null) { itemMonitor.cancel(false); itemMonitor = null; diff --git a/src/server/maps/MaplePlayerShop.java b/src/server/maps/MaplePlayerShop.java index 1233fce37d..965f413651 100644 --- a/src/server/maps/MaplePlayerShop.java +++ b/src/server/maps/MaplePlayerShop.java @@ -103,11 +103,15 @@ public class MaplePlayerShop extends AbstractMapleMapObject { visitorLock.lock(); try { byte count = 0; - for (MapleCharacter visitor : visitors) { - if (visitor != null) { - count++; + //if (this.isOpen()) { + for (MapleCharacter visitor : visitors) { + if (visitor != null) { + count++; + } } - } + //} else { shouldn't happen since there isn't a "closed" state for player shops. + // count = (byte) (visitors.length + 1); + //} return new byte[]{count, (byte) visitors.length}; } finally { @@ -198,9 +202,12 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } } - public void addItem(MaplePlayerShopItem item) { + public boolean addItem(MaplePlayerShopItem item) { synchronized (items) { + if (items.size() >= 16) return false; + items.add(item); + return true; } } @@ -241,7 +248,7 @@ public class MaplePlayerShop extends AbstractMapleMapObject { * @param item * @param quantity */ - public void buy(MapleClient c, int item, short quantity) { + public boolean buy(MapleClient c, int item, short quantity) { synchronized (items) { if (isVisitor(c.getPlayer())) { MaplePlayerShopItem pItem = items.get(item); @@ -250,10 +257,10 @@ public class MaplePlayerShop extends AbstractMapleMapObject { newItem.setQuantity((short) ((pItem.getItem().getQuantity() * quantity))); if (quantity < 1 || !pItem.isExist() || pItem.getBundles() < quantity) { c.announce(MaplePacketCreator.enableActions()); - return; + return false; } else if (newItem.getInventoryType().equals(MapleInventoryType.EQUIP) && newItem.getQuantity() > 1) { c.announce(MaplePacketCreator.enableActions()); - return; + return false; } MapleKarmaManipulator.toggleKarmaFlagToUntradeable(newItem); @@ -264,6 +271,12 @@ public class MaplePlayerShop extends AbstractMapleMapObject { if (c.getPlayer().getMeso() >= price) { if (canBuy(c, newItem)) { + if (!owner.canHoldMeso(price)) { + owner.dropMessage(1, "Transaction failed since the shop owner can't hold any more mesos."); + c.announce(MaplePacketCreator.enableActions()); + return false; + } + c.getPlayer().gainMeso(-price, false); owner.gainMeso(price, true); @@ -286,13 +299,21 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } } else { c.getPlayer().dropMessage(1, "Your inventory is full. Please clean a slot before buying this item."); + c.announce(MaplePacketCreator.enableActions()); + return false; } } else { c.getPlayer().dropMessage(1, "You don't have enough mesos to purchase this item."); + c.announce(MaplePacketCreator.enableActions()); + return false; } + + return true; } finally { visitorLock.unlock(); } + } else { + return false; } } } @@ -418,9 +439,9 @@ public class MaplePlayerShop extends AbstractMapleMapObject { } public void closeShop() { - owner.getMap().broadcastMessage(MaplePacketCreator.removePlayerShopBox(this)); clearChatLog(); removeVisitors(); + owner.getMap().broadcastMessage(MaplePacketCreator.removePlayerShopBox(this)); } public void sendShop(MapleClient c) { diff --git a/src/server/movement/AbsoluteLifeMovement.java b/src/server/movement/AbsoluteLifeMovement.java index 452ef2435e..ba4273e8b8 100644 --- a/src/server/movement/AbsoluteLifeMovement.java +++ b/src/server/movement/AbsoluteLifeMovement.java @@ -26,7 +26,7 @@ import tools.data.output.LittleEndianWriter; public class AbsoluteLifeMovement extends AbstractLifeMovement { private Point pixelsPerSecond; - private int unk; + private int fh; public AbsoluteLifeMovement(int type, Point position, int duration, int newstate) { super(type, position, duration, newstate); @@ -40,12 +40,12 @@ public class AbsoluteLifeMovement extends AbstractLifeMovement { this.pixelsPerSecond = wobble; } - public int getUnk() { - return unk; + public int getFh() { // unk -> fh, thanks Spoon for pointing this out + return fh; } - public void setUnk(int unk) { - this.unk = unk; + public void setFh(int fh) { + this.fh = fh; } @Override @@ -55,7 +55,7 @@ public class AbsoluteLifeMovement extends AbstractLifeMovement { lew.writeShort(getPosition().y); lew.writeShort(pixelsPerSecond.x); lew.writeShort(pixelsPerSecond.y); - lew.writeShort(unk); + lew.writeShort(fh); lew.write(getNewstate()); lew.writeShort(getDuration()); } diff --git a/src/server/movement/ChairMovement.java b/src/server/movement/ChairMovement.java index 71f0161c7a..3e8eb1b053 100644 --- a/src/server/movement/ChairMovement.java +++ b/src/server/movement/ChairMovement.java @@ -25,18 +25,18 @@ import java.awt.Point; import tools.data.output.LittleEndianWriter; public class ChairMovement extends AbstractLifeMovement { - private int unk; + private int fh; public ChairMovement(int type, Point position, int duration, int newstate) { super(type, position, duration, newstate); } - public int getUnk() { - return unk; + public int getFh() { + return fh; } - public void setUnk(int unk) { - this.unk = unk; + public void setFh(int fh) { + this.fh = fh; } @Override @@ -44,7 +44,7 @@ public class ChairMovement extends AbstractLifeMovement { lew.write(getType()); lew.writeShort(getPosition().x); lew.writeShort(getPosition().y); - lew.writeShort(unk); + lew.writeShort(fh); lew.write(getNewstate()); lew.writeShort(getDuration()); } diff --git a/src/server/movement/JumpDownMovement.java b/src/server/movement/JumpDownMovement.java index aedfb6b4dd..b60f6c19d4 100644 --- a/src/server/movement/JumpDownMovement.java +++ b/src/server/movement/JumpDownMovement.java @@ -26,8 +26,8 @@ import tools.data.output.LittleEndianWriter; public class JumpDownMovement extends AbstractLifeMovement { private Point pixelsPerSecond; - private int unk; private int fh; + private int originFh; public JumpDownMovement(int type, Point position, int duration, int newstate) { super(type, position, duration, newstate); @@ -41,22 +41,22 @@ public class JumpDownMovement extends AbstractLifeMovement { this.pixelsPerSecond = wobble; } - public int getUnk() { - return unk; - } - - public void setUnk(int unk) { - this.unk = unk; - } - - public int getFH() { + public int getFh() { return fh; } - public void setFH(int fh) { + public void setFh(int fh) { this.fh = fh; } + public int getOriginFh() { + return originFh; + } + + public void setOriginFh(int fh) { // fh actually originFh, thanks Spoon for pointing this out + this.originFh = fh; + } + @Override public void serialize(LittleEndianWriter lew) { lew.write(getType()); @@ -64,8 +64,8 @@ public class JumpDownMovement extends AbstractLifeMovement { lew.writeShort(getPosition().y); lew.writeShort(pixelsPerSecond.x); lew.writeShort(pixelsPerSecond.y); - lew.writeShort(unk); lew.writeShort(fh); + lew.writeShort(originFh); lew.write(getNewstate()); lew.writeShort(getDuration()); } diff --git a/src/server/quest/actions/ExpAction.java b/src/server/quest/actions/ExpAction.java index 73e9b8c27a..2ad65b3928 100644 --- a/src/server/quest/actions/ExpAction.java +++ b/src/server/quest/actions/ExpAction.java @@ -23,7 +23,6 @@ package server.quest.actions; import client.MapleCharacter; import constants.ServerConstants; -import net.server.world.World; import provider.MapleData; import provider.MapleDataTool; import server.quest.MapleQuest; @@ -53,15 +52,10 @@ public class ExpAction extends MapleQuestAction { } public static void runAction(MapleCharacter chr, int gain) { - if (chr.isBeginnerJob() && chr.getLevel() < 10) { - chr.gainExp(gain, true, true); - } else { - if(!ServerConstants.USE_QUEST_RATE) { - chr.gainExp(gain * chr.getExpRate(), true, true); - } else { - World w = chr.getClient().getWorldServer(); - chr.gainExp(gain * w.getExpRate() * w.getQuestRate(), true, true); - } - } + if (!ServerConstants.USE_QUEST_RATE) { + chr.gainExp(gain * chr.getExpRate(), true, true); + } else { + chr.gainExp(gain * chr.getQuestExpRate(), true, true); + } } } diff --git a/src/server/quest/actions/MesoAction.java b/src/server/quest/actions/MesoAction.java index 1fb79be4f9..8f84d6d299 100644 --- a/src/server/quest/actions/MesoAction.java +++ b/src/server/quest/actions/MesoAction.java @@ -23,7 +23,6 @@ package server.quest.actions; import client.MapleCharacter; import constants.ServerConstants; -import net.server.world.World; import provider.MapleData; import provider.MapleDataTool; import server.quest.MapleQuest; @@ -54,14 +53,13 @@ public class MesoAction extends MapleQuestAction { } public static void runAction(MapleCharacter chr, int gain) { - if(gain < 0) { + if (gain < 0) { chr.gainMeso(gain, true, false, true); } else { - if(!ServerConstants.USE_QUEST_RATE) { + if (!ServerConstants.USE_QUEST_RATE) { chr.gainMeso(gain * chr.getMesoRate(), true, false, true); } else { - World w = chr.getClient().getWorldServer(); - chr.gainMeso(gain * w.getMesoRate() * w.getQuestRate(), true, false, true); + chr.gainMeso(gain * chr.getQuestMesoRate(), true, false, true); } } } diff --git a/src/tools/LogHelper.java b/src/tools/LogHelper.java index f34d6422b6..7d37d78a8c 100644 --- a/src/tools/LogHelper.java +++ b/src/tools/LogHelper.java @@ -40,8 +40,8 @@ public class LogHelper { String log = expedition.getType().toString() + " EXPEDITION\r\n"; log += getTimeString(expedition.getStartTime()) + "\r\n"; - for (MapleCharacter member : expedition.getMembers()){ - log += ">>" + member.getName() + "\r\n"; + for (String memberName : expedition.getMembers().values()){ + log += ">>" + memberName + "\r\n"; } log += "BOSS KILLS\r\n"; for (String message: expedition.getBossLogs()){ diff --git a/src/tools/MaplePacketCreator.java b/src/tools/MaplePacketCreator.java index 28b73c9f7b..b999ae5567 100644 --- a/src/tools/MaplePacketCreator.java +++ b/src/tools/MaplePacketCreator.java @@ -1841,6 +1841,30 @@ public class MaplePacketCreator { return mplew.getPacket(); } + /** + * Guild Name & Mark update packet, thanks to Arnah (Vertisy) + * + * @param guildName The Guild name, blank for nothing. + */ + public static byte[] guildNameChanged(int chrid, String guildName){ + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_NAME_CHANGED.getValue()); + mplew.writeInt(chrid); + mplew.writeMapleAsciiString(guildName); + return mplew.getPacket(); + } + + public static byte[] guildMarkChanged(int chrid, MapleGuild guild){ + MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.GUILD_MARK_CHANGED.getValue()); + mplew.writeInt(chrid); + mplew.writeShort(guild.getLogoBG()); + mplew.write(guild.getLogoBGColor()); + mplew.writeShort(guild.getLogo()); + mplew.write(guild.getLogoColor()); + return mplew.getPacket(); + } + /** * Gets a packet spawning a player as a mapobject to other clients. * @@ -3384,7 +3408,7 @@ public class MaplePacketCreator { public static byte[] showBuffeffect(int cid, int skillid, int effectid) { return showBuffeffect(cid, skillid, effectid, (byte) 3); } - + public static byte[] showBuffeffect(int cid, int skillid, int effectid, byte direction) { final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); @@ -3396,6 +3420,19 @@ public class MaplePacketCreator { mplew.writeLong(0); return mplew.getPacket(); } + + public static byte[] showBuffeffect(int cid, int skillid, int skilllv, int effectid, byte direction) { // updated packet structure found thanks to Rien dev team + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(effectid); + mplew.writeInt(skillid); + mplew.write(0); + mplew.write(skilllv); + mplew.write(direction); + + return mplew.getPacket(); + } public static byte[] showOwnBuffEffect(int skillid, int effectid) { final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); @@ -4597,13 +4634,21 @@ public class MaplePacketCreator { mplew.writeInt(skillId); return mplew.getPacket(); } - - public static byte[] showMagnet(int mobid, byte success) { // Monster Magnet + + public static byte[] catchMonster(int mobOid, byte success) { // updated packet structure found thanks to Rien dev team final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.SHOW_MAGNET.getValue()); - mplew.writeInt(mobid); + mplew.writeShort(SendOpcode.CATCH_MONSTER.getValue()); + mplew.writeInt(mobOid); + mplew.write(success); + return mplew.getPacket(); + } + + public static byte[] catchMonster(int mobOid, int itemid, byte success) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.CATCH_MONSTER_WITH_ITEM.getValue()); + mplew.writeInt(mobOid); + mplew.writeInt(itemid); mplew.write(success); - mplew.skip(10); //Mmmk return mplew.getPacket(); } @@ -4932,15 +4977,6 @@ public class MaplePacketCreator { return mplew.getPacket(); } - public static byte[] catchMonster(int monsobid, int itemid, byte success) { - final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); - mplew.writeShort(SendOpcode.CATCH_MONSTER.getValue()); - mplew.writeInt(monsobid); - mplew.writeInt(itemid); - mplew.write(success); - return mplew.getPacket(); - } - public static byte[] catchMessage(int message) { // not done, I guess final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendOpcode.BRIDLE_MOB_CATCH_FAIL.getValue()); @@ -5599,7 +5635,7 @@ public class MaplePacketCreator { } return mplew.getPacket(); } - + public static byte[] hiredMerchantOwnerLeave() { final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); @@ -5607,6 +5643,14 @@ public class MaplePacketCreator { mplew.write(0); return mplew.getPacket(); } + + public static byte[] hiredMerchantOwnerMaintenanceLeave() { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.PLAYER_INTERACTION.getValue()); + mplew.write(PlayerInteractionHandler.Action.REAL_CLOSE_MERCHANT.getCode()); + mplew.write(5); + return mplew.getPacket(); + } public static byte[] hiredMerchantMaintenanceMessage() { MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(5); diff --git a/tools/MapleEventMethodFiller/src/mapleeventmethodfiller/MapleEventMethodFiller.java b/tools/MapleEventMethodFiller/src/mapleeventmethodfiller/MapleEventMethodFiller.java index 31e2a3650e..5fecba78ff 100644 --- a/tools/MapleEventMethodFiller/src/mapleeventmethodfiller/MapleEventMethodFiller.java +++ b/tools/MapleEventMethodFiller/src/mapleeventmethodfiller/MapleEventMethodFiller.java @@ -41,7 +41,7 @@ import org.apache.commons.io.FileUtils; and fill empty functions for every function name not yet present in the script. - Estimated parse time: + Estimated parse time: 10 seconds */ public class MapleEventMethodFiller { diff --git a/wz/Map.wz/Map/Map0/001000006.img.xml b/wz/Map.wz/Map/Map0/001000006.img.xml index dc5208b54d..faac7466cb 100644 --- a/wz/Map.wz/Map/Map0/001000006.img.xml +++ b/wz/Map.wz/Map/Map0/001000006.img.xml @@ -99,7 +99,7 @@ - + @@ -112,7 +112,7 @@ - + @@ -125,7 +125,7 @@ - + @@ -171,7 +171,7 @@ - + @@ -184,7 +184,7 @@ - + @@ -210,7 +210,7 @@ - + @@ -223,7 +223,7 @@ - + @@ -236,7 +236,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -262,7 +262,7 @@ - + @@ -275,7 +275,7 @@ - + @@ -288,7 +288,7 @@ - + @@ -301,7 +301,7 @@ - + @@ -384,7 +384,7 @@ - + @@ -397,7 +397,7 @@ - + diff --git a/wz/Map.wz/Map/Map0/001010400.img.xml b/wz/Map.wz/Map/Map0/001010400.img.xml index d4ea1a7acc..dbe653609d 100644 --- a/wz/Map.wz/Map/Map0/001010400.img.xml +++ b/wz/Map.wz/Map/Map0/001010400.img.xml @@ -103,7 +103,7 @@ - + @@ -116,7 +116,7 @@ - + @@ -129,7 +129,7 @@ - + @@ -142,7 +142,7 @@ - + @@ -155,7 +155,7 @@ - + @@ -168,7 +168,7 @@ - + @@ -181,7 +181,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -207,7 +207,7 @@ - + @@ -220,7 +220,7 @@ - + @@ -233,7 +233,7 @@ - + @@ -246,7 +246,7 @@ - + diff --git a/wz/Map.wz/Map/Map1/105090310.img.xml b/wz/Map.wz/Map/Map1/105090310.img.xml index 4cad11c7fe..4b7d0881e0 100644 --- a/wz/Map.wz/Map/Map1/105090310.img.xml +++ b/wz/Map.wz/Map/Map1/105090310.img.xml @@ -1,15294 +1,23 @@ - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -15299,71 +28,15299 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wz/Quest.wz/Check.img.xml b/wz/Quest.wz/Check.img.xml index ebc2afd886..6d03217b48 100644 --- a/wz/Quest.wz/Check.img.xml +++ b/wz/Quest.wz/Check.img.xml @@ -8339,7 +8339,7 @@ - + diff --git a/wz/Quest.wz/QuestInfo.img.xml b/wz/Quest.wz/QuestInfo.img.xml index d794b9c56d..a66bf5124e 100644 --- a/wz/Quest.wz/QuestInfo.img.xml +++ b/wz/Quest.wz/QuestInfo.img.xml @@ -2541,8 +2541,8 @@ - - + + diff --git a/wz/Quest.wz/Say.img.xml b/wz/Quest.wz/Say.img.xml index acfbca680f..63c54d3fb5 100644 --- a/wz/Quest.wz/Say.img.xml +++ b/wz/Quest.wz/Say.img.xml @@ -4503,21 +4503,22 @@ - + + - + - + diff --git a/wz/Skill.wz/MobSkill.img.xml b/wz/Skill.wz/MobSkill.img.xml index 23abbc7158..49011b15d9 100644 --- a/wz/Skill.wz/MobSkill.img.xml +++ b/wz/Skill.wz/MobSkill.img.xml @@ -14477,7 +14477,7 @@ - +