sweetgum83/scripts/npc/1012002.js

218 lines
11 KiB
JavaScript
Raw Normal View History

2024-01-19 08:56:28 +00:00
/*
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation version 3 as published by
the Free Software Foundation. You may not use, modify or distribute
this program under any other version of the GNU Affero General Public
License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* 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();
}
}