Reactor Loot + Obstacles damage mob + Static calls from scripts

Revised starting AP, now working out with flags. To supply the 9AP shortage of 4/4/4/4, two options: one giving out 9 AP from the start, other giving 4/5 AP when changing jobs (1st, 2nd). This change would also work with the autoassign for beginners flag.
Refactored several quest scripts, that would be glitching the player when doing quest start/complete and disposing under the same script status.
Cleared some cases with the quest reward system where it would call out a "full inventory" even though new inventory slots could get discovered when doing the quest loot transaction.
Fixed an issue with player stores being deployed overlapping in a few scenarios.
Fixed reduced EXP gain from kills when triggering skill Mortal Blow.
Added "open Duey" functionality when clicking "O" in the incoming package notification.
Fixed packages without messages (a quirk from quick delivery) not accounting visually as a "quick" one.
Fixed certain mounts (non-item skill mounts, such as Yeti or Spaceship) not showing up properly to other players when changing maps.
Added handler for mob damage by environment objects (OrbisPQ jail storage area).
Added a placeholder on mob's stolen items to prevent more steals to be placed as soon as the Steal mechanism is triggered.
Patched boss logs not removing recent entries from the DB tables (the reset method is actually supposed to clear every entry).
Revised a possible memory leak scenario happening due to an exception thrown midway monster kill method.
Improved reactor drops, now placing loots visible for the acting player centered (similar as to how mob loots work).
Refactored several issues in scripts, related to accessing static Java methods through an object, that would start appearing after transitioning to Java 8.
This commit is contained in:
ronancpl
2019-08-14 21:14:15 -03:00
parent 2c16a4d908
commit f958624f6a
233 changed files with 2368 additions and 888 deletions

View File

@@ -10,6 +10,9 @@ Known issues:
- If there are multiple bosses that shows HPBar on the map, if a player hits more than one the HPBar may start flickering on the screen.
- Sometimes battleship may behave oddly with the enhanced buff system, making the character d/c in certain scenarios.
- Dragon Roar doesn't show the stun effect to players.
- Cygnus job 'Final Attack' skills not functional.
- Steal skill doesn't deduct the loot from the drop pool from a mob.
- Using Shark Wave with Transformation on female thunderbreakers will cause consecutive attacks to proc immediately.
- Snipe will show much higher damage value than actually applicable to the attacker.
- Some monster status such as freeze and weapon/magic reflect doesn't behave properly in certain scenarios. Freeze seems to not work on mobs with low OID or are starters from server boot time.
- On low-end connections, things such as command summoning a player that is currently logging in (already visible to other players) may cause the player to freeze, consequently freezing the account as well since the server-side disconnection doesn't happen.

View File

@@ -2050,3 +2050,37 @@ Corrigido funcionalidade de loot explosivo de mobs não aplicando devidamente.
Corrigido linguagens, bastante usado na MCPQ, não utilizando o valor requisitado pelo jogador ao logar/trocar de canais.
Corrigido casos de NPE ao tentar realizar updates de posição lado-servidor em alguns summons de jogador.
Revisado reset de reatores em reatores que estão desaparecidos por um tempo, para retornar de imediato.
31 Julho 2019,
Revisado AP inicial de jogadores, agora mantendo dois sistemas para suprir a falta de 9 AP's. Ambos com AP's começando em 4/4/4/4: 0AP inicialmente, com ganhos de 4AP na primeira mudança de classe e 5AP na segunda mudança. Se não estiver usando esse método, jogadores possuem de início 9 AP's à disposição.
02 Agosto 2019,
Refatorado vários scripts de quests, não mais realizando disposes e envio de caixas de texto no mesmo status.
05 Agosto 2019,
Revisado casos onde o sistema de recompensas de quests avisa "inventário cheio" mesmo embora novos espaços pudessem ser encontrados na retirada de itens.
Corrigido posicionamento não-verificado de lojas criadas por jogadores.
Corrigido ganho reduzido de EXP ao utilizar skill Mortal Blow.
Corrigido clique em "O" na UI de recepção de itens pelo Duey não realizando ação alguma.
Corrigido representação de "quick" na lista de pacotes recebidos pelo Duey não constando os pacotes enviados sem mensagem escrita.
Revisado certos casos onde itens enviados com "quick delivery" não conseguiam ser recebidos imediatamente.
06 Agosto 2019,
Corrigido certas montarias não-ligadas a itens de inventário não atuando devidamente ao transicionar mapas (terceiros não conseguiam visualizar a montaria).
Revisado os vários scripts de quests anteriormente refatorado. Adição: último if status sinalizando disposes de caixas de texto nos penúltimos status.
08 - 10 Agosto 2019,
Adicionado handler para aplicação de dano em mobs por objetos de ambiente.
Revisado uso de Steal ao aplicar dano, preenchendo lista (e buscando evitar novas aplicações) assim que utilizado.
Setado checagem para limites de lobbyid ao se iniciar uma instância de evento.
Revisado boss logs somente removendo os itens da tabela a partir de um dia antes, não todas as entradas, assim que a tarefa de reset é iniciada.
Refatorado elementos não-condizentes com o padrão de design Factory na classe geradora de mapas.
Revisado possível cenário de vazamento de memória ocorrido devido a exceção lançada em algum trecho entre removeKilledMonsterObject e dispatchMonsterKilled.
Aprimorado loots de reatores, agora colocando loots visíveis ao jogador no centro, similarmente a como loots de mobs ocorrem.
Ajustado frequência de loots de reatores para 200ms.
12 - 14 Agosto 2019,
Refatorado vários casos de erros em acessos a funções estáticas a partir de scripts, que passou a ocorrer após trocar de versão Java.
Corrigido listas que mantém conteúdo dos mundos e canais esvaziando antes que os processos em execução do TimerManager terminem de executar, no momento do sinal de shutdown do servidor.
Revisado update de quests para o jogador durante script de quests, problema permite movimento enquanto o mesmo ainda está falando com o NPC.
Revisado novamente os scripts de quest! Problema detectado envolvia incidências de iniciar e completar de quests com disposes na mesma estrutura status.

View File

@@ -31,7 +31,7 @@ var maxMapId = 108010101;
var eventTime = 20; //20 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -31,7 +31,7 @@ var maxMapId = 108010201;
var eventTime = 20; //20 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -33,7 +33,7 @@ var eventMaps = [923010000];
var eventTime = 5; //5 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -31,7 +31,7 @@ var maxMapId = 108010501;
var eventTime = 20; //20 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -31,7 +31,7 @@ var maxMapId = 108010401;
var eventTime = 20; //20 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -31,7 +31,7 @@ var maxMapId = 108010301;
var eventTime = 20; //20 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -30,7 +30,7 @@ var maxMapId = 912020000;
var eventTime = 2; //2 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -30,7 +30,7 @@ var maxMapId = 912010200;
var eventTime = 4; //4 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -30,7 +30,7 @@ var maxMapId = 912010200;
var eventTime = 4; //4 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -31,7 +31,7 @@ var maxMapId = 921110000;
var eventTime = 3; //3 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -31,7 +31,7 @@ var maxMapId = 914030000;
var eventTime = 3; //3 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -31,7 +31,7 @@ var maxMapId = 910520000;
var eventTime = 10; //10 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function setLobbyRange() {
return lobbyRange;

View File

@@ -35,7 +35,7 @@ var maxMapId = 925010300;
var eventTime = 6; // 6 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function init() {
setEventRequirements();

View File

@@ -36,7 +36,7 @@ var maxMapId = 922020100;
var eventTime = 20; // 20 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function init() {
setEventRequirements();

View File

@@ -33,7 +33,7 @@ var maxMapId = 914020000;
var eventTime = 10; // 10 minutes
var lobbyRange = [0, 0];
var lobbyRange = [0, 7];
function init() {}

View File

