007-2,36,23,0 script Valia NPC370,{
@illia_sapphire_powder = 3;
@illia_amethyst_powder = 1;
@illia_iron_powder = 13;
@illia_yeti_tear = 1;
@illia_iced_water = 4;
if ((GM >= DBG_VALIA || debug) && getequipid(equip_head) == DevelopersCap)
goto L_DeveloperBoard;
if (BaseLevel < $@illia_min_level) goto L_Unexperienced;
if ($@iLLIA_STATUS == 0) goto L_Introduce;
if ($@iLLIA_STATUS == 1) goto L_PreparingSpell;
if ($@iLLIA_STATUS == 2) goto L_ReadyToTeleport;
if ($@iLLIA_STATUS == 3) end;
if ($@iLLIA_STATUS >= 4) goto L_AlreadyBegun;
end;
L_DeveloperBoard:
callfunc "IlliaDebug";
close;
L_Introduce:
if (@illia_go_find_items)
goto L_AskItems;
if (@illia_know_witch == 1)
goto L_QuickIntroduce;
mes "[Valia]";
mes "\"I'm Valia Illia. Is it needed to say I am a witch?\"";
next;
mes "\"No I don't think so.\"";
next;
mes "\"And you, you seem to be quite an adventurer.\"";
menu
"Well... No.", L_Disappointed,
"No doubt!", L_Next;
L_Next:
mes "[Valia]";
mes "\"Maybe you can help then.";
mes "You see, I have a sister. Yes, a witch too. Very talented.";
mes "But unfortunately not enough to avoid being captured.\"";
menu
"That's unfortunate...", L_Exit,
"What informations do you have about all this?", L_Next1;
L_Next1:
@illia_know_witch = 1;
mes "[Valia]";
mes "\"Ismuth, some dark mage we both hate. He is the one holding her jailed for sure.";
mes "She has knowledge about specific magic sides that no other sorcerer knows about.\"";
next;
mes "\"He has been looking for her for a long time because of that...";
mes "I am worried about her.";
mes "And I am unable to go help her.\"";
menu
"Why not? You seem to be quite talented as well.", L_Next2;
L_Next2:
mes "[Valia]";
mes "\"Sure. But I know the enemy. My chances are thin. And if I fail, no one will ever find us.";
mes "And my magic skills aren't suited for this...\"";
menu
"That makes sense...", L_AskHelp,
"For what are they suited then?", L_HideSkills;
L_HideSkills:
mes "[Valia]";
mes "\"Please, never ask a witch what she is skilled in.\"";
next;
goto L_AskHelp;
L_QuickIntroduce:
mes "[Valia]";
mes "\"My sister is in great danger, and time is running out.\"";
next;
goto L_AskHelp;
L_AskHelp:
mes "[Valia]";
mes "\"Will you help me?\"";
menu
"That sounds quite dangerous... I don't feel it.", L_Disappointed,
"Ok, I can do that for you.", L_Next3;
L_Next3:
mes "[Valia]";
mes "\"Good. Now listen carefully. Ismuth owns an island where he makes his researchs.";
mes "An island where no boat goes, and where no magic could teleport you to...";
mes "Strong enchantments are protecting the area, however, I know about a mysterious waterfall, which can send you wherever you want, provided you pay the price.\"";
next;
mes "\"Of course, it would be a straight way to death if you go alone.";
mes "You will need three experienced comrades that you would trust enough to leave your life in their care.\"";
next;
if (getusers(1) < 4)
goto L_NotPeepAv;
mes "[Valia]";
mes "\"Do you know such people?\"";
menu
"I'm afraid not. I should better look around.", L_Exit,
"Yes I know such people!", L_Next4;
L_Next4:
mes "[Valia]";
mes "\"Good.";
mes "I can teleport all of you close to that waterfall, but for that, I will need " + @illia_sapphire_powder + " bags of Sapphire Powder, " + @illia_amethyst_powder + " of Amethyst Powder, " + @illia_iron_powder + " Iron Powders," + @illia_yeti_tear + " Frozen Yeti Tear and " + @illia_iced_water + " bottles of Iced Water.\"";
menu
"I have them here.", L_CheckItems,
"I don't have them, but I'll try to find.", L_NoItems;
L_NotPeepAv:
mes "[Valia]";
mes "\"But it seems there are not enough people around.";
mes "Come back later.\"";
close;
L_AskItems:
mes "[Valia]";
mes "\"So, did you bring me what I need?\"";
menu
"Hum, I forgot what you asked...", L_RepeatItems,
"Here they are!", L_CheckItems;
L_RepeatItems:
mes "[Valia]";
mes "\"I need " + @illia_sapphire_powder + " bags of Sapphire Powder, " + @illia_amethyst_powder + " of Amethyst Powder, " + @illia_iron_powder + " Iron Powders," + @illia_yeti_tear + " Frozen Yeti Tear and " + @illia_iced_water + " bottles of Iced Water.\"";
next;
mes "\"Hurry up.\"";
close;
L_NoItems:
@illia_go_find_items = 1;
close;
L_MissingItems:
mes "[Valia]";
mes "\"Obviously you are missing some of the components.";
mes "Go find the missing ones, fast. We lack time!\"";
@illia_go_find_items = 1;
close;
L_CheckItems:
if (
(countitem ("SapphirePowder") < @illia_sapphire_powder) ||
(countitem ("AmethystPowder") < @illia_amethyst_powder) ||
(countitem ("IronPowder") < @illia_iron_powder) ||
(countitem ("FrozenYetiTear") < @illia_yeti_tear) ||
(countitem ("IcedWater") < @illia_iced_water)
) goto L_MissingItems;
// someone started the quest in the meantime, so we cancel this one.
if ($@iLLIA_STATUS > 0)
goto L_Interrupt;
// Block other players to start the quest, and start a timer to limit
// the time a player will take to gather his team.
// Considering the previous npc dialogs, we assume the player already designated his team mates,
// hence 5 mins should be enough.
$@iLLIA_STATUS = 1;
initnpctimer;
@illia_go_find_items = 0;
mes "[Valia]";
mes "\"Very well! I can prepare the spell now!\"";
next;
goto L_PrepareTeam;
L_Interrupt:
mes "[Valia]";
mes "\"Unfortunately, someone else is already helping me.\"";
close;
L_PrepareTeam:
// We clear early this variable.
@illia_know_witch = 0;
mes "[Valia]";
mes "\"While I focus on preparing the spell, call your three comrades, and make sure they come here within five minutes. We don't have time.\"";
next;
$@iLLIA_HERO$ = strcharinfo(0);
$@iLLIA_HERO_ID = getcharid(3, $@iLLIA_HERO$);
goto L_ChooseHelper1;
L_Disappointed:
mes "[Valia]";
mes "\"What a shame... You have no idea what you are missing, really.\"";
close;
L_Unexperienced:
mes "You see a charismatic witch.";
next;
mes "But she seems to completely ignore your presence.";
close;
L_ChooseHelperConfirm1:
mes "[Team Selector]";
mes "If it happens you cannot elect three players to help you, you can give up now.";
menu
"Continue.", L_ChooseHelper1,
"I give up.", L_PlayerGaveUp;
L_ChooseHelper1:
mes "[Team Selector]";
mes "Name the first player to help you:";
input $@iLLIA_HELPER1$;
if ($@iLLIA_HELPER1$ == "")
goto L_ChooseHelperConfirm1;
if (getcharid(3, $@iLLIA_HELPER1$) == $@iLLIA_HERO_ID)
goto L_WrongHelper1;
if (isloggedin(getcharid(3, $@iLLIA_HELPER1$)) == 0)
goto L_HelperDoesNotExist1;
if (!(attachrid(getcharid(3, $@iLLIA_HELPER1$))))
goto L_Exit;
if (BaseLevel < $@illia_min_level)
goto L_HelperTooWeak1;
$@iLLIA_HELPER1$ = strcharinfo(0);
detachrid;
if (attachrid($@iLLIA_HERO_ID))
goto L_ChooseHelper2;
goto L_Exit;
L_HelperTooWeak1:
detachrid;
if (!(attachrid($@iLLIA_HERO_ID)))
goto L_Exit;
mes "[Team Selector]";
mes "The player " + $@iLLIA_HELPER1$ + " is too weak to help you.";
$@iLLIA_HELPER1$ = "";
next;
goto L_ChooseHelperConfirm1;
L_HelperDoesNotExist1:
mes "[Team Selector]";
mes "This player " + $@iLLIA_HELPER1$ + " seems offline or does not exist.";
$@iLLIA_HELPER1$ = "";
next;
goto L_ChooseHelperConfirm1;
L_WrongHelper1:
mes "[Team Selector]";
mes "You can't name yourself.";
next;
goto L_ChooseHelperConfirm1;
L_ChooseHelperConfirm2:
mes "[Team Selector]";
mes "If it happens you cannot elect three players to help you, you can give up now.";
menu
"Continue.", L_ChooseHelper2,
"I give up.", L_PlayerGaveUp;
L_ChooseHelper2:
mes "[Team Selector]";
mes "Name the second player to help you:";
input $@iLLIA_HELPER2$;
if ($@iLLIA_HELPER2$ == "")
goto L_ChooseHelperConfirm2;
if (getcharid(3, $@iLLIA_HELPER2$) == getcharid(3, $@iLLIA_HELPER1$) ||
getcharid(3, $@iLLIA_HELPER2$) == $@iLLIA_HERO_ID)
goto L_WrongHelper2;
if (isloggedin(getcharid(3, $@iLLIA_HELPER2$)) == 0)
goto L_HelperDoesNotExist2;
if (!(attachrid(getcharid(3, $@iLLIA_HELPER2$))))
goto L_Exit;
if (BaseLevel < $@illia_min_level)
goto L_HelperTooWeak2;
$@iLLIA_HELPER2$ = strcharinfo(0);
detachrid;
if (attachrid($@iLLIA_HERO_ID))
goto L_ChooseHelper3;
goto L_Exit;
L_HelperTooWeak2:
detachrid;
if (!(attachrid($@iLLIA_HERO_ID)))
goto L_Exit;
mes "[Team Selector]";
mes "The player " + $@iLLIA_HELPER2$ + " is too weak to help you.";
$@iLLIA_HELPER2$ = "";
next;
goto L_ChooseHelperConfirm2;
L_HelperDoesNotExist2:
mes "[Team Selector]";
mes "This player " + $@iLLIA_HELPER2$ + " seems offline or does not exist.";
$@iLLIA_HELPER2$ = "";
next;
goto L_ChooseHelperConfirm2;
L_WrongHelper2:
mes "[Team Selector]";
mes "You can't name yourself or someone already chosen.";
next;
goto L_ChooseHelperConfirm2;
L_ChooseHelperConfirm3:
mes "[Team Selector]";
mes "If it happens you cannot elect three players to help you, you can give up now.";
menu
"Continue.", L_ChooseHelper3,
"I give up.", L_PlayerGaveUp;
L_ChooseHelper3:
mes "[Team Selector]";
mes "Name the third player to help you:";
input $@iLLIA_HELPER3$;
if ($@iLLIA_HELPER3$ == "")
goto L_ChooseHelperConfirm3;
if (getcharid(3, $@iLLIA_HELPER3$) == getcharid(3, $@iLLIA_HELPER2$) ||
getcharid(3, $@iLLIA_HELPER3$) == getcharid(3, $@iLLIA_HELPER1$) ||
getcharid(3, $@iLLIA_HELPER3$) == $@iLLIA_HERO_ID)
goto L_WrongHelper3;
if (isloggedin(getcharid(3, $@iLLIA_HELPER3$)) == 0)
goto L_HelperDoesNotExist3;
if (!(attachrid(getcharid(3, $@iLLIA_HELPER3$))))
goto L_Exit;
if (BaseLevel < $@illia_min_level)
goto L_HelperTooWeak3;
$@iLLIA_HELPER3$ = strcharinfo(0);
detachrid;
if (!(attachrid($@iLLIA_HERO_ID)))
goto L_Exit;
mes $@iLLIA_HELPER1$ + ", " + $@iLLIA_HELPER2$ + " and " + $@iLLIA_HELPER3$ + " will be your three comrades.";
close;
L_HelperTooWeak3:
detachrid;
if (!(attachrid($@iLLIA_HERO_ID)))
goto L_Exit;
mes "[Team Selector]";
mes "The player " + $@iLLIA_HELPER3$ + " is too weak to help you.";
$@iLLIA_HELPER3$ = "";
next;
goto L_ChooseHelperConfirm3;
L_HelperDoesNotExist3:
mes "[Team Selector]";
mes "This player " + $@iLLIA_HELPER3$ + " seems offline or does not exist.";
$@iLLIA_HELPER3$ = "";
next;
goto L_ChooseHelperConfirm3;
L_WrongHelper3:
mes "[Team Selector]";
mes "You can't name yourself or someone already chosen.";
next;
goto L_ChooseHelperConfirm3;
L_PreparingSpell:
mes "The witch looks busy with a spell, giving shape to strange rings,";
mes "and is not paying any attention to you.";
close;
L_ReadyToTeleport:
if ($@iLLIA_HELPER1$ == "" || $@iLLIA_HELPER2$ == "" || $@iLLIA_HELPER3$ == "")
goto L_PlayerGaveUp;
if (strcharinfo(0) == $@iLLIA_HERO$)
goto L_AskToTeleport;
if (strcharinfo(0) == $@iLLIA_HELPER1$ || strcharinfo(0) == $@iLLIA_HELPER2$ || strcharinfo(0) == $@iLLIA_HELPER3$)
goto L_TalkHelper;
mes "[Valia]";
mes "\"I do not have time for you.\"";
close;
L_AskToTeleport:
// Check area users just to give a hint if there are players around
// $@iLLIA_HERO$ $@iLLIA_HELPER1$ $@iLLIA_HELPER2$ $@iLLIA_HELPER3$
if (!(attachrid(getcharid(3,$@iLLIA_HELPER1$))))
goto L_NotEveryoneHere;
if (!(isin("007-2", 0, 0, 57, 55)))
goto L_NotEveryoneHere;
detachrid;
if (!(attachrid(getcharid(3,$@iLLIA_HELPER2$))))
goto L_NotEveryoneHere;
if (!(isin("007-2", 0, 0, 57, 55)))
goto L_NotEveryoneHere;
detachrid;
if (!(attachrid(getcharid(3,$@iLLIA_HELPER3$))))
goto L_NotEveryoneHere;
if (!(isin("007-2", 0, 0, 57, 55)))
goto L_NotEveryoneHere;
detachrid;
if (!(attachrid(getcharid(3,$@iLLIA_HERO$))))
goto L_NotEveryoneHere;
if (!(isin("007-2", 0, 0, 57, 55)))
goto L_NotEveryoneHere;
mes "[Valia]";
mes "\"Everyone seems to be here. Make sure to stay close to me.\"";
menu
"I'm ready.", L_Next5,
"Wait a minute.", L_Exit;
L_Next5:
if (
(countitem ("SapphirePowder") < @illia_sapphire_powder) ||
(countitem ("AmethystPowder") < @illia_amethyst_powder) ||
(countitem ("IronPowder") < @illia_iron_powder) ||
(countitem ("FrozenYetiTear") < @illia_yeti_tear) ||
(countitem ("IcedWater") < @illia_iced_water)
) goto L_MissingItems;
delitem "SapphirePowder", @illia_sapphire_powder;
delitem "AmethystPowder", @illia_amethyst_powder;
delitem "IronPowder", @illia_iron_powder;
delitem "FrozenYetiTear", @illia_yeti_tear;
delitem "IcedWater", @illia_iced_water;
// Stop the 5mins timer and start it again.
$@iLLIA_STATUS = 3;
initnpctimer;
close;
L_NotEveryoneHere:
mes "[Valia]";
mes "\"I don't see your comrades around.";
mes "Let's wait a little more.\"";
close;
L_TalkHelper:
mes "[Valia]";
mes "\"" + strcharinfo(0) + ", do your best to assist " + $@iLLIA_HERO$ + ".\"";
menu
"What is " + $@iLLIA_HERO$ + " going to do?", L_Next6,
"I will, no problem.", L_Exit;
L_Next6:
mes "[Valia]";
mes "\"You weren't told about it? This is about saving my captive sister.\"";
next;
mes "\"For the details, you'll have to ask " + $@iLLIA_HERO$ + "...";
mes "I am not going to repeat myself...\"";
close;
OnWarpHero:
if (strcharinfo(0) == $@iLLIA_HERO$)
goto L_Warp;
end;
OnWarpHelper1:
if (strcharinfo(0) == $@iLLIA_HELPER1$)
goto L_Warp;
end;
OnWarpHelper2:
if (strcharinfo(0) == $@iLLIA_HELPER2$)
goto L_Warp;
end;
OnWarpHelper3:
if (strcharinfo(0) == $@iLLIA_HELPER3$)
goto L_Warp;
end;
L_Warp:
misceffect FX_MAGIC_BLUE_TELEPORT, strcharinfo(0);
@illia_got_rewards = 0;
@illia_current_num_rewards = 0;
addtimer 2000, "Valia::OnRealWarp";
end;
OnRealWarp:
warp "051-1", 23 + rand(2), 24 + rand(3);
if (strcharinfo(0) == $@iLLIA_HERO$)
goto L_InitVars;
end;
L_InitVars:
$@iLLIA_STATUS = 4;
donpcevent "#IlliaDaemon::OnCommandToggle";
// init various variables
$@illia_progress = 1;
callfunc "UpdateIlliaProgress";
$@illia_level_1_progress = 0;
$@illia_level_2_progress = 0;
$@illia_level_3_progress = 0;
$@illia_level_4_progress = 0;
$@illia_level_5_progress = 0;
$@illia_level_6_progress = 0;
$@illia_level_7_progress = 0;
$@illia_players_in_luvia_territory = 0;
// Save the time at which the quest started
$@illia_begin_time = gettimetick(2);
// Clean all levels
donpcevent "#IlliaJanitor1::OnCommandClean";
donpcevent "#IlliaJanitor2::OnCommandClean";
donpcevent "#IlliaJanitor3::OnCommandClean";
donpcevent "#IlliaJanitor4::OnCommandClean";
donpcevent "#IlliaJanitor5::OnCommandClean";
donpcevent "#IlliaJanitor6::OnCommandClean";
donpcevent "#IlliaJanitor7::OnCommandClean";
stopnpctimer;
setnpctimer 0;
end;
L_AlreadyBegun:
mes "At the moment you are about to talk to her, she briefly shows a malicious smile and looks away.";
next;
mes "Probably it is best to not annoy her.";
close;
L_Exit:
close;
L_ReactToPlayersReturn:
// If players did not enter the Inn's lobby, they arent aware of the trap.
// Otherwise, they are aware of the trap. Whether they died or not,
// the rings will have deleted their memories.
// So the same dialog can apply.
if ($@illia_progress < 8)
goto L_Disappoint;
if ($@illia_progress == 8)
goto L_SurprisedByHeroWin;
end;
L_SurprisedByHeroWin:
npctalk strnpcinfo(0), "(How is it possible... " + $@iLLIA_HERO$ + " survived...)";
emotion EMOTE_SURPRISE;
goto L_EndQuest;
L_Disappoint:
npctalk strnpcinfo(0), "Oh no... It seems " + $@iLLIA_HERO$ + " did not make it... Who will save my sister now?";
emotion EMOTE_SAD;
goto L_EndQuest;
L_PlayerGaveUp:
close2;
npctalk strnpcinfo(0), "Well... It seems you can't do it " + $@iLLIA_HERO$ + ". I knew it as soon as I saw you!";
emotion EMOTE_UPSET;
goto L_EndQuest;
L_EndQuest:
$@iLLIA_STATUS = 0;
$@iLLIA_HERO$ = "";
$@iLLIA_HERO_ID = 0;
$@iLLIA_HELPER1$ = "";
$@iLLIA_HELPER2$ = "";
$@iLLIA_HELPER3$ = "";
$@illia_progress = 0;
callfunc "UpdateIlliaProgress";
$@illia_level_1_progress = 0;
$@illia_level_2_progress = 0;
$@illia_level_3_progress = 0;
$@illia_level_4_progress = 0;
$@illia_level_5_progress = 0;
$@illia_level_6_progress = 0;
$@illia_level_7_progress = 0;
$@illia_players_in_luvia_territory = 0;
$@illia_bp = 0;
// Clean all levels
donpcevent "#IlliaJanitor1::OnCommandClean";
donpcevent "#IlliaJanitor2::OnCommandClean";
donpcevent "#IlliaJanitor3::OnCommandClean";
donpcevent "#IlliaJanitor4::OnCommandClean";
donpcevent "#IlliaJanitor5::OnCommandClean";
donpcevent "#IlliaJanitor6::OnCommandClean";
donpcevent "#IlliaJanitor7::OnCommandClean";
stopnpctimer;
setnpctimer 0;
end;
OnTimer3000:
if ($@iLLIA_STATUS >= 253)
goto L_ReactToPlayersReturn;
end;
OnTimer2500:
if ($@iLLIA_STATUS != 3)
end;
npctalk strnpcinfo(0), $@iLLIA_HERO$ + ", " + $@iLLIA_HELPER1$ + ", " + $@iLLIA_HELPER2$ + ", " + $@iLLIA_HELPER3$ + ", listen!";
end;
OnTimer7500:
if ($@iLLIA_STATUS != 3)
end;
npctalk strnpcinfo(0), "I will teleport the 4 of you in a forest that isn't far from the waterfall.";
end;
OnTimer14000:
if ($@iLLIA_STATUS != 3)
end;
npctalk strnpcinfo(0), "Each of you takes one of these rings. They will allow you to come back here when needed.";
end;
OnTimer24000:
if ($@iLLIA_STATUS != 3)
end;
if ($Illia_Luvia_Harvest < 10)
npctalk strnpcinfo(0), "Do your best and save my sister!";
if ($Illia_Luvia_Harvest >= 10 && $Illia_Luvia_Harvest < 35)
npctalk strnpcinfo(0), "This will be quite dangerous, but do your best and save my sister!";
if ($Illia_Luvia_Harvest >= 35)
npctalk strnpcinfo(0), "This will be awfully dangerous, but do your best and save my sister!";
end;
OnTimer34000:
if ($@iLLIA_STATUS != 3)
end;
// Trigger 4 areatimers to show the teleport spell
// This is better looking than a basic areawarp
areatimer 0, "007-2", 0, 0, 57, 55, 3000, "Valia::OnWarpHero";
areatimer 0, "007-2", 0, 0, 57, 55, 3500, "Valia::OnWarpHelper1";
areatimer 0, "007-2", 0, 0, 57, 55, 4000, "Valia::OnWarpHelper2";
areatimer 0, "007-2", 0, 0, 57, 55, 4500, "Valia::OnWarpHelper3";
npctalk strnpcinfo(0), "Spiralis Major!";
misceffect FX_BLUE_MAGIC_CAST;
end;
OnTimer50000:
// Add a check that the quest started.
// This timer on status 3 should be reached since L_Init_Vars will have
// stopped it before.
// It may happen it didn't if the hero logged off during the warp sequence
// Hence we'll just init what's necessary to trigger the end sequence
if ($@iLLIA_STATUS != 3)
end;
goto L_InitVars;
OnTimer150000:
if ($@iLLIA_STATUS != 1)
end;
$@iLLIA_STATUS = 2;
npctalk strnpcinfo(0), $@iLLIA_HERO$ + ", I am ready to cast the teleport spell. You and your comrades should not wait any longer!";
end;
OnTimer280000:
if ($@iLLIA_STATUS != 2)
end;
npctalk strnpcinfo(0), "Hurry up " + $@iLLIA_HERO$ + ", I am losing patience.";
end;
OnTimer300000:
if ($@iLLIA_STATUS != 2)
end;
npctalk strnpcinfo(0), $@iLLIA_HERO$ + ", you and your missing comrades made me lose a precious time! Out of my sight!";
emotion EMOTE_UPSET;
if (attachrid($@iLLIA_HERO_ID))
goto L_KillHero;
goto L_EndQuest;
L_KillHero:
heal -Hp, 0;
goto L_EndQuest;
}
007-2,57,55,0 script #IlliaDaemon NPC32767,{
end;
OnInit:
disablenpc "#IlliaTorch1";
disablenpc "#IlliaTorch2";
disablenpc "#IlliaTorch3";
disablenpc "#IlliaTorch4";
disablenpc "#IlliaTorch5";
disablenpc "#IlliaTorch6";
disablenpc "#IlliaTorch7";
disablenpc "#IlliaTorch8";
$@illia_max_time = 300;
$@illia_min_level = 90;
end;
OnCommandToggle:
$@illia_max_time = 300;
if ($@iLLIA_STATUS >= 253)
goto L_Stop;
if ($@iLLIA_STATUS >= 4)
goto L_Start;
end;
OnTimer1000:
if ($@iLLIA_STATUS < 4 || $@iLLIA_STATUS >= 254)
end;
goto L_Check;
OnTimer2000:
if ($@iLLIA_STATUS < 4 || $@iLLIA_STATUS >= 254)
end;
// This is executed only when making a double check when we detected
// the hero offline/not in the good map previously.
goto L_Check;
OnTimer4000:
// Check if we need to force-warp the hero
if (isloggedin($@iLLIA_HERO_ID) == 0)
end;
if ($@iLLIA_STATUS == 255 && attachrid($@iLLIA_HERO_ID) && (
isin("051-1",1,1,190,80) ||
isin("051-3",1,1,115,130) ||
isin("052-1",1,1,100,80) ||
isin("052-2",1,1,150,100)
)
) goto L_WarpHero;
detachrid;
end;
OnTimer4500:
if ($@iLLIA_STATUS < 254)
end;
// send a message to all the helpers
setarray $@illia_helpers$, $@iLLIA_HELPER1$,$@iLLIA_HELPER2$,$@iLLIA_HELPER3$;
$@illia_helper_index = 0;
goto L_HelperNotification;
OnTimer6500:
if ($@iLLIA_STATUS < 254)
end;
// Make the first witch to say something happened, when she will see people back
// If no helpers will be warped, it still makes sense: she felt the hero died.
startnpctimer "Valia";
// $@illia_players_in_luvia_territory is set when players enter the island
$Illia_Luvia_Harvest = $Illia_Luvia_Harvest + $@illia_players_in_luvia_territory;
// Cap the difficulty to 50. We do not want the quest to really be impossible to finish.
if ($Illia_Luvia_Harvest > 50)
$Illia_Luvia_Harvest = 50;
$@illia_players_in_luvia_territory = 0;
end;
L_HelperNotification:
if ($@illia_helper_index >= 4)
goto L_CleanHelpers;
$@illia_helper$ = $@illia_helpers$[$@illia_helper_index];
if (isloggedin(getcharid(3, $@illia_helper$)) == 0)
goto L_NextHelperToNotify;
if (
$@illia_helper$ != "" &&
attachrid(getcharid(3, $@illia_helper$)) && (
isin("051-1",1,1,190,80) ||
isin("051-3",1,1,115,130) ||
isin("052-1",1,1,100,80) ||
isin("052-2",1,1,150,100)
)
) goto L_NotifyHelperFail;
detachrid;
goto L_NextHelperToNotify;
L_NextHelperToNotify:
$@illia_helper_index = $@illia_helper_index + 1;
goto L_HelperNotification;
L_CleanHelpers:
cleararray $@illia_helpers$, "", 3;
$@illia_helper$ = "";
$@illia_helper_index = 0;
end;
L_NotifyHelperFail:
message strcharinfo(0), $@iLLIA_HERO$ + " disappeared. There is no way I continue like this... Let's use the ring Valia gave!";
// display the warp spell already if needed
misceffect FX_MAGIC_BLUE_TELEPORT, strcharinfo(0);
detachrid;
goto L_NextHelperToNotify;
OnTimer8000:
if ($@iLLIA_STATUS < 254)
end;
// Warp remaining helpers back to the origin if needed
setarray $@illia_helpers$, $@iLLIA_HELPER1$,$@iLLIA_HELPER2$,$@iLLIA_HELPER3$;
$@illia_helper_index = 0;
goto L_CheckHelperNeedWarp;
L_CheckHelperNeedWarp:
if ($@illia_helper_index >= 4)
goto L_CleanHelpersWarps;
$@illia_helper$ = $@illia_helpers$[$@illia_helper_index];
if (isloggedin(getcharid(3, $@illia_helper$)) == 0)
goto L_NextHelperToWarp;
if ($@illia_helper$ != "" && attachrid(getcharid(3, $@illia_helper$)))
goto L_WarpHelper;
detachrid;
goto L_NextHelperToWarp;
L_NextHelperToWarp:
$@illia_helper_index = $@illia_helper_index + 1;
goto L_CheckHelperNeedWarp;
L_CleanHelpersWarps:
cleararray $@illia_helpers$, "", 3;
$@illia_helper$ = "";
$@illia_helper_index = 0;
end;
L_WarpHelper:
// Proceed only if the helper is still on one of the quest's maps
if (
isin("051-1",1,1,190,80 ) ||
isin("051-3",1,1,115,130) ||
isin("052-1",1,1,100,80 ) ||
isin("052-2",1,1,150,100)
) goto L_DoWarpHelper;
detachrid;
goto L_NextHelperToWarp;
L_DoWarpHelper:
// At this point, the player has been attached
if ($@illia_progress >= 5)
message strcharinfo(0), "You feel dizzy, and that your memory is being rewritten... Who is Luvia? Something isn't right.";
warp "007-2",31 + rand(0,2),23 + rand(0,2);
detachrid;
goto L_NextHelperToWarp;
L_Check:
// We check for the hero to be logged in, alive, and in one of the quest's maps
if (isloggedin($@iLLIA_HERO_ID) == 0)
goto L_HeroLogOff;
if (attachrid($@iLLIA_HERO_ID) &&
(isin("051-1",1,1,190,80 ) == 0) &&
(isin("051-3",1,1,115,130) == 0) &&
(isin("052-1",1,1,100,80 ) == 0) &&
(isin("052-2",1,1,150,100) == 0)
) goto L_HeroEscape;
if (ispcdead())
goto L_HeroDead;
// If the quest lasts more than $@illia_max_time seconds, abort it
if (gettimetick(2) - $@illia_begin_time > $@illia_max_time)
goto L_HeroRingActivated;
// Conditions are all met. schedule another check 1s later
setnpctimer 0;
detachrid;
end;
L_HeroRingActivated:
misceffect FX_MAGIC_BLUE_TELEPORT, strcharinfo(0);
message strcharinfo(0), "The ring Valia gave you seems to activate itself!";
detachrid;
$@iLLIA_STATUS = 255;
setnpctimer 0;
end;
L_HeroLogOff:
if (getnpctimer(0) < 1900)
end;
$@iLLIA_STATUS = 254;
setnpctimer 0;
end;
L_HeroEscape:
detachrid;
// because of lags, warps between maps, etc
// let's assume a check can detect the player to not be in any of the map,
// while he is supposed to be in one.
// it does not hurt to make a double check 1sec later
if (getnpctimer(0) < 1900)
end;
$@iLLIA_STATUS = 254;
setnpctimer 0;
end;
L_WarpHero:
// At this point, the player has been attached
if ($@illia_progress >= 5)
message strcharinfo(0), "You feel dizzy, and that your memory is being rewritten... Who is Luvia? Something isn't right.";
warp "007-2",31 + rand(0,2),23 + rand(0,2);
detachrid;
end;
L_HeroDead:
// we notify the player that his death will add luvia's power.
// her power is increasing once players reach her island,
// but they didn't find out about her yet on the island,
// so we notify the hero only once they met her in the Inn
if ($@illia_progress >= 5 && $@illia_progress < 8)
message strcharinfo(0), "You are in Luvia's hands, and your soul is now meant to serve her dark purposes.";
detachrid;
$@iLLIA_STATUS = 255;
setnpctimer 0;
end;
L_Stop:
stopnpctimer;
setnpctimer 0;
end;
L_Start:
initnpctimer;
end;
}
function script UpdateIlliaProgress {
if ($@illia_progress == 1)
goto L_Torch1;
if ($@illia_progress == 2)
goto L_Torch2;
if ($@illia_progress == 3)
goto L_Torch3;
if ($@illia_progress == 4)
goto L_Torch4;
if ($@illia_progress == 5)
goto L_Torch5;
if ($@illia_progress == 6)
goto L_Torch6;
if ($@illia_progress == 7)
goto L_Torch7;
if ($@illia_progress == 8)
goto L_Torch8;
// Else, we disable everything
disablenpc "#IlliaTorch1";
disablenpc "#IlliaTorch2";
disablenpc "#IlliaTorch3";
disablenpc "#IlliaTorch4";
disablenpc "#IlliaTorch5";
disablenpc "#IlliaTorch6";
disablenpc "#IlliaTorch7";
disablenpc "#IlliaTorch8";
return;
L_Torch8:
enablenpc "#IlliaTorch8";
goto L_Torch7;
L_Torch7:
enablenpc "#IlliaTorch7";
goto L_Torch6;
L_Torch6:
enablenpc "#IlliaTorch6";
goto L_Torch5;
L_Torch5:
enablenpc "#IlliaTorch5";
goto L_Torch4;
L_Torch4:
enablenpc "#IlliaTorch4";
goto L_Torch3;
L_Torch3:
enablenpc "#IlliaTorch3";
goto L_Torch2;
L_Torch2:
enablenpc "#IlliaTorch2";
goto L_Torch1;
L_Torch1:
enablenpc "#IlliaTorch1";
return;
}
007-2,29,22,0 script #IlliaTorch1 NPC374,{
end;
}
007-2,30,21,0 script #IlliaTorch2 NPC374,{
end;
}
007-2,33,24,0 script #IlliaTorch3 NPC374,{
end;
}
007-2,32,25,0 script #IlliaTorch4 NPC374,{
end;
}
007-2,32,21,0 script #IlliaTorch5 NPC374,{
end;
}
007-2,33,22,0 script #IlliaTorch6 NPC374,{
end;
}
007-2,29,24,0 script #IlliaTorch7 NPC374,{
end;
}
007-2,30,25,0 script #IlliaTorch8 NPC374,{
end;
}
function script IlliaDebug {
mes "$Illia_Luvia_Harvest: "+$Illia_Luvia_Harvest;
mes "$Illia_Win_Counter: "+$Illia_Win_Counter;
mes "---";
mes "$@illia_progress: "+$@illia_progress;
if ($@illia_begin_time > 0)
mes "Time: "+(gettimetick(2) - $@illia_begin_time)+"/"+$@illia_max_time;
mes "---";
mes "$@illia_level_1_progress: "+$@illia_level_1_progress;
mes "$@illia_level_2_progress: "+$@illia_level_2_progress;
mes "$@illia_level_3_progress: "+$@illia_level_3_progress;
mes "$@illia_level_4_progress: "+$@illia_level_4_progress;
mes "$@illia_level_5_progress: "+$@illia_level_5_progress;
mes "$@illia_level_6_progress: "+$@illia_level_6_progress;
mes "$@illia_level_7_progress: "+$@illia_level_7_progress;
return;
}