005-4,36,19,0 script Switch#elecave NPC400,{
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?", L_Flip;
L_Flip:
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
$@ELE_CAVE_STATUS = 1;
$@ELE_CAVE_PLAYER_COUNT = getmapusers("005-4");
startnpctimer;
L_Start_Level_1:
$@ELE_CAVE_LEVEL = 1;
mapannounce "005-4", "Level 1 starting", 0;
// Random colors for everyone!
areatimer "005-4", 19, 19, 54, 37, 10, "Switch#elecave::OnChaos";
// Two red, two blue.
areamonster "005-4", 19, 19, 54, 37, "", 1080, 2, "Switch#elecave::OnBlueDeath";
areamonster "005-4", 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:
@ELE_CAVE_COLOR = 1;
goto L_Exit;
L_Set_Blue:
@ELE_CAVE_COLOR = 2;
goto L_Exit;
L_Exit:
close;
end;
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)
$@ELE_CAVE_RED_COUNT = mobcount("005-4","Switch#elecave::OnRedDeath") + 1;
$@ELE_CAVE_BLUE_COUNT = mobcount("005-4","Switch#elecave::OnBlueDeath") + 1;
$@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", "The ions are once again balanced. Try to kill a red and blue at the same time.", 0;
$@ELE_CAVE_LAST_MESSAGE = 0;
goto L_Next_Step;
L_More_Red:
$@ELE_CAVE_DIFF = $@ELE_CAVE_RED_COUNT - $@ELE_CAVE_BLUE_COUNT;
if ($@ELE_CAVE_LAST_MESSAGE != 1) mapannounce "005-4", "There are too many red ions in the air! Kill more red sparks!", 0;
$@ELE_CAVE_LAST_MESSAGE = 1;
goto L_Next_Step;
L_More_Blue:
$@ELE_CAVE_DIFF = $@ELE_CAVE_BLUE_COUNT - $@ELE_CAVE_RED_COUNT;
if ($@ELE_CAVE_LAST_MESSAGE != 2) mapannounce "005-4", "There are too many blue ions in the air! Kill more blue sparks!", 0;
$@ELE_CAVE_LAST_MESSAGE = 2;
goto L_Next_Step;
L_Next_Step:
// Basic per player logic
areatimer "005-4", 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:
$@ELE_CAVE_LEVEL = 2;
mapannounce "005-4", "Level 2 starting", 0;
// Random colors for everyone!
areatimer "005-4", 19, 19, 54, 37, 10, "Switch#elecave::OnChaos";
// four red, four blue.
areamonster "005-4", 19, 19, 54, 37, "", 1080, 4, "Switch#elecave::OnBlueDeath";
areamonster "005-4", 19, 19, 54, 37, "", 1081, 4, "Switch#elecave::OnRedDeath";
end;
L_Start_Level_3:
$@ELE_CAVE_LEVEL = 3;
mapannounce "005-4", "Level 3 starting", 0;
// Random colors for everyone!
areatimer "005-4", 19, 19, 54, 37, 10, "Switch#elecave::OnChaos";
// eight red, eight blue.
areamonster "005-4", 19, 19, 54, 37, "", 1080, 8, "Switch#elecave::OnBlueDeath";
areamonster "005-4", 19, 19, 54, 37, "", 1081, 8, "Switch#elecave::OnRedDeath";
end;
OnChaos:
if (ispcdead()) end;
L_Set_Color:
message strcharinfo(0), "You feel funny. You think your color has changed.";
@ELE_CAVE_COLOR = rand(1, 2);
end;
OnTick:
if (ispcdead()) end;
// Count this player as alive
$@ELE_CAVE_PLAYER_COUNT = $@ELE_CAVE_PLAYER_COUNT + 1;
@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", 42, 19, 54, 32)) goto L_Heal;
if (isin("005-4", 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", 19, 19, 31, 32)) goto L_Heal;
if (isin("005-4", 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;
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:
if (debug >= 2) end;
initnpctimer;
stopnpctimer;
L_CleanUp:
$@ELE_CAVE_LAST_MESSAGE = 0;
$@ELE_CAVE_STATUS = 0;
$@ELE_CAVE_PLAYER_COUNT = 0;
$@ELE_CAVE_LEVEL = 0;
$@ELE_CAVE_ROUND_TIMER = 0;
killmonster "005-4", "Switch#elecave::OnBlueDeath";
killmonster "005-4", "Switch#elecave::OnRedDeath";
stopnpctimer;
setnpctimer 0;
end;
}