diff --git a/.gitignore b/.gitignore
index 232f549d1e..5259791185 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,66 +5,66 @@
/build/
/dist/
-/nbproject/private/
+/nbproject/
/tools/MapleArrowFetcher/build/
/tools/MapleArrowFetcher/dist/
-/tools/MapleArrowFetcher/nbproject/private/
+/tools/MapleArrowFetcher/nbproject/
-/tools/MapleBossHpBarFetcher/nbproject/private/
+/tools/MapleBossHpBarFetcher/nbproject/
/tools/MapleBossHpBarFetcher/build/
/tools/MapleBossHpBarFetcher/dist/
-/tools/MapleCashDropFetcher/nbproject/private/
+/tools/MapleCashDropFetcher/nbproject/
/tools/MapleCashDropFetcher/build/
/tools/MapleCashDropFetcher/dist/
/tools/MapleCouponInstaller/build/
/tools/MapleCouponInstaller/dist/
-/tools/MapleCouponInstaller/nbproject/private/
+/tools/MapleCouponInstaller/nbproject/
/tools/MapleIdRetriever/build/
/tools/MapleIdRetriever/dist/
-/tools/MapleIdRetriever/nbproject/private/
+/tools/MapleIdRetriever/nbproject/
/tools/MapleInvalidItemIdFetcher/build/
/tools/MapleInvalidItemIdFetcher/dist/
-/tools/MapleInvalidItemIdFetcher/nbproject/private/
+/tools/MapleInvalidItemIdFetcher/nbproject/
/tools/MapleMapInfoRetriever/build/
/tools/MapleMapInfoRetriever/dist/
-/tools/MapleMapInfoRetriever/nbproject/private/
+/tools/MapleMapInfoRetriever/nbproject/
/tools/MapleMesoFetcher/build/
/tools/MapleMesoFetcher/dist/
-/tools/MapleMesoFetcher/nbproject/private/
+/tools/MapleMesoFetcher/nbproject/
/tools/MapleMobBookIndexer/build/
/tools/MapleMobBookIndexer/dist/
-/tools/MapleMobBookIndexer/nbproject/private/
+/tools/MapleMobBookIndexer/nbproject/
/tools/MapleMobBookUpdate/build/
/tools/MapleMobBookUpdate/dist/
-/tools/MapleMobBookUpdate/nbproject/private/
+/tools/MapleMobBookUpdate/nbproject/
-/tools/MapleQuestItemCountFetcher/nbproject/private/
+/tools/MapleQuestItemCountFetcher/nbproject/
/tools/MapleQuestItemCountFetcher/build/
/tools/MapleQuestItemCountFetcher/dist/
/tools/MapleQuestItemFetcher/build/
/tools/MapleQuestItemFetcher/dist/
-/tools/MapleQuestItemFetcher/nbproject/private/
+/tools/MapleQuestItemFetcher/nbproject/
/tools/MapleQuestMesoFetcher/build/
/tools/MapleQuestMesoFetcher/dist/
-/tools/MapleQuestMesoFetcher/nbproject/private/
+/tools/MapleQuestMesoFetcher/nbproject/
/tools/MapleSkillMakerFetcher/build/
/tools/MapleSkillMakerFetcher/dist/
-/tools/MapleSkillMakerFetcher/nbproject/private/
+/tools/MapleSkillMakerFetcher/nbproject/
/tools/MapleSkillMakerReagentIndexer/build/
/tools/MapleSkillMakerReagentIndexer/dist/
-/tools/MapleSkillMakerReagentIndexer/nbproject/private/
+/tools/MapleSkillMakerReagentIndexer/nbproject/
/out
diff --git a/docs/mychanges_ptbr.txt b/docs/mychanges_ptbr.txt
index 82be832739..c1f115882d 100644
--- a/docs/mychanges_ptbr.txt
+++ b/docs/mychanges_ptbr.txt
@@ -863,7 +863,9 @@ Implementado questline do Dyle.
Corrigido possível exploit com sistema de quests, onde jogador podia começar e completar quaisquer quests livremente.
Nova ferramenta: MapleCashDropFetcher. Aplicação busca por drop data de cash na DB e reporta.
-13 Merço 2018,
+13 - 14 Março 2018,
Adicionado feature de anúncio de mudança de classe.
Adicionado drops faltando da questline Puppeteer de Aran.
-Movimentação de GM rank para alguns comandos.
\ No newline at end of file
+Movimentação de GM rank para alguns comandos.
+Corrigido autoassigner inesperadamente desconectando jogadores, quando o autoassigner do cliente está sendo utilizado.
+Adicionado scripts para a questline de Full Swing de Aran.
\ No newline at end of file
diff --git a/scripts/npc/commands.js b/scripts/npc/commands.js
index a355847ffb..44e168326f 100644
--- a/scripts/npc/commands.js
+++ b/scripts/npc/commands.js
@@ -8,6 +8,9 @@
var status;
+var common_heading = "@";
+var staff_heading = "!";
+
var comm_lv6 = [];
var desc_lv6 = [];
@@ -220,9 +223,9 @@ function writeSolaxiaCommandsLv0() { //Common
addCommand("leaveevent", "");
addCommand("ranks", "");
addCommand("str", "");
+ addCommand("dex", "");
addCommand("int", "");
addCommand("luk", "");
- addCommand("dex", "");
}
function writeSolaxiaCommands() {
@@ -262,7 +265,7 @@ function action(mode, type, selection) {
cm.sendSimple(sendStr);
} else if(status == 1) {
- var lvComm, lvDesc;
+ var lvComm, lvDesc, lvHead = (cm.getPlayer().gmLevel() < 2) ? common_heading : staff_heading;
if(selection == 0) {
lvComm = comm_lv0;
@@ -289,7 +292,7 @@ function action(mode, type, selection) {
var sendStr = "The following commands are available for #b" + levels[selection] + "#k:\r\n\r\n";
for(var i = 0; i < lvComm.length; i++) {
- sendStr += " #L" + i + "# " + lvComm[i] + " - " + lvDesc[i];
+ sendStr += " #L" + i + "# " + lvHead + lvComm[i] + " - " + lvDesc[i];
sendStr += "#l\r\n";
}
diff --git a/scripts/quest/21750.js b/scripts/quest/21750.js
new file mode 100644
index 0000000000..d40883b126
--- /dev/null
+++ b/scripts/quest/21750.js
@@ -0,0 +1,44 @@
+/*
+ This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
+ Copyleft (L) 2017 RonanLana
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation version 3 as published by
+ the Free Software Foundation. You may not use, modify or distribute
+ this program under any other version of the GNU Affero General Public
+ License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+var status = -1;
+
+function end(mode, type, selection) {
+ if (mode == -1) {
+ qm.dispose();
+ } else {
+ if(mode == 0 && type > 0) {
+ qm.dispose();
+ return;
+ }
+
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if (status == 0) {
+ qm.sendNext("Aran, you're finally back!!! How you've been doing? Where did you go for so long? We have so much to catch up...");
+ qm.forceCompleteQuest();
+
+ qm.dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/quest/21753.js b/scripts/quest/21753.js
new file mode 100644
index 0000000000..0d90e5b00c
--- /dev/null
+++ b/scripts/quest/21753.js
@@ -0,0 +1,46 @@
+/*
+ This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
+ Copyleft (L) 2017 RonanLana
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation version 3 as published by
+ the Free Software Foundation. You may not use, modify or distribute
+ this program under any other version of the GNU Affero General Public
+ License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+var status = -1;
+
+function start(mode, type, selection) {
+ if (mode == -1) {
+ qm.dispose();
+ } else {
+ if(mode == 0 && type > 0) {
+ qm.dispose();
+ return;
+ }
+
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if (status == 0) {
+ qm.sendNext("Aran, I've discovered some disturbing news... You said you've come from the eastern forest section, right? We traced and studied the magic being used to support the portal over there. It turns out that's of a #rtemporal#k-type. The garments you're using... They were never seen around before. That must mean, #ryou must have come from the future#k.");
+ } else if (status == 1) {
+ qm.sendNext("Now about the problem: the Seal Stone that seems to have been missing in your timeline... It is a powerful artifact, that prevents the army of the #rBlack Mage#k from laying siege on our world. If that stone goes away, nothing more can prevent him. As this is a matter of great importance, find the #rself of mine#k from the future. I'm actually a #rfairy#k with a great life expectancy, I must be alive even on your timeline. Got it, #rfetch the me from the future#k!");
+ qm.forceStartQuest();
+
+ qm.dispose();
+ }
+ }
+}
diff --git a/scripts/quest/21754.js b/scripts/quest/21754.js
new file mode 100644
index 0000000000..d804957a8c
--- /dev/null
+++ b/scripts/quest/21754.js
@@ -0,0 +1,52 @@
+/*
+ This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
+ Copyleft (L) 2017 RonanLana
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation version 3 as published by
+ the Free Software Foundation. You may not use, modify or distribute
+ this program under any other version of the GNU Affero General Public
+ License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+var status = -1;
+
+function start(mode, type, selection) {
+ if (mode == -1) {
+ qm.dispose();
+ } else {
+ if(mode == 0 && type > 0) {
+ qm.dispose();
+ return;
+ }
+
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if (status == 0) {
+ if(!qm.canHold(4032328, 1)) {
+ qm.sendNext("Hm, I will need you to prepare a ETC slot for a letter I need to give you.");
+ qm.dispose();
+ return;
+ }
+
+ qm.sendNext("Here, take this. Send it to #r#p1002104##k, it contains a relevant matter for protecting this world. Please comply to this request.");
+ } else if (status == 1) {
+ qm.forceStartQuest();
+
+ qm.gainItem(4032328, 1);
+ qm.dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/quest/21757.js b/scripts/quest/21757.js
new file mode 100644
index 0000000000..dbc7df1876
--- /dev/null
+++ b/scripts/quest/21757.js
@@ -0,0 +1,46 @@
+/*
+ This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
+ Copyleft (L) 2017 RonanLana
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation version 3 as published by
+ the Free Software Foundation. You may not use, modify or distribute
+ this program under any other version of the GNU Affero General Public
+ License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+var status = -1;
+
+function end(mode, type, selection) {
+ if (mode == -1) {
+ qm.dispose();
+ } else {
+ if(mode == 0 && type > 0) {
+ qm.dispose();
+ return;
+ }
+
+ if (mode == 1)
+ status++;
+ else
+ status--;
+
+ if (status == 0) {
+ qm.sendNext("Oh, a letter for the #rempress#k? From the #bheroes#k?!");
+ qm.gainExp(1000 * qm.getPlayer().getExpRate());
+ qm.gainItem(4032330, -1);
+ qm.forceCompleteQuest();
+
+ qm.dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/scripts/quest/21766.js b/scripts/quest/21766.js
index f26db43190..52a9bee1e1 100644
--- a/scripts/quest/21766.js
+++ b/scripts/quest/21766.js
@@ -8,11 +8,12 @@ function start(mode, type, selection) {
qm.sendNext("He used to scowl and whine about his arthritis until just recently, but he''s suddenly become all happy and smiley!!");
} else if (status == 2) {
qm.sendNext("I have a feeling there is a secret behind that wooden box. Could you stealthily look into the wooden box next to #p20000#?");
+ } else if (status == 3) {
+ qm.sendNext("You know where #p20000# is, right? Hes to the right. Just keep going until you see where Vikin is, then head down past the hanging shark and octopus, and you''ll see John. The box should be right next to him.");
} else {
- qm.sendNext("You know where #p20000# is, right? He''s to the right. Just keep going until you see where Vikin is, then head down past the hanging shark and octopus, and you''ll see John. The box should be right next to him.");
- qm.forceStartQuest();
+ qm.forceStartQuest();
qm.dispose();
- }
+ }
}
function end(mode, type, selection) {
diff --git a/scripts/quest/21767.js b/scripts/quest/21767.js
index 390278e171..5d8d774512 100644
--- a/scripts/quest/21767.js
+++ b/scripts/quest/21767.js
@@ -3,14 +3,17 @@ var status = -1;
function start(mode, type, selection) {
status++;
if (status == 0) {
+ if(qm.haveItem(4032423, 1)) {
+ qm.forceStartQuest();
+ qm.dispose();
+ return;
+ }
+
qm.sendNext("#bHm, there's a medicinal substance in the box. What could this be? You better take this to John and ask him what it is.#k");
} else {
- qm.gainItem(4032423,1);
- qm.forceCompleteQuest();
+ qm.gainItem(4032423,1);
+
+ qm.forceStartQuest();
qm.dispose();
}
-}
-
-function end(mode, type, selection) {
- qm.dispose();
}
\ No newline at end of file
diff --git a/sql/db_database.sql b/sql/db_database.sql
index b4775a491b..695670b3ab 100644
--- a/sql/db_database.sql
+++ b/sql/db_database.sql
@@ -11429,11 +11429,11 @@ INSERT IGNORE INTO `temp_data` (`id`, `dropperid`, `itemid`, `minimum_quantity`,
(11210, 9001002, 4031059, 1, 1, 0, 999999),
(11211, 9001003, 4031059, 1, 1, 0, 999999),
(11212, 9001004, 4031059, 1, 1, 0, 999999),
-(11213, 9001005, 4031857, 1, 1, 0, 300000),
+(11213, 9001005, 4031857, 1, 1, 2192, 300000),
(11214, 9001012, 4032311, 1, 1, 0, 300000),
(11215, 9001012, 4032311, 1, 1, 0, 300000),
(11216, 9001013, 4032312, 1, 1, 0, 999999),
-(11217, 9001013, 4032339, 1, 1, 0, 999999),
+(11217, 9001013, 4032339, 1, 1, 21303, 999999),
(11219, 4230113, 1452016, 1, 1, 0, 700),
(11220, 4230103, 1452016, 1, 1, 0, 700),
(11221, 2230102, 1452016, 1, 1, 0, 700),
@@ -11628,7 +11628,7 @@ INSERT IGNORE INTO `temp_data` (`id`, `dropperid`, `itemid`, `minimum_quantity`,
(11628, 6220000, 1472055, 1, 1, 0, 1250),
(11627, 5120500, 1472055, 1, 1, 0, 750),
(11626, 5120000, 1472055, 1, 1, 0, 750),
-(11625, 9001006, 4031856, 1, 1, 0, 400000),
+(11625, 9001006, 4031856, 1, 1, 2191, 400000),
(11624, 8190003, 4031461, 1, 1, 6169, 1000),
(11623, 9400218, 4001106, 25, 50, 0, 999999),
(11622, 9400217, 4001106, 1, 3, 0, 999999),
@@ -16584,8 +16584,8 @@ INSERT INTO `reactordrops` (`reactordropid`, `reactorid`, `itemid`, `chance`, `q
(37, 2212002, 2000002, 3, -1),
(38, 2212001, 4031141, 2, -1),
(39, 2212002, 4031143, 2, -1),
-(40, 2212003, 4031107, 2, -1),
-(41, 2212004, 4031116, 2, -1),
+(40, 2212003, 4031107, 2, 3409),
+(41, 2212004, 4031116, 2, 3419),
(42, 2212004, 2000001, 2, -1),
(43, 2212005, 4031136, 8, 3439),
(44, 2222000, 4031231, 2, 3620),
@@ -16669,7 +16669,7 @@ INSERT INTO `reactordrops` (`reactordropid`, `reactorid`, `itemid`, `chance`, `q
(122, 2201001, 4001022, 1, -1),
(123, 1402000, 4032309, 1, 21013),
(124, 1402000, 4032310, 1, 21013),
-(125, 1022001, 4032319, 7, -1),
+(125, 1022001, 4032319, 7, 21723),
(126, 1022002, 4001340, 1, 28167),
(127, 1202000, 4001366, 1, 28194),
(128, 1202003, 4001346, 3, 28225),
diff --git a/sql/db_drops.sql b/sql/db_drops.sql
index 2a83061591..2237a67dc0 100644
--- a/sql/db_drops.sql
+++ b/sql/db_drops.sql
@@ -2850,9 +2850,9 @@ USE `heavenms`;
(3110100, 4000032, 1, 1, 0, 200000),
(9300234, 4000032, 1, 1, 0, 200000),
(9500108, 4000032, 1, 1, 0, 200000),
-(3110100, 4031164, 1, 1, 0, 7000),
-(9300234, 4031164, 1, 1, 0, 7000),
-(9500108, 4031164, 1, 1, 0, 7000),
+(3110100, 4031164, 1, 1, 2084, 7000),
+(9300234, 4031164, 1, 1, 2084, 7000),
+(9500108, 4031164, 1, 1, 2084, 7000),
(3110100, 4031405, 1, 1, 0, 7000),
(9300234, 4031405, 1, 1, 0, 7000),
(9500108, 4031405, 1, 1, 0, 7000),
@@ -9148,8 +9148,8 @@ USE `heavenms`;
(9420530, 1002212, 1, 1, 0, 700),
(9420530, 1472013, 1, 1, 0, 700),
(9420530, 1051006, 1, 1, 0, 700),
-(5130107, 4031218, 1, 1, 0, 7000),
-(9400504, 4031218, 1, 1, 0, 7000),
+(5130107, 4031218, 1, 1, 3071, 7000),
+(9400504, 4031218, 1, 1, 3071, 7000),
(5130107, 2000002, 1, 1, 0, 40000),
(9400504, 2000002, 1, 1, 0, 40000),
(5130107, 2000003, 1, 1, 0, 40000),
@@ -9202,7 +9202,7 @@ USE `heavenms`;
(9400504, 1060083, 1, 1, 0, 700),
(5130107, 1482008, 1, 1, 0, 700),
(9400504, 1482008, 1, 1, 0, 700),
-(5130108, 4031218, 1, 1, 0, 7000),
+(5130108, 4031218, 1, 1, 3071, 7000),
(5130108, 2000002, 1, 1, 0, 40000),
(5130108, 2000003, 1, 1, 0, 40000),
(5130108, 2000004, 1, 1, 0, 40000),
@@ -11082,8 +11082,8 @@ USE `heavenms`;
(9420534, 1061102, 1, 1, 0, 700),
(6230300, 4000129, 1, 1, 0, 200000),
(9300317, 4000129, 1, 1, 0, 200000),
-(6230300, 4031189, 1, 1, 0, 7000),
-(9300317, 4031189, 1, 1, 0, 7000),
+(6230300, 4031189, 1, 1, 3448, 7000),
+(9300317, 4031189, 1, 1, 3448, 7000),
(6230300, 2000002, 1, 1, 0, 40000),
(9300317, 2000002, 1, 4, 0, 40000),
(6230300, 2043701, 1, 1, 0, 750),
@@ -19239,7 +19239,7 @@ USE `heavenms`;
(9400578, 1032013, 1, 1, 0, 1200),
(9400578, 1372009, 1, 1, 0, 1200),
(9400578, 1372009, 1, 1, 0, 1200),
-(9300011, 4031130, 1, 1, 0, 10000),
+(9300011, 4031130, 1, 1, 3238, 10000),
(7160000, 2385015, 1, 1, 0, 10000),
(3230306, 2022355, 1, 1, 3248, 100000),
(4230113, 2022354, 1, 1, 3248, 100000),
@@ -20185,7 +20185,10 @@ USE `heavenms`;
(1110130, 4032317, 1, 1, 21717, 40000),
(1110130, 4032318, 1, 1, 21718, 40000),
(1140130, 4032319, 1, 1, 21723, 100000),
-(2230131, 4032321, 1, 1, 21727, 20000);
+(2230131, 4032321, 1, 1, 21727, 20000),
+(5250002, 4032326, 1, 1, 21752, 100000),
+(2110301, 4032401, 1, 1, 2261, 100000),
+(2110300, 4032402, 1, 1, 2263, 100000);
# (dropperid, itemid, minqty, maxqty, questid, chance)
diff --git a/src/client/command/Commands.java b/src/client/command/Commands.java
index ed77335191..599eb63672 100644
--- a/src/client/command/Commands.java
+++ b/src/client/command/Commands.java
@@ -594,9 +594,9 @@ public class Commands {
// stat autoassigning command credited to HeliosMS dev team
case "str":
+ case "dex":
case "int":
case "luk":
- case "dex":
int amount = (sub.length > 1) ? Integer.parseInt(sub[1]) : player.getRemainingAp();
boolean str = sub[0].equalsIgnoreCase("str");
boolean Int = sub[0].equalsIgnoreCase("int");
@@ -764,7 +764,7 @@ public class Commands {
case "goto":
if (sub.length < 2){
- player.yellowMessage("Syntax: !goto