Files
sweetgum-server/scripts/npc/2100001.js
ronancpl f74dfbb46a Alliances & Pet autopot improvement + Crafters patch
Improved Alliance invitations now using "invite popups" just like buddy, party and guild invites.
Pet autopot now properly uses up pots from the inventory, fetching from other inventory slots when one place has been completely used up but the "stop criteria" hasn't been fulfilled yet.
Pet autopot now properly detects pots with healing factor defined by the character's pool.
Fixed old exploit with mineral/jewel crafters.
Patched Doorway's questlines.
2018-01-16 15:34:52 -02:00

209 lines
7.7 KiB
JavaScript

/* Author: aaroncsn (MapleSea Like)
NPC Name: Muhammad
Map(s): Ariant:The Town of Ariant(260000200)
Description: Jewel Refiner
*/
var status = 0;
var selectedType = -1;
var selectedItem = -1;
var item;
var mats;
var matQty;
var cost;
var qty;
var equip;
function start() {
status = -1;
action(1, 0, 0);
}
function action(mode, type, selection) {
if (mode <= 0 && status == 0) {
cm.sendNext("If you aren't in a hurry, then please come back in a bit. As you can see, there's so much work going on right now that I can't possibly give them to you on time.");
cm.dispose();
return;
}
if (mode <= 0 && status >= 1){
cm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if(status == 0)
cm.sendYesNo("Are you here to refine the ores of a mineral or a jewel? It doesn't matter how many ores you have, if you don't have them refined by a master like me, then they won't see the light of day. What do you think, do you want to refine them right now?");
if (status == 1 && mode == 1) {
var selStr = "I like your attitude! Let's just take care of this right now. What kind of ores would you like to refine? #b";
var options = new Array("Refine mineral ore","Refine jewel ores","Refine crystal ores");
for (var i = 0; i < options.length; i++){
selStr += "\r\n#L" + i + "# " + options[i] + "#l";
}
cm.sendSimple(selStr);
}
else if (status == 2 && mode == 1) {
selectedType = selection;
if (selectedType == 0){ //mineral refine
var selStr = "Which mineral would you like to refine?#b";
var minerals = new Array ("Bronze Plate","Steel Plate","Mithril Plate","Adamantium Plate","Silver Plate","Orihalcon Plate","Gold Plate","Lithium");
for (var i = 0; i < minerals.length; i++){
selStr += "\r\n#L" + i + "# " + minerals[i] + "#l";
}
cm.sendSimple(selStr);
equip = false;
}
else if (selectedType == 1){ //jewel refine
var selStr = "Which jewel would you like to refine?#b";
var jewels = new Array ("Garnet","Amethyst","Aquamarine","Emerald","Opal","Sapphire","Topaz","Diamond","Black Crystal");
for (var i = 0; i < jewels.length; i++){
selStr += "\r\n#L" + i + "# " + jewels[i] + "#l";
}
cm.sendSimple(selStr);
equip = false;
}
else if (selectedType == 2){ //Crystal refine
var selStr = "A crystal? That's a rare item indeed. Don't worry, I can refine it just as well as others. Which crystal would you like to refine? #b";
var crystals = new Array("Power Crystal","Wisdom Crystal","DEX Crystal","LUK Crystal");
for (var i = 0; i < crystals.length; i++){
selStr += "\r\n#L" + i + "# " + crystals[i] + "#l";
}
cm.sendSimple(selStr);
equip = false;
}
}
else if (status == 3 && mode == 1) {
selectedItem = selection;
if (selectedType == 0){ //mineral refine
var itemSet = new Array(4011000,4011001,4011002,4011003,4011004,4011005,4011006,4011008);
var matSet = new Array(4010000,4010001,4010002,4010003,4010004,4010005,4010006,4010007);
var matQtySet = new Array(10,10,10,10,10,10,10,10);
var costSet = new Array(270,270,270,450,450,450,720,270);
item = itemSet[selectedItem];
mats = matSet[selectedItem];
matQty = matQtySet[selectedItem];
cost = costSet[selectedItem];
}
else if (selectedType == 1){ //jewel refine
var itemSet = new Array(4021000,4021001,4021002,4021003,4021004,4021005,4021006,4021007,4021008);
var matSet = new Array(4020000,4020001,4020002,4020003,4020004,4020005,4020006,4020007,4020008);
var matQtySet = new Array(10,10,10,10,10,10,10,10,10);
var costSet = new Array (450,450,450,450,450,450,450,900,2700);
item = itemSet[selectedItem];
mats = matSet[selectedItem];
matQty = matQtySet[selectedItem];
cost = costSet[selectedItem];
}
else if (selectedType == 2){ //Crystal refine
var itemSet = new Array(4005000,4005001,4005002,4005003);
var matSet = new Array(4004000,4004001,4004002,4004003);
var matQtySet = new Array(10,10,10,10);
var costSet = new Array (4500,4500,4500,4500);
item = itemSet[selectedItem];
mats = matSet[selectedItem];
matQty = matQtySet[selectedItem];
cost = costSet[selectedItem];
}
var prompt = "So, you want me to make some #t" + item + "#s? In that case, how many do you want me to make?";
cm.sendGetNumber(prompt,1,1,100)
}
else if (status == 4 && mode == 1) {
if (equip)
{
selectedItem = selection;
qty = 1;
}
else
qty = (selection > 0) ? selection : (-selection <= 0 ? 1 : -selection);
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 == 5 && mode == 1) {
var complete = true;
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)) {
cm.sendOk("I'm afraid you are short in inventory slots for this.");
}
else if (cm.getMeso() < cost * qty)
{
cm.sendOk("I'm afraid you cannot afford my services.");
}
else
{
if (mats instanceof Array) {
for(var i = 0; complete && i < mats.length; i++)
{
if (matQty[i] * qty == 1) {
if (!cm.haveItem(mats[i]))
{
complete = false;
}
}
else {
if (cm.haveItem(mats[i],matQty[i]*qty))complete=false;
}
}
}
else {
if (!cm.haveItem(mats, matQty * qty))complete=false;
}
if (!complete)
cm.sendOk("Please check and see if you have all the necessary items with you. If so, then please check your etc. inventory and see if you have an empty space.");
else {
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);
if (cost > 0)
cm.gainMeso(-cost * qty);
cm.gainItem(recvItem, recvQty);
cm.sendOk("There, finished. What do you think, a piece of art, isn't it? Well, if you need anything else, you know where to find me.");
}
}
cm.dispose();
}
}