1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-07 21:59:49 -05:00
BO2-Reimagined/scripts/zm/replaced/zm_transit_sq.gsc
2024-03-15 21:59:38 -07:00

320 lines
8.6 KiB
Plaintext

#include maps\mp\zm_transit_sq;
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_transit_utility;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\gametypes_zm\_globallogic_score;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_powerups;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\zombies\_zm_unitrigger;
maxis_sidequest_a()
{
level endon("power_on");
level.sq_progress["maxis"]["A_turbine_1"] = undefined;
level.sq_progress["maxis"]["A_turbine_2"] = undefined;
if (!(isdefined(level.sq_progress["maxis"]["B_complete"]) && level.sq_progress["maxis"]["B_complete"]))
level.sq_progress["maxis"]["A_complete"] = 0;
while (true)
{
players = get_players();
foreach (player in players)
{
if (isdefined(player.buildableturbine) && player.buildableturbine istouching(level.sq_volume))
{
level notify("maxi_terminal_vox");
player.buildableturbine thread turbine_watch_cleanup();
if (!isdefined(level.sq_progress["maxis"]["A_turbine_1"]))
{
level.sq_progress["maxis"]["A_turbine_1"] = player.buildableturbine;
level.sq_progress["maxis"]["A_turbine_1"] thread turbine_power_watcher(player);
continue;
}
if (!isdefined(level.sq_progress["maxis"]["A_turbine_2"]))
{
level.sq_progress["maxis"]["A_turbine_2"] = player.buildableturbine;
level.sq_progress["maxis"]["A_turbine_2"] thread turbine_power_watcher(player);
}
}
}
if (get_how_many_progressed_from("maxis", "A_turbine_1", "A_turbine_2") >= 1)
{
if (avogadro_at_tower())
level thread maxissay("vox_maxi_turbine_2tower_avo_0", (7737, -416, -142));
else
level thread maxissay("vox_maxi_turbine_2tower_0", (7737, -416, -142));
update_sidequest_stats("sq_transit_maxis_stage_2");
level thread maxis_sidequest_complete_check("A_complete");
}
level waittill_either("turbine_deployed", "equip_turbine_zm_cleaned_up");
if (!level.sq_progress["maxis"]["B_complete"])
level.sq_progress["maxis"]["A_complete"] = 0;
else
break;
}
}
turbine_power_watcher(player)
{
level endon("end_avogadro_turbines");
self endon("death");
self.powered = undefined;
turbine_failed_vo = undefined;
while (isdefined(self))
{
wait 0.05;
if (is_true(player.turbine_power_is_on) && !is_true(player.turbine_emped))
{
self.powered = 1;
}
else if (is_true(player.turbine_emped) || !is_true(player.turbine_power_is_on))
{
wait 2;
self.powered = 0;
}
}
}
maxis_sidequest_b()
{
level endon("power_on");
while (true)
{
level waittill("stun_avogadro", avogadro);
if ((isdefined(level.sq_progress["maxis"]["A_turbine_1"]) && is_true(level.sq_progress["maxis"]["A_turbine_1"].powered)) || (isdefined(level.sq_progress["maxis"]["A_turbine_2"]) && is_true(level.sq_progress["maxis"]["A_turbine_2"].powered)))
{
if (isdefined(avogadro) && avogadro istouching(level.sq_volume))
{
level notify("end_avogadro_turbines");
break;
}
}
}
level notify("maxis_stage_b");
level thread maxissay("vox_maxi_avogadro_emp_0", (7737, -416, -142));
update_sidequest_stats("sq_transit_maxis_stage_3");
player = get_players();
player[0] setclientfield("sq_tower_sparks", 1);
player[0] setclientfield("screecher_maxis_lights", 1);
level thread maxis_sidequest_complete_check("B_complete");
}
maxis_sidequest_c()
{
flag_wait("power_on");
flag_waitopen("power_on");
level endon("power_on");
level.sq_progress["maxis"]["C_screecher_dark"] = 0;
for (i = 0; i < 8; i++)
{
level.sq_progress["maxis"]["C_screecher_" + i] = undefined;
}
level.sq_progress["maxis"]["C_complete"] = 0;
turbine_1_talked = 0;
turbine_2_talked = 0;
screech_zones = getstructarray("screecher_escape", "targetname");
while (true)
{
players = get_players();
foreach (player in players)
{
if (isdefined(player.buildableturbine))
{
for (x = 0; x < screech_zones.size; x++)
{
zone = screech_zones[x];
if (distancesquared(player.buildableturbine.origin, zone.origin) < zone.radius * zone.radius)
{
player.buildableturbine thread turbine_watch_cleanup();
zone_used = 0;
for (i = 0; i < 8; i++)
{
if (isdefined(level.sq_progress["maxis"]["C_screecher_" + i]) && zone == level.sq_progress["maxis"]["C_screecher_" + i])
{
zone_used = 1;
break;
}
}
if (!zone_used)
{
if (level.sq_progress["maxis"]["B_complete"] && level.sq_progress["maxis"]["A_complete"])
{
if (!turbine_1_talked)
{
turbine_1_talked = 1;
level thread maxissay("vox_maxi_turbine_1light_0", zone.origin);
}
level thread set_screecher_zone_origin_and_notify(zone.script_noteworthy, "sq_max");
level.sq_progress["maxis"]["C_screecher_" + level.sq_progress["maxis"]["C_screecher_dark"]] = zone;
level.sq_progress["maxis"]["C_screecher_dark"]++;
if (level.sq_progress["maxis"]["C_screecher_dark"] >= 8)
{
if (!turbine_2_talked)
{
turbine_2_talked = 1;
level thread maxissay("vox_maxi_turbine_2light_on_0", zone.origin);
}
player = get_players();
player[0] setclientfield("screecher_maxis_lights", 0);
level maxis_sidequest_complete_check("C_complete");
return;
}
}
}
continue;
}
}
}
}
level waittill_either("turbine_deployed", "equip_turbine_zm_cleaned_up");
level.sq_progress["maxis"]["C_complete"] = 0;
}
}
maxis_sidequest_complete()
{
update_sidequest_stats("sq_transit_maxis_complete");
level sidequest_complete("maxis");
level.sq_progress["maxis"]["FINISHED"] = 1;
level.maxcompleted = 1;
clientnotify("sq_kfx");
if (isdefined(level.richcompleted) && level.richcompleted)
level clientnotify("sq_krt");
wait 1;
clientnotify("sqm");
level thread droppowerup("maxis");
}
richtofen_sidequest_c()
{
level endon("power_off");
level endon("richtofen_sq_complete");
screech_zones = getstructarray("screecher_escape", "targetname");
level thread screecher_light_hint();
level.sq_richtofen_c_screecher_lights = [];
while (true)
{
level waittill("safety_light_power_off", screecher_zone);
if (!level.sq_progress["rich"]["A_complete"] || !level.sq_progress["rich"]["B_complete"])
{
level thread richtofensay("vox_zmba_sidequest_emp_nomag_0");
continue;
}
if (isinarray(level.sq_richtofen_c_screecher_lights, screecher_zone.target.script_noteworthy))
{
continue;
}
level thread set_screecher_zone_origin_and_notify(screecher_zone.target.script_noteworthy, "sq_rich");
level.sq_richtofen_c_screecher_lights[level.sq_richtofen_c_screecher_lights.size] = screecher_zone.target.script_noteworthy;
level.sq_progress["rich"]["C_screecher_light"]++;
if (level.sq_progress["rich"]["C_screecher_light"] >= 8)
break;
}
level thread richtofensay("vox_zmba_sidequest_4emp_mag_0");
level notify("richtofen_c_complete");
player = get_players();
player[0] setclientfield("screecher_sq_lights", 0);
level thread richtofen_sidequest_complete_check("C_complete");
}
richtofen_sidequest_complete()
{
update_sidequest_stats("sq_transit_rich_complete");
level thread sidequest_complete("richtofen");
level.sq_progress["rich"]["FINISHED"] = 1;
level.richcompleted = 1;
clientnotify("sq_kfx");
if (isdefined(level.maxcompleted) && level.maxcompleted)
level clientnotify("sq_kmt");
wait 1;
clientnotify("sqr");
level thread droppowerup("richtofen");
}
set_screecher_zone_origin_and_notify(script_noteworthy, notify_str)
{
level set_screecher_zone_origin(script_noteworthy);
wait 1;
clientnotify(notify_str);
}
droppowerup(story)
{
level thread scripts\zm\reimagined\_zm_sq::sq_complete_time_hud();
level thread scripts\zm\reimagined\_zm_sq::sq_play_song();
players = get_players();
foreach (player in players)
{
if (is_player_valid(player))
{
player thread scripts\zm\reimagined\_zm_sq::sq_give_player_all_perks();
}
}
center_struct = getstruct("sq_common_tower_fx", "targetname");
trace = bullettrace(center_struct.origin, center_struct.origin - vectorscale((0, 0, 1), 999999.0), 0, undefined);
poweruporigin = trace["position"] + vectorscale((0, 0, 1), 25.0);
mintime = 120;
maxtime = 360;
while (true)
{
trail = spawn("script_model", center_struct.origin);
trail setmodel("tag_origin");
wait 0.5;
playfxontag(level._effect[story + "_sparks"], trail, "tag_origin");
trail moveto(poweruporigin, 10);
trail waittill("movedone");
level thread droppoweruptemptation(story, poweruporigin);
wait 1;
trail delete();
wait(randomintrange(mintime, maxtime));
}
}