//Author: Kage 005-4.gat,36,19,0|script|Switch#elecave|127,{ if ($@ELE_CAVE_STATUS != 0) goto L_Enjoy; mes "*You see a switch, it is flipped off*"; menu "No, I am NOT flipping the switch... thats final.", L_Exit, "Ha! What's the worst that could happen?", -; mes "*As you flip the switch, the cave starts to rumble*"; if ($@ELE_CAVE_STATUS != 0) goto L_Enjoy; // Prevent from starting level 1 from two different players set $@ELE_CAVE_STATUS, 1; set $@ELE_CAVE_PLAYER_COUNT, getmapusers("005-4.gat"); startnpctimer; L_Start_Level_1: set $@ELE_CAVE_LEVEL, 1; mapannounce "005-4.gat", "Level 1 starting", 0; // Random colors for everyone! areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::onChaos"; // Two red, two blue. areamonster "005-4.gat", 19, 19, 54, 37, "", 1080, 2, "Switch#elecave::onBlueDeath"; areamonster "005-4.gat", 19, 19, 54, 37, "", 1081, 2, "Switch#elecave::onRedDeath"; goto L_Exit; // This one is triggered on talking to the switch. L_Enjoy: mes "*As you get ready to touch the switch, a spark of the opposite color flys to you. But oddly it doesn't hurt at all.*"; if (@ELE_CAVE_COLOR == 1) goto L_Set_Blue; if (@ELE_CAVE_COLOR == 2) goto L_Set_Red; L_Set_Red: set @ELE_CAVE_COLOR, 1; goto L_Exit; L_Set_Blue: set @ELE_CAVE_COLOR, 2; goto L_Exit; L_Exit: close; end; //-----------------------No player talking below this line------------------------------- // Fight logic OnTimer3000: setnpctimer 0; // We stop if no live players are around if ($@ELE_CAVE_PLAYER_COUNT == 0) goto L_CleanUp; set $@ELE_CAVE_PLAYER_COUNT, 0; // The onTick refills this with a live count // We punish them for having a different count (Aka need kill them at the same time) set $@ELE_CAVE_RED_COUNT, mobcount("005-4.gat","Switch#elecave::onRedDeath") + 1; set $@ELE_CAVE_BLUE_COUNT, mobcount("005-4.gat","Switch#elecave::onBlueDeath") + 1; set $@ELE_CAVE_DIFF, 0; if ($@ELE_CAVE_RED_COUNT > $@ELE_CAVE_BLUE_COUNT) goto L_More_Red; if ($@ELE_CAVE_RED_COUNT < $@ELE_CAVE_BLUE_COUNT) goto L_More_Blue; if ($@ELE_CAVE_LAST_MESSAGE != 0) mapannounce "005-4.gat", "The ions are once again balanced. Try to kill a red and blue at the same time.", 0; set $@ELE_CAVE_LAST_MESSAGE, 0; goto L_Next_Step; L_More_Red: set $@ELE_CAVE_DIFF, $@ELE_CAVE_RED_COUNT - $@ELE_CAVE_BLUE_COUNT; if ($@ELE_CAVE_LAST_MESSAGE != 1) mapannounce "005-4.gat", "There are too many red ions in the air! Kill more red sparks!", 0; set $@ELE_CAVE_LAST_MESSAGE, 1; goto L_Next_Step; L_More_Blue: set $@ELE_CAVE_DIFF, $@ELE_CAVE_BLUE_COUNT - $@ELE_CAVE_RED_COUNT; if ($@ELE_CAVE_LAST_MESSAGE != 2) mapannounce "005-4.gat", "There are too many blue ions in the air! Kill more blue sparks!", 0; set $@ELE_CAVE_LAST_MESSAGE, 2; goto L_Next_Step; L_Next_Step: // Basic per player logic areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::onTick"; if ($@ELE_CAVE_RED_COUNT == 0 && $@ELE_CAVE_BLUE_COUNT == 0) goto L_Next_Level; end; L_Next_Level: if ($@ELE_CAVE_LEVEL == 1) goto L_Start_Level_2; if ($@ELE_CAVE_LEVEL == 2) goto L_Start_Level_3; if ($@ELE_CAVE_LEVEL == 3) goto L_CleanUp; end; L_Start_Level_2: set $@ELE_CAVE_LEVEL, 2; mapannounce "005-4.gat", "Level 2 starting", 0; // Random colors for everyone! areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::onChaos"; // four red, four blue. areamonster "005-4.gat", 19, 19, 54, 37, "", 1080, 4, "Switch#elecave::onBlueDeath"; areamonster "005-4.gat", 19, 19, 54, 37, "", 1081, 4, "Switch#elecave::onRedDeath"; end; L_Start_Level_3: set $@ELE_CAVE_LEVEL, 3; mapannounce "005-4.gat", "Level 3 starting", 0; // Random colors for everyone! areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::onChaos"; // eight red, eight blue. areamonster "005-4.gat", 19, 19, 54, 37, "", 1080, 8, "Switch#elecave::onBlueDeath"; areamonster "005-4.gat", 19, 19, 54, 37, "", 1081, 8, "Switch#elecave::onRedDeath"; end; // Being ticks onChaos: if (isdead()) end; L_Set_Color: message strcharinfo(0), "You feel funny. You think your color has changed."; set @ELE_CAVE_COLOR, rand(1, 2); end; onTick: if (isdead()) end; // Count this player as alive set $@ELE_CAVE_PLAYER_COUNT, $@ELE_CAVE_PLAYER_COUNT + 1; set @drainamount, MaxHp / -20; if ($@ELE_CAVE_DIFF != 0) heal @drainamount * $@ELE_CAVE_DIFF, 0; // Make sure they have a color if (@ELE_CAVE_COLOR == 0) goto L_Set_Color; if (@ELE_CAVE_COLOR == 1) goto L_Do_Red; if (@ELE_CAVE_COLOR == 2) goto L_Do_Blue; end; L_Do_Red: specialeffect2 114; // Red effects if (isin("005-4.gat", 42, 19, 54, 32)) goto L_Heal; if (isin("005-4.gat", 32, 19, 54, 37)) end; message strcharinfo(0), "Sparks are flying between you and a piller. Maybe you should stand near a piller with the same color as you."; heal MaxHp / -6, 0; end; L_Do_Blue: specialeffect2 115; // Blue effects if (isin("005-4.gat", 19, 19, 31, 32)) goto L_Heal; if (isin("005-4.gat", 19, 19, 41, 37)) end; message strcharinfo(0), "Sparks are flying between you and a piller. Maybe you should stand near a piller with the same color as you"; heal MaxHp / -6, 0; end; L_Heal: heal MaxHp / 20, 0; end; // Death triggers onBlueDeath: // Blue players have to kill blue sparks if (@ELE_CAVE_COLOR == 2) end; message strcharinfo(0), "The dying spark reacts explosively with you. You should only kill sparks with the same color as you."; heal MaxHp / -2, 0; end; onRedDeath: // Red players have to kill red sparks if (@ELE_CAVE_COLOR == 1) end; message strcharinfo(0), "The dying spark reacts explosively with you. You should only kill sparks with the same color as you."; heal MaxHp / -2, 0; end; onInit: initnpctimer; stopnpctimer; L_CleanUp: set $@ELE_CAVE_LAST_MESSAGE, 0; set $@ELE_CAVE_STATUS, 0; set $@ELE_CAVE_PLAYER_COUNT, 0; set $@ELE_CAVE_LEVEL, 0; set $@ELE_CAVE_ROUND_TIMER, 0; killmonster "005-4.gat", "Switch#elecave::onBlueDeath"; killmonster "005-4.gat", "Switch#elecave::onRedDeath"; stopnpctimer; setnpctimer 0; end; }