Files
sweetgum-server/scripts/npc/2042000.js
ronancpl 3bdf8cb2be The great MCPQ Merge offensive
Fulfilled the lovely pull request #427 from @dragoso, which added in backing code content to HeavenMS.
Implemented structural changes for the Marriage wishlist, in order to receive, maintain and distribute gifts to spouses.
Added untradeable check on wishlist gift handler.
Adjusted CPQ drops to actually load from DB rathe than hard-coded.
Fixed CPQ "random disease to player/party" functionality not applying properly.
Adjusted how CPQ maps are generated. It directly loads a new area from WZ (this process should at least removes the player's spawned mobs) rather than reset the cache at every MCPQ creation.
2019-03-15 12:08:21 -03:00

568 lines
32 KiB
JavaScript
Raw Blame History

var status = 0;
var rnk = -1;
var n1 = 50; //???
var n2 = 40; //??? ???
var n3 = 7; //35
var n4 = 10; //40
var n5 = 20; //50
var cpqMap = 980000000;
var cpqMinLvl = 0;
var cpqMaxLvl = 255;
var cpqMinAmt = 0;
var cpqMaxAmt = 6;
// Ronan's custom ore refiner NPC
var refineRocks = true; // enables moon rock, star rock
var refineCrystals = true; // enables common crystals
var refineSpecials = true; // enables lithium, special crystals
var feeMultiplier = 7.0;
function start() {
status = -1;
action(1, 0, 0);
}
function action(mode, type, selection) {
if (mode == -1) {
cm.dispose();
} else {
if (status >= 0 && mode == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (cm.getPlayer().getMapId() == 980000010) {
if (status == 0) {
cm.sendNext("Eu espero que voc<6F> tenha divertido na Folia dos Monstros!");
} else if (status > 0) {
cm.warp(980000000, 0);
cm.dispose();
}
} else if (cm.getChar().getMap().isCPQLoserMap()) {
if (status == 0) {
if (cm.getChar().getParty() != null) {
var shiu = "";
if (cm.getPlayer().getFestivalPoints() >= 300) {
shiu += "#rA#k";
cm.sendOk("Infelizmente, voc<6F> ou empatou ou perdeu a batalha, apesar da sua excelente performance. A vit<69>ria pode ser sua da pr<70>xima vez.\r\n\r\n#bNota da Folia de Monstros : " + shiu);
rnk = 10;
} else if (cm.getPlayer().getFestivalPoints() >= 100) {
shiu += "#rB#k";
rnk = 20;
cm.sendOk("Infelizmente, voc<6F> ou empatou ou perdeu a batalha, mesmo com sua <20>tima performance. S<> mais um pouquinho, e a vit<69>ria poderia ter sido sua.\r\n\r\n#bNota da Folia de Monstros : " + shiu);
} else if (cm.getPlayer().getFestivalPoints() >= 50) {
shiu += "#rC#k";
rnk = 30;
cm.sendOk("Infelizmente, voc<6F> ou empatou ou perdeu a batalha. A vit<69>ria est<73> para aqueles que se esfor<6F>am. Vejo seus esfor<6F>os, ent<6E>o a vit<69>ria n<>o est<73> t<>o longe do seu alcance. Continue assim!\r\n\r\n#bNota da Folia de Monstros : " + shiu);
} else {
shiu += "#rD#k";
rnk = 40;
cm.sendOk("Infelizmente, voc<6F> ou empatou ou perdeu a batalha, e sua performance claramente reflete nisso. Espero mais de voc<6F> da pr<70>xima vez.\r\n\r\n#bNota da Folia de Monstros : " + shiu);
}
} else {
cm.warp(980000000, 0);
cm.dispose();
}
} else if (status == 1) {
switch (rnk) {
case 10:
cm.warp(980000000, 0);
cm.gainExp(17500);
cm.dispose();
break;
case 20:
cm.warp(980000000, 0);
cm.gainExp(1200);
cm.dispose();
break;
case 30:
cm.warp(980000000, 0);
cm.gainExp(5000);
cm.dispose();
break;
case 40:
cm.warp(980000000, 0);
cm.gainExp(2500);
cm.dispose();
break;
default:
cm.warp(980000000, 0);
cm.dispose();
break;
}
}
} else if (cm.getChar().getMap().isCPQWinnerMap()) {
if (status == 0) {
if (cm.getChar().getParty() != null) {
var shi = "";
if (cm.getPlayer().getFestivalPoints() >= 300) {
shi += "#rA#k";
rnk = 1;
cm.sendOk("Parab<61>ns pela sua vit<69>ria!!! Que <20>tima performance! O grupo advers<72>rio n<>o p<>de fazer nada! Espero o mesmo bom trabalho da pr<70>xima vez!\r\n\r\n#bNota da Folia de Monstros : " + shi);
} else if (cm.getPlayer().getFestivalPoints() >= 100) {
shi += "#rB#k";
rnk = 2;
cm.sendOk("Parab<61>ns pela sua vit<69>ria! Isso foi impressionante! Voc<6F> fez um bom trabalho contra o grupo advers<72>rio! S<> mais um pouco, e voc<6F> definitivamente vai conseguir um A na pr<70>xima vez. \r\n\r\n#bNota da Folia de Monstros : " + shi);
} else if (cm.getPlayer().getFestivalPoints() >= 50) {
shi += "#rC#k";
rnk = 3;
cm.sendOk("Parab<61>ns pela sua vit<69>ria. Voc<6F> fez algumas coisas c<> e l<>, mas essa n<>o pode ser considerada uma boa vit<69>ria. Espero mais de ti da pr<70>xima vez.\r\n\r\n#bNota da Folia de Monstros : " + shi);
} else {
shi += "#rD#k";
rnk = 4;
cm.sendOk("Parab<61>ns pela sua vit<69>ria, entretanto sua performance n<>o refletiu muito bem isso. Seja mais ativo na sua pr<70>xima participa<70><61>o da Folia de Monstros!\r\n\r\n#bNota da Folia de Monstros : " + shi);
}
} else {
cm.warp(980000000, 0);
cm.dispose();
}
} else if (status == 1) {
switch (rnk) {
case 1:
cm.warp(980000000, 0);
cm.gainExp(50000);
cm.dispose();
break;
case 2:
cm.warp(980000000, 0);
cm.gainExp(25500);
cm.dispose();
break;
case 3:
cm.warp(980000000, 0);
cm.gainExp(21000);
cm.dispose();
break;
case 4:
cm.warp(980000000, 0);
cm.gainExp(19505);
cm.dispose();
break;
default:
cm.warp(980000000, 0);
cm.dispose();
break;
}
}
} else if (cm.getMapId() == cpqMap) { // only CPQ1
if (status == 0) {
if (cm.getParty() == null) {
status = 10;
cm.sendOk("#eÉ necessário criar um grupo antes de começar o Festival de Monstros!#k");
} else if (!cm.isLeader()) {
status = 10;
cm.sendOk("Se você quer começar o Festival, avise o #blíder do grupo#k para falar comigo.");
} else {
var party = cm.getParty().getMembers();
var inMap = cm.partyMembersInMap();
var lvlOk = 0;
var isOutMap = 0;
for (var i = 0; i < party.size(); i++) {
if (party.get(i).getLevel() >= cpqMinLvl && party.get(i).getLevel() <= cpqMaxLvl) {
lvlOk++;
if (party.get(i).getPlayer().getMapId() != cpqMap) {
isOutMap++;
}
}
}
if (party >= 1) {
status = 10;
cm.sendOk("Você não tem número suficiente de pessoas em seu grupo. Você precisa de um grupo com #b" + cpqMinAmt + "#k - #r" + cpqMaxAmt + "#k membros e eles devem estar no mapa com você.");
} else if (lvlOk != inMap) {
status = 10;
cm.sendOk("Certifique se todos em seu grupo estão dentre os níveis corretos (" + cpqMinLvl + "~" + cpqMaxLvl + ")!");
} else if (isOutMap > 0) {
status = 10;
cm.sendOk("Existe alguém do grupo que não esta no mapa!");
} else {
cm.sendCPQMapLists();
}
}
} else if (status == 1) {
if (cm.fieldTaken(selection)) {
if (cm.fieldLobbied(selection)) {
cm.challengeParty(selection);
cm.dispose();
} else {
cm.sendOk("A sala esta cheia.");
cm.dispose();
}
} else {
var party = cm.getParty().getMembers();
if ((selection >= 0 && selection <= 3) && party.size() < 1) {
cm.sendOk("Você precisa de no mínimo 2 player para entrar na competição.");
} else if ((selection >= 4 && selection <= 5) && party.size() < 1) {
cm.sendOk("Você precisa de no mínimo 3 player para entrar na competição.");
} else {
cm.cpqLobby(selection);
}
cm.dispose();
}
} else if (status == 11) {
cm.dispose();
}
} else {
if (status == 0) {
var talk = "O que gostaria de fazer? Se voc<6F> nunca participou da Folia de Monstros, voc<6F> precisar<61> saber de algumas coisas antes de participar.\r\n#b#L0# Ir para o campo da Folia de Monstros 1.#l\r\n#L3# Ir para o campo da Folia de Monstros 2.#l\r\n#L1# Aprender sobre a Folia de Monstros.#l\r\n#L2# Trocar #t4001129#.#l";
if (Packages.constants.ServerConstants.USE_ENABLE_CUSTOM_NPC_SCRIPT) {
talk += "\r\n#L4# ... Can I just refine my ores?#l";
}
cm.sendSimple(talk);
} else if (status == 1) {
if (selection == 0) {
if ((cm.getLevel() > 29 && cm.getLevel() < 51) || cm.getPlayer().isGM()) {
cm.getChar().saveLocation("MONSTER_CARNIVAL");
cm.warp(980000000, 0);
cm.dispose();
return;
} else if (cm.getLevel() < 30) {
cm.sendOk("Voc<6F> precisa ser no m<>nimo n<>vel 30 para participar da Folia de Monstros. Fale comigo quando for forte o bastante.");
cm.dispose();
return;
} else {
cm.sendOk("Sinto muito, mas apenas os jogadores de n<>vel 30~50 podem participar da Folia de Monstros.");
cm.dispose();
return;
}
} else if (selection == 1) {
status = 60;
cm.sendSimple("O que gostaria de fazer?\r\n#b#L0# O que <20> a Folia de Monstros?#l\r\n#L1# Vis<69>o geral sobre a Folia de Monstros#l\r\n#L2# Informa<6D><61>es detalhadas sobre a Folia de Monstros#l\r\n#L3# Nada, de verdade. Mudei de ideia.#l");
} else if (selection == 2) {
cm.sendSimple("Lembre-se se voc<6F> possui #t4001129#, voc<6F> pode troc<6F>-las por itens. Tenha certeza que voc<6F> possui #t4001129# suficientes para o item que voc<6F> deseja. Selecione o item que voc<6F> gostaria de troc<6F>-las! \r\n#b#L0# #t1122007#(" + n1 + " moedas)#l\r\n#L1# #t2041211#(" + n2 + " moedas)#l\r\n#L2# Armas para Guerreiros#l\r\n#L3# Armas para Bruxos#l\r\n#L4# Armas para Arqueiros#l\r\n#L5# Armas para Gatunos#l");
} else if (selection == 3) {
cm.getChar().saveLocation("MONSTER_CARNIVAL");
cm.warp(980030000, 0);
cm.dispose();
return;
} else if (selection == 4) {
var selStr = "Very well, instead I offer a steadfast #bore refining#k service for you, taxing #r" + ((feeMultiplier * 100) | 0) + "%#k over the usual fee to synthetize them. What will you do?#b";
var options = new Array("Refine mineral ores","Refine jewel ores");
if(refineCrystals) {
options.push("Refine crystal ores");
}
if(refineRocks) {
options.push("Refine plates/jewels");
}
for (var i = 0; i < options.length; i++){
selStr += "\r\n#L" + i + "# " + options[i] + "#l";
}
cm.sendSimple(selStr);
status = 76;
}
} else if (status == 2) {
select = selection;
if (select == 0) {
if (cm.haveItem(4001129, n1) && cm.canHold(4001129)) {
cm.gainItem(1122007, 1);
cm.gainItem(4001129, -n1);
cm.dispose();
} else {
cm.sendOk("Verifique e veja se est<73>o faltando #b#t4001129##k ou se seu invent<6E>rio de Equipamentos est<73> cheio.");
cm.dispose();
}
} else if (select == 1) {
if (cm.haveItem(4001129, n2) && cm.canHold(2041211)) {
cm.gainItem(2041211, 1);
cm.gainItem(4001129, -n2);
cm.dispose();
} else {
cm.sendOk("Verifique e veja se est<73>o faltando #b#t4001129##k ou se seu invent<6E>rio de Uso est<73> cheio.");
cm.dispose();
}
} else if (select == 2) {//S2 Warrior 26 S3 Magician 6 S4 Bowman 6 S5 Thief 8
status = 10;
cm.sendSimple("Por favor tenha certeza que voc<6F> possui #t4001129# para a arma que voc<6F> deseja. Selecione a arma que voc<6F> gostaria de trocar #t4001129# por. As op<6F><70>es que tenho s<>o realmente boas, e eu n<>o sou eu que falo <20> o povo que diz! \r\n#b#L0# #z1302004#(" + n3 + " moedas)#l\r\n#L1# #z1402006#(" + n3 + " moedas)#l\r\n#L2# #z1302009#(" + n4 + " moedas)#l\r\n#L3# #z1402007#(" + n4 + " moedas)#l\r\n#L4# #z1302010#(" + n5 + " moedas)#l\r\n#L5# #z1402003#(" + n5 + " moedas)#l\r\n#L6# #z1312006#(" + n3 + " moedas)#l\r\n#L7# #z1412004#(" + n3 + " moedas)#l\r\n#L8# #z1312007#(" + n4 + " moedas)#l\r\n#L9# #z1412005#(" + n4 + " moedas)#l\r\n#L10# #z1312008#(" + n5 + " moedas)#l\r\n#L11# #z1412003#(" + n5 + " moedas)#l\r\n#L12# Ir para a pr<70>xima p<>gina(1/2)#l");
} else if (select == 3) {
status = 20;
cm.sendSimple("Selecione a arma que voc<6F> gostaria de trocar. As armas que eu tenho aqui s<>o extremamente atraentes. Veja voc<6F> mesmo! \r\n#b#L0# #z1372001#(" + n3 + " moedas)#l\r\n#L1# #z1382018#(" + n3 + " moedas)#l\r\n#L2# #z1372012#(" + n4 + "moedas)#l\r\n#L3# #z1382019#(" + n4 + "moedas)#l\r\n#L4# #z1382001#(" + n5 + " moedas)#l\r\n#L5# #z1372007#(" + n5 + " moedas)#l");
} else if (select == 4) {
status = 30;
cm.sendSimple("Selecione a arma que voc<6F> gostaria de trocar. As armas que eu tenho aqui s<>o extremamente atraentes. Veja voc<6F> mesmo! \r\n#b#L0# #z1452006#(" + n3 + " moedas)#l\r\n#L1# #z1452007#(" + n4 + " moedas)#l\r\n#L2# #z1452008#(" + n5 + " moedas)#l\r\n#L3# #z1462005#(" + n3 + " moedas)#l\r\n#L4# #z1462006#(" + n4 + " moedas)#l\r\n#L5# #z1462007#(" + n5 + " moedas)#l");
} else if (select == 5) {
status = 40;
cm.sendSimple("Selecione a arma que voc<6F> gostaria de trocar por. As armas que eu tenho s<>o da maior qualidade. Seleciona a mais atraente para voc<6F>! \r\n#b#L0# #z1472013#(" + n3 + " moedas)#l\r\n#L1# #z1472017#(" + n4 + "moedas)#l\r\n#L2# #z1472021#(" + n5 + " moedas)#l\r\n#L3# #z1332014#(" + n3 + " moedas)#l\r\n#L4# #z1332031#(" + n4 + "moedas)#l\r\n#L5# #z1332011#(" + n4 + "moedas)#l\r\n#L6# #z1332016#(" + n5 + " moedas)#l\r\n#L7# #z1332003#(" + n5 + " moedas)#l");
}
} else if (status == 11) {
if (selection == 12) {
cm.sendSimple("Selecione a arma que voc<6F> gostaria de trocar. As armas que eu tenho aqui s<>o extremamente <20>teis. D<> uma olhada! \r\n#b#L0# #z1322015#(" + n3 + " moedas)#l\r\n#L1# #z1422008#(" + n3 + " moedas)#l\r\n#L2# #z1322016#(" + n4 + "moedas)#l\r\n#L3# #z1422007#(" + n4 + "moedas)#l\r\n#L4# #z1322017#(" + n5 + " moedas)#l\r\n#L5# #z1422005#(" + n5 + " moedas)#l\r\n#L6# #z1432003#(" + n3 + " moedas)#l\r\n#L7# #z1442003#(" + n3 + " moedas)#l\r\n#L8# #z1432005#(" + n4 + "moedas)#l\r\n#L9# #z1442009#(" + n4 + "moedas)#l\r\n#L10# #z1442005#(" + n5 + " moedas)#l\r\n#L11# #z1432004#(" + n5 + " moedas)#l\r\n#L12# Voltar para a p<>gina inicial(2/2)#l");
} else {
var item = new Array(1302004, 1402006, 1302009, 1402007, 1302010, 1402003, 1312006, 1412004, 1312007, 1412005, 1312008, 1412003);
var cost = new Array(n3, n3, n4, n4, n5, n5, n3, n3, n4, n4, n5);
if (cm.haveItem(4001129, cost[selection]) && cm.canHold(item[selection])) {
cm.gainItem(item[selection], 1);
cm.gainItem(4001129, -cost[selection]);
cm.dispose();
} else {
cm.sendOk("Voc<6F> ou n<>o possui #b#t4001129##k suficientes, ou seu invent<6E>rio est<73> cheio. Verifique novamente.");
cm.dispose();
}
}
} else if (status == 12) {
if (selection == 12) {
status = 10;
cm.sendSimple("Por favor tenha certeza que voc<6F> possui #t4001129# para a arma que voc<6F> deseja. Selecione a arma que voc<6F> gostaria de trocar #t4001129# por. As op<6F><70>es que tenho s<>o realmente boas, e eu n<>o sou eu que falo <20> o povo que diz! \r\n#b#L0# #z1302004#(" + n3 + " moedas)#l\r\n#L1# #z1402006#(" + n3 + " moedas)#l\r\n#L2# #z1302009#(" + n4 + " moedas)#l\r\n#L3# #z1402007#(" + n4 + " moedas)#l\r\n#L4# #z1302010#(" + n5 + " moedas)#l\r\n#L5# #z1402003#(" + n5 + " moedas)#l\r\n#L6# #z1312006#(" + n3 + " moedas)#l\r\n#L7# #z1412004#(" + n3 + " moedas)#l\r\n#L8# #z1312007#(" + n4 + " moedas)#l\r\n#L9# #z1412005#(" + n4 + " moedas)#l\r\n#L10# #z1312008#(" + n5 + " moedas)#l\r\n#L11# #z1412003#(" + n5 + " moedas)#l\r\n#L12# Ir para a pr<70>xima p<>gina(1/2)#l");
} else {
var item = new Array(1322015, 1422008, 1322016, 1422007, 1322017, 1422005, 1432003, 1442003, 1432005, 1442009, 1442005, 1432004);
var cost = new Array(n3, n3, n4, n4, n5, n5, n3, n3, n4, n4, n5, n5);
if (cm.haveItem(4001129, cost[selection]) && cm.canHold(item[selection])) {
cm.gainItem(item[selection], 1);
cm.gainItem(4001129, -cost[selection]);
cm.dispose();
} else {
cm.sendOk("Voc<6F> ou n<>o possui #b#t4001129##k suficientes, ou seu invent<6E>rio est<73> cheio. Verifique novamente.");
cm.dispose();
}
}
} else if (status == 21) {
var item = new Array(1372001, 1382018, 1372012, 1382019, 1382001, 1372007);
var cost = new Array(n3, n3, n4, n4, n5, n5);
if (cm.haveItem(4001129, cost[selection]) && cm.canHold(item[selection])) {
cm.gainItem(item[selection], 1);
cm.gainItem(4001129, -cost[selection]);
cm.dispose();
} else {
cm.sendOk("Ou voc<6F> n<>o possui #b#t4001129##k suficientes, ou seu invent<6E>rio est<73> cheio. Verifique novamente.");
cm.dispose();
}
} else if (status == 31) {
var item = new Array(1452006, 1452007, 1452008, 1462005, 1462006, 1462007);
var cost = new Array(n3, n4, n5, n3, n4, n5);
if (cm.haveItem(4001129, cost[selection]) && cm.canHold(item[selection])) {
cm.gainItem(item[selection], 1);
cm.gainItem(4001129, -cost[selection]);
cm.dispose();
} else {
cm.sendOk("Ou voc<6F> n<>o possui #b#t4001129##k suficientes, ou seu invent<6E>rio est<73> cheio. Verifique novamente.");
cm.dispose();
}
} else if (status == 41) {
var item = new Array(1472013, 1472017, 1472021, 1332014, 1332031, 1332011, 1332016, 1332003);
var cost = new Array(n3, n4, n5, n3, n4, n4, n5, n5);
if (cm.haveItem(4001129, cost[selection]) && cm.canHold(item[selection])) {
cm.gainItem(item[selection], 1);
cm.gainItem(4001129, -cost[selection]);
cm.dispose();
} else {
cm.sendOk("Ou voc<6F> n<>o possui #b#t4001129##k suficientes, ou seu invent<6E>rio est<73> cheio. Verifique novamente.");
cm.dispose();
}
} else if (status == 61) {
select = selection;
if (selection == 0) {
cm.sendNext("Haha! Eu sou Spiegelmann, o l<>der dessa Folia. Eu comecei a primeira #bFolia de Monstros#k aqui, aguardando por viajantes como voc<6F> para participar dessa extravaganza!");
} else if (selection == 1) {
cm.sendNext("#bFolia de Monstros#k consiste em 2 grupos entrando no campo de batalha, e ca<63>ando os monstros invocados pelo outro grupo. <20> uma #bmiss<73>o de combate que determina o vitorioso pela quantia de Pontos de Folia (CP) recebidos#k.");
} else if (selection == 2) {
cm.sendNext("Quando entrar no Campo da Folia, voc<6F> ver<65> a janela da Folia de Monstros aparecer. Tudo que precisa fazer <20> #bselecionar o que voc<6F>e quer usar, e pressionar OK#k. Muito f<>cil, n<>?");
} else {
cm.dispose();
}
} else if (status == 62) {
if (select == 0) {
cm.sendNext("O que <20> a #bFolia de Monstros#k? Hahaha! Vamos dizer que <20> uma experi<72>ncia que jamais esquecer<65>! <20> uma #bbatalha contra outros viajantes assim como voc<6F>!#k");
} else if (select == 1) {
cm.sendNext("Quando entrar no Campo da Folia, sua tarefa <20> #breceber CP ca<63>ando os monstros do grupo oposto, e usar estes CP's para distrair o grupo oposto de ca<63>ar monstros.#k.");
} else if (select == 2) {
cm.sendNext("Assim que se acostumar com os comandos, tente usar #bas teclas TAB e F1 ~ F12#k. #bTAB alterna entre Invoca<63><61>o de Monstros/Habilidades/Protetor,#k e, #bF1~ F12 possibilita-o de acessar uma das janelas diretamente#k.");
}
} else if (status == 63) {
if (select == 0) {
cm.sendNext("Eu sei que <20> muito perigoso para voc<6F>s lutarem uns com os outros usando armas de verdade; e eu n<>o sugeriria um ato t<>o barb<72>rico. N<>o meu amigo, o que eu ofere<72>o <20> competi<74><69>o. A emo<6D><6F>o da batalha e a emo<6D><6F>o de competir contra pessoas t<>o fortes e motivadas. Eu ofere<72>o a premissa de que seu grupo e o grupo oposto ambos #binvoquem os monstros, e derrote os monstros invocados pelo grupo advers<72>rio. Essa <20> a ess<73>ncia da Folia de Monstros. Al<41>m disso, voc<6F> pode usar Maple Coins ganhos durante a Folia de Monstros para obter novos itens e armas! #k");
} else if (select == 1) {
cm.sendNext("Existem 3 maneiras de distrair o grupo advers<72>rio: #bInvodar um monstro, Habilidade, and Protetor#k. Vou dar-lhe um olhar mais aprofundado, se voc<6F> quiser saber mais sobre 'Instru<72><75>es detalhadas'.");
} else if (select == 2) {
cm.sendNext("#bInvocar um Monstro#k chama um monstro que ataca o grupo advers<72>rio, sob seu controle. Use CP para trazer um Monstro Invocado, e ele ir<69> aparecer na mesma <20>rea, atacando o grupo oposto.");
}
} else if (status == 64) {
if (select == 0) {
cm.sendNext("Claro, n<>o <20> t<>o simples assim. Existem outras maneiras de prevenir o outro grupo de ca<63>ar monstros, e cabe a voc<6F> descobrir como faz<61>-lo. O que acha? Interessado em uma competi<74><69>o amig<69>vel?");
cm.dispose();
} else if (select == 1) {
cm.sendNext("Por favor lembre-se. Nunca <20> uma boa ideia guardar seus CP's. #bOs CP's que voc<6F> usou ir<69>o ajudar a determinar o vencedor e o perdedor da Folia.");
} else if (select == 2) {
cm.sendNext("#bHabilidade#k <20> uma op<6F><70>o de usar habilidades tais como Escurid<69>o, Fraqueza, e outras para prevenir o grupo oposto de matar outros monstros. S<>o necess<73>rios muitos CP's, mas vale muito a pena. O <20>nico problema <20> que eles n<>o duram muito. Use essa t<>tica com sabedoria!");
}
} else if (status == 65) {
if (select == 1) {
cm.sendNext("Oh, e n<>o se preocupe em tranformar-se em um fantasma. Na Folia de Monstros, #bvoc<6F> n<>o perder<65> EXP ap<61>s a morte#k. <20> realmente uma exper<65>ncia como nenhuma outra!");
cm.dispose();
} else if (select == 2) {
cm.sendNext("#bProtetor#k <20> basicamente um item invocado que aumenta dr<64>sticamente as habilidades dos monstros invocados pelo seu grupo. Protetor funciona enquanto n<>o for demolido pelo grupo oposto, ent<6E>o eu surigo que voc<6F> invoque v<>rios monstros primeiro, e ent<6E>o traga o Protetor.");
}
} else if (status == 66) {
cm.sendNext("Por <20>ltimo, enquanto estiver na Folia de Monstros, #bvoc<6F> n<>o pode usar items/po<70><6F>es de recupera<72><61>o que voc<6F> leva por ai contigo.#k Entretanto, os monstros deixam esses items cair de vez em quando, e #bassim que peg<65>-los, o item ativar<61> imediatamente#k. <20> por isso que <20> importante saber quando pegar estes items.");
cm.dispose();
} else if (status == 77) {
var allDone;
if (selection == 0) {
allDone = refineItems(0); // minerals
} else if (selection == 1) {
allDone = refineItems(1); // jewels
} else if (selection == 2 && refineCrystals) {
allDone = refineItems(2); // crystals
} else if (selection == 2 && !refineCrystals || selection == 3) {
allDone = refineRockItems(); // moon/star rock
}
if(allDone) {
cm.sendOk("Done. Thanks for showing up~.");
} else {
cm.sendOk("Done. Be aware some of the items #rcould not be synthetized#k because either you have a lack of space on your ETC inventory or there's not enough mesos to cover the fee.");
}
cm.dispose();
}
}
}
}
function getRefineFee(fee) {
return ((feeMultiplier * fee) | 0);
}
function isRefineTarget(refineType, refineItemid) {
if(refineType == 0) { //mineral refine
return refineItemid >= 4010000 && refineItemid <= 4010007 && !(refineItemid == 4010007 && !refineSpecials);
} else if(refineType == 1) { //jewel refine
return refineItemid >= 4020000 && refineItemid <= 4020008 && !(refineItemid == 4020008 && !refineSpecials);
} else if(refineType == 2) { //crystal refine
return refineItemid >= 4004000 && refineItemid <= 4004004 && !(refineItemid == 4004004 && !refineSpecials);
}
return false;
}
function getRockRefineTarget(refineItemid) {
if(refineItemid >= 4011000 && refineItemid <= 4011006) {
return 0;
} else if(refineItemid >= 4021000 && refineItemid <= 4021008) {
return 1;
}
return -1;
}
function refineItems(refineType) {
var allDone = true;
var refineFees = [[300,300,300,500,500,500,800,270],[500,500,500,500,500,500,500,1000,3000],[5000,5000,5000,5000,1000000]];
var itemCount = {};
var iter = cm.getPlayer().getInventory(Packages.client.inventory.MapleInventoryType.ETC).iterator();
while (iter.hasNext()) {
var it = iter.next();
var itemid = it.getItemId();
if(isRefineTarget(refineType, itemid)) {
var ic = itemCount[itemid];
if(ic != undefined) {
itemCount[itemid] += it.getQuantity();
} else {
itemCount[itemid] = it.getQuantity();
}
}
}
for(var key in itemCount) {
var itemqty = itemCount[key];
var itemid = parseInt(key);
var refineQty = ((itemqty / 10) | 0);
if(refineQty <= 0) continue;
while(true) {
itemqty = refineQty * 10;
var fee = getRefineFee(refineFees[refineType][(itemid % 100) | 0] * refineQty);
if(cm.canHold(itemid + 1000, refineQty, itemid, itemqty) && cm.getMeso() >= fee) {
cm.gainMeso(-fee);
cm.gainItem(itemid, -itemqty);
cm.gainItem(itemid + (itemid != 4010007 ? 1000 : 1001), refineQty);
break;
} else if(refineQty <= 1) {
allDone = false;
break;
} else {
refineQty--;
}
}
}
return allDone;
}
function refineRockItems() {
var allDone = true;
var minItems = [[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]];
var minRocks = [2147483647, 2147483647];
var rockItems = [4011007, 4021009];
var rockFees = [10000, 15000];
var iter = cm.getPlayer().getInventory(Packages.client.inventory.MapleInventoryType.ETC).iterator();
while (iter.hasNext()) {
var it = iter.next();
var itemid = it.getItemId();
var rockRefine = getRockRefineTarget(itemid);
if(rockRefine >= 0) {
var rockItem = ((itemid % 100) | 0);
var itemqty = it.getQuantity();
minItems[rockRefine][rockItem] += itemqty;
}
}
for(var i = 0; i < minRocks.length; i++) {
for(var j = 0; j < minItems[i].length; j++) {
if(minRocks[i] > minItems[i][j]) {
minRocks[i] = minItems[i][j];
}
}
if(minRocks[i] <= 0 || minRocks[i] == 2147483647) continue;
var refineQty = minRocks[i];
while(true) {
var fee = getRefineFee(rockFees[i] * refineQty);
if(cm.canHold(rockItems[i], refineQty) && cm.getMeso() >= fee) {
cm.gainMeso(-fee);
var j;
if(i == 0) {
for(j = 4011000; j < 4011007; j++) {
cm.gainItem(j, -refineQty);
}
cm.gainItem(j, refineQty);
} else {
for(j = 4021000; j < 4021009; j++) {
cm.gainItem(j, -refineQty);
}
cm.gainItem(j, refineQty);
}
break;
} else if(refineQty <= 1) {
allDone = false;
break;
} else {
refineQty--;
}
}
}
return allDone;
}