//############################################
//# NPC Well & Miler
//# Authors: Lien, PjotrOrial
//# Review:
//#
//# There is someone in the well. This can be found out by throwing some stuff
//# in there.
//#
//# When the npc in the well is detected they can be rescued by asking Miler
//# for help.
//#
//# The experience reward given by Miler is 111 * BaseLevel
//#
//# used variables: QUEST_Nivalis_state Nibble4
//############################################
020-1,99,83,0|script|#Well|400
{
set @Q_MASK, NIBBLE_4_MASK;
set @Q_SHIFT, NIBBLE_4_SHIFT;
set @Q_status, ((QUEST_Nivalis_state) & @Q_MASK) >> @Q_SHIFT;
if(@Q_status == 2) goto L_Finished;
set @item_ID, 0;
setarray @quote_item$, "Yuck! Who has thrown that on me?","Ouch! Who hurts me?","White powder!? What's going on up there?","Ahw! It's raining ","","","";
mes "...";
menu
"Throw something in the well.", L_trew,
"Leave it alone.", L_Close;
L_trew:
mes "What do you want to throw?";
menu
"Maggot slime", L_MenuItems,
"A raw log", L_MenuItems,
"Pile of ash", L_MenuItems,
"Bottle of water", L_MenuItems,
"Leave it alone", L_Close;
L_MenuItems:
set @menu, @menu - 1;
// little IF to do @quote$ & @Item_ID
set @quote$, @quote_item$[@menu];
if(@menu == 0)
set @item_ID, 505;
if(@menu == 1)
set @item_ID, 569;
if(@menu == 2)
set @item_ID, 701;
if(@menu == 3)
set @item_ID, 541;
if(countitem(@item_ID) < 1)
goto L_NO_ITEM;
if(@menu == 3)
getitem "EmptyBottle", 1;
delitem @item_ID, 1;
mes "[Mysterious voice inside the well]";
mes "\" "+ @quote$ +"\"";
next;
menu
"Who are you?", L_MenuItems1,
"How did you get there?", L_MenuItems1,
"Do you need help?", L_MenuItems1;
L_MenuItems1:
set @menu, @menu - 1;
if (@menu == 0)
set @quote$, "I'll talk about who I am after leaving the well.";
if (@menu == 1)
set @quote$, "Well, someone has pushed me in the well, I don't know who did that.";
if (@menu == 2)
set @quote$, "";
mes "[Mysterious voice inside the well]";
mes "\" "+ @quote$ +". So if you can call help for me... please do so!\"";
set @Q_status, 1;
callsub S_Update_Var;
close;
L_NO_ITEM:
mes "You don't have such an item... Come back when you have it.";
close;
L_Finished:
mes "This is a well.";
close;
L_Close:
close;
S_Update_Var:
set QUEST_Nivalis_state,
(QUEST_Nivalis_state & ~(@Q_MASK)
| (@Q_status << @Q_SHIFT));
return;
}
020-2,100,28,0|script|Miler|100
{
set @Q_MASK, NIBBLE_4_MASK;
set @Q_SHIFT, NIBBLE_4_SHIFT;
set @Q_status, ((QUEST_Nivalis_state) & @Q_MASK) >> @Q_SHIFT;
mes "[Miler]";
mes "\"Hello!\"";
if(@Q_status == 2) close;
if(@Q_status == 1)
menu
"Hello.", L_Close,
"Hello, Can you help me?", L_HELP;
goto L_Close;
L_HELP:
mes "[Miler]";
mes "\"What's the problem?\"";
menu "Someone has fallen in the well.", L_Next;
L_Next:
mes "[Miler]";
mes "\"Ho! I'll help him!\"";
getexp (BaseLevel * 111), 0;
set @Q_status, 2;
callsub S_Update_Var;
close;
L_Close:
close;
S_Update_Var:
set QUEST_Nivalis_state,
(QUEST_Nivalis_state & ~(@Q_MASK)
| (@Q_status << @Q_SHIFT));
return;
}