@@ -57,8 +57,10 @@ function action(mode, type, selection) {
if (cm.getPlayer().getGuildId() < 1 || cm.getPlayer().getGuildRank() != 1) {
cm.sendOk("You can only increase your Guild's capacity if you are the leader.");
cm.dispose();
} else
cm.sendYesNo("Increasing your Guild capacity by #b5#k costs #b " + cm.getPlayer().getGuild().getIncreaseGuildCost(cm.getPlayer().getGuild().getCapacity()) +" mesos#k, are you sure you want to continue?");
} else {
var MapleGuild = Java.type("net.server.guild.MapleGuild"); // thanks Conrad for noticing an issue due to call on a static method here
cm.sendYesNo("Increasing your Guild capacity by #b5#k costs #b " + MapleGuild.getIncreaseGuildCost(cm.getPlayer().getGuild().getCapacity()) +" mesos#k, are you sure you want to continue?");
}
}
} else if (status == 2) {
if (sel == 0 && cm.getPlayer().getGuildId() <= 0) {

View File

@@ -21,6 +21,8 @@
Marriage NPC
*/
importPackage(Packages.net.server.channel);
var status;
var wid;
var isMarrying;
@@ -176,7 +178,7 @@ function action(mode, type, selection) {
if(resStatus > 0) {
cm.gainItem((weddingType) ? weddingEntryTicketPremium : weddingEntryTicketCommon, -1);
var expirationTime = cserv.getRelativeWeddingTicketExpireTime(resStatus);
var expirationTime = Channel.getRelativeWeddingTicketExpireTime(resStatus);
cm.gainItem(weddingSendTicket,15,false,true,expirationTime);
partner.getAbstractPlayerInteraction().gainItem(weddingSendTicket,15,false,true,expirationTime);
@@ -251,7 +253,7 @@ function action(mode, type, selection) {
if(cm.canHold(weddingSendTicket, 3)) {
cm.gainItem(5251100, -1);
var expirationTime = cserv.getRelativeWeddingTicketExpireTime(resStatus);
var expirationTime = Channel.getRelativeWeddingTicketExpireTime(resStatus);
cm.gainItem(weddingSendTicket,3,false,true,expirationTime);
} else {
cm.sendOk("Please have a free ETC slot available to get more invitations.");

View File

@@ -21,6 +21,8 @@
Marriage NPC
*/
importPackage(Packages.net.server.channel);
var status;
var wid;
var isMarrying;
@@ -176,7 +178,7 @@ function action(mode, type, selection) {
if(resStatus > 0) {
cm.gainItem((weddingType) ? weddingEntryTicketPremium : weddingEntryTicketCommon, -1);
var expirationTime = cserv.getRelativeWeddingTicketExpireTime(resStatus);
var expirationTime = Channel.getRelativeWeddingTicketExpireTime(resStatus);
cm.gainItem(weddingSendTicket,15,false,true,expirationTime);
partner.getAbstractPlayerInteraction().gainItem(weddingSendTicket,15,false,true,expirationTime);
@@ -251,7 +253,7 @@ function action(mode, type, selection) {
if(cm.canHold(weddingSendTicket, 3)) {
cm.gainItem(5251100, -1);
var expirationTime = cserv.getRelativeWeddingTicketExpireTime(resStatus);
var expirationTime = Channel.getRelativeWeddingTicketExpireTime(resStatus);
cm.gainItem(weddingSendTicket,3,false,true,expirationTime);
} else {
cm.sendOk("Please have a free ETC slot available to get more invitations.");

View File

@@ -99,14 +99,14 @@ function action(mode, type, selection) {
if(status == 0) {
if(!cm.isQuestStarted(100400)) {
cm.sendOk("Hello #b#h0##k, I'm #p9201001# the fairy of Love.");
cm.sendOk("Hello #b#h0##k, I'm #p9201023# the fairy of Love."); // thanks Periwinks (LuckyStory) for noticing Nana's introducing themselves as Nana (H)
cm.dispose();
return;
}
nanaLoc = getNanaLocation(cm.getPlayer());
if(nanaLoc == -1) {
cm.sendOk("Hello #b#h0##k, I'm #p9201001# the fairy of Love.");
cm.sendOk("Hello #b#h0##k, I'm #p9201023# the fairy of Love.");
cm.dispose();
return;
}

View File

@@ -99,14 +99,14 @@ function action(mode, type, selection) {
if(status == 0) {
if(!cm.isQuestStarted(100400)) {
cm.sendOk("Hello #b#h0##k, I'm #p9201001# the fairy of Love.");
cm.sendOk("Hello #b#h0##k, I'm #p9201024# the fairy of Love.");
cm.dispose();
return;
}
nanaLoc = getNanaLocation(cm.getPlayer());
if(nanaLoc == -1) {
cm.sendOk("Hello #b#h0##k, I'm #p9201001# the fairy of Love.");
cm.sendOk("Hello #b#h0##k, I'm #p9201024# the fairy of Love.");
cm.dispose();
return;
}

View File

@@ -99,14 +99,14 @@ function action(mode, type, selection) {
if(status == 0) {
if(!cm.isQuestStarted(100400)) {
cm.sendOk("Hello #b#h0##k, I'm #p9201001# the fairy of Love.");
cm.sendOk("Hello #b#h0##k, I'm #p9201025# the fairy of Love.");
cm.dispose();
return;
}
nanaLoc = getNanaLocation(cm.getPlayer());
if(nanaLoc == -1) {
cm.sendOk("Hello #b#h0##k, I'm #p9201001# the fairy of Love.");
cm.sendOk("Hello #b#h0##k, I'm #p9201025# the fairy of Love.");
cm.dispose();
return;
}

View File

@@ -99,14 +99,14 @@ function action(mode, type, selection) {
if(status == 0) {
if(!cm.isQuestStarted(100400)) {
cm.sendOk("Hello #b#h0##k, I'm #p9201001# the fairy of Love.");
cm.sendOk("Hello #b#h0##k, I'm #p9201026# the fairy of Love.");
cm.dispose();
return;
}
nanaLoc = getNanaLocation(cm.getPlayer());
if(nanaLoc == -1) {
cm.sendOk("Hello #b#h0##k, I'm #p9201001# the fairy of Love.");
cm.sendOk("Hello #b#h0##k, I'm #p9201026# the fairy of Love.");
cm.dispose();
return;
}

View File

@@ -99,14 +99,14 @@ function action(mode, type, selection) {
if(status == 0) {
if(!cm.isQuestStarted(100400)) {
cm.sendOk("Hello #b#h0##k, I'm #p9201001# the fairy of Love.");
cm.sendOk("Hello #b#h0##k, I'm #p9201027# the fairy of Love.");
cm.dispose();
return;
}
nanaLoc = getNanaLocation(cm.getPlayer());
if(nanaLoc == -1) {
cm.sendOk("Hello #b#h0##k, I'm #p9201001# the fairy of Love.");
cm.sendOk("Hello #b#h0##k, I'm #p9201027# the fairy of Love.");
cm.dispose();
return;
}

View File

@@ -75,6 +75,7 @@ function writeFeatureTab_Quests() {
addFeature("Rewarding system now looks up for item stacking.");
addFeature("3rd job quiz with all 40-question pool available.");
addFeature("Item raising functional.");
addFeature("Cleared issue with player movement during NPC talk.");
}
function writeFeatureTab_PlayerSocialNetwork() {
@@ -295,7 +296,7 @@ function writeAllFeatures() {
feature_cursor = [];
var tabName = (tabs[i]).replace(re, "");
eval("writeFeatureTab_" + tabName)();
this["writeFeatureTab_" + tabName]();
feature_tree.push(feature_cursor);
}

View File

@@ -1,6 +1,8 @@
importPackage(Packages.tools);
function enter(pi) {
var leverSequenceExit = false;
function enterLeverSequence(pi) {
var map = pi.getMap();
var jailn = (pi.getMap().getId() / 10) % 10;
@@ -44,3 +46,27 @@ function enter(pi) {
pi.playPortalSound(); pi.warp(pi.getMapId() + 2,0);
return true;
}
function enterNoMobs(pi) {
var map = pi.getMap();
var mobcount = map.countMonster(9300044);
if (mobcount > 0) {
pi.playerMessage(5, "Please use the levers to defeat all the threats before you proceed.");
return false;
} else {
pi.playPortalSound(); pi.warp(pi.getMapId() + 2,0);
return true;
}
}
function enter(pi) {
var ret;
if (leverSequenceExit) {
ret = enterLeverSequence(pi);
} else {
ret = enterNoMobs(pi);
}
return ret;
}

View File

@@ -10,13 +10,14 @@ function start(mode, type, selection) {
status++;
else
qm.dispose();
if (status == 0)
if (status == 0) {
qm.sendAcceptDecline("Hello, #h0#. Welcome to Maple World. It's currently event season, and we're welcome new characters with a gift. Would you like your gift now?");
else if (status == 1) {
} else if (status == 1) {
qm.sendOk("Open your inventory and double-click on it! These gifts will make you look stylish. Oh, one more thing! You'll get another gift at level 30. Good luck!");
qm.forceStartQuest();
qm.forceCompleteQuest();
qm.gainItem(2430191, 1, true);
qm.sendOk("Open your inventory and double-click on it! These gifts will make you look stylish. Oh, one more thing! You'll get another gift at level 30. Good luck!");
} else if (status == 2) {
qm.dispose();
}
}

View File

@@ -44,13 +44,16 @@ function start(mode, type, selection) {
else if (status == 2)
qm.sendAcceptDecline("Ah, I don't know if you are aware of this, but you won't find any monsters here in Ereve. Any form of evil will not be able to set foot on this island. Don't worry, you'll still have your opportunity to train here. Shinsoo created a fantasy creature called Mimi, which will be used as your training partners. Shall we begin?");
else if (status == 3) {
qm.forceStartQuest();
qm.forceCompleteQuest();
qm.gainExp(60);
qm.gainItem(2000020, 10); // Red Potion for Noblesse * 10
qm.gainItem(2000021, 10); // Blue Potion for Noblesse * 10
qm.gainItem(1002869, 1); // Elegant Noblesse Hat * 1
qm.sendOk("Ha, I like your enthusiasm, but you must prepare yourself for the training first before we start things off. Make sure that you are equipped with weapons, and that your skills are calibrated and ready to be used. I also gave you some potions, so have it ready just in case. Let me know when you're ready. You're going to wish that you didn't sign up to become a Cygnus Knight.");
qm.forceStartQuest();
qm.forceCompleteQuest();
} else if (status == 4) {
qm.dispose();
}
}

View File

@@ -34,11 +34,12 @@ function start(mode, type, selection) {
if (mode < 1) {
qm.dispose();
}
if (mode > 0)
else if (mode > 0)
status++;
if (status == 0)
qm.sendSimple("Are you ready to take on a mission? If you can't pass this test, then you won't be able to call yourself a real Knight. Are you sure you can do this? If you are afraid to do this, let me know. I won't tell Neinheart. \r\n #L0#I'll try this later.#l \r\n #L1#I'm not afraid. Let's do this.#l");
else if (selection == 0) {
else if (status == 1) {
if (selection == 0) {
qm.sendNext("If you call yourself a Knight, then do not hesitate. Show everyone how much courage you have in you.");
qm.dispose();
} else if (selection == 1) {
@@ -47,4 +48,7 @@ function start(mode, type, selection) {
qm.forceStartQuest();
qm.forceCompleteQuest();
}
} else if (status == 2) {
qm.dispose();
}
}

View File

@@ -50,8 +50,9 @@ function start(mode, type, selection) {
} else if (status == 11) {
qm.sendNextPrev("But no one starts as a strong Knight on day one. The Empress didn't want someone strong. She wanted someone with courage whom she could develop into a strong Knight through rigorous training. So, you should first become a Knight-in-Training. We'll talk about your missions when you get to that point.");
} else if (status == 12) {
qm.sendPrev("Take the portal on the left to reach the Training Forest. There, you will find #p1102000#, the Training Instructor, who will teach you how to become stronger. I don't want to find you wandering around aimlessly until you reach Lv. 10, you hear?");
qm.forceCompleteQuest();
qm.sendPrev("Take the portal on the left to reach the Training Forest. There, you will find #p1102000#, the Training Instructor, who will teach you how to become stronger. I don't want to find you wandering around aimlessly until you reach Lv. 10, you hear?");
} else if (status == 13) {
qm.dispose();
}
}

View File

@@ -39,9 +39,11 @@ function start(mode, type, selection) {
if (status == 0)
qm.sendAcceptDecline("Ahhh, you're back. I can see that you're at level 10 now. It looks like you're flashing a glimmer of hope towards becoming a Knight. The basic training has now ended, and it's time for you to make the decision.");
else if (status == 1) {
qm.sendOk("Now look to the left. The leaders of the Knights will be waiting for you. There will be 5 paths for you to choose from. All you need to do is choose one of them. All 5 of them will lead you to the path of a Knight, so... I suggest you pay attention to what each path offers, and select the one you'd most like to take.");
qm.forceStartQuest();
qm.forceCompleteQuest();
qm.sendOk("Now look to the left. The leaders of the Knights will be waiting for you. There will be 5 paths for you to choose from. All you need to do is choose one of them. All 5 of them will lead you to the path of a Knight, so... I suggest you pay attention to what each path offers, and select the one you'd most like to take.");
} else if (status == 2) {
qm.dispose();
}
}

View File

@@ -49,6 +49,7 @@ function end(mode, type, selection) {
qm.sendNextPrev("Unlike your time as a Nobless, once you become the Dawn Warrior, you will lost a portion of your EXP when you run out of HP, okay?");
} else if (status == 5) {
qm.sendNextPrev("Now... I want you to go out there and show the world how the Knights of Cygnus operate.");
} else if (status == 6) {
qm.dispose();
}
}

View File

@@ -49,6 +49,7 @@ function end(mode, type, selection) {
qm.sendNextPrev("Unlike your time as a Nobless, once you become the Blaze Wizard, you will lost a portion of your EXP when you run out of HP, okay?");
} else if (status == 5) {
qm.sendNextPrev("Now... I want you to go out there and show the world how the Knights of Cygnus operate.");
} else if (status == 6) {
qm.dispose();
}
}

View File

@@ -50,6 +50,7 @@ function end(mode, type, selection) {
qm.sendNextPrev("Unlike your time as a Nobless, once you become the Wind Archer, you will lost a portion of your EXP when you run out of HP, okay?");
} else if (status == 5) {
qm.sendNextPrev("Now... I want you to go out there and show the world how the Knights of Cygnus operate.");
} else if (status == 6) {
qm.dispose();
}
}

View File

@@ -50,6 +50,7 @@ function end(mode, type, selection) {
qm.sendNextPrev("Unlike your time as a Nobless, once you become the Night Walker, you will lost a portion of your EXP when you run out of HP, okay?");
} else if (status == 5) {
qm.sendNextPrev("Now... I want you to go out there and show the world how the Knights of Cygnus operate.");
} else if (status == 6) {
qm.dispose();
}
}

View File

@@ -49,6 +49,7 @@ function end(mode, type, selection) {
qm.sendNextPrev("Unlike your time as a Nobless, once you become the Thunder Breaker, you will lost a portion of your EXP when you run out of HP, okay?");
} else if (status == 5) {
qm.sendNextPrev("Now... I want you to go out there and show the world how the Knights of Cygnus operate.");
} else if (status == 6) {
qm.dispose();
}
}

View File

@@ -44,7 +44,9 @@ function start(mode, type, selection) {
} else if (status == 1) {
qm.startQuest();
qm.completeQuest();
qm.sendOk("If you wish to take the Knighthood Exam, please come to Ereve. Each Chief Knight will test your abilities, and if you meet their standards, then you will officially become a Knight.");
} else if (status == 2) {
qm.dispose();
}
}

View File

@@ -48,19 +48,18 @@ function start(mode, type, selection) {
nPSP = (qm.getPlayer().getLevel() - 70) * 3;
if (qm.getPlayer().getRemainingSp() > nPSP) {
qm.sendNext("You still have way too much #bSP#k with you. You can't earn a new title like that, I strongly urge you to use more SP on your 1st and 2nd level skills.");
qm.dispose();
} else {
if (!qm.canHold(1142068)) {
qm.sendNext("If you wish to receive the medal befitting the title, you may want to make some room in your equipment inventory.");
qm.dispose();
} else {
qm.completeQuest();
qm.gainItem(1142068, 1);
qm.getPlayer().changeJob(Packages.client.MapleJob.DAWNWARRIOR3);
qm.sendOk("#h #, as of this moment, you are an Advanced Knight. From this moment on, you shall carry yourself with dignity and respect befitting your new title, an Advanced Knight of Cygnus Knights. May your glory continue to shine as bright as this moment.");
qm.completeQuest();
}
}
} else if (status == 3) {
qm.dispose();
}
}
}
}
}

View File

@@ -48,20 +48,18 @@ function start(mode, type, selection) {
nPSP = (qm.getPlayer().getLevel() - 70) * 3;
if (qm.getPlayer().getRemainingSp() > nPSP) {
qm.sendNext("You still have way too much #bSP#k with you. You can't earn a new title like that, I strongly urge you to use more SP on your 1st and 2nd level skills.");
qm.dispose();
} else {
if (!qm.canHold(1142068)) {
qm.sendNext("If you wish to receive the medal befitting the title, you may want to make some room in your equipment inventory.");
qm.dispose();
} else {
qm.completeQuest();
qm.gainItem(1142068, 1);
qm.getPlayer().changeJob(Packages.client.MapleJob.BLAZEWIZARD3);
qm.sendOk("#h #, as of this moment, you are an Advanced Knight. From this moment on, you will train yourself with fervor as you will lead your group of Knights for the safety of this world. That fervor will provide you with plenty of courage.");
qm.completeQuest();
}
}
} else if (status == 3) {
qm.dispose();
}
}
}
}
}

View File

@@ -48,20 +48,18 @@ function start(mode, type, selection) {
nPSP = (qm.getPlayer().getLevel() - 70) * 3;
if (qm.getPlayer().getRemainingSp() > nPSP) {
qm.sendNext("You still have way too much #bSP#k with you. You can't earn a new title like that, I strongly urge you to use more SP on your 1st and 2nd level skills.");
qm.dispose();
} else {
if (!qm.canHold(1142068)) {
qm.sendNext("If you wish to receive the medal befitting the title, you may want to make some room in your equipment inventory.");
qm.dispose();
} else {
qm.completeQuest();
qm.gainItem(1142068, 1);
qm.getPlayer().changeJob(Packages.client.MapleJob.WINDARCHER3);
qm.sendOk("#h #, as of this moment, you are an Advanced Knight. From this moment on, you will be carrying a while lot of responsibility befitting your new title as an Advanced Knight of Cygnus Knights. You may view the world in a carefree mode, but please remember what your mission is.");
qm.completeQuest();
}
}
} else if (status == 3) {
qm.dispose();
}
}
}
}
}

View File

@@ -48,20 +48,18 @@ function start(mode, type, selection) {
nPSP = (qm.getPlayer().getLevel() - 70) * 3;
if (qm.getPlayer().getRemainingSp() > nPSP) {
qm.sendNext("You still have way too much #bSP#k with you. You can't earn a new title like that, I strongly urge you to use more SP on your 1st and 2nd level skills.");
qm.dispose();
} else {
if (!qm.canHold(1142068)) {
qm.sendNext("If you wish to receive the medal befitting the title, you may want to make some room in your equipment inventory.");
qm.dispose();
} else {
qm.gainItem(1142068, 1);
qm.getPlayer().changeJob(Packages.client.MapleJob.NIGHTWALKER3);
qm.sendOk("#h #, from here on out, you are an Advanced Knight of Cygnus Knights. The title comes with a newfound broad view on everything. You may encounter temptations here and there, but I want you to keep your faith and beliefs intact and do not succumb to the darkness.");
qm.completeQuest();
qm.sendOk("#h #, from here on out, you are an Advanced Knight of Cygnus Knights. The title comes with a newfound broad view on everything. You may encounter temptations here and there, but I want you to keep your faith and beliefs intact and do not succumb to the darkness.");
}
}
} else if (status == 3) {
qm.dispose();
}
}
}
}
}

View File

@@ -48,20 +48,18 @@ function start(mode, type, selection) {
nPSP = (qm.getPlayer().getLevel() - 70) * 3;
if (qm.getPlayer().getRemainingSp() > nPSP) {
qm.sendNext("You still have way too much #bSP#k with you. You can't earn a new title like that, I strongly urge you to use more SP on your 1st and 2nd level skills.");
qm.dispose();
} else {
if (!qm.canHold(1142068)) {
qm.sendNext("If you wish to receive the medal befitting the title, you may want to make some room in your equipment inventory.");
qm.dispose();
} else {
qm.gainItem(1142068, 1);
qm.getPlayer().changeJob(Packages.client.MapleJob.THUNDERBREAKER3);
qm.sendOk("#h #, from here on out, you will become an Advanced Knight of the Knights of Cygnus! As your standing rises, so does the difficulty of the tasks you will be receiving. But challenge is good, right? You have to enjoy life. Enjoy what's given to you!");
qm.completeQuest();
qm.sendOk("#h #, from here on out, you will become an Advanced Knight of the Knights of Cygnus! As your standing rises, so does the difficulty of the tasks you will be receiving. But challenge is good, right? You have to enjoy life. Enjoy what's given to you!");
}
}
} else if (status == 3) {
qm.dispose();
}
}
}
}
}

