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_nuked_perks.gsc
2024-01-21 00:21:07 -08:00

265 lines
8.9 KiB
Plaintext

#include maps\mp\zm_nuked_perks;
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_perks;
#include maps\mp\animscripts\zm_death;
#include maps\mp\zombies\_zm_game_module;
init_nuked_perks()
{
level.perk_arrival_vehicle = getent("perk_arrival_vehicle", "targetname");
level.perk_arrival_vehicle setmodel("tag_origin");
level.grief_perk_arrival_vehicles = getentarray("grief_perk_arrival_vehicle", "targetname");
level.grief_perk_arrival_vehicles_ind = 0;
foreach (grief_perk_arrival_vehicle in level.grief_perk_arrival_vehicles)
{
grief_perk_arrival_vehicle setmodel("tag_origin");
}
flag_init("perk_vehicle_bringing_in_perk");
structs = getstructarray("zm_perk_machine", "targetname");
for (i = 0; i < structs.size; i++)
structs[i] structdelete();
level.nuked_perks = [];
level.nuked_perks[0] = spawnstruct();
level.nuked_perks[0].model = "zombie_vending_revive";
level.nuked_perks[0].script_noteworthy = "specialty_quickrevive";
level.nuked_perks[0].turn_on_notify = "revive_on";
level.nuked_perks[1] = spawnstruct();
level.nuked_perks[1].model = "zombie_vending_sleight";
level.nuked_perks[1].script_noteworthy = "specialty_fastreload";
level.nuked_perks[1].turn_on_notify = "sleight_on";
level.nuked_perks[2] = spawnstruct();
level.nuked_perks[2].model = "zombie_vending_doubletap2";
level.nuked_perks[2].script_noteworthy = "specialty_rof";
level.nuked_perks[2].turn_on_notify = "doubletap_on";
level.nuked_perks[3] = spawnstruct();
level.nuked_perks[3].model = "zombie_vending_jugg";
level.nuked_perks[3].script_noteworthy = "specialty_armorvest";
level.nuked_perks[3].turn_on_notify = "juggernog_on";
level.nuked_perks[4] = spawnstruct();
level.nuked_perks[4].model = "p6_anim_zm_buildable_pap";
level.nuked_perks[4].script_noteworthy = "specialty_weapupgrade";
level.nuked_perks[4].turn_on_notify = "Pack_A_Punch_on";
level.override_perk_targetname = "zm_perk_machine_override";
random_perk_structs = [];
perk_structs = getstructarray("zm_random_machine", "script_noteworthy");
for (i = 0; i < perk_structs.size; i++)
{
random_perk_structs[i] = getstruct(perk_structs[i].target, "targetname");
random_perk_structs[i].script_int = perk_structs[i].script_int;
}
level.random_perk_structs = array_randomize(random_perk_structs);
for (i = 0; i < 5; i++)
{
level.random_perk_structs[i].targetname = "zm_perk_machine_override";
level.random_perk_structs[i].model = level.nuked_perks[i].model;
level.random_perk_structs[i].blocker_model = getent(level.random_perk_structs[i].target, "targetname");
level.random_perk_structs[i].script_noteworthy = level.nuked_perks[i].script_noteworthy;
level.random_perk_structs[i].turn_on_notify = level.nuked_perks[i].turn_on_notify;
if (!isdefined(level.struct_class_names["targetname"]["zm_perk_machine_override"]))
level.struct_class_names["targetname"]["zm_perk_machine_override"] = [];
level.struct_class_names["targetname"]["zm_perk_machine_override"][level.struct_class_names["targetname"]["zm_perk_machine_override"].size] = level.random_perk_structs[i];
}
}
perks_from_the_sky()
{
level thread turn_perks_on();
top_height = 8000;
machines = [];
machine_triggers = [];
machines[0] = getent("vending_revive", "targetname");
if (!isdefined(machines[0]))
return;
machine_triggers[0] = getent("vending_revive", "target");
move_perk(machines[0], top_height, 5.0, 0.001);
machine_triggers[0] trigger_off();
machines[1] = getent("vending_doubletap", "targetname");
machine_triggers[1] = getent("vending_doubletap", "target");
move_perk(machines[1], top_height, 5.0, 0.001);
machine_triggers[1] trigger_off();
machines[2] = getent("vending_sleight", "targetname");
machine_triggers[2] = getent("vending_sleight", "target");
move_perk(machines[2], top_height, 5.0, 0.001);
machine_triggers[2] trigger_off();
machines[3] = getent("vending_jugg", "targetname");
machine_triggers[3] = getent("vending_jugg", "target");
move_perk(machines[3], top_height, 5.0, 0.001);
machine_triggers[3] trigger_off();
machine_triggers[4] = getent("specialty_weapupgrade", "script_noteworthy");
machines[4] = getent(machine_triggers[4].target, "targetname");
move_perk(machines[4], top_height, 5.0, 0.001);
machine_triggers[4] trigger_off();
flag_wait("initial_blackscreen_passed");
if (level.scr_zm_ui_gametype == "zgrief")
{
grief_bring_random_perks(machines, machine_triggers);
}
else
{
bring_random_perks(machines, machine_triggers);
}
}
bring_random_perks(machines, machine_triggers)
{
wait(randomintrange(10, 20));
bring_random_perk(machines, machine_triggers);
wait_for_round_range(5, 6);
wait(randomintrange(30, 60));
bring_random_perk(machines, machine_triggers);
wait_for_round_range(10, 11);
wait(randomintrange(30, 60));
bring_random_perk(machines, machine_triggers);
wait_for_round_range(15, 16);
wait(randomintrange(60, 120));
bring_random_perk(machines, machine_triggers);
wait_for_round_range(20, 21);
wait(randomintrange(60, 120));
bring_random_perk(machines, machine_triggers);
}
grief_bring_random_perks(machines, machine_triggers)
{
level waittill("restart_round_start");
wait(randomintrange(10, 20));
grief_bring_random_perk(machines, machine_triggers);
grief_bring_random_perk(machines, machine_triggers);
grief_bring_random_perk(machines, machine_triggers);
grief_bring_random_perk(machines, machine_triggers);
grief_bring_random_perk(machines, machine_triggers);
}
grief_bring_random_perk(machines, machine_triggers)
{
count = machines.size;
if (count <= 0)
return;
index = randomintrange(0, count);
level thread grief_bring_perk(machines[index], machine_triggers[index]);
arrayremoveindex(machines, index);
arrayremoveindex(machine_triggers, index);
}
grief_bring_perk(machine, trigger)
{
if (is_true(level.scr_zm_ui_gametype_pro) && trigger.script_noteworthy == "specialty_weapupgrade")
{
return;
}
initial_perk = level.grief_perk_arrival_vehicles_ind == 0;
perk_arrival_vehicle = level.grief_perk_arrival_vehicles[level.grief_perk_arrival_vehicles_ind];
level.grief_perk_arrival_vehicles_ind++;
if (initial_perk)
{
playsoundatposition("zmb_perks_incoming_quad_front", (0, 0, 0));
playsoundatposition("zmb_perks_incoming_alarm", (-2198, 486, 327));
}
is_doubletap = 0;
is_sleight = 0;
is_revive = 0;
is_jugger = 0;
machine setclientfield("clientfield_perk_intro_fx", 1);
machine.fx = spawn("script_model", machine.origin);
machine.fx playloopsound("zmb_perks_incoming_loop", 6);
machine.fx thread perk_incoming_sound();
machine.fx.angles = machine.angles;
machine.fx setmodel("tag_origin");
machine.fx linkto(machine);
machine linkto(perk_arrival_vehicle, "tag_origin", (0, 0, 0), (0, 0, 0));
start_node = getvehiclenode("perk_arrival_path_" + machine.script_int, "targetname");
perk_arrival_vehicle perk_follow_path(start_node);
machine unlink();
offset = (0, 0, 0);
if (issubstr(machine.targetname, "doubletap"))
{
forward_dir = anglestoforward(machine.original_angles + vectorscale((0, -1, 0), 90.0));
offset = vectorscale(forward_dir * -1, 20);
is_doubletap = 1;
}
else if (issubstr(machine.targetname, "sleight"))
{
forward_dir = anglestoforward(machine.original_angles + vectorscale((0, -1, 0), 90.0));
offset = vectorscale(forward_dir * -1, 5);
is_sleight = 1;
}
else if (issubstr(machine.targetname, "revive"))
{
forward_dir = anglestoforward(machine.original_angles + vectorscale((0, -1, 0), 90.0));
offset = vectorscale(forward_dir * -1, 10);
trigger.blocker_model hide();
is_revive = 1;
}
else if (issubstr(machine.targetname, "jugger"))
{
forward_dir = anglestoforward(machine.original_angles + vectorscale((0, -1, 0), 90.0));
offset = vectorscale(forward_dir * -1, 10);
is_jugger = 1;
}
if (!is_revive)
trigger.blocker_model delete();
machine.original_pos = machine.original_pos + (offset[0], offset[1], 0);
machine.origin = machine.original_pos;
machine.angles = machine.original_angles;
if (is_revive)
{
level.quick_revive_final_pos = machine.origin;
level.quick_revive_final_angles = machine.angles;
}
machine.fx stoploopsound(0.5);
machine setclientfield("clientfield_perk_intro_fx", 0);
playsoundatposition("zmb_perks_incoming_land", machine.origin);
trigger trigger_on();
machine thread bring_perk_landing_damage();
machine.fx unlink();
machine.fx delete();
machine notify(machine.turn_on_notify);
level notify(machine.turn_on_notify);
machine vibrate(vectorscale((0, -1, 0), 100.0), 0.3, 0.4, 3);
machine playsound("zmb_perks_power_on");
machine maps\mp\zombies\_zm_perks::perk_fx(undefined, 1);
if (is_revive)
{
level.revive_machine_spawned = 1;
machine thread maps\mp\zombies\_zm_perks::perk_fx("revive_light");
}
else if (is_jugger)
machine thread maps\mp\zombies\_zm_perks::perk_fx("jugger_light");
else if (is_doubletap)
machine thread maps\mp\zombies\_zm_perks::perk_fx("doubletap_light");
else if (is_sleight)
machine thread maps\mp\zombies\_zm_perks::perk_fx("sleight_light");
}