// Clears old variables function|script|ClearVariables { 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_Flags; callsub S_Bitmask; callsub S_BlueSage; callsub S_Luca; callsub S_Valentine2021; return; // go back to global handler S_Return: // this is to end execution of a sub 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); set QUEST_Scythe_state, 0; // move Demon Mask quest into bitmasked variable QUEST_Hurnscald if (QUEST_demon_mines) set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_2_MASK)) | (QUEST_demon_mines << NIBBLE_2_SHIFT); set QUEST_demon_mines, 0; // move Inspector quest into bitmasked variable QUEST_Hurnscald set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT); if (Inspector > @inspector) set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_3_MASK)) | (Inspector << NIBBLE_3_SHIFT); set Inspector, 0; set @inspector, 0; return; S_BlueSage: if (QUEST_BlueSage & (1 << 7)) set QUEST_BlueSage, QUEST_BlueSage & ~((1<<5)|(1<<6)|(1<<7)); return; S_Luca: if (FLAGS & FLAG_LUCA_FIX) goto S_Return; if (FLAGS & FLAG_LUCA_6SKILLS_MAXED) goto S_Luca6; if (FLAGS & FLAG_LUCA_4SKILLS_MAXED) goto S_Luca4; if (FLAGS & FLAG_LUCA_2SKILLS_MAXED) goto S_Luca2; goto S_LucaX; S_Luca6: if (countitem("AssassinMask") < 1) goto S_Return; delitem "AssassinMask", 1; set FLAGS, FLAGS ^ FLAG_LUCA_6SKILLS_MAXED; goto S_Luca4; S_Luca4: if (countitem("AssassinPants") < 1) goto S_Return; delitem "AssassinPants", 1; set FLAGS, FLAGS ^ FLAG_LUCA_4SKILLS_MAXED; goto S_Luca2; S_Luca2: if (countitem("AssassinBoots") < 1) goto S_Return; delitem "AssassinBoots", 1; set FLAGS, FLAGS ^ FLAG_LUCA_2SKILLS_MAXED; goto S_LucaX; S_LucaX: set FLAGS, FLAGS | FLAG_LUCA_FIX; return; S_Flags: if (Open_Underground_Palace_Barrier) set FLAGS, FLAGS | FLAG_OPENED_UNDERGROUND; set Open_Underground_Palace_Barrier, 0; if (Naem_Quest_Done) set FLAGS, FLAGS | FLAG_GOT_NAEM_GLOVES; set Naem_Quest_Done, 0; if (ChristmasQuest) set FLAGS, FLAGS | FLAG_SNOWMAN; set ChristmasQuest, 0; if (ChristmasQuest2) set FLAGS, FLAGS | FLAG_SANTAS_HELPER; set ChristmasQuest2, 0; if (ChestQuest) set FLAGS, FLAGS | FLAG_HURNSMINE_CHEST; set ChestQuest, 0; return; S_FixBank: if(#BankAccount >= 0) goto S_Return; if (Zeny >= -#BankAccount) goto S_Fix_Bank_Full; // Partial fix set #BankAccount, #BankAccount + Zeny; set Zeny, 0; return; S_Fix_Bank_Full: set Zeny, Zeny + #BankAccount; set #BankAccount, 0; return; S_Remove_Skills: if(getskilllv(SKILL_TRADE) < 1) goto S_Return; setskill SKILL_TRADE, 0; setskill SKILL_PARTY, 0; setskill SKILL_EMOTE, 0; return; S_Tutorial: if(!TUTORIAL) goto S_Return; //TUTORIAL to STARTAREA 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; 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; return; 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; return; 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; return; 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; return; 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; return; 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; S_Valentine2021: set #VALENTINE2021, 0; return; L_Deprecated: debugmes "Explicitely calling ClearVariables after login is deprecated."; mapexit; } function|script|ClearGlobalVars { goto L_IlliaClear; // Clear the array which saves the teams who beat the Illia quest L_IlliaClear: set $@loop, 0; goto L_IlliaLoop; L_IlliaLoop: if ($Illia_Win_Records$[$@loop] == "") goto L_EventClear; set $Illia_Win_Records$[$@loop], ""; set $@loop, $@loop + 1; goto L_IlliaLoop; L_EventClear: set $@loop, 0; return; }