Files
IL-GSC/MW3/PC/SP/maps/_laststand.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

1800 lines
40 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\_laststand.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 73
* Decompile Time: 1201 ms
* Timestamp: 10/27/2023 2:22:12 AM
*******************************************************************/
//Function Number: 1
main()
{
if(isdefined(level.laststand_initialized))
{
return;
}
level.laststand_initialized = 1;
common_scripts\utility::flag_init("laststand_on");
foreach(var_01 in level.players)
{
var_01 maps\_utility::ent_flag_init("laststand_downed");
var_01 maps\_utility::ent_flag_init("laststand_pause_bleedout_timer");
var_01 maps\_utility::ent_flag_init("laststand_proc_running");
var_01.laststand_info = spawnstruct();
var_01.laststand_info.type_getup_lives = 0;
}
precachestring(&"SCRIPT_COOP_BLEEDING_OUT_PARTNER");
precachestring(&"SCRIPT_COOP_BLEEDING_OUT");
precachestring(&"SCRIPT_COOP_REVIVING_PARTNER");
precachestring(&"SCRIPT_COOP_REVIVING");
precachestring(&"SCRIPT_COOP_REVIVE");
precacheshellshock("laststand_getup");
precacheitem("fnfiveseven");
common_scripts\utility::flag_set("laststand_on");
level.revive_hud_base_offset = 75;
if(!issplitscreen())
{
level.revive_hud_base_offset = 120;
}
level.revive_bar_offset = 15;
level.revive_bar_getup_offset = 30;
level.laststand_hud_elements = [];
thread laststand_on_load_finished();
}
//Function Number: 2
laststand_on_load_finished()
{
level waittill("load_finished");
if(laststand_get_type() == 2)
{
precacheshader("specialty_self_revive");
}
thread laststand_global_spawn_funcs();
if(common_scripts\utility::flag_exist("slamzoom_finished") && !common_scripts\utility::flag("slamzoom_finished"))
{
common_scripts\utility::flag_wait("slamzoom_finished");
}
thread laststand_notify_on_player_state_changes("laststand_player_state_changed");
thread laststand_downed_player_manager();
thread laststand_coop_hud_manager();
thread laststand_getup_hud_init();
thread laststand_on_mission_end();
}
//Function Number: 3
laststand_global_spawn_funcs()
{
if(laststand_get_type() == 2)
{
maps\_utility::add_global_spawn_function("axis",::ai_laststand_on_death);
}
}
//Function Number: 4
player_laststand_proc()
{
if(!maps\_utility::laststand_enabled())
{
return;
}
if(maps\_utility::ent_flag("laststand_proc_running"))
{
return;
}
if(!isdefined(self.original_maxhealth))
{
self.original_maxhealth = self.maxhealth;
}
if(!common_scripts\utility::flag("laststand_on"))
{
return;
}
level endon("laststand_on");
thread player_laststand_proc_ended();
switch(level.gameskill)
{
case 1:
case 0:
self.laststand_info.bleedout_time_default = 120;
level.laststand_stage2_multiplier = 0.5;
level.laststand_stage3_multiplier = 0.25;
break;
case 2:
self.laststand_info.bleedout_time_default = 90;
level.laststand_stage2_multiplier = 0.66;
level.laststand_stage3_multiplier = 0.33;
break;
case 3:
self.laststand_info.bleedout_time_default = 60;
level.laststand_stage2_multiplier = 0.5;
level.laststand_stage3_multiplier = 0.25;
break;
}
maps\_utility::ent_flag_set("laststand_proc_running");
self enabledeathshield(1);
maps\_utility::ent_flag_clear("laststand_downed");
maps\_utility::ent_flag_clear("laststand_pause_bleedout_timer");
self endon("death");
var_00 = self.unique_id;
for(;;)
{
self waittill("deathshield",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09,var_0A);
if(isdefined(self.saved_by_armor) && self.saved_by_armor)
{
continue;
}
if(maps\_utility::ent_flag("laststand_downed"))
{
continue;
}
if(isdefined(self.laststand_revive_time) && gettime() - self.laststand_revive_time <= 1750)
{
continue;
}
var_0B = [];
if(maps\_utility::is_coop() && laststand_downing_will_fail())
{
var_0C = maps\_utility::get_other_player(self);
if(var_0C maps\_utility::ent_flag("laststand_downed"))
{
self.coop_death_reason = [];
self.coop_death_reason["attacker"] = var_03;
self.coop_death_reason["cause"] = var_06;
self.coop_death_reason["weapon_name"] = var_0B;
}
}
if(!maps\_utility::is_coop())
{
self.coop_death_reason = [];
self.coop_death_reason["attacker"] = var_03;
self.coop_death_reason["cause"] = var_06;
self.coop_death_reason["weapon_name"] = var_0B;
}
level.down_player_requests[self.unique_id] = var_7B;
try_crush_player(var_03,var_06);
level notify("request_player_downed",var_7B["player"],self,var_7B["damage"],var_01);
}
}
//Function Number: 5
player_laststand_proc_ended()
{
self endon("death");
common_scripts\utility::flag_waitopen("laststand_on");
maps\_utility::ent_flag_clear("laststand_proc_running");
self enabledeathshield(0);
}
//Function Number: 6
laststand_downed_player_manager()
{
if(maps\_utility::is_coop())
{
thread laststand_revive_ents_manager();
}
level.laststand_recent_player_downed_time = 0;
for(;;)
{
level.down_player_requests = [];
level waittill("request_player_downed");
waittillframeend;
var_00 = gettime();
if(var_00 < level.laststand_recent_player_downed_time + level.player_downed_death_buffer_time * 1000)
{
continue;
}
level.laststand_recent_player_downed_time = var_00;
var_01 = 0;
var_02 = undefined;
level.down_player_requests = maps\_utility::array_randomize(level.down_player_requests);
foreach(var_04 in level.down_player_requests)
{
if(var_04["damage"] >= var_01)
{
var_02 = var_04["player"];
}
}
var_02 thread player_laststand_force_down();
thread maps\_gameskill::resetskill();
}
}
//Function Number: 7
laststand_revive_ents_manager()
{
if(!maps\_utility::is_coop())
{
return;
}
level.default_use_radius = getdvarint("player_useradius");
level endon("special_op_terminated");
level.revive_ents = [];
foreach(var_01 in level.players)
{
var_02 = spawn("script_model",var_01.origin + (0,0,28));
var_02 setmodel("tag_origin");
var_02 linkto(var_01,"tag_origin",(0,0,28),(0,0,0));
var_02 sethintstring(&"SCRIPT_COOP_REVIVE");
level.revive_ents[var_01.unique_id] = var_02;
var_01 thread player_laststand_on_revive();
}
for(;;)
{
level waittill("laststand_player_state_changed");
foreach(var_01 in level.players)
{
var_01 revive_set_use_target_state(maps\_utility::is_player_down(var_01));
}
if(maps\_utility::get_players_healthy().size == level.players.size)
{
setsaveddvar("player_useradius",level.default_use_radius);
continue;
}
setsaveddvar("player_useradius",128);
}
}
//Function Number: 8
laststand_notify_on_player_state_changes(param_00)
{
level endon("special_op_terminated");
foreach(var_02 in level.players)
{
var_02 endon("death");
}
for(;;)
{
foreach(var_02 in level.players)
{
var_02 thread notify_on_ent_flag_change("laststand_downed",param_00);
}
level waittill(param_00);
}
}
//Function Number: 9
notify_on_ent_flag_change(param_00,param_01)
{
level endon("special_op_terminated");
level endon(param_01);
self endon("death");
if(maps\_utility::ent_flag(param_00))
{
maps\_utility::ent_flag_waitopen(param_00);
}
else
{
maps\_utility::ent_flag_wait(param_00);
}
level notify(param_01);
}
//Function Number: 10
player_laststand_force_down()
{
if(!isalive(self))
{
return;
}
level endon("special_op_terminated");
self endon("death");
player_laststand_set_down_attributes();
if(maps\_utility::is_coop())
{
thread player_laststand_downed_dialogue();
thread player_laststand_on_downed_hud_update();
thread player_laststand_downed_icon();
}
maps\_utility::add_wait(::maps\_utility::ent_flag_waitopen,"laststand_downed");
maps\_utility::add_wait(::maps\_utility::waittill_msg,"coop_bled_out");
maps\_utility::do_wait_any();
self notify("end_func_player_laststand_downed_icon");
if(maps\_utility::ent_flag("laststand_downed"))
{
player_laststand_kill();
return;
}
player_laststand_set_original_attributes();
}
//Function Number: 11
player_laststand_on_revive()
{
self endon("death");
level endon("special_op_terminated");
var_00 = player_get_revive_ent();
var_01 = 0;
for(;;)
{
var_00 waittill("trigger",var_02);
if(maps\_utility::is_player_down(var_02))
{
continue;
}
self.laststand_savior = var_02;
if(maps\_utility::is_player_down(self) && var_02 player_laststand_is_reviving(self))
{
laststand_freeze_players(1,var_02,self);
level.laststand_recent_player_downed_time = 0;
wait 0.1;
if(!maps\_utility::is_player_down(self) || !var_02 player_laststand_is_reviving(self))
{
var_02 player_laststand_revive_buddy_cleanup(self);
continue;
}
level.bars = [];
level.bars["p1"] = maps\_hud_util::createclientprogressbar(level.player,level.revive_hud_base_offset + level.revive_bar_offset);
level.bars["p2"] = maps\_hud_util::createclientprogressbar(level.player2,level.revive_hud_base_offset + level.revive_bar_offset);
var_03 = randomfloat(1) > 0.33;
if(var_03)
{
var_02 notify("so_reviving");
}
var_01 = 0;
var_04 = 1.5;
while(maps\_utility::is_player_down(self) && !maps\_utility::is_player_down(var_02) && var_02 player_laststand_is_reviving(self))
{
maps\_utility::ent_flag_set("laststand_pause_bleedout_timer");
foreach(var_06 in level.bars)
{
var_06 maps\_hud_util::updatebar(var_01 / var_04);
}
wait 0.05;
var_01 = var_01 + 0.05;
if(maps\_utility::is_player_down(self) && var_01 > var_04)
{
if(!var_03)
{
var_02 notify("so_revived");
}
var_02 notify("so_revive_success");
player_laststand_revive_self();
break;
}
}
var_02 player_laststand_revive_buddy_cleanup(self);
}
}
}
//Function Number: 12
player_laststand_is_reviving(param_00)
{
if(!self usebuttonpressed())
{
return 0;
}
if(isdefined(param_00.laststand_savior) && param_00.laststand_savior == self)
{
return 1;
}
return 0;
}
//Function Number: 13
player_laststand_revive_self()
{
self.laststand_revive_time = gettime();
player_dying_effect_remove();
maps\_utility::ent_flag_clear("laststand_downed");
self.coop_death_reason = undefined;
thread maps\_gameskill::resetskill();
self notify("revived");
}
//Function Number: 14
player_laststand_revive_buddy_cleanup(param_00)
{
level notify("revive_bars_killed");
revive_hud_cleanup_bars();
if(isdefined(param_00) && isalive(param_00))
{
param_00.laststand_savior = undefined;
param_00 maps\_utility::ent_flag_clear("laststand_pause_bleedout_timer");
}
if(isdefined(self) && isalive(self))
{
laststand_freeze_players(0,self,param_00);
}
}
//Function Number: 15
laststand_freeze_players(param_00,param_01,param_02)
{
param_02 = maps\_utility::get_other_player(self);
if(param_00)
{
param_01 freezecontrols(1);
param_01 disableweapons();
param_01 disableweaponswitch();
param_02 freezecontrols(1);
param_02 disableweapons();
return;
}
param_01 freezecontrols(0);
param_01 enableweapons();
param_01 enableweaponswitch();
param_02 freezecontrols(0);
if(!maps\_utility::is_player_down_and_out(param_02))
{
param_02 enableweapons();
}
}
//Function Number: 16
player_laststand_downed_dialogue()
{
self endon("death");
self endon("revived");
level endon("special_op_terminated");
wait 1;
self notify("so_downed");
thread player_laststand_downed_nag_button(0.05);
}
//Function Number: 17
player_laststand_downed_nag_button(param_00)
{
self endon("death");
self endon("revived");
level endon("special_op_terminated");
if(isdefined(param_00) && param_00 > 0)
{
wait param_00;
}
self notifyonplayercommand("nag","weapnext");
for(;;)
{
if(!can_show_nag_prompt())
{
wait 0.05;
continue;
}
if(nag_should_draw_hud())
{
thread nag_prompt_show();
thread nag_prompt_cancel();
}
var_01 = common_scripts\utility::waittill_any_timeout(level.coop_revive_nag_hud_refreshtime,"nag","nag_cancel");
if(var_01 == "nag")
{
self.lastrevivenagbuttonpresstime = gettime();
thread player_downed_hud_toggle_blinkstate();
thread maps\_specialops_battlechatter::play_revive_nag();
}
wait 0.05;
}
}
//Function Number: 18
nag_should_draw_hud()
{
var_00 = level.coop_revive_nag_hud_refreshtime * 1000;
if(isdefined(self) && isdefined(self.nag_hud_on))
{
return 0;
}
else if(!isdefined(self.lastrevivenagbuttonpresstime))
{
return 1;
}
else if(gettime() - self.lastrevivenagbuttonpresstime < var_00)
{
return 0;
}
return 1;
}
//Function Number: 19
nag_prompt_show()
{
if(!isdefined(self))
{
return;
}
self.nag_hud_on = 1;
var_00 = 0.05;
var_01 = &"SPECIAL_OPS_REVIVE_NAG_HINT";
var_02 = get_nag_hud();
var_02.alpha = 0;
var_02 settext(var_01);
var_02 fadeovertime(var_00);
var_02.alpha = 1;
waittill_disable_nag();
self.nag_hud_on = undefined;
var_02 fadeovertime(var_00);
var_02.alpha = 0;
var_02 common_scripts\utility::delaycall(var_00 + 0.05,::destroy);
}
//Function Number: 20
get_nag_hud()
{
var_00 = newclienthudelem(self);
var_00.x = 0;
var_00.y = 50;
var_00.alignx = "center";
var_00.aligny = "middle";
var_00.horzalign = "center";
var_00.vertalign = "middle";
var_00.fontscale = 1;
var_00.color = (1,1,1);
var_00.font = "hudsmall";
var_00.glowcolor = (0.3,0.6,0.3);
var_00.glowalpha = 0;
var_00.foreground = 1;
var_00.hidewheninmenu = 1;
var_00.hidewhendead = 1;
return var_00;
}
//Function Number: 21
nag_prompt_cancel()
{
self endon("nag");
while(maps\_utility::is_player_down(self) && can_show_nag_prompt())
{
wait 0.05;
}
self notify("nag_cancel");
}
//Function Number: 22
can_show_nag_prompt()
{
if(isdefined(level.hide_nag_prompt) && level.hide_nag_prompt)
{
return 0;
}
var_00 = maps\_utility::get_other_player(self);
if(var_00 player_laststand_is_reviving(self))
{
return 0;
}
if(!maps\_specialops_battlechatter::can_say_current_nag_event_type())
{
return 0;
}
return 1;
}
//Function Number: 23
laststand_coop_hud_manager()
{
if(!maps\_utility::is_coop())
{
return;
}
level endon("special_op_terminated");
var_00 = [];
foreach(var_02 in level.players)
{
var_00[var_02.unique_id] = maps\_utility::is_player_down(var_02);
}
laststand_coop_hud_create();
for(;;)
{
level waittill("laststand_player_state_changed");
waittillframeend;
foreach(var_02 in level.players)
{
var_05 = maps\_utility::get_other_player(var_02);
var_06 = var_02 player_laststand_changed_state(var_00);
var_07 = var_05 player_laststand_changed_state(var_00);
if(var_06)
{
if(maps\_utility::is_player_down(var_02))
{
var_02.revive_text_friend.alpha = 0;
var_02.revive_timer_friend.alpha = 0;
var_02.revive_text_local thread maps\_specialops::so_hud_pulse_stop();
var_02.revive_timer_local thread maps\_specialops::so_hud_pulse_stop();
var_02.revive_text_local.alpha = 1;
var_02.revive_timer_local.alpha = 1;
var_02.revive_text_local thread maps\_specialops::so_hud_pulse_create();
var_02.revive_timer_local thread maps\_specialops::so_hud_pulse_create();
}
else if(maps\_utility::is_player_down(var_05))
{
var_02.revive_text_local.alpha = 0;
var_02.revive_timer_local.alpha = 0;
var_02.revive_text_friend thread maps\_specialops::so_hud_pulse_stop();
var_02.revive_timer_friend thread maps\_specialops::so_hud_pulse_stop();
var_02.revive_text_friend.alpha = 1;
var_02.revive_timer_friend.alpha = 1;
var_02.revive_text_friend thread maps\_specialops::so_hud_pulse_create();
var_02.revive_timer_friend thread maps\_specialops::so_hud_pulse_create();
}
else
{
var_02 player_laststand_hud_hide();
}
}
if(var_07)
{
if(!maps\_utility::is_player_down(var_02))
{
if(maps\_utility::is_player_down(var_05))
{
var_02.revive_text_local.alpha = 0;
var_02.revive_timer_local.alpha = 0;
var_02.revive_text_friend thread maps\_specialops::so_hud_pulse_stop();
var_02.revive_timer_friend thread maps\_specialops::so_hud_pulse_stop();
var_02.revive_text_friend.alpha = 1;
var_02.revive_timer_friend.alpha = 1;
var_02.revive_text_friend thread maps\_specialops::so_hud_pulse_create();
var_02.revive_timer_friend thread maps\_specialops::so_hud_pulse_create();
continue;
}
var_02 player_laststand_hud_hide();
}
}
}
foreach(var_02 in level.players)
{
var_00[var_02.unique_id] = maps\_utility::is_player_down(var_02);
}
}
}
//Function Number: 24
laststand_coop_hud_create()
{
foreach(var_01 in level.players)
{
var_01.revive_text_local = var_01 maps\_hud_util::createclientfontstring("hudsmall",1);
var_01.revive_text_local maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset);
var_01.revive_text_local settext(&"SCRIPT_COOP_BLEEDING_OUT");
var_01.revive_text_friend = var_01 maps\_hud_util::createclientfontstring("hudsmall",1);
var_01.revive_text_friend maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset);
var_01.revive_text_friend settext(&"SCRIPT_COOP_BLEEDING_OUT_PARTNER");
var_01.revive_timer_local = var_01 maps\_hud_util::createclienttimer("hudsmall",1.2);
var_01.revive_timer_local maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset + level.revive_bar_offset);
var_01.revive_timer_friend = var_01 maps\_hud_util::createclienttimer("hudsmall",1.2);
var_01.revive_timer_friend maps\_hud_util::setpoint("CENTER",undefined,0,level.revive_hud_base_offset + level.revive_bar_offset);
var_01 player_laststand_hud_hide();
level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_text_local;
level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_text_friend;
level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_timer_local;
level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_timer_friend;
}
}
//Function Number: 25
player_laststand_hud_hide()
{
self.revive_text_local.alpha = 0;
self.revive_text_friend.alpha = 0;
self.revive_timer_local.alpha = 0;
self.revive_timer_friend.alpha = 0;
}
//Function Number: 26
player_laststand_changed_state(param_00)
{
var_01 = maps\_utility::is_player_down(self);
var_02 = param_00[self.unique_id];
return var_01 != var_02;
}
//Function Number: 27
laststand_getup_hud_init()
{
if(laststand_get_type() != 2)
{
return;
}
foreach(var_01 in level.players)
{
var_01.laststand_getup_fast = 0;
}
laststand_revive_bar_getup_create();
}
//Function Number: 28
laststand_revive_bar_getup_create()
{
foreach(var_01 in level.players)
{
var_02 = level.revive_hud_base_offset + level.revive_bar_getup_offset;
var_01.revive_bar_getup = maps\_hud_util::createclientprogressbar(var_01,var_02,"white","black",130,12);
var_01 player_laststand_getup_bar_set_fill(0.5);
level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_bar_getup;
var_01.revive_bar_getup_icon = newclienthudelem(var_01);
var_01.revive_bar_getup_icon.hidden = 0;
var_01.revive_bar_getup_icon.elemtype = "icon";
var_01.revive_bar_getup_icon.hidewheninmenu = 1;
var_01.revive_bar_getup_icon.archived = 0;
var_01.revive_bar_getup_icon.x = -93;
var_01.revive_bar_getup_icon.y = var_02;
var_01.revive_bar_getup_icon.alignx = "center";
var_01.revive_bar_getup_icon.aligny = "middle";
var_01.revive_bar_getup_icon.horzalign = "center";
var_01.revive_bar_getup_icon.vertalign = "middle";
var_01.revive_bar_getup_icon.children = [];
var_01.revive_bar_getup_icon.elemtype = "icon";
var_01.revive_bar_getup_icon setshader("specialty_self_revive",28,28);
level.laststand_hud_elements[level.laststand_hud_elements.size] = var_01.revive_bar_getup_icon;
var_01.revive_bar_getup maps\_hud_util::hidebar(1);
var_01.revive_bar_getup_icon.alpha = 0;
}
}
//Function Number: 29
player_laststand_on_downed_hud_update()
{
self endon("end_func_player_laststand_downed_icon");
self endon("death");
self endon("revived");
level endon("special_op_terminated");
foreach(var_01 in level.players)
{
if(var_01 == self)
{
var_01.revive_timer_local settimer(self.laststand_info.bleedout_time_default - 1);
continue;
}
var_01.revive_timer_friend settimer(self.laststand_info.bleedout_time_default - 1);
}
thread player_laststand_countdown_timer(self.laststand_info.bleedout_time_default);
var_03 = self.laststand_info.bleedout_time_default;
foreach(var_01 in level.players)
{
if(var_01 == self)
{
var_01.revive_text_local.color = self.revive_text_local.color;
var_01.revive_timer_local.color = self.revive_text_local.color;
continue;
}
var_01.revive_text_friend.color = var_01.revive_text_local.color;
var_01.revive_timer_friend.color = var_01.revive_text_local.color;
}
waittillframeend;
while(var_03)
{
foreach(var_01 in level.players)
{
if(var_01 == self)
{
var_07 = var_01.revive_text_local;
var_08 = var_01.revive_timer_local;
}
else
{
var_07 = var_01.revive_text_friend;
var_08 = var_01.revive_timer_friend;
}
var_09 = var_07.color;
var_0A = get_coop_downed_hud_color(self.laststand_info.bleedout_time,self.laststand_info.bleedout_time_default,0,var_01 == self);
var_07.color = var_0A;
var_08.color = var_0A;
if(distance(var_0A,var_09) > 0.001)
{
if(distance(var_0A,var_01.coop_icon_color_dying) <= 0.001)
{
var_07.pulse_bounds = 1;
var_08.pulse_bounds = 1;
}
var_07 thread maps\_specialops::so_hud_pulse_create();
var_08 thread maps\_specialops::so_hud_pulse_create();
}
}
wait 1;
var_03 = var_03 - 1;
}
}
//Function Number: 30
player_laststand_downed_icon()
{
self endon("end_func_player_laststand_downed_icon");
self endon("death");
self endon("revived");
level endon("special_op_terminated");
waittillframeend;
var_00 = maps\_utility::get_other_player(self);
var_00 maps\_coop::friendlyhudicon_downed();
while(self.laststand_info.bleedout_time > 0)
{
maps\_utility::ent_flag_waitopen("laststand_pause_bleedout_timer");
var_00 maps\_coop::friendlyhudicon_update(get_coop_downed_hud_color(self.laststand_info.bleedout_time,self.laststand_info.bleedout_time_default));
wait 0.05;
}
}
//Function Number: 31
player_laststand_countdown_timer(param_00)
{
self endon("death");
self endon("revived");
level endon("special_op_terminated");
self.laststand_info.bleedout_time = param_00;
while(self.laststand_info.bleedout_time > 0)
{
if(maps\_utility::ent_flag("laststand_pause_bleedout_timer"))
{
foreach(var_02 in level.players)
{
if(var_02 == self)
{
var_02.revive_timer_local.alpha = 0;
continue;
}
var_02.revive_timer_friend.alpha = 0;
}
maps\_utility::ent_flag_waitopen("laststand_pause_bleedout_timer");
if(self.laststand_info.bleedout_time >= 1)
{
foreach(var_02 in level.players)
{
if(var_02 == self)
{
var_02.revive_timer_local settimer(self.laststand_info.bleedout_time - 1);
continue;
}
var_02.revive_timer_friend settimer(self.laststand_info.bleedout_time - 1);
}
}
}
else
{
foreach(var_02 in level.players)
{
if(var_02 == self)
{
var_02.revive_timer_local.alpha = 1;
continue;
}
if(!maps\_utility::is_player_down(var_02))
{
var_02.revive_timer_friend.alpha = 1;
}
}
}
wait 0.05;
self.laststand_info.bleedout_time = self.laststand_info.bleedout_time - 0.05;
}
self.laststand_info.bleedout_time = 0;
maps\_specialops::so_force_deadquote("@DEADQUOTE_SO_BLED_OUT","ui_bled_out");
thread maps\_specialops::so_dialog_mission_failed_bleedout();
self notify("coop_bled_out");
}
//Function Number: 32
get_coop_downed_hud_color(param_00,param_01,param_02,param_03)
{
if(isdefined(param_03) && param_03)
{
var_04 = self;
}
else
{
var_04 = maps\_utility::get_other_player(self);
}
if(!isdefined(param_02))
{
param_02 = 1;
}
if(param_02 && coop_downed_hud_should_blink())
{
if(self.blinkstate == 1)
{
return var_04.coop_icon_color_blink;
}
}
if(param_00 < param_01 * level.laststand_stage3_multiplier)
{
return var_04.coop_icon_color_dying;
}
if(param_00 < param_01 * level.laststand_stage2_multiplier)
{
return var_04.coop_icon_color_damage;
}
return var_04.coop_icon_color_downed;
}
//Function Number: 33
coop_downed_hud_should_blink()
{
var_00 = maps\_utility::get_other_player(self);
if(var_00 player_laststand_is_reviving(self))
{
return 0;
}
if(isdefined(self.lastrevivenagbuttonpresstime))
{
if(gettime() - self.lastrevivenagbuttonpresstime < level.coop_icon_blinktime * 1000)
{
return 1;
}
}
return 0;
}
//Function Number: 34
laststand_hud_destroy()
{
if(isdefined(level.laststand_hud_elements))
{
foreach(var_01 in level.laststand_hud_elements)
{
if(isdefined(var_01))
{
var_01 notify("destroying");
var_01 maps\_hud_util::destroyelem();
}
}
}
level.laststand_hud_elements = undefined;
}
//Function Number: 35
player_laststand_set_down_attributes()
{
self endon("death");
self notify("player_downed");
self.ignorerandombulletdamage = 1;
self enableinvulnerability();
maps\_utility::ent_flag_set("laststand_downed");
self.laststand = 1;
self.health = 2;
self.maxhealth = self.original_maxhealth;
self.ignoreme = 1;
self disableusability();
self disableweaponswitch();
self disableoffhandweapons();
self disableweapons();
if(!isdefined(self.laststand_down_count))
{
self.laststand_down_count = 1;
}
else
{
self.laststand_down_count++;
}
if(isdefined(self.placingsentry))
{
self notify("sentry_placement_canceled");
}
thread player_laststand_kill_by_vehicle();
if(laststand_downing_will_fail())
{
player_laststand_kill();
return;
}
thread player_laststand_set_down_part1();
}
//Function Number: 36
player_laststand_set_original_attributes()
{
self.ignorerandombulletdamage = 0;
maps\_utility::ent_flag_clear("laststand_downed");
self.laststand = 0;
self.achieve_downed_kills = undefined;
self.down_part2_proc_ran = undefined;
if(maps\_utility::is_coop())
{
var_00 = maps\_utility::get_other_player(self);
var_00 maps\_coop::friendlyhudicon_normal();
}
self disableweapons();
remove_pistol_if_extra();
self.health = self.maxhealth;
self.ignoreme = 0;
self setstance("stand");
self enableusability();
self enableoffhandweapons();
self enableweaponswitch();
self enableweapons();
self notify("not_in_last_stand");
wait 1;
self disableinvulnerability();
}
//Function Number: 37
remove_pistol_if_extra()
{
if(isdefined(self.forced_pistol))
{
self takeweapon(self.forced_pistol);
self.forced_pistol = undefined;
}
if(isdefined(self.preincap_pistol))
{
self setweaponammoclip(self.preincap_pistol,self.preincap_pistol_clip);
self setweaponammostock(self.preincap_pistol,self.preincap_pistol_stock);
}
if(player_can_restore_weapon(self.preincap_weapon))
{
self switchtoweapon(self.preincap_weapon);
}
else
{
var_00 = self getweaponslistprimaries();
self switchtoweapon(var_00[0]);
}
self.preincap_weapon = undefined;
}
//Function Number: 38
player_laststand_kill_by_vehicle()
{
self endon("revived");
self endon("death");
level endon("special_op_terminated");
if(common_scripts\utility::flag("special_op_terminated"))
{
return;
}
if(!isalive(self))
{
return;
}
for(;;)
{
var_00 = vehicle_getarray();
foreach(var_02 in var_00)
{
if(isdefined(var_02.dont_crush_player) && var_02.dont_crush_player)
{
continue;
}
var_03 = var_02 vehicle_getspeed();
if(abs(var_03) == 0)
{
continue;
}
if(self istouching(var_02))
{
var_02 maps\_specialops::so_crush_player(self,"MOD_CRUSH");
return;
}
}
wait 0.05;
}
}
//Function Number: 39
player_laststand_set_down_part1()
{
self endon("revived");
self endon("death");
level endon("special_op_terminated");
if(laststand_get_type() != 2)
{
wait 0.3;
}
thread player_laststand_force_switch_to_pistol();
if(laststand_get_type() == 2)
{
if(get_lives_remaining() > 0)
{
if(!isdefined(self.laststand_count))
{
self.laststand_count = 1;
}
else
{
self.laststand_count++;
}
if(self.laststand_count <= 9999)
{
thread player_laststand_getup_sequence();
self waittill("laststand_getup_failed");
}
if(!maps\_utility::is_coop() || maps\_utility::is_player_down_and_out(maps\_utility::get_other_player(self)))
{
player_laststand_kill();
return;
}
}
else
{
waittillframeend;
}
}
else
{
wait 0.25;
self disableinvulnerability();
thread player_laststand_down_draw_attention();
self waittill("damage");
}
thread player_laststand_set_down_part2();
}
//Function Number: 40
player_laststand_getup_sequence()
{
self endon("revived");
self endon("death");
self endon("laststand_getup_failed");
level endon("special_op_terminated");
thread player_laststand_getup_sequence_clean_up();
thread player_laststand_getup_sequence_catch_kills();
thread player_laststand_getup_sequence_catch_damage();
thread player_laststand_getup_sequence_bad_place();
thread player_laststand_effect();
thread player_laststand_getup_sequence_ignore();
var_00 = self.laststand_count - 1 * 0;
var_01 = max(0.5 - var_00,0.2);
player_laststand_getup_bar_set_fill(var_01);
self.revive_bar_getup maps\_hud_util::hidebar(0);
self.revive_bar_getup_icon.alpha = 1;
wait 2;
self disableinvulnerability();
self.last_damage_time = gettime();
for(;;)
{
var_02 = 0;
if(isdefined(self.laststand_getup_fast) && self.laststand_getup_fast)
{
var_02 = 1;
}
else if(gettime() - self.last_damage_time > 3000)
{
var_02 = 1;
}
var_03 = common_scripts\utility::ter_op(var_02,0.01,0.0025);
player_laststand_getup_bar_adjust(var_03);
wait 0.05;
}
}
//Function Number: 41
player_laststand_getup_sequence_clean_up()
{
level endon("special_op_terminated");
self endon("death");
var_00 = common_scripts\utility::waittill_any_return("player_down_and_out","revived");
if(isdefined(var_00) && var_00 == "player_down_and_out")
{
self.ignoreme = 1;
}
update_lives_remaining(0);
thread player_laststand_getup_sequence_clean_up_delayed(0.5);
self.laststand_getup_fast = 0;
if(isdefined(self.laststand_badplace))
{
badplace_delete(self.laststand_badplace);
self.laststand_badplace = undefined;
}
}
//Function Number: 42
player_laststand_getup_sequence_clean_up_delayed(param_00)
{
level endon("special_op_terminated");
self endon("player_downed");
wait param_00;
self.revive_bar_getup maps\_hud_util::hidebar(1);
self.revive_bar_getup_icon.alpha = 0;
}
//Function Number: 43
player_laststand_getup_sequence_ignore()
{
self endon("revived");
self endon("death");
self endon("laststand_getup_failed");
level endon("special_op_terminated");
self.ignoreme = 1;
wait 0.25;
self.ignoreme = 0;
}
//Function Number: 44
player_laststand_getup_sequence_catch_kills()
{
self endon("revived");
self endon("death");
self endon("laststand_getup_failed");
level endon("special_op_terminated");
for(;;)
{
self waittill("revive_kill");
player_laststand_getup_bar_adjust(1);
}
}
//Function Number: 45
player_laststand_getup_sequence_catch_damage()
{
self endon("revived");
self endon("death");
self endon("laststand_getup_failed");
level endon("special_op_terminated");
for(;;)
{
common_scripts\utility::waittill_any("damage","deathshield");
player_laststand_getup_bar_adjust(-0.1);
self.last_damage_time = gettime();
wait 0.2;
}
}
//Function Number: 46
player_laststand_getup_sequence_bad_place()
{
self endon("revived");
self endon("death");
self endon("laststand_getup_failed");
level endon("special_op_terminated");
self.laststand_badplace = self.unique_id + "_ls_badplace";
for(;;)
{
badplace_cylinder(self.laststand_badplace,90,self.origin,120,120,"axis");
wait 90;
badplace_delete(self.laststand_badplace);
}
}
//Function Number: 47
player_laststand_getup_bar_adjust(param_00)
{
param_00 = clamp(param_00,-1,1);
var_01 = clamp(self.revive_bar_getup.bar.frac + param_00,0,1);
player_laststand_getup_bar_set_fill(var_01);
if(var_01 == 1)
{
player_laststand_revive_self();
return;
}
if(var_01 == 0)
{
self notify("laststand_getup_failed");
}
}
//Function Number: 48
player_laststand_getup_bar_set_fill(param_00)
{
var_01 = (1,0.4,0.4);
var_02 = (1,0,0);
self.revive_bar_getup.bar.color = vectorlerp(var_02,var_01,param_00);
self.revive_bar_getup maps\_hud_util::updatebar(param_00);
}
//Function Number: 49
player_laststand_set_down_part2()
{
self.down_part2_proc_ran = 1;
self notify("player_down_and_out");
self disableweapons();
thread player_dying_effect();
self.ignoreme = 1;
self.ignorerandombulletdamage = 1;
self enableinvulnerability();
}
//Function Number: 50
player_laststand_force_switch_to_pistol()
{
self.preincap_weapon = self getcurrentweapon();
var_00 = player_laststand_check_for_pistol();
self.preincap_pistol = undefined;
self.preincap_pistol_stock = 0;
self.preincap_pistol_clip = 0;
var_01 = undefined;
if(isdefined(var_00))
{
self.preincap_pistol = var_00;
self.preincap_pistol_stock = self getweaponammostock(var_00);
self.preincap_pistol_clip = self getweaponammoclip(var_00);
var_01 = var_00;
}
else if(isdefined(level.coop_incap_weapon))
{
var_02 = isdefined(level.coop_incap_weapon) && self hasweapon(level.coop_incap_weapon);
if(!var_02)
{
self.forced_pistol = level.coop_incap_weapon;
self giveweapon(level.coop_incap_weapon);
}
else
{
self.preincap_pistol = level.coop_incap_weapon;
self.preincap_pistol_stock = self getweaponammostock(var_00);
self.preincap_pistol_clip = self getweaponammoclip(var_00);
}
var_01 = level.coop_incap_weapon;
}
else
{
var_01 = "fnfiveseven";
self.forced_pistol = var_01;
self giveweapon(var_01);
}
self setweaponammoclip(var_01,weaponclipsize(var_01));
self setweaponammostock(var_01,weaponmaxammo(var_01));
thread player_laststand_on_reload_fill_stock();
self switchtoweapon(var_01);
self enableweapons();
}
//Function Number: 51
player_laststand_on_reload_fill_stock()
{
level endon("special_op_terminated");
self endon("death");
self endon("player_down_and_out");
self endon("not_in_last_stand");
self endon("revived");
self endon("weapon_change");
for(;;)
{
self waittill("reload");
var_00 = self getcurrentweapon();
self setweaponammostock(var_00,weaponmaxammo(var_00));
}
}
//Function Number: 52
player_laststand_down_draw_attention()
{
self endon("death");
self endon("revived");
self endon("damage");
notifyoncommand("draw_attention","+attack");
notifyoncommand("draw_attention","+attack_akimbo_accessible");
common_scripts\utility::waittill_any_timeout(4,"draw_attention","player_down_and_out");
if(maps\_utility::is_player_down_and_out(self))
{
return;
}
self.ignoreme = 0;
self.ignorerandombulletdamage = 0;
}
//Function Number: 53
ai_laststand_on_death()
{
level endon("special_op_terminated");
self waittill("death",var_00,var_01,var_02);
var_03 = 0;
if(isdefined(var_00) && isalive(var_00) && isplayer(var_00) && maps\_utility::is_player_down(var_00))
{
if(isdefined(var_02) && weaponclass(var_02) == "pistol")
{
var_03 = 1;
}
else if(isdefined(var_01) && var_01 == "MOD_MELEE")
{
var_03 = 1;
}
}
if(var_03)
{
var_00 notify("revive_kill");
}
}
//Function Number: 54
player_dying_effect()
{
self endon("death");
self endon("revived");
if(!maps\_utility::ent_flag_exist("laststand_dying_effect"))
{
maps\_utility::ent_flag_init("laststand_dying_effect");
}
else if(maps\_utility::ent_flag("laststand_dying_effect"))
{
return;
}
maps\_utility::ent_flag_set("laststand_dying_effect");
player_shock_effect("default",60,1);
}
//Function Number: 55
player_dying_effect_remove()
{
if(maps\_utility::ent_flag_exist("laststand_dying_effect"))
{
maps\_utility::ent_flag_clear("laststand_dying_effect");
}
self stopshellshock();
}
//Function Number: 56
player_laststand_effect()
{
self endon("death");
self endon("revived");
self endon("player_down_and_out");
self notify("laststand_effect");
self endon("laststand_effect");
player_shock_effect("laststand_getup",60,1);
}
//Function Number: 57
player_shock_effect(param_00,param_01,param_02,param_03)
{
self endon("death");
level endon("special_op_terminated");
if(!isdefined(param_00) || !isdefined(param_01))
{
return;
}
if(isdefined(param_03))
{
var_04 = strtok(param_03," ");
foreach(var_06 in var_04)
{
self endon(var_06);
}
}
for(;;)
{
self shellshock(param_00,param_01);
wait param_01;
if(isdefined(param_02) && !param_02)
{
break;
}
}
}
//Function Number: 58
laststand_get_type()
{
var_00 = (isdefined(level.laststand_type) && level.laststand_type == 0) || level.laststand_type == 1 || level.laststand_type == 2;
if(var_00)
{
return level.laststand_type;
}
return 0;
}
//Function Number: 59
laststand_can_pick_self_up()
{
return laststand_get_type() == 2 && get_lives_remaining() > 0;
}
//Function Number: 60
laststand_downing_will_fail()
{
if(maps\_utility::is_coop())
{
var_00 = maps\_utility::get_other_player(self);
var_01 = (maps\_utility::is_player_down(var_00) && !var_00 laststand_can_pick_self_up()) || maps\_utility::is_player_down_and_out(var_00);
if(var_01 && !laststand_can_pick_self_up())
{
return 1;
}
return 0;
}
if(!laststand_can_pick_self_up())
{
return 1;
}
return 0;
}
//Function Number: 61
get_lives_remaining()
{
if(laststand_get_type() == 2 && isdefined(self.laststand_info.type_getup_lives))
{
return max(0,self.laststand_info.type_getup_lives);
}
return 0;
}
//Function Number: 62
update_lives_remaining(param_00)
{
param_00 = common_scripts\utility::ter_op(isdefined(param_00),param_00,0);
self.laststand_info.type_getup_lives = max(0,common_scripts\utility::ter_op(param_00,self.laststand_info.type_getup_lives + 1,self.laststand_info.type_getup_lives - 1));
self notify("laststand_lives_updated");
}
//Function Number: 63
player_laststand_kill()
{
level endon("special_op_terminated");
thread player_dying_effect_remove();
self enabledeathshield(0);
self disableinvulnerability();
self enablehealthshield(0);
self.achieve_downed_kills = undefined;
waittillframeend;
self kill();
}
//Function Number: 64
try_crush_player(param_00,param_01)
{
if(!isdefined(param_00))
{
return;
}
if(isdefined(param_00.dont_crush_player) && param_00.dont_crush_player)
{
return;
}
if(!isdefined(param_01))
{
return;
}
if(param_01 != "MOD_CRUSH")
{
return;
}
if(isdefined(param_00.vehicletype))
{
var_02 = param_00 vehicle_getspeed();
if(abs(var_02) == 0)
{
return;
}
}
if(common_scripts\utility::flag("special_op_terminated"))
{
return;
}
param_00 maps\_specialops::so_crush_player(self,param_01);
}
//Function Number: 65
player_laststand_check_for_pistol(param_00)
{
var_01 = self getweaponslistprimaries();
if(isdefined(param_00))
{
foreach(var_03 in var_01)
{
if(var_03 == param_00)
{
return var_03;
}
}
}
var_05 = self getcurrentweapon();
if(weaponclass(var_05) == "pistol")
{
return var_05;
}
foreach(var_03 in var_01)
{
if(weaponclass(var_03) == "pistol")
{
return var_03;
}
}
return undefined;
}
//Function Number: 66
laststand_on_mission_end()
{
level waittill("special_op_terminated");
revive_destroy_use_targets();
revive_hud_cleanup_bars();
laststand_hud_destroy();
}
//Function Number: 67
revive_hud_cleanup_bars()
{
if(isdefined(level.bars))
{
foreach(var_01 in level.bars)
{
if(isdefined(var_01))
{
var_01 notify("destroying");
var_01 maps\_hud_util::destroyelem();
}
}
level.bars = undefined;
}
}
//Function Number: 68
waittill_disable_nag()
{
level endon("special_op_terminated");
common_scripts\utility::waittill_any("nag","nag_cancel","death","revived");
}
//Function Number: 69
player_can_restore_weapon(param_00)
{
if(!isdefined(param_00))
{
return 0;
}
if(param_00 == "none")
{
return 0;
}
if(!self hasweapon(param_00))
{
return 0;
}
return 1;
}
//Function Number: 70
revive_set_use_target_state(param_00)
{
var_01 = player_get_revive_ent();
if(param_00)
{
var_01 makeusable();
}
else
{
var_01 makeunusable();
}
return var_01;
}
//Function Number: 71
player_get_revive_ent()
{
return level.revive_ents[self.unique_id];
}
//Function Number: 72
revive_destroy_use_targets()
{
if(isdefined(level.revive_ents))
{
foreach(var_01 in level.revive_ents)
{
var_01 delete();
}
}
}
//Function Number: 73
player_downed_hud_toggle_blinkstate()
{
self notify("player_downed_hud_blinkstate");
self endon("player_downed_hud_blinkstate");
self endon("death");
self endon("revived");
self.blinkstate = 1;
for(;;)
{
wait level.coop_icon_blinkcrement;
if(self.blinkstate == 1)
{
self.blinkstate = 0;
continue;
}
self.blinkstate = 1;
}
}