mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-10 15:17:57 -05:00
206 lines
6.8 KiB
Plaintext
206 lines
6.8 KiB
Plaintext
#include maps\mp\zm_tomb_teleporter;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\_utility;
|
|
#include maps\mp\zombies\_zm_utility;
|
|
#include maps\mp\zombies\_zm_powerups;
|
|
#include maps\mp\zombies\_zm_craftables;
|
|
#include maps\mp\zm_tomb_utility;
|
|
#include maps\mp\gametypes_zm\_hud;
|
|
#include maps\mp\zm_tomb_vo;
|
|
#include maps\mp\zombies\_zm_score;
|
|
|
|
#using_animtree("fxanim_props_dlc4");
|
|
|
|
teleporter_init()
|
|
{
|
|
registerclientfield("scriptmover", "teleporter_fx", 14000, 1, "int");
|
|
precacheshellshock("lava");
|
|
level.teleport = [];
|
|
level.n_active_links = 0;
|
|
level.n_countdown = 0;
|
|
level.n_teleport_delay = 0;
|
|
level.teleport_cost = 0;
|
|
level.n_teleport_cooldown = 0;
|
|
level.is_cooldown = 0;
|
|
level.n_active_timer = -1;
|
|
level.n_teleport_time = 0;
|
|
level.a_teleport_models = [];
|
|
a_entrance_models = getentarray("teleport_model", "targetname");
|
|
|
|
foreach (e_model in a_entrance_models)
|
|
{
|
|
e_model useanimtree(#animtree);
|
|
level.a_teleport_models[e_model.script_int] = e_model;
|
|
}
|
|
|
|
array_thread(a_entrance_models, ::teleporter_samantha_chamber_line);
|
|
a_portal_frames = getentarray("portal_exit_frame", "script_noteworthy");
|
|
level.a_portal_exit_frames = [];
|
|
|
|
foreach (e_frame in a_portal_frames)
|
|
{
|
|
e_frame useanimtree(#animtree);
|
|
e_frame ghost();
|
|
level.a_portal_exit_frames[e_frame.script_int] = e_frame;
|
|
}
|
|
|
|
level.a_teleport_exits = [];
|
|
a_exits = getstructarray("portal_exit", "script_noteworthy");
|
|
|
|
foreach (s_portal in a_exits)
|
|
level.a_teleport_exits[s_portal.script_int] = s_portal;
|
|
|
|
level.a_teleport_exit_triggers = [];
|
|
a_trigs = getstructarray("chamber_exit_trigger", "script_noteworthy");
|
|
|
|
foreach (s_trig in a_trigs)
|
|
level.a_teleport_exit_triggers[s_trig.script_int] = s_trig;
|
|
|
|
a_s_teleporters = getstructarray("trigger_teleport_pad", "targetname");
|
|
array_thread(a_s_teleporters, ::run_chamber_entrance_teleporter);
|
|
spawn_stargate_fx_origins();
|
|
root = %root;
|
|
i = %fxanim_zom_tomb_portal_open_anim;
|
|
i = %fxanim_zom_tomb_portal_collapse_anim;
|
|
}
|
|
|
|
run_chamber_entrance_teleporter()
|
|
{
|
|
self endon("death");
|
|
fx_glow = get_teleport_fx_from_enum(self.script_int);
|
|
e_model = level.a_teleport_models[self.script_int];
|
|
self.origin = e_model gettagorigin("fx_portal_jnt");
|
|
self.angles = e_model gettagangles("fx_portal_jnt");
|
|
self.angles = (self.angles[0], self.angles[1] + 180, self.angles[2]);
|
|
self.trigger_stub = tomb_spawn_trigger_radius(self.origin - vectorscale((0, 0, 1), 30.0), 50.0);
|
|
flag_init("enable_teleporter_" + self.script_int);
|
|
str_building_flag = "teleporter_building_" + self.script_int;
|
|
flag_init(str_building_flag);
|
|
collapse_time = getanimlength(%fxanim_zom_tomb_portal_collapse_anim);
|
|
open_time = getanimlength(%fxanim_zom_tomb_portal_open_anim);
|
|
flag_wait("start_zombie_round_logic");
|
|
e_model setanim(%fxanim_zom_tomb_portal_collapse_anim, 1.0, 0.1, 1);
|
|
wait(collapse_time);
|
|
|
|
flag_wait("enable_teleporter_" + self.script_int);
|
|
flag_set(str_building_flag);
|
|
|
|
e_model thread whirlwind_rumble_nearby_players(str_building_flag);
|
|
e_model setanim(%fxanim_zom_tomb_portal_open_anim, 1.0, 0.1, 1);
|
|
e_model playloopsound("zmb_teleporter_loop_pre", 1);
|
|
|
|
if (!(isdefined(self.exit_enabled) && self.exit_enabled))
|
|
{
|
|
self.exit_enabled = 1;
|
|
level thread run_chamber_exit(self.script_int);
|
|
}
|
|
|
|
wait(open_time);
|
|
e_model setanim(%fxanim_zom_tomb_portal_open_1frame_anim, 1.0, 0.1, 1);
|
|
wait_network_frame();
|
|
e_fx = spawn("script_model", self.origin);
|
|
e_fx.angles = self.angles;
|
|
e_fx setmodel("tag_origin");
|
|
e_fx setclientfield("element_glow_fx", self.script_int + 4);
|
|
rumble_nearby_players(e_fx.origin, 1000, 2);
|
|
e_model playloopsound("zmb_teleporter_loop_post", 1);
|
|
|
|
self thread stargate_teleport_think();
|
|
flag_clear(str_building_flag);
|
|
|
|
level notify("player_teleported", undefined, self.script_int);
|
|
}
|
|
|
|
run_chamber_exit(n_enum)
|
|
{
|
|
s_portal = level.a_teleport_exits[n_enum];
|
|
s_activate_pos = level.a_teleport_exit_triggers[n_enum];
|
|
e_portal_frame = level.a_portal_exit_frames[n_enum];
|
|
e_portal_frame show();
|
|
str_building_flag = e_portal_frame.targetname + "_building";
|
|
flag_init(str_building_flag);
|
|
s_activate_pos.trigger_stub = tomb_spawn_trigger_radius(s_activate_pos.origin, 50.0, 1);
|
|
s_activate_pos.trigger_stub set_unitrigger_hint_string(&"ZM_TOMB_TELE");
|
|
s_portal.target = s_activate_pos.target;
|
|
s_portal.origin = e_portal_frame gettagorigin("fx_portal_jnt");
|
|
s_portal.angles = e_portal_frame gettagangles("fx_portal_jnt");
|
|
s_portal.angles = (s_portal.angles[0], s_portal.angles[1] + 180, s_portal.angles[2]);
|
|
str_fx = get_teleport_fx_from_enum(n_enum);
|
|
collapse_time = getanimlength(%fxanim_zom_tomb_portal_collapse_anim);
|
|
open_time = getanimlength(%fxanim_zom_tomb_portal_open_anim);
|
|
flag_wait("start_zombie_round_logic");
|
|
|
|
s_activate_pos.trigger_stub set_unitrigger_hint_string("");
|
|
s_activate_pos.trigger_stub trigger_off();
|
|
|
|
e_portal_frame playloopsound("zmb_teleporter_loop_pre", 1);
|
|
e_portal_frame setanim(%fxanim_zom_tomb_portal_open_anim, 1.0, 0.1, 1);
|
|
flag_set(str_building_flag);
|
|
e_portal_frame thread whirlwind_rumble_nearby_players(str_building_flag);
|
|
wait(open_time);
|
|
e_portal_frame setanim(%fxanim_zom_tomb_portal_open_1frame_anim, 1.0, 0.1, 1);
|
|
wait_network_frame();
|
|
flag_clear(str_building_flag);
|
|
e_fx = spawn("script_model", s_portal.origin);
|
|
e_fx.angles = s_portal.angles;
|
|
e_fx setmodel("tag_origin");
|
|
e_fx setclientfield("element_glow_fx", n_enum + 4);
|
|
rumble_nearby_players(e_fx.origin, 1000, 2);
|
|
e_portal_frame playloopsound("zmb_teleporter_loop_post", 1);
|
|
s_portal thread teleporter_radius_think();
|
|
}
|
|
|
|
teleporter_radius_think(radius = 120.0)
|
|
{
|
|
self endon("teleporter_radius_stop");
|
|
radius_sq = radius * radius;
|
|
|
|
while (true)
|
|
{
|
|
a_players = getplayers();
|
|
|
|
foreach (e_player in a_players)
|
|
{
|
|
dist_sq = distancesquared(e_player.origin, self.origin);
|
|
|
|
if (!is_true(e_player.divetoprone) && dist_sq < radius_sq && !(isdefined(e_player.teleporting) && e_player.teleporting))
|
|
{
|
|
if (e_player getstance() == "prone")
|
|
{
|
|
e_player setstance("crouch");
|
|
}
|
|
|
|
playfx(level._effect["teleport_3p"], self.origin, (1, 0, 0), (0, 0, 1));
|
|
playsoundatposition("zmb_teleporter_tele_3d", self.origin);
|
|
level thread stargate_teleport_player(self.target, e_player);
|
|
}
|
|
}
|
|
|
|
wait_network_frame();
|
|
}
|
|
}
|
|
|
|
stargate_teleport_think()
|
|
{
|
|
self endon("death");
|
|
level endon("disable_teleporter_" + self.script_int);
|
|
e_potal = level.a_teleport_models[self.script_int];
|
|
|
|
while (true)
|
|
{
|
|
self.trigger_stub waittill("trigger", e_player);
|
|
|
|
if (!is_true(e_player.divetoprone) && !(isdefined(e_player.teleporting) && e_player.teleporting))
|
|
{
|
|
if (e_player getstance() == "prone")
|
|
{
|
|
e_player setstance("crouch");
|
|
}
|
|
|
|
playfx(level._effect["teleport_3p"], self.origin, (1, 0, 0), (0, 0, 1));
|
|
playsoundatposition("zmb_teleporter_tele_3d", self.origin);
|
|
level notify("player_teleported", e_player, self.script_int);
|
|
level thread stargate_teleport_player(self.target, e_player);
|
|
}
|
|
}
|
|
} |