diff --git a/docs/mychanges_ptbr.txt b/docs/mychanges_ptbr.txt index 5ebe979a29..6fd37fc6ef 100644 --- a/docs/mychanges_ptbr.txt +++ b/docs/mychanges_ptbr.txt @@ -774,4 +774,11 @@ Corrigido itemid inválidos nos drops da DB. Adicionado quest rate (multiplicador de ganhos ao completar quests). Pequeno ajuste na área de alcançe dos drops no mapa. Espera-se que os drops agora não caiam fora do mapa em grande quantidade. Nova ferramenta: MapleInvalidItemIdFetcher. Busca no DB por todos os itemids inválidos e os lista em um arquivo. -Atualizado lista de drops no monster book. \ No newline at end of file +Atualizado lista de drops no monster book. + +06 - 09 Fevereiro 2018, +Resolvido possibilidade de bug com inconsistência de dados ao tentar salvar na DB um jogador offline. +Aplicado diversas pequenas correções em alguns drops de quests e métodos de eventos. +Quests expiráveis agora são devidamente canceladas ao entrar no MTS ou cash shop. +Corrigido problemas com itens que garantem proteção contra queda de HP em certos mapas (el nath, aqua road) garantindo proteção em mapas onde não deveriam garantir. +Adicionado novos scrolls à venda no Spindle. \ No newline at end of file diff --git a/scripts/event/0_EXAMPLE.js b/scripts/event/0_EXAMPLE.js index 71fc336016..9923621ba1 100644 --- a/scripts/event/0_EXAMPLE.js +++ b/scripts/event/0_EXAMPLE.js @@ -86,7 +86,14 @@ function timeOut(eim) { eim.dispose(); } -function monsterKilled(mob, eim) {} +function monsterKilled(mob, eim) { + // Happens when an opposing mob dies +} + +function monsterValue(eim, mobid) { + // Invoked when a monster that's registered has been killed + // return x amount for this player - "Saved Points" +} function friendlyKilled(mob, eim) { // Happens when a friendly mob dies @@ -112,11 +119,6 @@ function playerDisconnected(eim, player) { // return x that is < 0 - Deregister player normally + Dispose instance if there x player or below, if it's leader = boot all } -function monsterValue(eim, mobid) { - // Invoked when a monster that's registered has been killed - // return x amount for this player - "Saved Points" -} - function end(eim) { // Happens when the party fails to complete the event instance. } diff --git a/scripts/event/3rdJob_bowman.js b/scripts/event/3rdJob_bowman.js index 743c40aa51..ee9e5f521d 100644 --- a/scripts/event/3rdJob_bowman.js +++ b/scripts/event/3rdJob_bowman.js @@ -84,6 +84,10 @@ function changedMap(eim, chr, mapid) { function monsterKilled(mob, eim) {} +function monsterValue(eim, mobId) { + return 1; +} + function allMonstersDead(eim) {} function cancelSchedule() {} diff --git a/scripts/event/3rdJob_magician.js b/scripts/event/3rdJob_magician.js index b1f0f317b8..ed55597e5b 100644 --- a/scripts/event/3rdJob_magician.js +++ b/scripts/event/3rdJob_magician.js @@ -84,6 +84,10 @@ function changedMap(eim, chr, mapid) { function monsterKilled(mob, eim) {} +function monsterValue(eim, mobId) { + return 1; +} + function allMonstersDead(eim) {} function cancelSchedule() {} diff --git a/scripts/event/3rdJob_pirate.js b/scripts/event/3rdJob_pirate.js index 66b4d4ae96..dd3d047394 100644 --- a/scripts/event/3rdJob_pirate.js +++ b/scripts/event/3rdJob_pirate.js @@ -84,6 +84,10 @@ function changedMap(eim, chr, mapid) { function monsterKilled(mob, eim) {} +function monsterValue(eim, mobId) { + return 1; +} + function allMonstersDead(eim) {} function cancelSchedule() {} diff --git a/scripts/event/3rdJob_thief.js b/scripts/event/3rdJob_thief.js index 3b95735c03..4cd861b740 100644 --- a/scripts/event/3rdJob_thief.js +++ b/scripts/event/3rdJob_thief.js @@ -84,6 +84,10 @@ function changedMap(eim, chr, mapid) { function monsterKilled(mob, eim) {} +function monsterValue(eim, mobId) { + return 1; +} + function allMonstersDead(eim) {} function cancelSchedule() {} diff --git a/scripts/event/3rdJob_warrior.js b/scripts/event/3rdJob_warrior.js index b2ecdd66f8..20a3638ec5 100644 --- a/scripts/event/3rdJob_warrior.js +++ b/scripts/event/3rdJob_warrior.js @@ -84,6 +84,10 @@ function changedMap(eim, chr, mapid) { function monsterKilled(mob, eim) {} +function monsterValue(eim, mobId) { + return 1; +} + function allMonstersDead(eim) {} function cancelSchedule() {} diff --git a/scripts/npc/2010000.js b/scripts/npc/2010000.js index 43111024fc..d5abf51152 100644 --- a/scripts/npc/2010000.js +++ b/scripts/npc/2010000.js @@ -174,7 +174,7 @@ function start() { } function action(mode, type, selection) { - if (mode == 0) { + if (mode <= 0) { cm.sendOk("Hmmm...it shouldn't be a bad deal for you. Come see me at the right time and you may get a much better item to be offered. Anyway, let me know when you have a change of heart."); cm.dispose(); return; diff --git a/scripts/npc/2041026.js b/scripts/npc/2041026.js new file mode 100644 index 0000000000..83bfab352f --- /dev/null +++ b/scripts/npc/2041026.js @@ -0,0 +1,59 @@ +/* + 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 . +*/ +/* Ghosthunter Bob + */ + +var status; + +function start() { + status = -1; + action(1, 0, 0); +} + +function action(mode, type, selection) { + if (mode == -1) { + cm.dispose(); + } else { + if (mode == 0 && type > 0) { + cm.dispose(); + return; + } + if (mode == 1) + status++; + else + status--; + + if(status == 0) { + if(cm.haveItem(4220046, 1)) { + if(cm.isQuestStarted(3250)) { + cm.completeQuest(3250); + cm.gainFame(11); + } + + cm.gainItem(4220046, -1); + cm.sendOk("You want to hand the #r#t4220046##k to me, right? Alright, I'll take it for you."); + } else { + cm.sendOk("Hello there! I'm #b#p2041026##k, in charge of watching and reporting any paranormal activities in this area."); + } + + cm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/npc/2090004.js b/scripts/npc/2090004.js index 8aaad68df3..2785443d14 100644 --- a/scripts/npc/2090004.js +++ b/scripts/npc/2090004.js @@ -76,7 +76,7 @@ function action(mode, type, selection) { selStr = "What kind of medicine are you interested in making?#b"; for (var i = 0; i < itemSet.length; i++){ - selStr += "\r\n#L" + i + "# #i" + itemSet[i] + "# #t" + itemSet[i] + "##l"; + selStr += "\r\n#L" + i + "# #v" + itemSet[i] + "# #t" + itemSet[i] + "##l"; } selStr += "#k"; } @@ -98,11 +98,10 @@ function action(mode, type, selection) { status++; selStr = "So you wish to donate some medicine ingredients? This is great news! Donations will be accepted in the unit of #b100#k. The donator will receive a marble that enables one to make a scroll. Which of these would you like to donate? #b"; - itemSet = new Array("Acorn","Thimble","Needle Pouch","Necki Flower","Necki Swimming Cap","Broken Piece of Pot","Ginseng-Boiled Water","Straw Doll","Wooden Doll","Bellflower Root","100-Year-Old Bellflower", - "Old Paper","Yellow Belt","Broken Deer Horn","Red Belt","Peach Seed","Mr. Alli's Leather","Cat Doll","Mark of the Pirate","Captain Hat#k"); + itemSet = new Array(4000276,4000277,4000278,4000279,4000280,4000291,4000292,4000286,4000287,4000293,4000294,4000298,4000284,4000288,4000285,4000282,4000295,4000289,4000296,4000297); for (var i = 0; i < itemSet.length; i++){ - selStr += "\r\n#L" + i + "# " + itemSet[i] + "#l"; + selStr += "\r\n#L" + i + "# #v" + itemSet[i] + "# #t" + itemSet[i] + "##l"; } } @@ -165,7 +164,7 @@ function action(mode, type, selection) { else if(selectedType == 2){ selectedItem = selection; - itemSet = new Array(4000276,4000277,4000278,4000279,4000280,4000291,4000292,4000286,4000287,4000293,4000294,4000298,4000284,4000288,4000285,4000282,4000295,4000289,4000296,4031435); + itemSet = new Array(4000276,4000277,4000278,4000279,4000280,4000291,4000292,4000286,4000287,4000293,4000294,4000298,4000284,4000288,4000285,4000282,4000295,4000289,4000296,4000297); rewdSet = new Array(7,7,new Array(7,8),10,11,8,new Array(7,8),new Array(7,9),new Array(7,8),9,10,new Array(10,11),11,new Array(11,12),13,13,14,15,new Array(15,16),17); item = itemSet[selectedItem]; diff --git a/scripts/npc/9000017.js b/scripts/npc/9000017.js index 73db3c8586..f7cec6fb23 100644 --- a/scripts/npc/9000017.js +++ b/scripts/npc/9000017.js @@ -46,7 +46,7 @@ function action(mode, type, selection) { var itemSet = new Array(2049100, 7777777); var matSet = new Array(new Array(4031203,4001356,4000136,4000082,4001126,4080100,4000021,4003005)); - var matQtySet = new Array(new Array(100,60,40,80,80,8,200,120)); + var matQtySet = new Array(new Array(100,60,40,80,10,8,200,120)); var costSet = new Array(1200000, 7777777); item = itemSet[selectedItem]; mats = matSet[selectedItem]; diff --git a/scripts/portal/enterthirdDH.js b/scripts/portal/enterthirdDH.js index 587e5813d6..7c545d2a7d 100644 --- a/scripts/portal/enterthirdDH.js +++ b/scripts/portal/enterthirdDH.js @@ -1,18 +1,21 @@ function enter(pi) { - if (pi.hasItem(4032120) || pi.hasItem(4032121) || pi.hasItem(4032122) || pi.hasItem(4032123) || pi.hasItem(4032124)) { - pi.playerMessage(5, "You already have the proof of qualification."); - return false; - } + if (pi.hasItem(4032120) || pi.hasItem(4032121) || pi.hasItem(4032122) || pi.hasItem(4032123) || pi.hasItem(4032124)) { + pi.playerMessage(5, "You already have the proof of qualification."); + return false; + } if (pi.isQuestStarted(20601) || pi.isQuestStarted(20602) || pi.isQuestStarted(20603) || pi.isQuestStarted(20604) || pi.isQuestStarted(20605)) { - if (pi.getPlayerCount(913010200) == 0) { - var map = pi.getMap(913010200); - map.killAllMonsters(); - pi.warp(913010200, 0); - pi.spawnMonster(9300289, 0, 0); - } else { - pi.playerMessage(5, "Someone is already attempting to defeat the boss. Better come back later."); - } + if (pi.getPlayerCount(913010200) == 0) { + var map = pi.getMap(913010200); + map.killAllMonsters(); + pi.warp(913010200, 0); + pi.spawnMonster(9300289, 0, 0); + return true; + } else { + pi.playerMessage(5, "Someone is already attempting to defeat the boss. Better come back later."); + return false; + } } else { pi.playerMessage(5, "The only way to enter the hall #3 is if you're training for the Level 100 skills."); + return false; } } \ No newline at end of file diff --git a/scripts/portal/raid_rest.js b/scripts/portal/raid_rest.js index 3ed68a4213..0f09d012f0 100644 --- a/scripts/portal/raid_rest.js +++ b/scripts/portal/raid_rest.js @@ -32,7 +32,7 @@ function enter(pi) { return false; } - if(!pi.getPlayer().getEventInstance().giveEventReward(pi.getPlayer(), evLevel)) { + if(pi.getPlayer().getEventInstance().giveEventReward(pi.getPlayer(), evLevel)) { pi.warp(970030000); return true; } diff --git a/scripts/quest/20527.js b/scripts/quest/20527.js new file mode 100644 index 0000000000..14bcf7e65b --- /dev/null +++ b/scripts/quest/20527.js @@ -0,0 +1,50 @@ +/* + 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) { + var mount = qm.getPlayer().getMount(); + + if(mount != null && mount.getLevel() >= 3) { + qm.sendNext("Alright, I'll get you started in how to train Mimio, the next step for Mimianas. When you're ready, talk to me again."); + qm.forceCompleteQuest(); + } else { + qm.sendNext("It looks like your Mimiana haven't reached #rlevel 3#k yet. Please train it a bit more before trying to advance it."); + } + + qm.dispose(); + } + } +} diff --git a/sql/db_database.sql b/sql/db_database.sql index da8a669121..b434ca2d32 100644 --- a/sql/db_database.sql +++ b/sql/db_database.sql @@ -4294,7 +4294,7 @@ INSERT IGNORE INTO `temp_data` (`id`, `dropperid`, `itemid`, `minimum_quantity`, (4075, 5120506, 1412007, 1, 1, 0, 700), (4076, 5120506, 1050059, 1, 1, 0, 700), (4077, 5120506, 1442010, 1, 1, 0, 700), -(4078, 5120506, 4000299, 1, 1, 0, 600000), +(4078, 5120506, 4000299, 1, 1, 0, 100000), (4079, 5120506, 1492007, 1, 1, 0, 500), (4080, 5120506, 2330002, 1, 1, 0, 500), (4081, 5120506, 2040317, 1, 1, 0, 300), diff --git a/sql/db_drops.sql b/sql/db_drops.sql index 5303bcdd24..f1d3f4c3d2 100644 --- a/sql/db_drops.sql +++ b/sql/db_drops.sql @@ -11661,8 +11661,8 @@ USE `heavenms`; (7130500, 1072163, 1, 1, 0, 700), (7130500, 1332018, 1, 1, 0, 700), (7130500, 1052122, 1, 1, 0, 700), -(7130104, 4031435, 1, 1, 0, 7000), -(9300242, 4031435, 1, 1, 0, 7000), +(7130104, 4031435, 1, 1, 7777, 7000), +(9300242, 4031435, 1, 1, 7777, 7000), (7130104, 4130000, 1, 1, 0, 3000), (9300242, 4130000, 1, 1, 0, 3000), (7130104, 4130017, 1, 1, 0, 3000), @@ -19244,10 +19244,10 @@ USE `heavenms`; (9400578, 1372009, 1, 1, 0, 1200), (9300011, 4031130, 1, 1, 0, 10000), (7160000, 2385015, 1, 1, 0, 10000), -(3230306, 2022355, 1, 1, 3248, 4000), -(4230113, 2022354, 1, 1, 3248, 4000), -(5220003, 4031991, 1, 1, 3248, 15000), -(4230122, 2022354, 1, 1, 0, 4000), +(3230306, 2022355, 1, 1, 3248, 100000), +(4230113, 2022354, 1, 1, 3248, 100000), +(5220003, 4031991, 1, 1, 3248, 999999), +(4230122, 2022354, 1, 1, 3248, 100000), (3210100, 2382003, 1, 1, 0, 8000), (3100101, 2382008, 1, 1, 0, 8000), (3110301, 2382010, 1, 1, 0, 8000), @@ -20009,7 +20009,19 @@ USE `heavenms`; (9400613, 4020002, 1, 1, 0, 7000), (9400613, 1082258, 1, 1, 0, 5000), (9400613, 1072421, 1, 1, 0, 5000), -(4110302, 2383007, 1, 1, 0, 8000); +(4110302, 2383007, 1, 1, 0, 8000), +(130100, 4032374, 1, 1, 2405, 40000), +(1110101, 4032374, 1, 1, 2405, 40000), +(210100, 4032376, 1, 1, 2406, 40000), +(1110101, 4032376, 1, 1, 2406, 40000), +(210100, 4032377, 1, 1, 2407, 40000), +(1210101, 4032377, 1, 1, 2407, 40000), +(130100, 4032378, 1, 1, 2408, 40000), +(1120100, 4032378, 1, 1, 2408, 40000), +(1110100, 4032379, 1, 1, 2409, 40000), +(1210100, 4032379, 1, 1, 2409, 40000), +(2130100, 4001344, 1, 1, 0, 7000), +(7220002, 4031789, 1, 1, 3844, 999999); # (dropperid, itemid, minqty, maxqty, questid, chance) @@ -20144,7 +20156,6 @@ USE `heavenms`; UPDATE drop_data SET questid=20707 WHERE itemid=4032130; UPDATE drop_data SET questid=28170 WHERE itemid=4001345; UPDATE drop_data SET questid=7301 WHERE itemid=4001077; - UPDATE drop_data SET questid=3248 WHERE itemid=2022354; UPDATE drop_data SET chance=40000, questid=3250 WHERE itemid=4031992; UPDATE drop_data SET questid=6191 WHERE itemid=4001107; UPDATE drop_data SET questid=28344 WHERE itemid=4032475; @@ -20154,7 +20165,6 @@ USE `heavenms`; UPDATE drop_data SET questid=28175 WHERE itemid=4001342; UPDATE drop_data SET questid=7777 WHERE itemid=4031906; #id 7777 for ALL "quest items" with no v83 quest. UPDATE drop_data SET chance=0 WHERE itemid=2050099; - UPDATE drop_data SET chance=40000 WHERE itemid=4031991; UPDATE drop_data SET questid=6191 WHERE itemid=4031477; UPDATE drop_data SET questid=6190 WHERE itemid=4001111; UPDATE drop_data SET questid=28282 WHERE itemid=4001373; diff --git a/sql/db_shopupdate.sql b/sql/db_shopupdate.sql index d4897e89d3..20e3d0769b 100644 --- a/sql/db_shopupdate.sql +++ b/sql/db_shopupdate.sql @@ -8,80 +8,84 @@ INSERT INTO `shops` (`shopid`,`npcid`) VALUES (9110002,9110002), (9201082,9201082); -INSERT IGNORE INTO `shopitems` (`shopitemid`, `shopid`, `itemid`, `price`, `pitch`, `position`) VALUES -(995032, 9201082, 2040025, 500000, 0, 1), -(995033, 9201082, 2040029, 500000, 0, 2), -(995034, 9201082, 2040301, 400000, 0, 3), -(995035, 9201082, 2040317, 400000, 0, 4), -(995036, 9201082, 2040321, 400000, 0, 5), -(995037, 9201082, 2040413, 400000, 0, 6), -(995038, 9201082, 2040418, 400000, 0, 7), -(995039, 9201082, 2040501, 250000, 0, 8), -(995040, 9201082, 2040513, 250000, 0, 9), -(995041, 9201082, 2040516, 250000, 0, 10), -(995042, 9201082, 2040532, 250000, 0, 11), -(995043, 9201082, 2040613, 400000, 0, 12), -(995044, 9201082, 2040701, 450000, 0, 13), -(995045, 9201082, 2040704, 450000, 0, 14), -(995046, 9201082, 2040804, 550000, 0, 15), -(995047, 9201082, 2040914, 300000, 0, 16), -(995048, 9201082, 2040919, 300000, 0, 17), -(995049, 9201082, 2041013, 300000, 0, 18), -(995050, 9201082, 2041016, 300000, 0, 19), -(995051, 9201082, 2041019, 300000, 0, 20), -(995052, 9201082, 2041022, 300000, 0, 21), -(995053, 9201082, 2044901, 520000, 0, 22), -(995054, 9201082, 2044701, 520000, 0, 23), -(995055, 9201082, 2043001, 520000, 0, 24), -(995056, 9201082, 2043801, 520000, 0, 25), -(995057, 9201082, 2044601, 520000, 0, 26), -(995058, 9201082, 2040727, 50000, 0, 27), -(995059, 9201082, 2041058, 50000, 0, 28), -(995060, 9201082, 2040807, 1000000, 0, 29), -(995061, 9201082, 2040026, 15000, 0, 30), -(995062, 9201082, 2040031, 15000, 0, 31), -(995063, 9201082, 2040302, 25000, 0, 32), -(995064, 9201082, 2040318, 25000, 0, 33), -(995065, 9201082, 2040323, 25000, 0, 34), -(995066, 9201082, 2040412, 20000, 0, 35), -(995067, 9201082, 2040419, 20000, 0, 36), -(995068, 9201082, 2040502, 25000, 0, 37), -(995069, 9201082, 2040514, 25000, 0, 38), -(995070, 9201082, 2040517, 25000, 0, 39), -(995071, 9201082, 2040534, 25000, 0, 40), -(995072, 9201082, 2040612, 20000, 0, 41), -(995073, 9201082, 2040702, 20000, 0, 42), -(995074, 9201082, 2040705, 25000, 0, 43), -(995075, 9201082, 2040805, 100000, 0, 44), -(995076, 9201082, 2040915, 55000, 0, 45), -(995077, 9201082, 2040920, 55000, 0, 46), -(995078, 9201082, 2041014, 30000, 0, 47), -(995079, 9201082, 2041017, 30000, 0, 48), -(995080, 9201082, 2041020, 30000, 0, 49), -(995081, 9201082, 2041023, 30000, 0, 50), -(995082, 9201082, 2044902, 50000, 0, 51), -(995083, 9201082, 2044702, 50000, 0, 52), -(995084, 9201082, 2043002, 50000, 0, 53), -(995085, 9201082, 2043802, 50000, 0, 54), -(995086, 9201082, 2044602, 50000, 0, 55), -(996000, 9201082, 2049200, 170000, 0, 56), -(996001, 9201082, 2049201, 220000, 0, 57), -(996002, 9201082, 2049202, 170000, 0, 58), -(996003, 9201082, 2049203, 220000, 0, 59), -(996004, 9201082, 2049204, 170000, 0, 60), -(996005, 9201082, 2049205, 220000, 0, 61), -(996006, 9201082, 2049206, 170000, 0, 62), -(996007, 9201082, 2049207, 220000, 0, 63), -(996008, 9201082, 2049208, 140000, 0, 64), -(996009, 9201082, 2049209, 170000, 0, 65), -(996010, 9201082, 2049210, 140000, 0, 66), -(996011, 9201082, 2049211, 170000, 0, 67), -(996196, 9201082, 2070016, 120000000, 0, 68), -(996197, 9201082, 2070018, 190000000, 0, 69), -(994782, 9201082, 2030007, 1800000, 0, 70), -(994783, 9201082, 4001017, 60000000, 0, 71); +INSERT IGNORE INTO `shopitems` (`shopid`, `itemid`, `price`, `pitch`, `position`) VALUES +(9201082, 2040025, 500000, 0, 1), +(9201082, 2040029, 500000, 0, 2), +(9201082, 2040017, 500000, 0, 3), +(9201082, 2040301, 400000, 0, 4), +(9201082, 2040317, 400000, 0, 5), +(9201082, 2040321, 400000, 0, 6), +(9201082, 2040413, 400000, 0, 7), +(9201082, 2040418, 400000, 0, 8), +(9201082, 2040501, 250000, 0, 9), +(9201082, 2040513, 250000, 0, 10), +(9201082, 2040516, 250000, 0, 11), +(9201082, 2040532, 250000, 0, 12), +(9201082, 2040613, 400000, 0, 13), +(9201082, 2040701, 450000, 0, 14), +(9201082, 2040704, 450000, 0, 15), +(9201082, 2040804, 550000, 0, 16), +(9201082, 2040817, 550000, 0, 17), +(9201082, 2040914, 300000, 0, 18), +(9201082, 2040919, 300000, 0, 19), +(9201082, 2041013, 300000, 0, 20), +(9201082, 2041016, 300000, 0, 21), +(9201082, 2041019, 300000, 0, 22), +(9201082, 2041022, 300000, 0, 23), +(9201082, 2044901, 520000, 0, 24), +(9201082, 2044701, 520000, 0, 25), +(9201082, 2043001, 520000, 0, 26), +(9201082, 2043801, 520000, 0, 27), +(9201082, 2044601, 520000, 0, 28), +(9201082, 2040727, 50000, 0, 29), +(9201082, 2041058, 50000, 0, 30), +(9201082, 2040807, 1000000, 0, 31), +(9201082, 2040026, 15000, 0, 32), +(9201082, 2040031, 15000, 0, 33), +(9201082, 2040016, 15000, 0, 34), +(9201082, 2040302, 25000, 0, 35), +(9201082, 2040318, 25000, 0, 36), +(9201082, 2040323, 25000, 0, 37), +(9201082, 2040412, 20000, 0, 38), +(9201082, 2040419, 20000, 0, 39), +(9201082, 2040502, 25000, 0, 40), +(9201082, 2040514, 25000, 0, 41), +(9201082, 2040517, 25000, 0, 42), +(9201082, 2040534, 25000, 0, 43), +(9201082, 2040612, 20000, 0, 44), +(9201082, 2040702, 20000, 0, 45), +(9201082, 2040705, 25000, 0, 46), +(9201082, 2040805, 100000, 0, 47), +(9201082, 2040816, 100000, 0, 48), +(9201082, 2040915, 55000, 0, 49), +(9201082, 2040920, 55000, 0, 50), +(9201082, 2041014, 30000, 0, 51), +(9201082, 2041017, 30000, 0, 52), +(9201082, 2041020, 30000, 0, 53), +(9201082, 2041023, 30000, 0, 54), +(9201082, 2044902, 50000, 0, 55), +(9201082, 2044702, 50000, 0, 56), +(9201082, 2043002, 50000, 0, 57), +(9201082, 2043802, 50000, 0, 58), +(9201082, 2044602, 50000, 0, 59), +(9201082, 2049200, 170000, 0, 60), +(9201082, 2049201, 220000, 0, 61), +(9201082, 2049202, 170000, 0, 62), +(9201082, 2049203, 220000, 0, 63), +(9201082, 2049204, 170000, 0, 64), +(9201082, 2049205, 220000, 0, 65), +(9201082, 2049206, 170000, 0, 66), +(9201082, 2049207, 220000, 0, 67), +(9201082, 2049208, 140000, 0, 68), +(9201082, 2049209, 170000, 0, 69), +(9201082, 2049210, 140000, 0, 70), +(9201082, 2049211, 170000, 0, 71), +(9201082, 2070016, 120000000, 0, 72), +(9201082, 2070018, 190000000, 0, 73), +(9201082, 2030007, 1800000, 0, 74), +(9201082, 4001017, 60000000, 0, 75); -UPDATE shopitems SET price = 11*price WHERE (`position` >= 27 and `position` <= 67 and `shopid` = 9201082); +UPDATE shopitems SET price = 11*price WHERE (`position` >= 29 and `position` <= 71 and `shopid` = 9201082); INSERT IGNORE INTO `shopitems` (`shopid`, `itemid`, `price`, `pitch`, `position`) VALUES (1031100, 3010015, 20000, 0, 100), diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java index fd8dee0971..0c340b0757 100644 --- a/src/client/MapleCharacter.java +++ b/src/client/MapleCharacter.java @@ -1246,16 +1246,22 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { private boolean buffMapProtection() { effLock.lock(); chrLock.lock(); + + int thisMapid = mapid; + int returnMapid = client.getChannelServer().getMapFactory().getMap(thisMapid).getReturnMapId(); + try { - MapleMap thisMap = client.getChannelServer().getMapFactory().getMap(mapid); - for(Entry mbs : effects.entrySet()) { if(mbs.getKey() == MapleBuffStat.MAP_PROTECTION) { byte value = (byte)mbs.getValue().value; - if(value == 1 && (thisMap.getReturnMapId() == 211000000 || thisMap.getReturnMapId() == 193000000)) return true; //protection from cold - else if(value == 2 && (thisMap.getReturnMapId() == 211000000 || thisMap.getReturnMapId() == 230000000)) return true; //breathing underwater - else return false; + if(value == 1 && ((returnMapid == 211000000 && thisMapid != 200082300) || returnMapid == 193000000)) { + return true; //protection from cold + } else if(value == 2 && (returnMapid == 230000000 || thisMapid == 200082300)) { + return true; //breathing underwater + } else { + return false; + } } } } finally { @@ -1264,7 +1270,9 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { } for(Item it: this.getInventory(MapleInventoryType.EQUIPPED).list()) { - if((it.getFlag() & ItemConstants.COLD) == ItemConstants.COLD && map.getReturnMapId() == 211000000) return true; //protection from cold + if((it.getFlag() & ItemConstants.COLD) == ItemConstants.COLD && ((returnMapid == 211000000 && thisMapid != 200082300) || returnMapid == 193000000)) { + return true; //protection from cold + } } return false; @@ -6285,6 +6293,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { } public synchronized void saveToDB(boolean notAutosave) { + if(!loggedIn) return; + Calendar c = Calendar.getInstance(); if(notAutosave) FilePrinter.print(FilePrinter.SAVING_CHARACTER, "Attempting to save " + name + " at " + c.getTime().toString()); @@ -7474,6 +7484,19 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { } } + public void forfeitExpirableQuests() { + petLock.lock(); + try { + for(MapleQuest quest : questExpirations.keySet()) { + quest.forfeit(this); + } + + questExpirations.clear(); + } finally { + petLock.unlock(); + } + } + public void questExpirationTask() { petLock.lock(); try { diff --git a/src/net/server/channel/handlers/EnterCashShopHandler.java b/src/net/server/channel/handlers/EnterCashShopHandler.java index 986cd30001..268034ccbe 100644 --- a/src/net/server/channel/handlers/EnterCashShopHandler.java +++ b/src/net/server/channel/handlers/EnterCashShopHandler.java @@ -65,8 +65,10 @@ public class EnterCashShopHandler extends AbstractMaplePacketHandler { mc.cancelDiseaseExpireTask(); mc.cancelSkillCooldownTask(); mc.cancelExpirationTask(); + + mc.forfeitExpirableQuests(); mc.cancelQuestExpirationTask(); - + c.announce(MaplePacketCreator.openCashShop(c, false)); c.announce(MaplePacketCreator.showCashInventory(c)); c.announce(MaplePacketCreator.showGifts(mc.getCashShop().loadGifts())); diff --git a/src/net/server/channel/handlers/EnterMTSHandler.java b/src/net/server/channel/handlers/EnterMTSHandler.java index f4072f1da7..c40bf00ca7 100644 --- a/src/net/server/channel/handlers/EnterMTSHandler.java +++ b/src/net/server/channel/handlers/EnterMTSHandler.java @@ -74,6 +74,8 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler { chr.cancelDiseaseExpireTask(); chr.cancelSkillCooldownTask(); chr.cancelExpirationTask(); + + chr.forfeitExpirableQuests(); chr.cancelQuestExpirationTask(); chr.saveToDB(); diff --git a/src/net/server/channel/handlers/StorageHandler.java b/src/net/server/channel/handlers/StorageHandler.java index 593d1872ef..647a52e3ef 100644 --- a/src/net/server/channel/handlers/StorageHandler.java +++ b/src/net/server/channel/handlers/StorageHandler.java @@ -49,7 +49,7 @@ public final class StorageHandler extends AbstractMaplePacketHandler { final MapleStorage storage = chr.getStorage(); if (chr.getLevel() < 15){ - chr.message("You may only use the storage once you have reached level 15."); + chr.dropMessage(1, "You may only use the storage once you have reached level 15."); c.announce(MaplePacketCreator.enableActions()); return; } diff --git a/src/server/MapleItemInformationProvider.java b/src/server/MapleItemInformationProvider.java index 1169337ea2..f3f0b5d940 100644 --- a/src/server/MapleItemInformationProvider.java +++ b/src/server/MapleItemInformationProvider.java @@ -1227,7 +1227,7 @@ public class MapleItemInformationProvider { return isQuestItemCache.get(itemId); } MapleData data = getItemData(itemId); - boolean questItem = MapleDataTool.getIntConvert("info/quest", data, 0) == 1; + boolean questItem = (data != null && MapleDataTool.getIntConvert("info/quest", data, 0) == 1); isQuestItemCache.put(itemId, questItem); return questItem; } diff --git a/src/server/MapleStorage.java b/src/server/MapleStorage.java index ce9a19c04c..7b3bdf6557 100644 --- a/src/server/MapleStorage.java +++ b/src/server/MapleStorage.java @@ -223,13 +223,11 @@ public class MapleStorage { } public void sendStorage(MapleClient c, int npcId) { - /* if (c.getPlayer().getLevel() < 15){ - c.getPlayer().message("You may only use the storage once you have reached level 15."); + c.getPlayer().dropMessage(1, "You may only use the storage once you have reached level 15."); c.announce(MaplePacketCreator.enableActions()); return; } - */ lock.lock(); try { diff --git a/src/server/maps/MapleMap.java b/src/server/maps/MapleMap.java index 4911053548..dc57854be1 100644 --- a/src/server/maps/MapleMap.java +++ b/src/server/maps/MapleMap.java @@ -2610,7 +2610,7 @@ public class MapleMap { } public void setMapPointBoundings(int px, int py, int h, int w) { - mapArea.setBounds(px + 60, py, w - 120, h); + mapArea.setBounds(px + 80, py, w - 160, h); } public void setMapLineBoundings(int vrTop, int vrBottom, int vrLeft, int vrRight) { diff --git a/tools/MapleMobBookUpdate/lib/MonsterBook_updated.img.xml b/tools/MapleMobBookUpdate/lib/MonsterBook_updated.img.xml index d9d0ef9321..769ee2b18a 100644 --- a/tools/MapleMobBookUpdate/lib/MonsterBook_updated.img.xml +++ b/tools/MapleMobBookUpdate/lib/MonsterBook_updated.img.xml @@ -143,6 +143,7 @@ + @@ -194,6 +195,8 @@ + + @@ -230,6 +233,7 @@ + @@ -400,6 +404,7 @@ + @@ -443,6 +448,7 @@ + @@ -585,6 +591,8 @@ + + @@ -989,6 +997,8 @@ + + @@ -1171,12 +1181,13 @@ - - - - - - + + + + + + + @@ -10619,6 +10630,7 @@ + diff --git a/wz/Character.wz/Ring/01112405.img.xml b/wz/Character.wz/Ring/01112405.img.xml index 408285eeba..7bf8926a4a 100644 --- a/wz/Character.wz/Ring/01112405.img.xml +++ b/wz/Character.wz/Ring/01112405.img.xml @@ -27,7 +27,6 @@ - diff --git a/wz/Character.wz/Ring/01112413.img.xml b/wz/Character.wz/Ring/01112413.img.xml index 4b8c501c61..0463363367 100644 --- a/wz/Character.wz/Ring/01112413.img.xml +++ b/wz/Character.wz/Ring/01112413.img.xml @@ -27,7 +27,6 @@ - diff --git a/wz/Character.wz/Ring/01112414.img.xml b/wz/Character.wz/Ring/01112414.img.xml index a364562d5b..dc776b1151 100644 --- a/wz/Character.wz/Ring/01112414.img.xml +++ b/wz/Character.wz/Ring/01112414.img.xml @@ -27,7 +27,6 @@ - diff --git a/wz/String.wz/MonsterBook.img.xml b/wz/String.wz/MonsterBook.img.xml index d9d0ef9321..769ee2b18a 100644 --- a/wz/String.wz/MonsterBook.img.xml +++ b/wz/String.wz/MonsterBook.img.xml @@ -143,6 +143,7 @@ + @@ -194,6 +195,8 @@ + + @@ -230,6 +233,7 @@ + @@ -400,6 +404,7 @@ + @@ -443,6 +448,7 @@ + @@ -585,6 +591,8 @@ + + @@ -989,6 +997,8 @@ + + @@ -1171,12 +1181,13 @@ - - - - - - + + + + + + + @@ -10619,6 +10630,7 @@ +