View File

@@ -1,7 +1,6 @@
importPackage(Packages.client);
var item;
var stance;
var status = -1;
var item;
@@ -23,8 +22,7 @@ function end(mode, type, selection) {
return;
}
stance = qm.getPlayer().getJobStyle();
var stance = qm.getPlayer().getJobStyle();
if(stance == Packages.client.MapleJob.WARRIOR) item = 1072003;
else if(stance == Packages.client.MapleJob.MAGICIAN) item = 1072077;
else if(stance == Packages.client.MapleJob.BOWMAN || stance == Packages.client.MapleJob.CROSSBOWMAN) item = 1072081;
@@ -34,11 +32,13 @@ function end(mode, type, selection) {
qm.gainItem(item, 1);
qm.gainItem(4000007, -150);
qm.gainExp(2200);
qm.completeQuest();
qm.sendOk("Alright, if you need work sometime down the road, feel free to come back and see me. This town sure can use a person like you for help~");
}
else if (status == 2) {
qm.dispose();
}
}

View File

@@ -44,6 +44,7 @@ function start(mode, type, selection) {
qm.forceStartQuest();
qm.forceCompleteQuest();
qm.sendOk("There's a special mount that only the Cygnus Knights can enjoy. If you are interested, visit #bEreve#k. I will give you more information on it.");
} else if (status == 3) {
qm.dispose();
}
}

View File

@@ -54,6 +54,7 @@ function start(mode, type, selection) {
qm.forceStartQuest();
if(!qm.haveItem(4220137)) qm.gainItem(4220137);
qm.sendOk("Mimiana's egg can be raised by #bsharing your daily experiences with it#k. Once Mimiana fully grows up, please come see me.");
} else if (status == 4) {
qm.dispose();
}
}
@@ -70,16 +71,14 @@ function end(mode, type, selection) {
} else if (status == 1) { //pretty sure there would need to have an egg EXP condition... Whatever.
if(!qm.haveItem(4220137)) {
qm.sendOk("I see, you lost your egg... You need to be more careful when raising a baby Mimiana!");
qm.dispose();
return;
}
qm.sendOk("Oh, were you able to awaken Mimiana Egg? That's amazing... Most knights can't even dream of awakening it in such a short amount of time.");
qm.forceCompleteQuest();
qm.gainItem(4220137, -1);
qm.gainExp(37600);
qm.sendOk("Oh, were you able to awaken Mimiana Egg? That's amazing... Most knights can't even dream of awakening it in such a short amount of time.");
} else if (status == 2) {
qm.dispose();
}
}

View File

@@ -55,6 +55,7 @@ function start(mode, type, selection) {
if(!qm.haveItem(4220137)) qm.gainItem(4220137);
qm.sendOk("Mimiana's egg can be raised by #bsharing your daily experiences with it#k. Once Mimiana fully grows up, please come see me. One more thing, I talked with #p2060005# beforehand and retrieved the #b#t4032117##k for you. The price to charge remains the same: #r10,000,000 mesos#k.");
} else if (status == 4) {
qm.dispose();
}
}
@@ -80,13 +81,12 @@ function end(mode, type, selection) {
return;
}
qm.sendOk("Okay, you now may mount Mimiana again. Take good care of it this time.");
qm.forceCompleteQuest();
qm.gainItem(1902005, 1);
qm.gainItem(4220137, -1);
qm.gainMeso(-10000000);
qm.forceCompleteQuest();
qm.sendOk("Okay, you now may mount Mimiana again. Take good care of it this time.");
} else if (status == 2) {
qm.dispose();
}
}

View File

@@ -38,12 +38,12 @@ function start(mode, type, selection) {
var mount = qm.getPlayer().getMount();
if(mount != null && mount.getLevel() >= 3) {
qm.sendNext("Alright, I'll get you started in how to train Mimio, the next step for Mimianas. When you're ready, talk to me again.");
qm.forceCompleteQuest();
qm.sendNext("Alright, I'll get you started in how to train Mimio, the next step for Mimianas. When you're ready, talk to me again.");
} else {
qm.sendNext("It looks like your Mimiana haven't reached #rlevel 3#k yet. Please train it a bit more before trying to advance it.");
}
} else if (status == 1) {
qm.dispose();
}
}

View File

@@ -9,7 +9,7 @@ function start(mode, type, selection) {
if (status == 0) {
qm.sendAcceptDecline("#h0#. Have you been slacking off on training since reaching Level 100? We all know how powerful you are, but the training is not complete. Take a look at these Knight Commanders. They train day and night, preparing themselves for the possible encounter with the Black Mage.");
} else {
} else if (status == 1) {
if (mode == 1) {
qm.forceStartQuest();
}

View File

@@ -14,7 +14,9 @@ function start(mode, type, selection) {
qm.sendOk("Well, what you're doing right now doesn't make you look like someone that's humble. You just look complacent by doing that, and that's never a good thing.");
} else {
qm.forceStartQuest();
qm.dispose();
}
} else if (status == 2) {
qm.dispose();
}
}

View File

@@ -48,6 +48,7 @@ function start(mode, type, selection) {
} else if (status == 4) {
qm.forceStartQuest();
qm.sendOk("My brother #bPuir #kis just down the street, and he's been dying to meet you! I know you're busy, but could you please stop by and say hello to Puir? Please...");
} else if (status == 5) {
qm.dispose();
}
}

View File

@@ -71,14 +71,16 @@ function end(mode, type, selection) {
if(qm.isQuestCompleted(21012))
qm.dropMessage(1,"Unknown Error");
else if(qm.canHold(2000022) && qm.canHold(2000023)){
qm.forceCompleteQuest();
qm.gainExp(57);
qm.gainItem(2000022, 10);
qm.gainItem(2000023, 10);
qm.forceCompleteQuest();
qm.sendOk("#b(Even if you're really the hero everyone says you are... What good are you without any skills?)", 3);
qm.dispose();
}else
} else {
qm.dropMessage(1,"Your inventory is full");
qm.dispose();
}
} else if (status == 2) {
qm.dispose();
}
}

View File

@@ -73,7 +73,7 @@ function end(mode, type, selection) {
qm.gainItem(4032309, -1);
qm.gainItem(4032310, -1);
qm.gainItem(3010062, 1);
qm.sendNextPrev("Here, a fully-assembled chair, just for you! I've always wanted to give you a chair as a gift, because I know a hero can occasionally use some good rest. Tee hee.", 9);
qm.sendNext("Here, a fully-assembled chair, just for you! I've always wanted to give you a chair as a gift, because I know a hero can occasionally use some good rest. Tee hee.", 9);
} else if (status == 2) {
qm.sendNext("A hero is not invincible. A hero is human. I'm sure you will face challenges and even falter at times. But you are a hero because you have what it takes to overcome any obstacles you may encounter.", 9);
} else if (status == 3) {

View File

@@ -31,6 +31,7 @@ function start(mode, type, selection) {
qm.sendOk("If the #p1201001# reacts to you, then we'll know that you're #bAran#k, the hero that wielded a #p1201001#.", 8);
qm.showIntro("Effect/Direction1.img/aranTutorial/ClickPoleArm");
}
} else if (status == 8) {
qm.dispose();
}
}

View File

@@ -35,6 +35,7 @@ function start(mode, type, selection) {
qm.sendAcceptDecline("How is the training going? Wow, you've reached such a high level! That's amazing. I knew you would do just fine on Victoria Island... Oh, look at me. I'm wasting your time. I know you're busy, but you'll have to return to the island for a bit.");
else if(status == 1){
qm.sendOk("Your #b#p1201001##k in #b#m140000000##k is acting strange all of a sudden. According to the records, the Polearm acts this way when it is calling for its master. #bPerhaps it's calling for you#k. Please return to the island and check things out.");
} else if(status == 2){
qm.startQuest();
qm.dispose();
}

View File

@@ -60,7 +60,6 @@ function end(mode, type, selection) {
if(!qm.isQuestCompleted(21201)) {
if(!qm.canHold(1142130)) {
qm.sendOk("Wow, your #bequip#k inventory is full. I need you to make at least 1 empty slot to complete this quest."); // thanks MedicOP for finding an issue here
qm.dispose();
return;
}
@@ -78,6 +77,7 @@ function end(mode, type, selection) {
}
qm.sendNext("Your level isn't what it used to be back in your glory days, so I can't restore all of your old abilities. But the few I can restore should help you level up faster. Now hurry up and train so you can return to the old you.");
} else if (status == 9) {
qm.dispose();
}
}

View File

@@ -42,7 +42,7 @@ function start(mode, type, selection) {
qm.sendAcceptDecline("I'm too old to make weapons now, but.. I do have a Polearm that I made way back when. It's still in excellent shape. But I can't give it to you because that Polearm is extremely sharp, so sharp it could hurt its master. Do you still want it?");
} else if(status == 5) {
qm.sendOk("Well, if you say so.. I can't object to that. I'll tell you what. I'll give you a quick test, and if you pass it, the Giant Polearm is yours. Head over to the #bTraining Center#k and take on the #rScarred Bears#k that are there. Your job is to bring back #b30 Sign of Acceptances#k.");
} else {
} else if(status == 6) {
qm.startQuest();
qm.dispose();
}

View File

@@ -24,7 +24,20 @@
*/
function end(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
if(!qm.haveItem(4031619, 1)) {
qm.sendOk("Please bring me the box with the supplies that lies with #b#p2012019##k...");
}
@@ -33,6 +46,8 @@ function end(mode, type, selection) {
qm.sendOk("Oh, you brought #p2012019#'s box! Thank you.");
qm.forceCompleteQuest();
}
} else if (status == 1) {
qm.dispose();
}
}
}

View File

@@ -24,7 +24,20 @@
*/
function end(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
if(!qm.haveItem(4031619, 1)) {
qm.sendOk("Please bring me the box with the supplies that lies with #b#p2012019##k...");
}
@@ -33,6 +46,8 @@ function end(mode, type, selection) {
qm.sendOk("Oh, you brought #p2012019#'s box! Thank you.");
qm.forceCompleteQuest();
}
} else if (status == 1) {
qm.dispose();
}
}
}

View File

@@ -24,8 +24,24 @@
*/
function end(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
qm.sendOk("I see you're ready for the task. Now, pay heed to the details of your mission...");
qm.forceCompleteQuest();
} else if (status == 1) {
qm.dispose();
}
}
}

View File

@@ -16,8 +16,9 @@ function start(mode, type, selection) {
} else if (status == 1) {
qm.sendAcceptDecline("But before doing that, I'll need you back in Rein for a bit. #bYour pole arm is reacting strange once again. It looks like it has something it wants to tell you. #kIt might be able to awaken your hidden powers, so please come immediately.");
} else if (status == 2) {
qm.sendOk("Anyway, I thought it was really something that a weapon has its own identity, but seriously... this weapon does not stop talking. It first kept on crying because I wasn't really paying attention to its needs, and... ahh, please keep this a secret from the pole arm. I don't think it's a good idea to upset the weapon any further.");
qm.forceStartQuest();
qm.sendOk("Anyway, I thought it was really something that a weapon has its own identity, but seriously... this weapon does not stop talking. It first kept on crying because I wasn't really paying attention to its needs, and... ahh, please keep this a secret from the pole arm. I don't think it's a good idea to upset the weapon any further.");
} else if (status == 3) {
qm.dispose();
}
}

View File

@@ -24,8 +24,9 @@ function end(mode, type, selection) {
} else if (status == 5) {
qm.sendNextPrev("...No hope, no dreams... Nooooo!!");
} else if (status == 6) {
qm.sendNextPrev("#b(Maha is beginning to really get hysterical. I better leave right this minute. Maybe Lirin can do something about it.)", 2);
qm.completeQuest();
qm.sendNextPrev("#b(Maha is beginning to really get hysterical. I better leave right this minute. Maybe Lilin can do something about it.)", 2);
} else if (status == 7) {
qm.dispose();
}
}

View File

@@ -59,6 +59,7 @@ function end(mode, type, selection) {
}
qm.sendNext("Come on, keep training so you can get all your abilities back, and that way we can explore together once more!");
} else if (status == 3) {
qm.dispose();
}
}

View File

@@ -14,8 +14,9 @@ function start(mode, type, selection) {
if (status == 0) {
qm.sendAcceptDecline("How is the training going? I know you're busy, but please come to #bRien#k immediately. The #bMaha#k has started to act weird again... But its even weirder now. It's different from before. It's... darker than usual.");
} else if (status == 1) {
qm.sendOk("I have a bad feeling about this. Please come back here. I've never seen or herd Maha like this, but I can sense the suffering its going through. #bOnly you, the master of Maha, can do something about it!");
qm.startQuest();
qm.sendOk("I have a bad feeling about this. Please come back here. I've never seen or herd Maha like this, but I can sense the suffering its going through. #bOnly you, the master of Maha, can do something about it!");
} else if (status == 2) {
qm.dispose();
}
}

View File

@@ -68,6 +68,8 @@ function end(mode, type, selection) {
qm.completeQuest();
}
qm.sendNext("Your skills have been restored. Those skills have been dormant for so long that you'll have to re-train yourself, but you'll be as good as new once you complete your training.");
} else if(status == 3) {
qm.dispose();
}
}

View File

@@ -1,10 +1,27 @@
var status = -1;
function start(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
qm.sendNext("Some bats seems to accompany this tree wherever it goes. Creepy...");
qm.forceCompleteQuest();
} else if (status == 1) {
qm.dispose();
}
}
}
function end(mode, type, selection) {
qm.dispose();
}

View File

@@ -1,10 +1,28 @@
var status = -1;
function start(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
qm.sendNext("It is said that a old tree gets alive whenever something sinister disturbs this land... We need a hero that fends our village of that creature!");
qm.forceCompleteQuest();
} else if (status == 1) {
qm.dispose();
}
}
}
function end(mode, type, selection) {
qm.dispose();
}

View File

@@ -1,10 +1,28 @@
var status = -1;
function start(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
qm.sendNext("The tree has a scarf upon its branches, I tell you.");
qm.forceCompleteQuest();
} else if (status == 1) {
qm.dispose();
}
}
}
function end(mode, type, selection) {
qm.dispose();
}

View File

@@ -1,10 +1,28 @@
var status = -1;
function start(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
qm.sendNext("The tree has a strange carving that resembles a scary face.");
qm.forceCompleteQuest();
} else if (status == 1) {
qm.dispose();
}
}
}
function end(mode, type, selection) {
qm.dispose();
}

View File

@@ -1,10 +1,28 @@
var status = -1;
function start(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
qm.sendNext("That tree... I've heard of it before, I even studied its behavior! If I recall correctly, the #bStumpy#k comes alive when the soil deems infertile by some sort of magic, and those stumps who evolves under these conditions starts to drain these suspicious magical sources instead of water and minerals for living, which makes them very threathening to people and villages nearby.");
qm.forceCompleteQuest();
} else if (status == 1) {
qm.dispose();
}
}
}
function end(mode, type, selection) {
qm.dispose();
}

View File

@@ -39,9 +39,9 @@ function start(mode, type, selection) {
} else if (status == 1) {
qm.sendAcceptDecline("Picked your interest, huh? Very well, first you must make your way to #bAqua#k, there is a person there who makes #rfood for wolf cubs#k. Bring one portion to me, and I shall deem you able to tame and take care of one. What do you say, will you try for it?");
} else if (status == 2) {
qm.sendNext("Alright. The one you must meet is #bNanuke#k, she is on top of a #rsnowy whale#k, somewhere in the ocean. Good luck!");
qm.forceStartQuest();
qm.sendNext("Alright. The one you must meet is #bNanuke#k, she is on top of a #rsnowy whale#k, somewhere in the ocean. Good luck!");
} else if (status == 3) {
qm.dispose();
}
}

View File

@@ -44,7 +44,6 @@ function start(mode, type, selection) {
var em = qm.getEventManager("Aran_3rdmount");
if (em == null) {
qm.sendOk("Sorry, but the 3rd mount quest (Wolves) is closed.");
qm.dispose();
return;
}
else {
@@ -54,9 +53,9 @@ function start(mode, type, selection) {
} else {
qm.forceStartQuest();
}
}
} else if (status == 4) {
qm.dispose();
}
}
}
}

View File

@@ -71,11 +71,12 @@ function end(mode, type, selection) {
}
qm.sendNext("Step aside, behold the mighty prowess of Maha!!");
} else {
} else if (status == 1) {
qm.forceCompleteQuest();
qm.gainItem(1902017, -1);
qm.gainItem(1902018, 1);
qm.forceCompleteQuest();
qm.dispose();
}
}

View File

@@ -34,6 +34,7 @@ function start(mode, type, selection) {
}
} else if (status == 6) {
qm.sendPrev("You'll find a Training Center if you exit to the #bleft#k. There, you'll meet #b#p1202006##k. I'm a bit worried because I think he may be struggling with bouts of Alzheimer's, but he spent a long time researching skills to help you. I'm sure you'll learn a thing or two from him.");
} else if (status == 7) {
qm.dispose();
}
}

View File

