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_highrise_sq.gsc

234 lines
5.9 KiB
Plaintext

#include maps\mp\zm_highrise_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_highrise_sq_atd;
#include maps\mp\zm_highrise_sq_slb;
#include maps\mp\zm_highrise_sq_ssp;
#include maps\mp\zm_highrise_sq_pts;
#include maps\mp\gametypes_zm\_globallogic_score;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\zombies\_zm_unitrigger;
#include maps\mp\zombies\_zm_perks;
init()
{
if (isdefined(level.gamedifficulty) && level.gamedifficulty == 0)
{
sq_easy_cleanup();
return;
}
flag_init("sq_disabled");
flag_init("sq_branch_complete");
flag_init("sq_tower_active");
flag_init("sq_player_has_sniper");
flag_init("sq_player_has_ballistic");
flag_init("sq_ric_tower_complete");
flag_init("sq_max_tower_complete");
flag_init("sq_players_out_of_sync");
flag_init("sq_ball_picked_up");
register_map_navcard("navcard_held_zm_highrise", "navcard_held_zm_transit");
ss_buttons = getentarray("sq_ss_button", "targetname");
for (i = 0; i < ss_buttons.size; i++)
{
ss_buttons[i] usetriggerrequirelookat();
ss_buttons[i] sethintstring("");
ss_buttons[i] setcursorhint("HINT_NOICON");
}
level thread mahjong_tiles_setup();
flag_init("sq_nav_built");
declare_sidequest("sq", ::init_sidequest, ::sidequest_logic, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete);
maps\mp\zm_highrise_sq_atd::init();
maps\mp\zm_highrise_sq_slb::init();
declare_sidequest("sq_1", ::init_sidequest_1, ::sidequest_logic_1, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete);
maps\mp\zm_highrise_sq_ssp::init_1();
maps\mp\zm_highrise_sq_pts::init_1();
declare_sidequest("sq_2", ::init_sidequest_2, ::sidequest_logic_2, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete);
maps\mp\zm_highrise_sq_ssp::init_2();
maps\mp\zm_highrise_sq_pts::init_2();
level thread init_navcard();
level thread init_navcomputer();
precache_sidequest_assets();
}
sidequest_logic()
{
level thread watch_nav_computer_built();
level thread navcomputer_waitfor_navcard();
flag_wait("power_on");
level thread vo_richtofen_power_on();
flag_wait("sq_nav_built");
if (!is_true(level.navcomputer_spawned))
update_sidequest_stats("sq_highrise_started");
stage_start("sq", "atd");
level waittill("sq_atd_over");
stage_start("sq", "slb");
level waittill("sq_slb_over");
if (!is_true(level.richcompleted))
level thread sidequest_start("sq_1");
if (!is_true(level.maxcompleted))
level thread sidequest_start("sq_2");
flag_wait("sq_branch_complete");
tower_punch_watcher();
if (flag("sq_ric_tower_complete"))
update_sidequest_stats("sq_highrise_rich_complete");
else if (flag("sq_max_tower_complete"))
update_sidequest_stats("sq_highrise_maxis_complete");
}
tower_punch_watcher()
{
level thread playtoweraudio();
a_leg_trigs = [];
foreach (str_wind in level.a_wind_order)
a_leg_trigs[a_leg_trigs.size] = "sq_tower_" + str_wind;
level.n_cur_leg = 0;
level.sq_leg_punches = 0;
foreach (str_leg in a_leg_trigs)
{
t_leg = getent(str_leg, "script_noteworthy");
t_leg thread tower_punch_watch_leg(a_leg_trigs);
}
flag_wait("sq_tower_active");
if (flag("sq_ric_tower_complete"))
{
exploder_stop(1002);
exploder_stop(903);
exploder(1003);
}
else
{
exploder_stop(902);
exploder_stop(1003);
exploder(903);
}
wait 1;
level thread tower_in_sync_lightning();
wait 1;
level thread sq_give_all_perks();
}
tower_punch_watch_leg(a_leg_trigs)
{
level.legs_hit = [];
while (!flag("sq_tower_active"))
{
self waittill("trigger", who);
if (!isinarray(level.legs_hit, self.script_noteworthy) && isplayer(who) && scripts\zm\_zm_reimagined::is_tazer_weapon(who.current_melee_weapon))
{
level.legs_hit[level.legs_hit.size] = self.script_noteworthy;
self playsound("zmb_sq_leg_powerup_" + level.legs_hit.size);
if (level.legs_hit.size == 4)
flag_set("sq_tower_active");
return;
}
}
}
sq_give_all_perks()
{
vending_triggers = getentarray("zombie_vending", "targetname");
perks = [];
for (i = 0; i < vending_triggers.size; i++)
{
perk = vending_triggers[i].script_noteworthy;
if (perk == "specialty_weapupgrade")
continue;
perks[perks.size] = perk;
}
if (flag("sq_ric_tower_complete"))
{
v_fireball_start_loc = (1946, 608, 3338);
n_fireball_exploder = 1001;
}
else
{
v_fireball_start_loc = (1068, -1362, 3340.5);
n_fireball_exploder = 901;
}
level thread scripts\zm\reimagined\_zm_sq::sq_complete_time_hud();
level thread scripts\zm\reimagined\_zm_sq::sq_play_song();
players = getplayers();
foreach (player in players)
{
player thread sq_give_player_perks(perks, v_fireball_start_loc, n_fireball_exploder);
level waittill("sq_fireball_hit_player");
}
}
sq_give_player_perks(perks, v_fireball_start_loc, n_fireball_exploder)
{
self endon("disconnect");
exploder(n_fireball_exploder);
m_fireball = spawn("script_model", v_fireball_start_loc);
m_fireball setmodel("tag_origin");
playfxontag(level._effect["sidequest_dragon_fireball_max"], m_fireball, "tag_origin");
do
{
wait_network_frame();
v_to_player = vectornormalize(self gettagorigin("J_SpineLower") - m_fireball.origin);
v_move_spot = m_fireball.origin + v_to_player * 48;
m_fireball.origin = v_move_spot;
}
while (distancesquared(m_fireball.origin, self gettagorigin("J_SpineLower")) > 2304);
m_fireball.origin = self gettagorigin("J_SpineLower");
m_fireball linkto(self, "J_SpineLower");
wait 1.5;
playfx(level._effect["sidequest_flash"], m_fireball.origin);
m_fireball delete();
level notify("sq_fireball_hit_player");
if (is_player_valid(self))
{
self thread scripts\zm\reimagined\_zm_sq::sq_give_player_all_perks();
}
}
sq_is_weapon_sniper(str_weapon)
{
a_snipers = array("dsr50", "as50", "svu");
foreach (str_sniper in a_snipers)
{
if (issubstr(str_weapon, str_sniper))
return true;
}
return false;
}