// TMW2/LOF Script.
// Author:
// Jesusalva
// Description:
// Part from the EPISODE and the Well Quest
// TODO: Walking NPC, clothes, etc;
019-1-1,41,24,0 script Miler NPC_PLAYER,{
.@q=getq(LoFQuest_EPISODE);
.@w=getq(NivalisQuest_Well);
mesn;
if (MERC_RANK)
mesq l("Hello, @@.", mercrank());
else if (THIEF_RANK)
mesq l("Hello, @@.", thiefrank());
else
mesq l("Hello.");
mes "";
menu
l("Hello."), -,
rif(.@w == 1, l("I need help.")), L_Well,
rif(.@q == 3 && countitem(HerbalTea), l("The Doctor sent you some tea.")), L_Doctor,
rif(.@q == 5 && countitem(PresentBox), l("I have a present box to you open.")), L_Box,
rif(.@q == 4 && BaseLevel >= 50, l("So, could I help you?")), L_Quest,
rif(.@q == 6 && !@miler_wait, l("I'm back.")), L_Continue,
l("Do you want any monster killed?"), L_GHQ;
// If not on Cordo quest, Miler will speak about
if (!THIEF_RANK && !MERC_RANK)
goto L_Rejected;
close;
// Well Quest Subplot
L_Well:
mes "";
mesn;
mesq l("What's the problem?");
next;
select
l("Someone fell into the well.");
mes "";
mesn;
mesq l("Ho! I'll help them!");
getexp (JobLevel * 111), 0;
setq NivalisQuest_Well, 2;
close;
// Well Quest Subplot
L_Doctor:
mes "";
delitem HerbalTea, 1;
getexp 111, 11;
setq LoFQuest_EPISODE, 4;
mesn;
mesq l("Many thanks, the Doctor always know what's best for you."); // you or your health? Are you sure?
next;
mesn;
mesq l("Lemme just fetch a small something for you....");
next;
mesn;
mesq l("Oh dear, oh dear, where could I have possibly left it?!");
close;
// Not on Cordo quest
L_Rejected:
/*
mesn;
mesq l("You cannot help me at all. You lack any skill to do so.");
next;
*/
mesn;
mesq l("Hey, did you know there are two mouboos which constantly fight against themselves?!");
next;
mesn;
mesq l("One claims to be a constable and teach people to sell high and buy low.");
mesq l("The other one claims to be a dangerous bandit and to teach how to steal from monsters!");
next;
mesn;
mesq l("Well, I heard you needed to have some Job levels to sign up with them, and couldn't resign later.");
mesq l("But it is a so silly fight, that whoever you join with shouldn't do much difference.");
next;
mesn;
mesq l("Anyway, I heard both were disciples from Cordo-whatever, a powerful person from LoF Village.");
//mesq l("I think you should get initiated on any side before speaking to me again.");
close;
// Main Quest
L_Quest:
// Force players upon Cordo quest
/*
if (!THIEF_RANK && !MERC_RANK)
goto L_Rejected;
*/
mes "";
mesn;
mesq l("I lost the precious ring they gave me as a gift... Who could have taken it...?");
next;
mesn;
mesq l("...Of course. It was THEM. It gotta to be them!");
next;
mesn strcharinfo(0);
select l("'Them' whom?");
mes "";
mesn;
mesq l("They came in the night, always taking what does not belong to them.... The SLIMES!");
next;
mesn;
mesq l("The ones around here are specially nasty. They steal stuff and seal them on 'present boxes', just to amuse as people try to open those...");
next;
mesn;
mesq l("...But worry not, I have the right screwdriver for the job. So, are you up to bring me some Present Boxes?");
next;
mesn strcharinfo(0);
select
l("Yes, I'll help you."),
l("Nah, not now. Slimes ruin your clothes, after all.");
mes "";
if (@menu == 2) {
mesn;
mesq l("Ah, I see, I imagine you'll wear something different then... But please come back.");
close;
}
setq LoFQuest_EPISODE, 5, 0;
mesn;
mesq l("Great, just bring me several boxes, once one of them have the ring I'm looking for.");
close;
// Open Present Box Loop
L_Box:
inventoryplace NPCEyes, 1;
.@q2=getq2(LoFQuest_EPISODE);
delitem PresentBox, 1;
setq2 LoFQuest_EPISODE, .@q2+1;
mesn;
mesc l("@@ uses his screwdriver and open the sealed gift box like a pro.", .name$);
// Handle result
if (.@q2 >= 70) {
goto L_Success;
} else if (.@q2 >= 50) {
.@id=any(WhiteFur, Candy, Milk, Lockpicks, MaggotSlime, CandyCane, ChocolateBar, XmasCake, GingerBreadMan, CherryCake, Plushroom, Moss, Chagashroom, BugLeg, Acorn, Manana, Mashmallow, HardSpike, SilkCocoon, IceCube, CoinBag, Coal, CottonCloth, BlueDye);
getitem .@id, 1;
mesc l("But there was only a(n) @@ inside.", getitemlink(.@id));
} else if (.@q2 >= 30) {
if (rand(1,50) < .@q2) {
.@id=any(Candy, MaggotSlime, Plushroom, Chagashroom, BugLeg, Acorn, MauveHerb);
getitem .@id, 1;
mesc l("But there was only a(n) @@ inside.", getitemlink(.@id));
} else {
.@id=rand2(2,4)+.@q2;
Zeny=Zeny+.@id;
mesc l("But there was only @@ GP inside.", .@id);
}
} else if (.@q2 >= 10) {
.@id=rand2(3,5)+.@q2;
Zeny=Zeny+.@id;
mesc l("But there was only @@ GP inside.", .@id);
} else {
mesc l("But the box was empty.");
}
// Try again!
if (countitem(PresentBox)) {
mesn;
mesq l("You have more boxes. Wanna try again?");
if (askyesno() == ASK_YES)
goto L_Box;
}
close;
// Quest Complete
L_Success:
setq LoFQuest_EPISODE, 6, 0;
getexp 25000, 0; // @Saulc DO NOT INCREASE THIS VALUE, if you think this is low, give player MobPoints.
// TODO: Pre-Requisite Item? (eg. Lazurite or Bent Neddle)
// TODO: White Roses quest. We could sell them high and allow drop during spring
mesc l("His golden ring pops right out of it.");
next;
mesn;
mesq l("Many thanks. I couldn't live without it. Please come back later.");
@miler_wait=true;
close;
L_Continue:
if (BaseLevel < 50) goto L_Rejected;
mesn;
mesq l("Welcome back. Uh, no, I haven't forgot I promised you a small something... But you see, then I lost my ring, and...");
next;
mesn;
mesq l("...I deposited everything on the bank. Sorry!");
next;
mesn;
mesq l("Oh, but don't you worry. Sure, you can't go in Nivalis bank and take my stuff... But the Storage Fairy at Lilit might just let you.");
next;
mesn;
mesq l("But she is a fairy. She won't be pleased with flowers. Instead, go and give her a %s as a token of good will.", getitemlink(SnakeSkin));
next;
mesn;
mesq l("Pal, I'm counting on you. You'll like the little something I have for you!");
setq LoFQuest_EPISODE, 7, 0;
close;
L_GHQ:
GHQ_Assign(Moggun, "Nivalis");
close;
OnInit:
.@npcId = getnpcid(.name$);
setunitdata(.@npcId, UDT_HEADTOP, KnitHat);
setunitdata(.@npcId, UDT_HEADMIDDLE, CreasedShirt);
setunitdata(.@npcId, UDT_HEADBOTTOM, NPCEyes);
setunitdata(.@npcId, UDT_WEAPON, JeansShorts);
setunitdata(.@npcId, UDT_HAIRSTYLE, any(2,3,4,6,14,15,17,21,22,24,25,26));
setunitdata(.@npcId, UDT_HAIRCOLOR, rand(0,20));
.sex = G_MALE;
.distance = 5;
end;
}