diff --git a/mychanges_ptbr.txt b/mychanges_ptbr.txt index f4d7790877..989830617c 100644 --- a/mychanges_ptbr.txt +++ b/mychanges_ptbr.txt @@ -94,4 +94,7 @@ Correcao de bug. 18 Julho 2016, Bazaar NPC (Donation Box): venda automatica de um item designado e todos os itens que estiverem imediatamente após. -Spindle: NPC scroll seller. \ No newline at end of file +Spindle: NPC scroll seller. + +26 Julho 2016, +Correcao de bug. \ No newline at end of file diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml index 078212c0ee..6babecd45d 100644 --- a/nbproject/private/private.xml +++ b/nbproject/private/private.xml @@ -3,33 +3,12 @@ - file:/C:/Nexon/MapleSolaxia/scripts/npc/world0/9000036.js - file:/C:/Nexon/MapleSolaxia/src/scripting/reactor/ReactorActionManager.java - file:/C:/Nexon/MapleSolaxia/src/scripting/npc/NPCConversationManager.java - file:/C:/Nexon/MapleSolaxia/src/client/inventory/MapleInventory.java - file:/C:/Nexon/MapleSolaxia/src/scripting/npc/NPCScriptManager.java - file:/C:/Nexon/MapleSolaxia/src/client/MapleClient.java - file:/C:/Nexon/MapleSolaxia/src/server/MapleItemInformationProvider.java - file:/C:/Nexon/MapleSolaxia/wz/Quest.wz/QuestInfo.img.xml - file:/C:/Nexon/MapleSolaxia/src/client/MonsterBook.java - file:/C:/Nexon/MapleSolaxia/src/scripting/event/EventInstanceManager.java - file:/C:/Nexon/MapleSolaxia/src/server/MapleStorage.java - file:/C:/Nexon/MapleSolaxia/src/server/MapleShop.java - file:/C:/Nexon/MapleSolaxia/src/client/inventory/MapleInventoryType.java - file:/C:/Nexon/MapleSolaxia/src/client/inventory/Item.java - file:/C:/Nexon/MapleSolaxia/src/server/maps/MapleReactorStats.java - file:/C:/Nexon/MapleSolaxia/src/scripting/AbstractScriptManager.java - file:/C:/Nexon/MapleSolaxia/src/provider/MapleData.java - file:/C:/Nexon/MapleSolaxia/src/provider/MapleDataProvider.java - file:/C:/Nexon/MapleSolaxia/src/net/MapleServerHandler.java - file:/C:/Nexon/MapleSolaxia/src/client/MapleCharacter.java - file:/C:/Nexon/MapleSolaxia/src/client/command/Commands.java - file:/C:/Nexon/MapleSolaxia/src/tools/MaplePacketCreator.java - file:/C:/Nexon/MapleSolaxia/logs/29-07-2015/error/saveToDB.txt file:/C:/Nexon/MapleSolaxia/src/scripting/AbstractPlayerInteraction.java - file:/C:/Nexon/MapleSolaxia/src/net/server/RankingWorker.java + file:/C:/Nexon/MapleSolaxia/src/scripting/npc/NPCConversationManager.java + file:/C:/Nexon/MapleSolaxia/wz/Mob.wz/7220000.img.xml + file:/C:/Nexon/MapleSolaxia/src/server/MapleItemInformationProvider.java + file:/C:/Nexon/MapleSolaxia/src/scripting/quest/QuestActionManager.java file:/C:/Nexon/MapleSolaxia/src/constants/ServerConstants.java - file:/C:/Nexon/MapleSolaxia/src/server/maps/MapleReactor.java diff --git a/scripts/npc/world0/2090004.js b/scripts/npc/world0/2090004.js index 05041a7f45..e53cde6093 100644 --- a/scripts/npc/world0/2090004.js +++ b/scripts/npc/world0/2090004.js @@ -24,10 +24,19 @@ function action(mode, type, selection) { cm.dispose(); if (status == 0 && mode == 1) { if (cm.isQuestActive(3821)) { - cm.forceCompleteQuest(3821); - cm.sendNext("Quest complete."); - cm.dispose(); - return; + if(!cm.haveItem(4031554)) { + if(cm.canHold(4031554)) { + cm.sendNext("Oh, the boy wanted you to bring him a #t4031554#? No problem, I was on his debt anyway. Now, tell him I am repaying the debt, OK?"); + cm.gainItem(4031554, 1); + cm.dispose(); + return; + } + else { + cm.sendNext("Make room at your ETC inventory first."); + cm.dispose(); + return; + } + } } var selStr = "I am a man of many talents. Let me know what you'd like to do. #b" var options = new Array("Make a medicine","Make a scroll","Donate medicine ingredients","I want to forfeit the restoration of Portrait Scroll..."); diff --git a/scripts/npc/world0/2091005.js b/scripts/npc/world0/2091005.js index 326ab962ad..b81b0935ce 100644 --- a/scripts/npc/world0/2091005.js +++ b/scripts/npc/world0/2091005.js @@ -59,6 +59,7 @@ function start() { } else { cm.sendOk("Hey! Are you mocking my master? Who do you think you are to challenge him? This is a joke! You should at least be level #b25#k."); cm.dispose(); + return; } } @@ -77,16 +78,20 @@ function action(mode, type, selection) { } else if (status == 1) { if (mode == 0) { cm.sendNext("Haha! Who are you trying to impress with a heart like that?\r\nGo back home where you belong!"); + cm.dispose(); + return; } else { if(cm.getClient().getChannelServer().getMapFactory().getMap(925020010).getCharacters().size() > 0) { cm.sendOk("Someone is already in Dojo"); - cm.dispose(); - return; } + else { cm.warp(925020010, 0); cm.getPlayer().setFinishedDojoTutorial(); + } + + cm.dispose(); + return; } - cm.dispose(); } } else if (cm.getPlayer().getDojoStage() > 0) { if (status == 0) { @@ -107,6 +112,7 @@ function action(mode, type, selection) { cm.getClient().getChannelServer().getMapFactory().getMap(925020100).killAllMonsters(); cm.warp(925020100, 0); cm.dispose(); + return; } } else if (selectedMenu == 1) { //I want to challenge him with a party. var party = cm.getPlayer().getParty(); @@ -128,10 +134,17 @@ function action(mode, type, selection) { if (party.getLeader().getId() != cm.getPlayer().getId()) { cm.sendNext("Where do you think you're going? You're not even the party leader! Go tell your party leader to talk to me."); cm.dispose(); - } else if (party.getMembers().size() == 1) { - cm.sendNext("You're going to take on the challenge as a one-man party?"); - } else if (!isBetween30) { + return; + } + + //else if (party.getMembers().size() == 1) { + // cm.sendNext("You're going to take on the challenge as a one-man party?"); + //} + + else if (!isBetween30) { cm.sendNext("Your partys level ranges are too broad to enter. Please make sure all of your party members are within #r30 levels#k of each other."); + cm.dispose(); + return; } else { for (var i = 1 ; i < 39; i++) { //only 32 stages, but 38 maps if(cm.getClient().getChannelServer().getMapFactory().getMap(925020000 + 100 * i).getCharacters().size() > 0) { @@ -144,10 +157,16 @@ function action(mode, type, selection) { cm.getClient().getChannelServer().getMapFactory().getMap(925020100).killAllMonsters(); cm.warpParty(925020100); cm.dispose(); + return; } - cm.dispose(); + } else if (selectedMenu == 2) { //I want to receive a belt. - if (mode < 1) { + if (!cm.canHold(belts[0])) { + cm.sendNext("Make room in your EQUIP inventory before trying to claim a belt!"); + cm.dispose(); + return; + } + if (mode < 1) { cm.dispose(); return; } @@ -155,9 +174,9 @@ function action(mode, type, selection) { var selStr = "You have #b" + cm.getPlayer().getDojoPoints() + "#k training points. Master prefers those with great talent. If you obtain more points than the average, you can receive a belt depending on your score.\r\n"; for (var i = 0; i < belts.length; i++) { if (cm.getPlayer().getItemQuantity(belts[i], true) > 0) { - selStr += "\r\n #i" + belts[i] + "# #t" + belts[i] + "#(Obtain)"; + selStr += "\r\n#L" + i + "##i" + belts[i] + "# #t" + belts[i] + "# (Obtained)"; } else - selStr += "\r\n#L" + i + "##i" + belts[i] + "# #t" + belts[i] + "#l"; + selStr += "\r\n#L" + i + "##i" + belts[i] + "# #t" + belts[i] + "#"; } cm.sendSimple(selStr); } else if (status == 1) { @@ -165,13 +184,17 @@ function action(mode, type, selection) { var level = belt_level[selection]; var points = belt_points[selection]; if (cm.getPlayer().getDojoPoints() > points) { - if (cm.getPlayer().getLevel() > level) + if (cm.getPlayer().getLevel() > level) { cm.gainItem(belt, 1); + cm.sendNext("There is the #i" + belt + "# #b#t" + belt + "##k. You have proven your valor to ascend on the Dojo ranks. Well done!"); + } else cm.sendNext("In order to receive #i" + belt + "# #b#t" + belt + "##k, you have to be at least over level #b" + level + "#k and you need to have earned at least #b" + points + " training points#k.\r\n\r\nIf you want to obtain this belt, you need #r" + (points - cm.getPlayer().getDojoPoints()) + "#k more training points."); } else cm.sendNext("In order to receive #i" + belt + "# #b#t" + belt + "##k, you have to be at least over level #b" + level + "#k and you need to have earned at least #b" + points + " training points#k.\r\n\r\nIf you want to obtain this belt, you need #r" + (points - cm.getPlayer().getDojoPoints()) + "#k more training points."); + cm.dispose(); + return; } } else if (selectedMenu == 3) { //I want to reset my training points. if (status == 0) { @@ -184,6 +207,7 @@ function action(mode, type, selection) { cm.sendNext("There! All your training points have been reset. Think of it as a new beginning and train hard!"); } cm.dispose(); + return; } } else if (selectedMenu == 4) { //I want to receive a medal. if (status == 0 && cm.getPlayer().getVanquisherStage() <= 0) { @@ -191,10 +215,9 @@ function action(mode, type, selection) { } else if (status == 1 || cm.getPlayer().getVanquisherStage() > 0) { if (mode == 0) { cm.sendNext("If you don't want to, that's fine."); - cm.dispose(); } else { if (cm.getPlayer().getDojoStage() > 37) { - cm.sendNext("You have complete all medals challenges."); + cm.sendNext("You have completed all medals challenges."); } else if (cm.getPlayer().getVanquisherKills() < 100 && cm.getPlayer().getVanquisherStage() > 0) cm.sendNext("You still need #b" + (100 - cm.getPlayer().getVanquisherKills()) + "#k in order to obtain the #b#t" + (1142032 + cm.getPlayer().getVanquisherStage()) + "##k. Please try a little harder. As a reminder, only the mosnters that have been summoned by our Master in Mu Lung Dojo are considered. Oh, and make sure you're not hunting the monsters and exiting!#r If you don't go to the next level after defeating the monster, it doesn't count as a win#k."); else if (cm.getPlayer().getVanquisherStage() <= 0) { @@ -206,14 +229,23 @@ function action(mode, type, selection) { cm.getPlayer().setVanquisherKills(0); } } + cm.dispose(); + return; } + else { + cm.dispose(); + return; + } } else if (selectedMenu == 5) { //What is a Mu Lung Dojo? cm.sendNext("Our master is the strongest person in Mu Lung. The place he built is called the Mu Lung Dojo, a building that is 38 stories tall! You can train yourself as you go up each level. Of course, it'll be hard for someone at your level to reach the top."); cm.dispose(); + return; } - } else + } else { cm.dispose(); + return; + } } else if (isRestingSpot(cm.getPlayer().getMap().getId())) { if (selectedMenu == -1) selectedMenu = selection; @@ -221,6 +253,7 @@ function action(mode, type, selection) { if (selectedMenu == 0) { cm.warp(cm.getPlayer().getMap().getId() + 100, 0); cm.dispose(); + return; } else if (selectedMenu == 1) { //I want to leave if (status == 0) { cm.sendAcceptDecline("So, you're giving up? You're really going to leave?"); @@ -229,6 +262,7 @@ function action(mode, type, selection) { cm.warp(925020002); } cm.dispose(); + return; } } else if (selectedMenu == 2) { //I want to record my score up to this point if (status == 0) { @@ -243,6 +277,7 @@ function action(mode, type, selection) { cm.getPlayer().setDojoStage((cm.getMapId() - 925020000) / 100); } cm.dispose(); + return; } } } else { diff --git a/scripts/npc/world0/2091005_old.js b/scripts/npc/world0/2091005_old.js new file mode 100644 index 0000000000..326ab962ad --- /dev/null +++ b/scripts/npc/world0/2091005_old.js @@ -0,0 +1,261 @@ +/* + 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: Moogra, XxOsirisxX +* @NPC: 2091005 +* @Name: So Gong +* @Map(s): Dojo Hall +*/ +importPackage(Packages.server.maps); + +var disabled = false; +var belts = Array(1132000, 1132001, 1132002, 1132003, 1132004); +var belt_level = Array(25, 35, 45, 60, 75); + +/* var belt_points = Array(200, 1800, 4000, 9200, 17000); */ +var belt_points = Array(5, 45, 100, 230, 425); /* Watered down version */ + +var status = -1; +var selectedMenu = -1; + +function start() { + if(disabled) { + cm.sendOk("My master has requested that the dojo be #rclosed#k at this time so I can't let you in."); + cm.dispose(); + return; + } + + if (isRestingSpot(cm.getPlayer().getMap().getId())) { + var text = "I'm surprised you made it this far! But it won't be easy from here on out. You still want the challenge?\r\n\r\n#b#L0#I want to continue#l\r\n#L1#I want to leave#l\r\n"; + if (!cm.getPlayer().getDojoParty()) { + text += "#L2#I want to record my score up to this point#l"; + } + cm.sendSimple(text); + } else if (cm.getPlayer().getLevel() >= 25) { + if (cm.getPlayer().getMap().getId() == 925020001) { + cm.sendSimple("My master is the strongest person in Mu Lung, and you want to challenge him? Fine, but you'll regret it later.\r\n\r\n#b#L0#I want to challenge him alone.#l\r\n#L1#I want to challenge him with a party.#l\r\n\r\n#L2#I want to receive a belt.#l\r\n#L3#I want to reset my training points.#l\r\n#L4#I want to receive a medal.#l\r\n#L5#What is a Mu Lung Dojo?#l"); + } else { + cm.sendYesNo("What, you're giving up? You just need to get to the next level! Do you really want to quit and leave?"); + } + } else { + cm.sendOk("Hey! Are you mocking my master? Who do you think you are to challenge him? This is a joke! You should at least be level #b25#k."); + cm.dispose(); + } +} + +function action(mode, type, selection) { + if (mode == -1) { + cm.dispose(); + } else if (cm.getPlayer().getMap().getId() == 925020001) { + if (mode >= 0) { + if (status == -1) + selectedMenu = selection; + status++; //there is no prev. + if (selectedMenu == 0) { //I want to challenge him alone. + if (!cm.getPlayer().hasEntered("dojang_Msg") && !cm.getPlayer().getFinishedDojoTutorial()) { //kind of hackish... + if (status == 0) { + cm.sendYesNo("Hey there! You! This is your first time, huh? Well, my master doesn't just meet with anyone. He's a busy man. And judging by your looks, I don't think he'd bother. Ha! But, today's your lucky day... I tell you what, if you can defeat me, I'll allow you to see my Master. So what do you say?"); + } else if (status == 1) { + if (mode == 0) { + cm.sendNext("Haha! Who are you trying to impress with a heart like that?\r\nGo back home where you belong!"); + } else { + if(cm.getClient().getChannelServer().getMapFactory().getMap(925020010).getCharacters().size() > 0) { + cm.sendOk("Someone is already in Dojo"); + cm.dispose(); + return; + } + cm.warp(925020010, 0); + cm.getPlayer().setFinishedDojoTutorial(); + } + cm.dispose(); + } + } else if (cm.getPlayer().getDojoStage() > 0) { + if (status == 0) { + cm.sendYesNo("The last time you took the challenge by yourself, you went up to level " + cm.getPlayer().getDojoStage() + ". I can take you there right now. Do you want to go there?"); + } else { + cm.warp(mode == 1 ? 925020000 + cm.getPlayer().getDojoStage() * 100 : 925020100, 0); + cm.dispose(); + } + } else { + for (var i = 1 ; i < 39; i++) { //only 32 stages, but 38 maps + if(cm.getClient().getChannelServer().getMapFactory().getMap(925020000 + 100 * i).getCharacters().size() > 0) { + cm.sendOk("Someone is already in the Dojo." + i); + cm.dispose(); + return; + } + } + cm.getClient().getChannelServer().getMapFactory().getMap(925020100).resetReactors(); + cm.getClient().getChannelServer().getMapFactory().getMap(925020100).killAllMonsters(); + cm.warp(925020100, 0); + cm.dispose(); + } + } else if (selectedMenu == 1) { //I want to challenge him with a party. + var party = cm.getPlayer().getParty(); + if (party == null) { + cm.sendNext("Where do you think you're going? You're not even the party leader! Go tell your party leader to talk to me."); + cm.dispose(); + return; + } + var lowest = cm.getPlayer().getLevel(); + var highest = lowest; + for (var x = 0; x < party.getMembers().size(); x++) { + var lvl = party.getMembers().get(x).getLevel(); + if (lvl > highest) + highest = lvl; + else if (lvl < lowest) + lowest = lvl; + } + var isBetween30 = highest - lowest < 30; + if (party.getLeader().getId() != cm.getPlayer().getId()) { + cm.sendNext("Where do you think you're going? You're not even the party leader! Go tell your party leader to talk to me."); + cm.dispose(); + } else if (party.getMembers().size() == 1) { + cm.sendNext("You're going to take on the challenge as a one-man party?"); + } else if (!isBetween30) { + cm.sendNext("Your partys level ranges are too broad to enter. Please make sure all of your party members are within #r30 levels#k of each other."); + } else { + for (var i = 1 ; i < 39; i++) { //only 32 stages, but 38 maps + if(cm.getClient().getChannelServer().getMapFactory().getMap(925020000 + 100 * i).getCharacters().size() > 0) { + cm.sendOk("Someone is already in the Dojo."); + cm.dispose(); + return; + } + } + cm.getClient().getChannelServer().getMapFactory().getMap(925020100).resetReactors(); + cm.getClient().getChannelServer().getMapFactory().getMap(925020100).killAllMonsters(); + cm.warpParty(925020100); + cm.dispose(); + } + cm.dispose(); + } else if (selectedMenu == 2) { //I want to receive a belt. + if (mode < 1) { + cm.dispose(); + return; + } + if (status == 0) { + var selStr = "You have #b" + cm.getPlayer().getDojoPoints() + "#k training points. Master prefers those with great talent. If you obtain more points than the average, you can receive a belt depending on your score.\r\n"; + for (var i = 0; i < belts.length; i++) { + if (cm.getPlayer().getItemQuantity(belts[i], true) > 0) { + selStr += "\r\n #i" + belts[i] + "# #t" + belts[i] + "#(Obtain)"; + } else + selStr += "\r\n#L" + i + "##i" + belts[i] + "# #t" + belts[i] + "#l"; + } + cm.sendSimple(selStr); + } else if (status == 1) { + var belt = belts[selection]; + var level = belt_level[selection]; + var points = belt_points[selection]; + if (cm.getPlayer().getDojoPoints() > points) { + if (cm.getPlayer().getLevel() > level) + cm.gainItem(belt, 1); + else + cm.sendNext("In order to receive #i" + belt + "# #b#t" + belt + "##k, you have to be at least over level #b" + level + "#k and you need to have earned at least #b" + points + " training points#k.\r\n\r\nIf you want to obtain this belt, you need #r" + (points - cm.getPlayer().getDojoPoints()) + "#k more training points."); + } else + cm.sendNext("In order to receive #i" + belt + "# #b#t" + belt + "##k, you have to be at least over level #b" + level + "#k and you need to have earned at least #b" + points + " training points#k.\r\n\r\nIf you want to obtain this belt, you need #r" + (points - cm.getPlayer().getDojoPoints()) + "#k more training points."); + cm.dispose(); + } + } else if (selectedMenu == 3) { //I want to reset my training points. + if (status == 0) { + cm.sendYesNo("You do know that if you reset your training points, it returns to 0, right? Although, that's not always a bad thing. If you can start earning training points again after you reset, you can receive the belts once more. Do you want to reset your training points now?"); + } else if (status == 1) { + if (mode == 0) { + cm.sendNext("Do you need to gather yourself or something? Come back after you take a deep breath."); + } else { + cm.getPlayer().setDojoPoints(0); + cm.sendNext("There! All your training points have been reset. Think of it as a new beginning and train hard!"); + } + cm.dispose(); + } + } else if (selectedMenu == 4) { //I want to receive a medal. + if (status == 0 && cm.getPlayer().getVanquisherStage() <= 0) { + cm.sendYesNo("You haven't attempted the medal yet? If you defeat one type of monster in Mu Lung Dojo #b100 times#k you can receive a title called #b#t" + (1142033 + cm.getPlayer().getVanquisherStage()) + "##k. It looks like you haven't even earned the #b#t" + (1142033 + cm.getPlayer().getVanquisherStage()) + "##k... Do you want to try out for the #b#t" + (1142033 + cm.getPlayer().getVanquisherStage()) + "##k?"); + } else if (status == 1 || cm.getPlayer().getVanquisherStage() > 0) { + if (mode == 0) { + cm.sendNext("If you don't want to, that's fine."); + cm.dispose(); + } else { + if (cm.getPlayer().getDojoStage() > 37) { + cm.sendNext("You have complete all medals challenges."); + } else if (cm.getPlayer().getVanquisherKills() < 100 && cm.getPlayer().getVanquisherStage() > 0) + cm.sendNext("You still need #b" + (100 - cm.getPlayer().getVanquisherKills()) + "#k in order to obtain the #b#t" + (1142032 + cm.getPlayer().getVanquisherStage()) + "##k. Please try a little harder. As a reminder, only the mosnters that have been summoned by our Master in Mu Lung Dojo are considered. Oh, and make sure you're not hunting the monsters and exiting!#r If you don't go to the next level after defeating the monster, it doesn't count as a win#k."); + else if (cm.getPlayer().getVanquisherStage() <= 0) { + cm.getPlayer().setVanquisherStage(1); + } else { + cm.sendNext("You have obtained #b#t" + (1142032 + cm.getPlayer().getVanquisherStage()) + "##k."); + cm.gainItem(1142033 + cm.getPlayer().getVanquisherStage(), 1); + cm.getPlayer().setVanquisherStage(cm.c.getPlayer().getVanquisherStage() + 1); + cm.getPlayer().setVanquisherKills(0); + } + } + cm.dispose(); + } + } else if (selectedMenu == 5) { //What is a Mu Lung Dojo? + cm.sendNext("Our master is the strongest person in Mu Lung. The place he built is called the Mu Lung Dojo, a building that is 38 stories tall! You can train yourself as you go up each level. Of course, it'll be hard for someone at your level to reach the top."); + cm.dispose(); + } + } else + cm.dispose(); + } else if (isRestingSpot(cm.getPlayer().getMap().getId())) { + if (selectedMenu == -1) + selectedMenu = selection; + status++; + if (selectedMenu == 0) { + cm.warp(cm.getPlayer().getMap().getId() + 100, 0); + cm.dispose(); + } else if (selectedMenu == 1) { //I want to leave + if (status == 0) { + cm.sendAcceptDecline("So, you're giving up? You're really going to leave?"); + } else { + if (mode == 1) { + cm.warp(925020002); + } + cm.dispose(); + } + } else if (selectedMenu == 2) { //I want to record my score up to this point + if (status == 0) { + cm.sendYesNo("If you record your score, you can start where you left off the next time. Isn't that convenient? Do you want to record your current score?"); + } else { + if (mode == 0) { + cm.sendNext("You think you can go even higher? Good luck!"); + } else if (925020000 + cm.getPlayer().getDojoStage() * 100 == cm.getMapId()) { + cm.sendOk("Looks like you came all the way up here without recording your score. Sorry, but you can't record now."); + } else { + cm.sendNext("I recorded your score. If you tell me the next time you go up, you'll be able to start where you left off."); + cm.getPlayer().setDojoStage((cm.getMapId() - 925020000) / 100); + } + cm.dispose(); + } + } + } else { + if (mode == 0) { + cm.sendNext("Stop changing your mind! Soon, you'll be crying, begging me to go back."); + } else if (mode == 1) { + cm.warp(925020002, 0); + cm.getPlayer().message("Can you make up your mind please?"); + } + cm.dispose(); + } +} + +function isRestingSpot(id) { + return (id / 100 - 9250200) % 6 == 0; +} diff --git a/scripts/quest/3250.js b/scripts/quest/3250.js new file mode 100644 index 0000000000..d390387a71 --- /dev/null +++ b/scripts/quest/3250.js @@ -0,0 +1,44 @@ +var status = -1; + +function start(mode, type, selection) { + if(mode == 0) { + qm.dispose(); + return; + } + status++; + + if(status == 0) { + if(!qm.canHold(4220046)) { + qm.sendNext("You need a slot on your ETC inventory to receive the egg to hatch."); + qm.dispose(); + return; + } + + qm.gainItem(4220046, 1); + qm.sendNext("Go bring me 30 #b#i4031992# #t4031992# #kASAP!"); + qm.startQuest(); + } + + qm.dispose(); +} + +function end(mode, type, selection) { + if(mode == 0) { + qm.dispose(); + return; + } + status++; + + if(status == 0) { + qm.sendNext("Alright, it seems you brought the items I needed. Great job!"); + } + + else if(status == 1) { + qm.gainFame(11); + qm.gainItem(4220046, -1); + qm.gainItem(4031992, -30); + + qm.completeQuest(); + qm.dispose(); + } +} \ No newline at end of file diff --git a/sql/db_database.sql b/sql/db_database.sql index dc5e8f1edb..885897856f 100644 --- a/sql/db_database.sql +++ b/sql/db_database.sql @@ -10381,7 +10381,7 @@ INSERT IGNORE INTO `temp_data` (`id`, `dropperid`, `itemid`, `minimum_quantity`, (10168, 210100, 4031273, 1, 1, 2104, 500000), (10169, 2220100, 2022016, 1, 1, 8164, 100000), (10170, 2130100, 4031153, 1, 1, 2070, 10000), -(10171, 2230106, 4031268, 1, 1, 3629, 30000), +(10171, 5100003, 4031268, 1, 1, 3629, 30000), (10172, 2230105, 4031259, 1, 1, 3080, 30000), (10173, 2230106, 4031260, 1, 1, 3080, 30000), (10174, 2230108, 4031261, 1, 1, 3080, 30000), @@ -12789,7 +12789,7 @@ INSERT INTO `drop_data_global` (`id`, `continent`, `dropType`, `itemid`, `minimu (1, 0, 0, 4031865, 1, 1, 0, 150000, 'NX Card 100 PTS'), (2, 0, 0, 4031866, 1, 1, 0, 90000, 'NX Card 250 PTS'), (3, 0, 0, 4001126, 1, 2, 0, 10000, 'Maple Leaves'), -(4, 0, 0, 5072000, 1, 1, 0, 3000, 'Super Megaphones.'); +(4, 0, 0, 2049100, 1, 1, 0, 2000, 'Chaos Scroll 60%'); CREATE TABLE IF NOT EXISTS `dueyitems` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, diff --git a/sql/db_drops.sql b/sql/db_drops.sql index 9a767925a9..f4a0aa1e97 100644 --- a/sql/db_drops.sql +++ b/sql/db_drops.sql @@ -2,6 +2,7 @@ INSERT IGNORE INTO temp_data (`dropperid`, `itemid`, `minimum_quantity`, `maximum_quantity`, `questid`, `chance`) VALUES #-- copy+paste inside here as many drop data as possible from the spider (drop generator) files -- +(5100004, 2383034, 1, 1, 0, 10000), (100100, 4000019, 1, 1, 0, 200000), (100100, 2000000, 1, 1, 0, 40000), @@ -18711,11 +18712,18 @@ #-------------------------------------------------------------------------------------------- + #insert things that should have been present already. + INSERT IGNORE INTO temp_data (`dropperid`, `itemid`, `minimum_quantity`, `maximum_quantity`, `questid`, `chance`) VALUES +(2386010, 8143000, 1, 1, 0, 10000), (3230100, 4001004, 1, 1, 0, 5000), (3000002, 4000068, 1, 1, 0, 40000), (3000003, 4000068, 1, 1, 0, 40000), (3000004, 4000068, 1, 1, 0, 40000), + +(8141000, 2386002, 1, 1, 0, 10000), +(8141100, 2386009, 1, 1, 0, 10000), + (4230116, 2382042, 1, 1, 0, 10000), (4230117, 2382055, 1, 1, 0, 10000), (4230118, 2382067, 1, 1, 0, 10000), @@ -18742,7 +18750,11 @@ (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, 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); UPDATE IGNORE temp_data SET dropperid=9000002 WHERE dropperid=9000000; @@ -18810,6 +18822,7 @@ UPDATE reactordrops SET questid=2067 WHERE itemid=4031150; UPDATE reactordrops SET questid=3239 WHERE itemid=4031092; UPDATE reactordrops SET questid=6002 WHERE itemid=4031508; + UPDATE reactordrops SET questid=9351 WHERE itemid=4031258; INSERT INTO `reactordrops` (`reactorid`, `itemid`, `chance`, `questid`) VALUES (9102000, 4031157, 1, 2074), (9102001, 4031158, 1, 2074), diff --git a/sql/db_shopupdate.sql b/sql/db_shopupdate.sql index 2888051a24..0e160f6364 100644 --- a/sql/db_shopupdate.sql +++ b/sql/db_shopupdate.sql @@ -63,9 +63,21 @@ INSERT IGNORE INTO `shopitems` (`shopitemid`, `shopid`, `itemid`, `price`, `pitc (995083, 9201082, 2043002, 50000, 0, 52), (995084, 9201082, 2043802, 50000, 0, 53), (995085, 9201082, 2044602, 50000, 0, 54), -(996196, 9201082, 2070016, 100000000, 0, 55), -(996197, 9201082, 2070018, 175000000, 0, 56), -(994782, 9201082, 2030007, 700000, 0, 57), -(994783, 9201082, 4001017, 30000000, 0, 58); +(996000, 9201082, 2049200, 170000, 0, 55), +(996001, 9201082, 2049201, 220000, 0, 56), +(996002, 9201082, 2049202, 170000, 0, 57), +(996003, 9201082, 2049203, 220000, 0, 58), +(996004, 9201082, 2049204, 170000, 0, 59), +(996005, 9201082, 2049205, 220000, 0, 60), +(996006, 9201082, 2049206, 170000, 0, 61), +(996007, 9201082, 2049207, 220000, 0, 62), +(996008, 9201082, 2049208, 140000, 0, 63), +(996009, 9201082, 2049209, 170000, 0, 64), +(996010, 9201082, 2049210, 140000, 0, 65), +(996011, 9201082, 2049211, 170000, 0, 66), +(996196, 9201082, 2070016, 100000000, 0, 67), +(996197, 9201082, 2070018, 175000000, 0, 68), +(994782, 9201082, 2030007, 700000, 0, 69), +(994783, 9201082, 4001017, 30000000, 0, 70); -UPDATE shopitems SET price = 11*price WHERE (`position` >= 27 and `position` <= 54); \ No newline at end of file +UPDATE shopitems SET price = 11*price WHERE (`position` >= 27 and `position` <= 66); \ No newline at end of file diff --git a/wz/String.wz/MonsterBook.img.xml b/wz/String.wz/MonsterBook.img.xml index 77ec203861..38383149d2 100644 --- a/wz/String.wz/MonsterBook.img.xml +++ b/wz/String.wz/MonsterBook.img.xml @@ -1319,11 +1319,10 @@ - - - - - + + + + @@ -1439,6 +1438,7 @@ + @@ -1661,8 +1661,7 @@ - - + @@ -2514,18 +2513,19 @@ - - - - - - - - - - - - + + + + + + + + + + + + + @@ -2555,17 +2555,18 @@ - - - - - - - - - - - + + + + + + + + + + + + @@ -3605,27 +3606,28 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -4768,22 +4770,23 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -6035,9 +6038,10 @@ - - - + + + + @@ -6067,18 +6071,19 @@ - - - - - - - - - - - - + + + + + + + + + + + + + @@ -7565,6 +7570,7 @@ + @@ -8070,10 +8076,11 @@ - - - - + + + + + @@ -10340,19 +10347,20 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -11472,17 +11480,18 @@ - - - - - - - - - - - + + + + + + + + + + + + @@ -11516,22 +11525,23 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -11714,21 +11724,22 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +