CPQ tidyup patch + Guild Creation matcher + Solution to Login Accid=0

Adjusted AP gains, to get it to work following the AP Reset check method.
Fixed usage of inexistent itemids on CPQ and fishing.
Fixed one-of-a-kind items being lost in player trades due to missing inventory checks.
Implemented matching system for the guild creation phase. All players intending to join the new guild must be on the Guild Headquartes and accept the creation of the guild.
Fixed changing jobs not properly updating info on the party tab.
Fixed double tooltip information on CPQ actions UI.
Fixed CPQ not disbanding after a player leaves the party/instance.
Fixed checks for "in-progress" CPQ instances.
Fixed changing maps on CPQ not leading players back to the starting battlefield.
Reviewed login system, now preventing non-local IP connecting on local server and local IP on non-local server.
Reviewed login system, now cherrypicking sessions in transition state when trying to disconnect them due to a failed login (avoiding possible mishaps due to duplicate sessions of a same account).
Adjusted PiratePQ stage 2, now mobs respawn rather than making party leader request for new waves.
Adjusted Prime Minister, its spawn is no longer related to starting the quest. It should also allow party fights.
Fixed "forcevac" command not properly applying, rather sending to inventory, "consume-on-pickup" items.
Fixed (probably) accId = 0 issue on login, that was occurring due to client accountid's being set to 0 a while before being checked once again on finishLogin().
Fixed an issue with extended time on CPQ not properly showing the end-match's visual effect.
This commit is contained in:
ronancpl
2019-03-26 16:28:41 -03:00
parent 3bdf8cb2be
commit 83266508af
95 changed files with 2980 additions and 1420 deletions

View File

