diff --git a/build/built-jar.properties b/build/built-jar.properties
index 7311569e8c..5ea7e1c439 100644
--- a/build/built-jar.properties
+++ b/build/built-jar.properties
@@ -1,4 +1,4 @@
-#Fri, 11 Aug 2017 12:31:17 -0300
+#Wed, 16 Aug 2017 14:03:06 -0300
C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2=
diff --git a/build/classes/client/MapleCharacter$10.class b/build/classes/client/MapleCharacter$10.class
index 9b7a894adb..cee02c826f 100644
Binary files a/build/classes/client/MapleCharacter$10.class and b/build/classes/client/MapleCharacter$10.class differ
diff --git a/build/classes/client/MapleCharacter$11.class b/build/classes/client/MapleCharacter$11.class
index 3f9e7d9232..1a58dcba63 100644
Binary files a/build/classes/client/MapleCharacter$11.class and b/build/classes/client/MapleCharacter$11.class differ
diff --git a/build/classes/client/MapleCharacter$12.class b/build/classes/client/MapleCharacter$12.class
index c4b23428aa..6e26f9a30b 100644
Binary files a/build/classes/client/MapleCharacter$12.class and b/build/classes/client/MapleCharacter$12.class differ
diff --git a/build/classes/client/MapleCharacter$13.class b/build/classes/client/MapleCharacter$13.class
index 3fce9478df..9b4b1b71f1 100644
Binary files a/build/classes/client/MapleCharacter$13.class and b/build/classes/client/MapleCharacter$13.class differ
diff --git a/build/classes/client/MapleCharacter$14.class b/build/classes/client/MapleCharacter$14.class
index 8e056a79aa..d9e66b9308 100644
Binary files a/build/classes/client/MapleCharacter$14.class and b/build/classes/client/MapleCharacter$14.class differ
diff --git a/build/classes/client/MapleCharacter$15.class b/build/classes/client/MapleCharacter$15.class
index ec174e4dde..3caa0e3237 100644
Binary files a/build/classes/client/MapleCharacter$15.class and b/build/classes/client/MapleCharacter$15.class differ
diff --git a/build/classes/client/MapleCharacter$16.class b/build/classes/client/MapleCharacter$16.class
index 04706d3dac..a749b2ffdb 100644
Binary files a/build/classes/client/MapleCharacter$16.class and b/build/classes/client/MapleCharacter$16.class differ
diff --git a/build/classes/client/MapleCharacter$17.class b/build/classes/client/MapleCharacter$17.class
index 5a3f33b882..81358aab12 100644
Binary files a/build/classes/client/MapleCharacter$17.class and b/build/classes/client/MapleCharacter$17.class differ
diff --git a/build/classes/client/MapleCharacter$18.class b/build/classes/client/MapleCharacter$18.class
index 71efd409b3..388ca80bac 100644
Binary files a/build/classes/client/MapleCharacter$18.class and b/build/classes/client/MapleCharacter$18.class differ
diff --git a/build/classes/client/MapleCharacter$19.class b/build/classes/client/MapleCharacter$19.class
index c490aa03f2..09c784a034 100644
Binary files a/build/classes/client/MapleCharacter$19.class and b/build/classes/client/MapleCharacter$19.class differ
diff --git a/build/classes/client/MapleCharacter$2.class b/build/classes/client/MapleCharacter$2.class
index f42b1dcc60..58f8ac90fe 100644
Binary files a/build/classes/client/MapleCharacter$2.class and b/build/classes/client/MapleCharacter$2.class differ
diff --git a/build/classes/client/MapleCharacter$20.class b/build/classes/client/MapleCharacter$20.class
index b863df73a1..e28de2b650 100644
Binary files a/build/classes/client/MapleCharacter$20.class and b/build/classes/client/MapleCharacter$20.class differ
diff --git a/build/classes/client/MapleCharacter$3.class b/build/classes/client/MapleCharacter$3.class
index 328df5d9dc..099c1c0e30 100644
Binary files a/build/classes/client/MapleCharacter$3.class and b/build/classes/client/MapleCharacter$3.class differ
diff --git a/build/classes/client/MapleCharacter$4.class b/build/classes/client/MapleCharacter$4.class
index 38444603a6..b90a570914 100644
Binary files a/build/classes/client/MapleCharacter$4.class and b/build/classes/client/MapleCharacter$4.class differ
diff --git a/build/classes/client/MapleCharacter$5.class b/build/classes/client/MapleCharacter$5.class
index f202f61729..1fb0f7f8b0 100644
Binary files a/build/classes/client/MapleCharacter$5.class and b/build/classes/client/MapleCharacter$5.class differ
diff --git a/build/classes/client/MapleCharacter$6.class b/build/classes/client/MapleCharacter$6.class
index 2cffab5245..145f1b5334 100644
Binary files a/build/classes/client/MapleCharacter$6.class and b/build/classes/client/MapleCharacter$6.class differ
diff --git a/build/classes/client/MapleCharacter$7.class b/build/classes/client/MapleCharacter$7.class
index de56774164..4ff6a6c8d1 100644
Binary files a/build/classes/client/MapleCharacter$7.class and b/build/classes/client/MapleCharacter$7.class differ
diff --git a/build/classes/client/MapleCharacter$8.class b/build/classes/client/MapleCharacter$8.class
index d1e984f74a..ba7192089d 100644
Binary files a/build/classes/client/MapleCharacter$8.class and b/build/classes/client/MapleCharacter$8.class differ
diff --git a/build/classes/client/MapleCharacter$9.class b/build/classes/client/MapleCharacter$9.class
index 83520f4307..cc4636d63e 100644
Binary files a/build/classes/client/MapleCharacter$9.class and b/build/classes/client/MapleCharacter$9.class differ
diff --git a/build/classes/client/MapleCharacter$FameStatus.class b/build/classes/client/MapleCharacter$FameStatus.class
index 0bc4699a53..4e7b2b52df 100644
Binary files a/build/classes/client/MapleCharacter$FameStatus.class and b/build/classes/client/MapleCharacter$FameStatus.class differ
diff --git a/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class b/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class
index ff3e2327b1..8c1f27df90 100644
Binary files a/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class and b/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class differ
diff --git a/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class b/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class
index 103dda5c50..67feccb01c 100644
Binary files a/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class and b/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class differ
diff --git a/build/classes/client/MapleCharacter$SkillEntry.class b/build/classes/client/MapleCharacter$SkillEntry.class
index 9f2d016036..9545bfb4d3 100644
Binary files a/build/classes/client/MapleCharacter$SkillEntry.class and b/build/classes/client/MapleCharacter$SkillEntry.class differ
diff --git a/build/classes/client/MapleCharacter.class b/build/classes/client/MapleCharacter.class
index 0b4f4b4d86..8fab864028 100644
Binary files a/build/classes/client/MapleCharacter.class and b/build/classes/client/MapleCharacter.class differ
diff --git a/build/classes/client/MapleClient.class b/build/classes/client/MapleClient.class
index c8daf85dc9..e3a5a1afbf 100644
Binary files a/build/classes/client/MapleClient.class and b/build/classes/client/MapleClient.class differ
diff --git a/build/classes/client/command/Commands$1.class b/build/classes/client/command/Commands$1.class
index cff43e3f86..0fa85b3271 100644
Binary files a/build/classes/client/command/Commands$1.class and b/build/classes/client/command/Commands$1.class differ
diff --git a/build/classes/client/command/Commands.class b/build/classes/client/command/Commands.class
index 9a450a951f..6ef0c37868 100644
Binary files a/build/classes/client/command/Commands.class and b/build/classes/client/command/Commands.class differ
diff --git a/build/classes/client/inventory/Equip$1.class b/build/classes/client/inventory/Equip$1.class
index f626cb9812..7bf6c14dc6 100644
Binary files a/build/classes/client/inventory/Equip$1.class and b/build/classes/client/inventory/Equip$1.class differ
diff --git a/build/classes/client/inventory/Equip$ScrollResult.class b/build/classes/client/inventory/Equip$ScrollResult.class
index fd818c1789..040f1fb976 100644
Binary files a/build/classes/client/inventory/Equip$ScrollResult.class and b/build/classes/client/inventory/Equip$ScrollResult.class differ
diff --git a/build/classes/client/inventory/Equip$StatUpgrade.class b/build/classes/client/inventory/Equip$StatUpgrade.class
index 4fdb1d4946..70c7d780ad 100644
Binary files a/build/classes/client/inventory/Equip$StatUpgrade.class and b/build/classes/client/inventory/Equip$StatUpgrade.class differ
diff --git a/build/classes/client/inventory/Equip.class b/build/classes/client/inventory/Equip.class
index e24f2e4576..084b16dedd 100644
Binary files a/build/classes/client/inventory/Equip.class and b/build/classes/client/inventory/Equip.class differ
diff --git a/build/classes/constants/ServerConstants.class b/build/classes/constants/ServerConstants.class
index 85c952ec4d..26baa4a7d4 100644
Binary files a/build/classes/constants/ServerConstants.class and b/build/classes/constants/ServerConstants.class differ
diff --git a/build/classes/net/server/channel/handlers/GeneralChatHandler.class b/build/classes/net/server/channel/handlers/GeneralChatHandler.class
index a029474f54..74486d2eea 100644
Binary files a/build/classes/net/server/channel/handlers/GeneralChatHandler.class and b/build/classes/net/server/channel/handlers/GeneralChatHandler.class differ
diff --git a/build/classes/net/server/channel/handlers/UseItemHandler.class b/build/classes/net/server/channel/handlers/UseItemHandler.class
index c51bd63006..e0dcc94650 100644
Binary files a/build/classes/net/server/channel/handlers/UseItemHandler.class and b/build/classes/net/server/channel/handlers/UseItemHandler.class differ
diff --git a/build/classes/scripting/event/EventInstanceManager$3.class b/build/classes/scripting/event/EventInstanceManager$3.class
index 008216a501..454389bfc6 100644
Binary files a/build/classes/scripting/event/EventInstanceManager$3.class and b/build/classes/scripting/event/EventInstanceManager$3.class differ
diff --git a/build/classes/scripting/event/EventInstanceManager.class b/build/classes/scripting/event/EventInstanceManager.class
index d3f5685bcf..35b8d9df15 100644
Binary files a/build/classes/scripting/event/EventInstanceManager.class and b/build/classes/scripting/event/EventInstanceManager.class differ
diff --git a/build/classes/scripting/event/EventManager.class b/build/classes/scripting/event/EventManager.class
index 9a8a6c3938..0ad88f128a 100644
Binary files a/build/classes/scripting/event/EventManager.class and b/build/classes/scripting/event/EventManager.class differ
diff --git a/build/classes/scripting/reactor/ReactorActionManager$1.class b/build/classes/scripting/reactor/ReactorActionManager$1.class
index d91aebff3f..325a8a0065 100644
Binary files a/build/classes/scripting/reactor/ReactorActionManager$1.class and b/build/classes/scripting/reactor/ReactorActionManager$1.class differ
diff --git a/build/classes/scripting/reactor/ReactorActionManager$2.class b/build/classes/scripting/reactor/ReactorActionManager$2.class
index 8b8825b906..d242047c25 100644
Binary files a/build/classes/scripting/reactor/ReactorActionManager$2.class and b/build/classes/scripting/reactor/ReactorActionManager$2.class differ
diff --git a/build/classes/scripting/reactor/ReactorActionManager.class b/build/classes/scripting/reactor/ReactorActionManager.class
index cde02d0c19..103d60ccbb 100644
Binary files a/build/classes/scripting/reactor/ReactorActionManager.class and b/build/classes/scripting/reactor/ReactorActionManager.class differ
diff --git a/build/classes/server/MapleInventoryManipulator.class b/build/classes/server/MapleInventoryManipulator.class
index 6243beaab3..2c31ffc838 100644
Binary files a/build/classes/server/MapleInventoryManipulator.class and b/build/classes/server/MapleInventoryManipulator.class differ
diff --git a/build/classes/server/MapleItemInformationProvider$RewardItem.class b/build/classes/server/MapleItemInformationProvider$RewardItem.class
index 9d55b0c8ca..2a3b667040 100644
Binary files a/build/classes/server/MapleItemInformationProvider$RewardItem.class and b/build/classes/server/MapleItemInformationProvider$RewardItem.class differ
diff --git a/build/classes/server/MapleItemInformationProvider$scriptedItem.class b/build/classes/server/MapleItemInformationProvider$scriptedItem.class
index 19b4aed669..e7f80b5d43 100644
Binary files a/build/classes/server/MapleItemInformationProvider$scriptedItem.class and b/build/classes/server/MapleItemInformationProvider$scriptedItem.class differ
diff --git a/build/classes/server/MapleItemInformationProvider.class b/build/classes/server/MapleItemInformationProvider.class
index ea4745fcd9..294ac70745 100644
Binary files a/build/classes/server/MapleItemInformationProvider.class and b/build/classes/server/MapleItemInformationProvider.class differ
diff --git a/build/classes/server/MapleStatEffect.class b/build/classes/server/MapleStatEffect.class
index 0880bf148c..056337374a 100644
Binary files a/build/classes/server/MapleStatEffect.class and b/build/classes/server/MapleStatEffect.class differ
diff --git a/build/classes/server/maps/MapleDoor.class b/build/classes/server/maps/MapleDoor.class
index c884928094..89afb5dbf4 100644
Binary files a/build/classes/server/maps/MapleDoor.class and b/build/classes/server/maps/MapleDoor.class differ
diff --git a/build/classes/server/maps/MapleMap$1.class b/build/classes/server/maps/MapleMap$1.class
index 790c202a54..99fbbef1fe 100644
Binary files a/build/classes/server/maps/MapleMap$1.class and b/build/classes/server/maps/MapleMap$1.class differ
diff --git a/build/classes/server/maps/MapleMap$10.class b/build/classes/server/maps/MapleMap$10.class
index 37ded8a47a..f64ae9e97f 100644
Binary files a/build/classes/server/maps/MapleMap$10.class and b/build/classes/server/maps/MapleMap$10.class differ
diff --git a/build/classes/server/maps/MapleMap$11.class b/build/classes/server/maps/MapleMap$11.class
index 3922c9d10d..40be89cfd8 100644
Binary files a/build/classes/server/maps/MapleMap$11.class and b/build/classes/server/maps/MapleMap$11.class differ
diff --git a/build/classes/server/maps/MapleMap$12.class b/build/classes/server/maps/MapleMap$12.class
index 32cb4069c9..d50ae39779 100644
Binary files a/build/classes/server/maps/MapleMap$12.class and b/build/classes/server/maps/MapleMap$12.class differ
diff --git a/build/classes/server/maps/MapleMap$13.class b/build/classes/server/maps/MapleMap$13.class
index a8ab525771..6d16aa16ad 100644
Binary files a/build/classes/server/maps/MapleMap$13.class and b/build/classes/server/maps/MapleMap$13.class differ
diff --git a/build/classes/server/maps/MapleMap$14.class b/build/classes/server/maps/MapleMap$14.class
index d221d204c7..c83b5ec594 100644
Binary files a/build/classes/server/maps/MapleMap$14.class and b/build/classes/server/maps/MapleMap$14.class differ
diff --git a/build/classes/server/maps/MapleMap$15.class b/build/classes/server/maps/MapleMap$15.class
index 29d70c2e65..a8c5da30ea 100644
Binary files a/build/classes/server/maps/MapleMap$15.class and b/build/classes/server/maps/MapleMap$15.class differ
diff --git a/build/classes/server/maps/MapleMap$16.class b/build/classes/server/maps/MapleMap$16.class
index a88fdd8db8..b1c7556c67 100644
Binary files a/build/classes/server/maps/MapleMap$16.class and b/build/classes/server/maps/MapleMap$16.class differ
diff --git a/build/classes/server/maps/MapleMap$17.class b/build/classes/server/maps/MapleMap$17.class
index 295148f495..a1ec45f6db 100644
Binary files a/build/classes/server/maps/MapleMap$17.class and b/build/classes/server/maps/MapleMap$17.class differ
diff --git a/build/classes/server/maps/MapleMap$18.class b/build/classes/server/maps/MapleMap$18.class
index 3a9ddd605b..3f7f3d8977 100644
Binary files a/build/classes/server/maps/MapleMap$18.class and b/build/classes/server/maps/MapleMap$18.class differ
diff --git a/build/classes/server/maps/MapleMap$19.class b/build/classes/server/maps/MapleMap$19.class
index c198c7f073..5cdb09a35d 100644
Binary files a/build/classes/server/maps/MapleMap$19.class and b/build/classes/server/maps/MapleMap$19.class differ
diff --git a/build/classes/server/maps/MapleMap$2.class b/build/classes/server/maps/MapleMap$2.class
index 5bb740faf3..02bff450c5 100644
Binary files a/build/classes/server/maps/MapleMap$2.class and b/build/classes/server/maps/MapleMap$2.class differ
diff --git a/build/classes/server/maps/MapleMap$20.class b/build/classes/server/maps/MapleMap$20.class
index 7757ed86a1..ec3e1aa759 100644
Binary files a/build/classes/server/maps/MapleMap$20.class and b/build/classes/server/maps/MapleMap$20.class differ
diff --git a/build/classes/server/maps/MapleMap$21.class b/build/classes/server/maps/MapleMap$21.class
index 907852ad1b..12e0dbcfb1 100644
Binary files a/build/classes/server/maps/MapleMap$21.class and b/build/classes/server/maps/MapleMap$21.class differ
diff --git a/build/classes/server/maps/MapleMap$22.class b/build/classes/server/maps/MapleMap$22.class
index 0f08e82e8d..944856d5e5 100644
Binary files a/build/classes/server/maps/MapleMap$22.class and b/build/classes/server/maps/MapleMap$22.class differ
diff --git a/build/classes/server/maps/MapleMap$23.class b/build/classes/server/maps/MapleMap$23.class
index c1eff523ed..d7c623e376 100644
Binary files a/build/classes/server/maps/MapleMap$23.class and b/build/classes/server/maps/MapleMap$23.class differ
diff --git a/build/classes/server/maps/MapleMap$24.class b/build/classes/server/maps/MapleMap$24.class
index 9d26c31856..c6e7cf5114 100644
Binary files a/build/classes/server/maps/MapleMap$24.class and b/build/classes/server/maps/MapleMap$24.class differ
diff --git a/build/classes/server/maps/MapleMap$25.class b/build/classes/server/maps/MapleMap$25.class
index c8d83c6712..bc85539ba5 100644
Binary files a/build/classes/server/maps/MapleMap$25.class and b/build/classes/server/maps/MapleMap$25.class differ
diff --git a/build/classes/server/maps/MapleMap$26.class b/build/classes/server/maps/MapleMap$26.class
index cdbb750bce..241c16a95e 100644
Binary files a/build/classes/server/maps/MapleMap$26.class and b/build/classes/server/maps/MapleMap$26.class differ
diff --git a/build/classes/server/maps/MapleMap$27.class b/build/classes/server/maps/MapleMap$27.class
index 37f7141fbc..c821ff4e41 100644
Binary files a/build/classes/server/maps/MapleMap$27.class and b/build/classes/server/maps/MapleMap$27.class differ
diff --git a/build/classes/server/maps/MapleMap$28.class b/build/classes/server/maps/MapleMap$28.class
index e2c284b3bd..5c5366f058 100644
Binary files a/build/classes/server/maps/MapleMap$28.class and b/build/classes/server/maps/MapleMap$28.class differ
diff --git a/build/classes/server/maps/MapleMap$29$1.class b/build/classes/server/maps/MapleMap$29$1.class
index 3c1bcd00e5..2bfa533a11 100644
Binary files a/build/classes/server/maps/MapleMap$29$1.class and b/build/classes/server/maps/MapleMap$29$1.class differ
diff --git a/build/classes/server/maps/MapleMap$29.class b/build/classes/server/maps/MapleMap$29.class
index a55f375b0f..6ada0fa16b 100644
Binary files a/build/classes/server/maps/MapleMap$29.class and b/build/classes/server/maps/MapleMap$29.class differ
diff --git a/build/classes/server/maps/MapleMap$3.class b/build/classes/server/maps/MapleMap$3.class
index 0fb597c1aa..b75af0bd03 100644
Binary files a/build/classes/server/maps/MapleMap$3.class and b/build/classes/server/maps/MapleMap$3.class differ
diff --git a/build/classes/server/maps/MapleMap$30.class b/build/classes/server/maps/MapleMap$30.class
index c063b72f3f..15fc3ba638 100644
Binary files a/build/classes/server/maps/MapleMap$30.class and b/build/classes/server/maps/MapleMap$30.class differ
diff --git a/build/classes/server/maps/MapleMap$4.class b/build/classes/server/maps/MapleMap$4.class
index 2126da4576..79e7c02890 100644
Binary files a/build/classes/server/maps/MapleMap$4.class and b/build/classes/server/maps/MapleMap$4.class differ
diff --git a/build/classes/server/maps/MapleMap$5.class b/build/classes/server/maps/MapleMap$5.class
index c419e7398f..0422437ebc 100644
Binary files a/build/classes/server/maps/MapleMap$5.class and b/build/classes/server/maps/MapleMap$5.class differ
diff --git a/build/classes/server/maps/MapleMap$6.class b/build/classes/server/maps/MapleMap$6.class
index 01bd01c2a9..084b4527bf 100644
Binary files a/build/classes/server/maps/MapleMap$6.class and b/build/classes/server/maps/MapleMap$6.class differ
diff --git a/build/classes/server/maps/MapleMap$7.class b/build/classes/server/maps/MapleMap$7.class
index 8f059461d8..7eaeecc36b 100644
Binary files a/build/classes/server/maps/MapleMap$7.class and b/build/classes/server/maps/MapleMap$7.class differ
diff --git a/build/classes/server/maps/MapleMap$8.class b/build/classes/server/maps/MapleMap$8.class
index bc66f24371..049106adb9 100644
Binary files a/build/classes/server/maps/MapleMap$8.class and b/build/classes/server/maps/MapleMap$8.class differ
diff --git a/build/classes/server/maps/MapleMap$9.class b/build/classes/server/maps/MapleMap$9.class
index 282d3dc875..8104d0dc07 100644
Binary files a/build/classes/server/maps/MapleMap$9.class and b/build/classes/server/maps/MapleMap$9.class differ
diff --git a/build/classes/server/maps/MapleMap$ActivateItemReactor$1.class b/build/classes/server/maps/MapleMap$ActivateItemReactor$1.class
index 144099d1e4..ccba4e8fd6 100644
Binary files a/build/classes/server/maps/MapleMap$ActivateItemReactor$1.class and b/build/classes/server/maps/MapleMap$ActivateItemReactor$1.class differ
diff --git a/build/classes/server/maps/MapleMap$ActivateItemReactor.class b/build/classes/server/maps/MapleMap$ActivateItemReactor.class
index 50fc48dcb7..3d42c445a6 100644
Binary files a/build/classes/server/maps/MapleMap$ActivateItemReactor.class and b/build/classes/server/maps/MapleMap$ActivateItemReactor.class differ
diff --git a/build/classes/server/maps/MapleMap$ExpireMapItemJob.class b/build/classes/server/maps/MapleMap$ExpireMapItemJob.class
index ecc495f178..82ea60a696 100644
Binary files a/build/classes/server/maps/MapleMap$ExpireMapItemJob.class and b/build/classes/server/maps/MapleMap$ExpireMapItemJob.class differ
diff --git a/build/classes/server/maps/MapleMap.class b/build/classes/server/maps/MapleMap.class
index 19dd863c62..77cad7ac6c 100644
Binary files a/build/classes/server/maps/MapleMap.class and b/build/classes/server/maps/MapleMap.class differ
diff --git a/build/classes/server/maps/MapleMapFactory.class b/build/classes/server/maps/MapleMapFactory.class
index f0bf091a62..d2b770fadb 100644
Binary files a/build/classes/server/maps/MapleMapFactory.class and b/build/classes/server/maps/MapleMapFactory.class differ
diff --git a/dist/MapleSolaxia.jar b/dist/MapleSolaxia.jar
index 71dec0ee41..e21bb3d05e 100644
Binary files a/dist/MapleSolaxia.jar and b/dist/MapleSolaxia.jar differ
diff --git a/docs/mychanges_ptbr.txt b/docs/mychanges_ptbr.txt
index 3c33402331..daf1fd7960 100644
--- a/docs/mychanges_ptbr.txt
+++ b/docs/mychanges_ptbr.txt
@@ -438,4 +438,17 @@ Resolvido problema com GMs de level alto recebendo bloqueio MWLB.
07 - 10 Agosto 2017,
Adicionada Magatia PQ.
Resolvido bug no Dojo impedindo mesma party de tentar entrar de novo se saiu sem acabá-la.
-Resolvido bugs nos scripts de 2nd job.
\ No newline at end of file
+Resolvido bugs nos scripts de 2nd job.
+
+14 Agosto 2017,
+Resolvidos alguns bugs em alguns NPCs e mapa de Mu Lung.
+Resolvido algumas inconsistências entre MapleCharacter <-> MaplePartyCharacter, ocasionando infos erroneas em Guilds.
+
+15 Agosto 2017,
+Rebalanceado ganho de equip exp.
+Atualizado amostra na tela de lvup stats de equips para os jogadores.
+Reactors agora dropam itens de quest somente se o player possui a mesma ativada.
+
+16 Agosto 2017,
+Consertado corrente de quests da Temple of Time. Agora Pink Bean é alcancável.
+Adicionadas algumas chairs ao SQL.
\ No newline at end of file
diff --git a/docs/todo.txt b/docs/todo.txt
index c5de8c33f0..ada33b571c 100644
--- a/docs/todo.txt
+++ b/docs/todo.txt
@@ -21,9 +21,7 @@ ToDo / Missing features list:
---------------------------
** Basic PQs **
-- Zakum Party Quest
- Amoria Party Quest
-- Magatia Party Quest
---------------------------
@@ -51,8 +49,6 @@ ToDo / Missing features list:
---------------------------
** GM/ADMIN **
-- Create a Gm/admin command list
-- Set level for Gm and Admin commands. Example: Player = 0 / Donator = 1 / JuniorGm = 2 / Gm = 3 / SuperGm = 4 / Developer = 5 / Admin = 6
---------------------------
====================================
\ No newline at end of file
diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml
index 2aeac23582..928890d149 100644
--- a/nbproject/private/private.xml
+++ b/nbproject/private/private.xml
@@ -3,7 +3,11 @@
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/event/EventInstanceManager.java
+ file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/inventory/Equip.java
+ file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/command/Commands.java
+ file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/sql/db_database.sql
+ file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/constants/ServerConstants.java
+ file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/sql/db_shopupdate.sql
diff --git a/scripts/event/Boats.js b/scripts/event/Boats.js
index 583cd2b471..89da243556 100644
--- a/scripts/event/Boats.js
+++ b/scripts/event/Boats.js
@@ -44,8 +44,8 @@ function scheduleNew() {
function stopentry() {
em.setProperty("entry","false");
- Orbis_Boat_Cabin.resetReactors(); //boxes
- Ellinia_Boat_Cabin.resetReactors();
+ Orbis_Boat_Cabin.clearMapObjects(); //boxes
+ Ellinia_Boat_Cabin.clearMapObjects();
}
function takeoff() {
diff --git a/scripts/event/Hak.js b/scripts/event/Hak.js
index e99036f018..8ef63fda16 100644
--- a/scripts/event/Hak.js
+++ b/scripts/event/Hak.js
@@ -10,9 +10,7 @@ var map;
var timeOnRide = 60; //Seconds
var onRide;
-function init() {
-
-}
+function init() {}
function setup() {
var eim = em.newInstance("Hak_" + + em.getProperty("player"));
diff --git a/scripts/npc/2091006.js b/scripts/npc/2091006.js
index bd83ffc017..929dc9ec1f 100644
--- a/scripts/npc/2091006.js
+++ b/scripts/npc/2091006.js
@@ -53,7 +53,7 @@ function action(mode, type, selection) {
if (mode == 0) {
cm.sendNext("#b(As I took my hand off the bulletin board, the mysterious energy that was covering my disappeared as well.)");
} else {
- cm.getPlayer().saveLocation("DOJO");
+ cm.getPlayer().saveLocation("MIRROR");
cm.warp(925020000, 4);
}
cm.dispose();
diff --git a/scripts/npc/2103000.js b/scripts/npc/2103000.js
index d259008ad4..5458677a55 100644
--- a/scripts/npc/2103000.js
+++ b/scripts/npc/2103000.js
@@ -41,7 +41,7 @@ function action(mode, type, selection) {
if(cm.isQuestStarted(3900) && cm.getPlayer().getQuestInfo(3900) != 5) {
cm.sendOk("#b(You drink the water from the oasis and feel refreshed.)", 2);
//TODO: Update quest progress.
- cm.getPlayer().updateQuestInfo(3900, 5);
+ cm.getPlayer().updateQuestInfo(3900, "5");
}
cm.dispose();
}
diff --git a/scripts/npc/9201143.js b/scripts/npc/9201143.js
index 0258f48c65..b02b59cf8a 100644
--- a/scripts/npc/9201143.js
+++ b/scripts/npc/9201143.js
@@ -1,249 +1,11 @@
-/* @Author SharpAceX / Ronan
+/* @Author SharpAceX
Name: Steward
Map(s): Foyer
- Info: Steward / Commands
+ Info: Steward
NPC ID: 9201143.js
*/
-var status;
-
-var comm_lv6 = [];
-var desc_lv6 = [];
-
-var comm_lv5 = [];
-var desc_lv5 = [];
-
-var comm_lv4 = [];
-var desc_lv4 = [];
-
-var comm_lv3 = [];
-var desc_lv3 = [];
-
-var comm_lv2 = [];
-var desc_lv2 = [];
-
-var comm_lv1 = [];
-var desc_lv1 = [];
-
-var levels = ["Common", "Donator", "JrGM", "GM", "SuperGM", "Developer", "Admin"];
-
-var comm_cursor, desc_cursor;
-
-function addCommand(comm, desc) {
- comm_cursor.add(comm);
- desc_cursor.add(desc);
-}
-
-function writeSolaxiaCommandsLv6() { //Admin
- comm_cursor = comm_lv6;
- desc_cursor = desc_lv6;
-
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
-}
-
-function writeSolaxiaCommandsLv5() { //Developer
- comm_cursor = comm_lv5;
- desc_cursor = desc_lv5;
-
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
-}
-
-function writeSolaxiaCommandsLv4() { //SuperGM
- comm_cursor = comm_lv4;
- desc_cursor = desc_lv4;
-
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
-}
-
-function writeSolaxiaCommandsLv3() { //GM
- comm_cursor = comm_lv3;
- desc_cursor = desc_lv3;
-
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
- addCommand("", "");
-}
-
-function writeSolaxiaCommandsLv2() { //JrGM
- comm_cursor = comm_lv2;
- desc_cursor = desc_lv2;
-
- addCommand("hide", "");
- addCommand("unhide", "");
- addCommand("sp", "");
- addCommand("ap", "");
- addCommand("empowerme", "");
- addCommand("buffmap", "");
- addCommand("buff", "");
- addCommand("bomb", "");
- addCommand("dc", "");
- addCommand("cleardrops", "");
- addCommand("clearslot", "");
- addCommand("warp", "");
- addCommand("warpto", "");
- addCommand("summon", "");
- addCommand("gmshop", "");
- addCommand("heal", "");
- addCommand("item", "");
- addCommand("level", "");
- addCommand("levelpro", "");
- addCommand("setstat", "");
- addCommand("maxstat", "");
- addCommand("maxskill", "");
- addCommand("mesos", "");
- addCommand("search", "");
- addCommand("jail", "");
- addCommand("unjail", "");
- addCommand("unbug", "");
-}
-
-function writeSolaxiaCommandsLv1() { //Donator
- comm_cursor = comm_lv1;
- desc_cursor = desc_lv1;
-
- addCommand("buffme", "");
- addCommand("goto", "");
- addCommand("recharge", "");
- addCommand("whereami", "");
-}
-
-function writeSolaxiaCommandsLv0() { //Common
- comm_cursor = comm_lv0;
- desc_cursor = desc_lv0;
-
- addCommand("commands", "");
- addCommand("time", "");
- addCommand("staff", "");
- addCommand("uptime", "");
- addCommand("gacha", "");
- addCommand("whatdropsfrom", "");
- addCommand("whodrops", "");
- addCommand("dispose", "");
- addCommand("equiplv", "");
- addCommand("rates", "");
- addCommand("online", "");
- addCommand("gm", "");
- addCommand("bug", "");
- addCommand("joinevent", "");
- addCommand("leaveevent", "");
- addCommand("bosshp", "");
- addCommand("ranks", "");
-
-
-}
-
-function writeSolaxiaCommands() {
- writeSolaxiaCommandsLv0(); //Common
- writeSolaxiaCommandsLv1(); //Donator
- writeSolaxiaCommandsLv2(); //JrGM
- writeSolaxiaCommandsLv3(); //GM
- writeSolaxiaCommandsLv4(); //Developer
- writeSolaxiaCommandsLv5(); //SuperGM
- writeSolaxiaCommandsLv6(); //Admin
-}
-
function start() {
- if(cm.getPlayer.getCS()) {
- writeSolaxiaCommands();
- action(1, 0, 0);
- } else {
- cm.sendNext("At your service, my friend.");
- cm.dispose();
- }
-}
-
-function action(mode, type, selection) {
- if (mode == -1) {
- cm.dispose();
- } else {
- if (mode == 0 && status == 0) {
- cm.dispose();
- return;
- }
- if (mode == 1)
- status++;
- else
- status--;
-
- if (status == 0) {
- var sendStr = "There are all available commands for you:\r\n\r\n#b";
- for(var i = 0; i < cm.getGmLevel(); i++) {
- sendStr += "#L" + i + "#" + levels[i] + "#l\r\n";
- }
-
- cm.sendSimple(sendStr);
- } else if(status == 1) {
- var lvComm, lvDesc;
-
- if(selection == 0) {
- lvComm = comm_lv1;
- lvDesc = desc_lv1;
- } else if(selection == 1) {
- lvComm = comm_lv2;
- lvDesc = desc_lv2;
- } else if(selection == 2) {
- lvComm = comm_lv3;
- lvDesc = desc_lv3;
- } else if(selection == 3) {
- lvComm = comm_lv4;
- lvDesc = desc_lv4;
- } else if(selection == 4) {
- lvComm = comm_lv5;
- lvDesc = desc_lv5;
- } else {
- lvComm = comm_lv6;
- lvDesc = desc_lv6;
- }
-
- var sendStr = "The following commands are available for #b" + levels[selection] + "#k:\r\n\r\n";
- for(var i = 0; i < lvComm.length; i++) {
- sendStr += " #L" + i + "# " + lvComm[i] + " - " + lvDesc[i];
- sendStr += "#l\r\n";
- }
-
- cm.sendPrev(sendStr);
- }
- }
+ cm.sendNext("At your service, my friend.");
+ cm.dispose();
}
diff --git a/scripts/npc/commands.js b/scripts/npc/commands.js
new file mode 100644
index 0000000000..669ec493a5
--- /dev/null
+++ b/scripts/npc/commands.js
@@ -0,0 +1,288 @@
+/* @Author Ronan
+ * @Author Vcoc
+ Name: Steward
+ Map(s): Foyer
+ Info: Commands
+ Script: commands.js
+*/
+
+/*
+Please, keep the commands organized!
+*/
+
+var status;
+
+var comm_lv6 = [];
+var desc_lv6 = [];
+
+var comm_lv5 = [];
+var desc_lv5 = [];
+
+var comm_lv4 = [];
+var desc_lv4 = [];
+
+var comm_lv3 = [];
+var desc_lv3 = [];
+
+var comm_lv2 = [];
+var desc_lv2 = [];
+
+var comm_lv1 = [];
+var desc_lv1 = [];
+
+var comm_lv0 = [];
+var desc_lv0 = [];
+
+var levels = ["Common", "Donator", "JrGM", "GM", "SuperGM", "Developer", "Admin"];
+
+var comm_cursor, desc_cursor;
+
+function addCommand(comm, desc) {
+ comm_cursor.push(comm);
+ desc_cursor.push(desc);
+}
+
+function writeSolaxiaCommandsLv6() { //Admin
+ comm_cursor = comm_lv6;
+ desc_cursor = desc_lv6;
+
+ addCommand("warpworld", "");
+ addCommand("saveall", "");
+ addCommand("dcall", "");
+ addCommand("mapplayers", "");
+ addCommand("getacc", "");
+ addCommand("shutdown", "");
+ addCommand("shutdownnow", "");
+ addCommand("clearquestcache", "");
+ addCommand("clearquest", "");
+}
+
+function writeSolaxiaCommandsLv5() { //Developer
+ comm_cursor = comm_lv5;
+ desc_cursor = desc_lv5;
+
+ addCommand("debugmonster", "");
+ addCommand("debugpacket", "");
+ addCommand("debugnearestportal", "");
+ addCommand("debugnearestspawnpoint", "");
+ addCommand("debugpos", "");
+ addCommand("debugmap", "");
+ addCommand("debugmobsp", "");
+ addCommand("debugevent", "");
+ addCommand("debugareas", "");
+ addCommand("debugreactors", "");
+ addCommand("debugcoupons", "");
+ addCommand("debugplayercoupons", "");
+ addCommand("debugtimer", "");
+}
+
+function writeSolaxiaCommandsLv4() { //SuperGM
+ comm_cursor = comm_lv4;
+ desc_cursor = desc_lv4;
+
+ addCommand("servermessage", "");
+ addCommand("proitem", "");
+ addCommand("seteqstat", "");
+ addCommand("exprate", "");
+ addCommand("mesorate", "");
+ addCommand("droprate", "");
+ addCommand("bossdroprate", "");
+ addCommand("itemvac", "");
+ addCommand("forcevac", "");
+ addCommand("zakum", "");
+ addCommand("horntail", "");
+ addCommand("pinkbean", "");
+ addCommand("pap", "");
+ addCommand("pianus", "");
+ addCommand("playernpc", "");
+ addCommand("face", "");
+ addCommand("hair", "");
+}
+
+function writeSolaxiaCommandsLv3() { //GM
+ comm_cursor = comm_lv3;
+ desc_cursor = desc_lv3;
+
+ addCommand("spawn", "");
+ addCommand("mutemap", "");
+ addCommand("checkdmg", "");
+ addCommand("inmap", "");
+ addCommand("reloadevents", "");
+ addCommand("reloaddrops", "");
+ addCommand("reloadportals", "");
+ addCommand("reloadmap", "");
+ addCommand("hpmp", "");
+ addCommand("music", "");
+ addCommand("monitor", "");
+ addCommand("monitors", "");
+ addCommand("ignore", "");
+ addCommand("ignored", "");
+ addCommand("pos", "");
+ addCommand("togglecoupon", "");
+ addCommand("chat", "");
+ addCommand("fame", "");
+ addCommand("giftnx", ""); //Ronan, muda esse comando para "givenx", faz mais sentido. XD
+ addCommand("vp", ""); //Ronan, muda esse comando para "givevp", faz mais sentido. XD
+ addCommand("id", "");
+ addCommand("expeds", "");
+ addCommand("kill", "");
+ addCommand("seed", "");
+ addCommand("killall", "");
+ addCommand("notice", "");
+ addCommand("rip", "");
+ addCommand("openportal", "");
+ addCommand("closeportals", "");
+ addCommand("pe", "");
+ addCommand("startevent", "");
+ addCommand("endevent", "");
+ addCommand("online2", "");
+ addCommand("warpsnowball", "");
+ addCommand("ban", "");
+ addCommand("unban", "");
+ addCommand("healmap", "");
+ addCommand("healperson", "");
+ addCommand("hurt", "");
+ addCommand("killmap", "");
+ addCommand("night", "");
+ addCommand("npc", "");
+}
+
+function writeSolaxiaCommandsLv2() { //JrGM
+ comm_cursor = comm_lv2;
+ desc_cursor = desc_lv2;
+
+ addCommand("hide", "");
+ addCommand("unhide", "");
+ addCommand("sp", "");
+ addCommand("ap", "");
+ addCommand("empowerme", "");
+ addCommand("buffmap", "");
+ addCommand("buff", "");
+ addCommand("bomb", "");
+ addCommand("dc", "");
+ addCommand("cleardrops", "");
+ addCommand("clearslot", "");
+ addCommand("warp", "");
+ addCommand("warpto", "");
+ addCommand("warphere", "");
+ addCommand("gmshop", "");
+ addCommand("heal", "");
+ addCommand("item", "");
+ addCommand("level", "");
+ addCommand("levelpro", "");
+ addCommand("setstat", "");
+ addCommand("maxstat", "");
+ addCommand("maxskill", "");
+ addCommand("mesos", "");
+ addCommand("search", "");
+ addCommand("jail", "");
+ addCommand("unjail", "");
+ addCommand("job", "");
+ addCommand("unbug", "");
+}
+
+function writeSolaxiaCommandsLv1() { //Donator
+ comm_cursor = comm_lv1;
+ desc_cursor = desc_lv1;
+
+ addCommand("buffme", "");
+ addCommand("goto", "");
+ addCommand("recharge", "");
+ addCommand("whereami", "");
+}
+
+function writeSolaxiaCommandsLv0() { //Common
+ comm_cursor = comm_lv0;
+ desc_cursor = desc_lv0;
+
+ addCommand("commands", "");
+ addCommand("time", "");
+ addCommand("staff", "");
+ addCommand("uptime", "");
+ addCommand("gacha", "");
+ addCommand("whatdropsfrom", "");
+ addCommand("whodrops", "");
+ addCommand("dispose", "");
+ addCommand("equiplv", "");
+ addCommand("rates", "");
+ addCommand("online", "");
+ addCommand("gm", "");
+ addCommand("bug", "");
+ // addCommand("points", ""); //Caso for usar o comando @points, a linha ja foi adicionada, basta remover os //
+ addCommand("joinevent", "");
+ addCommand("leaveevent", "");
+ addCommand("bosshp", "");
+ addCommand("ranks", "");
+}
+
+function writeSolaxiaCommands() {
+ writeSolaxiaCommandsLv0(); //Common
+ writeSolaxiaCommandsLv1(); //Donator
+ writeSolaxiaCommandsLv2(); //JrGM
+ writeSolaxiaCommandsLv3(); //GM
+ writeSolaxiaCommandsLv4(); //Developer
+ writeSolaxiaCommandsLv5(); //SuperGM
+ writeSolaxiaCommandsLv6(); //Admin
+}
+
+function start() {
+ status = -1;
+ writeSolaxiaCommands();
+ action(1, 0, 0);
+}
+
+function action(mode, type, selection) {
+ if (mode == -1) {
+ cm.dispose();
+ } else {
+ if (mode == 0 && type > 0) {
+ cm.dispose();
+ return;
+ }
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if (status == 0) {
+ var sendStr = "There are all available commands for you:\r\n\r\n#b";
+ for(var i = 0; i < cm.getPlayer().gmLevel(); i++) {
+ sendStr += "#L" + i + "#" + levels[i] + "#l\r\n";
+ }
+
+ cm.sendSimple(sendStr);
+ } else if(status == 1) {
+ var lvComm, lvDesc;
+
+ if(selection == 0) {
+ lvComm = comm_lv1;
+ lvDesc = desc_lv1;
+ } else if(selection == 1) {
+ lvComm = comm_lv2;
+ lvDesc = desc_lv2;
+ } else if(selection == 2) {
+ lvComm = comm_lv3;
+ lvDesc = desc_lv3;
+ } else if(selection == 3) {
+ lvComm = comm_lv4;
+ lvDesc = desc_lv4;
+ } else if(selection == 4) {
+ lvComm = comm_lv5;
+ lvDesc = desc_lv5;
+ } else {
+ lvComm = comm_lv6;
+ lvDesc = desc_lv6;
+ }
+
+ var sendStr = "The following commands are available for #b" + levels[selection] + "#k:\r\n\r\n";
+ for(var i = 0; i < lvComm.length; i++) {
+ sendStr += " #L" + i + "# " + lvComm[i] + " - " + lvDesc[i];
+ sendStr += "#l\r\n";
+ }
+
+ cm.sendPrev(sendStr);
+ } else {
+ cm.dispose();
+ }
+ }
+}
diff --git a/scripts/portal/timeQuest.js b/scripts/portal/timeQuest.js
index 3f4b357d28..e5644ed6b8 100644
--- a/scripts/portal/timeQuest.js
+++ b/scripts/portal/timeQuest.js
@@ -43,10 +43,13 @@ function enter(pi) {
pi.warp(270040100, "out00");
} else {
if(map > 200) {
+ pi.playerMessage(5, "As the time starts to flow oddly, you are transported back to a safe lane.");
pi.warp(270030000, "in00");
} else if(map > 100) {
+ pi.playerMessage(5, "As the time starts to flow oddly, you are transported back to a safe lane.");
pi.warp(270020000, "in00");
} else {
+ pi.playerMessage(5, "As the time starts to flow oddly, you are transported back to a safe lane.");
pi.warp(270010000, "in00");
}
}
diff --git a/scripts/quest/3507.js b/scripts/quest/3507.js
new file mode 100644
index 0000000000..5aee0c2b0d
--- /dev/null
+++ b/scripts/quest/3507.js
@@ -0,0 +1,10 @@
+function end(mode, type, selection) {
+ if(qm.isQuestCompleted(3523) || qm.isQuestCompleted(3524) || qm.isQuestCompleted(3525) || qm.isQuestCompleted(3526) || qm.isQuestCompleted(3527) || qm.isQuestCompleted(3539)) {
+ qm.completeQuest();
+ qm.sendOk("You are now filled with all of your memories again.. You are now allowed to go to #m270020000#.");
+ } else {
+ qm.sendOk("You have not yet checked with your first teacher about your memories?");
+ }
+
+ qm.dispose();
+}
\ No newline at end of file
diff --git a/scripts/quest/3514.js b/scripts/quest/3514.js
index 70e0a29e17..98ed1d529c 100644
--- a/scripts/quest/3514.js
+++ b/scripts/quest/3514.js
@@ -23,12 +23,46 @@
* The sorcerer who sells emotions
*/
+importPackage(Packages.client);
+
+function start(mode, type, selection) {
+ if(qm.getPlayer().getMeso() >= 1000000) {
+ if(qm.canHold(2022337, 1)) {
+ qm.gainItem(2022337, 1);
+ qm.gainMeso(-1000000);
+
+ //qm.sendOk("Nice doing business with you~~.");
+ qm.startQuest(3514);
+ } else {
+ qm.sendOk("Check out for a slot on your USE inventory first.");
+ }
+ } else {
+ qm.sendOk("Oy, you don't have the money. I charge #r1,000,000 mesos#k for the emotion potion. No money, no deal.");
+ }
+
+ qm.dispose();
+}
+
+function usedPotion(ch) {
+ return ch.getBuffSource(MapleBuffStat.HPREC) == 2022337;
+}
+
function end(mode, type, selection) {
- if(qm.haveItem(2022337)) {
- qm.sendOk("Are you scared to drink the potion? I can assure you it's only a minor #rside effect#k.");
+ if(!usedPotion(qm.getPlayer())) {
+ if(qm.haveItem(2022337)) {
+ qm.sendOk("Are you scared to drink the potion? I can assure you it has only a minor #rside effect#k.");
+ } else {
+ if(qm.canHold(2022337)) {
+ qm.gainItem(2022337, 1);
+ qm.sendOk("Lost it? Luckily for you I managed to recover it back. Take it.");
+ } else {
+ qm.sendOk("Lost it? Luckily for you I managed to recover it back. Make a room to get it.");
+ }
+ }
} else {
- qm.sendOk("It seems the potion worked and your emotions are no longer frozen.");
+ qm.sendOk("It seems the potion worked and your emotions are no longer frozen. And, oh, my... You're ailing bad, #bpurge#k that out quickly.");
+ qm.gainExp(891500 * qm.getPlayer().getExpRate());
qm.completeQuest(3514);
}
- qm.dispose();
+ qm.dispose();
}
\ No newline at end of file
diff --git a/scripts/quest/3523.js b/scripts/quest/3523.js
index 1ed260e28e..5ee5f05777 100644
--- a/scripts/quest/3523.js
+++ b/scripts/quest/3523.js
@@ -25,8 +25,8 @@
function start(mode, type, selection) {
qm.startQuest();
- qm.getPlayer().updateQuestInfo(3507, 1);
+ //qm.getPlayer().updateQuestInfo(3507, "1");
qm.completeQuest();
- qm.sendOk("You have regained your memories and are now allowed to go to #m270020000#.");
+ qm.sendOk("You have regained your memories, talk to #b#p2140001##k to get the pass.");
qm.dispose();
}
\ No newline at end of file
diff --git a/scripts/quest/3524.js b/scripts/quest/3524.js
index c06b98f18e..744ca4f701 100644
--- a/scripts/quest/3524.js
+++ b/scripts/quest/3524.js
@@ -25,8 +25,8 @@
function start(mode, type, selection) {
qm.startQuest();
- qm.getPlayer().updateQuestInfo(3507, 1);
+ //qm.getPlayer().updateQuestInfo(3507, "1");
qm.completeQuest();
- qm.sendOk("You have regained your memories and are now allowed to go to #m270020000#.");
+ qm.sendOk("You have regained your memories, talk to #b#p2140001##k to get the pass.");
qm.dispose();
}
\ No newline at end of file
diff --git a/scripts/quest/3525.js b/scripts/quest/3525.js
index 8d7f0a7d42..76d31b4b92 100644
--- a/scripts/quest/3525.js
+++ b/scripts/quest/3525.js
@@ -25,8 +25,8 @@
function start(mode, type, selection) {
qm.startQuest();
- qm.getPlayer().updateQuestInfo(3507, 1);
+ //qm.getPlayer().updateQuestInfo(3507, "1");
qm.completeQuest();
- qm.sendOk("You have regained your memories and are now allowed to go to #m270020000#.");
+ qm.sendOk("You have regained your memories, talk to #b#p2140001##k to get the pass.");
qm.dispose();
}
\ No newline at end of file
diff --git a/scripts/quest/3526.js b/scripts/quest/3526.js
index 0519eb59f2..295dc91cd5 100644
--- a/scripts/quest/3526.js
+++ b/scripts/quest/3526.js
@@ -25,8 +25,8 @@
function start(mode, type, selection) {
qm.startQuest();
- qm.getPlayer().updateQuestInfo(3507, 1);
+ //qm.getPlayer().updateQuestInfo(3507, "1");
qm.completeQuest();
- qm.sendOk("You have regained your memories and are now allowed to go to #m270020000#.");
+ qm.sendOk("You have regained your memories, talk to #b#p2140001##k to get the pass.");
qm.dispose();
}
\ No newline at end of file
diff --git a/scripts/quest/3527.js b/scripts/quest/3527.js
index e6176463f3..5ba2606c08 100644
--- a/scripts/quest/3527.js
+++ b/scripts/quest/3527.js
@@ -25,8 +25,8 @@
function start(mode, type, selection) {
qm.startQuest();
- qm.getPlayer().updateQuestInfo(3507, 1);
+ //qm.getPlayer().updateQuestInfo(3507, "1");
qm.completeQuest();
- qm.sendOk("You have regained your memories and are now allowed to go to #m270020000#.");
+ qm.sendOk("You have regained your memories, talk to #b#p2140001##k to get the pass.");
qm.dispose();
}
\ No newline at end of file
diff --git a/scripts/quest/3539.js b/scripts/quest/3539.js
index e6176463f3..5ba2606c08 100644
--- a/scripts/quest/3539.js
+++ b/scripts/quest/3539.js
@@ -25,8 +25,8 @@
function start(mode, type, selection) {
qm.startQuest();
- qm.getPlayer().updateQuestInfo(3507, 1);
+ //qm.getPlayer().updateQuestInfo(3507, "1");
qm.completeQuest();
- qm.sendOk("You have regained your memories and are now allowed to go to #m270020000#.");
+ qm.sendOk("You have regained your memories, talk to #b#p2140001##k to get the pass.");
qm.dispose();
}
\ No newline at end of file
diff --git a/scripts/reactor/9102000.js b/scripts/reactor/9102000.js
index 0b7c8a5a8f..1ee5ca9029 100644
--- a/scripts/reactor/9102000.js
+++ b/scripts/reactor/9102000.js
@@ -21,9 +21,9 @@
*/
/**
* @author BubblesDev
- * @purpose Drops Blue Primrose Seeds (4001100)
+ * @purpose Sky-ride to Orbis box
* @map Primrose Hill
*/
function act() {
- rm.dropItems();
+ rm.dropItems(true, 2, 25, 100);
}
\ No newline at end of file
diff --git a/scripts/reactor/9102001.js b/scripts/reactor/9102001.js
index 83819c9b26..11df051e63 100644
--- a/scripts/reactor/9102001.js
+++ b/scripts/reactor/9102001.js
@@ -24,5 +24,5 @@
* Box of Magic Library
*/
function act() {
- rm.dropItems();
+ rm.dropItems(true, 2, 25, 100);
}
\ No newline at end of file
diff --git a/sql/db_database.sql b/sql/db_database.sql
index 3bd4345473..c6532a8622 100644
--- a/sql/db_database.sql
+++ b/sql/db_database.sql
@@ -21060,8 +21060,11 @@ INSERT INTO `shops` (`shopid`, `npcid`) VALUES
(9270057, 9270057),
(9270065, 9270065);
- -- Rudi Shop (Happyville)
-INSERT INTO `shops` (`shopid`, `npcid`) VALUES ( 57, 2002001 );
+ -- missing shops
+INSERT INTO `shops` (`shopid`, `npcid`) VALUES
+( 57, 2002001 ),
+(1052116, 1052116);
+
INSERT INTO `shopitems` ( `shopid`, `itemid`, `price`, `position`) VALUES
( 57, 3990000, 500, 1 ),
( 57, 3990001, 500, 2 ),
@@ -21179,9 +21182,39 @@ INSERT INTO `shopitems` ( `shopid`, `itemid`, `price`, `position`) VALUES
( 57, 3992037, 500, 114),
( 57, 3992038, 500, 115),
--- missing CBD shop data
+-- missing shop data
(9270027, 2022213, 6800, 104),
-(9270027, 2022212, 3200, 108);
+(9270027, 2022212, 3200, 108),
+(1052116, 2070000, 500, 104),
+(1052116, 2022015, 12000, 108),
+(1052116, 2061000, 1, 112),
+(1052116, 2060000, 1, 116),
+(1052116, 2030000, 400, 120),
+(1052116, 2050003, 500, 124),
+(1052116, 2050002, 300, 128),
+(1052116, 2050001, 200, 132),
+(1052116, 2050000, 200, 136),
+(1052116, 2020028, 3000, 140),
+(1052116, 2010004, 310, 144),
+(1052116, 2010003, 100, 148),
+(1052116, 2010001, 106, 152),
+(1052116, 2010002, 50, 156),
+(1052116, 2010000, 30, 160),
+(1052116, 2001002, 4000, 164),
+(1052116, 2001001, 2300, 168),
+(1052116, 2001000, 3200, 172),
+(1052116, 2022000, 1650, 176),
+(1052116, 2022003, 1100, 180),
+(1052116, 2002005, 500, 184),
+(1052116, 2002004, 500, 188),
+(1052116, 2002002, 500, 192),
+(1052116, 2002001, 400, 196),
+(1052116, 2002000, 500, 200),
+(1052116, 2000006, 620, 204),
+(1052116, 2000003, 200, 208),
+(1052116, 2000002, 320, 212),
+(1052116, 2000001, 160, 216),
+(1052116, 2000000, 50, 220);
CREATE TABLE IF NOT EXISTS `skillmacros` (
`id` int(11) NOT NULL AUTO_INCREMENT,
diff --git a/sql/db_drops.sql b/sql/db_drops.sql
index 1c49aee28e..3dca457790 100644
--- a/sql/db_drops.sql
+++ b/sql/db_drops.sql
@@ -15494,7 +15494,6 @@ USE `maplesolaxia`;
(8200002, 2044401, 1, 1, 0, 750),
(8200002, 2290066, 1, 1, 0, 1000),
(8200002, 2330004, 1, 1, 0, 400),
-(8200002, 2386022, 1, 1, 0, 20000),
(8200002, 2290131, 1, 1, 0, 1000),
(8200002, 4004000, 1, 1, 0, 3000),
(8200002, 4010002, 1, 1, 0, 7000),
@@ -19865,11 +19864,9 @@ USE `maplesolaxia`;
(9300270, 2022432, 1, 1, 0, 200000),
(9300270, 2022433, 1, 1, 0, 200000),
(6090002, 4000414, 1, 1, 0, 400000),
-
(9300147, 4001132, 1, 1, 0, 400000),
(9300148, 4001133, 1, 1, 0, 100000);
-
# update quest reactor items
UPDATE reactordrops SET questid=2086 WHERE itemid=4031165;
UPDATE reactordrops SET questid=3407 WHERE itemid=4031141;
@@ -20101,7 +20098,23 @@ USE `maplesolaxia`;
(2612004, 2020007, 3, -1),
(2612004, 2020008, 3, -1),
(2612004, 2020009, 3, -1),
- (2612004, 2020010, 3, -1);
+ (2612004, 2020010, 3, -1),
+ (9102000, 2010000, 2, -1),
+ (9102000, 2010001, 2, -1),
+ (9102000, 2010002, 2, -1),
+ (9102000, 2010003, 2, -1),
+ (9102000, 2010004, 2, -1),
+ (9102000, 2020000, 2, -1),
+ (9102000, 2020001, 2, -1),
+ (9102000, 2020002, 2, -1),
+ (9102001, 2010000, 2, -1),
+ (9102001, 2010001, 2, -1),
+ (9102001, 2010002, 2, -1),
+ (9102001, 2010003, 2, -1),
+ (9102001, 2010004, 2, -1),
+ (9102001, 2020000, 2, -1),
+ (9102001, 2020001, 2, -1),
+ (9102001, 2020002, 2, -1);
# updates info for all cards on monster book
DROP TABLE `monstercarddata`;
diff --git a/sql/db_shopupdate.sql b/sql/db_shopupdate.sql
index 83f9cde4a5..4ec4b74f93 100644
--- a/sql/db_shopupdate.sql
+++ b/sql/db_shopupdate.sql
@@ -101,12 +101,17 @@ INSERT IGNORE INTO `shopitems` (`shopid`, `itemid`, `price`, `pitch`, `position`
(9201020, 3010014, 15000, 0, 100),
(1031100, 3010015, 20000, 0, 100),
(1081000, 3010013, 100000, 0, 100),
-(9110002, 3010019, 200000, 0, 80),
+(9110002, 3010019, 770000, 0, 80),
(9110002, 3010017, 1000000, 0, 84),
(9110002, 3010016, 1000000, 0, 88),
(9110002, 3010008, 1000000, 0, 92),
(9110002, 3010007, 1000000, 0, 96),
-(9110002, 3011000, 4200000, 0, 100);
+(9110002, 3011000, 4200000, 0, 100),
+(2100004, 3010064, 3000000, 0, 100),
+(1052116, 3010098, 7700000, 0, 92),
+(1052116, 3010063, 1400000, 0, 96),
+(1052116, 3010061, 250000, 0, 100),
+(2030009, 3010099, 10000000, 0, 100);
# adding antibanish scrolls
INSERT IGNORE INTO `shopitems` (`shopid`, `itemid`, `price`, `pitch`, `position`) VALUES
diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java
index 899a844d44..bbc48ca691 100644
--- a/src/client/MapleCharacter.java
+++ b/src/client/MapleCharacter.java
@@ -1464,14 +1464,31 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
if (id / 1000000 == 2) {
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
if (ii.isConsumeOnPickup(id)) {
- if (id > 2022430 && id < 2022434) {
- for (MapleCharacter mc : c.getPlayer().getMap().getCharacters()) {
- if (mc.getParty() == c.getPlayer().getParty()) {
- ii.getItemEffect(id).applyTo(mc);
+ if (ii.isPartyItem(id)) {
+ List pchr = c.getPlayer().getPartyMembersOnSameMap();
+
+ if(!ii.isPartyAllcure(id)) {
+ if(!pchr.isEmpty()) {
+ for (MapleCharacter mc : pchr) {
+ ii.getItemEffect(id).applyTo(mc);
+ mc.checkBerserk(mc.isHidden());
+ }
+ } else {
+ ii.getItemEffect(id).applyTo(c.getPlayer());
+ c.getPlayer().checkBerserk(c.getPlayer().isHidden());
+ }
+ } else {
+ if(!pchr.isEmpty()) {
+ for (MapleCharacter mc : pchr) {
+ mc.dispelDebuffs();
+ }
+ } else {
+ c.getPlayer().dispelDebuffs();
}
}
} else {
ii.getItemEffect(id).applyTo(c.getPlayer());
+ c.getPlayer().checkBerserk(c.getPlayer().isHidden());
}
return true;
}
@@ -1940,7 +1957,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
extraRecoveryTask = null;
}
- if(extraHpRec > 0 || extraMpRec > 0) {
+ if(extraHpRec != 0 || extraMpRec != 0) {
startExtraTaskInternal(extraHpRec, extraMpRec, extraRecInterval);
}
}
@@ -3167,6 +3184,19 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
return list;
}
+ public List getPartyMembersOnSameMap() {
+ List list = new LinkedList<>();
+ int thisMapHash = this.getMap().hashCode();
+
+ if(party != null) {
+ for(MaplePartyCharacter partyMembers: party.getMembers()) {
+ if(partyMembers.getPlayer().getMap().hashCode() == thisMapHash) list.add(partyMembers.getPlayer());
+ }
+ }
+
+ return list;
+ }
+
public boolean isPartyMember(MapleCharacter chr) {
for(MapleCharacter mpcu: getPartyMembers()) {
if(mpcu.getId() == chr.getId()) {
@@ -3188,6 +3218,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
closeMiniGame();
closeHiredMerchant(false);
closePlayerMessenger();
+
+ client.closePlayerScriptInteractions();
}
public void closeNpcShop() {
@@ -3595,11 +3627,13 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
}
private void guildUpdate() {
+ mgc.setLevel(level);
+ mgc.setJobId(job.getId());
+
if (this.guildid < 1) {
return;
}
- mgc.setLevel(level);
- mgc.setJobId(job.getId());
+
try {
Server.getInstance().memberLevelJobUpdate(this.mgc);
//Server.getInstance().getGuild(guildid, world, mgc).gainGP(40);
@@ -4955,7 +4989,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showRecovery(id, heal), false);
}
}, healInterval, healInterval);
- } else if (effect.isDojoBuff()) {
+ } else if (effect.isDojoBuff() || effect.getSourceId() == 2022337) {
boolean isRecoveryBuff = false;
if(effect.getHpRRate() > 0) {
extraHpRec = effect.getHpR();
@@ -4968,7 +5002,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
extraRecInterval = effect.getMpRRate();
isRecoveryBuff = true;
}
-
+
if(isRecoveryBuff) {
stopExtraTask();
startExtraTask(extraHpRec, extraMpRec, extraRecInterval); // HP & MP sharing the same task holder
diff --git a/src/client/MapleClient.java b/src/client/MapleClient.java
index 5b316c2782..b45bce0ef3 100644
--- a/src/client/MapleClient.java
+++ b/src/client/MapleClient.java
@@ -732,8 +732,6 @@ public class MapleClient {
player.cancelAllDebuffs();
player.closePlayerInteractions();
-
- NPCScriptManager.getInstance().dispose(this);
QuestScriptManager.getInstance().dispose(this);
if (player.getEventInstance() != null) {
@@ -764,6 +762,8 @@ public class MapleClient {
final MapleMessengerCharacter chrm = new MapleMessengerCharacter(player, 0);
final MapleGuildCharacter chrg = player.getMGC();
final MapleGuild guild = player.getGuild();
+
+ player.cancelMagicDoor();
if (channel == -1 || shutdown) {
if(chrg != null) chrg.setCharacter(null);
@@ -1254,4 +1254,9 @@ public class MapleClient {
public void removeClickedNPC(){
lastNpcClick = 0;
}
+
+ public void closePlayerScriptInteractions() {
+ this.removeClickedNPC();
+ NPCScriptManager.getInstance().dispose(this);
+ }
}
diff --git a/src/client/command/Commands.java b/src/client/command/Commands.java
index 63da3ac9a8..b3e20df509 100644
--- a/src/client/command/Commands.java
+++ b/src/client/command/Commands.java
@@ -338,9 +338,8 @@ public class Commands {
switch(sub[0]) {
case "help":
case "commands":
- case "playercommands":
- player.setCS(true);
- c.getAbstractPlayerInteraction().openNpc(9201143);
+ case "playercommands":
+ c.getAbstractPlayerInteraction().openNpc(9201143, "commands");
break;
case "time":
@@ -1095,7 +1094,14 @@ public class Commands {
if (ItemConstants.isPet(itemId)) {
petid = MaplePet.createPet(itemId);
}
- MapleInventoryManipulator.addById(c, itemId, quantity, player.getName(), petid, -1);
+
+ byte flag = 0;
+ if(player.gmLevel() < 3) {
+ flag |= ItemConstants.ACCOUNT_SHARING;
+ flag |= ItemConstants.UNTRADEABLE;
+ }
+
+ MapleInventoryManipulator.addById(c, itemId, quantity, player.getName(), petid, flag, -1);
} else {
Item toDrop;
if (MapleItemInformationProvider.getInstance().getInventoryType(itemId) == MapleInventoryType.EQUIP) {
@@ -1103,6 +1109,16 @@ public class Commands {
} else {
toDrop = new Item(itemId, (short) 0, quantity);
}
+
+ toDrop.setOwner(player.getName());
+ if(player.gmLevel() < 3) {
+ byte b = toDrop.getFlag();
+ b |= ItemConstants.ACCOUNT_SHARING;
+ b |= ItemConstants.UNTRADEABLE;
+
+ toDrop.setFlag(b);
+ }
+
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), toDrop, c.getPlayer().getPosition(), true, true);
}
break;
@@ -1294,6 +1310,19 @@ public class Commands {
player.dropMessage(sub[1] + " not found on this channel! Make sure your target is logged on and on the same channel as yours.");
}
break;
+
+ case "job":
+ if (sub.length == 2) {
+ player.changeJob(MapleJob.getById(Integer.parseInt(sub[1])));
+ player.equipChanged();
+ } else if (sub.length == 3) {
+ victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
+ victim.changeJob(MapleJob.getById(Integer.parseInt(sub[2])));
+ player.equipChanged();
+ } else {
+ player.message("Syntax: !job ");
+ }
+ break;
case "unbug":
c.getPlayer().getMap().broadcastMessage(MaplePacketCreator.enableActions());
@@ -1407,6 +1436,8 @@ public class Commands {
victim.setMp(statUpdate);
victim.updateSingleStat(MapleStat.HP, statUpdate);
victim.updateSingleStat(MapleStat.MP, statUpdate);
+
+ victim.checkBerserk(victim.isHidden());
break;
case "music":
@@ -1823,6 +1854,23 @@ public class Commands {
player.yellowMessage("Done.");
break;
+ case "npc":
+ if (sub.length < 2){
+ player.yellowMessage("Syntax: !npc ");
+ break;
+ }
+ MapleNPC npc = MapleLifeFactory.getNPC(Integer.parseInt(sub[1]));
+ if (npc != null) {
+ npc.setPosition(player.getPosition());
+ npc.setCy(player.getPosition().y);
+ npc.setRx0(player.getPosition().x + 50);
+ npc.setRx1(player.getPosition().x - 50);
+ npc.setFh(player.getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId());
+ player.getMap().addMapObject(npc);
+ player.getMap().broadcastMessage(MaplePacketCreator.spawnNPC(npc));
+ }
+ break;
+
default:
return false;
}
@@ -1854,6 +1902,7 @@ public class Commands {
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
Item it = ii.getEquipById(itemid);
+ it.setOwner(player.getName());
MapleInventoryType type = ii.getInventoryType(itemid);
if (type.equals(MapleInventoryType.EQUIP)) {
hardsetItemStats((Equip) it, multiply);
@@ -1909,31 +1958,35 @@ public class Commands {
if (sub.length < 2){
player.yellowMessage("Syntax: !exprate ");
break;
- }
+ }
c.getWorldServer().setExpRate(Integer.parseInt(sub[1]));
+ c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Exp Rate has been changed to " + sub[1] + "x."));
break;
case "mesorate":
if (sub.length < 2){
player.yellowMessage("Syntax: !mesorate ");
break;
- }
+ }
c.getWorldServer().setMesoRate(Integer.parseInt(sub[1]));
+ c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Meso Rate has been changed to " + sub[1] + "x."));
break;
case "droprate":
if (sub.length < 2){
player.yellowMessage("Syntax: !droprate ");
break;
- }
+ }
c.getWorldServer().setDropRate(Integer.parseInt(sub[1]));
+ c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Drop Rate has been changed to " + sub[1] + "x."));
break;
case "bossdroprate":
if (sub.length < 2){
player.yellowMessage("Syntax: !bossdroprate ");
break;
- }
+ }
c.getWorldServer().setBossDropRate(Integer.parseInt(sub[1]));
+ c.getWorldServer().broadcastPacket(MaplePacketCreator.serverNotice(6, "[Rate] Boss Drop Rate has been changed to " + sub[1] + "x."));
break;
case "itemvac":
@@ -2006,18 +2059,21 @@ public class Commands {
break;
}
- if (sub.length == 2) {
- player.setFace(Integer.parseInt(sub[1]));
- player.equipChanged();
- } else {
- victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
- if(victim == null) {
- player.yellowMessage("Player '" + sub[1] + "' has not been found on this channel.");
- break;
+ try {
+ if (sub.length == 2) {
+ player.setFace(Integer.parseInt(sub[1]));
+ player.equipChanged();
+ } else {
+ victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
+ if(victim == null) {
+ player.yellowMessage("Player '" + sub[1] + "' has not been found on this channel.");
+ break;
+ }
+ victim.setFace(Integer.parseInt(sub[2]));
+ victim.equipChanged();
}
- victim.setFace(Integer.parseInt(sub[2]));
- victim.equipChanged();
- }
+ } catch(Exception e) {}
+
break;
case "hair":
@@ -2026,18 +2082,26 @@ public class Commands {
break;
}
- if (sub.length == 2) {
- player.setHair(Integer.parseInt(sub[1]));
- player.equipChanged();
- } else {
- victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
- if(victim == null) {
- player.yellowMessage("Player '" + sub[1] + "' has not been found on this channel.");
- break;
+ try {
+ if (sub.length == 2) {
+ player.setHair(Integer.parseInt(sub[1]));
+ player.equipChanged();
+
+ player.getMap().removePlayer(player);
+ player.getMap().addPlayer(player);
+ } else {
+ victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
+ if(victim == null) {
+ player.yellowMessage("Player '" + sub[1] + "' has not been found on this channel.");
+ break;
+ }
+ victim.setHair(Integer.parseInt(sub[2]));
+ victim.equipChanged();
+
+ victim.getMap().removePlayer(victim);
+ victim.getMap().addPlayer(victim);
}
- victim.setHair(Integer.parseInt(sub[2]));
- victim.equipChanged();
- }
+ } catch(Exception e) {}
break;
default:
@@ -2231,36 +2295,6 @@ public class Commands {
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
player.message(victim.getName() + "'s account name is " + victim.getClient().getAccountName() + ".");
break;
-
- case "npc":
- if (sub.length < 2){
- player.yellowMessage("Syntax: !npc ");
- break;
- }
- MapleNPC npc = MapleLifeFactory.getNPC(Integer.parseInt(sub[1]));
- if (npc != null) {
- npc.setPosition(player.getPosition());
- npc.setCy(player.getPosition().y);
- npc.setRx0(player.getPosition().x + 50);
- npc.setRx1(player.getPosition().x - 50);
- npc.setFh(player.getMap().getFootholds().findBelow(c.getPlayer().getPosition()).getId());
- player.getMap().addMapObject(npc);
- player.getMap().broadcastMessage(MaplePacketCreator.spawnNPC(npc));
- }
- break;
-
- case "job":
- if (sub.length == 2) {
- player.changeJob(MapleJob.getById(Integer.parseInt(sub[1])));
- player.equipChanged();
- } else if (sub.length == 3) {
- victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
- victim.changeJob(MapleJob.getById(Integer.parseInt(sub[2])));
- player.equipChanged();
- } else {
- player.message("Syntax: !job ");
- }
- break;
case "shutdown":
case "shutdownnow":
diff --git a/src/client/inventory/Equip.java b/src/client/inventory/Equip.java
index e3e01426a8..488405783d 100644
--- a/src/client/inventory/Equip.java
+++ b/src/client/inventory/Equip.java
@@ -26,8 +26,6 @@ import constants.ServerConstants;
import constants.ExpTable;
import java.util.LinkedList;
import java.util.List;
-import java.util.HashMap;
-import java.util.Map;
import server.MapleItemInformationProvider;
import tools.MaplePacketCreator;
import tools.Pair;
@@ -376,6 +374,7 @@ public class Equip extends Item {
boolean gotVicious = false, gotSlot = false;
String lvupStr = "'" + MapleItemInformationProvider.getInstance().getName(this.getItemId()) + "' is now level " + itemLevel + "! ";
+ String showStr = "#e'" + MapleItemInformationProvider.getInstance().getName(this.getItemId()) + "'#b is now #elevel #r" + itemLevel + "#k#b!";
Integer statUp, maxStat = ServerConstants.MAX_EQUIPMNT_STAT;
for (Pair stat : stats) {
@@ -462,9 +461,17 @@ public class Equip extends Item {
}
}
+ if(gotVicious) {
+ //c.getPlayer().dropMessage(6, "A new Vicious Hammer opportunity has been found on the '" + MapleItemInformationProvider.getInstance().getName(getItemId()) + "'!");
+ lvupStr += "+VICIOUS ";
+ }
+ if(gotSlot) {
+ //c.getPlayer().dropMessage(6, "A new upgrade slot has been found on the '" + MapleItemInformationProvider.getInstance().getName(getItemId()) + "'!");
+ lvupStr += "+UPGSLOT ";
+ }
+
+ showLevelupMessage(showStr, c); // thx to polaris devs !
c.getPlayer().dropMessage(6, lvupStr);
- if(gotVicious) c.getPlayer().dropMessage(6, "A new Vicious Hammer opportunity has been found on the '" + MapleItemInformationProvider.getInstance().getName(getItemId()) + "'!");
- if(gotSlot) c.getPlayer().dropMessage(6, "A new upgrade slot has been found on the '" + MapleItemInformationProvider.getInstance().getName(getItemId()) + "'!");
c.announce(MaplePacketCreator.showEquipmentLevelUp());
c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.showForeignEffect(c.getPlayer().getId(), 15));
@@ -476,11 +483,16 @@ public class Equip extends Item {
}
private double normalizedMasteryExp(int reqLevel) {
- // Trivia: at equips requiring level 200, one gaining MAX INTEGER exp points will have their equip
- // exp gain normalized to roughly 5.752 points (1/3 of the needed to pass the equipment to lvl 2)!
- // Good thing there is not much lvl 140+ equipments in the game!
+ // Conversion factor between mob exp and equip exp gain. Through many calculations, the expected for equipment levelup
+ // from level 1 to 2 is killing about 100~200 mobs of the same level range, on a 1x EXP rate scenario.
- return Math.max((2622.71 * Math.exp(reqLevel * 0.0733649)) - 6000.0, 15);
+ if(reqLevel >= 78) {
+ return Math.max(ServerConstants.EQUIP_EXPERIENCE_MOD * (10413.648 * Math.exp(reqLevel * 0.03275)), 15);
+ } else if(reqLevel >= 38) {
+ return Math.max(ServerConstants.EQUIP_EXPERIENCE_MOD * ( 4985.818 * Math.exp(reqLevel * 0.02007)), 15);
+ } else {
+ return Math.max(ServerConstants.EQUIP_EXPERIENCE_MOD * ( 248.219 * Math.exp(reqLevel * 0.11093)), 15);
+ }
}
public void gainItemExp(MapleClient c, int gain) { // Ronan's Equip Exp gain method
@@ -497,7 +509,7 @@ public class Equip extends Item {
itemExp += baseExpGain;
int expNeeded = ExpTable.getEquipExpNeededForLevel(itemLevel);
- if(ServerConstants.USE_DEBUG_SHOW_INFO_EQPEXP) System.out.println("'" + ii.getName(this.getItemId()) + "' -> EXP Gain: " + gain + " Mastery: " + masteryModifier + " Base gain: " + baseExpGain + " exp: " + itemExp + " / " + expNeeded);
+ if(ServerConstants.USE_DEBUG_SHOW_INFO_EQPEXP) System.out.println("'" + ii.getName(this.getItemId()) + "' -> EXP Gain: " + gain + " Mastery: " + masteryModifier + " Base gain: " + baseExpGain + " exp: " + itemExp + " / " + expNeeded + ", Kills TNL: " + expNeeded / (baseExpGain / c.getPlayer().getExpRate()));
if (itemExp >= expNeeded) {
while(itemExp >= expNeeded) {
@@ -540,6 +552,11 @@ public class Equip extends Item {
c.getPlayer().dropMessage(5, "'" + eqpName + "' -> Level: " + itemLevel + eqpInfo);
}
+ public final void showLevelupMessage(String msg, MapleClient c) {
+ c.announce(MaplePacketCreator.sendHint(msg, 500, 10));
+ c.announce(MaplePacketCreator.enableActions());
+ }
+
public void setItemExp(int exp) {
this.itemExp = exp;
}
diff --git a/src/constants/ServerConstants.java b/src/constants/ServerConstants.java
index a81754ab33..1604b7d65a 100644
--- a/src/constants/ServerConstants.java
+++ b/src/constants/ServerConstants.java
@@ -36,7 +36,7 @@ public class ServerConstants {
public static final boolean USE_MAXRANGE = true; //Will send and receive packets from all events of a map, rather than those of only view range.
public static final boolean USE_DEBUG = true; //Will enable some text prints on the client, oriented for debugging purposes.
public static final boolean USE_DEBUG_SHOW_RCVD_PACKET = false; //Prints on the cmd all received packet ids.
- public static final boolean USE_DEBUG_SHOW_INFO_EQPEXP = false; //Prints on the cmd all equip exp gain info.
+ public static final boolean USE_DEBUG_SHOW_INFO_EQPEXP = true; //Prints on the cmd all equip exp gain info.
public static final boolean USE_MTS = false;
public static final boolean USE_FAMILY_SYSTEM = false;
public static final boolean USE_DUEY = true;
@@ -49,7 +49,7 @@ public class ServerConstants {
public static final boolean USE_PERFECT_PITCH = true; //For lvl 30 or above, each lvlup player gains 1 perfect pitch.
public static final boolean USE_PERMISSIVE_BUFFS = false; //WARNING: Allows players that does not have increased certain buff-type skills to use it's effect. Used mainly on buff-cast commands, however making this active may generate a source for possible client-edited exploits.
public static final boolean USE_ENFORCE_MDOOR_POSITION = true; //Forces mystic door to be spawned near spawnpoints. (since things bugs out other way, and this helps players locate the door faster)
-
+ public static final boolean USE_ERASE_UNTRADEABLE_DROP = true; //Forces flagged untradeable items to disappear when dropped.
public static final int MAX_AP = 20000; //Max AP allotted on the auto-assigner.
public static final int MAX_EVENT_LEVELS = 8; //Event has different levels of rewarding system.
@@ -100,6 +100,7 @@ public class ServerConstants {
public static final int DROP_RATE = 10;
public static final int BOSS_DROP_RATE = 20;
public static final int PARTY_EXPERIENCE_MOD = 1; //Change for event stuff.
+ public static final double EQUIP_EXPERIENCE_MOD = 10.0; //Rate for equipment exp needed, grows linearly. Set 1.0 for default (about 100~200 same-level range mobs killed to pass equip from level 1 to 2).
public static final double PQ_BONUS_EXP_MOD = 0.5;
//Event End Timestamp
diff --git a/src/net/server/channel/handlers/GeneralChatHandler.java b/src/net/server/channel/handlers/GeneralChatHandler.java
index 584447a061..3c5bbfa240 100644
--- a/src/net/server/channel/handlers/GeneralChatHandler.java
+++ b/src/net/server/channel/handlers/GeneralChatHandler.java
@@ -47,7 +47,7 @@ public final class GeneralChatHandler extends net.AbstractMaplePacketHandler {
return;
}
char heading = s.charAt(0);
- if (heading == '!' || heading == '@') { // client seems to not send command with '/' heading to the server, if not a GM account
+ if (heading == '/' || heading == '!' || heading == '@') { // client seems to not send command with '/' heading to the server, if not a GM account
String[] sp = s.split(" ");
sp[0] = sp[0].toLowerCase().substring(1);
diff --git a/src/net/server/channel/handlers/UseItemHandler.java b/src/net/server/channel/handlers/UseItemHandler.java
index d6b18271ab..e7121371a0 100644
--- a/src/net/server/channel/handlers/UseItemHandler.java
+++ b/src/net/server/channel/handlers/UseItemHandler.java
@@ -47,11 +47,11 @@ public final class UseItemHandler extends AbstractMaplePacketHandler {
int itemId = slea.readInt();
Item toUse = c.getPlayer().getInventory(MapleInventoryType.USE).getItem(slot);
if (toUse != null && toUse.getQuantity() > 0 && toUse.getItemId() == itemId) {
- if (itemId == 2022178 || itemId == 2022433 || itemId == 2050004) {
+ if (itemId == 2022178 || itemId == 2050004) {
c.getPlayer().dispelDebuffs();
remove(c, slot);
return;
- }
+ }
else if (itemId == 2050001) {
c.getPlayer().dispelDebuff(MapleDisease.DARKNESS);
remove(c, slot);
diff --git a/src/scripting/event/EventInstanceManager.java b/src/scripting/event/EventInstanceManager.java
index fadeb89107..5a0a265ed6 100644
--- a/src/scripting/event/EventInstanceManager.java
+++ b/src/scripting/event/EventInstanceManager.java
@@ -414,12 +414,10 @@ public class EventInstanceManager {
}
}
- public void changedMap(MapleCharacter chr, int mapId) {
+ public void changedMap(MapleCharacter chr, int mapId) { // optional
try {
em.getIv().invokeFunction("changedMap", this, chr, mapId);
- } catch (ScriptException | NoSuchMethodException ex) {
- ex.printStackTrace();
- }
+ } catch (ScriptException | NoSuchMethodException ex) {}
}
public void changedLeader(MapleCharacter ldr) {
diff --git a/src/scripting/event/EventManager.java b/src/scripting/event/EventManager.java
index d3c3e11462..3c1bb914e7 100644
--- a/src/scripting/event/EventManager.java
+++ b/src/scripting/event/EventManager.java
@@ -320,7 +320,7 @@ public class EventManager {
}
public boolean startInstance(int lobbyId, MapleCharacter leader) {
- return startInstance(lobbyId, null, leader, 1);
+ return startInstance(lobbyId, leader, leader, 1);
}
public boolean startInstance(int lobbyId, MapleCharacter chr, MapleCharacter leader, int difficulty) {
diff --git a/src/scripting/reactor/ReactorActionManager.java b/src/scripting/reactor/ReactorActionManager.java
index 0578e5cdd7..c8ef2172b3 100644
--- a/src/scripting/reactor/ReactorActionManager.java
+++ b/src/scripting/reactor/ReactorActionManager.java
@@ -119,7 +119,8 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
} else {
drop = ii.randomizeStats((Equip) ii.getEquipById(d.itemId));
}
- reactor.getMap().spawnItemDrop(reactor, getPlayer(), drop, reactor.getMap().calcDropPos(dropPos, reactor.getPosition()), (byte)(getPlayer().getParty() != null ? 1 : 0), false);
+
+ reactor.getMap().dropFromReactor(getPlayer(), reactor, drop, dropPos, (short)d.questid);
}
dropPos.x += 25;
}
diff --git a/src/server/MapleInventoryManipulator.java b/src/server/MapleInventoryManipulator.java
index 3cce2a5076..c5ac8c65a4 100644
--- a/src/server/MapleInventoryManipulator.java
+++ b/src/server/MapleInventoryManipulator.java
@@ -29,6 +29,7 @@ import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType;
import client.inventory.ModifyInventory;
import constants.ItemConstants;
+import constants.ServerConstants;
import java.awt.Point;
import java.util.ArrayList;
@@ -549,12 +550,12 @@ public class MapleInventoryManipulator {
if (weddingRing) {
c.getPlayer().getMap().disappearingItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos);
} else if (c.getPlayer().getMap().getEverlast()) {
- if (ii.isDropRestricted(target.getItemId()) || MapleItemInformationProvider.getInstance().isCash(target.getItemId())) {
+ if (ii.isDropRestricted(target.getItemId()) || ii.isCash(target.getItemId()) || isDroppedItemRestricted(target)) {
c.getPlayer().getMap().disappearingItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos);
} else {
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos, true, true);
}
- } else if (ii.isDropRestricted(target.getItemId()) || MapleItemInformationProvider.getInstance().isCash(target.getItemId())) {
+ } else if (ii.isDropRestricted(target.getItemId()) || ii.isCash(target.getItemId()) || isDroppedItemRestricted(target)) {
c.getPlayer().getMap().disappearingItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos);
} else {
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos, true, true);
@@ -566,12 +567,12 @@ public class MapleInventoryManipulator {
c.getPlayer().equipChanged();
}
if (c.getPlayer().getMap().getEverlast()) {
- if (ii.isDropRestricted(itemId) || ii.isCash(itemId)) {
+ if (ii.isDropRestricted(itemId) || ii.isCash(itemId) || isDroppedItemRestricted(source)) {
c.getPlayer().getMap().disappearingItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos);
} else {
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos, true, true);
}
- } else if (ii.isDropRestricted(itemId) || ii.isCash(itemId)) {
+ } else if (ii.isDropRestricted(itemId) || ii.isCash(itemId) || isDroppedItemRestricted(source)) {
c.getPlayer().getMap().disappearingItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos);
} else {
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos, true, true);
@@ -579,6 +580,10 @@ public class MapleInventoryManipulator {
}
}
+ private static boolean isDroppedItemRestricted(Item it) {
+ return ServerConstants.USE_ERASE_UNTRADEABLE_DROP && ((it.getFlag() & ItemConstants.UNTRADEABLE) == ItemConstants.UNTRADEABLE);
+ }
+
private static boolean isOverall(int itemId) {
return itemId / 10000 == 105;
}
diff --git a/src/server/MapleItemInformationProvider.java b/src/server/MapleItemInformationProvider.java
index ae338c88fc..98ae6ff64d 100644
--- a/src/server/MapleItemInformationProvider.java
+++ b/src/server/MapleItemInformationProvider.java
@@ -1312,6 +1312,14 @@ public class MapleItemInformationProvider {
int itemType = itemId / 1000;
return itemType == 5211 || itemType == 5360;
}
+
+ public boolean isPartyItem(int itemId) {
+ return itemId >= 2022430 && itemId <= 2022433;
+ }
+
+ public boolean isPartyAllcure(int itemId) {
+ return itemId == 2022433;
+ }
public Collection- canWearEquipment(MapleCharacter chr, Collection
- items) {
MapleInventory inv = chr.getInventory(MapleInventoryType.EQUIPPED);
diff --git a/src/server/MapleStatEffect.java b/src/server/MapleStatEffect.java
index b0f75e03eb..a68afe1db0 100644
--- a/src/server/MapleStatEffect.java
+++ b/src/server/MapleStatEffect.java
@@ -228,10 +228,10 @@ public class MapleStatEffect {
addBuffStatPairToListIfNotZero(statups, MapleBuffStat.BOOSTER, Integer.valueOf(ret.booster));
if(!skill) {
- if(isDojoBuff(sourceid)) {
+ if(isDojoBuff(sourceid) || sourceid == 2022337) {
ret.mhpR = (byte) MapleDataTool.getInt("mhpR", source, 0);
ret.mhpRRate = (short) (MapleDataTool.getInt("mhpRRate", source, 0) * 100);
- ret.mmpR = (byte) MapleDataTool.getInt("mmpRRate", source, 0);
+ ret.mmpR = (byte) MapleDataTool.getInt("mmpR", source, 0);
ret.mmpRRate = (short) (MapleDataTool.getInt("mmpRRate", source, 0) * 100);
addBuffStatPairToListIfNotZero(statups, MapleBuffStat.HPREC, Integer.valueOf(ret.mhpR));
diff --git a/src/server/maps/MapleDoor.java b/src/server/maps/MapleDoor.java
index 85e405abe8..26cfffafc2 100644
--- a/src/server/maps/MapleDoor.java
+++ b/src/server/maps/MapleDoor.java
@@ -77,7 +77,11 @@ public class MapleDoor {
try {
return town.getAvailableDoorPortals().get(slot);
} catch (IndexOutOfBoundsException e) {
- return town.getAvailableDoorPortals().get(0);
+ try {
+ return town.getAvailableDoorPortals().get(0);
+ } catch (IndexOutOfBoundsException ex) {
+ return null;
+ }
}
}
diff --git a/src/server/maps/MapleMap.java b/src/server/maps/MapleMap.java
index 155f919934..e9bed0a50a 100644
--- a/src/server/maps/MapleMap.java
+++ b/src/server/maps/MapleMap.java
@@ -560,6 +560,10 @@ public class MapleMap {
}
}
}
+
+ public void dropFromReactor(final MapleCharacter chr, final MapleReactor reactor, Item drop, Point dropPos, short questid) {
+ spawnDrop(drop, this.calcDropPos(dropPos, reactor.getPosition()), reactor, chr, (byte)(chr.getParty() != null ? 1 : 0), questid);
+ }
private void stopItemMonitor() {
chrWLock.lock();
@@ -653,14 +657,14 @@ public class MapleMap {
droppedItemCount.decrementAndGet();
}
- private void spawnDrop(final Item idrop, final Point dropPos, final MapleMonster mob, final MapleCharacter chr, final byte droptype, final short questid) {
- final MapleMapItem mdrop = new MapleMapItem(idrop, dropPos, mob, chr, droptype, false, questid);
+ private void spawnDrop(final Item idrop, final Point dropPos, final MapleMapObject dropper, final MapleCharacter chr, final byte droptype, final short questid) {
+ final MapleMapItem mdrop = new MapleMapItem(idrop, dropPos, dropper, chr, droptype, false, questid);
mdrop.setDropTime(System.currentTimeMillis());
spawnAndAddRangedMapObject(mdrop, new DelayedPacketCreation() {
@Override
public void sendPackets(MapleClient c) {
if (questid <= 0 || (c.getPlayer().getQuestStatus(questid) == 1 && c.getPlayer().needQuestItem(questid, idrop.getItemId()))) {
- c.announce(MaplePacketCreator.dropItemFromMapObject(mdrop, mob.getPosition(), dropPos, (byte) 1));
+ c.announce(MaplePacketCreator.dropItemFromMapObject(mdrop, dropper.getPosition(), dropPos, (byte) 1));
}
}
}, null);
@@ -2591,37 +2595,39 @@ public class MapleMap {
public void run() {
reactor.lockReactor();
try {
- if (reactor.getShouldCollect() == true && mapitem != null && mapitem == getMapObject(mapitem.getObjectId())) {
- mapitem.lockItem();
- try {
- TimerManager tMan = TimerManager.getInstance();
- if (mapitem.isPickedUp()) {
- return;
- }
+ if(reactor.getReactorType() == 100) {
+ if (reactor.getShouldCollect() == true && mapitem != null && mapitem == getMapObject(mapitem.getObjectId())) {
+ mapitem.lockItem();
+ try {
+ TimerManager tMan = TimerManager.getInstance();
+ if (mapitem.isPickedUp()) {
+ return;
+ }
- reactor.setShouldCollect(false);
- MapleMap.this.broadcastMessage(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 0, 0), mapitem.getPosition());
- MapleMap.this.removeMapObject(mapitem);
- reactor.hitReactor(c);
+ reactor.setShouldCollect(false);
+ MapleMap.this.broadcastMessage(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 0, 0), mapitem.getPosition());
+ MapleMap.this.removeMapObject(mapitem);
+ reactor.hitReactor(c);
- if (reactor.getDelay() > 0) {
- tMan.schedule(new Runnable() {
- @Override
- public void run() {
- reactor.lockReactor();
- try {
- reactor.setState((byte) 0);
- reactor.resetReactorActions();
+ if (reactor.getDelay() > 0) {
+ tMan.schedule(new Runnable() {
+ @Override
+ public void run() {
+ reactor.lockReactor();
+ try {
+ reactor.setState((byte) 0);
+ reactor.resetReactorActions();
- broadcastMessage(MaplePacketCreator.triggerReactor(reactor, 0));
- } finally {
- reactor.unlockReactor();
+ broadcastMessage(MaplePacketCreator.triggerReactor(reactor, 0));
+ } finally {
+ reactor.unlockReactor();
+ }
}
- }
- }, reactor.getDelay());
+ }, reactor.getDelay());
+ }
+ } finally {
+ mapitem.unlockItem();
}
- } finally {
- mapitem.unlockItem();
}
}
} finally {
diff --git a/src/server/maps/MapleMapFactory.java b/src/server/maps/MapleMapFactory.java
index ca1ab719f0..43d8178285 100644
--- a/src/server/maps/MapleMapFactory.java
+++ b/src/server/maps/MapleMapFactory.java
@@ -271,6 +271,8 @@ public class MapleMapFactory {
private AbstractLoadedMapleLife loadLife(MapleData life, String id, String type) {
AbstractLoadedMapleLife myLife = MapleLifeFactory.getLife(Integer.parseInt(id), type);
+ if(life == null) System.out.println("lf null");
+ if(myLife == null) System.out.println("mlf null");
myLife.setCy(MapleDataTool.getInt(life.getChildByPath("cy")));
MapleData dF = life.getChildByPath("f");
if (dF != null) {
@@ -293,11 +295,10 @@ public class MapleMapFactory {
MapleReactor myReactor = new MapleReactor(MapleReactorFactory.getReactor(Integer.parseInt(id)), Integer.parseInt(id));
int x = MapleDataTool.getInt(reactor.getChildByPath("x"));
int y = MapleDataTool.getInt(reactor.getChildByPath("y"));
- myReactor.setName(MapleDataTool.getString(reactor.getChildByPath("name"), ""));
myReactor.setPosition(new Point(x, y));
myReactor.setDelay(MapleDataTool.getInt(reactor.getChildByPath("reactorTime")) * 1000);
myReactor.setState((byte) 0);
-
+ myReactor.setName(MapleDataTool.getString(reactor.getChildByPath("name"), ""));
myReactor.resetReactorActions();
return myReactor;
}
diff --git a/wz/Item.wz/Consume/0202.img.xml b/wz/Item.wz/Consume/0202.img.xml
index 5c7ed9238a..fbef1abeb8 100644
--- a/wz/Item.wz/Consume/0202.img.xml
+++ b/wz/Item.wz/Consume/0202.img.xml
@@ -4698,8 +4698,11 @@
-
-
+
+
+
+
+
diff --git a/wz/Map.wz/Map/Map2/250020000.img.xml b/wz/Map.wz/Map/Map2/250020000.img.xml
index 39671d3226..ac09bb0fe0 100644
--- a/wz/Map.wz/Map/Map2/250020000.img.xml
+++ b/wz/Map.wz/Map/Map2/250020000.img.xml
@@ -446,7 +446,7 @@
-
+
diff --git a/wz/Map.wz/Map/Map2/270020211.img.xml b/wz/Map.wz/Map/Map2/270020211.img.xml
index 9280b8d84d..0d137393d5 100644
--- a/wz/Map.wz/Map/Map2/270020211.img.xml
+++ b/wz/Map.wz/Map/Map2/270020211.img.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/wz/Quest.wz/Act.img.xml b/wz/Quest.wz/Act.img.xml
index 031d3e07fb..e6a7a01002 100644
--- a/wz/Quest.wz/Act.img.xml
+++ b/wz/Quest.wz/Act.img.xml
@@ -24197,16 +24197,8 @@
-
-
-
-
-
-
-
-
@@ -24336,6 +24328,13 @@
+
+
+
+
+
+
+
diff --git a/wz/Quest.wz/Check.img.xml b/wz/Quest.wz/Check.img.xml
index b7fd07bbf3..b3ee572f3f 100644
--- a/wz/Quest.wz/Check.img.xml
+++ b/wz/Quest.wz/Check.img.xml
@@ -43959,12 +43959,7 @@
-
-
-
-
-
-
+
@@ -44097,6 +44092,7 @@
+
@@ -44282,10 +44278,10 @@
-
-
+
-
+
+
diff --git a/wz/Reactor.wz/2618000.img.xml b/wz/Reactor.wz/2618000.img.xml
index 3bad1081df..a3a326146f 100644
--- a/wz/Reactor.wz/2618000.img.xml
+++ b/wz/Reactor.wz/2618000.img.xml
@@ -182,6 +182,19 @@
+
+
+
+
+
+
+
+
+
-
@@ -209,6 +221,23 @@
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
-
-
-
+
+
+
+
+