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; $@illia_min_level = 90; if ((GM >= DBG_VALIA || debug) && getequipid(equip_head) == 647) 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; 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; }