diff --git a/.gitignore b/.gitignore index a019f6c31f..f872263893 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,10 @@ /tools/MapleQuestItemFetcher/dist/ /tools/MapleQuestItemFetcher/nbproject/private/ +/tools/MapleQuestMesoFetcher/build/ +/tools/MapleQuestMesoFetcher/dist/ +/tools/MapleQuestMesoFetcher/nbproject/private/ + /tools/MapleSkillMakerFetcher/build/ /tools/MapleSkillMakerFetcher/dist/ /tools/MapleSkillMakerFetcher/nbproject/private/ diff --git a/README.md b/README.md index c1804d3db1..fb5801b24c 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ Hamachi is optional, though. You don't have to install Hamachi if you want to ma --- ### Installing the SERVER -Set the "MapleSolaxiaV2" folder on a place of your preference. It is recommended for use "C:\Nexon\MapleSolaxiaV2". +Set the "HeavenMS" folder on a place of your preference. It is recommended for use "C:\Nexon\HeavenMS". Setting up the SQL: open MySQL Query Browser, then first-time create a new session, with these parameters at startup and click OK. @@ -85,19 +85,19 @@ Server Host: localhost Port: 3306 Username: root Now it must be done CAREFULLY: -1. File -> Open Script... -> Browse for "C:\Nexon\MapleSolaxiaV2\sql" -> db_database.sql, and execute it. +1. File -> Open Script... -> Browse for "C:\Nexon\HeavenMS\sql" -> db_database.sql, and execute it. -2. File -> Open Script... -> Browse for "C:\Nexon\MapleSolaxiaV2\sql" -> db_drops.sql, and execute it. +2. File -> Open Script... -> Browse for "C:\Nexon\HeavenMS\sql" -> db_drops.sql, and execute it. Now it is OPTIONAL, you don't need to run it if you don't want, as it will simply change some NPC shops to set some new goods, not present in the original MapleStory, to sell: -3. File -> Open Script... -> Browse for "C:\Nexon\MapleSolaxiaV2\sql" -> db_shopupdate.sql, and execute it. +3. File -> Open Script... -> Browse for "C:\Nexon\HeavenMS\sql" -> db_shopupdate.sql, and execute it. At the end of the execution of these SQLs, you should have installed a database schema named "heavenms". REGISTER YOUR FIRST ACCOUNT to be used in-game by creating manually an entry on the table "accounts" at that database with a login and a password. Configure the IP you want to use for your MapleStory server in "configuration.ini" file, or set it as "localhost" if you want to run it only on your machine. Alternatively, you can use the IP given by Hamachi to use on a Hamachi network, or you can use a non-Hamachi method of port-forwarding. Neither will be approached here. -Now open NetBeans, and choose to Open a project... Select then the "MapleSolaxiaV2" folder, that should already be a project recognizable by NetBeans. If it isn't, you have a problem. +Now open NetBeans, and choose to Open a project... Select then the "HeavenMS" folder, that should already be a project recognizable by NetBeans. If it isn't, you have a problem. Inside the project, you may encounter some code errors. These happens because you have not set yet the "cores" of the project. From the project hierarchy, right-click the project and select "Resolve Project Problems". Locate the "cores" folder inside the root directory of this project and manually configure the missing files with the files that are there. @@ -149,7 +149,7 @@ As an example of client WZ editing, consider the MapleMobBookUpdate subproject I * Paste it on the "dist" subfolder. * Inside "dist", open the command prompt by alt+right clicking there. * Execute "java -jar MobBookUpdate.jar". It will generate a "MonsterBook_updated.img.xml" file. -* At last, overwrite the "MonsterBook.img.xml" on "C:\Nexon\MapleSolaxiaV2\wz\String.wz" with this file, renaming it back to "MonsterBook.img.xml". +* At last, overwrite the "MonsterBook.img.xml" on "C:\Nexon\HeavenMS\wz\String.wz" with this file, renaming it back to "MonsterBook.img.xml". At this point, just the server-side Monster Book has been updated with the current state of the database's drop data. diff --git a/docs/README_wzchanges.txt b/docs/README_wzchanges.txt index c7e809e0b0..3bfcd15371 100644 --- a/docs/README_wzchanges.txt +++ b/docs/README_wzchanges.txt @@ -23,7 +23,7 @@ P.S.: Yeah, these explanations are pretty simplistic, I know. If one really wants to compare the original v83 WZ with the ones I provided, I recommend do the following: - - Open HaRepacker and, for each MapleSolaxiaV2's WZ file, extract all the XMLs + - Open HaRepacker and, for each HeavenMS's WZ file, extract all the XMLs for "Private Server". - Now, install MapleStory from "ManagerMsv83.exe" on an other folder and do the same procediment said above. diff --git a/docs/feature_list.md b/docs/feature_list.md index 4d4e832702..1a1bff73c7 100644 --- a/docs/feature_list.md +++ b/docs/feature_list.md @@ -73,7 +73,7 @@ Monsters, Maps & Reactors: * Boats, elevator and other travelling mechanics fully working. * PQs, Taxis and other event-driven situations warps players at random spawnpoints, GMS-like. * Some reactors (PQ bonus boxes) now sprays items on the map, instead of dropping everything at once. -* Updated Crimsonwood, World Tour and Neo City, enabling quest completion and game progression in these areas. +* Updated Crimsonwood, World Tour, Nihal Desert and Neo City, enabling quest completion and game progression in these areas. PQ potentials: @@ -120,6 +120,7 @@ External tools: * MapleMobBookIndexer - Generates a SQL table with all relations of cardid and mobid present in the mob book. * MapleMobBookUpdate - Generates a wz.xml that is a copy of the original MonsterBook.wz.xml, except it updates the drop data info in the book with those currently on DB. * MapleQuestItemFetcher - Searches the SQL tables and project files and reports in all relevant data regarding missing/erroneous quest items. +* MapleQuestMesoFetcher - Searches the quest WZ files and reports in all relevant data regarding missing/erroneous quest fee checks. * MapleSkillMakerFetcher - Updates the DB Maker-related tables with the current info present on the WZs. * MapleSkillMakerReagentIndexer - Generates a new maker table describing all stat-improvements from the Maker reagents (those empowering crystals and jewels). diff --git a/docs/mychanges_ptbr.txt b/docs/mychanges_ptbr.txt index 321e725a5e..28e871fa07 100644 --- a/docs/mychanges_ptbr.txt +++ b/docs/mychanges_ptbr.txt @@ -706,4 +706,11 @@ Diversas refatora Novo release: HeavenMS. 02 Dezembro 2017, -Adicionado informação de classes nos NPCs para os 2o jobs de Explorer. \ No newline at end of file +Adicionado informação de classes nos NPCs para os 2o jobs de Explorer. + +04 Dezembro 2017, +Adicionado quests para a região de Nihal Desert. +Nova ferramenta: MapleQuestMesoFetcher. Busca nos WZs por checagens perdidas em quests onde se precisa pagar uma certa quantia para completá-las. + +07 Dezembro 2017, +Reatores que buscam itens no chão agora buscam por itens ao mudar de estado. \ No newline at end of file diff --git a/docs/todo.txt b/docs/todo.txt index 4765e76daf..4f15165368 100644 --- a/docs/todo.txt +++ b/docs/todo.txt @@ -1,4 +1,4 @@ -========== MapleSolaxiaV2 ========== +========== HeavenMS ========== Credits: Ronan - Freelance Developer Vcoc - Freelance Developer diff --git a/handbook/Cash.txt b/handbook/Cash.txt index 841958639e..1ed3d0917c 100644 --- a/handbook/Cash.txt +++ b/handbook/Cash.txt @@ -405,7 +405,7 @@ 5420004 - Orbis Hair Membership Coupon - Use it at #cOrbis Hair Salon# to change your hair to a style of #cyour choice#. 5420005 - Ludibrium Hair Membership Coupon - Use it at #cLudibrium Hair Salon# to change your hair to a style of #cyour choice#. 5420006 - Mu Lung Hair Membership Coupon - Use it at #cMu Lung Hair Salon# to change your hair to a style of #cyour choice#. -5430000 - Extra Character Slot Coupon - Increases the character creation slot by 1. Each account may hold a maximum of 6 character slots per server world. +5430000 - Extra Character Slot Coupon - Increases the character creation slot by 1. You may have up to 15 slots. 5431000 - Maple Life (A-Type) - #c*Warning: If you do not have an empty Character slot, it cannot be used.#\r\n\r\nIf you are over #cLevel 30#, a new Level 30 character can be created in your world.You can choose one of the following classes #c(Warrior, Magician, Thief, Bowman and Pirate)# at #c1st Job status#.\r\n\r\nOnly the amount of AP needed for each respective 1st jobs have been allocated and the rest of AP and SP can be distributed to your liking.#cBasic equips and items# needed for travel are also provided. 5432000 - Maple Life (B-Type) - #c*Warning : If all 12 character slots are full, it cannot be used.#\r\n\r\nThis package has the #cMaple Life item plus an Extra Character Slot coupon.#Using this item will automiatically create a new slot.\r\n\r\nIf you are over #cLevel 30#, a new Level 30 character can be created in your world. You can choose one of the following classes #c(Warrior, Magician, Thief, Bowman and Pirate)# at #c1st Job status.#\r\n\r\nOnly the amount of AP needed for each respective 1st jobs have been allocated and the rest of AP and SP can be distributed to your liking.#cBasic equips and items# needed for travel are also provided. 5450000 - Miu Miu the Traveling Merchant - Use this to experience the same effect as entering a general store. Can purchase potions to recover HP & MP, throwing stars, and recharge bullets. Some maps restrict the use of this item, though. diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties index 2948abe44a..cf20add7e4 100644 --- a/nbproject/private/private.properties +++ b/nbproject/private/private.properties @@ -1,10 +1,10 @@ compile.on.save=true do.depend=false do.jar=true -file.reference.mina-core-2.0.7.jar=C:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2\\cores\\mina-core-2.0.7.jar -file.reference.mysql-connector-java-bin.jar=C:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2\\cores\\mysql-connector-java-bin.jar -file.reference.slf4j-api-1.6.6.jar=C:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2\\cores\\slf4j-api-1.6.6.jar -file.reference.slf4j-jdk14-1.7.5.jar=C:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2\\cores\\slf4j-jdk14-1.7.5.jar +file.reference.mina-core-2.0.7.jar=C:\\Nexon\\MapleSolaxia\\HeavenMS\\cores\\mina-core-2.0.7.jar +file.reference.mysql-connector-java-bin.jar=C:\\Nexon\\MapleSolaxia\\HeavenMS\\cores\\mysql-connector-java-bin.jar +file.reference.slf4j-api-1.6.6.jar=C:\\Nexon\\MapleSolaxia\\HeavenMS\\cores\\slf4j-api-1.6.6.jar +file.reference.slf4j-jdk14-1.7.5.jar=C:\\Nexon\\MapleSolaxia\\HeavenMS\\cores\\slf4j-jdk14-1.7.5.jar javac.debug=true javadoc.preview=true user.properties.file=C:\\Users\\RonanLana\\AppData\\Roaming\\NetBeans\\8.0.2\\build.properties diff --git a/scripts/event/3rdJob_bowman.js b/scripts/event/3rdJob_bowman.js index 047c903229..743c40aa51 100644 --- a/scripts/event/3rdJob_bowman.js +++ b/scripts/event/3rdJob_bowman.js @@ -1,8 +1,6 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 diff --git a/scripts/event/3rdJob_magician.js b/scripts/event/3rdJob_magician.js index 1f6ac4569c..b1f0f317b8 100644 --- a/scripts/event/3rdJob_magician.js +++ b/scripts/event/3rdJob_magician.js @@ -1,8 +1,6 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 diff --git a/scripts/event/3rdJob_mount.js b/scripts/event/3rdJob_mount.js index 84c4c3bdae..69748948b2 100644 --- a/scripts/event/3rdJob_mount.js +++ b/scripts/event/3rdJob_mount.js @@ -1,8 +1,6 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 diff --git a/scripts/event/3rdJob_pirate.js b/scripts/event/3rdJob_pirate.js index 3bb21596cd..66b4d4ae96 100644 --- a/scripts/event/3rdJob_pirate.js +++ b/scripts/event/3rdJob_pirate.js @@ -1,8 +1,6 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 diff --git a/scripts/event/3rdJob_thief.js b/scripts/event/3rdJob_thief.js index effa7249d8..3b95735c03 100644 --- a/scripts/event/3rdJob_thief.js +++ b/scripts/event/3rdJob_thief.js @@ -1,8 +1,6 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 diff --git a/scripts/event/3rdJob_warrior.js b/scripts/event/3rdJob_warrior.js index 26e30513f9..b2ecdd66f8 100644 --- a/scripts/event/3rdJob_warrior.js +++ b/scripts/event/3rdJob_warrior.js @@ -1,8 +1,6 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 diff --git a/scripts/event/Aran_2ndmount.js b/scripts/event/Aran_2ndmount.js index 3d84071380..f05eedfc07 100644 --- a/scripts/event/Aran_2ndmount.js +++ b/scripts/event/Aran_2ndmount.js @@ -1,8 +1,6 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 diff --git a/scripts/event/Aran_3rdmount.js b/scripts/event/Aran_3rdmount.js index 7fed312596..81e946883a 100644 --- a/scripts/event/Aran_3rdmount.js +++ b/scripts/event/Aran_3rdmount.js @@ -1,8 +1,6 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 diff --git a/scripts/map/onUserEnter/926000000.js b/scripts/map/onUserEnter/926000000.js new file mode 100644 index 0000000000..65c8f2de66 --- /dev/null +++ b/scripts/map/onUserEnter/926000000.js @@ -0,0 +1,10 @@ +function start(ms) { + var map = ms.getClient().getChannelServer().getMapFactory().getMap(926000000); + map.resetPQ(1); + + if(map.countMonster(9100013) == 0) { + map.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9100013), new java.awt.Point(82, 200)); + } + + return(true); +} diff --git a/scripts/map/onUserEnter/926000010.js b/scripts/map/onUserEnter/926000010.js new file mode 100644 index 0000000000..673d29a96d --- /dev/null +++ b/scripts/map/onUserEnter/926000010.js @@ -0,0 +1,25 @@ +/* + 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 . +*/ + +function start(ms) { + var map = ms.getClient().getChannelServer().getMapFactory().getMap(926000010); + map.resetPQ(1); + return(true); +} diff --git a/scripts/map/onUserEnter/926120300.js b/scripts/map/onUserEnter/926120300.js new file mode 100644 index 0000000000..d07ee8a0ae --- /dev/null +++ b/scripts/map/onUserEnter/926120300.js @@ -0,0 +1,20 @@ +function getInactiveReactors(map) { + var reactors = new Array(); + + var iter = map.getReactors().iterator(); + while (iter.hasNext()) { + var mo = iter.next(); + if (mo.getState() >= 7) { + reactors.push(mo); + } + } + + return reactors; +} + +function start(ms) { + var map = ms.getClient().getChannelServer().getMapFactory().getMap(926120300); + map.resetReactors(getInactiveReactors(map)); + + return(true); +} \ No newline at end of file diff --git a/scripts/npc/1061016.js b/scripts/npc/1061016.js index be95599193..cdc50da6b0 100644 --- a/scripts/npc/1061016.js +++ b/scripts/npc/1061016.js @@ -22,7 +22,7 @@ function action(mode, type, selection) { } else if (status == 2) { if (!cm.canHold(itemids[selection], 1)) { cm.sendOk("Please make room"); - } else if (cm.itemQuantity(4001261) < 1) { + } else if (cm.getItemQuantity(4001261) < 1) { cm.sendOk("You don't have enough leathers."); } else { cm.gainItem(4001261, -1); diff --git a/scripts/npc/1092018.js b/scripts/npc/1092018.js new file mode 100644 index 0000000000..86d9be6d09 --- /dev/null +++ b/scripts/npc/1092018.js @@ -0,0 +1,56 @@ +/* + 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; + +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) { + var qs = cm.getQuestStatus(2162); + + if((qs == 0 || qs == 1) && !cm.haveItem(4031839, 1)) { + if(cm.canHold(4031839, 1)) { + cm.gainItem(4031839, 1); + cm.sendNext("(You retrieved a Crumpled Paper standing out of the trash can. It's content seems important.)", 2); + } else { + cm.sendNext("(You see a Crumpled Paper standing out of the trash can. It's content seems important, but you can't retrieve it since your inventory is full.)", 2); + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2040052.js b/scripts/npc/2040052.js index cf576afcb5..ea4f53dd22 100644 --- a/scripts/npc/2040052.js +++ b/scripts/npc/2040052.js @@ -30,8 +30,8 @@ **/ var status = 0; -var questid = new Array(3615,3616,3617,3618,3630,3633,3639); -var questitem = new Array(4031235,4031236,4031237,4031238,4031270,4031280,4031298); +var questid = new Array(3615,3616,3617,3618,3630,3633,3639,3920); +var questitem = new Array(4031235,4031236,4031237,4031238,4031270,4031280,4031298,4031591); var counter = 0; var books; var i; diff --git a/scripts/npc/2103000.js b/scripts/npc/2103000.js index 5458677a55..f131a0b164 100644 --- a/scripts/npc/2103000.js +++ b/scripts/npc/2103000.js @@ -1,8 +1,6 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 @@ -19,11 +17,15 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -/* NPC Base - Map Name (Map ID) - Extra NPC info. +/* Oasis near Ariant Castle */ +importPackage(Packages.client); + +function isTigunMorphed(ch) { + return ch.getBuffSource(MapleBuffStat.MORPH) == 2210005; +} + function start() { status = -1; action(1, 0, 0); @@ -38,12 +40,30 @@ function action(mode, type, selection) { else status--; if (status == 0 && mode == 1) { - if(cm.isQuestStarted(3900) && cm.getPlayer().getQuestInfo(3900) != 5) { - cm.sendOk("#b(You drink the water from the oasis and feel refreshed.)", 2); - //TODO: Update quest progress. - cm.getPlayer().updateQuestInfo(3900, "5"); - } - cm.dispose(); - } + if(cm.isQuestStarted(3900) && cm.getPlayer().getQuestInfo(3900) != 5) { + cm.sendOk("#b(You drink the water from the oasis and feel refreshed.)", 2); + cm.getPlayer().updateQuestInfo(3900, "5"); + } else if(cm.isQuestCompleted(3938)) { + if(cm.canHold(2210005)) { + if(!cm.haveItem(2210005) && !isTigunMorphed(cm.getPlayer())) { + cm.gainItem(2210005, 1); + cm.sendOk("You found a lock of hair (probably Tigun's) floating by the water and catched it. Remembering how #bJano#k made it last time, you crafted a new #t2210005#", 2); + } + } else { + cm.sendOk("You don't have a USE slot available.", 2); + } + } else if(cm.isQuestStarted(3934) || (cm.isQuestCompleted(3934) && !cm.isQuestCompleted(3935))) { + if(cm.canHold(2210005)) { + if(!cm.haveItem(2210005) && !isTigunMorphed(cm.getPlayer())) { + cm.gainItem(2210005, 1); + cm.sendOk("You managed to find a strange flask floating on the river. It seems like a transformation bottle mimicking one of the guards of the castle, maybe with it you will be able to roam inside freely.", 2); + } + } else { + cm.sendOk("You found a strange flask floating on the river. But you decided to ignore it since you don't have a USE slot available.", 2); + } + } + + cm.dispose(); + } } } \ No newline at end of file diff --git a/scripts/npc/2103002.js b/scripts/npc/2103002.js new file mode 100644 index 0000000000..5b943dd305 --- /dev/null +++ b/scripts/npc/2103002.js @@ -0,0 +1,56 @@ +/* + 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 . +*/ +/* Queen's treasure chest + */ + +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.isQuestStarted(3923) && !cm.haveItem(4031578, 1)) { + if(cm.canHold(4031578, 1)) { + cm.sendOk("You have just swiped the ring. Clear the area asap.", 2); + cm.gainItem(4031578, 1); + } else { + cm.sendOk("You don't have a ETC slot available.", 2); + } + } + + cm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/npc/2103003.js b/scripts/npc/2103003.js new file mode 100644 index 0000000000..038dfe0c85 --- /dev/null +++ b/scripts/npc/2103003.js @@ -0,0 +1,57 @@ +/* + 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 . +*/ +/* + Food depot on Ariant Residential area + */ + +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.isQuestStarted(3929)) { + if(cm.getQuestProgress(3929, 0) != 1) { + if(cm.haveItem(4031580)) { + cm.gainItem(4031580, -1); + cm.setQuestProgress(3929, 0, 1); + } + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2103004.js b/scripts/npc/2103004.js new file mode 100644 index 0000000000..04d7edbc77 --- /dev/null +++ b/scripts/npc/2103004.js @@ -0,0 +1,57 @@ +/* + 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 . +*/ +/* + Food depot on Ariant Residential area + */ + +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.isQuestStarted(3929)) { + if(cm.getQuestProgress(3929, 2) != 1) { + if(cm.haveItem(4031580)) { + cm.gainItem(4031580, -1); + cm.setQuestProgress(3929, 2, 1); + } + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2103005.js b/scripts/npc/2103005.js new file mode 100644 index 0000000000..dcd2125181 --- /dev/null +++ b/scripts/npc/2103005.js @@ -0,0 +1,57 @@ +/* + 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 . +*/ +/* + Food depot on Ariant Residential area + */ + +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.isQuestStarted(3929)) { + if(cm.getQuestProgress(3929, 1) != 1) { + if(cm.haveItem(4031580)) { + cm.gainItem(4031580, -1); + cm.setQuestProgress(3929, 1, 1); + } + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2103006.js b/scripts/npc/2103006.js new file mode 100644 index 0000000000..a6fc1177c8 --- /dev/null +++ b/scripts/npc/2103006.js @@ -0,0 +1,57 @@ +/* + 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 . +*/ +/* + Food depot on Ariant Residential area + */ + +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.isQuestStarted(3929)) { + if(cm.getQuestProgress(3929, 3) != 1) { + if(cm.haveItem(4031580)) { + cm.gainItem(4031580, -1); + cm.setQuestProgress(3929, 3, 1); + } + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2103009.js b/scripts/npc/2103009.js new file mode 100644 index 0000000000..613220cf99 --- /dev/null +++ b/scripts/npc/2103009.js @@ -0,0 +1,57 @@ +/* + 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 . +*/ +/* + Jewel depot on Ariant Residential area + */ + +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.isQuestStarted(3926)) { + if(cm.getQuestProgress(3926, 0) != 1) { + if(cm.haveItem(4031579)) { + cm.gainItem(4031579, -1); + cm.setQuestProgress(3926, 0, 1); + } + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2103010.js b/scripts/npc/2103010.js new file mode 100644 index 0000000000..266095b90a --- /dev/null +++ b/scripts/npc/2103010.js @@ -0,0 +1,57 @@ +/* + 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 . +*/ +/* + Jewel depot on Ariant Residential area + */ + +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.isQuestStarted(3926)) { + if(cm.getQuestProgress(3926, 2) != 1) { + if(cm.haveItem(4031579)) { + cm.gainItem(4031579, -1); + cm.setQuestProgress(3926, 2, 1); + } + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2103011.js b/scripts/npc/2103011.js new file mode 100644 index 0000000000..0370698289 --- /dev/null +++ b/scripts/npc/2103011.js @@ -0,0 +1,57 @@ +/* + 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 . +*/ +/* + Jewel depot on Ariant Residential area + */ + +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.isQuestStarted(3926)) { + if(cm.getQuestProgress(3926, 1) != 1) { + if(cm.haveItem(4031579)) { + cm.gainItem(4031579, -1); + cm.setQuestProgress(3926, 1, 1); + } + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2103012.js b/scripts/npc/2103012.js new file mode 100644 index 0000000000..e9e8e2e431 --- /dev/null +++ b/scripts/npc/2103012.js @@ -0,0 +1,57 @@ +/* + 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 . +*/ +/* + Jewel depot on Ariant Residential area + */ + +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.isQuestStarted(3926)) { + if(cm.getQuestProgress(3926, 3) != 1) { + if(cm.haveItem(4031579)) { + cm.gainItem(4031579, -1); + cm.setQuestProgress(3926, 3, 1); + } + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2111000.js b/scripts/npc/2111000.js index 6681d28eef..2a40b90e32 100644 --- a/scripts/npc/2111000.js +++ b/scripts/npc/2111000.js @@ -23,11 +23,17 @@ -- Odin JavaScript -------------------------------------------------------------------------------- Carson - Magatia (GMS Like) -- Version Info ----------------------------------------------------------------------------------- + 1.2 - Improved by Ronan 1.1 - Shortened by Moogra 1.0 - First Version by Maple4U --------------------------------------------------------------------------------------------------- */ function start() { - cm.sendNext("Alchemy....and Alchemist.....both of them are important. But more importantly, it is the Magatia that tolerate everything. The honor of Magatia should be protected by me."); + if(cm.isQuestStarted(3310) && !cm.haveItem(4031709, 1)) { + cm.warp(926120100); + } else { + cm.sendNext("Alchemy....and Alchemist.....both of them are important. But more importantly, it is the Magatia that tolerate everything. The honor of Magatia should be protected by me."); + } + cm.dispose(); } diff --git a/scripts/npc/2111003.js b/scripts/npc/2111003.js index 9af3378da5..948460a2b3 100644 --- a/scripts/npc/2111003.js +++ b/scripts/npc/2111003.js @@ -25,12 +25,18 @@ -- By --------------------------------------------------------------------------------------------- Maple4U -- Version Info ----------------------------------------------------------------------------------- + 1.2 - With quest feature by Ronan 1.1 - Shortened 3x by Moogra 1.0 - First Version by Maple4U --------------------------------------------------------------------------------------------------- */ function start() { - cm.sendOk("Emotion that I feel is real? Or just illusion coming from mechanical error?"); - cm.dispose(); + if(cm.isQuestStarted(3335) && !cm.haveItem(4031695, 1)) { + cm.warp(926120300); + cm.dispose(); + } else { + cm.sendOk("Emotion that I feel is real? Or just illusion coming from mechanical error?"); + cm.dispose(); + } } diff --git a/scripts/npc/2111006.js b/scripts/npc/2111006.js index 1ecba2467c..1db79394df 100644 --- a/scripts/npc/2111006.js +++ b/scripts/npc/2111006.js @@ -23,12 +23,18 @@ -- Odin JavaScript -------------------------------------------------------------------------------- Parwen - Magatia (GMS Like) -- Version Info ----------------------------------------------------------------------------------- + 1.2 - Improved by Ronan 1.1 - Shortened by Moogra 1.0 - First Version by Maple4U --------------------------------------------------------------------------------------------------- */ function start() { - cm.sendOk("uuuuhuk...Why only Ghost are around here?..."); + if(cm.isQuestStarted(3320) || cm.isQuestCompleted(3320)) { + cm.warp(926120200, 1); + } else { + cm.sendOk("uuuuhuk...Why only Ghost are around here?..."); + } + cm.dispose(); } diff --git a/scripts/npc/2111010.js b/scripts/npc/2111010.js new file mode 100644 index 0000000000..cf277e29f1 --- /dev/null +++ b/scripts/npc/2111010.js @@ -0,0 +1,53 @@ +/* + 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; + +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.isQuestStarted(3309) && !cm.haveItem(4031708, 1)) { + if(cm.canHold(4031708, 1)) { + cm.gainItem(4031708, 1); + } else { + cm.sendOk("Have a ETC slot available to get the Alcadno's secret document."); + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2111013.js b/scripts/npc/2111013.js new file mode 100644 index 0000000000..f949d766ad --- /dev/null +++ b/scripts/npc/2111013.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; + +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.isQuestStarted(3311)) { + cm.setQuestProgress(3311, 0, 1); + cm.sendOk("This is a mug picture of Dr. De Lang. It seems he is adorning a locket with the emblem of the Alcadno academy, he is a retainer of the Alcadno society.", 2); + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2111014.js b/scripts/npc/2111014.js new file mode 100644 index 0000000000..66b13e7c7a --- /dev/null +++ b/scripts/npc/2111014.js @@ -0,0 +1,55 @@ +/* + 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; + +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.isQuestStarted(3311)) { + cm.setQuestProgress(3311, 1, 1); + cm.sendOk("The diary of Dr. De Lang. A lot of formulas and pompous scientific texts can be found all way through the pages, but it is worth noting that in the last entry (3 weeks ago), it is written that he concluded the researches on an improvement on the blueprints for the Neo Huroids, thus making the last preparations to show it to the 'society'... No words after this...", 2); + } else if(cm.isQuestStarted(3322) && !cm.haveItem(4031697, 1)) { + if(cm.canHold(4031697, 1)) + cm.gainItem(4031697, 1); + else + cm.sendNext("Your inventory is full, make sure a ETC slot is available for the item."); + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2111015.js b/scripts/npc/2111015.js new file mode 100644 index 0000000000..0a9b2b1f98 --- /dev/null +++ b/scripts/npc/2111015.js @@ -0,0 +1,60 @@ +/* + 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 . +*/ + +importPackage(Packages.client); + +var status; + +function isPillUsed(ch) { + return ch.getBuffSource(MapleBuffStat.HPREC) == 2022198; +} + +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.isQuestStarted(3314) && !cm.haveItem(2022198, 1) && !isPillUsed(cm.getPlayer())) { + if(cm.canHold(2022198, 1)) { + cm.gainItem(2022198, 1); + cm.sendOk("You took the pills that were laying on the desk.", 2); + } else { + cm.sendOk("You don't have a USE slot available to get Russellon's pills.", 2); + } + } + + cm.dispose(); + } + } +} diff --git a/scripts/npc/2111017.js b/scripts/npc/2111017.js new file mode 100644 index 0000000000..b1d8b01141 --- /dev/null +++ b/scripts/npc/2111017.js @@ -0,0 +1,76 @@ +/* + 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; + +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.isQuestStarted(3339)) { + var progress = cm.getQuestProgress(3339, 0); + + if(progress == 3) { + cm.sendGetText("The pipe reacts as the water starts flowing. A secret compartment with a keypad shows up. #bPassword#k!"); + } else if(progress == 0) { + cm.setQuestProgress(3339, 0, 1); + cm.dispose(); + } else if(progress < 3) { + cm.setQuestProgress(3339, 0, 0); + cm.dispose(); + } else { + cm.warp(261000001, 1); + cm.dispose(); + } + } else { + if(cm.isQuestCompleted(3339)) { + cm.warp(261000001, 1); + } + + cm.dispose(); + } + } else if(status == 1) { + if(cm.getText() == "my love Phyllia") { + cm.setQuestProgress(3339, 0, 4); + cm.warp(261000001, 1); + cm.dispose(); + } + else{ + cm.sendOk("#rWrong!"); + cm.dispose(); + } + } + } +} diff --git a/scripts/npc/2111018.js b/scripts/npc/2111018.js new file mode 100644 index 0000000000..ea12705bbf --- /dev/null +++ b/scripts/npc/2111018.js @@ -0,0 +1,76 @@ +/* + 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; + +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.isQuestStarted(3339)) { + var progress = cm.getQuestProgress(3339, 0); + + if(progress == 3) { + cm.sendGetText("The pipe reacts as the water starts flowing. A secret compartment with a keypad shows up. #bPassword#k!"); + } else if(progress == 2) { + cm.setQuestProgress(3339, 0, 3); + cm.sendGetText("The pipe reacts as the water starts flowing. A secret compartment with a keypad shows up. #bPassword#k!"); + } else if(progress < 3) { + cm.setQuestProgress(3339, 0, 0); + cm.dispose(); + } else { + cm.warp(261000001, 1); + cm.dispose(); + } + } else { + if(cm.isQuestCompleted(3339)) { + cm.warp(261000001, 1); + } + + cm.dispose(); + } + } else if(status == 1) { + if(cm.getText() == "my love Phyllia") { + cm.setQuestProgress(3339, 0, 4); + cm.warp(261000001, 1); + cm.dispose(); + } + else{ + cm.sendOk("#rWrong!"); + cm.dispose(); + } + } + } +} diff --git a/scripts/npc/2111019.js b/scripts/npc/2111019.js new file mode 100644 index 0000000000..e5b9247786 --- /dev/null +++ b/scripts/npc/2111019.js @@ -0,0 +1,76 @@ +/* + 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; + +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.isQuestStarted(3339)) { + var progress = cm.getQuestProgress(3339, 0); + + if(progress == 3) { + cm.sendGetText("The pipe reacts as the water starts flowing. A secret compartment with a keypad shows up. #bPassword#k!"); + } else if(progress == 1) { + cm.setQuestProgress(3339, 0, 2); + cm.dispose(); + } else if(progress < 3) { + cm.setQuestProgress(3339, 0, 0); + cm.dispose(); + } else { + cm.warp(261000001, 1); + cm.dispose(); + } + } else { + if(cm.isQuestCompleted(3339)) { + cm.warp(261000001, 1); + } + + cm.dispose(); + } + } else if(status == 1) { + if(cm.getText() == "my love Phyllia") { + cm.setQuestProgress(3339, 0, 4); + cm.warp(261000001, 1); + cm.dispose(); + } + else{ + cm.sendOk("#rWrong!"); + cm.dispose(); + } + } + } +} diff --git a/scripts/npc/2111020.js b/scripts/npc/2111020.js new file mode 100644 index 0000000000..efaa992b54 --- /dev/null +++ b/scripts/npc/2111020.js @@ -0,0 +1,57 @@ +/* + 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; + +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.isQuestStarted(3345)) { + var progress = cm.getQuestProgress(3345, 0); + + if(progress == 0) { + cm.setQuestProgress(3345, 0, 1); + cm.dispose(); + } else if(progress < 4) { + cm.setQuestProgress(3345, 0, 0); + cm.dispose(); + } else { + cm.dispose(); + } + } + } + } +} diff --git a/scripts/npc/2111021.js b/scripts/npc/2111021.js new file mode 100644 index 0000000000..3359e86116 --- /dev/null +++ b/scripts/npc/2111021.js @@ -0,0 +1,57 @@ +/* + 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; + +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.isQuestStarted(3345)) { + var progress = cm.getQuestProgress(3345, 0); + + if(progress == 1) { + cm.setQuestProgress(3345, 0, 2); + cm.dispose(); + } else if(progress < 4) { + cm.setQuestProgress(3345, 0, 0); + cm.dispose(); + } else { + cm.dispose(); + } + } + } + } +} diff --git a/scripts/npc/2111022.js b/scripts/npc/2111022.js new file mode 100644 index 0000000000..e404a67613 --- /dev/null +++ b/scripts/npc/2111022.js @@ -0,0 +1,57 @@ +/* + 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; + +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.isQuestStarted(3345)) { + var progress = cm.getQuestProgress(3345, 0); + + if(progress == 2) { + cm.setQuestProgress(3345, 0, 3); + cm.dispose(); + } else if(progress < 4) { + cm.setQuestProgress(3345, 0, 0); + cm.dispose(); + } else { + cm.dispose(); + } + } + } + } +} diff --git a/scripts/npc/2111023.js b/scripts/npc/2111023.js new file mode 100644 index 0000000000..68faf968ff --- /dev/null +++ b/scripts/npc/2111023.js @@ -0,0 +1,62 @@ +/* + 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; + +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.isQuestStarted(3345)) { + var progress = cm.getQuestProgress(3345, 0); + + if(progress == 3 && cm.haveItem(4031739, 1) && cm.haveItem(4031740, 1) && cm.haveItem(4031741, 1)) { + cm.setQuestProgress(3345, 0, 4); + cm.gainItem(4031739, -1); + cm.gainItem(4031740, -1); + cm.gainItem(4031741, -1); + + cm.sendOk("(As you place the shards a light shines over the circle, repelling whatever omens were brewing inside the artifact.)", 2); + cm.dispose(); + } else if(progress < 4) { + cm.setQuestProgress(3345, 0, 0); + cm.dispose(); + } else { + cm.dispose(); + } + } + } + } +} diff --git a/scripts/npc/2112007.js b/scripts/npc/2112007.js index 22a717fb49..9eab1dad67 100644 --- a/scripts/npc/2112007.js +++ b/scripts/npc/2112007.js @@ -1,8 +1,6 @@ -/* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer +/* + 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 diff --git a/scripts/npc/2112016.js b/scripts/npc/2112016.js new file mode 100644 index 0000000000..fca7a79156 --- /dev/null +++ b/scripts/npc/2112016.js @@ -0,0 +1,60 @@ +/* + 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 . +*/ + +/** + * @author: Ronan + * @npc: Hidden Documents + * @func: Yulete lab 2 quest +*/ + +function start() { + if(cm.isQuestStarted(3367)) { + var c = cm.getQuestProgress(3367, 30); + if(c == 30) { + cm.sendNext("(All files have been organized. Report the found files to Yulete.)", 2); + cm.dispose(); + return; + } + + var book = (cm.getNpcObjectId() % 30); + var prog = cm.getQuestProgress(3367, book); + if(prog == 0) { + c++; + + if(book < 20) { + if(!cm.canHold(4031797, 1)) { + cm.sendNext("(You found a report file, but since your ETC is full you choose to put the file in the place you've found.)"); + cm.dispose(); + return; + } else { + cm.gainItem(4031797, 1); + cm.setQuestProgress(3367, 31, cm.getQuestProgress(3367, 31) + 1); + } + } + + cm.sendNext("(Organized file. #r" + (30 - c) + "#k left.)", 2); + + cm.setQuestProgress(3367, book, 1); + cm.setQuestProgress(3367, 30, c); + } + } + + cm.dispose(); +} diff --git a/scripts/npc/9020002.js b/scripts/npc/9020002.js index f202542c42..6b1f2cbd5a 100644 --- a/scripts/npc/9020002.js +++ b/scripts/npc/9020002.js @@ -48,7 +48,7 @@ function action(mode, type, selection){ if (status == 0) { cm.sendNext("To return back to the city, follow this way."); } else { - cm.getPlayer().warp(103000000, cm.getClient().getChannelServer().getMapFactory().getMap(103000000).getRandomPlayerSpawnpoint()); + cm.warp(103000000); cm.dispose(); } } else { diff --git a/scripts/npc/MagatiaPassword.js b/scripts/npc/MagatiaPassword.js new file mode 100644 index 0000000000..a6bd7bf9d4 --- /dev/null +++ b/scripts/npc/MagatiaPassword.js @@ -0,0 +1,32 @@ +var status; + +function start(){ + status = -1; + action(1, 0, 0); +} + +function action(mode, type, selection){ + if(mode == -1 || (mode == 0 && status == 0)){ + cm.dispose(); + return; + } + else if(mode == 0) + status--; + else + status++; + + if(status == 0){ + cm.sendGetText("The door reacts to the entry pass inserted. #bPassword#k!"); + } + else if(status == 1){ + if(cm.getText() == cm.getStringQuestProgress(3360, 0)){ + cm.setQuestProgress(3360, 1, 1); + cm.warp((cm.getMapId() == 261010000) ? 261020200 : 261010000, "secret00"); + } + else { + cm.sendOk("#rWrong!"); + } + + cm.dispose(); + } +} \ No newline at end of file diff --git a/scripts/npc/ThiefPassword.js b/scripts/npc/ThiefPassword.js new file mode 100644 index 0000000000..ca6df9a429 --- /dev/null +++ b/scripts/npc/ThiefPassword.js @@ -0,0 +1,39 @@ +var status; + +function start(){ + status = -1; + action(1, 0, 0); +} + +function action(mode, type, selection){ + if(mode == -1 || (mode == 0 && status == 0)){ + cm.dispose(); + return; + } + else if(mode == 0) + status--; + else + status++; + + + + if(status == 0){ + cm.sendGetText("A suspicious voice pierces through the silence. #bPassword#k!"); + } + else if(status == 1){ + if(cm.getText() == "Open Sesame"){ + if(cm.isQuestCompleted(3925)) + cm.warp(260010402); + else + cm.playerMessage(5, "Although you said the right answer, the door will not budge."); + + cm.dispose(); + } + else{ + cm.sendOk("#rWrong!"); + } + } + else if(status == 2){ + cm.dispose(); + } +} \ No newline at end of file diff --git a/scripts/portal/MD_error.js b/scripts/portal/MD_error.js new file mode 100644 index 0000000000..5febd04ae2 --- /dev/null +++ b/scripts/portal/MD_error.js @@ -0,0 +1,59 @@ +/* + 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 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 . +*/ + +/* +MiniDungeon - Critical Error +*/ + +var baseid = 261020300; +var dungeonid = 261020301; +var dungeons = 30; + +function enter(pi) { + if (pi.getMapId() == baseid) { + if (pi.getParty() != null) { + if (pi.isLeader()) { + for (var i = 0; i < dungeons; i++) { + if(pi.startDungeonInstance(dungeonid + i)) { + pi.warpParty(dungeonid + i); + return true; + } + } + } else { + pi.playerMessage(5, "Only solo or party leaders are supposed to enter the Mini-Dungeon."); + return false; + } + } else { + for (var i = 0; i < dungeons; i++) { + if(pi.startDungeonInstance(dungeonid + i)) { + pi.warp(dungeonid + i); + return true; + } + } + } + pi.playerMessage(5, "All of the Mini-Dungeons are in use right now, please try again later."); + return false; + } else { + pi.playPortalSound(); + pi.warp(baseid, "MD00"); + return true; + } +} \ No newline at end of file diff --git a/scripts/portal/PPinkOut.js b/scripts/portal/PPinkOut.js index aa4a80a505..bc6a78d8f2 100644 --- a/scripts/portal/PPinkOut.js +++ b/scripts/portal/PPinkOut.js @@ -1,14 +1,13 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 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. + 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 diff --git a/scripts/portal/Pinkin.js b/scripts/portal/Pinkin.js index d0903ce2b5..e3b17164ae 100644 --- a/scripts/portal/Pinkin.js +++ b/scripts/portal/Pinkin.js @@ -1,14 +1,13 @@ /* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer + 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 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. + 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 diff --git a/scripts/portal/ariant_Agit.js b/scripts/portal/ariant_Agit.js new file mode 100644 index 0000000000..96436d81e1 --- /dev/null +++ b/scripts/portal/ariant_Agit.js @@ -0,0 +1,34 @@ +/* + 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 . +*/ + +/* +Agit's hideout (leader of the Sand Bandits) +@author Ronan +*/ + +function enter(pi) { + if(pi.isQuestCompleted(3928) && pi.isQuestCompleted(3931) && pi.isQuestCompleted(3934)) { + pi.warp(260000201, 1); + return true; + } else { + pi.message("Access restricted to only members of the Sand Bandits team."); + return false; + } +} \ No newline at end of file diff --git a/scripts/portal/ariant_queens.js b/scripts/portal/ariant_queens.js index 554fb29d10..befd7aaa17 100644 --- a/scripts/portal/ariant_queens.js +++ b/scripts/portal/ariant_queens.js @@ -1,4 +1,35 @@ -//some quest where you must use hidden portals +/* + 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 . +*/ + +importPackage(Packages.client); + +function isTigunMorphed(ch) { + return ch.getBuffSource(MapleBuffStat.MORPH) == 2210005; +} + function enter(pi) { - return false; + if(isTigunMorphed(pi.getPlayer())) { + return false; + } else { + pi.warp(260000300, 7); + pi.message("You, intruder! You don't have permission to roam the palace! Get out!!"); + return true; + } } \ No newline at end of file diff --git a/scripts/portal/enterDisguise2.js b/scripts/portal/enterDisguise2.js index f4dfd64975..61eaf8788e 100644 --- a/scripts/portal/enterDisguise2.js +++ b/scripts/portal/enterDisguise2.js @@ -29,7 +29,17 @@ importPackage(Packages.server.life); function enter(pi) { if(pi.isQuestStarted(20301) || pi.isQuestStarted(20302) || pi.isQuestStarted(20303) || pi.isQuestStarted(20304) || pi.isQuestStarted(20305)) { var map = pi.getClient().getChannelServer().getMapFactory().getMap(108010610); - spawnMob(3345, -452, 9001009, map); + if(map.countPlayers() > 0) { + pi.message("Someone else is already challenging the Master of Disguise."); + return false; + } + + if(pi.haveItem(4032101, 1)) { + pi.message("You have already challenged the Master of Disguise, report your success to Neinheart."); + return false; + } + + spawnMob(3345, -452, 9001009, map); pi.warp(108010610, "out00"); } else { pi.warp(130010020, "out00"); diff --git a/scripts/portal/magatia_alc0.js b/scripts/portal/magatia_alc0.js new file mode 100644 index 0000000000..c19a460afb --- /dev/null +++ b/scripts/portal/magatia_alc0.js @@ -0,0 +1,29 @@ +/* + 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 . +*/ + +function enter(pi) { + if(!pi.isQuestStarted(3309) || pi.haveItem(4031708, 1)) { + pi.warp(261020700, "down00"); + } else { + pi.warp(926120000, "out00"); + } + + return true; +} \ No newline at end of file diff --git a/scripts/portal/q3366in.js b/scripts/portal/q3366in.js new file mode 100644 index 0000000000..96193fa04e --- /dev/null +++ b/scripts/portal/q3366in.js @@ -0,0 +1,29 @@ +/* + 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 . +*/ +function enter(pi) { + if(pi.isQuestStarted(3366)) { + pi.warp(926130101, 0); + return true; + } else { + pi.message("You don't have permission to access this room."); + return false; + } + +} \ No newline at end of file diff --git a/scripts/portal/q3366out.js b/scripts/portal/q3366out.js new file mode 100644 index 0000000000..639adc9af0 --- /dev/null +++ b/scripts/portal/q3366out.js @@ -0,0 +1,23 @@ +/* + 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 . +*/ +function enter(pi) { + pi.warp(926130100, "in00"); + return true; +} \ No newline at end of file diff --git a/scripts/portal/q3367in.js b/scripts/portal/q3367in.js new file mode 100644 index 0000000000..daeeab03c2 --- /dev/null +++ b/scripts/portal/q3367in.js @@ -0,0 +1,33 @@ +/* + 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 . +*/ +function enter(pi) { + if(pi.isQuestStarted(3367)) { + if(pi.getQuestProgress(3367, 31) < pi.getItemQuantity(4031797)) { + pi.gainItem(4031797, pi.getQuestProgress(3367, 31) - pi.getItemQuantity(4031797)); + } + + pi.warp(926130102, 0); + return true; + } else { + pi.message("You don't have permission to access this room."); + return false; + } + +} \ No newline at end of file diff --git a/scripts/portal/q3367out.js b/scripts/portal/q3367out.js new file mode 100644 index 0000000000..07b648b310 --- /dev/null +++ b/scripts/portal/q3367out.js @@ -0,0 +1,23 @@ +/* + 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 . +*/ +function enter(pi) { + pi.warp(926130100, "in01"); + return true; +} \ No newline at end of file diff --git a/scripts/portal/q3368in.js b/scripts/portal/q3368in.js new file mode 100644 index 0000000000..02336e73ed --- /dev/null +++ b/scripts/portal/q3368in.js @@ -0,0 +1,29 @@ +/* + 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 . +*/ +function enter(pi) { + if(pi.isQuestStarted(3368)) { + pi.warp(926130103, 0); + return true; + } else { + pi.message("You don't have permission to access this room."); + return false; + } + +} \ No newline at end of file diff --git a/scripts/portal/q3368out.js b/scripts/portal/q3368out.js new file mode 100644 index 0000000000..e699c33e20 --- /dev/null +++ b/scripts/portal/q3368out.js @@ -0,0 +1,23 @@ +/* + 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 . +*/ +function enter(pi) { + pi.warp(926130100, "in02"); + return true; +} \ No newline at end of file diff --git a/scripts/portal/secretDoor.js b/scripts/portal/secretDoor.js new file mode 100644 index 0000000000..603fb63595 --- /dev/null +++ b/scripts/portal/secretDoor.js @@ -0,0 +1,43 @@ +/* + 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 . +*/ +/** + * @Author Ronan + */ + +function doorCross(pi) { + pi.warp(261030000, "sp_" + ((pi.getMapId() == 261010000) ? "jenu" : "alca")); + return true; +} + +function enter(pi) { + if(pi.isQuestCompleted(3360)) { + return doorCross(pi); + } else if(pi.isQuestStarted(3360)) { + if(pi.getQuestProgress(3360, 1) == 0) { + pi.openNpc(2111024, "MagatiaPassword"); + return false; + } else { + return doorCross(pi); + } + } else { + pi.message("This door is locked."); + return false; + } +} \ No newline at end of file diff --git a/scripts/portal/skyrom.js b/scripts/portal/skyrom.js new file mode 100644 index 0000000000..179a91cf66 --- /dev/null +++ b/scripts/portal/skyrom.js @@ -0,0 +1,33 @@ +/* + 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 . +*/ + +function enter(pi) { + if(pi.isQuestStarted(3935) && !pi.haveItem(4031574, 1)) { + if(pi.getWarpMap(926000010).countPlayers() == 0) { + pi.warp(926000010); + return true; + } else { + pi.message("Someone is already trying this map."); + return false; + } + } else { + return false; + } +} \ No newline at end of file diff --git a/scripts/portal/thief_in1.js b/scripts/portal/thief_in1.js new file mode 100644 index 0000000000..de6b395403 --- /dev/null +++ b/scripts/portal/thief_in1.js @@ -0,0 +1,9 @@ +function enter(pi) { + if(pi.isQuestCompleted(20730) || pi.isQuestCompleted(21734)) { // puppeteer defeated, newfound secret path + pi.warp(105040201,2); + return true; + } + + pi.openNpc(1063011, "ThiefPassword"); + return false; +} \ No newline at end of file diff --git a/scripts/quest/20105.js b/scripts/quest/20105.js index 046736374b..0c3dbda648 100644 --- a/scripts/quest/20105.js +++ b/scripts/quest/20105.js @@ -21,10 +21,10 @@ function end(mode, type, selection) { qm.sendYesNo("Have you made your decision? The decision will be final, so think carefully before deciding what to do. Are you sure you want to become a Striker?"); } else if (status == 1) { qm.sendNext("I have just molded your body to make it perfect for a Soul Master. If you wish to become more powerful, use Stat Window (S) to raise the appropriate stats. If you aren't sure what to raise, just click on #bAuto#k."); - if (qm.getplayer().getJob().getId() != 1500) { + if (qm.getPlayer().getJob().getId() != 1500) { qm.gainItem(1482014, 1); qm.gainItem(1142066, 1); - qm.getplayer().changeJob(MapleJob.THUNDERBREAKER1); + qm.getPlayer().changeJob(MapleJob.THUNDERBREAKER1); qm.getPlayer().resetStats(); } qm.forceCompleteQuest(); diff --git a/scripts/quest/20311.js b/scripts/quest/20311.js index 4e381e94c0..31be876455 100644 --- a/scripts/quest/20311.js +++ b/scripts/quest/20311.js @@ -41,7 +41,7 @@ function start(mode, type, selection) { else status--; if (status == 0) { - qm.sendNext("The jevel you brought back from the Master of Disguise is Shinsoo's Teardrop. It is the crystalization of Shinsoo's powers. If the Black Mage gets his hands on this, then this spells doom for all of us."); + qm.sendNext("The jewel you brought back from the Master of Disguise is Shinsoo's Teardrop. It is the crystalization of Shinsoo's powers. If the Black Mage gets his hands on this, then this spells doom for all of us."); } else if (status == 1) { qm.sendYesNo("For your effort in preventing a potentially serious disaster, the Empress has decided to present you with a new title. Are you ready to accept it?"); } else if (status == 2) { diff --git a/scripts/quest/20312.js b/scripts/quest/20312.js index a636fbe50d..26458ea860 100644 --- a/scripts/quest/20312.js +++ b/scripts/quest/20312.js @@ -41,7 +41,7 @@ function start(mode, type, selection) { else status--; if (status == 0) { - qm.sendNext("The jevel you brought back from the Master of Disguise is Shinsoo's Teardrop. It is the crystalization of Shinsoo's powers. If the Black Mage gets his hands on this, then this spells doom for all of us."); + qm.sendNext("The jewel you brought back from the Master of Disguise is Shinsoo's Teardrop. It is the crystalization of Shinsoo's powers. If the Black Mage gets his hands on this, then this spells doom for all of us."); } else if (status == 1) { qm.sendYesNo("As a token of her appreciation for your effort in preventing potentially serious matter, the Empress has decided to present you with a new title. Are you ready to accept it?"); } else if (status == 2) { diff --git a/scripts/quest/20313.js b/scripts/quest/20313.js index 2616641c6c..73cb223242 100644 --- a/scripts/quest/20313.js +++ b/scripts/quest/20313.js @@ -41,7 +41,7 @@ function start(mode, type, selection) { else status--; if (status == 0) { - qm.sendNext("The jevel you brought back from the Master of Disguise is Shinsoo's Teardrop. It is the crystalization of Shinsoo's powers. If the Black Mage gets his hands on this, then this spells doom for all of us."); + qm.sendNext("The jewel you brought back from the Master of Disguise is Shinsoo's Teardrop. It is the crystalization of Shinsoo's powers. If the Black Mage gets his hands on this, then this spells doom for all of us."); } else if (status == 1) { qm.sendYesNo("As a token of her appreciation for your work on this, the Empress has decided to present you with a new title. Would you like to receive that title?"); } else if (status == 2) { diff --git a/scripts/quest/20314.js b/scripts/quest/20314.js index dd7f4dd62d..17bb317317 100644 --- a/scripts/quest/20314.js +++ b/scripts/quest/20314.js @@ -41,7 +41,7 @@ function start(mode, type, selection) { else status--; if (status == 0) { - qm.sendNext("The jevel you brought back from the Master of Disguise is Shinsoo's Teardrop. It is the crystalization of Shinsoo's powers. If the Black Mage gets his hands on this, then this spells doom for all of us."); + qm.sendNext("The jewel you brought back from the Master of Disguise is Shinsoo's Teardrop. It is the crystalization of Shinsoo's powers. If the Black Mage gets his hands on this, then this spells doom for all of us."); } else if (status == 1) { qm.sendYesNo("The Empress thought highly of your accomplishment and granted you a new title. Would you like to receive it?"); } else if (status == 2) { diff --git a/scripts/quest/20315.js b/scripts/quest/20315.js index a9bf2e97df..05b43e4c10 100644 --- a/scripts/quest/20315.js +++ b/scripts/quest/20315.js @@ -41,7 +41,7 @@ function start(mode, type, selection) { else status--; if (status == 0) { - qm.sendNext("The jevel you brought back from the Master of Disguise is Shinsoo's Teardrop. It is the crystalization of Shinsoo's powers. If the Black Mage gets his hands on this, then this spells doom for all of us."); + qm.sendNext("The jewel you brought back from the Master of Disguise is Shinsoo's Teardrop. It is the crystalization of Shinsoo's powers. If the Black Mage gets his hands on this, then this spells doom for all of us."); } else if (status == 1) { qm.sendYesNo("Because of that, the Empress gave you a new title! Can you believe that? Do you want the title?"); } else if (status == 2) { diff --git a/scripts/quest/3301.js b/scripts/quest/3301.js index 5d1c8747b5..38db5d56cc 100644 --- a/scripts/quest/3301.js +++ b/scripts/quest/3301.js @@ -32,7 +32,7 @@ function start(mode, type, selection) { } function end(mode, type, selection) { - if (mode == -1) { + if (mode == -1 || (mode == 0 && type > 0)) { qm.dispose(); } else { oreArray = getOreArray(); diff --git a/scripts/quest/3303.js b/scripts/quest/3303.js index 792a352030..806589be97 100644 --- a/scripts/quest/3303.js +++ b/scripts/quest/3303.js @@ -32,7 +32,7 @@ function start(mode, type, selection) { } function end(mode, type, selection) { - if (mode == -1) { + if (mode == -1 || (mode == 0 && type > 0)) { qm.dispose(); } else { oreArray = getOreArray(); diff --git a/scripts/quest/3311.js b/scripts/quest/3311.js new file mode 100644 index 0000000000..6912a7dabb --- /dev/null +++ b/scripts/quest/3311.js @@ -0,0 +1,49 @@ +/* + 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) { + if(qm.getQuestProgress(3311, 0) == 1 && qm.getQuestProgress(3311, 1) == 1) { + qm.sendNext("Hmm, so the Alcadno doctor wrote something about researching some vanguardist Neo Huroid machine, that could beat by far the existing one, and was about to prepare the last steps of his rehearsal? We don't have a word about him for about three weeks now, something must have gone wrong..."); + qm.gainExp(60000 * qm.getPlayer().getExpRate()); + qm.forceCompleteQuest(); + } else { + qm.sendNext("Found nothing yet? Please check out Dr. De Lang's house properly, something there may give out a clue about what is going on."); + } + + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/quest/3314.js b/scripts/quest/3314.js new file mode 100644 index 0000000000..306b95ab5d --- /dev/null +++ b/scripts/quest/3314.js @@ -0,0 +1,65 @@ +/* + 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 . +*/ + +importPackage(Packages.client); + +var status = -1; + +function isPillUsed(ch) { + return ch.getBuffSource(MapleBuffStat.HPREC) == 2022198; +} + +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) { + if(isPillUsed(qm.getPlayer())) { + if(qm.canHoldAll([2050004, 2022224], [10, 20])) { + qm.sendNext("You did took my experiments. Hmm, so THAT is the result of it, hehehehe... Ok, take that as compensation will you? And oh, you can #rspew that#k right away (#bright-click on the pill icon at the top-right corner of the screen#k), no worries."); + + qm.gainExp(12500 * qm.getPlayer().getExpRate()); + qm.gainItem(2050004, 10); + + var i = Math.floor(Math.random() * 5); + qm.gainItem(2022224 + i, 10); + + qm.forceCompleteQuest(); + } else { + qm.sendNext("Huh, your inventory is full. Free some spaces on your USE first."); + } + } else { + qm.sendNext("You seem pretty normal, don't you? I can't detect any possible effect from my experiment on you. Go take the pill I asked you to take and show me the effects, will you?"); + } + + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/quest/3320.js b/scripts/quest/3320.js new file mode 100644 index 0000000000..3dfd93b5bd --- /dev/null +++ b/scripts/quest/3320.js @@ -0,0 +1,47 @@ +/* + 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 . +*/ + +importPackage(Packages.client); + +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.sendAcceptDecline("I may have an idea of the whereabouts of Dr. De Lang. Are you ready to be transported to the area?"); + } else if (status == 1) { + qm.forceStartQuest(); + qm.warp(926120200, 1); + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/quest/3321.js b/scripts/quest/3321.js new file mode 100644 index 0000000000..fe20981846 --- /dev/null +++ b/scripts/quest/3321.js @@ -0,0 +1,56 @@ +/* + 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 . +*/ + +importPackage(Packages.client); + +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("As you may know by now, I am Dr. De Lang. Once an influent alchemist amongst the ranks of the Alcadno society, I have been disconnected from their society due to the disaster of the aftermatch of my failed experiments, that can be seen now all over Magatia."); + } else if (status == 1) { + qm.sendNextPrev("Huroids, my creation, were originally engineered to fulfill both domestic, scientific and military affairs, however a critical malfunction on their main processing unit chips rendered them unstable and violent, rapidly causing upheavals and havoc all over the place. Due to that, I've been stripped of my status as Alcadno's alchemist and researcher and got myself an arrest warrant."); + } else if (status == 2) { + qm.sendAcceptDecline("Even so, I must not be stopped now! Creations of mine are still roaming around causing destruction and casualities every day, with no great hopes of repelling them from the city! They can replicate themselves too fast, normal weapons cannot stop them. I've been since relentlessly researching a way to shut them down all at once, trying to find a way to stop this insanity. Surely you can understand my situation?"); + } else if (status == 3) { + qm.sendNext("My gratitude for understanding my point. You must have met Parwen, since you know where I am. Make him aware of the current situation."); + } else if (status == 4) { + qm.sendNext("Oh, and I have a personal favor to ask, if it's not too much. I am worried about my wife, #b#p2111004##k. Since the incident with the Huroids I could send a word to her, that must have made a toll on her... Please, if you could, could you get the #bSilver Pendant#k I left #bback at home#k, and give it to her in my stead? I regret not giving the item right away to her, it was her birthday... Maybe giving it now to her can get her a good sleeping night, at least."); + } else if (status == 5) { + qm.sendNext("#rMake sure to remember this pattern!#k I've hid the pendant in my house, in a container #bbehind the water pipes#k. The pipes must be turned #bin order#k: top, bottom, middle. And then, enter the secret password: '#rmy love Phyllia#k'."); + + qm.forceStartQuest(); + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/quest/3345.js b/scripts/quest/3345.js new file mode 100644 index 0000000000..898353c76e --- /dev/null +++ b/scripts/quest/3345.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 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) { + if(qm.getQuestProgress(3345, 0) == 4) { + qm.sendNext("So, you have succeeded. With this, Magatia's upfront demise has been averted, well done brave adventurer!"); + qm.forceCompleteQuest(); + + qm.gainExp(20000 * qm.getPlayer().getExpRate()); + } else { + qm.sendNext("Did you not seal the #rmagic circle beneath Magatia#k yet? It is a matter of great importance, please haste yourself."); + } + + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/quest/3353.js b/scripts/quest/3353.js new file mode 100644 index 0000000000..a28b158cd5 --- /dev/null +++ b/scripts/quest/3353.js @@ -0,0 +1,48 @@ +/* + 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("I see. De Lang wants to stop the Huroids from causing more destruction, but the societies would like to get him on jail at once. So that's why he hid himself there."); + } else if (status == 1) { + qm.sendAcceptDecline("In that case, go there again and hear more details from De Lang, will you?"); + } else if (status == 2) { + qm.warp(926120200, 1); + + qm.forceStartQuest(); + qm.dispose(); + } + } +} diff --git a/scripts/quest/3354.js b/scripts/quest/3354.js new file mode 100644 index 0000000000..14c9c76165 --- /dev/null +++ b/scripts/quest/3354.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 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.sendAcceptDecline("I have a request for you. Can you ask #bMaed#k for a potion of my devise? Obviously, don't mention I have asked you that, that would be a problem. #bKeeny#k got an illness due to the contact with the Huroids, this have bothering me so much I couldn't give progress on my researches... Please #rbring her the potion#k, so that I could feel better and start making progress. I'm counting on you."); + } else if (status == 1) { + qm.forceStartQuest(); + qm.dispose(); + } + } +} diff --git a/scripts/quest/3360.js b/scripts/quest/3360.js index 78a8943ba1..d9f572b8b2 100644 --- a/scripts/quest/3360.js +++ b/scripts/quest/3360.js @@ -43,13 +43,14 @@ function start(mode, type, selection) { } if (status == 0) { - qm.sendNext("Oh! Finally you have come! I'm glad you are here in time. I have the master key for you to open the secert passage! Hahahaha! Isn't it amazing? Say it amazing!"); + qm.sendNext("Oh! Finally you have come! I'm glad you are here in time. I have the master key for you to open the secret passage! Hahahaha! Isn't it amazing? Say it amazing!"); } else if (status == 1) { qm.sendAcceptDecline("All right, now, this key is very long and complex. I need you to memorize it very well. I won't say again, so you'd better write it down somewhere. Are you ready?"); } else if (status == 2) { var pass = generateString(); qm.sendOk("The key code is #b" + pass + "#k. Got that? Put the key into the door of the secret passage, and you will be able to walk around the passage freely."); - qm.forceStartQuest(pass); + qm.forceStartQuest(); + qm.setStringQuestProgress(3360, 0, pass); qm.dispose(); } } @@ -64,7 +65,13 @@ function end(mode, type, selection) { else status--; if (status == 0) { - qm.dispose(); + if(qm.getQuestProgress(3360, 1) == 0) { + qm.sendNext("What's up? You haven't opened the Secret Passage yet?"); + } else { + qm.forceCompleteQuest(); + } + + qm.dispose(); } } } diff --git a/scripts/quest/3382.js b/scripts/quest/3382.js index 002d6c8d52..710b02b56f 100644 --- a/scripts/quest/3382.js +++ b/scripts/quest/3382.js @@ -28,20 +28,10 @@ */ function end(mode, type, selection) { - var itemid; - if(qm.getQuestStatus(3302) == 2) { - itemid = 4001159; - } else if(qm.getQuestStatus(3304) == 2) { - itemid = 4001160; - } else { - qm.sendNext("You must join one of the Magatia's factions before claiming a prize."); - qm.dispose(); - return; - } - - if(qm.haveItem(itemid, 25) && qm.getPlayer().getItemQuantity(1122010, true) == 0) { + if(qm.haveItem(4001159, 25) && qm.haveItem(4001160, 25) && qm.getPlayer().getItemQuantity(1122010, true) == 0) { if(qm.canHold(1122010)) { - qm.gainItem(itemid, -25); + qm.gainItem(4001159, -25); + qm.gainItem(4001160, -25); qm.gainItem(1122010, 1); qm.sendOk("Thank you for retrieving the marbles. Accept this pendant as a token of my appreciation."); @@ -50,9 +40,10 @@ function end(mode, type, selection) { qm.dispose(); return; } - } else if(qm.haveItem(itemid, 10)) { + } else if(qm.haveItem(4001159, 10) && qm.haveItem(4001160, 10)) { if(qm.canHold(2041212)) { - qm.gainItem(itemid, -10); + qm.gainItem(4001159, -10); + qm.gainItem(4001160, -10); qm.gainItem(2041212, 1); qm.sendOk("Thank you for retrieving the marbles. This rock, that I am giving to you, can be used to improve the stats on the #b#t1122010##k. Take it as a token of my appreciation and use it wisely."); @@ -62,7 +53,7 @@ function end(mode, type, selection) { return; } } else { - qm.sendNext("I need at least #b10 #t" + itemid + "##k to reward you appropriately. If you happen to come with #b25 of these#k instead, I can reward you with a valuable gear. Fare well."); + qm.sendNext("I need at least #b10 of both #t4001159# and #t4001160##k to reward you appropriately. If you happen to come with #b25 of these#k instead, I can reward you with a valuable gear. Fare well."); qm.dispose(); return; } diff --git a/scripts/quest/3926.js b/scripts/quest/3926.js new file mode 100644 index 0000000000..59cfa66bc9 --- /dev/null +++ b/scripts/quest/3926.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 . +*/ +/* Screwing the Red Scorpions + */ + +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) { + var c = 0; + + for(var i = 0; i < 4; i++) { + if(qm.getQuestProgress(3926, i) == 1) { + c++; + } + } + + if(c == 4) { + qm.sendNext("You delivered all the jewels, well done!"); + qm.gainExp(6500 * qm.getPlayer().getExpRate()); + qm.forceCompleteQuest(); + } else { + qm.sendNext("Have you brought all the jewels from the Red Scorpions? They have to be delivered to the Residential areas of the Sand Bandits."); + } + + qm.dispose(); + } + } +} diff --git a/scripts/quest/3929.js b/scripts/quest/3929.js new file mode 100644 index 0000000000..2dc8f53920 --- /dev/null +++ b/scripts/quest/3929.js @@ -0,0 +1,70 @@ +/* + 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 . +*/ +/* Sejan's Test + Food delivery on Ariant + */ + +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) { + var c = 0; + + for(var i = 0; i < 4; i++) { + if(qm.getQuestProgress(3929, i) == 1) { + c++; + } + } + + if(c == 4) { + qm.sendNext("You delivered all the food, good."); + qm.gainExp(2000 * qm.getPlayer().getExpRate()); + qm.forceCompleteQuest(); + } else { + var missed = (4 - qm.getItemQuantity(4031580)) - c; + if(missed > 0) { + if(qm.canHold(4031580, missed)) { + qm.gainItem(4031580, missed); + qm.sendNext("Hey, what are you trying to pull on? To pass my test you must deliver all the foods to the Residential areas."); + } else { + qm.sendNext("You don't completed the task, neither has slots available on the inventory to get the food. Free a slot on your ETC please."); + } + } else { + qm.sendNext("Hey, what are you trying to pull on? To pass my test you must to deliver all the foods to the Residential areas."); + } + } + + qm.dispose(); + } + } +} diff --git a/scripts/quest/3933.js b/scripts/quest/3933.js new file mode 100644 index 0000000000..e5eb3d02dd --- /dev/null +++ b/scripts/quest/3933.js @@ -0,0 +1,57 @@ +/* + 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 . +*/ +/* + Ardin - Sand Bandits team challenge + */ + +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("I didn't think you would be this strong. I feel like you have what it takes to become a member of the Sand Bandits. The most important aspect of being a member is power, and I think you have that. I also... want to test you one more time, just to make sure you're the right one. What do you think? Can you handle it?"); + } else if (status == 1) { + qm.sendAcceptDecline("To truly see your strength, I'll have to face you myself. Don't worry, I'll summon my other self to face off against you. Are you ready?"); + } else if (status == 2) { + qm.sendNext("Good, I like your confidence."); + } else { + if(qm.getWarpMap(926000000).getCharacters().size() > 0) { + qm.sendOk("There is someone currently in this map, come back later."); + } else { + qm.warp(926000000); + qm.forceStartQuest(); + } + + qm.dispose(); + } + } +} diff --git a/scripts/quest/3941.js b/scripts/quest/3941.js new file mode 100644 index 0000000000..2a9fed9724 --- /dev/null +++ b/scripts/quest/3941.js @@ -0,0 +1,95 @@ +/* + 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 . +*/ +/* Steal queen's silk + */ + +importPackage(Packages.client); + +function isTigunMorphed(ch) { + return ch.getBuffSource(MapleBuffStat.MORPH) == 2210005; +} + +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(!isTigunMorphed(qm.getPlayer())) { + qm.sendNext("What's this? I can't simply give the Queen's silk to anyone, claiming they will hand it at once to the queen. Get out of my sights."); + qm.dispose(); + return; + } + + if (status == 0) { + qm.sendNext("Tigun, what are you doing here?"); + } else if (status == 1) { + qm.sendNext("The Queen wants her silk right now? Alright, I have them here. Hold on a moment."); + + qm.forceStartQuest(); + qm.dispose(); + } + } +} + +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(!isTigunMorphed(qm.getPlayer())) { + qm.sendNext("What's this? I can't simply give the Queen's silk to anyone, claiming they will hand it at once to the queen. Get out of my sights."); + qm.dispose(); + return; + } + + if (status == 0) { + if(qm.canHold(4031571, 1)) { + qm.gainItem(4031571); + + qm.sendNext("There you go. Please deliver to the queen as soon as possible, Tigun, she gets really mad if things get delayed."); + qm.forceCompleteQuest(); + } else { + qm.sendNext("Hey, you're lacking space to hold this, man. I will stay with it while you arrange your backpack..."); + } + + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/quest/3953.js b/scripts/quest/3953.js new file mode 100644 index 0000000000..0c243f4684 --- /dev/null +++ b/scripts/quest/3953.js @@ -0,0 +1,56 @@ +/* + 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.sendSimple("Eh, are you still saying Deo is a monster? No, Deo is not a monster, he is a peaceful leader of the Royal cactus from the region.\r\n\r\n#L0##bHave you heard that a group of merchants crossing through the desert were attacked by the monsters?#k"); + } else if (status == 1) { + qm.sendSimple("Is that so? I wonder why these merchants were wandering so recklessly in the desert. They trespassed the territory of the Cactus'! They shouldn't be wandering around in the first place, they should first have the leave of the Ariant Counsel.\r\n\r\n#L0##bThis is all because of the Queen's negligence in maintaining the safety of the town.#k"); + } else if (status == 2) { + qm.sendSimple("Ehh... Yeah, the city is not really doing well because of the currently ruling govern, that's indeed a fact. If only the Guardians of the Deserts returned to put order on this mess...\r\n\r\n#L0##bWhat is the Guardian of the Deserts doing when we're under the Queen's tyranny?#k"); + } else if (status == 3) { + qm.sendSimple("They have departed on an expedition to get rid of some major threats in the desert that were ravaging Ariant, for quite some time now... It's strange, they should have already returned... Thinking about it now, the last attack on the merchants was around the direction the Guardians departed... No, that can't be... Can it?\r\n\r\n#L0##bPerhaps Deo has already turned into a monster.#k"); + } + else if (status == 4) { + qm.gainItem(4011008, -1); + + qm.sendNext("We're in great trouble, if it is like this. And it really seems like it. If the Royal Cactus Deo has gone insane, Ariant is done for. You, can you do something to defeat Deo? We really need your help now."); + qm.gainExp(20000 * qm.getPlayer().getExpRate()); + + qm.forceCompleteQuest(); + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/reactor/2612004.js b/scripts/reactor/2612004.js index 11f4d68e79..db654a652c 100644 --- a/scripts/reactor/2612004.js +++ b/scripts/reactor/2612004.js @@ -19,10 +19,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -/*2612004.js - MagatiaPQ Box +/*2612004.js - Zenumist crystal *@author Ronan */ -function act() { +function hit() { rm.sprayItems(); } \ No newline at end of file diff --git a/scripts/reactor/2612005.js b/scripts/reactor/2612005.js new file mode 100644 index 0000000000..d66dde4c6c --- /dev/null +++ b/scripts/reactor/2612005.js @@ -0,0 +1,9 @@ +/* +Yulete's Lab: Making the Reagent +*/ + +function hit(){ + if(rm.getReactor().getState() == 4) { + rm.dropItems(); + } +} \ No newline at end of file diff --git a/scripts/reactor/2619000.js b/scripts/reactor/2619000.js new file mode 100644 index 0000000000..80dbc62e55 --- /dev/null +++ b/scripts/reactor/2619000.js @@ -0,0 +1,28 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/*2619000.js - Zenumist crystal + *@author Ronan + */ + +function hit() { + rm.dropItems(); +} \ No newline at end of file diff --git a/sql/db_database.sql b/sql/db_database.sql index 5a9bb4984f..205f602b55 100644 --- a/sql/db_database.sql +++ b/sql/db_database.sql @@ -30,7 +30,7 @@ CREATE TABLE IF NOT EXISTS `accounts` ( `nxCredit` int(11) DEFAULT NULL, `maplePoint` int(11) DEFAULT NULL, `nxPrepaid` int(11) DEFAULT NULL, - `characterslots` tinyint(2) NOT NULL DEFAULT '5', + `characterslots` tinyint(2) NOT NULL DEFAULT '3', `gender` tinyint(2) NOT NULL DEFAULT '10', `tempban` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `greason` tinyint(4) NOT NULL DEFAULT '0', @@ -16645,7 +16645,7 @@ INSERT INTO `reactordrops` (`reactordropid`, `reactorid`, `itemid`, `chance`, `q (110, 9202012, 2290060, 60, -1), (111, 9202012, 2290073, 60, -1), (112, 9202012, 2100000, 250, -1), -(113, 2612004, 4031703, 1, -1), +(113, 2612004, 4031703, 1, 3302), (114, 1302000, 2010000, 30, -1), (115, 1302000, 2010009, 30, -1), (116, 1302000, 4032268, 1, 20013), diff --git a/sql/db_drops.sql b/sql/db_drops.sql index 7cf28764c5..42d4ed28d6 100644 --- a/sql/db_drops.sql +++ b/sql/db_drops.sql @@ -12883,7 +12883,7 @@ USE `heavenms`; (9400585, 4020000, 1, 1, 0, 7000), (9400586, 4020000, 1, 1, 0, 7000), (7110300, 4000362, 1, 1, 0, 200000), -(7110300, 4031741, 1, 1, 0, 7000), +(7110300, 4031741, 1, 1, 0, 40000), (7110300, 2000006, 1, 1, 0, 40000), (7110300, 4006000, 1, 1, 0, 7000), (7110300, 2040320, 1, 1, 0, 750), @@ -13883,7 +13883,7 @@ USE `heavenms`; (9400581, 1402012, 1, 1, 0, 700), (9400581, 1442008, 1, 1, 0, 700), (9400581, 1002252, 1, 1, 0, 700), -(8110300, 4031740, 1, 1, 0, 7000), +(8110300, 4031740, 1, 1, 0, 40000), (8110300, 2000005, 1, 1, 0, 40000), (8110300, 2000002, 1, 1, 0, 40000), (8110300, 2000006, 1, 1, 0, 40000), @@ -19943,7 +19943,22 @@ USE `heavenms`; (8220015, 1372016, 1, 1, 0, 22000), (8220015, 1452015, 1, 1, 0, 22000), (8220015, 1472031, 1, 1, 0, 22000), -(8220015, 1482010, 1, 1, 0, 22000); +(8220015, 1482010, 1, 1, 0, 22000), +(2110301, 4031568, 1, 1, 3911, 80000), +(9300141, 4031698, 1, 1, 0, 100000), +(9300150, 4031774, 1, 1, 3361, 100000), +(9300150, 4031796, 1, 1, 3362, 100000), +(9300105, 4001118, 1, 1, 3814, 200000), +(9300106, 4001118, 1, 1, 3814, 200000), +(9300107, 4001118, 1, 1, 3814, 200000), +(9300119, 4001118, 1, 1, 3814, 200000), +(6110301, 4031745, 1, 1, 3358, 80000), +(8110300, 4031737, 1, 1, 3343, 400000), +(9300154, 4031780, 1, 1, 0, 400000), +(9300154, 4031781, 1, 1, 0, 400000), +(9300154, 4031782, 1, 1, 0, 400000), +(9300154, 4031783, 1, 1, 0, 400000), +(9300154, 4031784, 1, 1, 0, 400000); # (dropperid, itemid, minqty, maxqty, questid, chance) @@ -19960,6 +19975,11 @@ USE `heavenms`; FROM temp_data WHERE temp_data.dropperid = 8820001; + INSERT INTO temp_data (`dropperid`, `itemid`, `minimum_quantity`, `maximum_quantity`, `questid`, `chance`) + SELECT 9300153, temp_data.itemid, temp_data.minimum_quantity, temp_data.maximum_quantity, temp_data.questid, temp_data.chance + FROM temp_data + WHERE temp_data.dropperid = 5110300; + # reinsert other Freezer's data INSERT IGNORE INTO temp_data (`dropperid`, `itemid`, `minimum_quantity`, `maximum_quantity`, `questid`, `chance`) VALUES (9420501, 0, 92, 138, 0, 400000), @@ -21273,17 +21293,6 @@ USE `heavenms`; (6102003, 2022277, 5, -1), (6102004, 2022277, 5, -1), (6102005, 2022277, 5, -1), - (2612000, 2020000, 2, -1), - (2612000, 2020001, 2, -1), - (2612000, 2020002, 2, -1), - (2612000, 2020003, 2, -1), - (2612000, 2020004, 2, -1), - (2612000, 2020005, 2, -1), - (2612000, 2020006, 2, -1), - (2612000, 2020007, 3, -1), - (2612000, 2020008, 3, -1), - (2612000, 2020009, 3, -1), - (2612000, 2020010, 3, -1), (2612001, 2020000, 2, -1), (2612001, 2020001, 2, -1), (2612001, 2020002, 2, -1), @@ -21347,7 +21356,10 @@ USE `heavenms`; (2002018, 4161014, 1, 3099), (1012000, 4032143, 6, 20717), (1202000, 4001366, 1, 28194), - (2402008, 4032512, 5, 3720); + (2402008, 4032512, 5, 3720), + (2602000, 4031574, 1, 3935), + (2619000, 4031709, 1, 3310), + (2612005, 4031798, 1, 3366); # adding wish tickets on APQ boxes INSERT INTO `reactordrops` (`reactorid`, `itemid`, `chance`, `questid`) VALUES diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java index e3cbb18ec8..286896d6df 100644 --- a/src/client/MapleCharacter.java +++ b/src/client/MapleCharacter.java @@ -3292,24 +3292,19 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject { } finally { chrLock.unlock(); } - } else if (effect.isDojoBuff() || effect.getSourceId() == 2022337) { - boolean isRecoveryBuff = false; + } else if (effect.getHpRRate() > 0 || effect.getMpRRate() > 0) { if(effect.getHpRRate() > 0) { extraHpRec = effect.getHpR(); extraRecInterval = effect.getHpRRate(); - isRecoveryBuff = true; } if(effect.getMpRRate() > 0) { extraMpRec = effect.getMpR(); extraRecInterval = effect.getMpRRate(); - isRecoveryBuff = true; } - if(isRecoveryBuff) { - stopExtraTask(); - startExtraTask(extraHpRec, extraMpRec, extraRecInterval); // HP & MP sharing the same task holder - } + stopExtraTask(); + startExtraTask(extraHpRec, extraMpRec, extraRecInterval); // HP & MP sharing the same task holder } else if (effect.isMapChair()) { startChairTask(); } diff --git a/src/client/command/Commands.java b/src/client/command/Commands.java index 244d24aa4a..5ea54bb05e 100644 --- a/src/client/command/Commands.java +++ b/src/client/command/Commands.java @@ -281,6 +281,7 @@ public class Commands { gotomaps.put("lith", 104000000); gotomaps.put("sleepywood", 105040300); gotomaps.put("florina", 110000000); + gotomaps.put("nautilus", 120000000); gotomaps.put("ereve", 130000000); gotomaps.put("rien", 140000000); gotomaps.put("orbis", 200000000); @@ -314,6 +315,7 @@ public class Commands { gotomaps.put("magatia", 261000000); gotomaps.put("singapore", 540000000); gotomaps.put("keep", 610020006); + gotomaps.put("amoria", 680000000); gotomaps.put("temple", 270000100); gotomaps.put("neo", 240070000); gotomaps.put("fm", 910000000); diff --git a/src/constants/ServerConstants.java b/src/constants/ServerConstants.java index f81d9ae773..941174d2bb 100644 --- a/src/constants/ServerConstants.java +++ b/src/constants/ServerConstants.java @@ -30,7 +30,7 @@ public class ServerConstants { public static final boolean ENABLE_PIN = false; //Pick true/false to enable or disable Pin. public static final boolean AUTOMATIC_REGISTER = true; //Automatically register players when they login with a nonexistent username. - public static final boolean BCRYPT_MIGRATION = true; //Performs a migration from old SHA-1 and SHA-512 password to bcrypt + public static final boolean BCRYPT_MIGRATION = true; //Performs a migration from old SHA-1 and SHA-512 password to bcrypt. //Ip Configuration public static String HOST; @@ -40,7 +40,7 @@ public class ServerConstants { public static boolean SHUTDOWNHOOK; //Server Flags - public static final boolean USE_CUSTOM_KEYSET = false; //Enables auto-setup of the MapleSolaxiaV2's custom keybindings when creating characters. + public static final boolean USE_CUSTOM_KEYSET = true; //Enables auto-setup of the HeavenMS's custom keybindings when creating characters. public static final boolean USE_MAXRANGE_ECHO_OF_HERO = true; public static final boolean USE_MAXRANGE = true; //Will send and receive packets from all events on a map, rather than those of only view range. public static final boolean USE_DEBUG = false; //Will enable some text prints on the client, oriented for debugging purposes. @@ -71,11 +71,11 @@ public class ServerConstants { public static final boolean USE_MAKER_FEE_HEURISTICS = true; //Apply compiled values for stimulants and reagents into the Maker fee calculations (max error revolves around 50k mesos). Set false to use basic constant values instead (results are never higher than requested by the client-side). //Server Rates And Experience - public static final int EXP_RATE = 1; - public static final int MESO_RATE = 1; - public static final int DROP_RATE = 1; - public static final int BOSS_DROP_RATE = 1; - public static final double EQUIP_EXP_RATE = 1.0; //Rate for equipment exp gain, grows linearly. Set 1.0 for default (about 100~200 same-level range mobs killed to pass equip from level 1 to 2). + public static final int EXP_RATE = 10; + public static final int MESO_RATE = 10; + public static final int DROP_RATE = 10; + public static final int BOSS_DROP_RATE = 20; + public static final double EQUIP_EXP_RATE = 10.0; //Rate for equipment exp gain, grows linearly. Set 1.0 for default (about 100~200 same-level range mobs killed to pass equip from level 1 to 2). public static final double PARTY_BONUS_EXP_RATE = 1.0; //Rate for the party exp reward. public static final double PQ_BONUS_EXP_RATE = 0.5; //Rate for the PQ exp reward. @@ -99,32 +99,32 @@ public class ServerConstants { //Some Gameplay Enhancing Configurations //Scroll Configuration - public static final boolean USE_PERFECT_GM_SCROLL = false; //Scrolls from GMs never uses up slots nor fails. - public static final boolean USE_PERFECT_SCROLLING = false; //Scrolls doesn't use slots upon failure. - public static final boolean USE_ENHANCED_CHSCROLL = false; //Equips even more powerful with chaos upgrade. - public static final boolean USE_ENHANCED_CRAFTING = false; //Apply chaos scroll on every equip crafted. + public static final boolean USE_PERFECT_GM_SCROLL = true; //Scrolls from GMs never uses up slots nor fails. + public static final boolean USE_PERFECT_SCROLLING = true; //Scrolls doesn't use slots upon failure. + public static final boolean USE_ENHANCED_CHSCROLL = true; //Equips even more powerful with chaos upgrade. + public static final boolean USE_ENHANCED_CRAFTING = true; //Apply chaos scroll on every equip crafted. public static final int SCROLL_CHANCE_RATE = 0; //Number of rolls for success on a scroll, set 0 for default. public static final int CHSCROLL_STAT_RANGE = 6; //Stat upgrade range (-N, N) on chaos scrolls. //Beginner Skills Configuration - public static final boolean USE_ULTRA_NIMBLE_FEET = false; //Haste-like speed & jump upgrade. - public static final boolean USE_ULTRA_RECOVERY = false; //Massive recovery amounts overtime. - public static final boolean USE_ULTRA_THREE_SNAILS = false; //Massive damage on shell toss. + public static final boolean USE_ULTRA_NIMBLE_FEET = true; //Haste-like speed & jump upgrade. + public static final boolean USE_ULTRA_RECOVERY = true; //Massive recovery amounts overtime. + public static final boolean USE_ULTRA_THREE_SNAILS = true; //Massive damage on shell toss. //Character Configuration - public static final boolean USE_ADD_SLOTS_BY_LEVEL = false; //Slots are added each 20 levels. - public static final boolean USE_ADD_RATES_BY_LEVEL = false; //Rates are added each 20 levels. - public static final boolean USE_STACK_COUPON_RATES = false; //Multiple coupons effects builds up together. - public static final boolean USE_PERFECT_PITCH = false; //For lvl 30 or above, each lvlup grants player 1 perfect pitch. - public static final int FAME_GAIN_BY_QUEST = 0; //Fame gain each N quest completes, set 0 to disable. + public static final boolean USE_ADD_SLOTS_BY_LEVEL = true; //Slots are added each 20 levels. + public static final boolean USE_ADD_RATES_BY_LEVEL = true; //Rates are added each 20 levels. + public static final boolean USE_STACK_COUPON_RATES = true; //Multiple coupons effects builds up together. + public static final boolean USE_PERFECT_PITCH = true; //For lvl 30 or above, each lvlup grants player 1 perfect pitch. + public static final int FAME_GAIN_BY_QUEST = 4; //Fame gain each N quest completes, set 0 to disable. //Equipment Configuration public static final boolean USE_EQUIPMNT_LVLUP_SLOTS = true;//Equips can upgrade slots at level up. - public static final boolean USE_EQUIPMNT_LVLUP_POWER = false;//Enable more powerful stat upgrades at equip level up. + public static final boolean USE_EQUIPMNT_LVLUP_POWER = true;//Enable more powerful stat upgrades at equip level up. public static final boolean USE_SPIKES_AVOID_BANISH = true; //Shoes equipped with spikes prevents mobs from banishing wearer. public static final int MAX_EQUIPMNT_LVLUP_STAT_UP = 10000; //Max stat upgrade an equipment can have on a levelup. public static final int MAX_EQUIPMNT_STAT = 32767; //Max stat on an equipment by leveling up. - public static final int USE_EQUIPMNT_LVLUP = 1; //All equips lvlup at max level of N, set 1 to disable. + public static final int USE_EQUIPMNT_LVLUP = 7; //All equips lvlup at max level of N, set 1 to disable. //Map-Chair Configuration public static final boolean USE_CHAIR_EXTRAHEAL = true; //Enable map chairs to further recover player's HP and MP (player must have the Chair Mastery skill). @@ -179,4 +179,4 @@ public class ServerConstants { System.exit(0); } } -} \ No newline at end of file +} diff --git a/src/net/server/channel/handlers/CashOperationHandler.java b/src/net/server/channel/handlers/CashOperationHandler.java index 0015aff6b9..bfb69e8818 100644 --- a/src/net/server/channel/handlers/CashOperationHandler.java +++ b/src/net/server/channel/handlers/CashOperationHandler.java @@ -62,6 +62,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { CashItem cItem = CashItemFactory.getItem(snCS); if (cItem == null || !cItem.isOnSale() || cs.getCash(useNX) < cItem.getPrice()) { FilePrinter.printError(FilePrinter.ITEM, "Denied to sell cash item with SN " + cItem.getSN()); + c.announce(MaplePacketCreator.enableActions()); return; } if (action == 0x03) { // Item @@ -83,16 +84,20 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { Map recipient = MapleCharacter.getCharacterFromDatabase(slea.readMapleAsciiString()); String message = slea.readMapleAsciiString(); if (!canBuy(cItem, cs.getCash(4)) || message.length() < 1 || message.length() > 73) { + c.announce(MaplePacketCreator.enableActions()); return; } if (!checkBirthday(c, birthday)) { c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xC4)); + c.announce(MaplePacketCreator.enableActions()); return; } else if (recipient == null) { c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xA9)); + c.announce(MaplePacketCreator.enableActions()); return; } else if (recipient.get("accountid").equals(String.valueOf(c.getAccID()))) { c.announce(MaplePacketCreator.showCashShopMessage((byte) 0xA8)); + c.announce(MaplePacketCreator.enableActions()); return; } cs.gift(Integer.parseInt(recipient.get("id")), chr.getName(), message, cItem.getSN()); @@ -123,6 +128,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { if (mode == 0) { byte type = slea.readByte(); if (cs.getCash(cash) < 4000) { + c.announce(MaplePacketCreator.enableActions()); return; } if (chr.gainSlots(type, 4, false)) { @@ -134,6 +140,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { CashItem cItem = CashItemFactory.getItem(slea.readInt()); int type = (cItem.getItemId() - 9110000) / 1000; if (!canBuy(cItem, cs.getCash(cash))) { + c.announce(MaplePacketCreator.enableActions()); return; } if (chr.gainSlots(type, 8, false)) { @@ -148,6 +155,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { byte mode = slea.readByte(); if (mode == 0) { if (cs.getCash(cash) < 4000) { + c.announce(MaplePacketCreator.enableActions()); return; } if (chr.getStorage().gainSlots(4)) { @@ -159,6 +167,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { CashItem cItem = CashItemFactory.getItem(slea.readInt()); if (!canBuy(cItem, cs.getCash(cash))) { + c.announce(MaplePacketCreator.enableActions()); return; } if (chr.getStorage().gainSlots(8)) { @@ -172,8 +181,10 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { int cash = slea.readInt(); CashItem cItem = CashItemFactory.getItem(slea.readInt()); - if (!canBuy(cItem, cs.getCash(cash))) + if (!canBuy(cItem, cs.getCash(cash))) { + c.announce(MaplePacketCreator.enableActions()); return; + } if (c.gainCharacterSlot()) { c.announce(MaplePacketCreator.showBoughtCharacterSlot(c.getCharacterSlots())); @@ -183,6 +194,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { } else if (action == 0x0D) { // Take from Cash Inventory Item item = cs.findByCashId(slea.readInt()); if (item == null) { + c.announce(MaplePacketCreator.enableActions()); return; } if (chr.getInventory(MapleItemInformationProvider.getInstance().getInventoryType(item.getItemId())).addItem(item) != -1) { @@ -207,9 +219,11 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { MapleInventory mi = chr.getInventory(MapleInventoryType.getByType(slea.readByte())); Item item = mi.findByCashId(cashId); if (item == null) { + c.announce(MaplePacketCreator.enableActions()); return; } else if(c.getPlayer().getPetIndex(item.getPetId()) > -1) { chr.getClient().announce(MaplePacketCreator.serverNotice(1, "You cannot put the pet you currently equip into the Cash Shop inventory.")); + c.announce(MaplePacketCreator.enableActions()); return; } cs.addToInventory(item); @@ -230,6 +244,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler { /* if (partner.getGender() == chr.getGender()) { chr.dropMessage("You and your partner are the same gender, please buy a friendship ring."); + c.announce(MaplePacketCreator.enableActions()); return; }*/ //Gotta let them faggots marry too, hence why this is commented out <3 diff --git a/src/net/server/channel/handlers/InventoryMergeHandler.java b/src/net/server/channel/handlers/InventoryMergeHandler.java index 92ffad463b..710feba27c 100644 --- a/src/net/server/channel/handlers/InventoryMergeHandler.java +++ b/src/net/server/channel/handlers/InventoryMergeHandler.java @@ -85,7 +85,7 @@ public final class InventoryMergeHandler extends AbstractMaplePacketHandler { } } if (itemSlot > 0) { - MapleInventoryManipulator.move(c, inventoryType, itemSlot, freeSlot); + MapleInventoryManipulator.move(c, inventoryType, itemSlot, freeSlot); } else { sorted = true; } diff --git a/src/scripting/AbstractPlayerInteraction.java b/src/scripting/AbstractPlayerInteraction.java index d06320ac15..6632c15da4 100644 --- a/src/scripting/AbstractPlayerInteraction.java +++ b/src/scripting/AbstractPlayerInteraction.java @@ -318,6 +318,11 @@ public class AbstractPlayerInteraction { status.setProgress(pid, String.valueOf(progress)); } + public void setStringQuestProgress(int qid, int pid, String progress) { + MapleQuestStatus status = c.getPlayer().getQuest(MapleQuest.getInstance(qid)); + status.setProgress(pid, progress); + } + public int getQuestProgress(int qid) { MapleQuestStatus status = c.getPlayer().getQuest(MapleQuest.getInstance(qid)); String progress = status.getProgress(status.getAnyProgressKey()); @@ -331,6 +336,11 @@ public class AbstractPlayerInteraction { return Integer.parseInt(getPlayer().getQuest(MapleQuest.getInstance(qid)).getProgress(pid)); } + public String getStringQuestProgress(int qid, int pid) { + if(getPlayer().getQuest(MapleQuest.getInstance(qid)).getProgress(pid).isEmpty()) return ""; + return getPlayer().getQuest(MapleQuest.getInstance(qid)).getProgress(pid); + } + public void resetAllQuestProgress(int qid) { getPlayer().getQuest(MapleQuest.getInstance(qid)).resetAllProgress(); getClient().announce(MaplePacketCreator.updateQuest(getPlayer().getQuest(MapleQuest.getInstance(qid)), false)); diff --git a/src/server/MapleStatEffect.java b/src/server/MapleStatEffect.java index af77171840..e662b74e0b 100644 --- a/src/server/MapleStatEffect.java +++ b/src/server/MapleStatEffect.java @@ -215,7 +215,7 @@ public class MapleStatEffect { addBuffStatPairToListIfNotZero(statups, MapleBuffStat.BERSERK, Integer.valueOf(ret.berserk)); addBuffStatPairToListIfNotZero(statups, MapleBuffStat.BOOSTER, Integer.valueOf(ret.booster)); - } else if(isDojoBuff(sourceid) || sourceid == 2022337) { + } else if(isDojoBuff(sourceid) || isHpMpRecovery(sourceid)) { ret.mhpR = (byte) MapleDataTool.getInt("mhpR", source, 0); ret.mhpRRate = (short) (MapleDataTool.getInt("mhpRRate", source, 0) * 100); ret.mmpR = (byte) MapleDataTool.getInt("mmpR", source, 0); @@ -1347,6 +1347,10 @@ public class MapleStatEffect { return sourceid >= 2022359 && sourceid <= 2022421; } + public static boolean isHpMpRecovery(int sourceid) { + return sourceid == 2022198 || sourceid == 2022337; + } + public static boolean isPyramidBuff(int sourceid) { return sourceid >= 2022585 && sourceid <= 2022617; } diff --git a/src/server/maps/MapleMap.java b/src/server/maps/MapleMap.java index 5b2e4d8487..43e36a1bfb 100644 --- a/src/server/maps/MapleMap.java +++ b/src/server/maps/MapleMap.java @@ -1214,6 +1214,10 @@ public class MapleMap { objectRLock.unlock(); } + resetReactors(list); + } + + public final void resetReactors(List list) { for (MapleReactor r : list) { r.lockReactor(); try { @@ -1524,7 +1528,7 @@ public class MapleMap { } public Point getGroundBelow(Point pos) { - Point spos = new Point(pos.x, pos.y - 3); // Using -3 fixes issues with spawning pets causing a lot of issues. + Point spos = new Point(pos.x, pos.y - 7); // Using -7 fixes spawning pets causing a lot of issues. spos = calcPointBelow(spos); spos.y--;//shouldn't be null! return spos; diff --git a/src/server/maps/MapleMiniDungeonInfo.java b/src/server/maps/MapleMiniDungeonInfo.java index 7e59af9b2d..23caff266a 100644 --- a/src/server/maps/MapleMiniDungeonInfo.java +++ b/src/server/maps/MapleMiniDungeonInfo.java @@ -42,6 +42,7 @@ public enum MapleMiniDungeonInfo { THE_RESTORING_MEMORY(240040511, 240040800, 19), NEWT_SECURED_ZONE(240040520, 240040900, 19), PILLAGE_OF_TREASURE_ISLAND(251010402, 251010410, 30), + CRITICAL_ERROR(261020300, 261020301, 30), LONGEST_RIDE_ON_BYEBYE_STATION(551030000, 551030001, 19); private int baseId; diff --git a/src/server/maps/MapleReactor.java b/src/server/maps/MapleReactor.java index 4fbd666b32..183089a5a7 100644 --- a/src/server/maps/MapleReactor.java +++ b/src/server/maps/MapleReactor.java @@ -270,6 +270,9 @@ public class MapleReactor extends AbstractMapleMapObject { setShouldCollect(true); // refresh collectability on item drop-based reactors refreshReactorTimeout(); + if(stats.getType(state) == 100) { + map.searchItemReactors(this); + } } break; } @@ -281,6 +284,9 @@ public class MapleReactor extends AbstractMapleMapObject { setShouldCollect(true); refreshReactorTimeout(); + if(stats.getType(state) == 100) { + map.searchItemReactors(this); + } } } finally { this.unlockReactor(); diff --git a/src/tools/DatabaseConnection.java b/src/tools/DatabaseConnection.java index d2f120d871..c5d409951a 100644 --- a/src/tools/DatabaseConnection.java +++ b/src/tools/DatabaseConnection.java @@ -77,8 +77,8 @@ public class DatabaseConnection { config.setPassword(ServerConstants.DB_PASS); // Make sure pool size is comfortable for the worst case scenario. - // Under 100 accounts? Make it 10. Over 10000 accounts? Make it 30. - int poolSize = (int) Math.ceil(9.889642518 * Math.exp(0.0001109709382 * getNumberOfAccounts())); + // Under 100 accounts? Make it 10. Over 10000 accounts? Make it 30. + int poolSize = (int)Math.ceil(0.00202020202 * getNumberOfAccounts() + 9.797979798); if(poolSize < 10) poolSize = 10; else if(poolSize > 30) poolSize = 30; diff --git a/tools/MapleQuestMesoFetcher/build.xml b/tools/MapleQuestMesoFetcher/build.xml new file mode 100644 index 0000000000..5bb518b469 --- /dev/null +++ b/tools/MapleQuestMesoFetcher/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project MapleQuestMesoFetcher. + + + diff --git a/tools/MapleQuestMesoFetcher/lib/QuestReport.txt b/tools/MapleQuestMesoFetcher/lib/QuestReport.txt new file mode 100644 index 0000000000..a72a1d58cd --- /dev/null +++ b/tools/MapleQuestMesoFetcher/lib/QuestReport.txt @@ -0,0 +1,42 @@ + # Report File autogenerated from the MapleQuestMesoFetcher feature by Ronan Lana. + # Generated data takes into account several data info from the server-side WZ.xmls. + +MISMATCH INFORMATION ON 'check': +# MISSING +2215 2000 +3046 10000 +3048 20000 +3069 10000 +3079 300000 +3095 10000 +3305 10000 +3306 10000 +3377 20000 +3612 1000 +3613 1000 +3614 1000 +3623 5000 +5009 50 +5010 50 +5011 50 +5012 50 +6000 1000000 +8078 1000000 +8079 5000000 +8207 2500 +9310 1000 +9311 2500 +9340 1000 +9341 2500 +20504 10000000 +20511 25000000 +20512 15000000 +20532 50000000 +20534 100000000 +21605 20000000 +21606 10000000 +21611 80000000 +21617 100000000 + + + diff --git a/tools/MapleQuestMesoFetcher/manifest.mf b/tools/MapleQuestMesoFetcher/manifest.mf new file mode 100644 index 0000000000..328e8e5bc3 --- /dev/null +++ b/tools/MapleQuestMesoFetcher/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/tools/MapleQuestMesoFetcher/nbproject/build-impl.xml b/tools/MapleQuestMesoFetcher/nbproject/build-impl.xml new file mode 100644 index 0000000000..f98462807d --- /dev/null +++ b/tools/MapleQuestMesoFetcher/nbproject/build-impl.xml @@ -0,0 +1,1448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set platform.home + Must set platform.bootcp + Must set platform.java + Must set platform.javac + + The J2SE Platform is not correctly set up. + Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files. + Either open the project in the IDE and setup the Platform with the same name or add it manually. + For example like this: + ant -Duser.properties.file=<path_to_property_file> jar (where you put the property "platforms.${platform.active}.home" in a .properties file) + or ant -Dplatforms.${platform.active}.home=<path_to_JDK_home> jar (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + ${platform.java} -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/MapleQuestMesoFetcher/nbproject/genfiles.properties b/tools/MapleQuestMesoFetcher/nbproject/genfiles.properties new file mode 100644 index 0000000000..14a8812927 --- /dev/null +++ b/tools/MapleQuestMesoFetcher/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=dc97306c +build.xml.script.CRC32=f11c2728 +build.xml.stylesheet.CRC32=8064a381@1.75.2.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=dc97306c +nbproject/build-impl.xml.script.CRC32=b6cafd59 +nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.75.2.48 diff --git a/tools/MapleQuestMesoFetcher/nbproject/project.properties b/tools/MapleQuestMesoFetcher/nbproject/project.properties new file mode 100644 index 0000000000..72feabc57a --- /dev/null +++ b/tools/MapleQuestMesoFetcher/nbproject/project.properties @@ -0,0 +1,79 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=MapleQuestMesoFetcher +application.vendor=USER +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# Os arquivos em build.classes.dir que devem ser exclu\u00eddos do jar de distribui\u00e7\u00e3o +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/MapleQuestMesoFetcher.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +file.reference.commons-io-2.6.jar=lib/commons-io-2.6.jar +file.reference.mysql-connector-java-bin.jar=../../cores/mysql-connector-java-bin.jar +includes=** +jar.compress=false +javac.classpath=\ + ${file.reference.mysql-connector-java-bin.jar}:\ + ${file.reference.commons-io-2.6.jar} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.7 +javac.target=1.7 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=maplequestmesofetcher.MapleQuestMesoFetcher +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=JDK_1.7 +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/tools/MapleQuestMesoFetcher/nbproject/project.xml b/tools/MapleQuestMesoFetcher/nbproject/project.xml new file mode 100644 index 0000000000..b2fc62774e --- /dev/null +++ b/tools/MapleQuestMesoFetcher/nbproject/project.xml @@ -0,0 +1,16 @@ + + + org.netbeans.modules.java.j2seproject + + + MapleQuestMesoFetcher + + + + + + + + + + diff --git a/tools/MapleQuestMesoFetcher/src/maplequestmesofetcher/MapleQuestMesoFetcher.java b/tools/MapleQuestMesoFetcher/src/maplequestmesofetcher/MapleQuestMesoFetcher.java new file mode 100644 index 0000000000..395a1a1479 --- /dev/null +++ b/tools/MapleQuestMesoFetcher/src/maplequestmesofetcher/MapleQuestMesoFetcher.java @@ -0,0 +1,330 @@ +/* + 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 . +*/ +package maplequestmesofetcher; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.sql.Connection; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.HashSet; +import java.util.Set; + +/** + * + * @author RonanLana + + This application parses the Quest.wz file inputted and generates a report showing + all cases where a quest takes a meso fee to complete a quest, but it doesn't + properly checks the player for the needed amount before completing it. + + Running it should generate a report file under "lib" folder with the search results. + + */ +public class MapleQuestMesoFetcher { + static boolean printFees = true; // print missing values as additional info report + + static String actName = "../../wz/Quest.wz/Act.img.xml"; + static String checkName = "../../wz/Quest.wz/Check.img.xml"; + static String directoryName = "../.."; + static String newFile = "lib/QuestReport.txt"; + + static Connection con = null; + static PrintWriter printWriter = null; + static InputStreamReader fileReader = null; + static BufferedReader bufferedReader = null; + + static int initialLength = 200; + static int initialStringLength = 50; + + static byte status = 0; + static int questId = -1; + static int isCompleteState = 0; + + static int currentMeso = 0; + + static Map checkedMesoQuests = new HashMap<>(); + static Map appliedMesoQuests = new HashMap<>(); + static Set checkedEndscriptQuests = new HashSet<>(); + + private static String getName(String token) { + int i, j; + char[] dest; + String d; + + i = token.lastIndexOf("name"); + i = token.indexOf("\"", i) + 1; //lower bound of the string + j = token.indexOf("\"", i); //upper bound + + dest = new char[initialStringLength]; + token.getChars(i, j, dest, 0); + + d = new String(dest); + return(d.trim()); + } + + private static String getValue(String token) { + int i, j; + char[] dest; + String d; + + i = token.lastIndexOf("value"); + i = token.indexOf("\"", i) + 1; //lower bound of the string + j = token.indexOf("\"", i); //upper bound + + dest = new char[initialStringLength]; + token.getChars(i, j, dest, 0); + + d = new String(dest); + return(d.trim()); + } + + private static void forwardCursor(int st) { + String line = null; + + try { + while(status >= st && (line = bufferedReader.readLine()) != null) { + simpleToken(line); + } + } + catch(Exception e) { + e.printStackTrace(); + } + } + + private static void simpleToken(String token) { + if(token.contains("/imgdir")) { + status -= 1; + } + else if(token.contains("imgdir")) { + status += 1; + } + } + + private static void translateTokenAct(String token) { + String d; + + if(token.contains("/imgdir")) { + status -= 1; + } + else if(token.contains("imgdir")) { + if(status == 1) { //getting QuestId + d = getName(token); + questId = Integer.parseInt(d); + } + else if(status == 2) { //start/complete + d = getName(token); + isCompleteState = Integer.parseInt(d); + } + else if(status == 3) { + forwardCursor(status); + } + + status += 1; + } + else { + if(token.contains("money")) { + if(isCompleteState != 0) { + d = getValue(token); + + currentMeso = -1 * Integer.valueOf(d); + + if(currentMeso > 0) { + appliedMesoQuests.put(questId, currentMeso); + } + } + } + } + } + + private static void translateTokenCheck(String token) { + String d; + + if(token.contains("/imgdir")) { + status -= 1; + } + else if(token.contains("imgdir")) { + if(status == 1) { //getting QuestId + d = getName(token); + questId = Integer.parseInt(d); + } + else if(status == 2) { //start/complete + d = getName(token); + isCompleteState = Integer.parseInt(d); + } + else if(status == 3) { + forwardCursor(status); + } + + status += 1; + } + else { + if(token.contains("endmeso")) { + d = getValue(token); + currentMeso = Integer.valueOf(d); + + checkedMesoQuests.put(questId, currentMeso); + } else if(token.contains("endscript")) { + checkedEndscriptQuests.add(questId); + } + } + } + + private static void readQuestMesoData() throws IOException { + String line; + + fileReader = new InputStreamReader(new FileInputStream(actName), "UTF-8"); + bufferedReader = new BufferedReader(fileReader); + + while((line = bufferedReader.readLine()) != null) { + translateTokenAct(line); + } + + bufferedReader.close(); + fileReader.close(); + + fileReader = new InputStreamReader(new FileInputStream(checkName), "UTF-8"); + bufferedReader = new BufferedReader(fileReader); + + while((line = bufferedReader.readLine()) != null) { + translateTokenCheck(line); + } + + bufferedReader.close(); + fileReader.close(); + } + + private static void printReportFileHeader() { + printWriter.println(" # Report File autogenerated from the MapleQuestMesoFetcher feature by Ronan Lana."); + printWriter.println(" # Generated data takes into account several data info from the server-side WZ.xmls."); + printWriter.println(); + } + + private static void printReportFileResults(Map target, Map base, boolean testingCheck) { + List result = new ArrayList<>(); + List error = new ArrayList<>(); + + Map questFee = new HashMap<>(); + + for(Entry e : base.entrySet()) { + Integer v = target.get(e.getKey()); + + if(v == null) { + if(testingCheck || !checkedEndscriptQuests.contains(e.getKey())) { + result.add(e.getKey()); + questFee.put(e.getKey(), e.getValue()); + } + } else if(v.intValue() != e.getValue().intValue()) { + error.add(e.getKey()); + } + } + + if(!result.isEmpty() || !error.isEmpty()) { + printWriter.println("MISMATCH INFORMATION ON '" + (testingCheck ? "check" : "act") + "':"); + if(!result.isEmpty()) { + Collections.sort(result, new Comparator() { + @Override + public int compare(Integer o1, Integer o2) { + return o1 - o2; + } + }); + + printWriter.println("# MISSING"); + + if(!printFees) { + for(Integer i : result) { + printWriter.println(i); + } + } else { + for(Integer i : result) { + printWriter.println(i + " " + questFee.get(i)); + } + } + + printWriter.println(); + } + + if(!error.isEmpty() && testingCheck) { + Collections.sort(error, new Comparator() { + @Override + public int compare(Integer o1, Integer o2) { + return o1 - o2; + } + }); + + printWriter.println("# WRONG VALUE"); + + for(Integer i : error) { + printWriter.println(i); + } + + printWriter.println(); + } + + printWriter.println("\r\n"); + } + } + + private static void ReportQuestMesoData() { + // This will reference one line at a time + + try { + System.out.println("Reading WZs..."); + readQuestMesoData(); + + System.out.println("Reporting results..."); + // report missing meso checks on quest completes + printWriter = new PrintWriter(newFile, "UTF-8"); + + printReportFileHeader(); + + printReportFileResults(checkedMesoQuests, appliedMesoQuests, true); + printReportFileResults(appliedMesoQuests, checkedMesoQuests, false); + + printWriter.close(); + System.out.println("Done!"); + } + + catch(FileNotFoundException ex) { + System.out.println("Unable to open quest file."); + } + catch(IOException ex) { + System.out.println("Error reading quest file."); + } + + catch(Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + ReportQuestMesoData(); + } + +} diff --git a/wz/Item.wz/Consume/0202.img.xml b/wz/Item.wz/Consume/0202.img.xml index 7442d425d1..98b1371c58 100644 --- a/wz/Item.wz/Consume/0202.img.xml +++ b/wz/Item.wz/Consume/0202.img.xml @@ -3103,14 +3103,11 @@ - - - - - - - - + + + + + diff --git a/wz/Map.wz/Map/Map2/261020600.img.xml b/wz/Map.wz/Map/Map2/261020600.img.xml index 656dd0ab68..af412de616 100644 --- a/wz/Map.wz/Map/Map2/261020600.img.xml +++ b/wz/Map.wz/Map/Map2/261020600.img.xml @@ -1544,9 +1544,9 @@ - - - + + + diff --git a/wz/Map.wz/Map/Map9/926120200.img.xml b/wz/Map.wz/Map/Map9/926120200.img.xml index be522ceb5e..55380faf15 100644 --- a/wz/Map.wz/Map/Map9/926120200.img.xml +++ b/wz/Map.wz/Map/Map9/926120200.img.xml @@ -1,944 +1,21 @@ - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -949,14 +26,944 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wz/Quest.wz/Act.img.xml b/wz/Quest.wz/Act.img.xml index 95f52423ba..4fa8dd54c8 100644 --- a/wz/Quest.wz/Act.img.xml +++ b/wz/Quest.wz/Act.img.xml @@ -10967,6 +10967,7 @@ + @@ -11008,6 +11009,7 @@ + diff --git a/wz/Quest.wz/Check.img.xml b/wz/Quest.wz/Check.img.xml index 3c5fa81f82..5e1bec506f 100644 --- a/wz/Quest.wz/Check.img.xml +++ b/wz/Quest.wz/Check.img.xml @@ -14690,6 +14690,7 @@ + @@ -15021,6 +15022,7 @@ + @@ -15091,6 +15093,7 @@ + @@ -15620,6 +15623,7 @@ + @@ -15686,6 +15690,7 @@ + @@ -20708,6 +20713,7 @@ + @@ -20742,6 +20748,7 @@ + @@ -20954,6 +20961,7 @@ + @@ -21146,6 +21154,7 @@ + @@ -23817,6 +23826,7 @@ + @@ -37565,6 +37575,7 @@ + @@ -37623,6 +37634,7 @@ + @@ -38112,6 +38124,7 @@ + @@ -38301,6 +38314,7 @@ + @@ -38957,6 +38971,7 @@ + @@ -40787,6 +40802,7 @@ + @@ -40828,6 +40844,7 @@ + @@ -40969,11 +40986,7 @@ - - - - - + @@ -41663,11 +41676,7 @@ - - - - - + @@ -41985,11 +41994,7 @@ - - - - - + @@ -42091,12 +42096,6 @@ - - - - - - @@ -42175,12 +42174,6 @@ - - - - - - @@ -42321,6 +42314,7 @@ + @@ -45240,6 +45234,7 @@ + @@ -45262,6 +45257,7 @@ + @@ -45284,6 +45280,7 @@ + @@ -45461,6 +45458,7 @@ + @@ -47814,6 +47812,7 @@ + @@ -48321,11 +48320,7 @@ - - - - - + @@ -48391,11 +48386,7 @@ - - - - - + @@ -48411,6 +48402,7 @@ + @@ -54431,6 +54423,7 @@ + @@ -54454,6 +54447,7 @@ + @@ -54477,6 +54471,7 @@ + @@ -54500,6 +54495,7 @@ + @@ -54552,6 +54548,7 @@ + @@ -62343,6 +62340,7 @@ + @@ -62365,8 +62363,8 @@ - + @@ -62826,6 +62824,7 @@ + @@ -67761,6 +67760,7 @@ + @@ -67800,6 +67800,7 @@ + @@ -68048,6 +68049,7 @@ + @@ -68080,6 +68082,7 @@ +