@@ -35,6 +35,7 @@ function start(mode, type, selection) {
} else if (status == 7) {
qm.forceStartQuest();
qm.sendOk("Now go and take on those monstrous #o9300343#s!");
} else if (status == 8) {
qm.dispose();
}
}
@@ -70,6 +71,7 @@ function end(mode, type, selection) {
qm.sendNext("(You remembered the #bCombo Ability#k skill! You were skeptical of the training at first, since the old man suffers from Alzheimer's and all, but boy, was it effective!)", 2);
} else if (status == 4) {
qm.sendPrev("Now report back to #p1201000#. I know she'll be ecstatic when she sees the progress you've made!");
} else if (status == 5) {
qm.dispose();
}
}

View File

@@ -25,6 +25,7 @@ function start(mode, type, selection) {
qm.sendNext("I wonder what triggered this in the first place. There is no way this puppet was naturally created, which means someone planned this. I should keep an eye on the #o1210102#s.", 9);
} else if (status == 3) {
qm.sendPrev("#b(You were able to find out what caused the changes in the #o1210102#s. You should report to #p1002104# and deliver the information you've gathered.)#k", 2);
} else if (status == 4) {
qm.dispose();
}
}

View File

@@ -42,7 +42,7 @@ function end(mode, type, selection) {
qm.gainExp(200);
qm.forceCompleteQuest();
}
} else if (status == 1) {
qm.dispose();
}
}

View File

@@ -61,7 +61,7 @@ function end(mode, type, selection) {
qm.sendNext("Aran, thank you very much! Somehow the Puppeteer managed to bypass the security of Lith Harbor. He was trying to seek revenge because of the other day. Luckily, you came by. Nicely done!");
} else if(status == 1) {
qm.sendNext("I will teach you the #rPolearm Mastery#k skill, to reward your actions here. You will be able to improve your accuracy and the overall mastery of your polearm arts.");
} else {
} else if(status == 2) {
qm.gainExp(8000);
qm.teachSkill(21100000, 0, 20, -1); // polearm mastery

View File

@@ -63,11 +63,12 @@ function end(mode, type, selection) {
qm.sendNext("They were after the #bcrystal seal of Victoria#k. These seals are what repels the Black Mage to further taking the continents into his grasp at once. Each continent has one, Victoria's now is safe and sound.");
} else if(status == 2) {
qm.sendNext("For your bravery inputted on these series of missions, I will now reward you properly. Behold, the #rCombo Drain#k Skill: that let's you heal back a portion of damage dealt to the monsters.");
} else {
} else if(status == 3) {
qm.forceCompleteQuest();
qm.gainExp(12500);
qm.teachSkill(21100005, 0, 20, -1); // combo drain
qm.forceCompleteQuest();
qm.dispose();
}
}

View File

@@ -42,7 +42,7 @@ function start(mode, type, selection) {
qm.sendNextPrev("It seems like something strange is happening in Orbis in Ossyria. It's a bit different from when we were dealing with the puppeteer, but my instincts tell me it has to do with the Black Wings. Please head over to Orbis.");
} else if(status == 3) {
qm.sendAcceptDecline("#bLisa the Fairy#k in Orbis should know a thing or two. Go see Lisa first, she knows someone that knows the whereabouts of the sealing stone. That person #rwill require a password from you#k, when requested use the #bThere's something strange going on in Orbis....#k keyword to talk to her. Understood?");
} else {
} else if(status == 4) {
qm.forceStartQuest();
qm.dispose();
}

View File

@@ -50,7 +50,7 @@ function start(mode, type, selection) {
qm.sendAcceptDecline("I can't tell you about Sealed Garden. If you want to find out, I must first see whether you are worthy of the information. Do you mind if I look into your fate?", 9);
} else if (status == 7) {
qm.sendOk("Well, now let's look into your fate. Give me a second.");
} else {
} else if (status == 8) {
qm.forceStartQuest();
qm.dispose();
}

View File

@@ -36,9 +36,9 @@ function end(mode, type, selection) {
if(status == 0) {
qm.sendNext("So, have you defeated the giant? Oh, a Black Wing agent undercover? And he GOT THE SEAL STONE OF ORBIS?! Oh, no. That's horrible! We need to develop countermeasures as soon as possible! Tell the informant on Lith about the situation.");
} else {
qm.gainExp(29500);
} else if (status == 1) {
qm.forceCompleteQuest();
qm.gainExp(29500);
qm.dispose();
}
}

View File

@@ -61,10 +61,9 @@ function end(mode, type, selection) {
qm.sendNext("Oh, hi #h0#! You won't believe what I just uncovered. It's one of your lost skills... What, the seal of Orbis got stolen by the Black Wings? Oh my...");
} else if(status == 1) {
qm.sendNext("For now, let me teach you the #bCombo Smash#k, with it you will be able to deal massive amount of damage to many monsters at once. We will need to use it if we want to stand a chance against the Black Wings now, so don't forget it!");
} else {
qm.teachSkill(21100004, 0, 20, -1); // combo smash
} else if(status == 2) {
qm.forceCompleteQuest();
qm.teachSkill(21100004, 0, 20, -1); // combo smash
qm.dispose();
}
}

View File

@@ -38,9 +38,9 @@ function start(mode, type, selection) {
qm.sendNext("Have you been advancing your levels? I found an interesting piece of information about the Black Wings. This time, you'll have to travel quite a bit. Do you know a town called #bMu Lung#k? You'll have to head there.");
} else if (status == 1) {
qm.sendAcceptDecline("Apparently, #bMr. Do#k in Mu Lung somehow met with the Black Wings. I don't know the details. Please go and find out why the Black Wings contacted Mr. Do and what exactly happened between them.");
} else {
} else if (status == 2) {
qm.sendNext("Mr. Do is known to be curt, so you are going to have to remain patient while talking to him. Talk to him with the #bI heard you met the Shadow Knight of the Black Wings#k keyword.");
} else if (status == 3) {
qm.forceStartQuest();
qm.dispose();
}

View File

@@ -38,9 +38,9 @@ function start(mode, type, selection) {
qm.sendNext("So we have lost #btwo seal stones#k so far, from the neighboring areas of #rOrbis#k and #rMu Lung#k... Things are starting to get out of control, it seems.");
} else if (status == 1) {
qm.sendNext("Aran, your next objective will be to use the #btime gate to Ellin#k again. This time you will be retrieving the long lost #rSeal Stone of Ellin Forest#k. According to informations our network have gathered, #b#p2131002##k of that time have a clue about that gem, #rfind her#k. Please be successful on this task, our world is relying on you more than ever!");
} else {
qm.gainExp(500);
} else if (status == 2) {
qm.forceCompleteQuest();
qm.gainExp(500);
qm.dispose();
}
}

View File

@@ -36,7 +36,7 @@ function end(mode, type, selection) {
if (status == 0) {
qm.sendNext("Aran, you're finally back!!! How you've been doing? Where did you go for so long? We have so much to catch up...");
} else {
} else if (status == 1) {
qm.forceCompleteQuest();
qm.dispose();
}

View File

@@ -38,8 +38,8 @@ function start(mode, type, selection) {
qm.sendNext("Aran, I've discovered some disturbing news... You said you've come from the eastern forest section, right? We traced and studied the magic being used to support the portal over there. It turns out that's of a #rtemporal#k-type. The garments you're using... They were never seen around before. That must mean, #ryou must have come from the future#k.");
} else if (status == 1) {
qm.sendNext("Now about the problem: the Seal Stone that seems to have been missing in your timeline... It is a powerful artifact, that prevents the army of the #rBlack Mage#k from laying siege on our world. If that stone goes away, nothing more can prevent him. As this is a matter of great importance, find the #rself of mine#k from the future. I'm actually a #rfairy#k with a great life expectancy, I must be alive even on your timeline. Got it, #rfetch the me from the future#k!");
} else if (status == 2) {
qm.forceStartQuest();
qm.dispose();
}
}

View File

