mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-21 23:47:52 -05:00
2180 lines
43 KiB
Plaintext
2180 lines
43 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: maps\_specialops_code.gsc
|
|
* Game: Call of Duty: Modern Warfare 3
|
|
* Platform: PC
|
|
* Function Count: 98
|
|
* Decompile Time: 1603 ms
|
|
* Timestamp: 10/27/2023 2:21:38 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
setup_xp()
|
|
{
|
|
wait 0.05;
|
|
maps\_rank::xp_init();
|
|
}
|
|
|
|
//Function Number: 2
|
|
register_level_unlock(param_00,param_01)
|
|
{
|
|
var_02 = int(tablelookup("sp/specOpsTable.csv",1,param_00,5));
|
|
var_03 = tablelookup("sp/specOpsTable.csv",1,param_00,6);
|
|
var_04 = 1;
|
|
unlock_register(param_00,var_02,var_03,"","",param_01,var_04);
|
|
}
|
|
|
|
//Function Number: 3
|
|
register_survival_unlock()
|
|
{
|
|
register_level_unlock("so_survival_2","survival");
|
|
register_level_unlock("so_survival_3","survival");
|
|
register_level_unlock("so_survival_4","survival");
|
|
register_survival_armory_unlock(100,120,"weaponupgrade");
|
|
register_survival_armory_unlock(0,64,"weapon");
|
|
register_survival_armory_unlock(1000,1020,"equipment");
|
|
register_survival_armory_unlock(10000,10020,"airsupport");
|
|
}
|
|
|
|
//Function Number: 4
|
|
register_survival_armory_unlock(param_00,param_01,param_02)
|
|
{
|
|
for(var_03 = param_00;var_03 <= param_01;var_03++)
|
|
{
|
|
var_04 = tablelookup("sp/survival_armories.csv",0,var_03,1);
|
|
if(!isdefined(var_04) || var_04 == "")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_05 = var_03;
|
|
var_06 = var_04;
|
|
var_07 = param_02;
|
|
var_08 = tablelookup("sp/survival_armories.csv",1,var_04,4);
|
|
var_09 = tablelookup("sp/survival_armories.csv",1,var_04,5);
|
|
var_0A = int(tablelookup("sp/survival_armories.csv",1,var_04,7));
|
|
if(var_0A > 0)
|
|
{
|
|
var_0B = "weapon_missing_image";
|
|
if(var_07 == "airsupport")
|
|
{
|
|
var_0B = "specops_ui_airsupport";
|
|
}
|
|
|
|
if(var_07 == "equipment")
|
|
{
|
|
var_0B = "specops_ui_equipmentstore";
|
|
}
|
|
|
|
if(var_07 == "weapon" || var_07 == "weaponupgrade")
|
|
{
|
|
var_0B = "specops_ui_weaponstore";
|
|
}
|
|
|
|
var_0C = 0;
|
|
unlock_register(var_06,var_0A,var_08,var_09,var_0B,"survival",var_0C);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 5
|
|
unlock_register(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
var_07 = spawnstruct();
|
|
var_07.ref = param_00;
|
|
var_07.name = param_02;
|
|
var_07.var_189B = param_03;
|
|
var_07.icon = param_04;
|
|
var_07.unlocklvl = param_01;
|
|
var_07.mode = param_05;
|
|
var_07.var_1DD = param_06;
|
|
if(!isdefined(level.unlock_array))
|
|
{
|
|
level.unlock_array = [];
|
|
}
|
|
|
|
if(!isdefined(level.unlock_array[param_01]))
|
|
{
|
|
level.unlock_array[param_01] = [];
|
|
}
|
|
|
|
level.unlock_array[param_01][level.unlock_array[param_01].size] = var_07;
|
|
}
|
|
|
|
//Function Number: 6
|
|
pick_starting_location_so(param_00)
|
|
{
|
|
if(isdefined(param_00) && param_00)
|
|
{
|
|
if(isdefined(level.skip_playersetstreamorigin) && level.skip_playersetstreamorigin)
|
|
{
|
|
return undefined;
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.pmc_match) && level.pmc_match)
|
|
{
|
|
return pick_starting_location_pmc(param_00);
|
|
}
|
|
|
|
var_01 = getentarray("info_player_start_so","classname");
|
|
if(var_01.size <= 0)
|
|
{
|
|
var_01 = getentarray("info_player_start","classname");
|
|
}
|
|
|
|
var_02 = common_scripts\utility::random(var_01);
|
|
if(isdefined(param_00) && param_00)
|
|
{
|
|
return var_02.origin;
|
|
}
|
|
|
|
place_player_at_start_point(level.player,var_02);
|
|
if(maps\_utility::is_coop())
|
|
{
|
|
var_03 = getentarray("info_player_start_soPlayer2","classname");
|
|
if(var_03.size > 0)
|
|
{
|
|
var_04 = maps\_utility::getclosest(var_02.origin,var_03);
|
|
place_player_at_start_point(level.player2,var_04);
|
|
return;
|
|
}
|
|
|
|
place_player2_near_player1();
|
|
}
|
|
}
|
|
|
|
//Function Number: 7
|
|
isdefendmatch()
|
|
{
|
|
return level.pmc_gametype == "mode_defend";
|
|
}
|
|
|
|
//Function Number: 8
|
|
pick_starting_location_pmc(param_00)
|
|
{
|
|
if(isdefendmatch())
|
|
{
|
|
var_01 = getentarray("info_player_start_pmcDefend","classname");
|
|
}
|
|
else
|
|
{
|
|
var_01 = getentarray("info_player_start_pmc","classname");
|
|
}
|
|
|
|
var_02 = [];
|
|
var_03 = undefined;
|
|
foreach(var_05 in level.players)
|
|
{
|
|
if(!var_02.size)
|
|
{
|
|
var_03 = common_scripts\utility::random(var_01);
|
|
}
|
|
else
|
|
{
|
|
var_03 = maps\_utility::get_closest_exclude(var_03.origin,var_01,var_02);
|
|
}
|
|
|
|
if(isdefined(param_00) && param_00)
|
|
{
|
|
return var_03.origin;
|
|
}
|
|
|
|
var_05 setorigin(var_03.origin);
|
|
var_05 setplayerangles(var_03.angles);
|
|
var_02[var_02.size] = var_03;
|
|
}
|
|
}
|
|
|
|
//Function Number: 9
|
|
place_player_at_start_point(param_00,param_01)
|
|
{
|
|
param_00 setorigin(param_01.origin);
|
|
if(isdefined(param_01.angles))
|
|
{
|
|
param_00 setplayerangles(param_01.angles);
|
|
}
|
|
}
|
|
|
|
//Function Number: 10
|
|
place_player2_near_player1()
|
|
{
|
|
level.player2 setplayerangles(level.player.angles + (0,-25,0));
|
|
level.player2 setorigin(level.player.origin);
|
|
var_00 = spawnstruct();
|
|
var_00.entity = level.player2;
|
|
var_00.right = -20;
|
|
var_00.forward = -50;
|
|
var_00 maps\_utility::translate_local();
|
|
level.player2 setorigin(level.player2.origin);
|
|
}
|
|
|
|
//Function Number: 11
|
|
specialops_remove_entity_check(param_00)
|
|
{
|
|
if(specialops_remove_flag_check(param_00))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(specialops_remove_name_check(param_00))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 12
|
|
specialops_remove_flag_check(param_00)
|
|
{
|
|
if(!isdefined(self.script_specialops))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(self.script_specialops == param_00)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 13
|
|
specialops_remove_name_check(param_00)
|
|
{
|
|
if(!isdefined(self.script_specialopsname))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(param_00 == 0)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
var_01 = strtok(self.script_specialopsname,":;, ");
|
|
var_02 = 1;
|
|
foreach(var_04 in var_01)
|
|
{
|
|
if(var_04 == level.script)
|
|
{
|
|
var_02 = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return var_02;
|
|
}
|
|
|
|
//Function Number: 14
|
|
so_create_hud_item_delay_draw(param_00)
|
|
{
|
|
param_00.alpha = 0;
|
|
while(!so_hud_can_show())
|
|
{
|
|
wait 0.5;
|
|
}
|
|
|
|
if(!isdefined(param_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(so_hud_can_toggle(param_00))
|
|
{
|
|
switch(self.so_infohud_toggle_state)
|
|
{
|
|
case "on":
|
|
case "none":
|
|
param_00 maps\_hud_util::fade_over_time(1,0.5);
|
|
break;
|
|
|
|
case "off":
|
|
param_00 maps\_hud_util::fade_over_time(0,0.5);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
param_00 maps\_hud_util::fade_over_time(1,0.5);
|
|
}
|
|
|
|
if(!maps\_utility::ent_flag("so_hud_can_toggle"))
|
|
{
|
|
maps\_utility::ent_flag_set("so_hud_can_toggle");
|
|
}
|
|
}
|
|
|
|
//Function Number: 15
|
|
so_hud_can_show()
|
|
{
|
|
if(isdefined(level.so_waiting_for_players) && level.so_waiting_for_players)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(isdefined(level.challenge_time_force_on) && level.challenge_time_force_on)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(!isdefined(self.so_hud_show_time))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return gettime() > self.so_hud_show_time;
|
|
}
|
|
|
|
//Function Number: 16
|
|
so_hud_can_toggle(param_00)
|
|
{
|
|
if(!isdefined(param_00.so_can_toggle) || !param_00.so_can_toggle)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(self.so_infohud_toggle_state))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 17
|
|
challenge_timer_player_setup(param_00,param_01,param_02,param_03)
|
|
{
|
|
level endon("challenge_timer_expired");
|
|
level endon("new_challenge_timer");
|
|
level endon("special_op_terminated");
|
|
var_04 = undefined;
|
|
if(isdefined(param_03) && param_03)
|
|
{
|
|
var_04 = 1;
|
|
}
|
|
|
|
var_05 = maps\_specialops::so_hud_ypos();
|
|
self.hud_so_timer_msg = maps\_specialops::so_create_hud_item(1,var_05,param_02,self,var_04);
|
|
if(isdefined(level.challenge_time_limit))
|
|
{
|
|
self.hud_so_timer_time = maps\_specialops::so_create_hud_item(1,var_05,undefined,self,var_04);
|
|
self.hud_so_timer_time settenthstimerstatic(level.challenge_time_limit);
|
|
}
|
|
else
|
|
{
|
|
self.hud_so_timer_time = maps\_specialops::so_create_hud_item(1,var_05,&"SPECIAL_OPS_TIME_NULL",self,var_04);
|
|
}
|
|
|
|
self.hud_so_timer_time.alignx = "left";
|
|
if(!isdefined(param_03) || param_03 == 0)
|
|
{
|
|
thread maps\_specialops::info_hud_wait_for_player();
|
|
thread maps\_specialops::info_hud_handle_fade(self.hud_so_timer_msg);
|
|
thread maps\_specialops::info_hud_handle_fade(self.hud_so_timer_time);
|
|
}
|
|
else
|
|
{
|
|
self.so_infohud_toggle_state = "none";
|
|
self.hud_so_timer_msg.alpha = 0;
|
|
self.hud_so_timer_time.alpha = 0;
|
|
}
|
|
|
|
challenge_timer_wait_start(self.hud_so_timer_msg,self.hud_so_timer_time,param_00);
|
|
if(isdefined(level.challenge_time_limit))
|
|
{
|
|
level.so_challenge_time_left = level.challenge_time_limit;
|
|
thread challenge_timer_show_nudge(self.hud_so_timer_msg,self.hud_so_timer_time);
|
|
thread challenge_timer_show_hurry(self.hud_so_timer_msg,self.hud_so_timer_time);
|
|
thread challenge_timer_show_failed(self.hud_so_timer_msg,self.hud_so_timer_time);
|
|
thread challenge_timer_destroy_prematurely(self.hud_so_timer_msg,self.hud_so_timer_time);
|
|
}
|
|
|
|
thread challenge_timer_wait_passed(self.hud_so_timer_msg,self.hud_so_timer_time,param_01);
|
|
}
|
|
|
|
//Function Number: 18
|
|
challenge_timer_detect_3quarter()
|
|
{
|
|
if(!common_scripts\utility::flag_exist("so_challenge_is_3quarter"))
|
|
{
|
|
common_scripts\utility::flag_init("so_challenge_is_3quarter");
|
|
}
|
|
|
|
common_scripts\utility::flag_wait("so_challenge_is_3quarter");
|
|
maps\_specialops::so_dialog_progress_update(3,4);
|
|
}
|
|
|
|
//Function Number: 19
|
|
challenge_timer_detect_halfway()
|
|
{
|
|
if(!common_scripts\utility::flag_exist("so_challenge_is_halfway"))
|
|
{
|
|
common_scripts\utility::flag_init("so_challenge_is_halfway");
|
|
}
|
|
|
|
common_scripts\utility::flag_wait("so_challenge_is_halfway");
|
|
maps\_specialops::so_dialog_progress_update(2,4);
|
|
}
|
|
|
|
//Function Number: 20
|
|
challenge_timer_detect_quarter()
|
|
{
|
|
if(!common_scripts\utility::flag_exist("so_challenge_is_quarter"))
|
|
{
|
|
common_scripts\utility::flag_init("so_challenge_is_quarter");
|
|
}
|
|
|
|
common_scripts\utility::flag_wait("so_challenge_is_quarter");
|
|
maps\_specialops::so_dialog_progress_update(1,4);
|
|
}
|
|
|
|
//Function Number: 21
|
|
challenge_timer_wait_start(param_00,param_01,param_02)
|
|
{
|
|
level endon("special_op_terminated");
|
|
if(isdefined(param_02))
|
|
{
|
|
common_scripts\utility::flag_wait(param_02);
|
|
}
|
|
|
|
foreach(var_04 in level.players)
|
|
{
|
|
if(!var_04 so_hud_can_show())
|
|
{
|
|
var_04.so_hud_show_time = gettime();
|
|
}
|
|
}
|
|
|
|
if(!isdefined(level.challenge_start_time))
|
|
{
|
|
if(challenge_timer_should_play_alarm())
|
|
{
|
|
level.player playsound("arcademode_zerodeaths");
|
|
}
|
|
|
|
level.challenge_start_time = gettime();
|
|
}
|
|
else
|
|
{
|
|
level.challenge_start_time_last = gettime();
|
|
}
|
|
|
|
param_01.label = "";
|
|
if(isdefined(level.challenge_time_limit))
|
|
{
|
|
param_01 settenthstimer(level.challenge_time_limit);
|
|
return;
|
|
}
|
|
|
|
param_01 settenthstimerup(0);
|
|
}
|
|
|
|
//Function Number: 22
|
|
challenge_timer_should_play_alarm()
|
|
{
|
|
if(isdefined(level.challenge_time_limit))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
foreach(var_01 in level.players)
|
|
{
|
|
if(var_01.so_infohud_toggle_state != "off")
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 23
|
|
challenge_timer_show_nudge(param_00,param_01)
|
|
{
|
|
if(!validate_timer(level.challenge_time_nudge))
|
|
{
|
|
return;
|
|
}
|
|
|
|
level endon("challenge_timer_passed");
|
|
level endon("new_challenge_timer");
|
|
level endon("special_op_terminated");
|
|
while(level.so_challenge_time_left > level.challenge_time_nudge)
|
|
{
|
|
wait 0.1;
|
|
}
|
|
|
|
param_00 set_hudelem_yellow();
|
|
param_01 set_hudelem_yellow();
|
|
if(!challenge_timer_be_silent())
|
|
{
|
|
thread maps\_specialops::so_dialog_time_low_normal();
|
|
}
|
|
}
|
|
|
|
//Function Number: 24
|
|
challenge_timer_show_hurry(param_00,param_01)
|
|
{
|
|
if(!validate_timer(level.challenge_time_hurry))
|
|
{
|
|
return;
|
|
}
|
|
|
|
level endon("challenge_timer_passed");
|
|
level endon("new_challenge_timer");
|
|
level endon("special_op_terminated");
|
|
while(level.so_challenge_time_left > level.challenge_time_hurry)
|
|
{
|
|
wait 0.1;
|
|
}
|
|
|
|
param_00 set_hudelem_red();
|
|
param_01 set_hudelem_red();
|
|
if(!challenge_timer_be_silent())
|
|
{
|
|
thread maps\_specialops::so_dialog_time_low_hurry();
|
|
}
|
|
}
|
|
|
|
//Function Number: 25
|
|
challenge_timer_be_silent()
|
|
{
|
|
if(self != level.player)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(!isdefined(level.challenge_time_silent))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return level.challenge_time_silent;
|
|
}
|
|
|
|
//Function Number: 26
|
|
challenge_timer_thread()
|
|
{
|
|
level endon("special_op_terminated");
|
|
level notify("stop_challenge_timer_thread");
|
|
level endon("stop_challenge_timer_thread");
|
|
while(level.so_challenge_time_left > 0)
|
|
{
|
|
wait 0.05;
|
|
level.so_challenge_time_left = level.so_challenge_time_left - 0.05;
|
|
thread challenge_timer_give_alert();
|
|
}
|
|
|
|
level notify("challenge_timer_failed");
|
|
}
|
|
|
|
//Function Number: 27
|
|
challenge_timer_give_alert()
|
|
{
|
|
if(challenge_timer_should_pulse())
|
|
{
|
|
foreach(var_01 in level.players)
|
|
{
|
|
var_01.hud_so_timer_msg thread maps\_specialops::so_hud_pulse_create();
|
|
var_01.hud_so_timer_time thread maps\_specialops::so_hud_pulse_create();
|
|
}
|
|
|
|
if(level.so_challenge_time_beep < 0)
|
|
{
|
|
level.player playsound("arcademode_kill_streak_lost");
|
|
return;
|
|
}
|
|
|
|
level.player playsound("so_countdown_beep");
|
|
}
|
|
}
|
|
|
|
//Function Number: 28
|
|
challenge_timer_should_pulse()
|
|
{
|
|
if(level.so_challenge_time_left > level.so_challenge_time_beep)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
for(var_00 = 0;var_00 <= level.hud_so_counter_values;var_00++)
|
|
{
|
|
if(level.so_challenge_time_left > var_00)
|
|
{
|
|
if(level.so_challenge_time_beep < var_00)
|
|
{
|
|
level.so_challenge_time_beep = var_00 + 1;
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
level.so_challenge_time_beep = var_00 - 1;
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 29
|
|
challenge_timer_show_failed(param_00,param_01)
|
|
{
|
|
if(!validate_timer(level.challenge_time_limit))
|
|
{
|
|
return;
|
|
}
|
|
|
|
level endon("challenge_timer_passed");
|
|
level endon("new_challenge_timer");
|
|
level endon("special_op_terminated");
|
|
thread challenge_timer_thread();
|
|
level waittill("challenge_timer_failed");
|
|
common_scripts\utility::flag_set("challenge_timer_expired");
|
|
challenge_timer_destroy(param_00,param_01);
|
|
if(self == level.player)
|
|
{
|
|
thread maps\_specialops::so_dialog_mission_failed_time();
|
|
}
|
|
|
|
var_02 = "@SPECIAL_OPS_FAILURE_HINT_TIME";
|
|
if(isdefined(level.so_deadquote_time))
|
|
{
|
|
var_02 = level.so_deadquote_time;
|
|
}
|
|
|
|
maps\_specialops::so_force_deadquote(var_02,"ui_time_failure");
|
|
if(self == level.player)
|
|
{
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
}
|
|
|
|
//Function Number: 30
|
|
challenge_timer_wait_passed(param_00,param_01,param_02)
|
|
{
|
|
level endon("challenge_timer_expired");
|
|
level endon("new_challenge_timer");
|
|
if(common_scripts\utility::flag_exist("individual_timers") && common_scripts\utility::flag("individual_timers"))
|
|
{
|
|
maps\_utility::ent_flag_wait(param_02);
|
|
}
|
|
else
|
|
{
|
|
common_scripts\utility::flag_wait(param_02);
|
|
}
|
|
|
|
common_scripts\utility::flag_set("challenge_timer_passed");
|
|
level.challenge_end_time = gettime();
|
|
var_03 = common_scripts\utility::ter_op(isdefined(level.challenge_start_time_last),level.challenge_start_time_last,level.challenge_start_time);
|
|
var_04 = maps\_utility::round_millisec_on_sec(level.challenge_end_time - var_03,1,0);
|
|
var_05 = var_04 / 1000;
|
|
if(isdefined(level.challenge_time_limit))
|
|
{
|
|
var_05 = level.challenge_time_limit - var_05;
|
|
}
|
|
|
|
if(var_05 <= 0)
|
|
{
|
|
var_05 = 0.1;
|
|
}
|
|
|
|
param_01 settenthstimerstatic(var_05);
|
|
if(!common_scripts\utility::flag_exist("individual_timers"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(common_scripts\utility::flag("individual_timers"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
challenge_timer_destroy(param_00,param_01);
|
|
}
|
|
|
|
//Function Number: 31
|
|
challenge_timer_destroy_prematurely(param_00,param_01)
|
|
{
|
|
level waittill("new_challenge_timer");
|
|
challenge_timer_destroy(param_00,param_01,1);
|
|
}
|
|
|
|
//Function Number: 32
|
|
challenge_timer_destroy(param_00,param_01,param_02)
|
|
{
|
|
if(isdefined(param_00))
|
|
{
|
|
param_00 thread maps\_specialops::so_remove_hud_item(param_02);
|
|
}
|
|
|
|
if(isdefined(param_01))
|
|
{
|
|
param_01 thread maps\_specialops::so_remove_hud_item(param_02);
|
|
}
|
|
}
|
|
|
|
//Function Number: 33
|
|
validate_timer(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(param_00 <= 0)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 34
|
|
failure_summary_display()
|
|
{
|
|
if(getdvarint("so_nofail"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
thread maps\_specialops::so_dialog_mission_failed_generic();
|
|
missionfailed();
|
|
maps\_endmission::so_eog_summary_calculate(0);
|
|
specialops_mission_over_setup(0);
|
|
level notify("so_generate_deathquote");
|
|
maps\_endmission::so_eog_summary_display();
|
|
}
|
|
|
|
//Function Number: 35
|
|
specialops_mission_over_setup(param_00)
|
|
{
|
|
setdvar("ui_opensummary",1);
|
|
if(param_00)
|
|
{
|
|
setdvar("ui_mission_success",1);
|
|
}
|
|
else
|
|
{
|
|
setdvar("ui_mission_success",0);
|
|
}
|
|
|
|
if(common_scripts\utility::flag("special_op_terminated"))
|
|
{
|
|
}
|
|
|
|
if(!isdefined(level.challenge_start_time))
|
|
{
|
|
level.challenge_start_time = gettime();
|
|
}
|
|
|
|
if(!isdefined(level.challenge_end_time))
|
|
{
|
|
level.challenge_end_time = gettime();
|
|
}
|
|
|
|
common_scripts\utility::flag_set("special_op_terminated");
|
|
level notify("stop_music");
|
|
thread maps\_utility_code::mission_recon(param_00);
|
|
var_01 = undefined;
|
|
if(isdefined(level.pmc_game) && level.pmc_game)
|
|
{
|
|
var_01 = pick_starting_location_pmc(1);
|
|
}
|
|
else
|
|
{
|
|
var_01 = pick_starting_location_so(1);
|
|
}
|
|
|
|
if(isdefined(var_01))
|
|
{
|
|
foreach(var_03 in level.players)
|
|
{
|
|
var_03 playersetstreamorigin(var_01);
|
|
}
|
|
}
|
|
|
|
ambientstop(2);
|
|
maps\_utility::music_stop(1);
|
|
if(param_00)
|
|
{
|
|
thread specialops_mission_over_setup_success();
|
|
}
|
|
else
|
|
{
|
|
thread specialops_mission_over_setup_failure();
|
|
}
|
|
|
|
foreach(var_03 in level.players)
|
|
{
|
|
var_03 allowjump(0);
|
|
var_03 disableweapons();
|
|
var_03 disableusability();
|
|
var_03 enableinvulnerability();
|
|
var_03.ignoreme = 1;
|
|
}
|
|
|
|
thread specialops_blur_player_screen();
|
|
if(param_00)
|
|
{
|
|
wait 0.5;
|
|
foreach(var_03 in level.players)
|
|
{
|
|
var_03 setup_leaderboard_data();
|
|
}
|
|
|
|
wait 2.5;
|
|
foreach(var_03 in level.players)
|
|
{
|
|
var_03 uploadleaderboards();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
wait 3;
|
|
}
|
|
|
|
thread specialops_mission_over_remove_ai();
|
|
if(!common_scripts\utility::flag("special_op_no_unlink"))
|
|
{
|
|
foreach(var_03 in level.players)
|
|
{
|
|
var_03 unlink();
|
|
}
|
|
}
|
|
|
|
foreach(var_03 in level.players)
|
|
{
|
|
var_03 freezecontrols(1);
|
|
}
|
|
|
|
specialops_mission_over_stats(param_00);
|
|
}
|
|
|
|
//Function Number: 36
|
|
setup_leaderboard_data()
|
|
{
|
|
if(maps\_utility::is_coop() && level.players.size == 2)
|
|
{
|
|
self setplayerdata("round","xuidTeammate",maps\_utility::get_other_player(self) getxuid());
|
|
}
|
|
|
|
self setplayerdata("round","timePlayed",self.so_eog_summary_data["time"]);
|
|
self setplayerdata("round","kills",self.so_eog_summary_data["kills"]);
|
|
var_00 = 0;
|
|
if(maps\_utility::is_survival())
|
|
{
|
|
self setplayerdata("round","score",self.so_eog_summary_data["score"]);
|
|
self setplayerdata("round","wave",self.so_eog_summary_data["wave"]);
|
|
var_01 = 0;
|
|
var_02 = 0;
|
|
if(self.stats["weapon"].size > 0)
|
|
{
|
|
foreach(var_04 in self.stats["weapon"])
|
|
{
|
|
var_01 = var_01 + var_04.shots_fired;
|
|
var_02 = var_02 + var_04.shots_hit;
|
|
}
|
|
}
|
|
|
|
self setplayerdata("round","bulletsFired",var_01);
|
|
self setplayerdata("round","bulletsHit",var_02);
|
|
self setplayerdata("round","headshots",self.game_performance["headshot"]);
|
|
self setplayerdata("round","revives",self.game_performance["revives"]);
|
|
self setplayerdata("round","credits",self.game_performance["credits"]);
|
|
self setplayerdata("round","totalXp",self.game_performance["credits"]);
|
|
return;
|
|
}
|
|
|
|
var_06 = level.so_enable_wait_for_players;
|
|
if(isdefined(self.forcedgameskill))
|
|
{
|
|
var_06 = self.forcedgameskill;
|
|
}
|
|
|
|
self setplayerdata("round","difficulty",var_06);
|
|
self setplayerdata("round","score",self.so_eog_summary_data["score"]);
|
|
}
|
|
|
|
//Function Number: 37
|
|
specialops_blur_player_screen()
|
|
{
|
|
foreach(var_01 in level.players)
|
|
{
|
|
wait 0.1;
|
|
var_01 setblurforplayer(6,1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 38
|
|
specialops_mission_over_remove_ai()
|
|
{
|
|
wait 0.25;
|
|
var_00 = getaiarray();
|
|
var_00 = maps\_utility::array_merge(var_00,getaispeciesarray("axis","dog"));
|
|
foreach(var_02 in var_00)
|
|
{
|
|
if(isdefined(var_02.so_no_mission_over_delete) && var_02.so_no_mission_over_delete == 1)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_02.magic_bullet_shield))
|
|
{
|
|
var_02 maps\_utility::stop_magic_bullet_shield();
|
|
}
|
|
|
|
var_02 delete();
|
|
}
|
|
}
|
|
|
|
//Function Number: 39
|
|
specialops_mission_over_setup_success()
|
|
{
|
|
common_scripts\utility::flag_set("special_op_succeeded");
|
|
foreach(var_01 in level.players)
|
|
{
|
|
var_02 = maps\_hud_util::create_client_overlay("white",0,var_01);
|
|
var_02.color = (0.7,0.7,1);
|
|
var_02 thread maps\_hud_util::fade_over_time(0.25,2);
|
|
}
|
|
|
|
if(isdefined(level.suppress_challenge_success_print))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_04 = maps\_specialops::so_create_hud_item(3,0,&"SPECIAL_OPS_CHALLENGE_SUCCESS");
|
|
var_04.alignx = "center";
|
|
var_04.horzalign = "center";
|
|
var_04 set_hudelem_blue();
|
|
var_04 setpulsefx(60,2500,500);
|
|
wait 1.5;
|
|
var_05 = level.so_campaign;
|
|
if(var_05 == "hijack" || var_05 == "fso")
|
|
{
|
|
var_05 = "delta";
|
|
}
|
|
|
|
maps\_utility::music_play("so_victory_" + var_05,undefined,0,1);
|
|
}
|
|
|
|
//Function Number: 40
|
|
specialops_mission_over_setup_failure()
|
|
{
|
|
common_scripts\utility::flag_set("special_op_failed");
|
|
var_00 = maps\_specialops::so_create_hud_item(3,0,&"SPECIAL_OPS_CHALLENGE_FAILURE");
|
|
var_00.hidewhendead = 0;
|
|
var_00.alignx = "center";
|
|
var_00.horzalign = "center";
|
|
var_00 set_hudelem_red();
|
|
var_00 setpulsefx(60,2500,500);
|
|
foreach(var_02 in level.players)
|
|
{
|
|
var_03 = maps\_hud_util::create_client_overlay("white",0,var_02);
|
|
var_03.color = (1,0.4,0.4);
|
|
var_03 thread maps\_hud_util::fade_over_time(0.25,2);
|
|
}
|
|
|
|
wait 1.5;
|
|
var_05 = level.so_campaign;
|
|
if(var_05 == "hijack" || var_05 == "fso")
|
|
{
|
|
var_05 = "delta";
|
|
}
|
|
|
|
maps\_utility::music_play("so_defeat_" + var_05,undefined,0,1);
|
|
}
|
|
|
|
//Function Number: 41
|
|
is_current_level_locked()
|
|
{
|
|
var_00 = tablelookup("sp/specOpsTable.csv",1,level.script,13);
|
|
var_01 = int(tablelookup("sp/specOpsTable.csv",1,var_00,5));
|
|
var_02 = maps\_rank::getrank();
|
|
return var_02 < var_01;
|
|
}
|
|
|
|
//Function Number: 42
|
|
is_so_player_signed_in()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 43
|
|
can_save_to_profile()
|
|
{
|
|
return is_so_player_signed_in() && !is_current_level_locked();
|
|
}
|
|
|
|
//Function Number: 44
|
|
specialops_achievement_by_stars(param_00)
|
|
{
|
|
if(maps\_utility::is_survival())
|
|
{
|
|
}
|
|
}
|
|
|
|
//Function Number: 45
|
|
get_total_mode_stars(param_00,param_01,param_02)
|
|
{
|
|
var_03 = 0;
|
|
for(var_04 = param_01;var_04 < param_02;var_04++)
|
|
{
|
|
var_03 = var_03 + int(max(0,int(param_00[var_04]) - 1));
|
|
}
|
|
|
|
return var_03;
|
|
}
|
|
|
|
//Function Number: 46
|
|
get_num_of_levels_with_star(param_00,param_01)
|
|
{
|
|
var_02 = param_00.size;
|
|
if(var_02 > level.specopssettings.levels.size)
|
|
{
|
|
var_02 = level.specopssettings.levels.size;
|
|
}
|
|
|
|
var_03 = 0;
|
|
for(var_04 = 0;var_04 < var_02;var_04++)
|
|
{
|
|
if(max(0,int(param_00[var_04]) - 1) >= param_01)
|
|
{
|
|
var_03++;
|
|
}
|
|
}
|
|
|
|
return var_03;
|
|
}
|
|
|
|
//Function Number: 47
|
|
specialops_mission_over_stats(param_00)
|
|
{
|
|
if(!isdefined(param_00) || !param_00)
|
|
{
|
|
return;
|
|
}
|
|
|
|
foreach(var_02 in level.players)
|
|
{
|
|
if(!var_02 can_save_to_profile())
|
|
{
|
|
var_02.eog_noreward = 1;
|
|
}
|
|
}
|
|
|
|
if(issplitscreen() && level.ps3)
|
|
{
|
|
level.player2.eog_noreward = 0;
|
|
}
|
|
|
|
var_04 = tablelookup("sp/specOpsTable.csv",1,level.script,9);
|
|
if(isdefined(var_04) && var_04 != "")
|
|
{
|
|
foreach(var_02 in level.players)
|
|
{
|
|
if(isdefined(var_02.eog_noreward) && var_02.eog_noreward)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_06 = var_02 getlocalplayerprofiledata(var_04);
|
|
if(!isdefined(var_06))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_07 = var_06 == 0;
|
|
level.never_played = 0;
|
|
if(var_07)
|
|
{
|
|
level.never_played = 1;
|
|
}
|
|
|
|
var_08 = var_02.so_eog_summary_data["score"];
|
|
if(var_07 || var_08 > var_06)
|
|
{
|
|
var_02 setlocalplayerprofiledata(var_04,var_08);
|
|
}
|
|
|
|
if(!var_07 && var_08 > var_06)
|
|
{
|
|
var_02.eog_bestscore = 1;
|
|
var_02.eog_bestscore_value = var_08;
|
|
}
|
|
}
|
|
}
|
|
|
|
var_0A = level.specopssettings maps\_endmission::getlevelindex(level.script);
|
|
if(!isdefined(var_0A))
|
|
{
|
|
missionsuccess(level.script);
|
|
return;
|
|
}
|
|
|
|
level.specopssettings maps\_endmission::setsolevelcompleted(var_0A);
|
|
foreach(var_02 in level.players)
|
|
{
|
|
if(isdefined(var_02.eog_noreward) && var_02.eog_noreward)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_0C = var_02 getlocalplayerprofiledata("missionSOHighestDifficulty");
|
|
if(!isdefined(var_0C))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_0D = int(tablelookup("sp/specopstable.csv",0,"survival_count",1));
|
|
var_0E = int(tablelookup("sp/specopstable.csv",0,"mission_count",1));
|
|
var_0F = 0;
|
|
var_10 = 0;
|
|
if(maps\_utility::is_survival())
|
|
{
|
|
var_0F = get_total_mode_stars(var_0C,0,var_0D);
|
|
var_11 = 100 * var_0F / var_0D * 3;
|
|
}
|
|
else
|
|
{
|
|
var_0F = get_total_mode_stars(var_0C,var_0D,var_0D + var_0E);
|
|
var_11 = 100 * var_0F / var_0E * 3;
|
|
}
|
|
|
|
if(int(var_11 * 100) % 100 >= 0.5)
|
|
{
|
|
var_10 = int(var_11) + 1;
|
|
}
|
|
else
|
|
{
|
|
var_10 = int(var_11);
|
|
}
|
|
|
|
var_02 thread maps\_specialops::so_achievement_update("BRAG_RAGS");
|
|
var_02 thread maps\_specialops::so_achievement_update("TACTICIAN");
|
|
var_02 thread maps\_specialops::so_achievement_update("OVERACHIEVER");
|
|
var_16 = var_02 getlocalplayerprofiledata("percentCompleteSO");
|
|
var_17 = int(var_16 / 100);
|
|
var_18 = var_02 maps\_rank::getrank();
|
|
if(maps\_utility::is_survival())
|
|
{
|
|
var_19 = var_18 + var_17 * 100;
|
|
}
|
|
else
|
|
{
|
|
var_19 = var_18 + var_0F * 100;
|
|
}
|
|
|
|
var_02 setlocalplayerprofiledata("percentCompleteSO",var_19);
|
|
}
|
|
|
|
updategamerprofileall();
|
|
}
|
|
|
|
//Function Number: 48
|
|
wait_all_players_are_touching(param_00)
|
|
{
|
|
for(;;)
|
|
{
|
|
param_00 waittill("trigger");
|
|
if(!maps\_utility::is_coop())
|
|
{
|
|
return;
|
|
}
|
|
|
|
level.player thread waiting_message_hide();
|
|
level.player2 thread waiting_message_hide();
|
|
if(!level.player istouching(param_00))
|
|
{
|
|
level.player2 thread display_waiting_message();
|
|
continue;
|
|
}
|
|
|
|
if(!level.player2 istouching(param_00))
|
|
{
|
|
level.player thread display_waiting_message();
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Function Number: 49
|
|
wait_all_players_have_touched(param_00,param_01)
|
|
{
|
|
var_02 = 0;
|
|
var_03 = 0;
|
|
for(;;)
|
|
{
|
|
param_00 waittill("trigger");
|
|
if(!maps\_utility::is_coop())
|
|
{
|
|
return;
|
|
}
|
|
|
|
level.player thread waiting_message_hide();
|
|
level.player2 thread waiting_message_hide();
|
|
if(level.player istouching(param_00))
|
|
{
|
|
var_02 = 1;
|
|
if(!var_03 && !level.player2 istouching(param_00))
|
|
{
|
|
thread determine_waiting_message(level.player,param_01);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if(level.player2 istouching(param_00))
|
|
{
|
|
var_03 = 1;
|
|
if(!var_02 && !level.player istouching(param_00))
|
|
{
|
|
thread determine_waiting_message(level.player2,param_01);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Function Number: 50
|
|
disable_mission_end_trigger(param_00)
|
|
{
|
|
level waittill("special_op_terminated");
|
|
param_00 common_scripts\utility::trigger_off();
|
|
}
|
|
|
|
//Function Number: 51
|
|
determine_waiting_message(param_00,param_01)
|
|
{
|
|
switch(param_01)
|
|
{
|
|
case "all":
|
|
param_00 display_waiting_message();
|
|
break;
|
|
|
|
case "any":
|
|
param_00 display_waiting_message();
|
|
break;
|
|
|
|
case "freeze":
|
|
param_00 display_frozen_message();
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Function Number: 52
|
|
display_waiting_message()
|
|
{
|
|
self endon("death");
|
|
level endon("challenge_timer_passed");
|
|
level endon("challenge_timer_expired");
|
|
level endon("special_op_terminated");
|
|
level notify("players_touching_hint");
|
|
level endon("players_touching_hint");
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(self.waiting_hud))
|
|
{
|
|
self.waiting_hud = create_waiting_message(self);
|
|
}
|
|
else
|
|
{
|
|
self.waiting_hud.alpha = 1;
|
|
}
|
|
|
|
wait 0.05;
|
|
self.waiting_hud fadeovertime(0.25);
|
|
self.waiting_hud.alpha = 0;
|
|
}
|
|
|
|
//Function Number: 53
|
|
display_frozen_message()
|
|
{
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.frozen_and_waiting) && self.frozen_and_waiting)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.frozen_and_waiting = 1;
|
|
self enableinvulnerability();
|
|
self freezecontrols(1);
|
|
self.ignoreme = 1;
|
|
self setblurforplayer(6,1);
|
|
self.waiting_hud = create_waiting_message(self);
|
|
}
|
|
|
|
//Function Number: 54
|
|
create_waiting_message(param_00)
|
|
{
|
|
self notify("rebuilding_waiting_hud");
|
|
self endon("rebuilding_waiting_hud");
|
|
var_01 = maps\_specialops::so_create_hud_item(3,0,&"SPECIAL_OPS_WAITING_OTHER_PLAYER",param_00);
|
|
var_01.alignx = "center";
|
|
var_01.horzalign = "center";
|
|
var_01 set_hudelem_blue();
|
|
thread waiting_message_delete_on_so_end(var_01);
|
|
return var_01;
|
|
}
|
|
|
|
//Function Number: 55
|
|
waiting_message_hide()
|
|
{
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(self.waiting_hud))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.frozen_and_waiting) && self.frozen_and_waiting)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.waiting_hud fadeovertime(0.25);
|
|
self.waiting_hud.alpha = 0;
|
|
}
|
|
|
|
//Function Number: 56
|
|
waiting_message_delete_on_so_end(param_00)
|
|
{
|
|
self endon("rebuilding_waiting_hud");
|
|
level waittill("special_op_terminated");
|
|
if(isdefined(param_00))
|
|
{
|
|
param_00 destroy();
|
|
}
|
|
}
|
|
|
|
//Function Number: 57
|
|
disable_saving()
|
|
{
|
|
common_scripts\utility::flag_set("disable_autosaves");
|
|
for(;;)
|
|
{
|
|
common_scripts\utility::flag_wait("can_save");
|
|
common_scripts\utility::flag_clear("can_save");
|
|
}
|
|
}
|
|
|
|
//Function Number: 58
|
|
disable_escape_warning()
|
|
{
|
|
if(common_scripts\utility::flag("player_has_escaped"))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(is_touching_escape_trigger())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 59
|
|
is_touching_escape_trigger()
|
|
{
|
|
if(!isdefined(level.escape_warning_triggers))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
foreach(var_01 in level.escape_warning_triggers)
|
|
{
|
|
if(self istouching(var_01))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 60
|
|
ping_escape_warning()
|
|
{
|
|
if(isdefined(self.ping_escape_splash))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self endon("death");
|
|
self.ping_escape_splash = maps\_specialops::so_create_hud_item(3.5,0,&"SPECIAL_OPS_ESCAPE_WARNING",self);
|
|
self.ping_escape_splash.alignx = "center";
|
|
self.ping_escape_splash.horzalign = "center";
|
|
while(ping_escape_warning_valid())
|
|
{
|
|
self.ping_escape_splash.alpha = 1;
|
|
self.ping_escape_splash fadeovertime(1);
|
|
self.ping_escape_splash.alpha = 0.5;
|
|
self.ping_escape_splash.fontscale = 1.5;
|
|
self.ping_escape_splash changefontscaleovertime(1);
|
|
self.ping_escape_splash.fontscale = 1;
|
|
wait 1;
|
|
}
|
|
|
|
self.ping_escape_splash.alpha = 0.5;
|
|
self.ping_escape_splash fadeovertime(0.25);
|
|
self.ping_escape_splash.alpha = 0;
|
|
wait 0.25;
|
|
self.escape_hint_active = undefined;
|
|
if(isdefined(self.ping_escape_splash))
|
|
{
|
|
self.ping_escape_splash destroy();
|
|
}
|
|
}
|
|
|
|
//Function Number: 61
|
|
ping_escape_warning_valid()
|
|
{
|
|
if(common_scripts\utility::flag("special_op_terminated"))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!is_touching_escape_trigger())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 62
|
|
enable_escape_failure_auto()
|
|
{
|
|
level endon("special_op_terminated");
|
|
for(;;)
|
|
{
|
|
self waittill("trigger",var_00);
|
|
if(!isplayer(var_00))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_00.so_ignore_escape_failure) && var_00.so_ignore_escape_failure)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
maps\_specialops::so_force_deadquote("@DEADQUOTE_SO_LEFT_PLAY_AREA");
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
//Function Number: 63
|
|
enable_escape_warning_auto_init()
|
|
{
|
|
if(common_scripts\utility::flag_exist("so_escape_warning") && common_scripts\utility::flag("so_escape_warning"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::flag_init("so_escape_warning");
|
|
foreach(var_01 in level.players)
|
|
{
|
|
var_01 maps\_utility::ent_flag_init("so_escape_hint_active");
|
|
}
|
|
}
|
|
|
|
//Function Number: 64
|
|
enable_escape_warning_auto()
|
|
{
|
|
level endon("special_op_terminated");
|
|
enable_escape_warning_auto_init();
|
|
for(;;)
|
|
{
|
|
self waittill("trigger",var_00);
|
|
if(!isplayer(var_00))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_00.so_ignore_escape_failure) && var_00.so_ignore_escape_failure)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_00 thread show_escape_warning_auto(self);
|
|
}
|
|
}
|
|
|
|
//Function Number: 65
|
|
show_escape_warning_auto(param_00)
|
|
{
|
|
if(maps\_utility::ent_flag("so_escape_hint_active"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
maps\_utility::ent_flag_set("so_escape_hint_active");
|
|
thread ping_escape_warning_auto(param_00);
|
|
}
|
|
|
|
//Function Number: 66
|
|
ping_escape_warning_auto(param_00)
|
|
{
|
|
self notify("so_escape_hint_ping");
|
|
self endon("so_escape_hint_ping");
|
|
thread remove_escape_warning_auto(param_00);
|
|
if(!isdefined(self.ping_escape_splash_auto))
|
|
{
|
|
self.ping_escape_splash_auto = maps\_specialops::so_create_hud_item(3.5,0,&"SPECIAL_OPS_ESCAPE_WARNING",self);
|
|
self.ping_escape_splash_auto.alignx = "center";
|
|
self.ping_escape_splash_auto.horzalign = "center";
|
|
if(isdefined(level.so_escape_warning_colorfunc))
|
|
{
|
|
self.ping_escape_splash_auto thread [[ level.so_escape_warning_colorfunc ]]();
|
|
}
|
|
}
|
|
|
|
while(ping_escape_warning_auto_valid())
|
|
{
|
|
self.ping_escape_splash_auto.alpha = 1;
|
|
self.ping_escape_splash_auto fadeovertime(1);
|
|
self.ping_escape_splash_auto.alpha = 0.5;
|
|
self.ping_escape_splash_auto.fontscale = 1.5;
|
|
self.ping_escape_splash_auto changefontscaleovertime(1);
|
|
self.ping_escape_splash_auto.fontscale = 1;
|
|
wait 1;
|
|
}
|
|
|
|
self.ping_escape_splash_auto.alpha = 0.5;
|
|
self.ping_escape_splash_auto fadeovertime(0.25);
|
|
self.ping_escape_splash_auto.alpha = 0;
|
|
wait 0.25;
|
|
self.ping_escape_splash_auto destroy();
|
|
}
|
|
|
|
//Function Number: 67
|
|
remove_escape_warning_auto(param_00)
|
|
{
|
|
while(self istouching(param_00))
|
|
{
|
|
wait 0.05;
|
|
}
|
|
|
|
maps\_utility::ent_flag_clear("so_escape_hint_active");
|
|
}
|
|
|
|
//Function Number: 68
|
|
ping_escape_warning_auto_valid()
|
|
{
|
|
if(!isalive(self))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(common_scripts\utility::flag("special_op_terminated"))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return maps\_utility::ent_flag("so_escape_hint_active");
|
|
}
|
|
|
|
//Function Number: 69
|
|
so_dialog_play(param_00,param_01,param_02)
|
|
{
|
|
if(isdefined(param_01))
|
|
{
|
|
wait param_01;
|
|
}
|
|
|
|
if(isdefined(param_02) && param_02)
|
|
{
|
|
maps\_utility::radio_dialogue_stop();
|
|
}
|
|
|
|
maps\_utility::radio_dialogue(param_00);
|
|
}
|
|
|
|
//Function Number: 70
|
|
specialops_dialog_init()
|
|
{
|
|
level.scr_radio["so_tf_1_plyr_prep"] = "so_tf_1_plyr_prep";
|
|
level.scr_radio["so_tf_1_success_generic"] = "so_tf_1_success_generic";
|
|
level.scr_radio["so_tf_1_success_jerk"] = "so_tf_1_success_jerk";
|
|
level.scr_radio["so_tf_1_success_best"] = "so_tf_1_success_best";
|
|
level.scr_radio["so_tf_1_fail_generic"] = "so_tf_1_fail_generic";
|
|
level.scr_radio["so_tf_1_fail_generic_jerk"] = "so_tf_1_fail_generic_jerk";
|
|
level.scr_radio["so_tf_1_fail_time"] = "so_tf_1_fail_time";
|
|
level.scr_radio["so_tf_1_fail_bleedout"] = "so_tf_1_fail_bleedout";
|
|
level.scr_radio["so_tf_1_time_generic"] = "so_tf_1_time_generic";
|
|
level.scr_radio["so_tf_1_time_hurry"] = "so_tf_1_time_hurry";
|
|
level.scr_radio["so_tf_1_civ_kill_warning"] = "so_tf_1_civ_kill_warning";
|
|
level.scr_radio["so_tf_1_progress_5more"] = "so_tf_1_progress_5more";
|
|
level.scr_radio["so_tf_1_progress_4more"] = "so_tf_1_progress_4more";
|
|
level.scr_radio["so_tf_1_progress_3more"] = "so_tf_1_progress_3more";
|
|
level.scr_radio["so_tf_1_progress_2more"] = "so_tf_1_progress_2more";
|
|
level.scr_radio["so_tf_1_progress_1more"] = "so_tf_1_progress_1more";
|
|
level.scr_radio["so_tf_1_time_status_late"] = "so_tf_1_time_status_late";
|
|
level.scr_radio["so_tf_1_time_status_good"] = "so_tf_1_time_status_good";
|
|
level.scr_radio["so_tf_1_progress_3quarter"] = "so_tf_1_progress_3quarter";
|
|
level.scr_radio["so_tf_1_progress_half"] = "so_tf_1_progress_half";
|
|
level.scr_radio["so_tf_1_progress_quarter"] = "so_tf_1_progress_quarter";
|
|
}
|
|
|
|
//Function Number: 71
|
|
set_hudelem_white()
|
|
{
|
|
maps\_specialops::set_hud_white();
|
|
}
|
|
|
|
//Function Number: 72
|
|
set_hudelem_blue()
|
|
{
|
|
maps\_specialops::set_hud_blue();
|
|
}
|
|
|
|
//Function Number: 73
|
|
set_hudelem_green()
|
|
{
|
|
maps\_specialops::set_hud_green();
|
|
}
|
|
|
|
//Function Number: 74
|
|
set_hudelem_yellow()
|
|
{
|
|
maps\_specialops::set_hud_yellow();
|
|
}
|
|
|
|
//Function Number: 75
|
|
set_hudelem_red()
|
|
{
|
|
maps\_specialops::set_hud_red();
|
|
}
|
|
|
|
//Function Number: 76
|
|
set_hudelem_grey()
|
|
{
|
|
maps\_specialops::set_hud_grey();
|
|
}
|
|
|
|
//Function Number: 77
|
|
so_hud_pulse_single(param_00,param_01,param_02)
|
|
{
|
|
self endon("update_hud_pulse");
|
|
self endon("destroying");
|
|
self endon("death");
|
|
self.fontscale = param_00;
|
|
self changefontscaleovertime(param_02);
|
|
self.fontscale = param_01;
|
|
wait param_02;
|
|
}
|
|
|
|
//Function Number: 78
|
|
so_hud_pulse_loop()
|
|
{
|
|
self endon("update_hud_pulse");
|
|
self endon("destroying");
|
|
self endon("death");
|
|
if(self.pulse_start_big)
|
|
{
|
|
so_hud_pulse_single(self.pulse_scale_big,self.pulse_scale_loop_normal,self.var_184D);
|
|
}
|
|
|
|
while(isdefined(self.pulse_bounds) && self.pulse_bounds)
|
|
{
|
|
so_hud_pulse_single(self.pulse_scale_loop_normal,self.pulse_scale_loop_big,self.pulse_time_loop);
|
|
so_hud_pulse_single(self.pulse_scale_loop_big,self.pulse_scale_loop_normal,self.pulse_time_loop);
|
|
}
|
|
}
|
|
|
|
//Function Number: 79
|
|
so_hud_pulse_init()
|
|
{
|
|
if(!isdefined(self))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(self.var_184D))
|
|
{
|
|
self.var_184D = 0.5;
|
|
}
|
|
|
|
if(!isdefined(self.pulse_scale_normal))
|
|
{
|
|
self.pulse_scale_normal = 1;
|
|
}
|
|
|
|
if(!isdefined(self.pulse_scale_big))
|
|
{
|
|
self.pulse_scale_big = 1.6;
|
|
}
|
|
|
|
if(!isdefined(self.pulse_bounds))
|
|
{
|
|
self.pulse_bounds = 0;
|
|
}
|
|
|
|
if(!isdefined(self.pulse_time_loop))
|
|
{
|
|
self.pulse_time_loop = 1;
|
|
}
|
|
|
|
if(!isdefined(self.pulse_scale_loop_normal))
|
|
{
|
|
self.pulse_scale_loop_normal = 1;
|
|
}
|
|
|
|
if(!isdefined(self.pulse_scale_loop_big))
|
|
{
|
|
self.pulse_scale_loop_big = 1.15;
|
|
}
|
|
|
|
if(!isdefined(self.pulse_start_big))
|
|
{
|
|
self.pulse_start_big = 1;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 80
|
|
specialops_detect_death()
|
|
{
|
|
level endon("special_op_terminated");
|
|
common_scripts\utility::flag_init("so_player_death_nofail");
|
|
common_scripts\utility::array_thread(level.players,::specialops_detect_player_death);
|
|
level waittill("so_player_has_died");
|
|
if(common_scripts\utility::flag("so_player_death_nofail"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
//Function Number: 81
|
|
specialops_detect_player_death()
|
|
{
|
|
level endon("special_op_terminated");
|
|
self waittill("death");
|
|
level notify("so_player_has_died");
|
|
}
|
|
|
|
//Function Number: 82
|
|
so_special_failure_hint_reset_dvars(param_00)
|
|
{
|
|
setdvar("ui_dog_death",0);
|
|
setdvar("ui_vehicle_death",0);
|
|
setdvar("ui_destructible_death",0);
|
|
setdvar("ui_barrel_death",0);
|
|
setdvar("ui_grenade_death",0);
|
|
setdvar("ui_time_failure",0);
|
|
setdvar("ui_ff_death",0);
|
|
setdvar("ui_juggernaut_death",0);
|
|
setdvar("ui_bled_out",0);
|
|
setdvar("ui_icon_partner",0);
|
|
setdvar("ui_icon_obj",0);
|
|
setdvar("ui_icon_obj_offscreen",0);
|
|
setdvar("ui_icon_stars",0);
|
|
setdvar("ui_icon_claymore",0);
|
|
setdvar("ui_icon_stealth_stance",0);
|
|
if(isdefined(param_00))
|
|
{
|
|
setdvar(param_00,1);
|
|
}
|
|
}
|
|
|
|
//Function Number: 83
|
|
so_special_failure_hint()
|
|
{
|
|
so_special_failure_hint_reset_dvars();
|
|
foreach(var_01 in level.players)
|
|
{
|
|
var_01 thread maps\_load::player_throwgrenade_timer();
|
|
var_01 thread so_special_death_hint_tracker();
|
|
}
|
|
|
|
level waittill("so_generate_deathquote");
|
|
maps\_quotes::setdeadquote_so();
|
|
}
|
|
|
|
//Function Number: 84
|
|
so_special_death_hint_tracker()
|
|
{
|
|
level endon("so_special_failure_hint_set");
|
|
self waittill("death",var_00,var_01,var_02);
|
|
if(isdefined(self.coop_death_reason))
|
|
{
|
|
var_00 = self.coop_death_reason["attacker"];
|
|
var_01 = self.coop_death_reason["cause"];
|
|
var_02 = self.coop_death_reason["weapon_name"];
|
|
}
|
|
|
|
if(so_claymore_death(var_01,var_02))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(so_friendly_fire_death(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(so_radiation_death(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(so_dog_death(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(so_juggernaut_death(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(so_grenade_suicide_death(var_01))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(so_destructible_death(var_00,var_01))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(so_exploding_barrel_death(var_01))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(so_grenade_regular_death(var_01))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(so_vehicle_death(var_00,var_01))
|
|
{
|
|
}
|
|
}
|
|
|
|
//Function Number: 85
|
|
so_claymore_death(param_00,param_01)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(param_01) || isdefined(param_01) && param_01 != "claymore")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 86
|
|
so_friendly_fire_death(param_00)
|
|
{
|
|
if(!maps\_utility::is_coop())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_01 = maps\_utility::get_other_player(self);
|
|
if(var_01 != param_00)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
so_special_failure_hint_set("@DEADQUOTE_SO_FRIENDLY_FIRE_KILL","ui_ff_death");
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 87
|
|
so_radiation_death(param_00)
|
|
{
|
|
if(!isdefined(param_00) || param_00.classname != "worldspawn")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(self.radiationdeath) || !self.radiationdeath)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
so_special_failure_hint_set("@SCRIPT_RADIATION_DEATH");
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 88
|
|
so_dog_death(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(param_00.weapon))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(param_00.weapon != "dog_bite")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
common_scripts\utility::flag_set("special_op_no_unlink");
|
|
so_special_failure_hint_set(level.so_dog_death_quote,"ui_dog_death");
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 89
|
|
so_juggernaut_death(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(param_00.juggernaut))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_01 = [];
|
|
so_special_failure_hint_set_array(var_7B,"ui_juggernaut_death");
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 90
|
|
so_destructible_death(param_00,param_01)
|
|
{
|
|
if(!isdefined(param_01))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(param_01 != "MOD_EXPLOSIVE")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(param_00.destructible_type))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(issubstr(param_00.destructible_type,"vehicle"))
|
|
{
|
|
so_special_failure_hint_set("@SCRIPT_EXPLODING_VEHICLE_DEATH","ui_vehicle_death");
|
|
}
|
|
else
|
|
{
|
|
so_special_failure_hint_set("@SCRIPT_EXPLODING_DESTRUCTIBLE_DEATH","ui_destructible_death");
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 91
|
|
so_exploding_barrel_death(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(param_00 != "MOD_EXPLOSIVE")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(level.lastexplodingbarrel))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(gettime() != level.lastexplodingbarrel["time"])
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_01 = distance(self.origin,level.lastexplodingbarrel["origin"]);
|
|
if(var_01 > level.lastexplodingbarrel["radius"])
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
so_special_failure_hint_set("@SCRIPT_EXPLODING_BARREL_DEATH","ui_barrel_death");
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 92
|
|
so_grenade_suicide_death(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(param_00 != "MOD_SUICIDE")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(self.lastgrenadetime - gettime() > 3500)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
so_special_failure_hint_set("@SCRIPT_GRENADE_SUICIDE_COMBINED");
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 93
|
|
so_grenade_regular_death(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(param_00 != "MOD_GRENADE" && param_00 != "MOD_GRENADE_SPLASH")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
so_special_failure_hint_set("@SCRIPT_GRENADE_DEATH","ui_grenade_death");
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 94
|
|
so_vehicle_death(param_00,param_01)
|
|
{
|
|
if(!isdefined(param_01))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(!isdefined(param_00))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(param_01 != "MOD_CRUSH")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(param_00.code_classname != "script_vehicle")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
so_special_failure_hint_set("@DEADQUOTE_SO_RUN_OVER_BY_VEHICLE");
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 95
|
|
so_special_failure_hint_set(param_00,param_01)
|
|
{
|
|
maps\_specialops::so_force_deadquote(param_00,param_01);
|
|
level notify("so_special_failure_hint_set");
|
|
}
|
|
|
|
//Function Number: 96
|
|
so_special_failure_hint_set_array(param_00,param_01)
|
|
{
|
|
maps\_specialops::so_force_deadquote_array(param_00,param_01);
|
|
level notify("so_special_failure_hint_set");
|
|
}
|
|
|
|
//Function Number: 97
|
|
so_ai_flashed_damage_feedback()
|
|
{
|
|
self endon("death");
|
|
level endon("special_op_terminated");
|
|
for(;;)
|
|
{
|
|
self waittill("flashbang",var_00,var_01,var_02,var_03);
|
|
if(!maps\_utility::is_damagefeedback_enabled())
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_03) && isplayer(var_03))
|
|
{
|
|
var_03 maps\_damagefeedback::updatedamagefeedback(self);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 98
|
|
so_mission_complete_achivements()
|
|
{
|
|
if(!maps\_utility::is_survival() && level.players.size == 2 && level.players[0].so_eog_summary_data["kills"] > 0 && level.players[0].so_eog_summary_data["kills"] == level.players[1].so_eog_summary_data["kills"])
|
|
{
|
|
level.players[0] maps\_utility::player_giveachievement_wrapper("FIFTY_FIFTY");
|
|
level.players[1] maps\_utility::player_giveachievement_wrapper("FIFTY_FIFTY");
|
|
}
|
|
|
|
if(level.players.size >= 2 && level.so_enable_wait_for_players >= 2)
|
|
{
|
|
var_00 = 0;
|
|
foreach(var_02 in level.players)
|
|
{
|
|
if(isdefined(var_02.laststand_down_count) && var_02.laststand_down_count > 0)
|
|
{
|
|
var_00 = 1;
|
|
}
|
|
|
|
if(var_02 maps\_utility::get_player_gameskill() < 2)
|
|
{
|
|
var_00 = 1;
|
|
}
|
|
}
|
|
|
|
if(!var_00)
|
|
{
|
|
foreach(var_02 in level.players)
|
|
{
|
|
var_02 maps\_utility::player_giveachievement_wrapper("NO_ASSISTANCE_REQUIRED");
|
|
}
|
|
}
|
|
}
|
|
} |