/* 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 . */ /* Vicious Victoria Road : Henesys Market (100000100) Refining NPC: * Bows - 10-40 * Crossbows - 12-50 * Archer Gloves - 10-60 + upgrades * Processed Wood/Screws * Arrows/Bronze Arrows/Steel Arrows */ var status = -1; var selectedType = -1; var selectedItem = -1; var item; var items; var mats; var matQty; var cost; var qty = 1; var equip; function start() { cm.getPlayer().setCS(true); var selStr = "Hello. I am Vicious, retired Sniper. However, I used to be the top student of Athena Pierce. Though I no longer hunt, I can make some archer items that will be useful for you...#b" var options = ["Create a bow", "Create a crossbow", "Make a glove", "Upgrade a glove", "Create materials", "Create Arrows"]; for (var i = 0; i < options.length; i++) { selStr += "\r\n#L" + i + "# " + options[i] + "#l"; } cm.sendSimple(selStr); } function action(mode, type, selection) { status++; if (mode != 1) { cm.dispose(); return; } if (status == 0) { if (selection == 0) { //bow refine var selStr = "I may have been a Sniper, but bows and crossbows aren't too much different. Anyway, which would you like to make?#b"; items = [1452002, 1452003, 1452001, 1452000, 1452005, 1452006, 1452007]; for (var i = 0; i < items.length; i++) { selStr += "\r\n#L" + i + "##t" + items[i] + "##k - Bowman Lv. " + (10 + (i * 5)) + "#l#b"; } } else if (selection == 1) { //xbow refine var selStr = "I was a Sniper. Crossbows are my specialty. Which would you like me to make for you?#b"; items = [1462001, 1462002, 1462003, 1462000, 1462004, 1462005, 1462006, 1462007]; for (var i = 0; i < items.length; i++) { selStr += "\r\n#L" + i + "##t" + items[i] + "##k - Bowman Lv. " + (10 + (i * 5)) + "#l#b"; } } else if (selection == 2) { //glove refine var selStr = "Okay, so which glove do you want me to make?#b"; items = [1082012, 1082013, 1082016, 1082048, 1082068, 1082071, 1082084, 1082089]; for (var i = 0; i < items.length; i++) { selStr += "\r\n#L" + i + "##t" + items[i] + "##k - Bowman Lv. " + (15 + (i * 5) > 40 ? ((i - 1) * 10) : 15 + (i * 5)) + "#l#b"; } } else if (selection == 3) { //glove upgrade var selStr = "Upgrade a glove? That shouldn't be too difficult. Which did you have in mind?#b"; items = [1082015, 1082014, 1082017, 1082018, 1082049, 1082050, 1082069, 1082070, 1082072, 1082073, 1082085, 1082083, 1082090, 1082091]; for (var i = 0, x = 0; i < items.length; i++, x += (i + 1) % 2 == 0 ? 1 : 0) { selStr += "\r\n#L" + i + "##t" + items[i] + "##k" + "##k - Bowman Lv. " + (20 + (x * 5) > 40 ? ((x - 1) * 10) : 20 + (x * 5)) + "#l#b"; } } else if (selection == 4) { //material refine var selStr = "Materials? I know of a few materials that I can make for you...#b"; var materials = ["Make Processed Wood with Tree Branch", "Make Processed Wood with Firewood", "Make Screws (packs of 15)"]; for (var i = 0; i < materials.length; i++) { selStr += "\r\n#L" + i + "# " + materials[i] + "#l"; } } else if (selection == 5) { //arrow refine var selStr = "Arrows? Not a problem at all.#b"; items = [2060000, 2061000, 2060001, 2061001, 2060002, 2061002]; for (var i = 0; i < items.length; i++) { selStr += "\r\n#L" + i + "##t" + items[i] + "##l"; } } selectedType = selection; cm.sendSimple(selStr); if (selection != 4) { status++; } } else if (status == 1) { selectedItem = selection; items = [4003001, 4003001, 4003000]; var matSet = [4000003, 4000018, [4011000, 4011001]]; var matQtySet = [10, 5, [1, 1]]; item = items[selection]; mats = matSet[selection]; matQty = matQtySet[selection]; cost = 0; cm.sendGetNumber("So, you want me to make some #t" + item + "#s? In that case, how many do you want me to make?", 1, 1, 100) } else if (status == 2) { if (selectedType != 4) { selectedItem = selection; } else { qty = (selection > 0) ? selection : (selection < 0 ? -selection : 1); } // thanks br1337 for showing such a simple exploit with quantity on NPC crafters if (selectedType == 0) { //bow refine var matSet = [[4003001, 4000000], [4011001, 4003000], [4003001, 4000016], [4011001, 4021006, 4003000], [4011001, 4011006, 4021003, 4021006, 4003000], [4011004, 4021000, 4021004, 4003000], [4021008, 4011001, 4011006, 4003000, 4000014]]; var matQtySet = [[5, 30], [1, 3], [30, 50], [2, 2, 8], [5, 5, 3, 3, 30], [7, 6, 3, 35], [1, 10, 3, 40, 50]]; var costSet = [800, 2000, 3000, 5000, 30000, 40000, 80000]; } else if (selectedType == 1) { //xbow refine var matSet = [[4003001, 4003000], [4011001, 4003001, 4003000], [4011001, 4003001, 4003000], [4011001, 4021006, 4021002, 4003000], [4011001, 4011005, 4021006, 4003001, 4003000], [4021008, 4011001, 4011006, 4021006, 4003000], [4021008, 4011004, 4003001, 4003000], [4021008, 4011006, 4021006, 4003001, 4003000]]; var matQtySet = [[7, 2], [1, 20, 5], [1, 50, 8], [2, 1, 1, 10], [5, 5, 3, 50, 15], [1, 8, 4, 2, 30], [2, 6, 30, 30], [2, 5, 3, 40, 40]]; var costSet = [1000, 2000, 3000, 10000, 30000, 50000, 80000, 200000]; } else if (selectedType == 2) { //glove refine var matSet = [[4000021, 4000009], [4000021, 4000009, 4011001], [4000021, 4000009, 4011006], [4000021, 4011006, 4021001], [4011000, 4011001, 4000021, 4003000], [4011001, 4021000, 4021002, 4000021, 4003000], [4011004, 4011006, 4021002, 4000030, 4003000], [4011006, 4011007, 4021006, 4000030, 4003000]]; var matQtySet = [[15, 20], [20, 20, 2], [40, 50, 2], [50, 2, 1], [1, 3, 60, 15], [3, 1, 3, 80, 25], [3, 1, 2, 40, 35], [2, 1, 8, 50, 50]]; var costSet = [5000, 10000, 15000, 20000, 30000, 40000, 50000, 70000]; } else if (selectedType == 3) { //glove upgrade var matSet = [[1082013, 4021003], [1082013, 4021000], [1082016, 4021000], [1082016, 4021008], [1082048, 4021003], [1082048, 4021008], [1082068, 4011002], [1082068, 4011006], [1082071, 4011006], [1082071, 4021008], [1082084, 4011000, 4021000], [1082084, 4011006, 4021008], [1082089, 4021000, 4021007], [1082089, 4021007, 4021008]]; var matQtySet = [[1, 2], [1, 1], [1, 3], [1, 1], [1, 3], [1, 1], [1, 4], [1, 2], [1, 4], [1, 2], [1, 1, 5], [1, 2, 2], [1, 5, 1], [1, 2, 2]]; var costSet = [7000, 7000, 10000, 12000, 15000, 20000, 22000, 25000, 30000, 40000, 55000, 60000, 70000, 80000]; } else if (selectedType == 5) { //arrow refine var matSet = [[4003001, 4003004], [4003001, 4003004], [4011000, 4003001, 4003004], [4011000, 4003001, 4003004], [4011001, 4003001, 4003005], [4011001, 4003001, 4003005]]; var matQtySet = [[1, 1], [1, 1], [1, 3, 10], [1, 3, 10], [1, 5, 15], [1, 5, 15]]; var costSet = [0, 0, 0, 0, 0, 0] } if (selectedType != 4) { item = items[selectedItem]; mats = matSet[selectedItem]; matQty = matQtySet[selectedItem]; cost = costSet[selectedItem]; } var prompt = "You want me to make "; if (qty == 1) { prompt += "a #t" + item + "#?"; } else { prompt += qty + " #t" + item + "#?"; } prompt += " In that case, I'm going to need specific items from you in order to make it. Make sure you have room in your inventory, though!#b"; if (mats instanceof Array) { for (var i = 0; i < mats.length; i++) { prompt += "\r\n#i" + mats[i] + "# " + (matQty[i] * qty) + " #t" + mats[i] + "#"; } } else { prompt += "\r\n#i" + mats + "# " + (matQty * qty) + " #t" + mats + "#"; } if (cost > 0) { prompt += "\r\n#i4031138# " + (cost * qty) + " meso"; } cm.sendYesNo(prompt); } else if (status == 3) { var complete = true; if (cm.getMeso() < (cost * qty)) { cm.sendOk("Sorry, but this is how I make my living. No meso, no item."); cm.dispose(); return; } else { if (mats instanceof Array) { for (var i = 0; complete && i < mats.length; i++) { if (!cm.haveItem(mats[i], matQty[i] * qty)) { complete = false; } } } else if (!cm.haveItem(mats, matQty * qty)) { complete = false; } } if (!complete) { cm.sendOk("Surely you, of all people, would understand the value of having quality items? I can't do that without the items I require."); } else { var recvItem = item, recvQty; if (item >= 2060000 && item <= 2060002) //bow arrows { recvQty = 1000 - (item - 2060000) * 100; } else if (item >= 2061000 && item <= 2061002) //xbow arrows { recvQty = 1000 - (item - 2061000) * 100; } else if (item == 4003000)//screws { recvQty = 15 * qty; } else { recvQty = qty; } if (cm.canHold(recvItem, recvQty)) { if (mats instanceof Array) { for (var i = 0; i < mats.length; i++) { cm.gainItem(mats[i], -(matQty[i] * qty)); } } else { cm.gainItem(mats, -(matQty * qty)); } cm.gainMeso(-(cost * qty)); cm.gainItem(recvItem, recvQty); cm.sendOk("A perfect item, as usual. Come and see me if you need anything else."); } else { cm.sendOk("Please make sure you have room in your inventory, and talk to me again."); } } cm.dispose(); } }