@@ -36,11 +36,10 @@ function end(mode, type, selection) {
if (status == 0) {
qm.sendNext("Oh, a letter for the #rempress#k? From the #bheroes#k?!");
} else {
} else if (status == 1) {
qm.forceCompleteQuest();
qm.gainExp(1000);
qm.gainItem(4032330, -1);
qm.forceCompleteQuest();
qm.dispose();
}
}

View File

@@ -10,14 +10,14 @@ function start(mode, type, selection) {
qm.sendNext("I have a feeling there is a secret behind that wooden box. Could you stealthily look into the wooden box next to #p20000#?");
} else if (status == 3) {
qm.sendNext("You know where #p20000# is, right? He's to the right. Just keep going until you see where Vikin is, then head down past the hanging shark and octopus, and you''ll see John. The box should be right next to him.");
} else {
} else if (status == 4) {
qm.forceStartQuest();
qm.dispose();
}
}
function end(mode, type, selection) {
qm.gainExp(200);
qm.forceCompleteQuest();
qm.gainExp(200);
qm.dispose();
}

View File

@@ -1,4 +1,5 @@
var status = -1;
var canStart;
function start(mode, type, selection) {
status++;
@@ -9,11 +10,19 @@ function start(mode, type, selection) {
return;
}
qm.sendNext("#bHm, there's a medicinal substance in the box. What could this be? You better take this to John and ask him what it is.#k");
} else {
qm.gainItem(4032423,1);
canStart = qm.canHold(4032423, 1);
if(!canStart) {
qm.sendNext("Please open a slot in your ETC inventory first.");
return;
}
qm.sendNext("#bHm, there's a medicinal substance in the box. What could this be? You better take this to John and ask him what it is.#k");
} else if (status == 1) {
if(canStart) {
qm.gainItem(4032423,1);
qm.forceStartQuest();
}
qm.dispose();
}
}

View File

@@ -4,6 +4,20 @@
*/
function end(mode, type, selection){
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
if(!qm.isQuestCompleted(2186)) {
if(qm.haveItem(4031853)){
if(qm.canHold(2030019)) {
@@ -35,6 +49,8 @@ function end(mode, type, selection){
}
}
}
} else if (status == 1) {
qm.dispose();
}
}
}

View File

@@ -1,12 +1,46 @@
var status = -1;
function start(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
qm.sendNext("Oh, you already have monster book. Good luck on your journey~!");
} else if (status == 1) {
qm.forceCompleteQuest();
qm.dispose();
}
}
}
function end(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
qm.sendNext("Oh, you already have monster book. Good luck on your journey~!");
} else if (status == 1) {
qm.forceCompleteQuest();
qm.dispose();
}
}
}

View File

@@ -25,7 +25,8 @@ function start(mode, type, selection) {
qm.sendNext("Hurry up and head #bleft#k to feed #b#p1013102##k. He's been barking to be fed all morning.");
}
} else if (status == 4) {
qm.sendPrev("Feed #p1013102# and come back to see me.");
qm.sendNextPrev("Feed #p1013102# and come back to see me.");
} else if (status == 5) {
qm.dispose();
}
}

View File

@@ -40,10 +40,10 @@ function end(mode, type, selection) {
if (status == 0) {
qm.sendNext("Did you eat your breakfast, Evan? Then, will you do me a favor? \r\n\r\n#fUI/UIWindow.img/QuestIcon/4/0# \r\n#i1003028# 1 #t1003028# \r\n#i2022621# 5 #t2022621#s \r\n#i2022622# 5 #t2022622# \r\n#fUI/UIWindow.img/QuestIcon/8/0# 60 exp");
} else if (status == 1) {
qm.forceCompleteQuest();
qm.gainItem(1003028, 1, true);
qm.gainItem(2022621, 5, true);
qm.gainItem(2022622, 5, true);
qm.forceCompleteQuest();
qm.gainExp(60);
qm.sendImage("UI/tutorial/evan/4/0");
qm.dispose();

View File

@@ -22,6 +22,7 @@ function end(mode, type, selection) {
qm.gainExp(360);
qm.sendImage("UI/tutorial/evan/9/0");
}
} else if (status == 3) {
qm.dispose();
}
}

View File

@@ -69,6 +69,7 @@ function end(mode, type, selection) {
qm.sendNextPrev("#bThis is a weapon that Magicians use. It's a Wand#k. You probably won't really need it, but it'll make you look important if you carry it around. Hahahahaha.");
} else if (status == 13) {
qm.sendPrev("Anyway, the Foxes have increased, right? How weird is that? Why are they growing day by day? We should really look into it and get to the bottom of this.");
} else if (status == 14) {
qm.dispose();
}
}

View File

@@ -26,6 +26,7 @@
*/
var status = -1;
var canComplete;
function end(mode, type, selection) {
if (mode == -1) {
@@ -45,20 +46,24 @@ function end(mode, type, selection) {
var hourDay = qm.getHourOfDay();
if(!(hourDay >= 17 && hourDay < 20)) {
qm.sendNext("(Hmm, I'm searching the trash can but can't find the #t4031894# JM was talking about, maybe it's not time yet...)");
qm.dispose();
canComplete = false;
return;
}
if(!qm.canHold(4031894, 1)) {
qm.sendNext("(Eh, I can't hold the #t4031894# right now, I need an ETC slot available.)");
qm.dispose();
canComplete = false;
return;
}
canComplete = true;
qm.sendNext("(Ah, there is a crumbled note here... Hm, it contains details about some scheme that is about to happen, that must be what #r#p1052002##k was talking about.)");
} else if (status == 1) {
if (canComplete) {
qm.forceCompleteQuest();
qm.gainItem(4031894, 1);
qm.gainExp(20000);
qm.forceCompleteQuest();
}
qm.dispose();
}

View File

@@ -26,6 +26,7 @@
*/
var status = -1;
var canComplete;
function end(mode, type, selection) {
if (mode == -1) {
@@ -45,26 +46,30 @@ function end(mode, type, selection) {
var hourDay = qm.getHourOfDay();
if(!(hourDay >= 17 && hourDay < 20)) {
qm.sendNext("(Hmm, I'm searching the trash can but can't find the #t4031894# JM was talking about, maybe it's not time yet...)");
qm.dispose();
canComplete = false;
return;
}
if(qm.getMeso() < 2000) {
qm.sendNext("(Oh, I don't have the combined fee amount yet.)");
qm.dispose();
canComplete = false;
return;
}
if(!qm.canHold(4031894, 1)) {
qm.sendNext("(Eh, I can't hold the #t4031894# right now, I need an ETC slot available.)");
qm.dispose();
canComplete = false;
return;
}
canComplete = true;
qm.sendNext("(Alright, now I will deposit the fee there and get the paper... That's it, yea, that's done.)");
qm.gainItem(4031894, 1);
} else if (status == 1) {
if (canComplete) {
qm.gainMeso(-2000);
qm.forceCompleteQuest();
qm.gainItem(4031894, 1);
}
qm.dispose();
}

View File

@@ -36,8 +36,9 @@ function start(mode, type, selection) {
if (status == 0) {
qm.sendNext("I've just gathered an interesting information, #rDyle looks just like regular Ligators#k, but bigger.");
qm.gainExp(7000);
} else if (status == 1) {
qm.forceCompleteQuest();
qm.gainExp(7000);
if(isAllSubquestsDone() && qm.haveItem(4031894)) {
qm.gainItem(4031894, -1);

View File

@@ -36,8 +36,9 @@ function start(mode, type, selection) {
if (status == 0) {
qm.sendNext("Hey, did you notice already, it looks like some awful stench is emanating from the sewers... Ewww");
qm.gainExp(7000);
} else if (status == 1) {
qm.forceCompleteQuest();
qm.gainExp(7000);
if(isAllSubquestsDone() && qm.haveItem(4031894)) {
qm.gainItem(4031894, -1);

Some files were not shown because too many files have changed in this diff Show More