Autoassigner patch

Fixed autoassigner handler not reading the client's packet properly when using USE_SERVER_AUTOASSIGNER = false.
Updated questid for some drops on the DB.
Added scripts for some quests on the Aran's Full Swing skill questline.
This commit is contained in:
ronancpl
2018-04-18 13:35:42 -03:00
parent 6a63f9d95e
commit 134c34fa58
15 changed files with 256 additions and 70 deletions
+16 -16
View File
@@ -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
+4 -2
View File
@@ -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.
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.
+6 -3
View File
@@ -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";
}
+44
View File
@@ -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 <http://www.gnu.org/licenses/>.
*/
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();
}
}
}
+46
View File
@@ -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 <http://www.gnu.org/licenses/>.
*/
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();
}
}
}
+52
View File
@@ -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 <http://www.gnu.org/licenses/>.
*/
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();
}
}
}
+46
View File
@@ -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 <http://www.gnu.org/licenses/>.
*/
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();
}
}
}
+4 -3
View File
@@ -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) {
+9 -6
View File
@@ -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();
}
+6 -6
View File
@@ -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),
+13 -10
View File
@@ -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)
+2 -2
View File
@@ -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 <map name>");
player.yellowMessage("Syntax: @goto <map name>");
break;
}
+1 -1
View File
@@ -57,7 +57,7 @@ public class ServerConstants {
public static final boolean USE_PARTY_FOR_STARTERS = true; //Players level 10 or below can create/invite other players on the given level range.
public static final boolean USE_AUTOBAN = false; //Commands the server to detect infractors automatically.
public static final boolean USE_AUTOSAVE = true; //Enables server autosaving feature (saves characters to DB each 1 hour).
public static final boolean USE_SERVER_AUTOASSIGNER = true; //Server-builtin autoassigner, uses algorithm based on distributing AP accordingly with required secondary stat on equipments.
public static final boolean USE_SERVER_AUTOASSIGNER = true; //HeavenMS-builtin autoassigner, uses algorithm based on distributing AP accordingly with required secondary stat on equipments.
public static final boolean USE_REFRESH_RANK_MOVE = true;
public static final boolean USE_ENFORCE_HPMP_SWAP = false; //Forces players to reuse stats (via AP Resetting) located on HP/MP pool only inside the HP/MP stats.
public static final boolean USE_ENFORCE_MOB_LEVEL_RANGE = true; //Players N levels below the killed mob will gain no experience from defeating it.
@@ -52,19 +52,18 @@ public class AutoAssignHandler extends AbstractMaplePacketHandler {
@Override
public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
MapleCharacter chr = c.getPlayer();
if (chr.getRemainingAp() < 1) return;
int[] statGain = new int[4];
int[] statEqpd = new int[4];
statGain[0] = 0; statGain[1] = 0; statGain[2] = 0; statGain[3] = 0;
slea.skip(8);
byte opt = slea.readByte(); // useful for pirate autoassigning
if (chr.getRemainingAp() < 1) return;
if(ServerConstants.USE_SERVER_AUTOASSIGNER) {
// --------- Ronan Lana's AUTOASSIGNER ---------
// This method excels for assigning APs in such a way to cover all equipments AP requirements.
byte opt = slea.readByte(); // useful for pirate autoassigning
int str = 0, dex = 0, luk = 0, int_ = 0;
List<Short> eqpStrList = new ArrayList<>();
@@ -324,16 +323,13 @@ public class AutoAssignHandler extends AbstractMaplePacketHandler {
//----------------------------------------------------------------------------------------
c.announce(MaplePacketCreator.serverNotice(1, "Better AP applications detected:\r\nSTR: +" + statGain[0] + "\r\nDEX: +" + statGain[1] + "\r\nINT: +" + statGain[3] + "\r\nLUK: +" + statGain[2]));
}
else {
int total = 0;
int extras = 0;
} else {
if(slea.available() < 16) {
AutobanFactory.PACKET_EDIT.alert(chr, "Didn't send full packet for Auto Assign.");
c.disconnect(false, false);
return;
}
MapleInventory iv = chr.getInventory(MapleInventoryType.EQUIPPED);
Collection<Item> equippedC = iv.list();
for (Item item : equippedC) { //selecting the biggest AP value of each stat from each equipped item.
@@ -345,6 +341,8 @@ public class AutoAssignHandler extends AbstractMaplePacketHandler {
statEqpd[3] += nEquip.getInt();
}
int total = 0;
int extras = 0;
for (int i = 0; i < 2; i++) {
int type = slea.readInt();
int tempVal = slea.readInt();
-12
View File
@@ -22876,12 +22876,6 @@
<int name="npc" value="2131000"/>
<int name="lvmin" value="63"/>
<string name="startscript" value="q21753s"/>
<int name="infoNumber" value="21764"/>
<imgdir name="infoex">
<imgdir name="0">
<string name="value" value="1"/>
</imgdir>
</imgdir>
<imgdir name="quest">
<imgdir name="0">
<int name="id" value="21751"/>
@@ -22903,12 +22897,6 @@
<int name="npc" value="1012100"/>
<int name="lvmin" value="63"/>
<string name="startscript" value="q21754s"/>
<int name="infoNumber" value="21765"/>
<imgdir name="infoex">
<imgdir name="0">
<string name="value" value="2"/>
</imgdir>
</imgdir>
<imgdir name="quest">
<imgdir name="0">
<int name="id" value="21753"/>