@@ -1,3 +1,11 @@
/**
-- Version Info -----------------------------------------------------------------------------------
1.0 - First Version by Drago (MapleStorySA)
2.0 - Second Version by Ronan (HeavenMS)
3.0 - Third Version by Jayd - translated CPQ contents to English & added Pirate items
Special thanks to 頼晏 (ryantpayton) for also stepping in to translate CPQ scripts.
---------------------------------------------------------------------------------------------------
**/
var status = 0;
var rnk = -1;
@@ -8,9 +16,9 @@ var n4 = 10; //40
var n5 = 20; //50
var cpqMap = 980000000;
var cpqMinLvl = 0;
var cpqMaxLvl = 255;
var cpqMinAmt = 0;
var cpqMinLvl = 30;
var cpqMaxLvl = 50;
var cpqMinAmt = 2;
var cpqMaxAmt = 6;
// Ronan's custom ore refiner NPC
@@ -21,6 +29,19 @@ var feeMultiplier = 7.0;
function start() {
status = -1;
if (!Packages.constants.ServerConstants.USE_CPQ) {
if (Packages.constants.ServerConstants.USE_ENABLE_CUSTOM_NPC_SCRIPT) {
status = 0;
action(1, 0, 4);
} else {
cm.sendOk("The Monster Carnival is currently unavailable.");
cm.dispose();
}
return;
}
action(1, 0, 0);
}
@@ -39,7 +60,7 @@ function action(mode, type, selection) {
if (cm.getPlayer().getMapId() == 980000010) {
if (status == 0) {
cm.sendNext("Eu espero que voc<6F> tenha divertido na Folia dos Monstros!");
cm.sendNext("I hope you had fun at the Monster Carnival!");
} else if (status > 0) {
cm.warp(980000000, 0);
cm.dispose();
@@ -50,20 +71,20 @@ function action(mode, type, selection) {
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);
cm.sendOk("Unfortunately, you either drew or lost the battle despite your excellent performance. Victory can be yours next time! \r\n\r\n#bYour result: " + 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<EFBFBD> mais um pouquinho, e a vit<69>ria poderia ter sido sua.\r\n\r\n#bNota da Folia de Monstros : " + shiu);
cm.sendOk("Unfortunately, you either drew or lost the battle, even with your ultimate performance. Just a little bit, and the victory could have been yours! \r\n\r\n#bYour result: " + 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<EFBFBD>os, ent<EFBFBD>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);
cm.sendOk("Unfortunately, you either drew or lost the battle. Victory is for those who strive. I see your efforts, so victory is not far from your reach. Keep it up!\r\n\r\n#bYour result: " + 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);
cm.sendOk("Unfortunately, you either equalized or lost the battle, and your performance clearly reflects on it. I expect more from you next time. \r\n\r\n#bYour result: " + shiu);
}
} else {
cm.warp(980000000, 0);
@@ -104,19 +125,19 @@ function action(mode, type, selection) {
if (cm.getPlayer().getFestivalPoints() >= 300) {
shi += "#rA#k";
rnk = 1;
cm.sendOk("Parab<EFBFBD>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);
cm.sendOk("Congratulations on your victory!!! What a performance! The opposite group could not do anything! I hope the same good work next time! \r\n\r\n#bYour result: " + shi);
} else if (cm.getPlayer().getFestivalPoints() >= 100) {
shi += "#rB#k";
rnk = 2;
cm.sendOk("Parab<EFBFBD>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);
cm.sendOk("Congratulations on your victory! That was awesome! You did a good job against the opposing group! Just a little longer, and you'll definitely get an A next time! \r\n\r\n#bYour result: " + shi);
} else if (cm.getPlayer().getFestivalPoints() >= 50) {
shi += "#rC#k";
rnk = 3;
cm.sendOk("Parab<EFBFBD>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);
cm.sendOk("Congratulations on your victory. You did some things here and there, but that can not be considered a good victory. I expect more from you next time. \r\n\r\n#bYour result: " + shi);
} else {
shi += "#rD#k";
rnk = 4;
cm.sendOk("Parab<EFBFBD>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);
cm.sendOk("Congratulations on your victory, though your performance did not quite reflect that. Be more active in your next participation in the Monster Carnival! \r\n\r\n#bYour result: " + shi);
}
} else {
cm.warp(980000000, 0);
@@ -154,10 +175,10 @@ function action(mode, type, selection) {
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");
cm.sendOk("You need to create a party first before you can join the battle!");
} 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.");
cm.sendOk("If you want to start the battle, let the #bParty Leader#k talk to me.");
} else {
var party = cm.getParty().getMembers();
var inMap = cm.partyMembersInMap();
@@ -175,15 +196,18 @@ function action(mode, type, selection) {
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ê.");
cm.sendOk("You do not have enough people in your party. You need a party with #b" + cpqMinAmt + "#k - #r" + cpqMaxAmt + "#k members and they should be on the map with you.");
} else if (lvlOk != inMap) {
status = 10;
cm.sendOk("Certifique se todos em seu grupo estão dentre os níveis corretos (" + cpqMinLvl + "~" + cpqMaxLvl + ")!");
cm.sendOk("Make sure everyone in your party is among the correct levels (" + cpqMinLvl + "~" + cpqMaxLvl + ")!");
} else if (isOutMap > 0) {
status = 10;
cm.sendOk("Existe alguém do grupo que não esta no mapa!");
cm.sendOk("There are some of the party members that is not on the map!");
} else {
cm.sendCPQMapLists();
if (!cm.sendCPQMapLists()) {
cm.sendOk("All Monster Carnival fields are currently in use! Try again later.");
cm.dispose();
}
}
}
} else if (status == 1) {
@@ -192,15 +216,15 @@ function action(mode, type, selection) {
cm.challengeParty(selection);
cm.dispose();
} else {
cm.sendOk("A sala esta cheia.");
cm.sendOk("The room is currently full.");
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.");
if ((selection >= 0 && selection <= 3) && party.size() < (Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS ? 1 : 2)) {
cm.sendOk("You need at least 2 players to participate in the battle!");
} else if ((selection >= 4 && selection <= 5) && party.size() < (Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS ? 1 : 3)) {
cm.sendOk("You need at least 3 players to participate in the battle!");
} else {
cm.cpqLobby(selection);
}
@@ -211,7 +235,7 @@ function action(mode, type, selection) {
}
} 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";
var talk = "What would you like to do? If you have never participate in the Monster Carnival, you will need to know a few things before participating! \r\n#b#L0# Go to the Monster Carnival 1.#l \r\n#L3# Go to the Monster Carnival 2.#l \r\n#L1# Learn about the Monster Carnival.#l\r\n#L2# Trade #t4001129#.#l";
if (Packages.constants.ServerConstants.USE_ENABLE_CUSTOM_NPC_SCRIPT) {
talk += "\r\n#L4# ... Can I just refine my ores?#l";
}
@@ -224,19 +248,19 @@ function action(mode, type, selection) {
cm.dispose();
return;
} else if (cm.getLevel() < 30) {
cm.sendOk("Voc<EFBFBD> precisa ser no m<>nimo n<>vel 30 para participar da Folia de Monstros. Fale comigo quando for forte o bastante.");
cm.sendOk("You must be at least level 30 to participate in the Monster Carnival. Talk to me when you're strong enough.");
cm.dispose();
return;
} else {
cm.sendOk("Sinto muito, mas apenas os jogadores de n<>vel 30~50 podem participar da Folia de Monstros.");
cm.sendOk("I'm sorry, but only players of level 30 ~ 50 can participate in the Monster Carnival.");
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");
cm.sendSimple("What would you like to do?\r\n#b#L0# What is Monster Carnival?#l\r\n#L1# Overview of the Monster Carnival.#l\r\n#L2# Detailed information about the Monster Carnival.#l\r\n#L3# Nothing really, I've changed my mind.#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");
cm.sendSimple("Remember, if you have #t4001129#, you can exchange for items. Select the item you would like to change them! \r\n#b#L0# #t1122007# (" + n1 + " coins)#l\r\n#L1# #t2041211# (" + n2 + " coins)#l\r\n#L2# Weapons for Warriors#l\r\n#L3# Weapons for Magician#l\r\n#L4# Weapons for Archers#l\r\n#L5# Weapons for Thief#l\r\n#L6# Weapons for Pirate#l");
} else if (selection == 3) {
cm.getChar().saveLocation("MONSTER_CARNIVAL");
cm.warp(980030000, 0);
@@ -269,7 +293,7 @@ function action(mode, type, selection) {
cm.gainItem(4001129, -n1);
cm.dispose();
} else {
cm.sendOk("Verifique e veja se est<EFBFBD>o faltando #b#t4001129##k ou se seu invent<6E>rio de Equipamentos est<73> cheio.");
cm.sendOk("Check and see if you are missing #b#t4001129##k or if your EQUIP inventory is full.");
cm.dispose();
}
} else if (select == 1) {
@@ -278,25 +302,28 @@ function action(mode, type, selection) {
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.sendOk("Check and see if you are missing #b#t4001129##k or if your USE inventory is full.");
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");
cm.sendSimple("Please make sure you have # t4001129 # for the weapon you want. Select the weapon you would like to trade # t4001129 #. The choices I have are really good, and I'm not the one who speaks to the people who say it! \r\n#b#L0# #z1302004# (" + n3 + " coins)#l\r\n#L1# #z1402006# (" + n3 + " coins)#l\r\n#L2# #z1302009# (" + n4 + " coins)#l\r\n#L3# #z1402007# (" + n4 + " coins)#l\r\n#L4# #z1302010# (" + n5 + " coins)#l\r\n#L5# #z1402003# (" + n5 + " coins)#l\r\n#L6# #z1312006# (" + n3 + " coins)#l\r\n#L7# #z1412004# (" + n3 + " coins)#l\r\n#L8# #z1312007# (" + n4 + " coins)#l\r\n#L9# #z1412005# (" + n4 + " coins)#l\r\n#L10# #z1312008# (" + n5 + " coins)#l\r\n#L11# #z1412003# (" + n5 + " coins)#l\r\n#L12# Continue to the next page (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");
cm.sendSimple("Select the weapon you would like to trade. The weapons I have here are extremely attractive. See for yourself! \r\n#b#L0# #z1372001# (" + n3 + " coins)#l\r\n#L1# #z1382018# (" + n3 + " coins)#l\r\n#L2# #z1372012# (" + n4 + " coins)#l\r\n#L3# #z1382019# (" + n4 + " coins)#l\r\n#L4# #z1382001# (" + n5 + " coins)#l\r\n#L5# #z1372007# (" + n5 + " coins)#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");
cm.sendSimple("Select the weapon you would like to trade. The weapons I have here are extremely attractive. See for yourself! \r\n#b#L0# #z1452006# (" + n3 + " coins)#l\r\n#L1# #z1452007# (" + n4 + " coins)#l\r\n#L2# #z1452008# (" + n5 + " coins)#l\r\n#L3# #z1462005# (" + n3 + " coins)#l\r\n#L4# #z1462006# (" + n4 + " coins)#l\r\n#L5# #z1462007# (" + n5 + " coins)#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");
cm.sendSimple("Select the weapon you would like to trade for. The weapons I have are of the highest quality. Select the one most appealing to you! \r\n#b#L0# #z1472013# (" + n3 + " coins)#l\r\n#L1# #z1472017# (" + n4 + " coins)#l\r\n#L2# #z1472021# (" + n5 + " coins)#l\r\n#L3# #z1332014# (" + n3 + " coins)#l\r\n#L4# #z1332031# (" + n4 + " coins)#l\r\n#L5# #z1332011# (" + n4 + " coins)#l\r\n#L6# #z1332016# (" + n5 + " coins)#l\r\n#L7# #z1332003# (" + n5 + " coins)#l");
} else if (select == 6) {
status = 50; //pirate rewards
cm.sendSimple("Select the weapon you would like to trade for. The weapons I have are of the highest quality. Select the one most appealing to you! \r\n#b#L0# #z1482005# (" + n3 + " coins)#l \r\n#b#L1# #z1482006# (" + n4 + " coins)#l \r\n#b#L2# #z1482007# (" + n5 + " coins)#l \r\n#b#L3# #z1492005# (" + n3 + " coins)#l \r\n#b#L4# #z1492006# (" + n4 + " coins)#l \r\n#b#L5# #z1492007# (" + n5 + " coins)#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");
cm.sendSimple("Select the weapon you would like to trade. The weapons I have here are extremely useful. Take a look! \r\n#b#L0# #z1322015# (" + n3 + " coins)#l\r\n#L1# #z1422008# (" + n3 + " coins)#l\r\n#L2# #z1322016# (" + n4 + " coins)#l\r\n#L3# #z1422007# (" + n4 + " coins)#l\r\n#L4# #z1322017# (" + n5 + " coins)#l\r\n#L5# #z1422005# (" + n5 + " coins)#l\r\n#L6# #z1432003# (" + n3 + " coins)#l\r\n#L7# #z1442003# (" + n3 + " coins)#l\r\n#L8# #z1432005# (" + n4 + " coins)#l\r\n#L9# #z1442009# (" + n4 + " coins)#l\r\n#L10# #z1442005# (" + n5 + " coins)#l\r\n#L11# #z1432004# (" + n5 + " coins)#l\r\n#L12# Back to the first page (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);
@@ -305,14 +332,14 @@ function action(mode, type, selection) {
cm.gainItem(4001129, -cost[selection]);
cm.dispose();
} else {
cm.sendOk("Voc<EFBFBD> ou n<>o possui #b#t4001129##k suficientes, ou seu invent<6E>rio est<73> cheio. Verifique novamente.");
cm.sendOk("You do not have enough #b#t4001129##k, or your inventory is full. Please check again.");
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");
cm.sendSimple("Please make sure you have #b#t4001129##k for the weapon you want. Select the weapon you would like to trade #t4001129#. The choices I have are really good, and I'm not the one who speaks to the people who say it! \r\n#b#L0# #z1302004# (" + n3 + " coins)#l\r\n#L1# #z1402006# (" + n3 + " coins)#l\r\n#L2# #z1302009# (" + n4 + " coins)#l\r\n#L3# #z1402007# (" + n4 + " coins)#l\r\n#L4# #z1302010# (" + n5 + " coins)#l\r\n#L5# #z1402003# (" + n5 + " coins)#l\r\n#L6# #z1312006# (" + n3 + " coins)#l\r\n#L7# #z1412004# (" + n3 + " coins)#l\r\n#L8# #z1312007# (" + n4 + " coins)#l\r\n#L9# #z1412005# (" + n4 + " coins)#l\r\n#L10# #z1312008# (" + n5 + " coins)#l\r\n#L11# #z1412003# (" + n5 + " coins)#l\r\n#L12# Continue to the next page(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);
@@ -321,7 +348,7 @@ function action(mode, type, selection) {
cm.gainItem(4001129, -cost[selection]);
cm.dispose();
} else {
cm.sendOk("Voc<EFBFBD> ou n<>o possui #b#t4001129##k suficientes, ou seu invent<6E>rio est<73> cheio. Verifique novamente.");
cm.sendOk("You do not have enough #b#t4001129##k, or your inventory is full. Please check again.");
cm.dispose();
}
}
@@ -333,7 +360,7 @@ function action(mode, type, selection) {
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.sendOk("You do not have enough #b#t4001129##k, or your inventory is full. Please check again.");
cm.dispose();
}
} else if (status == 31) {
@@ -344,7 +371,7 @@ function action(mode, type, selection) {
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.sendOk("You do not have enough #b#t4001129##k, or your inventory is full. Please check again.");
cm.dispose();
}
} else if (status == 41) {
@@ -355,54 +382,65 @@ function action(mode, type, selection) {
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.sendOk("You do not have enough #b#t4001129##k, or your inventory is full. Please check again.");
cm.dispose();
}
} else if (status == 51) {
var item = new Array(1482005, 1482006, 1482007, 1492005, 1492006, 1492007);
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("You do not have enough #b#t4001129##k, or your inventory is full. Please check again.");
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!");
cm.sendNext("Haha! I am Spiegelmann, the leader of this Monster Carnival. I got the first #bMonster Carnival#k here, waiting for travelers like you to take part in this 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.");
cm.sendNext("#bMonster Carnival#k consists of 2 groups entering the battlefield, and dropping the monsters invoked by the other party. #bA combat brigade that determines the victor by the amount of Carnival Points (CP) received#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<>?");
cm.sendNext("When you enter the Carnival Field, you will see the Monster List window appear. All you need to do is #bselect what you want to use, and press OK#k. Very easy, right?");
} 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<EFBFBD>ncia que jamais esquecer<65>! <20> uma #bbatalha contra outros viajantes assim como voc<6F>!#k");
cm.sendNext("What is #bMonster Carnival#k? Hahaha! Let's say it's an experience you'll never forget! It's a battle against other travelers just like you!#k");
} else if (select == 1) {
cm.sendNext("Quando entrar no Campo da Folia, sua tarefa <20> #breceber CP ca<EFBFBD>ando os monstros do grupo oposto, e usar estes CP's para distrair o grupo oposto de ca<63>ar monstros.#k.");
cm.sendNext("When entering the Carnival Field, your task is to #breceive CP by killing the monsters from the opposite group, and using these CP's to distract the opposing group from hitting monsters#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.");
cm.sendNext("Once you get used to the commands, try using #bTAB and F1 ~ F12#k. #bTAB toggles between Monster Invocation / Skills / Protector#k, and, #bF1 ~ F12 enables you to access one of the windows directly#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<EFBFBD>rico. N<>o meu amigo, o que eu ofere<EFBFBD>o <20> competi<EFBFBD><EFBFBD>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<EFBFBD>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<EFBFBD>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");
cm.sendNext("I know it's too dangerous for you to fight with each other using real weapons; and I would not suggest such a barbaric act. Not my friend, what I offer to the competition. The excitement of the battle and the excitement of competing against such strong and motivated people. I offer the premise that your group and the opposite group both #binvoquem the monsters, and defeat the monsters invoked by the opposing group. This is the essence of the Monster Carnival. In addition, you can use Maple Coins earned during the Monster Carnival to get new items and weapons! #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'.");
cm.sendNext("There are 3 ways to distract the opposing group: #bSummoning a monster, Ability, and Protector#k. I will give you a more in-depth look if you want to know more about 'detailed instructions'!");
} 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.");
cm.sendNext("#bSummoning#k a Monster calls a monster that attacks the opposing party, under its control. Use CP to bring an Summoned Monster, and it will appear in the same area, attacking the opposing group.");
}
} 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.sendNext("Of course, it's not that simple. There are other ways to prevent the other group from dropping monsters, and it's up to you to figure out how to do it. What do you think? Interested in a friendly competition?");
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.");
cm.sendNext("Please remember. It's never a good idea to keep your CP's. #bThe CPs you used will help determine the winner and loser of Monster Carnival.");
} 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<EFBFBD>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!");
cm.sendNext("#bAbility#k is an option to use abilities such as Darkness, Weakness, and others to prevent the opposing group from killing other monsters. Not many CPs are needed, but it's worth it. The only problem is they do not last very long. Use this tactic wisely!");
}
} 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.sendNext("Oh, and do not worry about turning into a ghost. In the Monster Carnival, #byou will not lose EXP after death#k. So it's really an experience like no other!");
cm.dispose();
} else if (select == 2) {
cm.sendNext("#bProtetor#k <20> basicamente um item invocado que aumenta dr<EFBFBD>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.");
cm.sendNext("#bProtetor#k basically an invoked item that drastically increases the abilities of the monsters invoked by your group. Protector works until it is demolished by the opposing group, so I'm hoping you'll summon several monsters first, and then bring the Protector.");
}
} 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.sendNext("Lastly, while in the Monster Carnival, #byou can not use items / recovery potions that you carry around with you. #kMeanwhile, the monsters let these items fall for good. when, and when you #bget them, the item will immediately activate#k. That's why it's important to know when to get these items.");
cm.dispose();
} else if (status == 77) {
var allDone;