diff options
Diffstat (limited to 'world/map/npc/functions')
-rw-r--r-- | world/map/npc/functions/clear_vars.txt | 403 | ||||
-rw-r--r-- | world/map/npc/functions/global_event_handler.txt | 48 |
2 files changed, 245 insertions, 206 deletions
diff --git a/world/map/npc/functions/clear_vars.txt b/world/map/npc/functions/clear_vars.txt index c894586b..f26164df 100644 --- a/world/map/npc/functions/clear_vars.txt +++ b/world/map/npc/functions/clear_vars.txt @@ -2,75 +2,88 @@ function|script|ClearVariables { - // Tutorial - if ((TUTORIAL) || (sorfina)) - goto L_ResetTut; - goto L_Heathin; + if(@login_event != 1) goto L_Deprecated; + + callsub S_Bernard_Mikhail; + callsub S_Sarah; + callsub S_Vincent; + callsub S_Sandra; + callsub S_Desert; + callsub S_Bandit; + callsub S_Tutorial; + callsub S_Heathin; + callsub S_Remove_Skills; + callsub S_FixBank; + callsub S_Angus; + callsub S_Flags; + callsub S_Bitmask; + + callsub S_Easter; + callsub S_Easter2008; + callsub S_Easter2009; + callsub S_Easter2010; + callsub S_Easter2011; + callsub S_Easter2012; + callsub S_Halloween2006; + callsub S_Halloween2007; + callsub S_Halloween2008; + callsub S_Halloween2009; + callsub S_Halloween2010; + callsub S_Halloween2011; + callsub S_Xmas2006; + callsub S_Xmas2007; + callsub S_Xmas2008; + callsub S_Xmas2009; + callsub S_Xmas2010; + callsub S_Xmas2011; + callsub S_Xmas2012; + + callsub S_Misc; + return; // go back to global handler + +S_Return: // this is to end execution of a sub + return; -L_ResetTut: - //TUTORIAL to STARTAREA - if ((sorfina) || (kaan) || (hasan) || (tanisha)) - goto L_ResetAllTut; - set @tutorial_tmp, ((TUTORIAL & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT); - // Tutorial - // Nibble 0 (sorfina, tanisha, kaan & hasan) - set STARTAREA, (STARTAREA & ~(NIBBLE_0_MASK) | (@tutorial_tmp << NIBBLE_0_SHIFT)); - // Nibble 1 (valon) - set @tutorial_tmp, ((TUTORIAL & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT); - set @valon_done, (TUTORIAL & (1 << 7)); - set @valon_start, (TUTORIAL & (1 << 6)); - if (@valon_start) - set @tutorial_tmp, (@tutorial_tmp + 2); - if (@valon_done) - set @tutorial_tmp, 7; - set STARTAREA, (STARTAREA & ~(NIBBLE_1_MASK) | (@tutorial_tmp << NIBBLE_1_SHIFT)); - // Nibble 2 (Counts) - set @tutorial_tmp, ((TUTORIAL & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT); - set STARTAREA, (STARTAREA & ~(NIBBLE_2_MASK) | (@tutorial_tmp << NIBBLE_2_SHIFT)); - // Nibble 3 (Morgan) - set @tutorial_tmp, ((TUTORIAL & NIBBLE_6_MASK) >> NIBBLE_6_SHIFT); - set STARTAREA, (STARTAREA & ~(NIBBLE_3_MASK) | (@tutorial_tmp << NIBBLE_3_SHIFT)); - // Nibble 4 (Zegas) Barrels shuffled - set @zegas_done, (TUTORIAL & (1 << 23)); - set @zegas_start, (TUTORIAL & (1 << 16)); - set @zegas_met, (TUTORIAL & (1 << 30)); - set @tutorial_tmp, 0; - if (@zegas_met) - set @tutorial_tmp, 1; - if (@zegas_start) - set @tutorial_tmp, 2; - if (@zegas_done) - set @tutorial_tmp, 4; - set STARTAREA, (STARTAREA & ~(NIBBLE_4_MASK) | (@tutorial_tmp << NIBBLE_4_SHIFT)); - // Nibble 5 (Barrels) - set @tutorial_tmp, 0; - set STARTAREA, (STARTAREA & ~(NIBBLE_5_MASK) | (@tutorial_tmp << NIBBLE_5_SHIFT)); - // Nibble 6 (Barrels) - set STARTAREA, (STARTAREA & ~(NIBBLE_6_MASK) | (@tutorial_tmp << NIBBLE_6_SHIFT)); - set TUTORIAL, 0; - goto L_Heathin; +//////////////////////////////////////////////////////////////// -L_ResetAllTut: - set sorfina, 0; - set tanisha, 0; - set hasan, 0; - set kaan, 0; - set TUTORIAL, 0; - set STARTAREA, 0; - set FLAGS, FLAGS &~ FLAG_TUTORIAL_DONE; - goto L_Heathin; +S_Xmas2007: + if(!QUEST_xmas07_state) goto S_Return; + set QUEST_xmas07_state, 0; + set QUEST_xmas07_milk, 0; + set QUEST_xmas07_cookies, 0; + set QUEST_xmas07_presents, 0; + return; -L_Heathin: - if (HEATHIN_QUEST > 0) - set QUEST_NorthTulimshar, (QUEST_NorthTulimshar & ~(NIBBLE_6_MASK)) | (HEATHIN_QUEST << NIBBLE_6_SHIFT); - set HEATHIN_QUEST, 0; - goto L_Easter; +S_Halloween2007: + set QUEST_Halloween07_state, 0; + return; -L_Easter: - // Easter - set EasterQuest, 0; +S_Xmas2006: + if(!XMASQUEST1) goto S_Return; + set XMASQUEST1, 0; + set XMASQUEST2, 0; + set XMASQUEST3, 0; + set XMASQUEST4, 0; + set XMASQUEST5, 0; + set XMASQUEST6, 0; + set XMASQUEST7, 0; + set XMASQUEST8, 0; + set XMASQUEST9, 0; + set XMASQUEST10, 0; + set XMASQUEST11, 0; + set XMASQUEST12, 0; + set XMASQUEST13, 0; + set XMASQUEST14, 0; + set XMASQUEST15, 0; + set XMASQUEST16, 0; + set XMASQUEST17, 0; + set XMASQUEST18, 0; + set XMASQUEST19, 0; + set XMASQUEST20, 0; + return; - // Halloween 2006 +S_Halloween2006: + if(!HWQUEST1) goto S_Return; set HWQUEST1, 0; set HWQUEST2, 0; set HWQUEST3, 0; @@ -92,60 +105,49 @@ L_Easter: set HWQUEST18, 0; set HWQUEST19, 0; set HWQUEST20, 0; + return; - // Christmas 2006 - set XMASQUEST1, 0; - set XMASQUEST2, 0; - set XMASQUEST3, 0; - set XMASQUEST4, 0; - set XMASQUEST5, 0; - set XMASQUEST6, 0; - set XMASQUEST7, 0; - set XMASQUEST8, 0; - set XMASQUEST9, 0; - set XMASQUEST10, 0; - set XMASQUEST11, 0; - set XMASQUEST12, 0; - set XMASQUEST13, 0; - set XMASQUEST14, 0; - set XMASQUEST15, 0; - set XMASQUEST16, 0; - set XMASQUEST17, 0; - set XMASQUEST18, 0; - set XMASQUEST19, 0; - set XMASQUEST20, 0; - - set QUEST_Halloween07_state, 0; - - set QUEST_xmas07_state, 0; - set QUEST_xmas07_milk, 0; - set QUEST_xmas07_cookies, 0; - set QUEST_xmas07_presents, 0; +S_Easter: + set EasterQuest, 0; + return; +S_Easter2008: set QUEST_Easter08_state, 0; + return; +S_Halloween2008: set Halloween08, 0; + return; +S_Xmas2008: set QUEST_xmas08_state, 0; + return; +S_Easter2009: set QUEST_Easter09, 0; + set QUEST_Easter09_slots, 0; + return; - set Candyman, 0; // Halloween 2009 +S_Halloween2009: + set Candyman, 0; + return; +S_Xmas2009: set QUEST_Christmas09_state, 0; + return; - set QUEST_Easter09_slots, 0; - - // easter 2010 - // This must not be cleared: since some people would like to go to the easter island! - // set Easter_2010_QuestState, 0; +S_Easter2010: + if(!Easter_2010_QuestState) goto S_Return; + set Easter_2010_QuestState, 0; set Easter_2010_EggState1, 0; set Easter_2010_EggState2, 0; set Easter_2010_EggState3, 0; set Easter_2010_EggState4, 0; set Easter_2010_EggState5, 0; + return; - // halloween 2010 +S_Halloween2010: + if(!hween10) goto S_Return; set hween10, 0; set hween10_collect_canpump, 0; set hween10_credits, 0; @@ -155,8 +157,10 @@ L_Easter: set hween10_bonecount, 0; set hween10_collect_tondel, 0; set hween10_paid, 0; + return; - // Xmas 2010: +S_Xmas2010: + if(!Xmas2010) goto S_Return; set Count_Yellow, 0; set Count_White, 0; set Maze, 0; @@ -164,32 +168,34 @@ L_Easter: set White, 0; set Xmas2010, 0; set Golbenez_Inn_Cost, 0; + return; +S_Easter2011: set QUEST_Easter11, 0; + return; - // contains bad karma information - // set hw2011, 0; +S_Halloween2011: + set hw2011, 0; + return; +S_Xmas2011: set xmas11, 0; + return; +S_Easter2012: set QUEST_Easter12, 0; + return; +S_Xmas2012: set xmas2012, 0; + return; +S_Angus: set QUEST_clothdyer_angus, 0; - - // Tulimshar and Mine Variables which aren't used anymore - set Scorp, 0; - set Bugleg, 0; - // variable isn't used set QUEST_clothdyer_state, 0; - // variable was moved to a temporary player variable - set KatzeBeenOutside, 0; - // variable was moved to Nibble 1 of the variable Katze - set LastHiss, 0; - // quest was turned into a Daily Quest, so the variable isn't needed anymore - set CaveSnakeLamp, 0; + return; +S_Bitmask: // move Scythe quest into bitmasked variable QUEST_Hurnscald if (QUEST_Scythe_state) set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_1_MASK)) | (QUEST_Scythe_state << NIBBLE_1_SHIFT); @@ -206,8 +212,9 @@ L_Easter: set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_3_MASK)) | (Inspector << NIBBLE_3_SHIFT); set Inspector, 0; set @inspector, 0; + return; - //These lines are needed to migrate stuff from variables to flags +S_Flags: if (Open_Underground_Palace_Barrier) set FLAGS, FLAGS | FLAG_OPENED_UNDERGROUND; set Open_Underground_Palace_Barrier, 0; @@ -227,109 +234,152 @@ L_Easter: if (ChestQuest) set FLAGS, FLAGS | FLAG_HURNSMINE_CHEST; set ChestQuest, 0; + return; - if (#BankAccount < 0) - goto L_FixBank; - - goto L_Fix_Skills; - -L_FixBank: +S_FixBank: + if(#BankAccount >= 0) goto S_Return; if (Zeny >= -#BankAccount) - goto L_Fix_Full; - + goto S_Fix_Bank_Full; // Partial fix set #BankAccount, #BankAccount + Zeny; set Zeny, 0; - goto L_Fix_Skills; + return; -L_Fix_Full: +S_Fix_Bank_Full: set Zeny, Zeny + #BankAccount; set #BankAccount, 0; - goto L_Fix_Skills; + return; -L_Fix_Skills: - if(getskilllv(SKILL_TRADE) > 0) setskill SKILL_TRADE, 0; - if(getskilllv(SKILL_PARTY) > 0) setskill SKILL_PARTY, 0; - if(getskilllv(SKILL_EMOTE) > 0) setskill SKILL_EMOTE, 0; - goto L_Barber_Janitor; +S_Remove_Skills: + if(getskilllv(SKILL_TRADE) < 1) goto S_Return; + setskill SKILL_TRADE, 0; + setskill SKILL_PARTY, 0; + setskill SKILL_EMOTE, 0; + return; -L_Barber_Janitor: - callfunc "getHeadStyles"; // this converts class, color and hair - goto L_Return; +S_Misc: + if(Death_Kill) set Death_Kill, 0; + set Scorp, 0; // Tulimshar and Mine Variables which aren't used anymore + set Bugleg, 0; // Tulimshar and Mine Variables which aren't used anymore + set KatzeBeenOutside, 0; // variable was moved to a temporary player variable + set LastHiss, 0; // variable was moved to Nibble 1 of the variable Katze + set CaveSnakeLamp, 0; // quest was turned into a Daily Quest, so the variable isn't needed anymore + return; -L_Return: +S_Tutorial: + if(!TUTORIAL && !sorfina) goto S_Return; + //TUTORIAL to STARTAREA + if ((sorfina) || (kaan) || (hasan) || (tanisha)) + goto S_ResetAllTut; + set @tutorial_tmp, ((TUTORIAL & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT); + // Tutorial + // Nibble 0 (sorfina, tanisha, kaan & hasan) + set STARTAREA, (STARTAREA & ~(NIBBLE_0_MASK) | (@tutorial_tmp << NIBBLE_0_SHIFT)); + // Nibble 1 (valon) + set @tutorial_tmp, ((TUTORIAL & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT); + set @valon_done, (TUTORIAL & (1 << 7)); + set @valon_start, (TUTORIAL & (1 << 6)); + if (@valon_start) + set @tutorial_tmp, (@tutorial_tmp + 2); + if (@valon_done) + set @tutorial_tmp, 7; + set STARTAREA, (STARTAREA & ~(NIBBLE_1_MASK) | (@tutorial_tmp << NIBBLE_1_SHIFT)); + // Nibble 2 (Counts) + set @tutorial_tmp, ((TUTORIAL & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT); + set STARTAREA, (STARTAREA & ~(NIBBLE_2_MASK) | (@tutorial_tmp << NIBBLE_2_SHIFT)); + // Nibble 3 (Morgan) + set @tutorial_tmp, ((TUTORIAL & NIBBLE_6_MASK) >> NIBBLE_6_SHIFT); + set STARTAREA, (STARTAREA & ~(NIBBLE_3_MASK) | (@tutorial_tmp << NIBBLE_3_SHIFT)); + // Nibble 4 (Zegas) Barrels shuffled + set @zegas_done, (TUTORIAL & (1 << 23)); + set @zegas_start, (TUTORIAL & (1 << 16)); + set @zegas_met, (TUTORIAL & (1 << 30)); + set @tutorial_tmp, 0; + if (@zegas_met) + set @tutorial_tmp, 1; + if (@zegas_start) + set @tutorial_tmp, 2; + if (@zegas_done) + set @tutorial_tmp, 4; + set STARTAREA, (STARTAREA & ~(NIBBLE_4_MASK) | (@tutorial_tmp << NIBBLE_4_SHIFT)); + // Nibble 5 (Barrels) + set @tutorial_tmp, 0; + set STARTAREA, (STARTAREA & ~(NIBBLE_5_MASK) | (@tutorial_tmp << NIBBLE_5_SHIFT)); + // Nibble 6 (Barrels) + set STARTAREA, (STARTAREA & ~(NIBBLE_6_MASK) | (@tutorial_tmp << NIBBLE_6_SHIFT)); + set TUTORIAL, 0; return; -} -// The variable TMW_Quest was used to save the progress in several subquests linearly. -// The subquests are moved to different nibbles of other variables -// to make it possible to do some of the quests in parallel. -function|script|ClearVarTMW_Quest -{ - if (TMW_Quest == 0) goto L_Done; - if (TMW_Quest <= 6) goto L_Bernard_Mikhail; - if (TMW_Quest <= 8) goto L_Sarah; - if (TMW_Quest <= 10) goto L_Vincent; - if (TMW_Quest <= 12) goto L_Sandra; - if (TMW_Quest <= 40) goto L_Desert; - goto L_Bandit; - -L_Bandit: -// move Bandit subquest into Nibble 0 of QUEST_Hurnscald - set @bandit, TMW_Quest - 40; - set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_0_MASK) | (@bandit << NIBBLE_0_SHIFT)); - set TMW_Quest, 40; - set @bandit, 0; - goto L_Desert; +S_ResetAllTut: + set sorfina, 0; + set tanisha, 0; + set hasan, 0; + set kaan, 0; + set TUTORIAL, 0; + set STARTAREA, 0; + set FLAGS, FLAGS &~ FLAG_TUTORIAL_DONE; + return; -L_Desert: -// move guard and miner subquest into Byte 2 (Nibble 4 and 5) of QUEST_SouthTulimshar +S_Heathin: + if(!HEATHIN_QUEST) goto S_Return; + set QUEST_NorthTulimshar, (QUEST_NorthTulimshar & ~(NIBBLE_6_MASK)) | (HEATHIN_QUEST << NIBBLE_6_SHIFT); + set HEATHIN_QUEST, 0; + return; + +S_Desert: // move guard and miner subquest into Byte 2 (Nibble 4 and 5) of QUEST_SouthTulimshar + if(!TMW_QUEST || TMW_QUEST > 40) goto S_Return; set @miners, TMW_Quest - 12; set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(BYTE_2_MASK) | (@miners << BYTE_2_SHIFT)); set TMW_Quest, 12; set @miners, 0; - goto L_Sandra; + return; -L_Sandra: -// move Sandra subquest into Nibble 3 of QUEST_SouthTulimshar +S_Sandra: // move Sandra subquest into Nibble 3 of QUEST_SouthTulimshar + if(!TMW_QUEST || TMW_QUEST > 12) goto S_Return; set @sandra, TMW_Quest - 10; set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_3_MASK) | (@sandra << NIBBLE_3_SHIFT)); set TMW_Quest, 10; set @sandra, 0; - goto L_Vincent; + return; -L_Vincent: -// move Vincent subquest into Nibble 2 of QUEST_SouthTulimshar +S_Vincent: // move Vincent subquest into Nibble 2 of QUEST_SouthTulimshar + if(!TMW_QUEST || TMW_QUEST > 10) goto S_Return; set @vincent, TMW_Quest - 8; set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_2_MASK) | (@vincent << NIBBLE_2_SHIFT)); set TMW_Quest, 8; set @vincent, 0; - goto L_Sarah; + return; -L_Sarah: -// move Sarah subquest into Nibble 1 of QUEST_SouthTulimshar +S_Sarah: // move Sarah subquest into Nibble 1 of QUEST_SouthTulimshar + if(!TMW_QUEST || TMW_QUEST > 8) goto S_Return; set @sarah, TMW_Quest - 6; set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_1_MASK) | (@sarah << NIBBLE_1_SHIFT)); set TMW_Quest, 6; set @sarah, 0; - goto L_Bernard_Mikhail; + return; -L_Bernard_Mikhail: -// move Bernard and Mikhail subquest into Nibble 0 of QUEST_SouthTulimshar +S_Bernard_Mikhail: // move Bernard and Mikhail subquest into Nibble 0 of QUEST_SouthTulimshar + if(!TMW_QUEST || TMW_QUEST > 6) goto S_Return; set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_0_MASK) | (TMW_Quest << NIBBLE_0_SHIFT)); set TMW_Quest, 0; - goto L_Done; + return; -L_Done: +S_Bandit: // move Bandit subquest into Nibble 0 of QUEST_Hurnscald + if(!TMW_QUEST) goto S_Return; + set @bandit, TMW_Quest - 40; + set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_0_MASK) | (@bandit << NIBBLE_0_SHIFT)); + set TMW_Quest, 40; + set @bandit, 0; return; -} --|script|#ClearGlobalVars|-1 -{ - end; +L_Deprecated: + debugmes "Explicitely calling ClearVariables after login is deprecated."; + mapexit; +} -OnInit: +function|script|ClearGlobalVars +{ // Clear some entries of the arrays which save the Fluffy Hunting highscore list set $@loop, 5; goto L_FluffyClear; @@ -387,6 +437,5 @@ L_EventClear: // Variable was used in Voltain's script, was renamed and turned into a temporary variable set $state, 0; - end; } diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt index 45efcaae..9ce44a38 100644 --- a/world/map/npc/functions/global_event_handler.txt +++ b/world/map/npc/functions/global_event_handler.txt @@ -1,44 +1,34 @@ -017-9,0,0,0|script|#GlobalHandler|-1 +// This is the global event dispatcher +// Do not add code to this file. Please only add callfuncs +// +// Author: meko + +-|script|#GlobalHandler|-1 { end; -OnPCLoginEvent: // this does not work yet but as soon as it is implemented it will start working - callfunc "ClearVariables"; +OnPCLoginEvent: + set @login_event, 1; + callfunc "getHeadStyles"; // converts class, color and hair + callfunc "ClearVariables"; // removes / converts old variables + // add more here + set @login_event, 2; end; OnPCKillEvent: - set Death_Kill, Death_Kill + 1; // this counts the number of players you have killed + callfunc "elanore_decrease_exp"; // decrease heal exp for doing bad things end; OnPCKilledEvent: - goto L_Fightclub_Killed; // this is used by the 1v1 arena + callfunc "fightclub_event_killed"; // this is used by the 1v1 arena + end; OnPCDieEvent: callfunc "fightclub_GoBack"; // this used by the battle master - goto L_Fightclub_Die; // this is used by the 1v1 arena - -// custom handlers below - -L_Fightclub_Killed: - set @duel_killer, 0; - if(@Duel_Fighter != 1) goto L_End; - if(getmap() != "009-7") goto L_End; - set $@duel_loser, getcharid(3); // grab the rid of the victim - set $@duel_winner, @killerrid; // grab the rid of the killer - set @killerrid, 0; // reset killerid - callfunc "fightclub_death"; - goto L_End; - -L_Fightclub_Die: - set @duel_killer, 0; - if(@Duel_Fighter != 1) goto L_End; - if(getmap() != "009-7") goto L_End; - set @killerrid, 0; // since the player was not murdered, the killerrid is 0 - set $@duel_loser, getcharid(3); // grab the rid of the victim - callfunc "fightclub_death"; - goto L_End; + callfunc "fightclub_event_die"; // this is used by the 1v1 arena + end; -L_End: - if(getpvpflag(0) == $@Duel_Channel) setpvpflag @previous_channel; +OnInit: //fixme: change to OnInterIfInit + callfunc "ClearGlobalVars"; end; } |