Implemented persistent diseases. Players now keep their disease status when logging out the game. Solved several concurrent access issues in MapleMap and MapleMonster. Implemented an option where an account's character slots can be accounted either by each world or all-server range. Fixed some issues with character slot count when entering/exiting Cash Shop. Fixed an exploit with Papulatus, on where players could create cracks of dimension infinitely. Solved an issue with the "reach" command not working properly when the targeted player is on an event instance. Devised an advanced and secure "PQ request" system. The service revolves around expecting massive number of players requesting a "pass" simultaneously, and fairly & swiftly responsing as much people as possible. Improved overall Whisper handler performance. Fixed GPQ Stage 1 statues not working as expected, which rendered the instance unplayable until now. Added commands for start, complete and reset quests.
209 lines
7.7 KiB
JavaScript
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 ? -selection : 1);
|
|
|
|
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();
|
|
}
|
|
} |