diff --git a/build/built-jar.properties b/build/built-jar.properties
index 689813ebc9..7311569e8c 100644
--- a/build/built-jar.properties
+++ b/build/built-jar.properties
@@ -1,4 +1,4 @@
-#Sat, 05 Aug 2017 19:11:00 -0300
+#Fri, 11 Aug 2017 12:31:17 -0300
C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2=
diff --git a/build/classes/client/MapleCharacter.class b/build/classes/client/MapleCharacter.class
index 21a199c7b5..0b4f4b4d86 100644
Binary files a/build/classes/client/MapleCharacter.class and b/build/classes/client/MapleCharacter.class differ
diff --git a/build/classes/client/command/Commands.class b/build/classes/client/command/Commands.class
index 2cfcb196df..9a450a951f 100644
Binary files a/build/classes/client/command/Commands.class and b/build/classes/client/command/Commands.class differ
diff --git a/build/classes/constants/ServerConstants.class b/build/classes/constants/ServerConstants.class
index a5e74c19e3..85c952ec4d 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/Channel$1.class b/build/classes/net/server/channel/Channel$1.class
index e18e610468..d43b1c3626 100644
Binary files a/build/classes/net/server/channel/Channel$1.class and b/build/classes/net/server/channel/Channel$1.class differ
diff --git a/build/classes/net/server/channel/Channel$respawnMaps.class b/build/classes/net/server/channel/Channel$respawnMaps.class
index 90801e77f6..d3e01a1a88 100644
Binary files a/build/classes/net/server/channel/Channel$respawnMaps.class and b/build/classes/net/server/channel/Channel$respawnMaps.class differ
diff --git a/build/classes/net/server/channel/Channel.class b/build/classes/net/server/channel/Channel.class
index 254dbd39c9..9fa72803f6 100644
Binary files a/build/classes/net/server/channel/Channel.class and b/build/classes/net/server/channel/Channel.class differ
diff --git a/build/classes/net/server/channel/handlers/GeneralChatHandler.class b/build/classes/net/server/channel/handlers/GeneralChatHandler.class
index 7742d4f433..a029474f54 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/MobDamageMobFriendlyHandler.class b/build/classes/net/server/channel/handlers/MobDamageMobFriendlyHandler.class
index f0ae9a8a40..fd8a775c4c 100644
Binary files a/build/classes/net/server/channel/handlers/MobDamageMobFriendlyHandler.class and b/build/classes/net/server/channel/handlers/MobDamageMobFriendlyHandler.class differ
diff --git a/build/classes/net/server/channel/handlers/NPCTalkHandler.class b/build/classes/net/server/channel/handlers/NPCTalkHandler.class
index 297eee9ff9..a83baa5686 100644
Binary files a/build/classes/net/server/channel/handlers/NPCTalkHandler.class and b/build/classes/net/server/channel/handlers/NPCTalkHandler.class differ
diff --git a/build/classes/scripting/event/EventInstanceManager$3.class b/build/classes/scripting/event/EventInstanceManager$3.class
index 1517f53831..008216a501 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 bfd16fa15a..d3f5685bcf 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/npc/NPCConversationManager.class b/build/classes/scripting/npc/NPCConversationManager.class
index 1c479857e2..7884f38938 100644
Binary files a/build/classes/scripting/npc/NPCConversationManager.class and b/build/classes/scripting/npc/NPCConversationManager.class differ
diff --git a/build/classes/scripting/npc/NPCScriptManager.class b/build/classes/scripting/npc/NPCScriptManager.class
index 4e9ef5d799..bfcd3fe98c 100644
Binary files a/build/classes/scripting/npc/NPCScriptManager.class and b/build/classes/scripting/npc/NPCScriptManager.class differ
diff --git a/build/classes/server/MapleTrade.class b/build/classes/server/MapleTrade.class
index 87c6ef45f8..f1ca3fb5a1 100644
Binary files a/build/classes/server/MapleTrade.class and b/build/classes/server/MapleTrade.class differ
diff --git a/build/classes/server/life/MapleMonster$2.class b/build/classes/server/life/MapleMonster$2.class
index 618f519d78..7490d5a677 100644
Binary files a/build/classes/server/life/MapleMonster$2.class and b/build/classes/server/life/MapleMonster$2.class differ
diff --git a/build/classes/server/life/MapleMonster$3.class b/build/classes/server/life/MapleMonster$3.class
index 788cc59f21..7d4d94292f 100644
Binary files a/build/classes/server/life/MapleMonster$3.class and b/build/classes/server/life/MapleMonster$3.class differ
diff --git a/build/classes/server/life/MapleMonster$4.class b/build/classes/server/life/MapleMonster$4.class
index 23fc9f55d1..0877f7700d 100644
Binary files a/build/classes/server/life/MapleMonster$4.class and b/build/classes/server/life/MapleMonster$4.class differ
diff --git a/build/classes/server/life/MapleMonster$5.class b/build/classes/server/life/MapleMonster$5.class
index b6a2002be1..62f960585a 100644
Binary files a/build/classes/server/life/MapleMonster$5.class and b/build/classes/server/life/MapleMonster$5.class differ
diff --git a/build/classes/server/life/MapleMonster$6.class b/build/classes/server/life/MapleMonster$6.class
index f688c2755a..42c2817f64 100644
Binary files a/build/classes/server/life/MapleMonster$6.class and b/build/classes/server/life/MapleMonster$6.class differ
diff --git a/build/classes/server/life/MapleMonster$DamageTask.class b/build/classes/server/life/MapleMonster$DamageTask.class
index eb348b26c3..8cb72a9590 100644
Binary files a/build/classes/server/life/MapleMonster$DamageTask.class and b/build/classes/server/life/MapleMonster$DamageTask.class differ
diff --git a/build/classes/server/life/MapleMonster.class b/build/classes/server/life/MapleMonster.class
index 7b68b19c7a..d6326eaf44 100644
Binary files a/build/classes/server/life/MapleMonster.class and b/build/classes/server/life/MapleMonster.class differ
diff --git a/build/classes/server/maps/MapleMap$10.class b/build/classes/server/maps/MapleMap$10.class
index 60ba263411..37ded8a47a 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 d50e123b01..3922c9d10d 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 6d91dd729f..32cb4069c9 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 ca722ac9e9..a8ab525771 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 130bb46c92..d221d204c7 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 a4cc98fbfc..29d70c2e65 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 c2dbb9755e..a88fdd8db8 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 ce3d3d1587..295148f495 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 09e257d2e5..3a9ddd605b 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 c8ee8ba288..c198c7f073 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$20.class b/build/classes/server/maps/MapleMap$20.class
index b3385e5422..7757ed86a1 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 e69699d16d..907852ad1b 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 61e649fc47..0f08e82e8d 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 d96e081877..c1eff523ed 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 bbb55c0287..9d26c31856 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 61a0792e9e..c8d83c6712 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 9777ac7a17..cdbb750bce 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 5b5a1c1ad3..37f7141fbc 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 7ba63d122b..e2c284b3bd 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 b976c6228c..3c1bcd00e5 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 093774fb98..a55f375b0f 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$30.class b/build/classes/server/maps/MapleMap$30.class
index 645b620af4..c063b72f3f 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 cb43f2a66b..2126da4576 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 a3b06275e1..c419e7398f 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 5c3e39d96b..01bd01c2a9 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 3b66fae7d9..8f059461d8 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 d6977e4d1e..bc66f24371 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 2c842f36bb..282d3dc875 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 a837e30d43..144099d1e4 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 a4c975b9ee..50fc48dcb7 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 f5765c1a95..ecc495f178 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 2c0aeaeb64..19dd863c62 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 72d97a9e7c..f0bf091a62 100644
Binary files a/build/classes/server/maps/MapleMapFactory.class and b/build/classes/server/maps/MapleMapFactory.class differ
diff --git a/build/classes/server/maps/MapleReactor$1.class b/build/classes/server/maps/MapleReactor$1.class
index c8635e4b7e..ed72afb825 100644
Binary files a/build/classes/server/maps/MapleReactor$1.class and b/build/classes/server/maps/MapleReactor$1.class differ
diff --git a/build/classes/server/maps/MapleReactor$2.class b/build/classes/server/maps/MapleReactor$2.class
new file mode 100644
index 0000000000..5287e4d57b
Binary files /dev/null and b/build/classes/server/maps/MapleReactor$2.class differ
diff --git a/build/classes/server/maps/MapleReactor.class b/build/classes/server/maps/MapleReactor.class
index 8beb497148..6e595bd703 100644
Binary files a/build/classes/server/maps/MapleReactor.class and b/build/classes/server/maps/MapleReactor.class differ
diff --git a/build/classes/server/maps/MapleReactorFactory.class b/build/classes/server/maps/MapleReactorFactory.class
index 5c62ae8049..19cecffa63 100644
Binary files a/build/classes/server/maps/MapleReactorFactory.class and b/build/classes/server/maps/MapleReactorFactory.class differ
diff --git a/build/classes/server/maps/MapleReactorStats$StateData.class b/build/classes/server/maps/MapleReactorStats$StateData.class
index 234e884c42..cc77888bd6 100644
Binary files a/build/classes/server/maps/MapleReactorStats$StateData.class and b/build/classes/server/maps/MapleReactorStats$StateData.class differ
diff --git a/build/classes/server/maps/MapleReactorStats.class b/build/classes/server/maps/MapleReactorStats.class
index f3c26b364f..35153e1459 100644
Binary files a/build/classes/server/maps/MapleReactorStats.class and b/build/classes/server/maps/MapleReactorStats.class differ
diff --git a/build/classes/tools/MaplePacketCreator.class b/build/classes/tools/MaplePacketCreator.class
index cb26ef2a22..f15cf30954 100644
Binary files a/build/classes/tools/MaplePacketCreator.class and b/build/classes/tools/MaplePacketCreator.class differ
diff --git a/dist/MapleSolaxia.jar b/dist/MapleSolaxia.jar
index 056569bb71..71dec0ee41 100644
Binary files a/dist/MapleSolaxia.jar and b/dist/MapleSolaxia.jar differ
diff --git a/docs/feature_list.txt b/docs/feature_list.txt
index b3572f5334..7cc3325526 100644
--- a/docs/feature_list.txt
+++ b/docs/feature_list.txt
@@ -3,12 +3,21 @@ Credits:
Ronan - Freelance Developer
Vcoc - Freelance Developer
+---------------------------
+DISCLAIMER:
+---------------------------
+This is NOT intended to be a PURE v83 MapleStory server emulator (acting
+under the clean WZ files, provided by Nexon/Wizet). There has been provided
+a whole array of edited WZ on the Drive to be used for this server. Although
+normal WZs will load properly, there is no guarantee in-game bugs and issues
+may arise because of some incompatibilities with the clean files.
+
---------------------------
Feature list:
---------------------------
PQs:
-* HPQ/KPQ/LPQ/LMPQ/OPQ/EllinPQ/PiratePQ/HorntailPQ 100%.
+* HPQ/KPQ/LPQ/LMPQ/OPQ/EllinPQ/PiratePQ/MagatiaPQ/HorntailPQ 100%.
* CWKPQ as Expedition-based event 100%.
* Expeditions: Scarga/Horntail/Showa/Zakum/Pinkbean 100%.
* GuildPQ 100% + Guild queue with multi-lobby systems available.
@@ -63,6 +72,6 @@ Project:
* Organized project code.
* Highly configurable server (see all server flags at ServerConstants).
* Fixed/added some missing packets for MoveEnvironment, summons and others.
-* Reviewed some Java object aspects that needed concurrency protection.
+* Reviewed many Java object aspects that needed concurrency protection.
---------------------------
\ No newline at end of file
diff --git a/docs/mychanges_ptbr.txt b/docs/mychanges_ptbr.txt
index ca21bd266d..3c33402331 100644
--- a/docs/mychanges_ptbr.txt
+++ b/docs/mychanges_ptbr.txt
@@ -433,4 +433,9 @@ Ap
Novo scroll: antibanish. Retorna ao local de onde foi banido pela ultima vez.
Resolvido alguns problemas de concorrência com MapleMapFactory.
Removidos drops inexistentes da DB.
-Resolvido problema com GMs de level alto recebendo bloqueio MWLB.
\ No newline at end of file
+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
diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml
index 6d3dbbc18f..2aeac23582 100644
--- a/nbproject/private/private.xml
+++ b/nbproject/private/private.xml
@@ -3,15 +3,7 @@
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/TimerManager.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/command/Commands.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapMonitor.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapleMapItem.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/constants/ServerConstants.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/MapleCharacter.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapleMap.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/handlers/AbstractDealDamageHandler.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/Channel.java
+ file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/event/EventInstanceManager.java
diff --git a/scripts/NPC Base.js b/scripts/NPC Base.js
index 5d62b852e9..893fe61d1e 100644
--- a/scripts/NPC Base.js
+++ b/scripts/NPC Base.js
@@ -32,10 +32,12 @@ function start() {
}
function action(mode, type, selection) {
+ //print("mode" + mode + "type " + type + " selection" + selection + "\n");
+
if (mode == -1) {
cm.dispose();
} else {
- if (mode == 0 && status == 0) {
+ if (mode == 0 && type > 0) { // hope types 2 & 3 works as well, as 1 and 4 END CHAT
cm.dispose();
return;
}
diff --git a/scripts/event/0_EXAMPLE.js b/scripts/event/0_EXAMPLE.js
index 3a1ca2d447..71fc336016 100644
--- a/scripts/event/0_EXAMPLE.js
+++ b/scripts/event/0_EXAMPLE.js
@@ -88,6 +88,10 @@ function timeOut(eim) {
function monsterKilled(mob, eim) {}
+function friendlyKilled(mob, eim) {
+ // Happens when a friendly mob dies
+}
+
function allMonstersDead(eim) {
// When invoking unregisterMonster(MapleMonster mob) OR killed
// Happens only when size = 0
@@ -134,7 +138,7 @@ function disbandParty(eim, player) {
}
function removePlayer(eim, player) {
- // Happens when the funtion NPCConversationalManager.removePlayerFromInstance() is invoked
+ // Happens when the funtion NPCConversationManager.removePlayerFromInstance() is invoked
}
function registerCarnivalParty(eim, carnivalparty) {
diff --git a/scripts/event/MagatiaPQ_A.js b/scripts/event/MagatiaPQ_A.js
new file mode 100644
index 0000000000..4b9b2f4b9d
--- /dev/null
+++ b/scripts/event/MagatiaPQ_A.js
@@ -0,0 +1,395 @@
+/**
+ * @author: Ronan
+ * @event: Magatia PQ (Alcadno)
+*/
+
+importPackage(Packages.server.life);
+
+var isPq = true;
+var minPlayers = 4, maxPlayers = 4;
+var minLevel = 71, maxLevel = 85;
+var entryMap = 926110000;
+var exitMap = 926110700;
+var recruitMap = 261000021;
+var clearMap = 926110700;
+
+var minMapId = 926110000;
+var maxMapId = 926110600;
+
+var eventTime = 45; // 45 minutes
+
+var lobbyRange = [0, 0];
+
+function init() {
+ setEventRequirements();
+}
+
+function setLobbyRange() {
+ return lobbyRange;
+}
+
+function setEventRequirements() {
+ var reqStr = "";
+
+ reqStr += "\r\n Number of players: ";
+ if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
+ else reqStr += minPlayers;
+
+ reqStr += "\r\n Level range: ";
+ if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
+ else reqStr += minLevel;
+
+ reqStr += "\r\n Time limit: ";
+ reqStr += eventTime + " minutes";
+
+ em.setProperty("party", reqStr);
+}
+
+function setEventExclusives(eim) {
+ var itemSet = [4001130, 4001131, 4001132, 4001133, 4001134, 4001135];
+ eim.setExclusiveItems(itemSet);
+}
+
+function setEventRewards(eim) {
+ var itemSet, itemQty, evLevel, expStages;
+
+ evLevel = 1; //Rewards at clear PQ
+ itemSet = [2000003, 2000002, 2000004, 2000005, 2022003, 1032016, 1032015, 1032014, 2041212, 2041020, 2040502, 2041016, 2044701, 2040301, 2043201, 2040501, 2040704, 2044001, 2043701, 2040803, 1102026, 1102028, 1102029];
+ itemQty = [100, 100, 20, 10, 50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
+ eim.setEventRewards(evLevel, itemSet, itemQty);
+
+ expStages = [0, 10000, 20000, 0, 20000, 20000, 0, 0]; //bonus exp given on CLEAR stage signal
+ eim.setEventClearStageExp(expStages);
+}
+
+function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
+ var eligible = [];
+ var hasLeader = false;
+
+ if(party.size() > 0) {
+ var partyList = party.toArray();
+
+ for(var i = 0; i < party.size(); i++) {
+ var ch = partyList[i];
+
+ if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
+ if(ch.isLeader()) hasLeader = true;
+ eligible.push(ch);
+ }
+ }
+ }
+
+ if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
+ return eligible;
+}
+
+function setup(level, lobbyid) {
+ var eim = em.newInstance("MagatiaA" + lobbyid);
+ eim.setProperty("level", level);
+
+ eim.setIntProperty("isAlcadno", 1);
+
+ eim.setIntProperty("escortFail", 0);
+ eim.setIntProperty("yuleteTimeout", 0);
+ eim.setIntProperty("yuleteTalked", 0);
+ eim.setIntProperty("yuletePassed", 0);
+ eim.setIntProperty("npcShocked", 0);
+ eim.setIntProperty("normalClear", 0);
+
+ eim.setIntProperty("statusStg1", 0);
+ eim.setIntProperty("statusStg2", 0);
+ eim.setIntProperty("statusStg3", 0);
+ eim.setIntProperty("statusStg4", 0);
+ eim.setIntProperty("statusStg5", 0);
+ eim.setIntProperty("statusStg6", 0);
+ eim.setIntProperty("statusStg7", 0);
+
+ eim.getInstanceMap(926110000).resetPQ(level);
+ eim.getInstanceMap(926110001).resetPQ(level);
+ eim.getInstanceMap(926110100).resetPQ(level);
+ eim.getInstanceMap(926110200).resetPQ(level);
+ eim.getInstanceMap(926110201).resetPQ(level);
+ eim.getInstanceMap(926110202).resetPQ(level);
+ eim.getInstanceMap(926110203).resetPQ(level);
+ eim.getInstanceMap(926110300).resetPQ(level);
+ eim.getInstanceMap(926110301).resetPQ(level);
+ eim.getInstanceMap(926110302).resetPQ(level);
+ eim.getInstanceMap(926110303).resetPQ(level);
+ eim.getInstanceMap(926110304).resetPQ(level);
+ eim.getInstanceMap(926110400).resetPQ(level);
+ eim.getInstanceMap(926110401).resetPQ(level);
+ eim.getInstanceMap(926110500).resetPQ(level);
+ eim.getInstanceMap(926110600).resetPQ(level);
+ eim.getInstanceMap(926110700).resetPQ(level);
+
+ eim.getInstanceMap(926110201).shuffleReactors(2518000, 2612004);
+ eim.getInstanceMap(926110202).shuffleReactors(2518000, 2612004);
+
+ eim.spawnNpc(2112010, new java.awt.Point(252, 243), eim.getInstanceMap(926110203));
+ eim.spawnNpc(2112010, new java.awt.Point(200, 100), eim.getInstanceMap(926110401));
+ eim.spawnNpc(2112011, new java.awt.Point(200, 100), eim.getInstanceMap(926110500));
+ eim.spawnNpc(2112018, new java.awt.Point(200, 100), eim.getInstanceMap(926110600));
+
+ respawnStages(eim);
+ eim.startEventTimer(eventTime * 60000);
+ setEventRewards(eim);
+ setEventExclusives(eim);
+ return eim;
+}
+
+function shuffle(array) {
+ var currentIndex = array.length, temporaryValue, randomIndex;
+
+ // While there remain elements to shuffle...
+ while (0 !== currentIndex) {
+
+ // Pick a remaining element...
+ randomIndex = Math.floor(Math.random() * currentIndex);
+ currentIndex -= 1;
+
+ // And swap it with the current element.
+ temporaryValue = array[currentIndex];
+ array[currentIndex] = array[randomIndex];
+ array[randomIndex] = temporaryValue;
+ }
+
+ return array;
+}
+
+function afterSetup(eim) {
+ eim.setIntProperty("escortFail", 0); // refresh friendly status
+
+ var books = [-1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 2, 3];
+ shuffle(books);
+
+ eim.setIntProperty("stg1_b0", books[0]);
+ eim.setIntProperty("stg1_b1", books[1]);
+ eim.setIntProperty("stg1_b2", books[2]);
+ eim.setIntProperty("stg1_b3", books[3]);
+ eim.setIntProperty("stg1_b4", books[4]);
+ eim.setIntProperty("stg1_b5", books[5]);
+ eim.setIntProperty("stg1_b6", books[6]);
+ eim.setIntProperty("stg1_b7", books[7]);
+ eim.setIntProperty("stg1_b8", books[8]);
+ eim.setIntProperty("stg1_b9", books[9]);
+ eim.setIntProperty("stg1_b10", books[10]);
+ eim.setIntProperty("stg1_b11", books[11]);
+ eim.setIntProperty("stg1_b12", books[12]);
+ eim.setIntProperty("stg1_b13", books[13]);
+ eim.setIntProperty("stg1_b14", books[14]);
+ eim.setIntProperty("stg1_b15", books[15]);
+ eim.setIntProperty("stg1_b16", books[16]);
+ eim.setIntProperty("stg1_b17", books[17]);
+ eim.setIntProperty("stg1_b18", books[18]);
+ eim.setIntProperty("stg1_b19", books[19]);
+ eim.setIntProperty("stg1_b20", books[20]);
+ eim.setIntProperty("stg1_b21", books[21]);
+ eim.setIntProperty("stg1_b22", books[22]);
+ eim.setIntProperty("stg1_b23", books[23]);
+ eim.setIntProperty("stg1_b24", books[24]);
+ eim.setIntProperty("stg1_b25", books[25]);
+}
+
+function respawnStages(eim) {
+ eim.getMapInstance(926110100).instanceMapRespawn();
+ eim.getMapInstance(926110200).instanceMapRespawn();
+
+ if(!eim.isEventCleared()) {
+ var mapobj = eim.getMapInstance(926110401);
+ var mobcount = mapobj.countMonster(9300150);
+ var mobobj;
+ if(mobcount == 0) {
+ mobobj = MapleLifeFactory.getMonster(9300150);
+ mapobj.spawnMonsterOnGroundBelow(mobobj, new Packages.java.awt.Point(-278, -126));
+
+ mobobj = MapleLifeFactory.getMonster(9300150);
+ mapobj.spawnMonsterOnGroundBelow(mobobj, new Packages.java.awt.Point(-542, -126));
+ } else if(mobcount == 1) {
+ mobobj = MapleLifeFactory.getMonster(9300150);
+ mapobj.spawnMonsterOnGroundBelow(mobobj, new Packages.java.awt.Point(-542, -126));
+ }
+ }
+
+ eim.schedule("respawnStages", 15 * 1000);
+}
+
+function playerEntry(eim, player) {
+ var map = eim.getMapInstance(entryMap);
+ player.changeMap(map, map.getPortal(0));
+}
+
+function scheduledTimeout(eim) {
+ end(eim);
+}
+
+function playerUnregistered(eim, player) {}
+
+function playerExit(eim, player) {
+ eim.unregisterPlayer(player);
+ player.changeMap(exitMap, 0);
+}
+
+function changedMap(eim, player, mapid) {
+ if (mapid < minMapId || mapid > maxMapId) {
+ if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
+ eim.unregisterPlayer(player);
+ end(eim);
+ }
+ else
+ eim.unregisterPlayer(player);
+
+ } else if(mapid == 926110203 && eim.getIntProperty("yuleteTimeout") == 0) {
+ eim.setIntProperty("yuleteTimeout", 1);
+ eim.schedule("yuleteAction", 10 * 1000);
+ }
+}
+
+function yuleteAction(eim) {
+ if(eim.getIntProperty("yuleteTalked") == 1) {
+ eim.setIntProperty("yuletePassed", 1);
+
+ eim.dropMessage(5, "Yulete: Ugh, you guys disgust me. All I desired was to make this nation the greatest alchemy powerhouse of the entire world. If they won't accept this, I will make it true by myself, at any costs!!!");
+ } else {
+ eim.dropMessage(5, "Yulete: Hahaha... Did you really think I was going to be so disprepared knowing that the Magatia societies' dogs would be coming in my pursuit after my actions? Fools!");
+ }
+ eim.setIntProperty("yuleteTalked", -1);
+
+ var mapobj = eim.getMapInstance(926110203);
+ var mob1 = 9300143, mob2 = 9300144;
+
+ mapobj.destroyNPC(2112010);
+
+ var mobobj1, mobobj2;
+ for(var i = 0; i < 5; i++) {
+ mobobj1 = MapleLifeFactory.getMonster(mob1);
+ mobobj2 = MapleLifeFactory.getMonster(mob2);
+
+ mapobj.spawnMonsterOnGroundBelow(mobobj1, new Packages.java.awt.Point(-455, 135));
+ mapobj.spawnMonsterOnGroundBelow(mobobj2, new Packages.java.awt.Point(-455, 135));
+ }
+
+
+ for(var i = 0; i < 5; i++) {
+ mobobj1 = MapleLifeFactory.getMonster(mob1);
+ mobobj2 = MapleLifeFactory.getMonster(mob2);
+
+ mapobj.spawnMonsterOnGroundBelow(mobobj1, new Packages.java.awt.Point(0, 135));
+ mapobj.spawnMonsterOnGroundBelow(mobobj2, new Packages.java.awt.Point(0, 135));
+ }
+
+
+ for(var i = 0; i < 5; i++) {
+ mobobj1 = MapleLifeFactory.getMonster(mob1);
+ mobobj2 = MapleLifeFactory.getMonster(mob2);
+
+ mapobj.spawnMonsterOnGroundBelow(mobobj1, new Packages.java.awt.Point(360, 135));
+ mapobj.spawnMonsterOnGroundBelow(mobobj2, new Packages.java.awt.Point(360, 135));
+ }
+}
+
+function changedLeader(eim, leader) {
+ var mapid = leader.getMapId();
+ if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
+ end(eim);
+ }
+}
+
+function playerDead(eim, player) {}
+
+function playerRevive(eim, player) { // player presses ok on the death pop up.
+ if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
+ eim.unregisterPlayer(player);
+ end(eim);
+ }
+ else
+ eim.unregisterPlayer(player);
+}
+
+function playerDisconnected(eim, player) {
+ if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
+ eim.unregisterPlayer(player);
+ end(eim);
+ }
+ else
+ eim.unregisterPlayer(player);
+}
+
+function leftParty(eim, player) {
+ if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
+ eim.unregisterPlayer(player);
+ end(eim);
+ }
+ else
+ eim.unregisterPlayer(player);
+}
+
+function disbandParty(eim) {
+ end(eim);
+}
+
+function monsterValue(eim, mobId) {
+ return 1;
+}
+
+function end(eim) {
+ var party = eim.getPlayers();
+ for (var i = 0; i < party.size(); i++) {
+ playerExit(eim, party.get(i));
+ }
+ eim.dispose();
+}
+
+function giveRandomEventReward(eim, player) {
+ eim.giveEventReward(player);
+}
+
+function clearPQ(eim) {
+ eim.stopEventTimer();
+ eim.setEventCleared();
+}
+
+function monsterKilled(mob, eim) {
+ var map = mob.getMap();
+
+ if(map.getId() == 926110001 && eim.getIntProperty("statusStg1") == 1) {
+ if(map.countMonsters() == 0) {
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(2);
+ eim.setIntProperty("statusStg2", 1);
+ }
+ }
+ else if(map.getId() == 926110203 && eim.getIntProperty("statusStg1") == 1) {
+ if(map.countMonsters() == 0) {
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(5);
+
+ map.getReactorByName("jnr6_out").forceHitReactor(1);
+ }
+ } else if(mob.getId() == 9300151 || mob.getId() == 9300152) {
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(7);
+
+ eim.spawnNpc(2112005, new java.awt.Point(-370, -150), map);
+
+ var gain = (eim.getIntProperty("escortFail") == 1) ? 90000 : ((mob.getId() == 9300139) ? 105000 : 140000);
+ eim.giveEventPlayersExp(gain);
+
+ map.killAllMonstersNotFriendly();
+
+ if(mob.getId() == 9300139) {
+ eim.setIntProperty("normalClear", 1);
+ }
+
+ eim.clearPQ();
+ }
+}
+
+function friendlyKilled(mob, eim) {
+ eim.setIntProperty("escortFail", 1);
+}
+
+function allMonstersDead(eim) {}
+
+function cancelSchedule() {}
+
+function dispose(eim) {}
diff --git a/scripts/event/MagatiaPQ_Z.js b/scripts/event/MagatiaPQ_Z.js
new file mode 100644
index 0000000000..debc598550
--- /dev/null
+++ b/scripts/event/MagatiaPQ_Z.js
@@ -0,0 +1,395 @@
+/**
+ * @author: Ronan
+ * @event: Magatia PQ (Zenumist)
+*/
+
+importPackage(Packages.server.life);
+
+var isPq = true;
+var minPlayers = 4, maxPlayers = 4;
+var minLevel = 71, maxLevel = 85;
+var entryMap = 926100000;
+var exitMap = 926100700;
+var recruitMap = 261000011;
+var clearMap = 926100700;
+
+var minMapId = 926100000;
+var maxMapId = 926100600;
+
+var eventTime = 45; // 45 minutes
+
+var lobbyRange = [0, 0];
+
+function init() {
+ setEventRequirements();
+}
+
+function setLobbyRange() {
+ return lobbyRange;
+}
+
+function setEventRequirements() {
+ var reqStr = "";
+
+ reqStr += "\r\n Number of players: ";
+ if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
+ else reqStr += minPlayers;
+
+ reqStr += "\r\n Level range: ";
+ if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
+ else reqStr += minLevel;
+
+ reqStr += "\r\n Time limit: ";
+ reqStr += eventTime + " minutes";
+
+ em.setProperty("party", reqStr);
+}
+
+function setEventExclusives(eim) {
+ var itemSet = [4001130, 4001131, 4001132, 4001133, 4001134, 4001135];
+ eim.setExclusiveItems(itemSet);
+}
+
+function setEventRewards(eim) {
+ var itemSet, itemQty, evLevel, expStages;
+
+ evLevel = 1; //Rewards at clear PQ
+ itemSet = [2000003, 2000002, 2000004, 2000005, 2022003, 1032016, 1032015, 1032014, 2041212, 2041020, 2040502, 2041016, 2044701, 2040301, 2043201, 2040501, 2040704, 2044001, 2043701, 2040803, 1102026, 1102028, 1102029];
+ itemQty = [100, 100, 20, 10, 50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
+ eim.setEventRewards(evLevel, itemSet, itemQty);
+
+ expStages = [0, 10000, 20000, 0, 20000, 20000, 0, 0]; //bonus exp given on CLEAR stage signal
+ eim.setEventClearStageExp(expStages);
+}
+
+function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
+ var eligible = [];
+ var hasLeader = false;
+
+ if(party.size() > 0) {
+ var partyList = party.toArray();
+
+ for(var i = 0; i < party.size(); i++) {
+ var ch = partyList[i];
+
+ if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
+ if(ch.isLeader()) hasLeader = true;
+ eligible.push(ch);
+ }
+ }
+ }
+
+ if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
+ return eligible;
+}
+
+function setup(level, lobbyid) {
+ var eim = em.newInstance("MagatiaZ" + lobbyid);
+ eim.setProperty("level", level);
+
+ eim.setIntProperty("isAlcadno", 0);
+
+ eim.setIntProperty("escortFail", 0);
+ eim.setIntProperty("yuleteTimeout", 0);
+ eim.setIntProperty("yuleteTalked", 0);
+ eim.setIntProperty("yuletePassed", 0);
+ eim.setIntProperty("npcShocked", 0);
+ eim.setIntProperty("normalClear", 0);
+
+ eim.setIntProperty("statusStg1", 0);
+ eim.setIntProperty("statusStg2", 0);
+ eim.setIntProperty("statusStg3", 0);
+ eim.setIntProperty("statusStg4", 0);
+ eim.setIntProperty("statusStg5", 0);
+ eim.setIntProperty("statusStg6", 0);
+ eim.setIntProperty("statusStg7", 0);
+
+ eim.getInstanceMap(926100000).resetPQ(level);
+ eim.getInstanceMap(926100001).resetPQ(level);
+ eim.getInstanceMap(926100100).resetPQ(level);
+ eim.getInstanceMap(926100200).resetPQ(level);
+ eim.getInstanceMap(926100201).resetPQ(level);
+ eim.getInstanceMap(926100202).resetPQ(level);
+ eim.getInstanceMap(926100203).resetPQ(level);
+ eim.getInstanceMap(926100300).resetPQ(level);
+ eim.getInstanceMap(926100301).resetPQ(level);
+ eim.getInstanceMap(926100302).resetPQ(level);
+ eim.getInstanceMap(926100303).resetPQ(level);
+ eim.getInstanceMap(926100304).resetPQ(level);
+ eim.getInstanceMap(926100400).resetPQ(level);
+ eim.getInstanceMap(926100401).resetPQ(level);
+ eim.getInstanceMap(926100500).resetPQ(level);
+ eim.getInstanceMap(926100600).resetPQ(level);
+ eim.getInstanceMap(926100700).resetPQ(level);
+
+ eim.getInstanceMap(926100201).shuffleReactors(2518000, 2612004);
+ eim.getInstanceMap(926100202).shuffleReactors(2518000, 2612004);
+
+ eim.spawnNpc(2112000, new java.awt.Point(252, 243), eim.getInstanceMap(926100203));
+ eim.spawnNpc(2112000, new java.awt.Point(200, 100), eim.getInstanceMap(926100401));
+ eim.spawnNpc(2112001, new java.awt.Point(200, 100), eim.getInstanceMap(926100500));
+ eim.spawnNpc(2112018, new java.awt.Point(200, 100), eim.getInstanceMap(926100600));
+
+ respawnStages(eim);
+ eim.startEventTimer(eventTime * 60000);
+ setEventRewards(eim);
+ setEventExclusives(eim);
+ return eim;
+}
+
+function shuffle(array) {
+ var currentIndex = array.length, temporaryValue, randomIndex;
+
+ // While there remain elements to shuffle...
+ while (0 !== currentIndex) {
+
+ // Pick a remaining element...
+ randomIndex = Math.floor(Math.random() * currentIndex);
+ currentIndex -= 1;
+
+ // And swap it with the current element.
+ temporaryValue = array[currentIndex];
+ array[currentIndex] = array[randomIndex];
+ array[randomIndex] = temporaryValue;
+ }
+
+ return array;
+}
+
+function afterSetup(eim) {
+ eim.setIntProperty("escortFail", 0); // refresh friendly status
+
+ var books = [-1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 2, 3];
+ shuffle(books);
+
+ eim.setIntProperty("stg1_b0", books[0]);
+ eim.setIntProperty("stg1_b1", books[1]);
+ eim.setIntProperty("stg1_b2", books[2]);
+ eim.setIntProperty("stg1_b3", books[3]);
+ eim.setIntProperty("stg1_b4", books[4]);
+ eim.setIntProperty("stg1_b5", books[5]);
+ eim.setIntProperty("stg1_b6", books[6]);
+ eim.setIntProperty("stg1_b7", books[7]);
+ eim.setIntProperty("stg1_b8", books[8]);
+ eim.setIntProperty("stg1_b9", books[9]);
+ eim.setIntProperty("stg1_b10", books[10]);
+ eim.setIntProperty("stg1_b11", books[11]);
+ eim.setIntProperty("stg1_b12", books[12]);
+ eim.setIntProperty("stg1_b13", books[13]);
+ eim.setIntProperty("stg1_b14", books[14]);
+ eim.setIntProperty("stg1_b15", books[15]);
+ eim.setIntProperty("stg1_b16", books[16]);
+ eim.setIntProperty("stg1_b17", books[17]);
+ eim.setIntProperty("stg1_b18", books[18]);
+ eim.setIntProperty("stg1_b19", books[19]);
+ eim.setIntProperty("stg1_b20", books[20]);
+ eim.setIntProperty("stg1_b21", books[21]);
+ eim.setIntProperty("stg1_b22", books[22]);
+ eim.setIntProperty("stg1_b23", books[23]);
+ eim.setIntProperty("stg1_b24", books[24]);
+ eim.setIntProperty("stg1_b25", books[25]);
+}
+
+function respawnStages(eim) {
+ eim.getMapInstance(926100100).instanceMapRespawn();
+ eim.getMapInstance(926100200).instanceMapRespawn();
+
+ if(!eim.isEventCleared()) {
+ var mapobj = eim.getMapInstance(926100401);
+ var mobcount = mapobj.countMonster(9300150);
+ var mobobj;
+ if(mobcount == 0) {
+ mobobj = MapleLifeFactory.getMonster(9300150);
+ mapobj.spawnMonsterOnGroundBelow(mobobj, new Packages.java.awt.Point(-278, -126));
+
+ mobobj = MapleLifeFactory.getMonster(9300150);
+ mapobj.spawnMonsterOnGroundBelow(mobobj, new Packages.java.awt.Point(-542, -126));
+ } else if(mobcount == 1) {
+ mobobj = MapleLifeFactory.getMonster(9300150);
+ mapobj.spawnMonsterOnGroundBelow(mobobj, new Packages.java.awt.Point(-542, -126));
+ }
+ }
+
+ eim.schedule("respawnStages", 15 * 1000);
+}
+
+function playerEntry(eim, player) {
+ var map = eim.getMapInstance(entryMap);
+ player.changeMap(map, map.getPortal(0));
+}
+
+function scheduledTimeout(eim) {
+ end(eim);
+}
+
+function playerUnregistered(eim, player) {}
+
+function playerExit(eim, player) {
+ eim.unregisterPlayer(player);
+ player.changeMap(exitMap, 0);
+}
+
+function changedMap(eim, player, mapid) {
+ if (mapid < minMapId || mapid > maxMapId) {
+ if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
+ eim.unregisterPlayer(player);
+ end(eim);
+ }
+ else
+ eim.unregisterPlayer(player);
+
+ } else if(mapid == 926100203 && eim.getIntProperty("yuleteTimeout") == 0) {
+ eim.setIntProperty("yuleteTimeout", 1);
+ eim.schedule("yuleteAction", 10 * 1000);
+ }
+}
+
+function yuleteAction(eim) {
+ if(eim.getIntProperty("yuleteTalked") == 1) {
+ eim.setIntProperty("yuletePassed", 1);
+
+ eim.dropMessage(5, "Yulete: Ugh, you guys disgust me. All I desired was to make this nation the greatest alchemy powerhouse of the entire world. If they won't accept this, I will make it true by myself, at any costs!!!");
+ } else {
+ eim.dropMessage(5, "Yulete: Hahaha... Did you really think I was going to be so disprepared knowing that the Magatia societies' dogs would be coming in my pursuit after my actions? Fools!");
+ }
+ eim.setIntProperty("yuleteTalked", -1);
+
+ var mapobj = eim.getMapInstance(926100203);
+ var mob1 = 9300143, mob2 = 9300144;
+
+ mapobj.destroyNPC(2112000);
+
+ var mobobj1, mobobj2;
+ for(var i = 0; i < 5; i++) {
+ mobobj1 = MapleLifeFactory.getMonster(mob1);
+ mobobj2 = MapleLifeFactory.getMonster(mob2);
+
+ mapobj.spawnMonsterOnGroundBelow(mobobj1, new Packages.java.awt.Point(-455, 135));
+ mapobj.spawnMonsterOnGroundBelow(mobobj2, new Packages.java.awt.Point(-455, 135));
+ }
+
+
+ for(var i = 0; i < 5; i++) {
+ mobobj1 = MapleLifeFactory.getMonster(mob1);
+ mobobj2 = MapleLifeFactory.getMonster(mob2);
+
+ mapobj.spawnMonsterOnGroundBelow(mobobj1, new Packages.java.awt.Point(0, 135));
+ mapobj.spawnMonsterOnGroundBelow(mobobj2, new Packages.java.awt.Point(0, 135));
+ }
+
+
+ for(var i = 0; i < 5; i++) {
+ mobobj1 = MapleLifeFactory.getMonster(mob1);
+ mobobj2 = MapleLifeFactory.getMonster(mob2);
+
+ mapobj.spawnMonsterOnGroundBelow(mobobj1, new Packages.java.awt.Point(360, 135));
+ mapobj.spawnMonsterOnGroundBelow(mobobj2, new Packages.java.awt.Point(360, 135));
+ }
+}
+
+function changedLeader(eim, leader) {
+ var mapid = leader.getMapId();
+ if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
+ end(eim);
+ }
+}
+
+function playerDead(eim, player) {}
+
+function playerRevive(eim, player) { // player presses ok on the death pop up.
+ if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
+ eim.unregisterPlayer(player);
+ end(eim);
+ }
+ else
+ eim.unregisterPlayer(player);
+}
+
+function playerDisconnected(eim, player) {
+ if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
+ eim.unregisterPlayer(player);
+ end(eim);
+ }
+ else
+ eim.unregisterPlayer(player);
+}
+
+function leftParty(eim, player) {
+ if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
+ eim.unregisterPlayer(player);
+ end(eim);
+ }
+ else
+ eim.unregisterPlayer(player);
+}
+
+function disbandParty(eim) {
+ end(eim);
+}
+
+function monsterValue(eim, mobId) {
+ return 1;
+}
+
+function end(eim) {
+ var party = eim.getPlayers();
+ for (var i = 0; i < party.size(); i++) {
+ playerExit(eim, party.get(i));
+ }
+ eim.dispose();
+}
+
+function giveRandomEventReward(eim, player) {
+ eim.giveEventReward(player);
+}
+
+function clearPQ(eim) {
+ eim.stopEventTimer();
+ eim.setEventCleared();
+}
+
+function monsterKilled(mob, eim) {
+ var map = mob.getMap();
+
+ if(map.getId() == 926100001 && eim.getIntProperty("statusStg1") == 1) {
+ if(map.countMonsters() == 0) {
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(2);
+ eim.setIntProperty("statusStg2", 1);
+ }
+ }
+ else if(map.getId() == 926100203 && eim.getIntProperty("statusStg1") == 1) {
+ if(map.countMonsters() == 0) {
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(5);
+
+ map.getReactorByName("rnj6_out").forceHitReactor(1);
+ }
+ } else if(mob.getId() == 9300139 || mob.getId() == 9300140) {
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(7);
+
+ eim.spawnNpc(2112006, new java.awt.Point(-370, -150), map);
+
+ var gain = (eim.getIntProperty("escortFail") == 1) ? 90000 : ((mob.getId() == 9300139) ? 105000 : 140000);
+ eim.giveEventPlayersExp(gain);
+
+ map.killAllMonstersNotFriendly();
+
+ if(mob.getId() == 9300139) {
+ eim.setIntProperty("normalClear", 1);
+ }
+
+ eim.clearPQ();
+ }
+}
+
+function friendlyKilled(mob, eim) {
+ eim.setIntProperty("escortFail", 1);
+}
+
+function allMonstersDead(eim) {}
+
+function cancelSchedule() {}
+
+function dispose(eim) {}
diff --git a/scripts/event/PinkBeanBattle.js b/scripts/event/PinkBeanBattle.js
index e39b1fe2be..0ae7906cce 100644
--- a/scripts/event/PinkBeanBattle.js
+++ b/scripts/event/PinkBeanBattle.js
@@ -216,7 +216,7 @@ function monsterKilled(mob, eim) {
if(isPinkBean(mob)) {
eim.setIntProperty("defeatedBoss", 1);
eim.showClearEffect(mob.getMap().getId());
- mob.getMap().killAllMonstersNotFriendly();
+ mob.getMap().killAllMonsters();
eim.clearPQ();
var ch = eim.getIntProperty("channel");
diff --git a/scripts/event/ShowaBattle.js b/scripts/event/ShowaBattle.js
index ec9d042fed..e46fc64ddf 100644
--- a/scripts/event/ShowaBattle.js
+++ b/scripts/event/ShowaBattle.js
@@ -166,7 +166,7 @@ function giveRandomEventReward(eim, player) {
}
function clearPQ(eim) {
- eim.getInstanceMap(801040100).killAllMonstersNotFriendly();
+ eim.getInstanceMap(801040100).killAllMonsters();
eim.stopEventTimer();
eim.setEventCleared();
diff --git a/scripts/map/onFirstUserEnter/dojang_Eff.js b/scripts/map/onFirstUserEnter/dojang_Eff.js
index 35ce7a3bee..3392697404 100644
--- a/scripts/map/onFirstUserEnter/dojang_Eff.js
+++ b/scripts/map/onFirstUserEnter/dojang_Eff.js
@@ -20,7 +20,7 @@
along with this program. If not, see .
*/
/*
- *@Author: Moogra, Traitor
+ *@Author: Moogra, Traitor, Ronan
*@Map(s): All Dojo fighting maps
*@Function: Spawns dojo monsters and handles time
*/
@@ -28,21 +28,23 @@
function start(ms) {
ms.getPlayer().resetEnteredScript();
- var stage = (ms.getPlayer().getMap().getId() / 100) % 100;
- if (stage % 6 == 1)
- ms.getPlayer().setDojoStart();
- if (ms.getPlayer().getMap().getCharacters().size() == 1)
- ms.getPlayer().showDojoClock();
+ var stage = Math.floor(ms.getMapId() / 100) % 100;
+ var callBoss = false;
+
+ if (stage % 6 == 1) {
+ ms.getClient().getChannelServer().startDojoSchedule(ms.getMapId());
+ } else if(stage % 6 == 0) {
+ ms.getClient().getChannelServer().dismissDojoSchedule(ms.getMapId(), ms.getParty());
+ }
+
+ callBoss = ms.getClient().getChannelServer().setDojoProgress(ms.getMapId());
+
if (stage % 6 > 0) {
var realstage = stage - ((stage / 6) | 0);
- ms.dojoEnergy();
var mob = ms.getMonsterLifeFactory(9300183 + realstage);
- if (mob != null && ms.getPlayer().getMap().getMonsterById(9300183 + realstage) == null && ms.getPlayer().getMap().getMonsterById(9300216) == null) {
+ if (callBoss && mob != null && ms.getPlayer().getMap().getMonsterById(9300216) == null) {
mob.setBoss(false);
ms.getPlayer().getMap().spawnDojoMonster(mob);
- ms.playSound("Dojang/start");
- ms.showEffect("dojang/start/stage");
- ms.showEffect("dojang/start/number/" + realstage);
}
}
}
\ No newline at end of file
diff --git a/scripts/map/onUserEnter/101000301.js b/scripts/map/onUserEnter/101000301.js
index c5ad952c9a..93379e2bca 100644
--- a/scripts/map/onUserEnter/101000301.js
+++ b/scripts/map/onUserEnter/101000301.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "Boats";
var toMap = 200090010;
diff --git a/scripts/map/onUserEnter/200000112.js b/scripts/map/onUserEnter/200000112.js
index 89182ac142..b1bbdabe14 100644
--- a/scripts/map/onUserEnter/200000112.js
+++ b/scripts/map/onUserEnter/200000112.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "Boats";
var toMap = 200090000;
diff --git a/scripts/map/onUserEnter/200000122.js b/scripts/map/onUserEnter/200000122.js
index 93062227d3..9bafa6c98a 100644
--- a/scripts/map/onUserEnter/200000122.js
+++ b/scripts/map/onUserEnter/200000122.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "Trains";
var toMap = 200090100;
diff --git a/scripts/map/onUserEnter/200000132.js b/scripts/map/onUserEnter/200000132.js
index 4d7045004a..c57f3a831c 100644
--- a/scripts/map/onUserEnter/200000132.js
+++ b/scripts/map/onUserEnter/200000132.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "Cabin";
var toMap = 200090200;
diff --git a/scripts/map/onUserEnter/200000152.js b/scripts/map/onUserEnter/200000152.js
index 332b0e835e..670f477205 100644
--- a/scripts/map/onUserEnter/200000152.js
+++ b/scripts/map/onUserEnter/200000152.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "Genie";
var toMap = 200090400;
diff --git a/scripts/map/onUserEnter/220000111.js b/scripts/map/onUserEnter/220000111.js
index 404fdac38a..5fe014fafb 100644
--- a/scripts/map/onUserEnter/220000111.js
+++ b/scripts/map/onUserEnter/220000111.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "Trains";
var toMap = 200090110;
diff --git a/scripts/map/onUserEnter/240000111.js b/scripts/map/onUserEnter/240000111.js
index 8d0b6e82f2..1e44537389 100644
--- a/scripts/map/onUserEnter/240000111.js
+++ b/scripts/map/onUserEnter/240000111.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "Cabin";
var toMap = 200090210;
diff --git a/scripts/map/onUserEnter/260000110.js b/scripts/map/onUserEnter/260000110.js
index f06af751eb..ee9df7e083 100644
--- a/scripts/map/onUserEnter/260000110.js
+++ b/scripts/map/onUserEnter/260000110.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "Genie";
var toMap = 200090410;
diff --git a/scripts/map/onUserEnter/540010001.js b/scripts/map/onUserEnter/540010001.js
index a513d8cfe3..295800eef6 100644
--- a/scripts/map/onUserEnter/540010001.js
+++ b/scripts/map/onUserEnter/540010001.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "AirPlane";
var toMap = 540010002;
diff --git a/scripts/map/onUserEnter/540010100.js b/scripts/map/onUserEnter/540010100.js
index 9f0adcb131..2652a1770f 100644
--- a/scripts/map/onUserEnter/540010100.js
+++ b/scripts/map/onUserEnter/540010100.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "AirPlane";
var toMap = 540010101;
diff --git a/scripts/map/onUserEnter/600010002.js b/scripts/map/onUserEnter/600010002.js
index be4975d5be..752b57743f 100644
--- a/scripts/map/onUserEnter/600010002.js
+++ b/scripts/map/onUserEnter/600010002.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "Subway";
var toMap = 600010003;
diff --git a/scripts/map/onUserEnter/600010004.js b/scripts/map/onUserEnter/600010004.js
index a4920ab50f..c33a3cfcad 100644
--- a/scripts/map/onUserEnter/600010004.js
+++ b/scripts/map/onUserEnter/600010004.js
@@ -1,5 +1,3 @@
-importPackage(Packages.tools);
-
var eventName = "Subway";
var toMap = 600010005;
diff --git a/scripts/map/onUserEnter/dojang_1st.js b/scripts/map/onUserEnter/dojang_1st.js
index 75249a6ac7..8fc8cbd0ab 100644
--- a/scripts/map/onUserEnter/dojang_1st.js
+++ b/scripts/map/onUserEnter/dojang_1st.js
@@ -20,8 +20,23 @@
along with this program. If not, see .
*/
/*
- * @author Traitor
- */
-function start(ms) {
+ *@Author: Moogra, Traitor, Ronan
+ *@Map(s): All Dojo fighting maps
+ *@Function: Displays info for the player when entering a dojo map
+*/
+
+function start(ms) {
+ ms.getPlayer().resetEnteredScript();
+ var stage = Math.floor(ms.getPlayer().getMap().getId() / 100) % 100;
+
+ ms.getPlayer().showDojoClock();
+ if (stage % 6 > 0) {
+ var realstage = stage - ((stage / 6) | 0);
+ ms.dojoEnergy();
+
+ ms.playSound("Dojang/start");
+ ms.showEffect("dojang/start/stage");
+ ms.showEffect("dojang/start/number/" + realstage);
+ }
}
\ No newline at end of file
diff --git a/scripts/npc/1072000.js b/scripts/npc/1072000.js
index 4c1e8749ad..54966d6615 100644
--- a/scripts/npc/1072000.js
+++ b/scripts/npc/1072000.js
@@ -24,47 +24,57 @@
Victoria Road : West Rocky Mountain IV (102020300)
*/
-var status = 0;
-
+var status;
+
function start() {
- if (cm.isQuestCompleted(100004)) {
- cm.sendOk("You're truly a hero!");
- cm.dispose();
- } else if (cm.isQuestStarted(100003)) {
- cm.completeQuest(100003);
- cm.sendNext("Hmmm...it is definitely the letter from #bDances with Balrog#k...so you came all the way here to take the test and make the 2nd job advancement as the warrior. Alright, I'll explain the test to you. Don't sweat it too much, it's not that complicated.");
- } else {
- cm.sendOk("I can show you the way once your ready for it.");
- cm.dispose();
- }
+ status = -1;
+ action(1, 0, 0);
}
function action(mode, type, selection) {
- if (mode == -1)
- cm.dispose();
- else {
- if (mode == 1)
- status++;
- else
- status--;
- if (status == 0 && cm.isQuestStarted(100003))
- status = 5;
- else if (status == 1)
- cm.sendNextPrev("I'll send you to a hidden map. You'll see monsters you don't normally see. They look the same like the regular ones, but with a totally different attitude. They neither boost your experience level nor provide you with item.");
- else if (status == 2)
- cm.sendNextPrev("You'll be able to acquire a marble called #b#t4031013##k while knocking down those monsters. It is a special marble made out of their sinister, evil minds. Collect 30 of those, and then go talk to a colleague of mine in there. That's how you pass the test.");
- else if (status == 3)
- cm.sendYesNo("Once you go inside, you can't leave until you take care of your mission. If you die, your experience level will decrease..so you better really buckle up and get ready...well, do you want to go for it now?");
- else if (status == 4) {
- cm.sendNext("Alright I'll let you in! Defeat the monsters inside, collect 30 Dark Marbles, then strike up a conversation with a colleague of mine inside. He'll give you #bThe Proof of a Hero#k, the proof that you've passed the test. Best of luck to you.");
- cm.startQuest(100004);
- cm.gainItem(4031008, -1);
- }
- else if (status == 5) {
- cm.warp(108000300, 0);
- cm.dispose();
- } else {
- cm.dispose();
- }
- }
-}
\ No newline at end of file
+ if (mode == -1) {
+ cm.dispose();
+ } else {
+ if (mode == 0 && type > 0) {
+ cm.dispose();
+ return;
+ }
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if(status == 0) {
+ if (cm.isQuestCompleted(100004)) {
+ cm.sendOk("You're truly a hero!");
+ cm.dispose();
+ } else if(cm.isQuestCompleted(100003)) {
+ cm.sendNext("Alright I'll let you in! Defeat the monsters inside, collect 30 Dark Marbles, then strike up a conversation with a colleague of mine inside. He'll give you #bThe Proof of a Hero#k, the proof that you've passed the test. Best of luck to you.");
+ status = 4;
+ } else if (cm.isQuestStarted(100003)) {
+ cm.sendNext("Hmmm...it is definitely the letter from #bDances with Balrog#k...so you came all the way here to take the test and make the 2nd job advancement as the warrior. Alright, I'll explain the test to you. Don't sweat it too much, it's not that complicated.");
+ } else {
+ cm.sendOk("I can show you the way once your ready for it.");
+ cm.dispose();
+ }
+ }
+ else if (status == 1)
+ cm.sendNextPrev("I'll send you to a hidden map. You'll see monsters you don't normally see. They look the same like the regular ones, but with a totally different attitude. They neither boost your experience level nor provide you with item.");
+ else if (status == 2)
+ cm.sendNextPrev("You'll be able to acquire a marble called #b#t4031013##k while knocking down those monsters. It is a special marble made out of their sinister, evil minds. Collect 30 of those, and then go talk to a colleague of mine in there. That's how you pass the test.");
+ else if (status == 3)
+ cm.sendYesNo("Once you go inside, you can't leave until you take care of your mission. If you die, your experience level will decrease..so you better really buckle up and get ready...well, do you want to go for it now?");
+ else if (status == 4) {
+ cm.sendNext("Alright I'll let you in! Defeat the monsters inside, collect 30 Dark Marbles, then strike up a conversation with a colleague of mine inside. He'll give you #bThe Proof of a Hero#k, the proof that you've passed the test. Best of luck to you.");
+ cm.completeQuest(100003);
+ cm.startQuest(100004);
+ cm.gainItem(4031008, -1);
+ }
+ else if (status == 5) {
+ cm.warp(108000300, 0);
+ cm.dispose();
+ } else {
+ cm.dispose();
+ }
+ }
+}
diff --git a/scripts/npc/1072001.js b/scripts/npc/1072001.js
index bef39ce7e8..71c638904e 100644
--- a/scripts/npc/1072001.js
+++ b/scripts/npc/1072001.js
@@ -24,46 +24,56 @@
Victoria Road : The Forest North of Ellinia (101020000)
*/
-var status = 0;
-
+var status;
+
function start() {
- if (cm.isQuestCompleted(100007)) {
- cm.sendOk("You're truly a hero!");
- cm.dispose();
- } else if (cm.isQuestStarted(100006)) {
- cm.completeQuest(100006);
- cm.sendNext("Hmmm...it is definitely the letter from #bGrendell the Really Old#k...so you came all the way here to take the test and make the 2nd job advancement as a magician. Alright, I'll explain the test to you. Don't sweat it too much, it's not that complicated.")
- } else {
- cm.sendOk("I can show you the way once your ready for it.");
- cm.dispose();
- }
+ status = -1;
+ action(1, 0, 0);
}
function action(mode, type, selection) {
- if (mode == -1)
- cm.dispose();
- else {
- if (mode == 1)
- status++;
- else
- status--;
- if (status == 0 && cm.isQuestStarted(100007))
- status = 5;
- else if (status == 1)
- cm.sendNextPrev("I'll send you to a hidden map. You'll see monsters you don't normally see. They look the same like the regular ones, but with a totally different attitude. They neither boost your experience level nor provide you with item.");
- else if (status == 2)
- cm.sendNextPrev("You'll be able to acquire a marble called #b#t4031013##k while knocking down those monsters. It is a special marble made out of their sinister, evil minds. Collect 30 of those, and then go talk to a colleague of mine in there. That's how you pass the test.");
- else if (status == 3)
- cm.sendYesNo("Once you go inside, you can't leave until you take care of your mission. If you die, your experience level will decrease.. So you better really buckle up and get ready...well, do you want to go for it now?");
- else if (status == 4) {
- cm.sendNext("Alright I'll let you in! Defeat the monsters inside, collect 30 Dark Marbles, then strike up a conversation with a colleague of mine inside. He'll give you #bThe Proof of a Hero#k, the proof that you've passed the test. Best of luck to you.");
- cm.startQuest(100007);
- cm.gainItem(4031009, -1);
- }
- else if (status == 5) {
- cm.warp(108000200, 0);
- cm.dispose();
- }
- else cm.dispose();
- }
-}
\ No newline at end of file
+ if (mode == -1) {
+ cm.dispose();
+ } else {
+ if (mode == 0 && type > 0) {
+ cm.dispose();
+ return;
+ }
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if(status == 0) {
+ if (cm.isQuestCompleted(100007)) {
+ cm.sendOk("You're truly a hero!");
+ cm.dispose();
+ } else if(cm.isQuestCompleted(100006)) {
+ cm.sendNext("Alright I'll let you in! Defeat the monsters inside, collect 30 Dark Marbles, then strike up a conversation with a colleague of mine inside. He'll give you #bThe Proof of a Hero#k, the proof that you've passed the test. Best of luck to you.");
+ status = 4;
+ } else if (cm.isQuestStarted(100006)) {
+ cm.sendNext("Hmmm...it is definitely the letter from #bGrendell the Really Old#k...so you came all the way here to take the test and make the 2nd job advancement as a magician. Alright, I'll explain the test to you. Don't sweat it too much, it's not that complicated.");
+ } else {
+ cm.sendOk("I can show you the way once your ready for it.");
+ cm.dispose();
+ }
+ }
+ else if(status == 1)
+ cm.sendNextPrev("I'll send you to a hidden map. You'll see monsters you don't normally see. They look the same like the regular ones, but with a totally different attitude. They neither boost your experience level nor provide you with item.");
+ else if (status == 2)
+ cm.sendNextPrev("You'll be able to acquire a marble called #b#t4031013##k while knocking down those monsters. It is a special marble made out of their sinister, evil minds. Collect 30 of those, and then go talk to a colleague of mine in there. That's how you pass the test.");
+ else if (status == 3)
+ cm.sendYesNo("Once you go inside, you can't leave until you take care of your mission. If you die, your experience level will decrease.. So you better really buckle up and get ready...well, do you want to go for it now?");
+ else if (status == 4) {
+ cm.sendNext("Alright I'll let you in! Defeat the monsters inside, collect 30 Dark Marbles, then strike up a conversation with a colleague of mine inside. He'll give you #bThe Proof of a Hero#k, the proof that you've passed the test. Best of luck to you.");
+ cm.completeQuest(100006);
+ cm.startQuest(100007);
+ cm.gainItem(4031009, -1);
+ }
+ else if (status == 5) {
+ cm.warp(108000200, 0);
+ cm.dispose();
+ }
+ else cm.dispose();
+ }
+}
diff --git a/scripts/npc/1072002.js b/scripts/npc/1072002.js
index 34a9df31dc..dad871dbfa 100644
--- a/scripts/npc/1072002.js
+++ b/scripts/npc/1072002.js
@@ -24,45 +24,56 @@ Hunter Job Advancement
Warning Street : The Road to the Dungeon (106010000)
*/
-var status = 0;
-
+var status;
+
function start() {
- if (cm.isQuestCompleted(100001)) {
- cm.sendOk("You're truly a hero!");
- cm.dispose();
- } else if (cm.isQuestStarted(100000)) {
- cm.completeQuest(100000);
- cm.sendNext("Oh, isn't this a letter from #bAthena#k?");
- } else {
- cm.sendOk("I can show you the way once your ready for it.");
- cm.dispose();
- }
+ status = -1;
+ action(1, 0, 0);
}
function action(mode, type, selection) {
- if (mode == -1)
- cm.dispose();
- else {
- if (mode == 1)
- status++;
- else
- status--;
- if (status == 0 && cm.isQuestStarted(100001))
- status = 4;
- if (status == 1)
- cm.sendNextPrev("So you want to prove your skills? Very well...")
- else if (status == 2)
- cm.sendAcceptDecline("I will give you a chance if you're ready.");
- else if (status == 3) {
- cm.startQuest(100001);
- cm.gainItem(4031010, -1);
- cm.sendOk("You will have to collect me #b30 #t4031013##k. Good luck.")
- } else if (status == 4) {
- cm.warp(108000100);
- cm.dispose();
+ if (mode == -1) {
+ cm.dispose();
+ } else {
+ if (mode == 0 && type > 0) {
+ cm.dispose();
+ return;
+ }
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if (status == 0) {
+ if (cm.isQuestCompleted(100001)) {
+ cm.sendOk("You're truly a hero!");
+ cm.dispose();
+ } else if(cm.isQuestCompleted(100000)) {
+ cm.sendNext("Alright I'll let you in! Defeat the monsters inside, collect 30 Dark Marbles, then strike up a conversation with a colleague of mine inside. He'll give you #bThe Proof of a Hero#k, the proof that you've passed the test. Best of luck to you.");
+ status = 3;
+ } else if (cm.isQuestStarted(100000)) {
+ cm.sendNext("Oh, isn't this a letter from #bAthena#k?");
+ } else {
+ cm.sendOk("I can show you the way once your ready for it.");
+ cm.dispose();
+ }
+ }
+
+ else if (status == 1)
+ cm.sendNextPrev("So you want to prove your skills? Very well...");
+ else if (status == 2)
+ cm.sendAcceptDecline("I will give you a chance if you're ready.");
+ else if (status == 3) {
+ cm.completeQuest(100000);
+ cm.startQuest(100001);
+ cm.gainItem(4031010, -1);
+ cm.sendOk("You will have to collect me #b30 #t4031013##k. Good luck.")
+ } else if (status == 4) {
+ cm.warp(108000100);
+ cm.dispose();
+ }
+ else {
+ cm.dispose();
+ }
}
- else {
- cm.dispose();
- }
- }
}
\ No newline at end of file
diff --git a/scripts/npc/1072003.js b/scripts/npc/1072003.js
index dfecbbe1cd..a23fcbf7b0 100644
--- a/scripts/npc/1072003.js
+++ b/scripts/npc/1072003.js
@@ -24,45 +24,56 @@
Victoria Road : Construction Site North of Kerning City (102040000)
*/
-var status = 0;
-
+var status;
+
function start() {
- if (cm.isQuestCompleted(100010)) {
- cm.sendOk("You're truly a hero!");
- cm.dispose();
- } else if (cm.isQuestStarted(100009)) {
- cm.completeQuest(100009);
- cm.sendNext("Oh, isn't this a letter from the #bDark Lord#k?");
- } else {
- cm.sendOk("I can show you the way once your ready for it.");
- cm.dispose();
- }
+ status = -1;
+ action(1, 0, 0);
}
function action(mode, type, selection) {
- if (mode == -1)
- cm.dispose();
- else {
- if (mode == 1)
- status++;
- else
- status--;
- if (status == 0 && cm.isQuestStarted(100010))
- status = 4;
- if (status == 1)
- cm.sendNextPrev("So you want to prove your skills? Very well...")
- else if (status == 2)
- cm.sendAcceptDecline("I will give you a chance if you're ready.");
- else if (status == 3) {
- cm.sendOk("You will have to collect me #b30 #t4031013##k. Good luck.")
- cm.startQuest(100010);
- cm.gainItem(4031011, -1);
- } else if (status == 4) {
- cm.warp(108000400, 0);
- cm.dispose();
+ if (mode == -1) {
+ cm.dispose();
+ } else {
+ if (mode == 0 && type > 0) {
+ cm.dispose();
+ return;
+ }
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if(status == 0) {
+ if (cm.isQuestCompleted(100010)) {
+ cm.sendOk("You're truly a hero!");
+ cm.dispose();
+ } else if(cm.isQuestCompleted(100009)) {
+ cm.sendNext("Alright I'll let you in! Defeat the monsters inside, collect 30 Dark Marbles, then strike up a conversation with a colleague of mine inside. He'll give you #bThe Proof of a Hero#k, the proof that you've passed the test. Best of luck to you.");
+ status = 3;
+ } else if (cm.isQuestStarted(100009)) {
+ cm.sendNext("Oh, isn't this a letter from the #bDark Lord#k?");
+ } else {
+ cm.sendOk("I can show you the way once your ready for it.");
+ cm.dispose();
+ }
+ }
+
+ else if(status == 1)
+ cm.sendNextPrev("So you want to prove your skills? Very well...");
+ else if (status == 2)
+ cm.sendAcceptDecline("I will give you a chance if you're ready.");
+ else if (status == 3) {
+ cm.sendOk("You will have to collect me #b30 #t4031013##k. Good luck.");
+ cm.completeQuest(100009);
+ cm.startQuest(100010);
+ cm.gainItem(4031011, -1);
+ } else if (status == 4) {
+ cm.warp(108000400, 0);
+ cm.dispose();
+ }
+ else {
+ cm.dispose();
+ }
}
- else {
- cm.dispose();
- }
- }
-}
\ No newline at end of file
+}
diff --git a/scripts/npc/1072004.js b/scripts/npc/1072004.js
index b037cdb7e8..b5971abba9 100644
--- a/scripts/npc/1072004.js
+++ b/scripts/npc/1072004.js
@@ -19,21 +19,45 @@
along with this program. If not, see .
*/
+var status;
+var completed;
+
function start() {
- if (cm.haveItem(4031013,30)) {
- cm.removeAll(4031013);
- cm.completeQuest(100004);
- cm.startQuest(100005);
- cm.gainItem(4031012);
- cm.sendNext("Ohhhhh.. you collected all 30 Dark Marbles!! It should have been difficult... just incredible! Alright. You've passed the test and for that, I'll reward you #bThe Proof of a Hero#k. Take that and go back to Perion.");
- } else {
- cm.sendSimple("You will have to collect me #b30 #t4031013##k. Good luck. \r\n#b#L1#I would like to leave#l");
- cm.dispose();
- }
+ status = -1;
+ action(1, 0, 0);
}
function action(mode, type, selection) {
- if (mode > 0)
- cm.warp(102020300, 0);
- cm.dispose();
-}
\ No newline at end of file
+ if (mode == -1) {
+ cm.dispose();
+ } else {
+ if (mode == 0 && type > 0) {
+ cm.dispose();
+ return;
+ }
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if(status == 0) {
+ if (cm.haveItem(4031013,30)) {
+ completed = true;
+ cm.sendNext("Ohhhhh.. you collected all 30 Dark Marbles!! It should have been difficult... just incredible! Alright. You've passed the test and for that, I'll reward you #bThe Proof of a Hero#k. Take that and go back to Perion.");
+ } else {
+ completed = false;
+ cm.sendSimple("You will have to collect me #b30 #t4031013##k. Good luck. \r\n#b#L1#I would like to leave#l");
+ }
+ } else if(status == 1) {
+ if(completed) {
+ cm.removeAll(4031013);
+ cm.completeQuest(100004);
+ cm.startQuest(100005);
+ cm.gainItem(4031012);
+ }
+
+ cm.warp(102020300, 2);
+ cm.dispose();
+ }
+ }
+}
diff --git a/scripts/npc/1072005.js b/scripts/npc/1072005.js
index 2fc0fa6c02..c645a0bf37 100644
--- a/scripts/npc/1072005.js
+++ b/scripts/npc/1072005.js
@@ -19,21 +19,45 @@
along with this program. If not, see .
*/
+var status;
+var completed;
+
function start() {
- if (cm.haveItem(4031013,30)) {
- cm.removeAll(4031013);
- cm.completeQuest(100007);
- cm.startQuest(100008);
- cm.gainItem(4031012);
- cm.sendNext("Ohhhhh.. you collected all 30 Dark Marbles!! It should have been difficult.. just incredible! Alright. You've passed the test and for that, I'll reward you #bThe Proof of a Hero#k. Take that and go back to Ellinia.");
- } else {
- cm.sendSimple("You will have to collect me #b30 #t4031013##k. Good luck. \r\n#b#L1#I would like to leave#l");
- cm.dispose();
- }
+ status = -1;
+ action(1, 0, 0);
}
function action(mode, type, selection) {
- if (mode > 0)
- cm.warp(101020000, 1);
- cm.dispose();
-}
\ No newline at end of file
+ if (mode == -1) {
+ cm.dispose();
+ } else {
+ if (mode == 0 && type > 0) {
+ cm.dispose();
+ return;
+ }
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if(status == 0) {
+ if (cm.haveItem(4031013,30)) {
+ completed = true;
+ cm.sendNext("Ohhhhh.. you collected all 30 Dark Marbles!! It should have been difficult.. just incredible! Alright. You've passed the test and for that, I'll reward you #bThe Proof of a Hero#k. Take that and go back to Ellinia.");
+ } else {
+ completed = false;
+ cm.sendSimple("You will have to collect me #b30 #t4031013##k. Good luck. \r\n#b#L1#I would like to leave#l");
+ }
+ } else if(status == 1) {
+ if(completed) {
+ cm.removeAll(4031013);
+ cm.completeQuest(100007);
+ cm.startQuest(100008);
+ cm.gainItem(4031012);
+ }
+
+ cm.warp(101020000, 1);
+ cm.dispose();
+ }
+ }
+}
diff --git a/scripts/npc/1072006.js b/scripts/npc/1072006.js
index f223b3ab6e..9f9f4b35a1 100644
--- a/scripts/npc/1072006.js
+++ b/scripts/npc/1072006.js
@@ -31,21 +31,45 @@
---------------------------------------------------------------------------------------------------
**/
+var status;
+var completed;
+
function start() {
- if (cm.haveItem(4031013,30)) {
- cm.removeAll(4031013);
- cm.completeQuest(100001);
- cm.startQuest(100002);
- cm.gainItem(4031012);
- cm.sendOk("You're a true hero! Take this and Athena will acknowledge you.");
- } else {
- cm.sendSimple("You will have to collect me #b30 #t4031013##k. Good luck. \r\n#b#L1#I would like to leave#l")
- cm.dispose();
- }
+ status = -1;
+ action(1, 0, 0);
}
function action(mode, type, selection) {
- if (mode > 0)
- cm.warp(106010000, 1);
- cm.dispose();
-}
\ No newline at end of file
+ if (mode == -1) {
+ cm.dispose();
+ } else {
+ if (mode == 0 && type > 0) {
+ cm.dispose();
+ return;
+ }
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if(status == 0) {
+ if (cm.haveItem(4031013,30)) {
+ completed = true;
+ cm.sendOk("You're a true hero! Take this and Athena will acknowledge you.");
+ } else {
+ completed = false;
+ cm.sendSimple("You will have to collect me #b30 #t4031013##k. Good luck. \r\n#b#L1#I would like to leave#l");
+ }
+ } else if(status == 1) {
+ if(completed) {
+ cm.removeAll(4031013);
+ cm.completeQuest(100001);
+ cm.startQuest(100002);
+ cm.gainItem(4031012);
+ }
+
+ cm.warp(106010000, 9);
+ cm.dispose();
+ }
+ }
+}
diff --git a/scripts/npc/1072007.js b/scripts/npc/1072007.js
index d878d844fe..c894121c4b 100644
--- a/scripts/npc/1072007.js
+++ b/scripts/npc/1072007.js
@@ -29,21 +29,46 @@
1.0 - First Version by Unknown
---------------------------------------------------------------------------------------------------
*/
+
+var status;
+var completed;
+
function start() {
- if (cm.haveItem(4031013,30)) {
- cm.removeAll(4031013);
- cm.completeQuest(100010);
- cm.startQuest(100011);
- cm.gainItem(4031012);
- cm.sendOk("You're a true hero! Take this and the Dark Lord will acknowledge you.");
- } else {
- cm.sendSimple("You will have to collect me #b30 #t4031013##k. Good luck. \r\n#b#L1#I would like to leave#l")
- cm.dispose();
- }
+ status = -1;
+ action(1, 0, 0);
}
function action(mode, type, selection) {
- if (mode == 1)
- cm.warp(102040000, 0);
- cm.dispose();
-}
\ No newline at end of file
+ if (mode == -1) {
+ cm.dispose();
+ } else {
+ if (mode == 0 && type > 0) {
+ cm.dispose();
+ return;
+ }
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if(status == 0) {
+ if (cm.haveItem(4031013,30)) {
+ completed = true;
+ cm.sendOk("You're a true hero! Take this and the Dark Lord will acknowledge you.");
+ } else {
+ completed = false;
+ cm.sendSimple("You will have to collect me #b30 #t4031013##k. Good luck. \r\n#b#L1#I would like to leave#l");
+ }
+ } else if(status == 1) {
+ if(completed) {
+ cm.removeAll(4031013);
+ cm.completeQuest(100010);
+ cm.startQuest(100011);
+ cm.gainItem(4031012);
+ }
+
+ cm.warp(102040000, 9);
+ cm.dispose();
+ }
+ }
+}
diff --git a/scripts/npc/2091005.js b/scripts/npc/2091005.js
index e8014c8a26..5cba2151d1 100644
--- a/scripts/npc/2091005.js
+++ b/scripts/npc/2091005.js
@@ -97,7 +97,7 @@ function action(mode, type, selection) {
if(avDojo < 0) {
if(avDojo == -1) cm.sendOk("All Dojo's are being used already. Wait for awhile before trying again.");
- else cm.sendOk("Your party already is using the dojo. Wait for them to finish to enter.");
+ else cm.sendOk("Your party is already using the dojo. Wait for them to finish to enter.");
}
else {
cm.getClient().getChannelServer().getMapFactory().getMap(925020010 + avDojo).resetMapObjects();
@@ -119,7 +119,7 @@ function action(mode, type, selection) {
if(avDojo < 0) {
if(avDojo == -1) cm.sendOk("All Dojo's are being used already. Wait for awhile before trying again.");
- else cm.sendOk("Your party already is using the dojo. Wait for them to finish to enter.");
+ else cm.sendOk("Your party is already using the dojo. Wait for them to finish to enter.");
cm.getPlayer().setDojoStage(dojoWarp);
}
else {
@@ -136,7 +136,7 @@ function action(mode, type, selection) {
if(avDojo < 0) {
if(avDojo == -1) cm.sendOk("All Dojo's are being used already. Wait for awhile before trying again.");
- else cm.sendOk("Your party already is using the dojo. Wait for them to finish to enter.");
+ else cm.sendOk("Your party is already using the dojo. Wait for them to finish to enter.");
}
else {
cm.getClient().getChannelServer().resetDojoMap(925020100 + avDojo);
@@ -174,7 +174,7 @@ function action(mode, type, selection) {
if(avDojo < 0) {
if(avDojo == -1) cm.sendOk("All Dojo's are being used already. Wait for awhile before trying again.");
- else cm.sendOk("Your party already is using the dojo. Wait for them to finish to enter.");
+ else cm.sendOk("Your party is already using the dojo. Wait for them to finish to enter.");
}
else {
cm.getClient().getChannelServer().resetDojoMap(925030100 + avDojo);
@@ -302,7 +302,7 @@ function action(mode, type, selection) {
if(avDojo < 0) {
if(avDojo == -1) cm.sendOk("All Dojo's are being used already. Wait for awhile before trying again.");
- else cm.sendOk("Your party already is using the dojo. Wait for them to finish to enter.");
+ else cm.sendOk("Your party already registered for the dojo. Wait for the end of the registration time to enter again.");
}
else {
var baseStg = hasParty ? 925030000 : 925020000;
diff --git a/scripts/npc/2112000.js b/scripts/npc/2112000.js
new file mode 100644
index 0000000000..02760b8b28
--- /dev/null
+++ b/scripts/npc/2112000.js
@@ -0,0 +1,120 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/* Yulete
+ Yulete's Office (926100203)
+ Magatia NPC
+ */
+
+var status;
+
+importPackage(Packages.server.life);
+
+function start() {
+ status = -1;
+ action(1, 0, 0);
+}
+
+function playersTooClose() {
+ var npcpos = cm.getMap().getMapObject(cm.getNpcObjectId()).getPosition();
+ var listchr = cm.getMap().getPlayers();
+
+ for (var iterator = listchr.iterator(); iterator.hasNext();) {
+ var chr = iterator.next();
+
+ var chrpos = chr.getPosition();
+ if(Math.sqrt( Math.pow((npcpos.getX() - chrpos.getX()), 2) + Math.pow((npcpos.getY() - chrpos.getY()), 2) ) < 310) return true;
+ }
+
+ return false;
+}
+
+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--;
+
+ var eim = cm.getEventInstance();
+
+ if(cm.getMapId() == 926100203) {
+ if(status == 0) {
+ var state = eim.getIntProperty("yuleteTalked");
+
+ if(state == -1) {
+ cm.sendOk("Heh, it seems you guys have company. Have fun with them, as I politely request my leave.");
+
+ } else if (playersTooClose() || eim.getIntProperty("npcShocked") == 0) {
+ cm.sendOk("Oh, hello there. I have been #bmonitoring your moves#k since you guys entered this perimeter. Quite the feat reaching here, I commend all of you. Now, now, look at the time, I've got an appointment right now, I'm afraid I will need to request my leave. But worry not, my #raccessors#k will deal with all of you. Now, if you permit me, I'm leaving now.");
+
+ eim.setIntProperty("yuleteTalked", -1);
+ } else {
+ cm.sendOk("... Hah! What, wh-- How did you get here?! I though I had sealed all paths here! No matter, this situation will be resolved soon. Guys: DEPLOY the #rmaster weapon#k!! You! Yes, you. Don't you think this ends here, look back at your companions, they need some help! I'll be retreating for now.");
+
+ eim.setIntProperty("yuleteTalked", 1);
+ }
+ }
+
+ cm.dispose();
+ } else {
+ if(status == 0) {
+ if(eim.isEventCleared()) {
+ cm.sendOk("Nooooo... I have been beated? But how? Everything I did was for the sake of the development of a greater alchemy! You can't jail me, I did what everybody standing in a place like mine would do! But no, they simply decided to damp up the progress of the science JUST BECAUSE it was deemed dangerous??? Oh, come on!");
+ } else {
+ var state = eim.getIntProperty("yuletePassed");
+
+ if(state == -1) {
+ cm.sendOk("Behold! The pinnacle of Magatia's alchemy studies! Hahahahahahaha...");
+ } else if(state == 0) {
+ cm.sendOk("You guys are such a pain, geez. Very well, I present you my newest weapon, brought by the finest alchemy, #rFrankenroid#k.");
+ eim.dropMessage(5, "Yulete: I present you my newest weapon, brought by the finest alchemy, Frankenroid!");
+
+ var mapobj = eim.getMapInstance(926100401);
+ var bossobj = MapleLifeFactory.getMonster(9300139);
+ mapobj.spawnMonsterOnGroundBelow(bossobj, new Packages.java.awt.Point(250, 100));
+
+ eim.setIntProperty("statusStg7", 1);
+ eim.setIntProperty("yuletePassed", -1);
+ } else {
+ cm.sendOk("You guys are such a pain, geez. Very well, I present you my newest weapon, brought by the finest combined alchemy of Alcadno's and Zenumist's, those that the boring people of Magatia societies have banned to bring along, the #rmighty Frankenroid#k!");
+ eim.dropMessage(5, "Yulete: I present you my newest weapon, brought by the finest combined alchemy of Alcadno's and Zenumist's, those that the boring people of Magatia societies have banned to bring along, the mighty Frankenroid!!");
+
+ var mapobj = eim.getMapInstance(926100401);
+ var bossobj = MapleLifeFactory.getMonster(9300140);
+ mapobj.spawnMonsterOnGroundBelow(bossobj, new Packages.java.awt.Point(250, 100));
+
+ eim.setIntProperty("statusStg7", 2);
+ eim.setIntProperty("yuletePassed", -1);
+ }
+ }
+ }
+
+ cm.dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/npc/2112001.js b/scripts/npc/2112001.js
new file mode 100644
index 0000000000..2c3d10e5ba
--- /dev/null
+++ b/scripts/npc/2112001.js
@@ -0,0 +1,58 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/* Yulete
+ Traces of Yulete (926100500)
+ Talking
+ */
+
+var status;
+
+function start() {
+ status = -1;
+ action(1, 0, 0);
+}
+
+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) {
+ cm.sendSimple("Defeated... So, that's how Yulete's legacy will reach it's end, oh how woe is this... Hope you guys are happy now, as I will pass my days rotting in a dark cellar. Everything I've done was for the sake of Magatia!! (sob)\r\n #Ll# Hey man, come now, cheer up! There were not many damages that couldn't be resolved here. Magatia created these forbidding laws to protect it's people from the undoings a greater power like this would do if it reaches wrong hands. That's not the end for you, accept rehabilitation from the Societies and everything will work out!#l");
+ } else if (status == 1){
+ cm.sendNext("... Are you guys forgiving me after all that I've done? Well, I guess I was blinded by the great source of power that could be discovered that way, maybe they're right saying a human can't simply fathom on the usage of those powers without corrupting theirselves along the way... I am profoundly sorry, and to make myself up with everyone I'm willing to help the Societies again wherever I can on the progress of alchemy. Thank you.");
+ } else {
+ if(!cm.isQuestCompleted(7770)) cm.completeQuest(7770);
+
+ cm.warp(926100600);
+ cm.dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/npc/2112003.js b/scripts/npc/2112003.js
new file mode 100644
index 0000000000..93f7658615
--- /dev/null
+++ b/scripts/npc/2112003.js
@@ -0,0 +1,77 @@
+/**
+ * @author: Ronan
+ * @npc: Juliet
+ * @map: Magatia - Alcadno - Hidden Room (261000021)
+ * @func: Magatia PQ (Alcadno)
+*/
+
+var status = 0;
+var em = null;
+
+function start() {
+ status = -1;
+ action(1, 0, 0);
+}
+
+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(cm.getMapId() != 261000021) {
+ if(status == 0) {
+ cm.sendYesNo("We must keep fighting to save Romeo, please keep your pace. If you are not feeling so well to continue, your companions and I will understand... So, are you going to retreat?");
+ } else if(status == 1) {
+ cm.warp(926110700);
+ cm.dispose();
+ }
+ } else {
+ if (status == 0) {
+ em = cm.getEventManager("MagatiaPQ_A");
+ if(em == null) {
+ cm.sendOk("The Magatia PQ (Alcadno) has encountered an error.");
+ cm.dispose();
+ return;
+ }
+
+ cm.sendSimple("#e#b\r\n#k#n" + em.getProperty("party") + "\r\n\r\nMy beloved Romeo has been kidnapped! Although he is Zenumist's, I can't stand by and just see him suffer just because of this foolish clash. I need you and your colleagues help to save him! Please, help us!! Please have your #bparty leader#k talk to me.#b\r\n#L0#I want to participate in the party quest.\r\n#L1#I want to find party members.\r\n#L2#I would like to hear more details.");
+ } else if (status == 1) {
+ if (selection == 0) {
+ if (cm.getParty() == null) {
+ cm.sendOk("You can participate in the party quest only if you are in a party.");
+ cm.dispose();
+ } else if(!cm.isLeader()) {
+ cm.sendOk("Your party leader must talk to me to start this party quest.");
+ cm.dispose();
+ } else {
+ var eli = em.getEligibleParty(cm.getParty());
+ if(eli.size() > 0) {
+ if(!em.startInstance(cm.getParty(), cm.getPlayer().getMap(), 1)) {
+ cm.sendOk("Another party has already entered the #rParty Quest#k in this channel. Please try another channel, or wait for the current party to finish.");
+ }
+ }
+ else {
+ cm.sendOk("You cannot start this party quest yet, because either your party is not in the range size, some of your party members are not eligible to attempt it or they are not in this map. If you're having trouble finding party members, try Party Search.");
+ }
+
+ cm.dispose();
+ }
+ } else if (selection == 1) {
+ cm.sendOk("Try using a Super Megaphone or asking your buddies or guild to join!");
+ cm.dispose();
+ } else {
+ cm.sendOk("#e#b#k#n\r\nNot long ago, a scientist named Yulete has been banished from this town because of his researches of combined alchemies of Alcadno's and Zenumist's. Because of the immensurable amount of power coming from this combination, it is forbidden by law to study both. Yet, he ignored this law and got hands in both researches. As a result, he has been exiled.\r\nHe is now retaliating, already took my beloved one and his next target is me, as we are big pictures of Magatia, successors of both societies. But I'm not afraid. We must recover him at all costs!\r\n");
+ cm.dispose();
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/npc/2112004.js b/scripts/npc/2112004.js
new file mode 100644
index 0000000000..dca6b73e39
--- /dev/null
+++ b/scripts/npc/2112004.js
@@ -0,0 +1,77 @@
+/**
+ * @author: Ronan
+ * @npc: Romeo
+ * @map: Magatia - Zenumist - Hidden Room (261000011)
+ * @func: Magatia PQ (Zenumist)
+*/
+
+var status = 0;
+var em = null;
+
+function start() {
+ status = -1;
+ action(1, 0, 0);
+}
+
+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(cm.getMapId() != 261000011) {
+ if(status == 0) {
+ cm.sendYesNo("We must keep fighting to save Juliet, please keep your pace. If you are not feeling so well to continue, your companions and I will understand... So, are you going to retreat?");
+ } else if(status == 1) {
+ cm.warp(926100700);
+ cm.dispose();
+ }
+ } else {
+ if (status == 0) {
+ em = cm.getEventManager("MagatiaPQ_Z");
+ if(em == null) {
+ cm.sendOk("The Magatia PQ (Zenumist) has encountered an error.");
+ cm.dispose();
+ return;
+ }
+
+ cm.sendSimple("#e#b\r\n#k#n" + em.getProperty("party") + "\r\n\r\nMy beloved Juliet has been kidnapped! Although she is Alcadno's, I can't stand by and just see her suffer just because of this foolish clash. I need you and your colleagues help to save her! Please, help us!! Please have your #bparty leader#k talk to me.#b\r\n#L0#I want to participate in the party quest.\r\n#L1#I want to find party members.\r\n#L2#I would like to hear more details.");
+ } else if (status == 1) {
+ if (selection == 0) {
+ if (cm.getParty() == null) {
+ cm.sendOk("You can participate in the party quest only if you are in a party.");
+ cm.dispose();
+ } else if(!cm.isLeader()) {
+ cm.sendOk("Your party leader must talk to me to start this party quest.");
+ cm.dispose();
+ } else {
+ var eli = em.getEligibleParty(cm.getParty());
+ if(eli.size() > 0) {
+ if(!em.startInstance(cm.getParty(), cm.getPlayer().getMap(), 1)) {
+ cm.sendOk("Another party has already entered the #rParty Quest#k in this channel. Please try another channel, or wait for the current party to finish.");
+ }
+ }
+ else {
+ cm.sendOk("You cannot start this party quest yet, because either your party is not in the range size, some of your party members are not eligible to attempt it or they are not in this map. If you're having trouble finding party members, try Party Search.");
+ }
+
+ cm.dispose();
+ }
+ } else if (selection == 1) {
+ cm.sendOk("Try using a Super Megaphone or asking your buddies or guild to join!");
+ cm.dispose();
+ } else {
+ cm.sendOk("#e#b#k#n\r\nNot long ago, a scientist named Yulete has been banished from this town because of his researches of combined alchemies of Alcadno's and Zenumist's. Because of the immensurable amount of power coming from this combination, it is forbidden by law to study both. Yet, he ignored this law and got hands in both researches. As a result, he has been exiled.\r\nHe is now retaliating, already took my beloved one and his next target is me, as we are big pictures of Magatia, successors of both societies. But I'm not afraid. We must recover her at all costs!\r\n");
+ cm.dispose();
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/npc/2112005.js b/scripts/npc/2112005.js
new file mode 100644
index 0000000000..29860dce6b
--- /dev/null
+++ b/scripts/npc/2112005.js
@@ -0,0 +1,127 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+
+/**
+ * @author: Ronan
+ * @npc: Juliet
+ * @func: MagatiaPQ area NPC
+*/
+
+var status;
+
+function start() {
+ status = -1;
+ action(1, 0, 0);
+}
+
+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--;
+
+ var eim = cm.getEventInstance();
+
+ if(!eim.isEventCleared()) {
+ if(status == 0) {
+ if(eim.getIntProperty("npcShocked") == 0 && cm.haveItem(4001130, 1)) {
+ cm.gainItem(4001130, -1);
+ eim.setIntProperty("npcShocked", 1);
+
+ cm.sendNext("Oh? You got a letter for me? On times like this, what should it be... Gasp! Something big is going on, guys. Rally yourselves, from now on things will be harder than ever!");
+ eim.dropMessage(6, "Juliet seemed very much in shock after reading Romeo's Letter.");
+
+ cm.dispose();
+ return;
+ } else if (eim.getIntProperty("statusStg4") == 1) {
+ var door = cm.getMap().getReactorByName("jnr3_out3");
+
+ if(door.getState() == 0) {
+ cm.sendNext("Let me open the door for you.");
+ door.hitReactor(cm.getClient());
+ } else {
+ cm.sendNext("Please hurry, Romeo is in trouble.");
+ }
+
+ cm.dispose();
+ return;
+ } else if (cm.haveItem(4001134, 1) && cm.haveItem(4001135, 1)) {
+ if (cm.isEventLeader()) {
+ cm.gainItem(4001134, -1);
+ cm.gainItem(4001135, -1);
+ cm.sendNext("Great! You got both Alcadno and Zenumist files at hand. Now we can proceed.");
+
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(4);
+ eim.setIntProperty("statusStg4", 1);
+
+ cm.getMap().killAllMonsters();
+ cm.getMap().getReactorByName("jnr3_out3").hitReactor(cm.getClient());
+ } else {
+ cm.sendOk("Please let your leader pass the files to me.");
+ }
+
+ cm.dispose();
+ return;
+ } else {
+ cm.sendYesNo("We must keep fighting to save Romeo, please keep your pace. If you are not feeling so well to continue, your companions and I will understand... So, are you going to retreat?");
+ }
+ } else {
+ cm.warp(926110700);
+ cm.dispose();
+ }
+ } else {
+ if(status == 0) {
+ if(eim.getIntProperty("escortFail") == 0) {
+ cm.sendNext("Finally, Romeo is safe! Thanks to your efforts, we could save him from the clutches of Yulete, who will now be judged for his rebellion against Magatia. From now on, as he will start rehabilitation, we will keep an eye on his endeavours, making sure he will cause no more troubles on the future.");
+ }
+ else {
+ cm.sendNext("Romeo is safe now, although the battle took it's toll on him... Thanks to your efforts, we could save him from the clutches of Yulete, who will now be judged for his rebellion against Magatia. Thank you.");
+ status = 2;
+ }
+ } else if(status == 1) {
+ cm.sendNext("Now, please receive this gift as an act of acceptation for our gratitude.");
+ } else if(status == 2) {
+ if(cm.canHold(4001160)) {
+ cm.gainItem(4001160, 1);
+
+ if(eim.getIntProperty("normalClear") == 1) cm.warp(926110600);
+ else cm.warp(926110500);
+ } else {
+ cm.sendOk("Make sure you have a space on your ETC inventory.");
+ }
+
+ cm.dispose();
+ } else {
+ cm.warp(926110600);
+ cm.dispose();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/npc/2112006.js b/scripts/npc/2112006.js
new file mode 100644
index 0000000000..3ab1911949
--- /dev/null
+++ b/scripts/npc/2112006.js
@@ -0,0 +1,127 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+
+/**
+ * @author: Ronan
+ * @npc: Romeo
+ * @func: MagatiaPQ area NPC
+*/
+
+var status;
+
+function start() {
+ status = -1;
+ action(1, 0, 0);
+}
+
+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--;
+
+ var eim = cm.getEventInstance();
+
+ if(!eim.isEventCleared()) {
+ if(status == 0) {
+ if(eim.getIntProperty("npcShocked") == 0 && cm.haveItem(4001131, 1)) {
+ cm.gainItem(4001131, -1);
+ eim.setIntProperty("npcShocked", 1);
+
+ cm.sendNext("Oh? You got a letter for me? On times like this, what should it be... Gasp! Something big is going on, guys. Rally yourselves, from now on things will be harder than ever!");
+ eim.dropMessage(6, "Romeo seemed very much in shock after reading Juliet's Letter.");
+
+ cm.dispose();
+ return;
+ } else if (eim.getIntProperty("statusStg4") == 1) {
+ var door = cm.getMap().getReactorByName("rnj3_out3");
+
+ if(door.getState() == 0) {
+ cm.sendNext("Let me open the door for you.");
+ door.hitReactor(cm.getClient());
+ } else {
+ cm.sendNext("Please hurry, Juliet is in trouble.");
+ }
+
+ cm.dispose();
+ return;
+ } else if (cm.haveItem(4001134, 1) && cm.haveItem(4001135, 1)) {
+ if (cm.isEventLeader()) {
+ cm.gainItem(4001134, -1);
+ cm.gainItem(4001135, -1);
+ cm.sendNext("Great! You got both Alcadno and Zenumist files at hand. Now we can proceed.");
+
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(4);
+ eim.setIntProperty("statusStg4", 1);
+
+ cm.getMap().killAllMonsters();
+ cm.getMap().getReactorByName("rnj3_out3").hitReactor(cm.getClient());
+ } else {
+ cm.sendOk("Please let your leader pass the files to me.");
+ }
+
+ cm.dispose();
+ return;
+ } else {
+ cm.sendYesNo("We must keep fighting to save Juliet, please keep your pace. If you are not feeling so well to continue, your companions and I will understand... So, are you going to retreat?");
+ }
+ } else {
+ cm.warp(926100700);
+ cm.dispose();
+ }
+ } else {
+ if(status == 0) {
+ if(eim.getIntProperty("escortFail") == 0) {
+ cm.sendNext("Finally, Juliet is safe! Thanks to your efforts, we could save her from the clutches of Yulete, who will now be judged for his rebellion against Magatia. From now on, as he will start rehabilitation, we will keep an eye on his endeavours, making sure he will cause no more troubles on the future.");
+ }
+ else {
+ cm.sendNext("Juliet is safe now, although the battle took it's toll on her... Thanks to your efforts, we could save her from the clutches of Yulete, who will now be judged for his rebellion against Magatia. Thank you.");
+ status = 2;
+ }
+ } else if(status == 1) {
+ cm.sendNext("Now, please receive this gift as an act of acceptation for our gratitude.");
+ } else if(status == 2) {
+ if(cm.canHold(4001159)) {
+ cm.gainItem(4001159, 1);
+
+ if(eim.getIntProperty("normalClear") == 1) cm.warp(926100600);
+ else cm.warp(926100500);
+ } else {
+ cm.sendOk("Make sure you have a space on your ETC inventory.");
+ }
+
+ cm.dispose();
+ } else {
+ cm.warp(926100600);
+ cm.dispose();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/npc/2112007.js b/scripts/npc/2112007.js
new file mode 100644
index 0000000000..22a717fb49
--- /dev/null
+++ b/scripts/npc/2112007.js
@@ -0,0 +1,70 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+
+/**
+ * @author: Ronan
+ * @npc: Investigation Result
+ * @func: Gives MagatiaPQ stg1 item
+*/
+
+function start() {
+ var eim = cm.getEventInstance();
+ var book = "stg1_b" + (cm.getNpcObjectId() % 26);
+
+ var res = eim.getIntProperty(book);
+ if(res > -1) {
+ eim.setIntProperty(book, -1);
+
+ if(res == 0) { // mesos
+ var mgain = 500 * cm.getPlayer().getMesoRate();
+ cm.sendNext("Earned " + mgain + " mesos!");
+ cm.gainMeso(mgain);
+ } else if(res == 1) { // exp
+ var egain = 500 * cm.getPlayer().getExpRate();
+ cm.sendNext("Earned " + egain + " exp!");
+ cm.gainExp(egain);
+ } else if(res == 2) { // letter
+ var letter = 4001131;
+ if(!cm.canHold(letter)) {
+ cm.sendOk("You got a letter, however it didn't fit on your inventory, so you put it back.");
+ cm.dispose();
+ return;
+ }
+
+ cm.gainItem(letter, 1);
+ cm.sendNext("You found a letter, strategically placed here as it seems.");
+ } else if(res == 3) { // pass
+ cm.sendNext("You found the trigger to the next stage.");
+
+ var eim = cm.getEventInstance();
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(1);
+ eim.setIntProperty("statusStg1", 1);
+
+ cm.getMap().getReactorByName("d00").hitReactor(cm.getClient());
+ }
+ } else {
+ cm.sendNext("There is nothing here.");
+ }
+
+ cm.dispose();
+}
diff --git a/scripts/npc/2112010.js b/scripts/npc/2112010.js
new file mode 100644
index 0000000000..ea52077fb4
--- /dev/null
+++ b/scripts/npc/2112010.js
@@ -0,0 +1,120 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/* Yulete
+ Yulete's Office (926110203)
+ Magatia NPC
+ */
+
+var status;
+
+importPackage(Packages.server.life);
+
+function start() {
+ status = -1;
+ action(1, 0, 0);
+}
+
+function playersTooClose() {
+ var npcpos = cm.getMap().getMapObject(cm.getNpcObjectId()).getPosition();
+ var listchr = cm.getMap().getPlayers();
+
+ for (var iterator = listchr.iterator(); iterator.hasNext();) {
+ var chr = iterator.next();
+
+ var chrpos = chr.getPosition();
+ if(Math.sqrt( Math.pow((npcpos.getX() - chrpos.getX()), 2) + Math.pow((npcpos.getY() - chrpos.getY()), 2) ) < 310) return true;
+ }
+
+ return false;
+}
+
+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--;
+
+ var eim = cm.getEventInstance();
+
+ if(cm.getMapId() == 926110203) {
+ if(status == 0) {
+ var state = eim.getIntProperty("yuleteTalked");
+
+ if(state == -1) {
+ cm.sendOk("Heh, it seems you guys have company. Have fun with them, as I politely request my leave.");
+
+ } else if (playersTooClose() || eim.getIntProperty("npcShocked") == 0) {
+ cm.sendOk("Oh, hello there. I have been #bmonitoring your moves#k since you guys entered this perimeter. Quite the feat reaching here, I commend all of you. Now, now, look at the time, I've got an appointment right now, I'm afraid I will need to request my leave. But worry not, my #raccessors#k will deal with all of you. Now, if you permit me, I'm leaving now.");
+
+ eim.setIntProperty("yuleteTalked", -1);
+ } else {
+ cm.sendOk("... Hah! What, wh-- How did you get here?! I though I had sealed all paths here! No matter, this situation will be resolved soon. Guys: DEPLOY the #rmaster weapon#k!! You! Yes, you. Don't you think this ends here, look back at your companions, they need some help! I'll be retreating for now.");
+
+ eim.setIntProperty("yuleteTalked", 1);
+ }
+ }
+
+ cm.dispose();
+ } else {
+ if(status == 0) {
+ if(eim.isEventCleared()) {
+ cm.sendOk("Nooooo... I have been beated? But how? Everything I did was for the sake of the development of a greater alchemy! You can't jail me, I did what everybody standing in a place like mine would do! But no, they simply decided to damp up the progress of the science JUST BECAUSE it was deemed dangerous??? Oh, come on!");
+ } else {
+ var state = eim.getIntProperty("yuletePassed");
+
+ if(state == -1) {
+ cm.sendOk("Behold! The pinnacle of Magatia's alchemy studies! Hahahahahahaha...");
+ } else if(state == 0) {
+ cm.sendOk("You guys are such a pain, geez. Very well, I present you my newest weapon, brought by the finest alchemy, #rFrankenroid#k.");
+ eim.dropMessage(5, "Yulete: I present you my newest weapon, brought by the finest alchemy, Frankenroid!");
+
+ var mapobj = eim.getMapInstance(926110401);
+ var bossobj = MapleLifeFactory.getMonster(9300151);
+ mapobj.spawnMonsterOnGroundBelow(bossobj, new Packages.java.awt.Point(250, 100));
+
+ eim.setIntProperty("statusStg7", 1);
+ eim.setIntProperty("yuletePassed", -1);
+ } else {
+ cm.sendOk("You guys are such a pain, geez. Very well, I present you my newest weapon, brought by the finest combined alchemy of Alcadno's and Zenumist's, those that the boring people of Magatia societies have banned to bring along, the #rmighty Frankenroid#k!");
+ eim.dropMessage(5, "Yulete: I present you my newest weapon, brought by the finest combined alchemy of Alcadno's and Zenumist's, those that the boring people of Magatia societies have banned to bring along, the mighty Frankenroid!!");
+
+ var mapobj = eim.getMapInstance(926110401);
+ var bossobj = MapleLifeFactory.getMonster(9300152);
+ mapobj.spawnMonsterOnGroundBelow(bossobj, new Packages.java.awt.Point(250, 100));
+
+ eim.setIntProperty("statusStg7", 2);
+ eim.setIntProperty("yuletePassed", -1);
+ }
+ }
+ }
+
+ cm.dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/npc/2112011.js b/scripts/npc/2112011.js
new file mode 100644
index 0000000000..4e3b223f7d
--- /dev/null
+++ b/scripts/npc/2112011.js
@@ -0,0 +1,58 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/* Yulete
+ Traces of Yulete (926110500)
+ Talking
+ */
+
+var status;
+
+function start() {
+ status = -1;
+ action(1, 0, 0);
+}
+
+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) {
+ cm.sendSimple("Defeated... So, that's how Yulete's legacy will reach it's end, oh how woe is this... Hope you guys are happy now, as I will pass my days rotting in a dark cellar. Everything I've done was for the sake of Magatia!! (sob)\r\n #Ll# Hey man, come now, cheer up! There were not many damages that couldn't be resolved here. Magatia created these forbidding laws to protect it's people from the undoings a greater power like this would do if it reaches wrong hands. That's not the end for you, accept rehabilitation from the Societies and everything will work out!#l");
+ } else if (status == 1){
+ cm.sendNext("... Are you guys forgiving me after all that I've done? Well, I guess I was blinded by the great source of power that could be discovered that way, maybe they're right saying a human can't simply fathom on the usage of those powers without corrupting theirselves along the way... I am profoundly sorry, and to make myself up with everyone I'm willing to help the Societies again wherever I can on the progress of alchemy. Thank you.");
+ } else {
+ if(!cm.isQuestCompleted(7770)) cm.completeQuest(7770);
+
+ cm.warp(926110600);
+ cm.dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/npc/2112013.js b/scripts/npc/2112013.js
new file mode 100644
index 0000000000..887f0372f1
--- /dev/null
+++ b/scripts/npc/2112013.js
@@ -0,0 +1,70 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+
+/**
+ * @author: Ronan
+ * @npc: Investigation Result
+ * @func: Gives MagatiaPQ stg1 item
+*/
+
+function start() {
+ var eim = cm.getEventInstance();
+ var book = "stg1_b" + (cm.getNpcObjectId() % 26);
+
+ var res = eim.getIntProperty(book);
+ if(res > -1) {
+ eim.setIntProperty(book, -1);
+
+ if(res == 0) { // mesos
+ var mgain = 500 * cm.getPlayer().getMesoRate();
+ cm.sendNext("Earned " + mgain + " mesos!");
+ cm.gainMeso(mgain);
+ } else if(res == 1) { // exp
+ var egain = 500 * cm.getPlayer().getExpRate();
+ cm.sendNext("Earned " + egain + " exp!");
+ cm.gainExp(egain);
+ } else if(res == 2) { // letter
+ var letter = 4001130;
+ if(!cm.canHold(letter)) {
+ cm.sendOk("You got a letter, however it didn't fit on your inventory, so you put it back.");
+ cm.dispose();
+ return;
+ }
+
+ cm.gainItem(letter, 1);
+ cm.sendNext("You found a letter, strategically placed here as it seems.");
+ } else if(res == 3) { // pass
+ cm.sendNext("You found the trigger to the next stage.");
+
+ var eim = cm.getEventInstance();
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(1);
+ eim.setIntProperty("statusStg1", 1);
+
+ cm.getMap().getReactorByName("d00").hitReactor(cm.getClient());
+ }
+ } else {
+ cm.sendNext("There is nothing here.");
+ }
+
+ cm.dispose();
+}
diff --git a/scripts/npc/2112018.js b/scripts/npc/2112018.js
new file mode 100644
index 0000000000..749ba9b36a
--- /dev/null
+++ b/scripts/npc/2112018.js
@@ -0,0 +1,67 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+
+/**
+ * @author: Ronan
+ * @npc: Romeo & Juliet
+ * @func: MagatiaPQ exit
+*/
+
+var status;
+
+function start() {
+ status = -1;
+ action(1, 0, 0);
+}
+
+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--;
+
+ var eim = cm.getEventInstance();
+
+ if(status == 0) {
+ if(eim.getIntProperty("escortFail") == 1) {
+ cm.sendNext("Thanks to you, we were capable of reunion once again. Yulete will now be forwarded to jail for attempt against the Law of Magatia. Once again, thank you.");
+ } else {
+ cm.sendNext("Thanks to you, we were capable of reunion once again. Yulete will now pass through rehabilitation, as his studies are invaluable for the growth of our town, and all his doings were being made because he was blinded by the greed for power, although it was for the sake of Magatia. Once again, thank you.");
+ }
+ } else {
+ if(eim.giveEventReward(cm.getPlayer())) {
+ cm.warp((eim.getIntProperty("isAlcadno") == 0) ? 261000011 : 261000021);
+ } else {
+ cm.sendOk("Please free a slot on one of your inventories before receiving your reward.");
+ }
+
+ cm.dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/npc/9000038.js b/scripts/npc/9000038.js
index b477674518..1d3e62670f 100644
--- a/scripts/npc/9000038.js
+++ b/scripts/npc/9000038.js
@@ -83,6 +83,8 @@ function action(mode, type, selection) {
}
cm.sendPrev(sendStr);
+ } else if(status == 2) {
+ cm.dispose();
}
}
}
diff --git a/scripts/portal/jnr12_in.js b/scripts/portal/jnr12_in.js
new file mode 100644
index 0000000000..bab10acb72
--- /dev/null
+++ b/scripts/portal/jnr12_in.js
@@ -0,0 +1,4 @@
+function enter(pi) {
+ pi.warp(926110401, 0); //next
+ return(true);
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr1_out.js b/scripts/portal/jnr1_out.js
new file mode 100644
index 0000000000..3a8eb921ae
--- /dev/null
+++ b/scripts/portal/jnr1_out.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getEventInstance().getIntProperty("statusStg2") == 1) {
+ pi.warp(926110100, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "The portal is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr1_pt00.js b/scripts/portal/jnr1_pt00.js
new file mode 100644
index 0000000000..15f9455afe
--- /dev/null
+++ b/scripts/portal/jnr1_pt00.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getEventInstance().getIntProperty("statusStg1") == 1) {
+ pi.warp(926110001, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "The portal is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr2_out.js b/scripts/portal/jnr2_out.js
new file mode 100644
index 0000000000..46c8b654a2
--- /dev/null
+++ b/scripts/portal/jnr2_out.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getEventInstance().getIntProperty("statusStg3") == 3) {
+ pi.warp(926110200, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "The portal is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr3_in0.js b/scripts/portal/jnr3_in0.js
new file mode 100644
index 0000000000..7e915d7507
--- /dev/null
+++ b/scripts/portal/jnr3_in0.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("jnr3_out1").getState() == 1) {
+ pi.warp(926110201, 0);
+ return(true);
+ } else {
+ pi.playerMessage(5, "The door is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr3_in1.js b/scripts/portal/jnr3_in1.js
new file mode 100644
index 0000000000..a7002274b8
--- /dev/null
+++ b/scripts/portal/jnr3_in1.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("jnr3_out2").getState() == 1) {
+ pi.warp(926110202, 0);
+ return(true);
+ } else {
+ pi.playerMessage(5, "The door is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr3_out.js b/scripts/portal/jnr3_out.js
new file mode 100644
index 0000000000..421be861e2
--- /dev/null
+++ b/scripts/portal/jnr3_out.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("jnr3_out3").getState() == 1) {
+ pi.warp(926110203, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "The door is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr4_r1.js b/scripts/portal/jnr4_r1.js
new file mode 100644
index 0000000000..d16c47fcc8
--- /dev/null
+++ b/scripts/portal/jnr4_r1.js
@@ -0,0 +1,16 @@
+function enter(pi) {
+ var eim = pi.getEventInstance();
+ var area = eim.getIntProperty("statusStg5");
+ var reg = 0;
+
+ if((area >> reg) % 2 == 0) {
+ area |= (1 << reg);
+ eim.setIntProperty("statusStg5", area);
+
+ pi.warp(926110301 + reg, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "This room is already being explored.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr4_r2.js b/scripts/portal/jnr4_r2.js
new file mode 100644
index 0000000000..f94adce20a
--- /dev/null
+++ b/scripts/portal/jnr4_r2.js
@@ -0,0 +1,16 @@
+function enter(pi) {
+ var eim = pi.getEventInstance();
+ var area = eim.getIntProperty("statusStg5");
+ var reg = 1;
+
+ if((area >> reg) % 2 == 0) {
+ area |= (1 << reg);
+ eim.setIntProperty("statusStg5", area);
+
+ pi.warp(926110301 + reg, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "This room is already being explored.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr4_r3.js b/scripts/portal/jnr4_r3.js
new file mode 100644
index 0000000000..fbd0375c26
--- /dev/null
+++ b/scripts/portal/jnr4_r3.js
@@ -0,0 +1,16 @@
+function enter(pi) {
+ var eim = pi.getEventInstance();
+ var area = eim.getIntProperty("statusStg5");
+ var reg = 2;
+
+ if((area >> reg) % 2 == 0) {
+ area |= (1 << reg);
+ eim.setIntProperty("statusStg5", area);
+
+ pi.warp(926110301 + reg, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "This room is already being explored.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr4_r4.js b/scripts/portal/jnr4_r4.js
new file mode 100644
index 0000000000..ad3fa0ba59
--- /dev/null
+++ b/scripts/portal/jnr4_r4.js
@@ -0,0 +1,16 @@
+function enter(pi) {
+ var eim = pi.getEventInstance();
+ var area = eim.getIntProperty("statusStg5");
+ var reg = 3;
+
+ if((area >> reg) % 2 == 0) {
+ area |= (1 << reg);
+ eim.setIntProperty("statusStg5", area);
+
+ pi.warp(926110301 + reg, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "This room is already being explored.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr5_rp.js b/scripts/portal/jnr5_rp.js
new file mode 100644
index 0000000000..45d9e98dae
--- /dev/null
+++ b/scripts/portal/jnr5_rp.js
@@ -0,0 +1,65 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+ 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 .
+*/
+/**
+ *@author Ronan
+ *jnr5_rp
+ */
+
+function enter(pi) {
+ var mapplayer = "stage6_comb" + (pi.getMapId() % 10);
+ var eim = pi.getEventInstance();
+
+ if(eim.getProperty(mapplayer) == null) {
+ var comb = "";
+
+ for(var i = 0; i < 10; i++) {
+ var r = Math.floor((Math.random() * 4));
+ comb += r.toString();
+ }
+
+ eim.setProperty(mapplayer, comb);
+ }
+
+ var comb = eim.getProperty(mapplayer);
+
+ var name = pi.getPortal().getName().substring(2, 4);
+ var portalId = parseInt(name, 10);
+
+
+ var pRow = Math.floor(portalId / 10);
+ var pCol = (portalId % 10);
+
+ if (pCol == parseInt(comb.substring(pRow, pRow + 1), 10)) { //climb
+ if(pRow < 9) {
+ pi.warp(pi.getMapId(), pi.getPortal().getId() + 4);
+ } else {
+ if(eim.getIntProperty("statusStg6") == 0) {
+ eim.setIntProperty("statusStg6", 1);
+ eim.giveEventPlayersStageReward(6);
+ }
+
+ pi.warp(pi.getMapId(), 1);
+ }
+
+ } else { //fail
+ pi.warp(pi.getMapId(), 2);
+ }
+
+ return false;
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr6_out.js b/scripts/portal/jnr6_out.js
new file mode 100644
index 0000000000..11ebdecc54
--- /dev/null
+++ b/scripts/portal/jnr6_out.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("jnr6_out").getState() == 1) {
+ pi.warp(926110300);
+ return(true);
+ } else {
+ pi.playerMessage(5, "The portal is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr_201_0.js b/scripts/portal/jnr_201_0.js
new file mode 100644
index 0000000000..fdfb44e1ee
--- /dev/null
+++ b/scripts/portal/jnr_201_0.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("jnr31_out").getState() == 1) {
+ pi.warp(926110200, 1);
+ return(true);
+ } else {
+ pi.playerMessage(5, "The door is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr_202.js b/scripts/portal/jnr_202.js
new file mode 100644
index 0000000000..4fbc753bec
--- /dev/null
+++ b/scripts/portal/jnr_202.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("jnr32_out").getState() == 1) {
+ pi.warp(926110200, 2);
+ return(true);
+ } else {
+ pi.playerMessage(5, "The door is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/jnr_exit.js b/scripts/portal/jnr_exit.js
new file mode 100644
index 0000000000..c747666774
--- /dev/null
+++ b/scripts/portal/jnr_exit.js
@@ -0,0 +1,4 @@
+function enter(pi) {
+ pi.warp(261000021, 0);
+ return(true);
+}
\ No newline at end of file
diff --git a/scripts/portal/magatia_dark0.js b/scripts/portal/magatia_dark0.js
new file mode 100644
index 0000000000..417bae34c2
--- /dev/null
+++ b/scripts/portal/magatia_dark0.js
@@ -0,0 +1,30 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+function enter(pi) {
+ if(pi.isQuestCompleted(7770)) {
+ pi.warp(926130000, "out00");
+ return true;
+ } else {
+ pi.playerMessage(5, "This pipe seems too dark to venture inside.");
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj12_in.js b/scripts/portal/rnj12_in.js
new file mode 100644
index 0000000000..83ebc23db3
--- /dev/null
+++ b/scripts/portal/rnj12_in.js
@@ -0,0 +1,4 @@
+function enter(pi) {
+ pi.warp(926100401, 0); //next
+ return(true);
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj1_out.js b/scripts/portal/rnj1_out.js
new file mode 100644
index 0000000000..263f2393ec
--- /dev/null
+++ b/scripts/portal/rnj1_out.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getEventInstance().getIntProperty("statusStg2") == 1) {
+ pi.warp(926100100, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "The portal is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj1_pt00.js b/scripts/portal/rnj1_pt00.js
new file mode 100644
index 0000000000..479377ee57
--- /dev/null
+++ b/scripts/portal/rnj1_pt00.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getEventInstance().getIntProperty("statusStg1") == 1) {
+ pi.warp(926100001, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "The portal is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj2_out.js b/scripts/portal/rnj2_out.js
new file mode 100644
index 0000000000..8b9e5719c2
--- /dev/null
+++ b/scripts/portal/rnj2_out.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getEventInstance().getIntProperty("statusStg3") == 3) {
+ pi.warp(926100200, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "The portal is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj3_in0.js b/scripts/portal/rnj3_in0.js
new file mode 100644
index 0000000000..d50833005b
--- /dev/null
+++ b/scripts/portal/rnj3_in0.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("rnj3_out1").getState() == 1) {
+ pi.warp(926100201, 0);
+ return(true);
+ } else {
+ pi.playerMessage(5, "The door is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj3_in1.js b/scripts/portal/rnj3_in1.js
new file mode 100644
index 0000000000..e1ab91efd3
--- /dev/null
+++ b/scripts/portal/rnj3_in1.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("rnj3_out2").getState() == 1) {
+ pi.warp(926100202, 0);
+ return(true);
+ } else {
+ pi.playerMessage(5, "The door is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj3_out.js b/scripts/portal/rnj3_out.js
new file mode 100644
index 0000000000..a8ece2a34d
--- /dev/null
+++ b/scripts/portal/rnj3_out.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("rnj3_out3").getState() == 1) {
+ pi.warp(926100203, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "The door is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj4_r1.js b/scripts/portal/rnj4_r1.js
new file mode 100644
index 0000000000..4da9412cf4
--- /dev/null
+++ b/scripts/portal/rnj4_r1.js
@@ -0,0 +1,16 @@
+function enter(pi) {
+ var eim = pi.getEventInstance();
+ var area = eim.getIntProperty("statusStg5");
+ var reg = 0;
+
+ if((area >> reg) % 2 == 0) {
+ area |= (1 << reg);
+ eim.setIntProperty("statusStg5", area);
+
+ pi.warp(926100301 + reg, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "This room is already being explored.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj4_r2.js b/scripts/portal/rnj4_r2.js
new file mode 100644
index 0000000000..fd926cdfc5
--- /dev/null
+++ b/scripts/portal/rnj4_r2.js
@@ -0,0 +1,16 @@
+function enter(pi) {
+ var eim = pi.getEventInstance();
+ var area = eim.getIntProperty("statusStg5");
+ var reg = 1;
+
+ if((area >> reg) % 2 == 0) {
+ area |= (1 << reg);
+ eim.setIntProperty("statusStg5", area);
+
+ pi.warp(926100301 + reg, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "This room is already being explored.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj4_r3.js b/scripts/portal/rnj4_r3.js
new file mode 100644
index 0000000000..70d2743344
--- /dev/null
+++ b/scripts/portal/rnj4_r3.js
@@ -0,0 +1,16 @@
+function enter(pi) {
+ var eim = pi.getEventInstance();
+ var area = eim.getIntProperty("statusStg5");
+ var reg = 2;
+
+ if((area >> reg) % 2 == 0) {
+ area |= (1 << reg);
+ eim.setIntProperty("statusStg5", area);
+
+ pi.warp(926100301 + reg, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "This room is already being explored.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj4_r4.js b/scripts/portal/rnj4_r4.js
new file mode 100644
index 0000000000..a0915e9778
--- /dev/null
+++ b/scripts/portal/rnj4_r4.js
@@ -0,0 +1,16 @@
+function enter(pi) {
+ var eim = pi.getEventInstance();
+ var area = eim.getIntProperty("statusStg5");
+ var reg = 3;
+
+ if((area >> reg) % 2 == 0) {
+ area |= (1 << reg);
+ eim.setIntProperty("statusStg5", area);
+
+ pi.warp(926100301 + reg, 0); //next
+ return(true);
+ } else {
+ pi.playerMessage(5, "This room is already being explored.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj5_rp.js b/scripts/portal/rnj5_rp.js
new file mode 100644
index 0000000000..f29bd7f477
--- /dev/null
+++ b/scripts/portal/rnj5_rp.js
@@ -0,0 +1,65 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+ 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 .
+*/
+/**
+ *@author Ronan
+ *rnj5_rp
+ */
+
+function enter(pi) {
+ var mapplayer = "stage6_comb" + (pi.getMapId() % 10);
+ var eim = pi.getEventInstance();
+
+ if(eim.getProperty(mapplayer) == null) {
+ var comb = "";
+
+ for(var i = 0; i < 10; i++) {
+ var r = Math.floor((Math.random() * 4));
+ comb += r.toString();
+ }
+
+ eim.setProperty(mapplayer, comb);
+ }
+
+ var comb = eim.getProperty(mapplayer);
+
+ var name = pi.getPortal().getName().substring(2, 4);
+ var portalId = parseInt(name, 10);
+
+
+ var pRow = Math.floor(portalId / 10);
+ var pCol = (portalId % 10);
+
+ if (pCol == parseInt(comb.substring(pRow, pRow + 1), 10)) { //climb
+ if(pRow < 9) {
+ pi.warp(pi.getMapId(), pi.getPortal().getId() + 4);
+ } else {
+ if(eim.getIntProperty("statusStg6") == 0) {
+ eim.setIntProperty("statusStg6", 1);
+ eim.giveEventPlayersStageReward(6);
+ }
+
+ pi.warp(pi.getMapId(), 1);
+ }
+
+ } else { //fail
+ pi.warp(pi.getMapId(), 2);
+ }
+
+ return false;
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj6_out.js b/scripts/portal/rnj6_out.js
new file mode 100644
index 0000000000..10b982076e
--- /dev/null
+++ b/scripts/portal/rnj6_out.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("rnj6_out").getState() == 1) {
+ pi.warp(926100300);
+ return(true);
+ } else {
+ pi.playerMessage(5, "The portal is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj_201_0.js b/scripts/portal/rnj_201_0.js
new file mode 100644
index 0000000000..7982984358
--- /dev/null
+++ b/scripts/portal/rnj_201_0.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("rnj31_out").getState() == 1) {
+ pi.warp(926100200, 1);
+ return(true);
+ } else {
+ pi.playerMessage(5, "The door is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj_202.js b/scripts/portal/rnj_202.js
new file mode 100644
index 0000000000..9cd0e7268f
--- /dev/null
+++ b/scripts/portal/rnj_202.js
@@ -0,0 +1,9 @@
+function enter(pi) {
+ if (pi.getMap().getReactorByName("rnj32_out").getState() == 1) {
+ pi.warp(926100200, 2);
+ return(true);
+ } else {
+ pi.playerMessage(5, "The door is not opened yet.");
+ return(false);
+ }
+}
\ No newline at end of file
diff --git a/scripts/portal/rnj_exit.js b/scripts/portal/rnj_exit.js
new file mode 100644
index 0000000000..867996c9aa
--- /dev/null
+++ b/scripts/portal/rnj_exit.js
@@ -0,0 +1,4 @@
+function enter(pi) {
+ pi.warp(261000011, 0);
+ return(true);
+}
\ No newline at end of file
diff --git a/scripts/reactor/2001016.js b/scripts/reactor/2001016.js
index feb254b9d6..eff38df0b5 100644
--- a/scripts/reactor/2001016.js
+++ b/scripts/reactor/2001016.js
@@ -24,7 +24,7 @@
*/
function act() {
- rm.getMap().killAllMonstersNotFriendly();
+ rm.getMap().killAllMonsters();
rm.getMap().allowSummonState(false);
rm.spawnMonster(9300039, 260, 490);
rm.mapMessage(5, "As the air on the tower outskirts starts to become more dense, Papa Pixie appears.");
diff --git a/scripts/reactor/2612000.js b/scripts/reactor/2612000.js
new file mode 100644
index 0000000000..96993bcae6
--- /dev/null
+++ b/scripts/reactor/2612000.js
@@ -0,0 +1,28 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/*2612000.js - MagatiaPQ Box
+ *@author Ronan
+ */
+
+function act() {
+ rm.dropItems();
+}
\ No newline at end of file
diff --git a/scripts/reactor/2612001.js b/scripts/reactor/2612001.js
new file mode 100644
index 0000000000..ff26a29e65
--- /dev/null
+++ b/scripts/reactor/2612001.js
@@ -0,0 +1,28 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/*2612001.js - MagatiaPQ Box
+ *@author Ronan
+ */
+
+function act() {
+ rm.dropItems();
+}
\ No newline at end of file
diff --git a/scripts/reactor/2612002.js b/scripts/reactor/2612002.js
new file mode 100644
index 0000000000..fb5c188441
--- /dev/null
+++ b/scripts/reactor/2612002.js
@@ -0,0 +1,28 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/*2612002.js - MagatiaPQ Box
+ *@author Ronan
+ */
+
+function act() {
+ rm.dropItems();
+}
\ No newline at end of file
diff --git a/scripts/reactor/2612003.js b/scripts/reactor/2612003.js
new file mode 100644
index 0000000000..9b55286f5e
--- /dev/null
+++ b/scripts/reactor/2612003.js
@@ -0,0 +1,28 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/*2612003.js - MagatiaPQ Box
+ *@author Ronan
+ */
+
+function act() {
+ rm.dropItems();
+}
\ No newline at end of file
diff --git a/scripts/reactor/2612004.js b/scripts/reactor/2612004.js
new file mode 100644
index 0000000000..3abc42141d
--- /dev/null
+++ b/scripts/reactor/2612004.js
@@ -0,0 +1,28 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/*2612004.js - MagatiaPQ Box
+ *@author Ronan
+ */
+
+function act() {
+ rm.dropItems();
+}
\ No newline at end of file
diff --git a/scripts/reactor/2618000.js b/scripts/reactor/2618000.js
new file mode 100644
index 0000000000..195228dcfe
--- /dev/null
+++ b/scripts/reactor/2618000.js
@@ -0,0 +1,42 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/*2618000.js - MagatiaPQ Beaker
+ *@author Ronan
+ */
+
+function hit() {
+ if(rm.getReactor().getState() == 6) {
+ var eim = rm.getEventInstance();
+
+ var done = eim.getIntProperty("statusStg3") + 1;
+ eim.setIntProperty("statusStg3", done);
+
+ if(done == 3) {
+ eim.showClearEffect();
+ eim.giveEventPlayersStageReward(3);
+ rm.getMap().killAllMonsters();
+
+ var reactname = (eim.getIntProperty("isAlcadno") == 0) ? "rnj2_door" : "jnr2_door";
+ rm.getMap().getReactorByName(reactname).hitReactor(rm.getClient());
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/reactor/2618001.js b/scripts/reactor/2618001.js
new file mode 100644
index 0000000000..dee592be34
--- /dev/null
+++ b/scripts/reactor/2618001.js
@@ -0,0 +1,34 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/*2618000.js - MagatiaPQ Beaker
+ *@author Ronan
+ */
+
+function hit() {
+ var eim = rm.getEventInstance();
+
+ var isAlcadno = eim.getIntProperty("isAlcadno");
+ var reactname = (isAlcadno == 0) ? "rnj32_out" : "jnr32_out";
+ var reactmap = (isAlcadno == 0) ? 926100202 : 926110202;
+
+ eim.getMapInstance(reactmap).getReactorByName(reactname).hitReactor(rm.getClient());
+}
\ No newline at end of file
diff --git a/scripts/reactor/2618002.js b/scripts/reactor/2618002.js
new file mode 100644
index 0000000000..7aac2f5fc3
--- /dev/null
+++ b/scripts/reactor/2618002.js
@@ -0,0 +1,34 @@
+/*
+ This file is part of the OdinMS Maple Story Server
+ Copyright (C) 2008 Patrick Huy
+ Matthias Butz
+ Jan Christian Meyer
+
+ 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 .
+*/
+/*2618000.js - MagatiaPQ Beaker
+ *@author Ronan
+ */
+
+function hit() {
+ var eim = rm.getEventInstance();
+
+ var isAlcadno = eim.getIntProperty("isAlcadno");
+ var reactname = (isAlcadno == 0) ? "rnj31_out" : "jnr31_out";
+ var reactmap = (isAlcadno == 0) ? 926100201 : 926110201;
+
+ eim.getMapInstance(reactmap).getReactorByName(reactname).hitReactor(rm.getClient());
+}
\ No newline at end of file
diff --git a/sql/db_drops.sql b/sql/db_drops.sql
index 1cfedf0dc8..1c49aee28e 100644
--- a/sql/db_drops.sql
+++ b/sql/db_drops.sql
@@ -19338,13 +19338,14 @@ USE `maplesolaxia`;
DELETE FROM drop_data WHERE dropperid >= 9300081 AND dropperid <= 9300083;
# remove items being dropped from summoned mobs in PQs
-
DELETE FROM drop_data WHERE dropperid >= 9300015 AND dropperid <= 9300017;
DELETE FROM drop_data WHERE dropperid >= 9300054 AND dropperid <= 9300056;
DELETE FROM drop_data WHERE dropperid >= 9300143 AND dropperid <= 9300144;
DELETE FROM drop_data WHERE dropperid >= 8810019 AND dropperid <= 8810023;
DELETE FROM drop_data WHERE dropperid = 9500100;
+ DELETE FROM drop_data where dropperid >= 9300141 AND dropperid <= 9300154 AND (itemid < 4001130 OR itemid >= 4001136);
+
# remove key of dimension dropping outside PQ
DELETE FROM drop_data WHERE itemid=4001023 AND dropperid!=9300012;
@@ -19863,7 +19864,11 @@ USE `maplesolaxia`;
(9300270, 2022431, 1, 1, 0, 200000),
(9300270, 2022432, 1, 1, 0, 200000),
(9300270, 2022433, 1, 1, 0, 200000),
-(6090002, 4000414, 1, 1, 0, 400000);
+(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;
@@ -20041,7 +20046,62 @@ USE `maplesolaxia`;
(6102002, 2022277, 5, -1),
(6102003, 2022277, 5, -1),
(6102004, 2022277, 5, -1),
- (6102005, 2022277, 5, -1);
+ (6102005, 2022277, 5, -1),
+ (2612000, 2020000, 2, -1),
+ (2612000, 2020001, 2, -1),
+ (2612000, 2020002, 2, -1),
+ (2612000, 2020003, 2, -1),
+ (2612000, 2020004, 2, -1),
+ (2612000, 2020005, 2, -1),
+ (2612000, 2020006, 2, -1),
+ (2612000, 2020007, 3, -1),
+ (2612000, 2020008, 3, -1),
+ (2612000, 2020009, 3, -1),
+ (2612000, 2020010, 3, -1),
+ (2612001, 2020000, 2, -1),
+ (2612001, 2020001, 2, -1),
+ (2612001, 2020002, 2, -1),
+ (2612001, 2020003, 2, -1),
+ (2612001, 2020004, 2, -1),
+ (2612001, 2020005, 2, -1),
+ (2612001, 2020006, 2, -1),
+ (2612001, 2020007, 3, -1),
+ (2612001, 2020008, 3, -1),
+ (2612001, 2020009, 3, -1),
+ (2612001, 2020010, 3, -1),
+ (2612002, 2020000, 2, -1),
+ (2612002, 2020001, 2, -1),
+ (2612002, 2020002, 2, -1),
+ (2612002, 2020003, 2, -1),
+ (2612002, 2020004, 2, -1),
+ (2612002, 2020005, 2, -1),
+ (2612002, 2020006, 2, -1),
+ (2612002, 2020007, 3, -1),
+ (2612002, 2020008, 3, -1),
+ (2612002, 2020009, 3, -1),
+ (2612002, 2020010, 3, -1),
+ (2612003, 2020000, 2, -1),
+ (2612003, 2020001, 2, -1),
+ (2612003, 2020002, 2, -1),
+ (2612003, 2020003, 2, -1),
+ (2612003, 2020004, 2, -1),
+ (2612003, 2020005, 2, -1),
+ (2612003, 2020006, 2, -1),
+ (2612003, 2020007, 3, -1),
+ (2612003, 2020008, 3, -1),
+ (2612003, 2020009, 3, -1),
+ (2612003, 2020010, 3, -1),
+ (2612004, 2020000, 2, -1),
+ (2612004, 2020001, 2, -1),
+ (2612004, 2020002, 2, -1),
+ (2612004, 2020003, 2, -1),
+ (2612004, 2020004, 2, -1),
+ (2612004, 2020005, 2, -1),
+ (2612004, 2020006, 2, -1),
+ (2612004, 2020007, 3, -1),
+ (2612004, 2020008, 3, -1),
+ (2612004, 2020009, 3, -1),
+ (2612004, 2020010, 3, -1);
# updates info for all cards on monster book
DROP TABLE `monstercarddata`;
@@ -20098,4 +20158,43 @@ USE `maplesolaxia`;
DELETE FROM `drop_data` WHERE itemid=4000434;
DELETE FROM `drop_data` WHERE itemid=4000435;
DELETE FROM `drop_data` WHERE itemid=4032192;
- DELETE FROM `drop_data` WHERE itemid=8143000;
\ No newline at end of file
+ DELETE FROM `drop_data` WHERE itemid=8143000;
+
+ # delete all unused content on reactor drop data
+ DELETE FROM `reactordrops` WHERE itemid=1102260;
+ DELETE FROM `reactordrops` WHERE itemid=1342019;
+ DELETE FROM `reactordrops` WHERE itemid=1342020;
+ DELETE FROM `reactordrops` WHERE itemid=1532022;
+ DELETE FROM `reactordrops` WHERE itemid=1532023;
+ DELETE FROM `reactordrops` WHERE itemid=2022712;
+ DELETE FROM `reactordrops` WHERE itemid=3010126;
+ DELETE FROM `reactordrops` WHERE itemid=3012000;
+ DELETE FROM `reactordrops` WHERE itemid=4010008;
+ DELETE FROM `reactordrops` WHERE itemid=4010010;
+ DELETE FROM `reactordrops` WHERE itemid=4022000;
+ DELETE FROM `reactordrops` WHERE itemid=4022001;
+ DELETE FROM `reactordrops` WHERE itemid=4022002;
+ DELETE FROM `reactordrops` WHERE itemid=4022003;
+ DELETE FROM `reactordrops` WHERE itemid=4022004;
+ DELETE FROM `reactordrops` WHERE itemid=4022005;
+ DELETE FROM `reactordrops` WHERE itemid=4022006;
+ DELETE FROM `reactordrops` WHERE itemid=4022007;
+ DELETE FROM `reactordrops` WHERE itemid=4022008;
+ DELETE FROM `reactordrops` WHERE itemid=4022009;
+ DELETE FROM `reactordrops` WHERE itemid=4022010;
+ DELETE FROM `reactordrops` WHERE itemid=4022011;
+ DELETE FROM `reactordrops` WHERE itemid=4022012;
+ DELETE FROM `reactordrops` WHERE itemid=4022013;
+ DELETE FROM `reactordrops` WHERE itemid=4022014;
+ DELETE FROM `reactordrops` WHERE itemid=4022015;
+ DELETE FROM `reactordrops` WHERE itemid=4022016;
+ DELETE FROM `reactordrops` WHERE itemid=4022017;
+ DELETE FROM `reactordrops` WHERE itemid=4022018;
+ DELETE FROM `reactordrops` WHERE itemid=4022019;
+ DELETE FROM `reactordrops` WHERE itemid=4022020;
+ DELETE FROM `reactordrops` WHERE itemid=4022021;
+ DELETE FROM `reactordrops` WHERE itemid=4022022;
+ DELETE FROM `reactordrops` WHERE itemid=4022023;
+ DELETE FROM `reactordrops` WHERE itemid=4032362;
+ DELETE FROM `reactordrops` WHERE itemid=4032363;
+ DELETE FROM `reactordrops` WHERE itemid=4032980;
\ No newline at end of file
diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java
index bfc470f7d0..899a844d44 100644
--- a/src/client/MapleCharacter.java
+++ b/src/client/MapleCharacter.java
@@ -1227,7 +1227,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
long banTime = System.currentTimeMillis();
dropMessage(5, msg);
- MapleMap map_ = client.getChannelServer().getMapFactory().getMap(mapid);
+ MapleMap map_ = getWarpMap(mapid);
changeMap(map_, map_.getPortal(portal));
setBanishPlayerData(banMap, banSp, banTime);
diff --git a/src/client/command/Commands.java b/src/client/command/Commands.java
index 4ffc0b0cfc..63da3ac9a8 100644
--- a/src/client/command/Commands.java
+++ b/src/client/command/Commands.java
@@ -108,9 +108,9 @@ public class Commands {
private static HashMap gotomaps = new HashMap();
private static String[] tips = {
- "Please only use /gm in emergencies or to report somebody.",
+ "Please only use @gm in emergencies or to report somebody.",
"To report a bug or make a suggestion, use the forum.",
- "Please do not use /gm to ask if a GM is online.",
+ "Please do not use @gm to ask if a GM is online.",
"Do not ask if you can receive help, just state your issue.",
"Do not say 'I have a bug to report', just state it.",
};
@@ -387,7 +387,7 @@ public class Commands {
}
}
if (gacha == null){
- player.yellowMessage("Please use /gacha where name corresponds to one of the below:");
+ player.yellowMessage("Please use @gacha where name corresponds to one of the below:");
for (String name : names){
player.yellowMessage(name);
}
@@ -405,7 +405,7 @@ public class Commands {
case "whatdropsfrom":
if (sub.length < 2) {
- player.dropMessage(5, "Please do /whatdropsfrom ");
+ player.dropMessage(5, "Please do @whatdropsfrom ");
break;
}
String monsterName = joinStringFrom(sub, 1);
@@ -439,7 +439,7 @@ public class Commands {
case "whodrops":
if (sub.length < 2) {
- player.dropMessage(5, "Please do /whodrops - ");
+ player.dropMessage(5, "Please do @whodrops
- ");
break;
}
String searchString = joinStringFrom(sub, 1);
@@ -551,7 +551,7 @@ public class Commands {
case "bug":
if (sub.length < 2) {
- player.dropMessage(5, "Message too short and not sent. Please do /bug ");
+ player.dropMessage(5, "Message too short and not sent. Please do @bug ");
break;
}
message = joinStringFrom(sub, 1);
@@ -691,7 +691,7 @@ public class Commands {
case "goto":
if (sub.length < 2){
- player.yellowMessage("Syntax: /goto