10233 lines
220 KiB
Plaintext
10233 lines
220 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
set_hudoutline( var_0, var_1 )
|
|
{
|
|
var_2 = undefined;
|
|
var_0 = tolower( var_0 );
|
|
var_3["friendly"] = 3;
|
|
var_3["enemy"] = 4;
|
|
var_3["objective"] = 5;
|
|
var_3["neutral"] = 0;
|
|
var_2 = var_3[var_0];
|
|
self hudoutlineenable( var_2, var_1 );
|
|
}
|
|
|
|
is_coop()
|
|
{
|
|
if ( issplitscreen() || getdvar( "coop" ) == "1" )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
is_coop_online()
|
|
{
|
|
if ( issplitscreen() )
|
|
return 0;
|
|
|
|
if ( !is_coop() )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
is_player_down( var_0 )
|
|
{
|
|
if ( var_0 ent_flag_exist( "laststand_downed" ) )
|
|
return var_0 ent_flag( "laststand_downed" );
|
|
|
|
if ( isdefined( var_0.laststand ) )
|
|
return var_0.laststand;
|
|
|
|
return !isalive( var_0 );
|
|
}
|
|
|
|
is_player_down_and_out( var_0 )
|
|
{
|
|
if ( !isdefined( var_0.down_part2_proc_ran ) )
|
|
return 0;
|
|
|
|
return var_0.down_part2_proc_ran;
|
|
}
|
|
|
|
killing_will_down( var_0 )
|
|
{
|
|
if ( laststand_enabled() )
|
|
{
|
|
if ( isdefined( level.laststand_kill_will_down_func ) )
|
|
return var_0 [[ level.laststand_kill_will_down_func ]]();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
is_survival()
|
|
{
|
|
return is_specialop() && getdvarint( "so_survival" ) > 0;
|
|
}
|
|
|
|
laststand_enabled()
|
|
{
|
|
return isdefined( level.laststand_type ) && level.laststand_type > 0;
|
|
}
|
|
|
|
is_specialop()
|
|
{
|
|
return getdvarint( "specialops" ) >= 1;
|
|
}
|
|
|
|
convert_to_time_string( var_0, var_1 )
|
|
{
|
|
var_2 = "";
|
|
|
|
if ( var_0 < 0 )
|
|
var_2 = var_2 + "-";
|
|
|
|
var_0 = round_float( var_0, 1, 0 );
|
|
var_3 = var_0 * 100;
|
|
var_3 = int( var_3 );
|
|
var_3 = abs( var_3 );
|
|
var_4 = var_3 / 6000;
|
|
var_4 = int( var_4 );
|
|
var_2 = var_2 + var_4;
|
|
var_5 = var_3 / 100;
|
|
var_5 = int( var_5 );
|
|
var_5 = var_5 - var_4 * 60;
|
|
|
|
if ( var_5 < 10 )
|
|
var_2 = var_2 + ( ":0" + var_5 );
|
|
else
|
|
var_2 = var_2 + ( ":" + var_5 );
|
|
|
|
if ( isdefined( var_1 ) && var_1 )
|
|
{
|
|
var_6 = var_3;
|
|
var_6 = var_6 - var_4 * 6000;
|
|
var_6 = var_6 - var_5 * 100;
|
|
var_6 = int( var_6 / 10 );
|
|
var_2 = var_2 + ( "." + var_6 );
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
round_float( var_0, var_1, var_2 )
|
|
{
|
|
var_1 = int( var_1 );
|
|
|
|
if ( var_1 < 0 || var_1 > 4 )
|
|
return var_0;
|
|
|
|
var_3 = 1;
|
|
|
|
for ( var_4 = 1; var_4 <= var_1; var_4++ )
|
|
var_3 = var_3 * 10;
|
|
|
|
var_5 = var_0 * var_3;
|
|
|
|
if ( !isdefined( var_2 ) || var_2 )
|
|
var_5 = floor( var_5 );
|
|
else
|
|
var_5 = ceil( var_5 );
|
|
|
|
var_0 = var_5 / var_3;
|
|
return var_0;
|
|
}
|
|
|
|
round_millisec_on_sec( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = var_0 / 1000;
|
|
var_3 = round_float( var_3, var_1, var_2 );
|
|
var_0 = var_3 * 1000;
|
|
return int( var_0 );
|
|
}
|
|
|
|
set_vision_set( var_0, var_1 )
|
|
{
|
|
if ( maps\_utility_code::init_vision_set( var_0 ) )
|
|
return;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 1;
|
|
|
|
visionsetnaked( var_0, var_1 );
|
|
setdvar( "vision_set_current", var_0 );
|
|
}
|
|
|
|
set_vision_set_player( var_0, var_1 )
|
|
{
|
|
if ( maps\_utility_code::init_vision_set( var_0 ) )
|
|
return;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 1;
|
|
|
|
self visionsetnakedforplayer( var_0, var_1 );
|
|
}
|
|
|
|
sun_light_fade( var_0, var_1, var_2 )
|
|
{
|
|
var_2 = int( var_2 * 20 );
|
|
var_3 = [];
|
|
|
|
for ( var_4 = 0; var_4 < 3; var_4++ )
|
|
var_3[var_4] = ( var_0[var_4] - var_1[var_4] ) / var_2;
|
|
|
|
var_5 = [];
|
|
|
|
for ( var_4 = 0; var_4 < var_2; var_4++ )
|
|
{
|
|
wait 0.05;
|
|
|
|
for ( var_6 = 0; var_6 < 3; var_6++ )
|
|
var_5[var_6] = var_0[var_6] - var_3[var_6] * var_4;
|
|
|
|
setsunlight( var_5[0], var_5[1], var_5[2] );
|
|
}
|
|
|
|
setsunlight( var_1[0], var_1[1], var_1[2] );
|
|
}
|
|
|
|
ent_flag_wait( var_0 )
|
|
{
|
|
while ( isdefined( self ) && !self.ent_flag[var_0] )
|
|
self waittill( var_0 );
|
|
}
|
|
|
|
ent_flag_wait_vehicle_node( var_0 )
|
|
{
|
|
while ( isdefined( self ) && !self.ent_flag[var_0] )
|
|
self waittill( var_0 );
|
|
}
|
|
|
|
ent_flag_wait_either( var_0, var_1 )
|
|
{
|
|
while ( isdefined( self ) )
|
|
{
|
|
if ( ent_flag( var_0 ) )
|
|
return;
|
|
|
|
if ( ent_flag( var_1 ) )
|
|
return;
|
|
|
|
common_scripts\utility::waittill_either( var_0, var_1 );
|
|
}
|
|
}
|
|
|
|
ent_flag_wait_or_timeout( var_0, var_1 )
|
|
{
|
|
var_2 = gettime();
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
if ( self.ent_flag[var_0] )
|
|
break;
|
|
|
|
if ( gettime() >= var_2 + var_1 * 1000 )
|
|
break;
|
|
|
|
maps\_utility_code::ent_wait_for_flag_or_time_elapses( var_0, var_1 );
|
|
}
|
|
}
|
|
|
|
ent_flag_waitopen( var_0 )
|
|
{
|
|
while ( isdefined( self ) && self.ent_flag[var_0] )
|
|
self waittill( var_0 );
|
|
}
|
|
|
|
ent_flag_assert( var_0 )
|
|
{
|
|
|
|
}
|
|
|
|
ent_flag_waitopen_either( var_0, var_1 )
|
|
{
|
|
while ( isdefined( self ) )
|
|
{
|
|
if ( !ent_flag( var_0 ) )
|
|
return;
|
|
|
|
if ( !ent_flag( var_1 ) )
|
|
return;
|
|
|
|
common_scripts\utility::waittill_either( var_0, var_1 );
|
|
}
|
|
}
|
|
|
|
ent_flag_init( var_0 )
|
|
{
|
|
if ( !isdefined( self.ent_flag ) )
|
|
{
|
|
self.ent_flag = [];
|
|
self.ent_flags_lock = [];
|
|
}
|
|
|
|
self.ent_flag[var_0] = 0;
|
|
}
|
|
|
|
ent_flag_exist( var_0 )
|
|
{
|
|
if ( isdefined( self.ent_flag ) && isdefined( self.ent_flag[var_0] ) )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
ent_flag_set_delayed( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
wait( var_1 );
|
|
ent_flag_set( var_0 );
|
|
}
|
|
|
|
ent_flag_set( var_0 )
|
|
{
|
|
self.ent_flag[var_0] = 1;
|
|
self notify( var_0 );
|
|
}
|
|
|
|
ent_flag_clear( var_0, var_1 )
|
|
{
|
|
if ( self.ent_flag[var_0] )
|
|
{
|
|
self.ent_flag[var_0] = 0;
|
|
self notify( var_0 );
|
|
}
|
|
|
|
if ( isdefined( var_1 ) && var_1 )
|
|
self.ent_flag[var_0] = undefined;
|
|
}
|
|
|
|
ent_flag_clear_delayed( var_0, var_1 )
|
|
{
|
|
wait( var_1 );
|
|
ent_flag_clear( var_0 );
|
|
}
|
|
|
|
ent_flag( var_0 )
|
|
{
|
|
return self.ent_flag[var_0];
|
|
}
|
|
|
|
get_closest_to_player_view( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !var_0.size )
|
|
return;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = level.player;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = -1;
|
|
|
|
var_4 = var_1.origin;
|
|
|
|
if ( isdefined( var_2 ) && var_2 )
|
|
var_4 = var_1 geteye();
|
|
|
|
var_5 = undefined;
|
|
var_6 = var_1 getplayerangles();
|
|
var_7 = anglestoforward( var_6 );
|
|
var_8 = -1;
|
|
|
|
foreach ( var_10 in var_0 )
|
|
{
|
|
var_11 = vectortoangles( var_10.origin - var_4 );
|
|
var_12 = anglestoforward( var_11 );
|
|
var_13 = vectordot( var_7, var_12 );
|
|
|
|
if ( var_13 < var_8 )
|
|
continue;
|
|
|
|
if ( var_13 < var_3 )
|
|
continue;
|
|
|
|
var_8 = var_13;
|
|
var_5 = var_10;
|
|
}
|
|
|
|
return var_5;
|
|
}
|
|
|
|
get_closest_index_to_player_view( var_0, var_1, var_2 )
|
|
{
|
|
if ( !var_0.size )
|
|
return;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = level.player;
|
|
|
|
var_3 = var_1.origin;
|
|
|
|
if ( isdefined( var_2 ) && var_2 )
|
|
var_3 = var_1 geteye();
|
|
|
|
var_4 = undefined;
|
|
var_5 = var_1 getplayerangles();
|
|
var_6 = anglestoforward( var_5 );
|
|
var_7 = -1;
|
|
|
|
for ( var_8 = 0; var_8 < var_0.size; var_8++ )
|
|
{
|
|
var_9 = vectortoangles( var_0[var_8].origin - var_3 );
|
|
var_10 = anglestoforward( var_9 );
|
|
var_11 = vectordot( var_6, var_10 );
|
|
|
|
if ( var_11 < var_7 )
|
|
continue;
|
|
|
|
var_7 = var_11;
|
|
var_4 = var_8;
|
|
}
|
|
|
|
return var_4;
|
|
}
|
|
|
|
flag_trigger_init( var_0, var_1, var_2 )
|
|
{
|
|
common_scripts\utility::flag_init( var_0 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
var_1 thread maps\_utility_code::_flag_wait_trigger( var_0, var_2 );
|
|
return var_1;
|
|
}
|
|
|
|
flag_triggers_init( var_0, var_1, var_2 )
|
|
{
|
|
common_scripts\utility::flag_init( var_0 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
for ( var_3 = 0; var_3 < var_1.size; var_3++ )
|
|
var_1[var_3] thread maps\_utility_code::_flag_wait_trigger( var_0, 0 );
|
|
|
|
return var_1;
|
|
}
|
|
|
|
flag_clear_delayed( var_0, var_1 )
|
|
{
|
|
wait( var_1 );
|
|
common_scripts\utility::flag_clear( var_0 );
|
|
}
|
|
|
|
level_end_save()
|
|
{
|
|
if ( arcademode() )
|
|
return;
|
|
|
|
if ( level.missionfailed )
|
|
return;
|
|
|
|
if ( common_scripts\utility::flag( "game_saving" ) )
|
|
return;
|
|
|
|
for ( var_0 = 0; var_0 < level.players.size; var_0++ )
|
|
{
|
|
var_1 = level.players[var_0];
|
|
|
|
if ( !isalive( var_1 ) )
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "game_saving" );
|
|
var_2 = "levelshots / autosave / autosave_" + level.script + "end";
|
|
savegame( "levelend", &"AUTOSAVE_AUTOSAVE", var_2, 1 );
|
|
common_scripts\utility::flag_clear( "game_saving" );
|
|
}
|
|
|
|
add_extra_autosave_check( var_0, var_1, var_2 )
|
|
{
|
|
level._extra_autosave_checks[var_0] = [];
|
|
level._extra_autosave_checks[var_0]["func"] = var_1;
|
|
level._extra_autosave_checks[var_0]["msg"] = var_2;
|
|
}
|
|
|
|
remove_extra_autosave_check( var_0 )
|
|
{
|
|
level._extra_autosave_checks[var_0] = undefined;
|
|
}
|
|
|
|
autosave_stealth()
|
|
{
|
|
thread autosave_by_name_thread( "autosave_stealth", 8, 1 );
|
|
}
|
|
|
|
autosave_stealth_silent()
|
|
{
|
|
thread autosave_by_name_thread( "autosave_stealth", 8, 1, 1 );
|
|
}
|
|
|
|
autosave_tactical()
|
|
{
|
|
maps\_utility_code::autosave_tactical_setup();
|
|
thread maps\_utility_code::autosave_tactical_proc();
|
|
}
|
|
|
|
autosave_by_name( var_0 )
|
|
{
|
|
thread autosave_by_name_thread( var_0 );
|
|
}
|
|
|
|
autosave_by_name_silent( var_0 )
|
|
{
|
|
thread autosave_by_name_thread( var_0, undefined, undefined, 1 );
|
|
}
|
|
|
|
autosave_by_name_thread( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( level.curautosave ) )
|
|
level.curautosave = 1;
|
|
|
|
var_4 = "levelshots/autosave/autosave_" + level.script + level.curautosave;
|
|
var_5 = level maps\_autosave::tryautosave( level.curautosave, "autosave", var_4, var_1, var_2, var_3 );
|
|
|
|
if ( isdefined( var_5 ) && var_5 )
|
|
level.curautosave++;
|
|
}
|
|
|
|
autosave_or_timeout( var_0, var_1 )
|
|
{
|
|
thread autosave_by_name_thread( var_0, var_1 );
|
|
}
|
|
|
|
debug_message( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 5;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
var_3 endon( "death" );
|
|
var_1 = var_3.origin;
|
|
}
|
|
|
|
for ( var_4 = 0; var_4 < var_2 * 20; var_4++ )
|
|
{
|
|
if ( !isdefined( var_3 ) )
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
debug_message_ai( var_0, var_1 )
|
|
{
|
|
self notify( "debug_message_ai" );
|
|
self endon( "debug_message_ai" );
|
|
self endon( "death" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 5;
|
|
|
|
for ( var_2 = 0; var_2 < var_1 * 20; var_2++ )
|
|
wait 0.05;
|
|
}
|
|
|
|
debug_message_clear( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
level notify( var_0 + var_3 );
|
|
level endon( var_0 + var_3 );
|
|
}
|
|
else
|
|
{
|
|
level notify( var_0 );
|
|
level endon( var_0 );
|
|
}
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 5;
|
|
|
|
for ( var_4 = 0; var_4 < var_2 * 20; var_4++ )
|
|
wait 0.05;
|
|
}
|
|
|
|
precache( var_0 )
|
|
{
|
|
var_1 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_1.origin = level.player getorigin();
|
|
var_1 setmodel( var_0 );
|
|
var_1 delete();
|
|
}
|
|
|
|
closerfunc( var_0, var_1 )
|
|
{
|
|
return var_0 >= var_1;
|
|
}
|
|
|
|
fartherfunc( var_0, var_1 )
|
|
{
|
|
return var_0 <= var_1;
|
|
}
|
|
|
|
getclosestfx( var_0, var_1, var_2 )
|
|
{
|
|
return maps\_utility_code::comparesizesfx( var_0, var_1, var_2, ::closerfunc );
|
|
}
|
|
|
|
get_closest_point( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = var_1[0];
|
|
var_4 = distance( var_0, var_3 );
|
|
|
|
for ( var_5 = 0; var_5 < var_1.size; var_5++ )
|
|
{
|
|
var_6 = distance( var_0, var_1[var_5] );
|
|
|
|
if ( var_6 >= var_4 )
|
|
continue;
|
|
|
|
var_4 = var_6;
|
|
var_3 = var_1[var_5];
|
|
}
|
|
|
|
if ( !isdefined( var_2 ) || var_4 <= var_2 )
|
|
return var_3;
|
|
|
|
return undefined;
|
|
}
|
|
|
|
get_farthest_ent( var_0, var_1 )
|
|
{
|
|
if ( var_1.size < 1 )
|
|
return;
|
|
|
|
var_2 = distance( var_1[0] getorigin(), var_0 );
|
|
var_3 = var_1[0];
|
|
|
|
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
|
{
|
|
var_5 = distance( var_1[var_4] getorigin(), var_0 );
|
|
|
|
if ( var_5 < var_2 )
|
|
continue;
|
|
|
|
var_2 = var_5;
|
|
var_3 = var_1[var_4];
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
get_within_range( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = [];
|
|
|
|
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
|
{
|
|
if ( distance( var_1[var_4].origin, var_0 ) <= var_2 )
|
|
var_3[var_3.size] = var_1[var_4];
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
get_outside_range( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = [];
|
|
|
|
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
|
{
|
|
if ( distance( var_1[var_4].origin, var_0 ) > var_2 )
|
|
var_3[var_3.size] = var_1[var_4];
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
get_closest_living( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 9999999;
|
|
|
|
if ( var_1.size < 1 )
|
|
return;
|
|
|
|
var_3 = undefined;
|
|
|
|
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
|
{
|
|
if ( !isalive( var_1[var_4] ) )
|
|
continue;
|
|
|
|
var_5 = distance( var_1[var_4].origin, var_0 );
|
|
|
|
if ( var_5 >= var_2 )
|
|
continue;
|
|
|
|
var_2 = var_5;
|
|
var_3 = var_1[var_4];
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
get_highest_dot( var_0, var_1, var_2 )
|
|
{
|
|
if ( !var_2.size )
|
|
return;
|
|
|
|
var_3 = undefined;
|
|
var_4 = vectortoangles( var_1 - var_0 );
|
|
var_5 = anglestoforward( var_4 );
|
|
var_6 = -1;
|
|
|
|
foreach ( var_8 in var_2 )
|
|
{
|
|
var_4 = vectortoangles( var_8.origin - var_0 );
|
|
var_9 = anglestoforward( var_4 );
|
|
var_10 = vectordot( var_5, var_9 );
|
|
|
|
if ( var_10 < var_6 )
|
|
continue;
|
|
|
|
var_6 = var_10;
|
|
var_3 = var_8;
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
get_closest_index( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 9999999;
|
|
|
|
if ( var_1.size < 1 )
|
|
return;
|
|
|
|
var_3 = undefined;
|
|
|
|
foreach ( var_7, var_5 in var_1 )
|
|
{
|
|
var_6 = distance( var_5.origin, var_0 );
|
|
|
|
if ( var_6 >= var_2 )
|
|
continue;
|
|
|
|
var_2 = var_6;
|
|
var_3 = var_7;
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
get_closest_exclude( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
return undefined;
|
|
|
|
var_3 = 0;
|
|
|
|
if ( isdefined( var_2 ) && var_2.size )
|
|
{
|
|
var_4 = [];
|
|
|
|
for ( var_5 = 0; var_5 < var_1.size; var_5++ )
|
|
var_4[var_5] = 0;
|
|
|
|
for ( var_5 = 0; var_5 < var_1.size; var_5++ )
|
|
{
|
|
for ( var_6 = 0; var_6 < var_2.size; var_6++ )
|
|
{
|
|
if ( var_1[var_5] == var_2[var_6] )
|
|
var_4[var_5] = 1;
|
|
}
|
|
}
|
|
|
|
var_7 = 0;
|
|
|
|
for ( var_5 = 0; var_5 < var_1.size; var_5++ )
|
|
{
|
|
if ( !var_4[var_5] && isdefined( var_1[var_5] ) )
|
|
{
|
|
var_7 = 1;
|
|
var_3 = distance( var_0, var_1[var_5].origin );
|
|
var_8 = var_5;
|
|
var_5 = var_1.size + 1;
|
|
}
|
|
}
|
|
|
|
if ( !var_7 )
|
|
return undefined;
|
|
}
|
|
else
|
|
{
|
|
for ( var_5 = 0; var_5 < var_1.size; var_5++ )
|
|
{
|
|
if ( isdefined( var_1[var_5] ) )
|
|
{
|
|
var_3 = distance( var_0, var_1[0].origin );
|
|
var_8 = var_5;
|
|
var_5 = var_1.size + 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
var_8 = undefined;
|
|
|
|
for ( var_5 = 0; var_5 < var_1.size; var_5++ )
|
|
{
|
|
if ( isdefined( var_1[var_5] ) )
|
|
{
|
|
var_4 = 0;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
for ( var_6 = 0; var_6 < var_2.size; var_6++ )
|
|
{
|
|
if ( var_1[var_5] == var_2[var_6] )
|
|
var_4 = 1;
|
|
}
|
|
}
|
|
|
|
if ( !var_4 )
|
|
{
|
|
var_9 = distance( var_0, var_1[var_5].origin );
|
|
|
|
if ( var_9 <= var_3 )
|
|
{
|
|
var_3 = var_9;
|
|
var_8 = var_5;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_8 ) )
|
|
return var_1[var_8];
|
|
else
|
|
return undefined;
|
|
}
|
|
|
|
get_closest_player( var_0 )
|
|
{
|
|
if ( level.players.size == 1 )
|
|
return level.player;
|
|
|
|
var_1 = common_scripts\utility::getclosest( var_0, level.players );
|
|
return var_1;
|
|
}
|
|
|
|
get_closest_player_healthy( var_0 )
|
|
{
|
|
if ( level.players.size == 1 )
|
|
return level.player;
|
|
|
|
var_1 = get_players_healthy();
|
|
var_2 = common_scripts\utility::getclosest( var_0, var_1 );
|
|
return var_2;
|
|
}
|
|
|
|
get_players_healthy()
|
|
{
|
|
var_0 = [];
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( is_player_down( var_2 ) )
|
|
continue;
|
|
|
|
var_0[var_0.size] = var_2;
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
get_closest_ai( var_0, var_1, var_2 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
var_3 = getaiarray( var_1 );
|
|
else
|
|
var_3 = getaiarray();
|
|
|
|
if ( var_3.size == 0 )
|
|
return undefined;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_3 = common_scripts\utility::array_remove_array( var_3, var_2 );
|
|
|
|
return common_scripts\utility::getclosest( var_0, var_3 );
|
|
}
|
|
|
|
get_closest_ai_exclude( var_0, var_1, var_2 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
var_3 = getaiarray( var_1 );
|
|
else
|
|
var_3 = getaiarray();
|
|
|
|
if ( var_3.size == 0 )
|
|
return undefined;
|
|
|
|
return get_closest_exclude( var_0, var_3, var_2 );
|
|
}
|
|
|
|
get_progress( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = distance( var_0, var_1 );
|
|
|
|
var_3 = max( 0.01, var_3 );
|
|
var_4 = vectornormalize( var_1 - var_0 );
|
|
var_5 = var_2 - var_0;
|
|
var_6 = vectordot( var_5, var_4 );
|
|
var_6 = var_6 / var_3;
|
|
var_6 = clamp( var_6, 0, 1 );
|
|
return var_6;
|
|
}
|
|
|
|
can_see_origin( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 1;
|
|
|
|
if ( !point_in_fov( var_0 ) )
|
|
return 0;
|
|
|
|
if ( !sighttracepassed( self geteye(), var_0, var_1, self ) )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
point_in_fov( var_0 )
|
|
{
|
|
var_1 = anglestoforward( self.angles );
|
|
var_2 = vectornormalize( var_0 - self.origin );
|
|
var_3 = vectordot( var_1, var_2 );
|
|
return var_3 > 0.766;
|
|
}
|
|
|
|
stop_magic_bullet_shield()
|
|
{
|
|
self notify( "stop_magic_bullet_shield" );
|
|
|
|
if ( isai( self ) )
|
|
self.attackeraccuracy = 1;
|
|
|
|
self.magic_bullet_shield = undefined;
|
|
self.damageshield = 0;
|
|
self notify( "internal_stop_magic_bullet_shield" );
|
|
}
|
|
|
|
magic_bullet_death_detection()
|
|
{
|
|
|
|
}
|
|
|
|
magic_bullet_shield( var_0 )
|
|
{
|
|
if ( isai( self ) )
|
|
{
|
|
|
|
}
|
|
else
|
|
self.health = 100000;
|
|
|
|
self endon( "internal_stop_magic_bullet_shield" );
|
|
|
|
if ( isai( self ) )
|
|
self.attackeraccuracy = 0.1;
|
|
|
|
self notify( "magic_bullet_shield" );
|
|
self.magic_bullet_shield = 1;
|
|
self.damageshield = 1;
|
|
}
|
|
|
|
disable_long_death()
|
|
{
|
|
self.a.disablelongdeath = 1;
|
|
}
|
|
|
|
enable_long_death()
|
|
{
|
|
self.a.disablelongdeath = 0;
|
|
}
|
|
|
|
enable_blood_pool()
|
|
{
|
|
self.skipbloodpool = undefined;
|
|
}
|
|
|
|
disable_blood_pool()
|
|
{
|
|
self.skipbloodpool = 1;
|
|
}
|
|
|
|
deletable_magic_bullet_shield()
|
|
{
|
|
magic_bullet_shield( 1 );
|
|
}
|
|
|
|
get_ignoreme()
|
|
{
|
|
return self.ignoreme;
|
|
}
|
|
|
|
set_ignoreme( var_0 )
|
|
{
|
|
self.ignoreme = var_0;
|
|
}
|
|
|
|
set_ignoreall( var_0 )
|
|
{
|
|
self.ignoreall = var_0;
|
|
}
|
|
|
|
set_favoriteenemy( var_0 )
|
|
{
|
|
self.favoriteenemy = var_0;
|
|
}
|
|
|
|
get_pacifist()
|
|
{
|
|
return self.pacifist;
|
|
}
|
|
|
|
set_pacifist( var_0 )
|
|
{
|
|
self.pacifist = var_0;
|
|
}
|
|
|
|
ignore_me_timer( var_0 )
|
|
{
|
|
self notify( "new_ignore_me_timer" );
|
|
self endon( "new_ignore_me_timer" );
|
|
self endon( "death" );
|
|
|
|
if ( !isdefined( self.ignore_me_timer_prev_value ) )
|
|
self.ignore_me_timer_prev_value = self.ignoreme;
|
|
|
|
var_1 = getaiarray( "bad_guys" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( !isalive( var_3.enemy ) )
|
|
continue;
|
|
|
|
if ( var_3.enemy != self )
|
|
continue;
|
|
|
|
var_3 clearenemy();
|
|
}
|
|
|
|
self.ignoreme = 1;
|
|
wait( var_0 );
|
|
self.ignoreme = self.ignore_me_timer_prev_value;
|
|
self.ignore_me_timer_prev_value = undefined;
|
|
}
|
|
|
|
delete_exploder( var_0 )
|
|
{
|
|
common_scripts\_exploder::delete_exploder_proc( var_0 );
|
|
}
|
|
|
|
hide_exploder_models( var_0 )
|
|
{
|
|
common_scripts\_exploder::hide_exploder_models_proc( var_0 );
|
|
}
|
|
|
|
show_exploder_models( var_0 )
|
|
{
|
|
common_scripts\_exploder::show_exploder_models_proc( var_0 );
|
|
}
|
|
|
|
stop_exploder( var_0 )
|
|
{
|
|
common_scripts\_exploder::stop_exploder_proc( var_0 );
|
|
}
|
|
|
|
get_exploder_array( var_0 )
|
|
{
|
|
return common_scripts\_exploder::get_exploder_array_proc( var_0 );
|
|
}
|
|
|
|
flood_spawn( var_0 )
|
|
{
|
|
maps\_spawner::flood_spawner_scripted( var_0 );
|
|
}
|
|
|
|
force_crawling_death( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 4;
|
|
|
|
thread force_crawling_death_proc( var_0, var_1, var_2, var_3 );
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
override_crawl_death_anims()
|
|
{
|
|
if ( isdefined( self.a.custom_crawling_death_array ) )
|
|
{
|
|
self.a.array["crawl"] = self.a.custom_crawling_death_array["crawl"];
|
|
self.a.array["death"] = self.a.custom_crawling_death_array["death"];
|
|
self.a.crawl_fx_rate = self.a.custom_crawling_death_array["blood_fx_rate"];
|
|
|
|
if ( isdefined( self.a.custom_crawling_death_array["blood_fx"] ) )
|
|
self.a.crawl_fx = self.a.custom_crawling_death_array["blood_fx"];
|
|
}
|
|
|
|
self.a.array["stand_2_crawl"] = [];
|
|
self.a.array["stand_2_crawl"][0] = %dying_stand_2_crawl_v3;
|
|
|
|
if ( isdefined( self.nofallanim ) )
|
|
self.a.pose = "prone";
|
|
|
|
self orientmode( "face angle", self.a.force_crawl_angle );
|
|
self.a.force_crawl_angle = undefined;
|
|
}
|
|
|
|
force_crawling_death_proc( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self.forcelongdeath = 1;
|
|
self.a.force_num_crawls = var_1;
|
|
self.noragdoll = 1;
|
|
self.nofallanim = var_3;
|
|
self.a.custom_crawling_death_array = var_2;
|
|
self.crawlingpainanimoverridefunc = ::override_crawl_death_anims;
|
|
self.maxhealth = 100000;
|
|
self.health = 100000;
|
|
enable_long_death();
|
|
|
|
if ( !isdefined( var_3 ) || var_3 == 0 )
|
|
self.a.force_crawl_angle = var_0 + 181.02;
|
|
else
|
|
{
|
|
self.a.force_crawl_angle = var_0;
|
|
thread animscripts\notetracks::notetrackposecrawl();
|
|
}
|
|
}
|
|
|
|
shock_ondeath()
|
|
{
|
|
precacheshellshock( "default" );
|
|
self waittill( "death" );
|
|
|
|
if ( isdefined( self.specialdeath ) )
|
|
return;
|
|
|
|
if ( getdvar( "r_texturebits" ) == "16" )
|
|
return;
|
|
|
|
self shellshock( "default", 3 );
|
|
}
|
|
|
|
playerwatch_unresolved_collision()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_unresolved_collision_script" );
|
|
reset_unresolved_collision_handler();
|
|
childthread playerwatch_unresolved_collision_count();
|
|
|
|
for (;;)
|
|
{
|
|
if ( self.unresolved_collision )
|
|
{
|
|
self.unresolved_collision = 0;
|
|
|
|
if ( self.unresolved_collision_count >= 20 )
|
|
{
|
|
if ( isdefined( self.handle_unresolved_collision ) )
|
|
self [[ self.handle_unresolved_collision ]]();
|
|
else
|
|
default_unresolved_collision_handler();
|
|
}
|
|
}
|
|
else
|
|
reset_unresolved_collision_handler();
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
playerwatch_unresolved_collision_count()
|
|
{
|
|
for (;;)
|
|
{
|
|
self waittill( "unresolved_collision" );
|
|
self.unresolved_collision = 1;
|
|
self.unresolved_collision_count++;
|
|
}
|
|
}
|
|
|
|
reset_unresolved_collision_handler()
|
|
{
|
|
self.unresolved_collision = 0;
|
|
self.unresolved_collision_count = 0;
|
|
}
|
|
|
|
default_unresolved_collision_handler()
|
|
{
|
|
var_0 = getnodesinradiussorted( self.origin, 300, 0, 200, "Path" );
|
|
|
|
if ( var_0.size )
|
|
{
|
|
self cancelmantle();
|
|
self dontinterpolate();
|
|
self setorigin( var_0[0].origin );
|
|
reset_unresolved_collision_handler();
|
|
}
|
|
else
|
|
self kill();
|
|
}
|
|
|
|
stop_playerwatch_unresolved_collision()
|
|
{
|
|
self notify( "stop_unresolved_collision_script" );
|
|
reset_unresolved_collision_handler();
|
|
}
|
|
|
|
delete_on_death_wait_sound( var_0, var_1 )
|
|
{
|
|
var_0 endon( "death" );
|
|
self waittill( "death" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
if ( var_0 iswaitingonsound() )
|
|
var_0 waittill( var_1 );
|
|
|
|
var_0 delete();
|
|
}
|
|
}
|
|
|
|
is_dead_sentient()
|
|
{
|
|
return issentient( self ) && !isalive( self );
|
|
}
|
|
|
|
play_sound_on_tag( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
if ( is_dead_sentient() )
|
|
return;
|
|
|
|
var_5 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_5 endon( "death" );
|
|
thread delete_on_death_wait_sound( var_5, "sounddone" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_5 linkto( self, var_1, ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
else
|
|
{
|
|
var_5.origin = self.origin;
|
|
var_5.angles = self.angles;
|
|
var_5 linkto( self );
|
|
}
|
|
|
|
var_5 playsound( var_0, "sounddone" );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
if ( !isdefined( maps\_utility_code::wait_for_sounddone_or_death( var_5 ) ) )
|
|
var_5 stopsounds();
|
|
|
|
wait 0.05;
|
|
}
|
|
else
|
|
var_5 waittill( "sounddone" );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
self notify( var_3 );
|
|
|
|
var_5 delete();
|
|
}
|
|
|
|
play_sound_on_tag_endon_death( var_0, var_1 )
|
|
{
|
|
play_sound_on_tag( var_0, var_1, 1 );
|
|
}
|
|
|
|
play_sound_on_entity( var_0, var_1 )
|
|
{
|
|
play_sound_on_tag( var_0, undefined, undefined, var_1 );
|
|
}
|
|
|
|
play_loop_sound_on_tag( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_4 endon( "death" );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 1;
|
|
|
|
if ( var_2 )
|
|
thread common_scripts\utility::delete_on_death( var_4 );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 0;
|
|
|
|
if ( var_3 )
|
|
thread delete_on_removed( var_4 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_4 linkto( self, var_1, ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
else
|
|
{
|
|
var_4.origin = self.origin;
|
|
var_4.angles = self.angles;
|
|
var_4 linkto( self );
|
|
}
|
|
|
|
var_4 playloopsound( var_0 );
|
|
self waittill( "stop sound" + var_0 );
|
|
var_4 stoploopsound( var_0 );
|
|
var_4 delete();
|
|
}
|
|
|
|
delete_on_removed( var_0 )
|
|
{
|
|
var_0 endon( "death" );
|
|
|
|
while ( isdefined( self ) )
|
|
wait 0.05;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 delete();
|
|
}
|
|
|
|
save_friendlies()
|
|
{
|
|
var_0 = getaiarray( "allies" );
|
|
var_1 = 0;
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
if ( isdefined( var_0[var_2].script_friendname ) )
|
|
continue;
|
|
|
|
game["character" + var_1] = var_0[var_2] codescripts\character::save();
|
|
var_1++;
|
|
}
|
|
|
|
game["total characters"] = var_1;
|
|
}
|
|
|
|
spawn_failed( var_0 )
|
|
{
|
|
if ( !isalive( var_0 ) )
|
|
return 1;
|
|
|
|
if ( !isdefined( var_0.finished_spawning ) )
|
|
var_0 common_scripts\utility::waittill_either( "finished spawning", "death" );
|
|
|
|
if ( isalive( var_0 ) )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
spawn_setcharacter( var_0 )
|
|
{
|
|
codescripts\character::precache( var_0 );
|
|
self waittill( "spawned", var_1 );
|
|
|
|
if ( spawn_failed( var_1 ) )
|
|
return;
|
|
|
|
var_1 codescripts\character::new();
|
|
var_1 codescripts\character::load( var_0 );
|
|
}
|
|
|
|
key_hint_print( var_0, var_1 )
|
|
{
|
|
iprintlnbold( var_0, var_1["key1"] );
|
|
}
|
|
|
|
view_tag( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
maps\_debug::drawtag( var_0 );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
assign_animtree( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
self.animname = var_0;
|
|
|
|
self useanimtree( level.scr_animtree[self.animname] );
|
|
}
|
|
|
|
assign_model()
|
|
{
|
|
if ( isarray( level.scr_model[self.animname] ) )
|
|
{
|
|
var_0 = randomint( level.scr_model[self.animname].size );
|
|
self setmodel( level.scr_model[self.animname][var_0] );
|
|
}
|
|
else
|
|
self setmodel( level.scr_model[self.animname] );
|
|
}
|
|
|
|
spawn_anim_model( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = ( 0, 0, 0 );
|
|
|
|
var_3 = spawn( "script_model", var_1 );
|
|
var_3.animname = var_0;
|
|
var_3 assign_animtree();
|
|
var_3 assign_model();
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_3.angles = var_2;
|
|
|
|
return var_3;
|
|
}
|
|
|
|
trigger_wait( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_0, var_1 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
return;
|
|
|
|
var_2 waittill( "trigger", var_3 );
|
|
level notify( var_0, var_3 );
|
|
return var_3;
|
|
}
|
|
|
|
trigger_wait_targetname( var_0 )
|
|
{
|
|
return trigger_wait( var_0, "targetname" );
|
|
}
|
|
|
|
set_flag_on_dead( var_0, var_1 )
|
|
{
|
|
thread set_flag_on_func_wait_proc( var_0, var_1, ::waittill_dead, "set_flag_on_dead" );
|
|
}
|
|
|
|
set_flag_on_dead_or_dying( var_0, var_1 )
|
|
{
|
|
thread set_flag_on_func_wait_proc( var_0, var_1, ::waittill_dead_or_dying, "set_flag_on_dead_or_dying" );
|
|
}
|
|
|
|
set_flag_on_spawned( var_0, var_1 )
|
|
{
|
|
thread set_flag_on_func_wait_proc( var_0, var_1, ::empty_func, "set_flag_on_spawned" );
|
|
}
|
|
|
|
empty_func( var_0 )
|
|
{
|
|
return;
|
|
}
|
|
|
|
set_flag_on_spawned_ai_proc( var_0, var_1 )
|
|
{
|
|
self waittill( "spawned", var_2 );
|
|
|
|
if ( spawn_failed( var_2 ) )
|
|
return;
|
|
|
|
var_0.ai[var_0.ai.size] = var_2;
|
|
ent_flag_set( var_1 );
|
|
}
|
|
|
|
set_flag_on_func_wait_proc( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = spawnstruct();
|
|
var_4.ai = [];
|
|
|
|
foreach ( var_7, var_6 in var_0 )
|
|
var_6 ent_flag_init( var_3 );
|
|
|
|
common_scripts\utility::array_thread( var_0, ::set_flag_on_spawned_ai_proc, var_4, var_3 );
|
|
|
|
foreach ( var_7, var_6 in var_0 )
|
|
var_6 ent_flag_wait( var_3 );
|
|
|
|
[[ var_2 ]]( var_4.ai );
|
|
common_scripts\utility::flag_set( var_1 );
|
|
}
|
|
|
|
set_flag_on_trigger( var_0, var_1 )
|
|
{
|
|
if ( !common_scripts\utility::flag( var_1 ) )
|
|
{
|
|
var_0 waittill( "trigger", var_2 );
|
|
common_scripts\utility::flag_set( var_1 );
|
|
return var_2;
|
|
}
|
|
}
|
|
|
|
set_flag_on_targetname_trigger( var_0 )
|
|
{
|
|
if ( common_scripts\utility::flag( var_0 ) )
|
|
return;
|
|
|
|
var_1 = getent( var_0, "targetname" );
|
|
var_1 waittill( "trigger" );
|
|
common_scripts\utility::flag_set( var_0 );
|
|
}
|
|
|
|
is_in_array( var_0, var_1 )
|
|
{
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
if ( var_0[var_2] == var_1 )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
waittill_dead( var_0, var_1, var_2 )
|
|
{
|
|
var_10 = spawnstruct();
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
var_10 endon( "thread_timed_out" );
|
|
var_10 thread waittill_dead_timeout( var_2 );
|
|
}
|
|
|
|
var_10.count = var_0.size;
|
|
|
|
if ( isdefined( var_1 ) && var_1 < var_10.count )
|
|
var_10.count = var_1;
|
|
|
|
common_scripts\utility::array_thread( var_0, ::waittill_dead_thread, var_10 );
|
|
|
|
while ( var_10.count > 0 )
|
|
var_10 waittill( "waittill_dead guy died" );
|
|
}
|
|
|
|
waittill_dead_or_dying( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = [];
|
|
|
|
foreach ( var_5 in var_0 )
|
|
{
|
|
if ( isalive( var_5 ) && !var_5.ignoreforfixednodesafecheck )
|
|
var_3[var_3.size] = var_5;
|
|
}
|
|
|
|
var_0 = var_3;
|
|
var_7 = spawnstruct();
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
var_7 endon( "thread_timed_out" );
|
|
var_7 thread waittill_dead_timeout( var_2 );
|
|
}
|
|
|
|
var_7.count = var_0.size;
|
|
|
|
if ( isdefined( var_1 ) && var_1 < var_7.count )
|
|
var_7.count = var_1;
|
|
|
|
common_scripts\utility::array_thread( var_0, ::waittill_dead_or_dying_thread, var_7 );
|
|
|
|
while ( var_7.count > 0 )
|
|
var_7 waittill( "waittill_dead_guy_dead_or_dying" );
|
|
}
|
|
|
|
waittill_dead_thread( var_0 )
|
|
{
|
|
self waittill( "death" );
|
|
var_0.count--;
|
|
var_0 notify( "waittill_dead guy died" );
|
|
}
|
|
|
|
waittill_dead_or_dying_thread( var_0 )
|
|
{
|
|
common_scripts\utility::waittill_either( "death", "pain_death" );
|
|
var_0.count--;
|
|
var_0 notify( "waittill_dead_guy_dead_or_dying" );
|
|
}
|
|
|
|
waittill_dead_timeout( var_0 )
|
|
{
|
|
wait( var_0 );
|
|
self notify( "thread_timed_out" );
|
|
}
|
|
|
|
waittill_aigroupcleared( var_0 )
|
|
{
|
|
while ( level._ai_group[var_0].spawnercount || level._ai_group[var_0].aicount )
|
|
wait 0.25;
|
|
}
|
|
|
|
waittill_aigroupcount( var_0, var_1 )
|
|
{
|
|
while ( level._ai_group[var_0].spawnercount + level._ai_group[var_0].aicount > var_1 )
|
|
wait 0.25;
|
|
}
|
|
|
|
get_ai_group_count( var_0 )
|
|
{
|
|
return level._ai_group[var_0].spawnercount + level._ai_group[var_0].aicount;
|
|
}
|
|
|
|
get_ai_group_sentient_count( var_0 )
|
|
{
|
|
return level._ai_group[var_0].aicount;
|
|
}
|
|
|
|
get_ai_group_ai( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
for ( var_2 = 0; var_2 < level._ai_group[var_0].ai.size; var_2++ )
|
|
{
|
|
if ( !isalive( level._ai_group[var_0].ai[var_2] ) )
|
|
continue;
|
|
|
|
var_1[var_1.size] = level._ai_group[var_0].ai[var_2];
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
waittill_notetrack_or_damage( var_0 )
|
|
{
|
|
self endon( "damage" );
|
|
self endon( "death" );
|
|
self waittillmatch( "single anim", var_0 );
|
|
}
|
|
|
|
get_living_ai( var_0, var_1 )
|
|
{
|
|
var_2 = get_living_ai_array( var_0, var_1 );
|
|
|
|
if ( var_2.size > 1 )
|
|
return undefined;
|
|
|
|
return var_2[0];
|
|
}
|
|
|
|
get_living_ai_array( var_0, var_1 )
|
|
{
|
|
var_2 = getaispeciesarray( "all", "all" );
|
|
var_3 = [];
|
|
|
|
foreach ( var_5 in var_2 )
|
|
{
|
|
if ( !isalive( var_5 ) )
|
|
continue;
|
|
|
|
switch ( var_1 )
|
|
{
|
|
case "targetname":
|
|
if ( isdefined( var_5.targetname ) && var_5.targetname == var_0 )
|
|
var_3[var_3.size] = var_5;
|
|
|
|
break;
|
|
case "script_noteworthy":
|
|
if ( isdefined( var_5.script_noteworthy ) && var_5.script_noteworthy == var_0 )
|
|
var_3[var_3.size] = var_5;
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
get_vehicle( var_0, var_1 )
|
|
{
|
|
var_2 = get_vehicle_array( var_0, var_1 );
|
|
|
|
if ( !var_2.size )
|
|
return undefined;
|
|
|
|
return var_2[0];
|
|
}
|
|
|
|
get_vehicle_array( var_0, var_1 )
|
|
{
|
|
var_2 = getentarray( var_0, var_1 );
|
|
var_3 = [];
|
|
var_4 = [];
|
|
|
|
foreach ( var_6 in var_2 )
|
|
{
|
|
if ( var_6.code_classname != "script_vehicle" )
|
|
continue;
|
|
|
|
var_4[0] = var_6;
|
|
|
|
if ( isspawner( var_6 ) )
|
|
{
|
|
if ( isdefined( var_6.last_spawned_vehicle ) )
|
|
{
|
|
var_4[0] = var_6.last_spawned_vehicle;
|
|
var_3 = array_merge( var_3, var_4 );
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
var_3 = array_merge( var_3, var_4 );
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
get_living_aispecies( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = get_living_aispecies_array( var_0, var_1, var_2 );
|
|
|
|
if ( var_3.size > 1 )
|
|
return undefined;
|
|
|
|
return var_3[0];
|
|
}
|
|
|
|
get_living_aispecies_array( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = "all";
|
|
|
|
var_3 = getaispeciesarray( "allies", var_2 );
|
|
var_3 = common_scripts\utility::array_combine( var_3, getaispeciesarray( "axis", var_2 ) );
|
|
var_4 = [];
|
|
|
|
for ( var_5 = 0; var_5 < var_3.size; var_5++ )
|
|
{
|
|
switch ( var_1 )
|
|
{
|
|
case "targetname":
|
|
if ( isdefined( var_3[var_5].targetname ) && var_3[var_5].targetname == var_0 )
|
|
var_4[var_4.size] = var_3[var_5];
|
|
|
|
break;
|
|
case "script_noteworthy":
|
|
if ( isdefined( var_3[var_5].script_noteworthy ) && var_3[var_5].script_noteworthy == var_0 )
|
|
var_4[var_4.size] = var_3[var_5];
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
return var_4;
|
|
}
|
|
|
|
gather_delay_proc( var_0, var_1 )
|
|
{
|
|
if ( isdefined( level.gather_delay[var_0] ) )
|
|
{
|
|
if ( level.gather_delay[var_0] )
|
|
{
|
|
wait 0.05;
|
|
|
|
if ( isalive( self ) )
|
|
self notify( "gather_delay_finished" + var_0 + var_1 );
|
|
|
|
return;
|
|
}
|
|
|
|
level waittill( var_0 );
|
|
|
|
if ( isalive( self ) )
|
|
self notify( "gather_delay_finished" + var_0 + var_1 );
|
|
|
|
return;
|
|
}
|
|
|
|
level.gather_delay[var_0] = 0;
|
|
wait( var_1 );
|
|
level.gather_delay[var_0] = 1;
|
|
level notify( var_0 );
|
|
|
|
if ( isalive( self ) )
|
|
self notify( "gat her_delay_finished" + var_0 + var_1 );
|
|
}
|
|
|
|
gather_delay( var_0, var_1 )
|
|
{
|
|
thread gather_delay_proc( var_0, var_1 );
|
|
self waittill( "gather_delay_finished" + var_0 + var_1 );
|
|
}
|
|
|
|
death_waiter( var_0 )
|
|
{
|
|
self waittill( "death" );
|
|
level notify( var_0 );
|
|
}
|
|
|
|
getchar( var_0 )
|
|
{
|
|
if ( var_0 == 0 )
|
|
return "0";
|
|
|
|
if ( var_0 == 1 )
|
|
return "1";
|
|
|
|
if ( var_0 == 2 )
|
|
return "2";
|
|
|
|
if ( var_0 == 3 )
|
|
return "3";
|
|
|
|
if ( var_0 == 4 )
|
|
return "4";
|
|
|
|
if ( var_0 == 5 )
|
|
return "5";
|
|
|
|
if ( var_0 == 6 )
|
|
return "6";
|
|
|
|
if ( var_0 == 7 )
|
|
return "7";
|
|
|
|
if ( var_0 == 8 )
|
|
return "8";
|
|
|
|
if ( var_0 == 9 )
|
|
return "9";
|
|
}
|
|
|
|
getlinks_array( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
var_4 = var_0[var_3];
|
|
var_5 = var_4.script_linkname;
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_1[var_5] ) )
|
|
continue;
|
|
|
|
var_2[var_2.size] = var_4;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
array_merge_links( var_0, var_1 )
|
|
{
|
|
if ( !var_0.size )
|
|
return var_1;
|
|
|
|
if ( !var_1.size )
|
|
return var_0;
|
|
|
|
var_2 = [];
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
var_4 = var_0[var_3];
|
|
var_2[var_4.script_linkname] = 1;
|
|
}
|
|
|
|
for ( var_3 = 0; var_3 < var_1.size; var_3++ )
|
|
{
|
|
var_4 = var_1[var_3];
|
|
|
|
if ( isdefined( var_2[var_4.script_linkname] ) )
|
|
continue;
|
|
|
|
var_2[var_4.script_linkname] = 1;
|
|
var_0[var_0.size] = var_4;
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
array_merge( var_0, var_1 )
|
|
{
|
|
if ( var_0.size == 0 )
|
|
return var_1;
|
|
|
|
if ( var_1.size == 0 )
|
|
return var_0;
|
|
|
|
var_2 = var_0;
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
var_5 = 0;
|
|
|
|
foreach ( var_7 in var_0 )
|
|
{
|
|
if ( var_7 == var_4 )
|
|
{
|
|
var_5 = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( var_5 )
|
|
continue;
|
|
else
|
|
var_2[var_2.size] = var_4;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
array_exclude( var_0, var_1 )
|
|
{
|
|
var_2 = var_0;
|
|
|
|
for ( var_3 = 0; var_3 < var_1.size; var_3++ )
|
|
{
|
|
if ( is_in_array( var_0, var_1[var_3] ) )
|
|
var_2 = common_scripts\utility::array_remove( var_2, var_1[var_3] );
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
array_compare( var_0, var_1 )
|
|
{
|
|
if ( var_0.size != var_1.size )
|
|
return 0;
|
|
|
|
foreach ( var_5, var_3 in var_0 )
|
|
{
|
|
if ( !isdefined( var_1[var_5] ) )
|
|
return 0;
|
|
|
|
var_4 = var_1[var_5];
|
|
|
|
if ( var_4 != var_3 )
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
getlinkedvehiclenodes()
|
|
{
|
|
var_0 = [];
|
|
|
|
if ( isdefined( self.script_linkto ) )
|
|
{
|
|
var_1 = common_scripts\utility::get_links();
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
var_4 = getvehiclenodearray( var_3, "script_linkname" );
|
|
var_0 = common_scripts\utility::array_combine( var_0, var_4 );
|
|
}
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
draw_line( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
for (;;)
|
|
wait 0.05;
|
|
}
|
|
|
|
draw_line_to_ent_for_time( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_5 = gettime() + var_5 * 1000;
|
|
|
|
while ( gettime() < var_5 )
|
|
{
|
|
wait 0.05;
|
|
|
|
if ( !isdefined( var_1 ) || !isdefined( var_1.origin ) )
|
|
return;
|
|
}
|
|
}
|
|
|
|
draw_line_from_ent_for_time( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
draw_line_to_ent_for_time( var_1, var_0, var_2, var_3, var_4, var_5 );
|
|
}
|
|
|
|
draw_line_from_ent_to_ent_for_time( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_0 endon( "death" );
|
|
var_1 endon( "death" );
|
|
var_5 = gettime() + var_5 * 1000;
|
|
|
|
while ( gettime() < var_5 )
|
|
wait 0.05;
|
|
}
|
|
|
|
draw_line_from_ent_to_ent_until_notify( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
var_0 endon( "death" );
|
|
var_1 endon( "death" );
|
|
var_5 endon( var_6 );
|
|
|
|
for (;;)
|
|
wait 0.05;
|
|
}
|
|
|
|
draw_line_until_notify( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
var_5 endon( var_6 );
|
|
|
|
for (;;)
|
|
common_scripts\utility::draw_line_for_time( var_0, var_1, var_2, var_3, var_4, 0.05 );
|
|
}
|
|
|
|
draw_line_from_ent_to_vec_for_time( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
var_6 = gettime() + var_6 * 1000;
|
|
var_1 = var_1 * var_2;
|
|
|
|
while ( gettime() < var_6 )
|
|
{
|
|
wait 0.05;
|
|
|
|
if ( !isdefined( var_0 ) || !isdefined( var_0.origin ) )
|
|
return;
|
|
}
|
|
}
|
|
|
|
draw_circle_until_notify( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
var_7 = 16;
|
|
var_8 = 360 / var_7;
|
|
var_9 = [];
|
|
|
|
for ( var_10 = 0; var_10 < var_7; var_10++ )
|
|
{
|
|
var_11 = var_8 * var_10;
|
|
var_12 = cos( var_11 ) * var_1;
|
|
var_13 = sin( var_11 ) * var_1;
|
|
var_14 = var_0[0] + var_12;
|
|
var_15 = var_0[1] + var_13;
|
|
var_16 = var_0[2];
|
|
var_9[var_9.size] = ( var_14, var_15, var_16 );
|
|
}
|
|
|
|
thread draw_circle_lines_until_notify( var_9, var_2, var_3, var_4, var_5, var_6 );
|
|
}
|
|
|
|
draw_circle_lines_until_notify( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
for ( var_6 = 0; var_6 < var_0.size; var_6++ )
|
|
{
|
|
var_7 = var_0[var_6];
|
|
|
|
if ( var_6 + 1 >= var_0.size )
|
|
var_8 = var_0[0];
|
|
else
|
|
var_8 = var_0[var_6 + 1];
|
|
|
|
thread draw_line_until_notify( var_7, var_8, var_1, var_2, var_3, var_4, var_5 );
|
|
}
|
|
}
|
|
|
|
clear_enemy_passthrough()
|
|
{
|
|
self notify( "enemy" );
|
|
self clearenemy();
|
|
}
|
|
|
|
battlechatter_off( var_0 )
|
|
{
|
|
level notify( "battlechatter_off_thread" );
|
|
animscripts\battlechatter::bcs_setup_chatter_toggle_array();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
set_battlechatter_variable( var_0, 0 );
|
|
var_1 = getaiarray( var_0 );
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_0 in anim.teams )
|
|
set_battlechatter_variable( var_0, 0 );
|
|
|
|
var_1 = getaiarray();
|
|
}
|
|
|
|
if ( !isdefined( anim.chatinitialized ) || !anim.chatinitialized )
|
|
return;
|
|
|
|
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
|
var_1[var_4].battlechatter = 0;
|
|
|
|
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
|
{
|
|
var_5 = var_1[var_4];
|
|
|
|
if ( !isalive( var_5 ) )
|
|
continue;
|
|
|
|
if ( !var_5.chatinitialized )
|
|
continue;
|
|
|
|
if ( !var_5.isspeaking )
|
|
continue;
|
|
|
|
var_5 maps\_utility_code::wait_until_done_speaking();
|
|
}
|
|
|
|
var_6 = gettime() - anim.lastteamspeaktime["allies"];
|
|
|
|
if ( var_6 < 1500 )
|
|
wait( var_6 / 1000 );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
level notify( var_0 + " done speaking" );
|
|
else
|
|
level notify( "done speaking" );
|
|
}
|
|
|
|
battlechatter_on( var_0 )
|
|
{
|
|
thread battlechatter_on_thread( var_0 );
|
|
}
|
|
|
|
battlechatter_on_thread( var_0 )
|
|
{
|
|
level endon( "battlechatter_off_thread" );
|
|
animscripts\battlechatter::bcs_setup_chatter_toggle_array();
|
|
|
|
while ( !isdefined( anim.chatinitialized ) )
|
|
wait 0.05;
|
|
|
|
common_scripts\utility::flag_set( "battlechatter_on_thread_waiting" );
|
|
wait 1.5;
|
|
common_scripts\utility::flag_clear( "battlechatter_on_thread_waiting" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
set_battlechatter_variable( var_0, 1 );
|
|
var_1 = getaiarray( var_0 );
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_0 in anim.teams )
|
|
set_battlechatter_variable( var_0, 1 );
|
|
|
|
var_1 = getaiarray();
|
|
}
|
|
|
|
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
|
var_1[var_4] set_battlechatter( 1 );
|
|
}
|
|
|
|
set_battlechatter( var_0 )
|
|
{
|
|
if ( !anim.chatinitialized )
|
|
return;
|
|
|
|
if ( self.type == "dog" )
|
|
return;
|
|
|
|
if ( var_0 )
|
|
{
|
|
if ( isdefined( self.script_bcdialog ) && !self.script_bcdialog )
|
|
self.battlechatter = 0;
|
|
else
|
|
self.battlechatter = 1;
|
|
}
|
|
else
|
|
{
|
|
self.battlechatter = 0;
|
|
|
|
if ( isdefined( self.isspeaking ) && self.isspeaking )
|
|
self waittill( "done speaking" );
|
|
}
|
|
}
|
|
|
|
set_team_bcvoice( var_0, var_1 )
|
|
{
|
|
if ( !anim.chatinitialized )
|
|
return;
|
|
|
|
var_2 = getarraykeys( anim.countryids );
|
|
var_3 = common_scripts\utility::array_contains( var_2, var_1 );
|
|
|
|
if ( !var_3 )
|
|
return;
|
|
|
|
var_4 = getaiarray( var_0 );
|
|
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
var_6 set_ai_bcvoice( var_1 );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
set_ai_bcvoice( var_0 )
|
|
{
|
|
if ( !anim.chatinitialized )
|
|
return;
|
|
|
|
var_1 = getarraykeys( anim.countryids );
|
|
var_2 = common_scripts\utility::array_contains( var_1, var_0 );
|
|
|
|
if ( !var_2 )
|
|
return;
|
|
|
|
if ( self.type == "dog" )
|
|
return;
|
|
|
|
if ( isdefined( self.isspeaking ) && self.isspeaking )
|
|
{
|
|
self waittill( "done speaking" );
|
|
wait 0.1;
|
|
}
|
|
|
|
animscripts\battlechatter_ai::removefromsystem();
|
|
waittillframeend;
|
|
self.voice = var_0;
|
|
animscripts\battlechatter_ai::addtosystem();
|
|
}
|
|
|
|
flavorbursts_on( var_0 )
|
|
{
|
|
thread set_flavorbursts_team_state( 1, var_0 );
|
|
}
|
|
|
|
flavorbursts_off( var_0 )
|
|
{
|
|
thread set_flavorbursts_team_state( 0, var_0 );
|
|
}
|
|
|
|
set_flavorbursts_team_state( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = "allies";
|
|
|
|
if ( !anim.chatinitialized )
|
|
return;
|
|
|
|
wait 1.5;
|
|
level.flavorbursts[var_1] = var_0;
|
|
var_2 = [];
|
|
var_2 = getaiarray( var_1 );
|
|
common_scripts\utility::array_thread( var_2, ::set_flavorbursts, var_0 );
|
|
}
|
|
|
|
set_flavorbursts( var_0 )
|
|
{
|
|
self.flavorbursts = var_0;
|
|
}
|
|
|
|
friendlyfire_warnings_off()
|
|
{
|
|
var_0 = getaiarray( "allies" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( isalive( var_2 ) )
|
|
var_2 set_friendlyfire_warnings( 0 );
|
|
}
|
|
|
|
level.friendlyfire_warnings = 0;
|
|
}
|
|
|
|
friendlyfire_warnings_on()
|
|
{
|
|
var_0 = getaiarray( "allies" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( isalive( var_2 ) )
|
|
var_2 set_friendlyfire_warnings( 1 );
|
|
}
|
|
|
|
level.friendlyfire_warnings = 1;
|
|
}
|
|
|
|
set_friendlyfire_warnings( var_0 )
|
|
{
|
|
if ( var_0 )
|
|
self.friendlyfire_warnings_disable = undefined;
|
|
else
|
|
self.friendlyfire_warnings_disable = 1;
|
|
}
|
|
|
|
get_obj_origin( var_0 )
|
|
{
|
|
var_1 = getentarray( "objective", "targetname" );
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
if ( var_1[var_2].script_noteworthy == var_0 )
|
|
return var_1[var_2].origin;
|
|
}
|
|
}
|
|
|
|
get_obj_event( var_0 )
|
|
{
|
|
var_1 = getentarray( "objective_event", "targetname" );
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
if ( var_1[var_2].script_noteworthy == var_0 )
|
|
return var_1[var_2];
|
|
}
|
|
}
|
|
|
|
waittill_objective_event()
|
|
{
|
|
maps\_utility_code::waittill_objective_event_proc( 1 );
|
|
}
|
|
|
|
waittill_objective_event_notrigger()
|
|
{
|
|
maps\_utility_code::waittill_objective_event_proc( 0 );
|
|
}
|
|
|
|
debugorigin()
|
|
{
|
|
self notify( "Debug origin" );
|
|
self endon( "Debug origin" );
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = anglestoforward( self.angles );
|
|
var_1 = var_0 * 30;
|
|
var_2 = var_0 * 20;
|
|
var_3 = anglestoright( self.angles );
|
|
var_4 = var_3 * -10;
|
|
var_3 = var_3 * 10;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
get_linked_structs()
|
|
{
|
|
var_0 = [];
|
|
|
|
if ( isdefined( self.script_linkto ) )
|
|
{
|
|
var_1 = common_scripts\utility::get_links();
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
var_3 = common_scripts\utility::getstruct( var_1[var_2], "script_linkname" );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_0[var_0.size] = var_3;
|
|
}
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
get_last_ent_in_chain( var_0 )
|
|
{
|
|
var_1 = self;
|
|
|
|
while ( isdefined( var_1.target ) )
|
|
{
|
|
wait 0.05;
|
|
|
|
if ( isdefined( var_1.target ) )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "vehiclenode":
|
|
var_1 = getvehiclenode( var_1.target, "targetname" );
|
|
break;
|
|
case "pathnode":
|
|
var_1 = getnode( var_1.target, "targetname" );
|
|
break;
|
|
case "ent":
|
|
var_1 = getent( var_1.target, "targetname" );
|
|
break;
|
|
case "struct":
|
|
var_1 = common_scripts\utility::getstruct( var_1.target, "targetname" );
|
|
break;
|
|
default:
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
var_2 = var_1;
|
|
return var_2;
|
|
}
|
|
|
|
player_seek( var_0 )
|
|
{
|
|
var_1 = spawn( "script_origin", level.player.origin );
|
|
var_1 linkto( level.player );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
thread timeout( var_0 );
|
|
|
|
self setgoalentity( var_1 );
|
|
|
|
if ( !isdefined( self.oldgoalradius ) )
|
|
self.oldgoalradius = self.goalradius;
|
|
|
|
self.goalradius = 300;
|
|
common_scripts\utility::waittill_any( "goal", "timeout" );
|
|
|
|
if ( isdefined( self.oldgoalradius ) )
|
|
{
|
|
self.goalradius = self.oldgoalradius;
|
|
self.oldgoalradius = undefined;
|
|
}
|
|
|
|
var_1 delete();
|
|
}
|
|
|
|
timeout( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
wait( var_0 );
|
|
self notify( "timeout" );
|
|
}
|
|
|
|
set_forcegoal()
|
|
{
|
|
if ( isdefined( self.set_forcedgoal ) )
|
|
return;
|
|
|
|
self.oldfightdist = self.pathenemyfightdist;
|
|
self.oldmaxdist = self.pathenemylookahead;
|
|
self.oldmaxsight = self.maxsightdistsqrd;
|
|
self.pathenemyfightdist = 8;
|
|
self.pathenemylookahead = 8;
|
|
self.maxsightdistsqrd = 1;
|
|
self.set_forcedgoal = 1;
|
|
}
|
|
|
|
unset_forcegoal()
|
|
{
|
|
if ( !isdefined( self.set_forcedgoal ) )
|
|
return;
|
|
|
|
self.pathenemyfightdist = self.oldfightdist;
|
|
self.pathenemylookahead = self.oldmaxdist;
|
|
self.maxsightdistsqrd = self.oldmaxsight;
|
|
self.set_forcedgoal = undefined;
|
|
}
|
|
|
|
array_removedead_keepkeys( var_0 )
|
|
{
|
|
var_1 = [];
|
|
var_2 = getarraykeys( var_0 );
|
|
|
|
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
|
|
{
|
|
var_4 = var_2[var_3];
|
|
|
|
if ( !isalive( var_0[var_4] ) )
|
|
continue;
|
|
|
|
var_1[var_4] = var_0[var_4];
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
array_removedead( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( !isalive( var_3 ) )
|
|
continue;
|
|
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
array_removedead_or_dying( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( !isalive( var_3 ) )
|
|
continue;
|
|
|
|
if ( var_3 doinglongdeath() )
|
|
continue;
|
|
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
array_remove_nokeys( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
if ( var_0[var_3] != var_1 )
|
|
var_2[var_2.size] = var_0[var_3];
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
array_remove_index( var_0, var_1 )
|
|
{
|
|
for ( var_2 = 0; var_2 < var_0.size - 1; var_2++ )
|
|
{
|
|
if ( var_2 == var_1 )
|
|
{
|
|
var_0[var_2] = var_0[var_2 + 1];
|
|
var_1++;
|
|
}
|
|
}
|
|
|
|
var_0[var_0.size - 1] = undefined;
|
|
return var_0;
|
|
}
|
|
|
|
array_notify( var_0, var_1, var_2 )
|
|
{
|
|
foreach ( var_5, var_4 in var_0 )
|
|
var_4 notify( var_1, var_2 );
|
|
}
|
|
|
|
struct_arrayspawn()
|
|
{
|
|
var_0 = spawnstruct();
|
|
var_0.array = [];
|
|
var_0.lastindex = 0;
|
|
return var_0;
|
|
}
|
|
|
|
structarray_add( var_0, var_1 )
|
|
{
|
|
var_0.array[var_0.lastindex] = var_1;
|
|
var_1.struct_array_index = var_0.lastindex;
|
|
var_0.lastindex++;
|
|
}
|
|
|
|
structarray_remove( var_0, var_1 )
|
|
{
|
|
structarray_swaptolast( var_0, var_1 );
|
|
var_0.array[var_0.lastindex - 1] = undefined;
|
|
var_0.lastindex--;
|
|
}
|
|
|
|
structarray_remove_index( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_0.array[var_0.lastindex - 1] ) )
|
|
{
|
|
var_0.array[var_1] = var_0.array[var_0.lastindex - 1];
|
|
var_0.array[var_1].struct_array_index = var_1;
|
|
var_0.array[var_0.lastindex - 1] = undefined;
|
|
var_0.lastindex = var_0.array.size;
|
|
}
|
|
else
|
|
{
|
|
var_0.array[var_1] = undefined;
|
|
structarray_remove_undefined( var_0 );
|
|
}
|
|
}
|
|
|
|
structarray_remove_undefined( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in var_0.array )
|
|
{
|
|
if ( !isdefined( var_3 ) )
|
|
continue;
|
|
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
|
|
var_0.array = var_1;
|
|
|
|
foreach ( var_6, var_3 in var_0.array )
|
|
var_3.struct_array_index = var_6;
|
|
|
|
var_0.lastindex = var_0.array.size;
|
|
}
|
|
|
|
structarray_swaptolast( var_0, var_1 )
|
|
{
|
|
var_0 maps\_utility_code::structarray_swap( var_0.array[var_0.lastindex - 1], var_1 );
|
|
}
|
|
|
|
structarray_shuffle( var_0, var_1 )
|
|
{
|
|
for ( var_2 = 0; var_2 < var_1; var_2++ )
|
|
var_0 maps\_utility_code::structarray_swap( var_0.array[var_2], var_0.array[randomint( var_0.lastindex )] );
|
|
}
|
|
|
|
get_use_key()
|
|
{
|
|
if ( level.console )
|
|
return " + usereload";
|
|
else
|
|
return " + activate";
|
|
}
|
|
|
|
custom_battlechatter( var_0 )
|
|
{
|
|
return animscripts\battlechatter_ai::custom_battlechatter_internal( var_0 );
|
|
}
|
|
|
|
get_stop_watch( var_0, var_1 )
|
|
{
|
|
var_2 = newhudelem();
|
|
|
|
if ( level.console )
|
|
{
|
|
var_2.x = 68;
|
|
var_2.y = 35;
|
|
}
|
|
else
|
|
{
|
|
var_2.x = 58;
|
|
var_2.y = 95;
|
|
}
|
|
|
|
var_2.alignx = "center";
|
|
var_2.aligny = "middle";
|
|
var_2.horzalign = "left";
|
|
var_2.vertalign = "middle";
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_3 = var_1;
|
|
else
|
|
var_3 = level.explosiveplanttime;
|
|
|
|
var_2 setclock( var_3, var_0, "hudStopwatch", 64, 64 );
|
|
return var_2;
|
|
}
|
|
|
|
objective_is_active( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
for ( var_2 = 0; var_2 < level.active_objective.size; var_2++ )
|
|
{
|
|
if ( level.active_objective[var_2] != var_0 )
|
|
continue;
|
|
|
|
var_1 = 1;
|
|
break;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
objective_is_inactive( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
for ( var_2 = 0; var_2 < level.inactive_objective.size; var_2++ )
|
|
{
|
|
if ( level.inactive_objective[var_2] != var_0 )
|
|
continue;
|
|
|
|
var_1 = 1;
|
|
break;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
set_objective_inactive( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
for ( var_2 = 0; var_2 < level.active_objective.size; var_2++ )
|
|
{
|
|
if ( level.active_objective[var_2] == var_0 )
|
|
continue;
|
|
|
|
var_1[var_1.size] = level.active_objective[var_2];
|
|
}
|
|
|
|
level.active_objective = var_1;
|
|
var_3 = 0;
|
|
|
|
for ( var_2 = 0; var_2 < level.inactive_objective.size; var_2++ )
|
|
{
|
|
if ( level.inactive_objective[var_2] != var_0 )
|
|
continue;
|
|
|
|
var_3 = 1;
|
|
}
|
|
|
|
if ( !var_3 )
|
|
level.inactive_objective[level.inactive_objective.size] = var_0;
|
|
}
|
|
|
|
set_objective_active( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
for ( var_2 = 0; var_2 < level.inactive_objective.size; var_2++ )
|
|
{
|
|
if ( level.inactive_objective[var_2] == var_0 )
|
|
continue;
|
|
|
|
var_1[var_1.size] = level.inactive_objective[var_2];
|
|
}
|
|
|
|
level.inactive_objective = var_1;
|
|
var_3 = 0;
|
|
|
|
for ( var_2 = 0; var_2 < level.active_objective.size; var_2++ )
|
|
{
|
|
if ( level.active_objective[var_2] != var_0 )
|
|
continue;
|
|
|
|
var_3 = 1;
|
|
}
|
|
|
|
if ( !var_3 )
|
|
level.active_objective[level.active_objective.size] = var_0;
|
|
}
|
|
|
|
missionfailedwrapper()
|
|
{
|
|
if ( level.missionfailed )
|
|
return;
|
|
|
|
if ( isdefined( level.nextmission ) )
|
|
return;
|
|
|
|
level.missionfailed = 1;
|
|
common_scripts\utility::flag_set( "missionfailed" );
|
|
|
|
if ( arcademode() )
|
|
return;
|
|
|
|
if ( getdvar( "failure_disabled" ) == "1" )
|
|
return;
|
|
|
|
if ( isdefined( level.mission_fail_func ) )
|
|
{
|
|
thread [[ level.mission_fail_func ]]();
|
|
return;
|
|
}
|
|
|
|
maps\_utility_code::mission_recon( 0 );
|
|
missionfailed();
|
|
}
|
|
|
|
set_mission_failed_override( var_0 )
|
|
{
|
|
level.mission_fail_func = var_0;
|
|
}
|
|
|
|
script_delay()
|
|
{
|
|
if ( isdefined( self.script_delay ) )
|
|
{
|
|
wait( self.script_delay );
|
|
return 1;
|
|
}
|
|
else if ( isdefined( self.script_delay_min ) && isdefined( self.script_delay_max ) )
|
|
{
|
|
wait( randomfloatrange( self.script_delay_min, self.script_delay_max ) );
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
script_wait()
|
|
{
|
|
var_0 = gettime();
|
|
|
|
if ( isdefined( self.script_wait ) )
|
|
{
|
|
wait( self.script_wait );
|
|
|
|
if ( isdefined( self.script_wait_add ) )
|
|
self.script_wait = self.script_wait + self.script_wait_add;
|
|
}
|
|
else if ( isdefined( self.script_wait_min ) && isdefined( self.script_wait_max ) )
|
|
{
|
|
wait( randomfloatrange( self.script_wait_min, self.script_wait_max ) );
|
|
|
|
if ( isdefined( self.script_wait_add ) )
|
|
{
|
|
self.script_wait_min = self.script_wait_min + self.script_wait_add;
|
|
self.script_wait_max = self.script_wait_max + self.script_wait_add;
|
|
}
|
|
}
|
|
|
|
return gettime() - var_0;
|
|
}
|
|
|
|
guy_enter_vehicle( var_0 )
|
|
{
|
|
maps\_vehicle_aianim::guy_enter( var_0 );
|
|
}
|
|
|
|
guy_runtovehicle_load( var_0, var_1 )
|
|
{
|
|
maps\_vehicle_aianim::guy_runtovehicle( var_0, var_1 );
|
|
}
|
|
|
|
get_force_color_guys( var_0, var_1 )
|
|
{
|
|
var_2 = getaiarray( var_0 );
|
|
var_3 = [];
|
|
|
|
for ( var_4 = 0; var_4 < var_2.size; var_4++ )
|
|
{
|
|
var_5 = var_2[var_4];
|
|
|
|
if ( !isdefined( var_5.script_forcecolor ) )
|
|
continue;
|
|
|
|
if ( var_5.script_forcecolor != var_1 )
|
|
continue;
|
|
|
|
var_3[var_3.size] = var_5;
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
get_all_force_color_friendlies()
|
|
{
|
|
var_0 = getaiarray( "allies" );
|
|
var_1 = [];
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
var_3 = var_0[var_2];
|
|
|
|
if ( !isdefined( var_3.script_forcecolor ) )
|
|
continue;
|
|
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
get_all_target_ents( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = self.target;
|
|
|
|
var_1 = [];
|
|
var_2 = getentarray( var_0, "targetname" );
|
|
var_1 = common_scripts\utility::array_combine( var_1, var_2 );
|
|
var_2 = getnodearray( var_0, "targetname" );
|
|
var_1 = common_scripts\utility::array_combine( var_1, var_2 );
|
|
var_2 = common_scripts\utility::getstructarray( var_0, "targetname" );
|
|
var_1 = common_scripts\utility::array_combine( var_1, var_2 );
|
|
var_2 = getvehiclenodearray( var_0, "targetname" );
|
|
var_1 = common_scripts\utility::array_combine( var_1, var_2 );
|
|
return var_1;
|
|
}
|
|
|
|
enable_ai_color()
|
|
{
|
|
if ( isdefined( self.script_forcecolor ) )
|
|
return;
|
|
|
|
if ( !isdefined( self.old_forcecolor ) )
|
|
return;
|
|
|
|
set_force_color( self.old_forcecolor );
|
|
self.old_forcecolor = undefined;
|
|
}
|
|
|
|
enable_ai_color_dontmove()
|
|
{
|
|
self.dontcolormove = 1;
|
|
enable_ai_color();
|
|
}
|
|
|
|
disable_ai_color()
|
|
{
|
|
if ( isdefined( self.new_force_color_being_set ) )
|
|
{
|
|
self endon( "death" );
|
|
self waittill( "done_setting_new_color" );
|
|
}
|
|
|
|
self clearfixednodesafevolume();
|
|
|
|
if ( !isdefined( self.script_forcecolor ) )
|
|
return;
|
|
|
|
self.old_forcecolor = self.script_forcecolor;
|
|
level.arrays_of_colorforced_ai[maps\_colors::get_team()][self.script_forcecolor] = common_scripts\utility::array_remove( level.arrays_of_colorforced_ai[maps\_colors::get_team()][self.script_forcecolor], self );
|
|
maps\_colors::left_color_node();
|
|
self.script_forcecolor = undefined;
|
|
self.currentcolorcode = undefined;
|
|
}
|
|
|
|
clear_force_color()
|
|
{
|
|
disable_ai_color();
|
|
}
|
|
|
|
check_force_color( var_0 )
|
|
{
|
|
var_1 = level.colorchecklist[tolower( var_0 )];
|
|
|
|
if ( isdefined( self.script_forcecolor ) && var_1 == self.script_forcecolor )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
get_force_color()
|
|
{
|
|
var_0 = self.script_forcecolor;
|
|
return var_0;
|
|
}
|
|
|
|
shortencolor( var_0 )
|
|
{
|
|
return level.colorchecklist[tolower( var_0 )];
|
|
}
|
|
|
|
set_force_color( var_0 )
|
|
{
|
|
var_1 = shortencolor( var_0 );
|
|
|
|
if ( !isai( self ) )
|
|
{
|
|
set_force_color_spawner( var_1 );
|
|
return;
|
|
}
|
|
|
|
if ( self.team == "allies" )
|
|
{
|
|
self.fixednode = 1;
|
|
self.fixednodesaferadius = 64;
|
|
self.pathenemyfightdist = 0;
|
|
self.pathenemylookahead = 0;
|
|
}
|
|
|
|
self.script_color_axis = undefined;
|
|
self.script_color_allies = undefined;
|
|
self.old_forcecolor = undefined;
|
|
var_2 = maps\_colors::get_team();
|
|
|
|
if ( isdefined( self.script_forcecolor ) )
|
|
level.arrays_of_colorforced_ai[var_2][self.script_forcecolor] = common_scripts\utility::array_remove( level.arrays_of_colorforced_ai[var_2][self.script_forcecolor], self );
|
|
|
|
self.script_forcecolor = var_1;
|
|
level.arrays_of_colorforced_ai[var_2][var_1] = array_removedead( level.arrays_of_colorforced_ai[var_2][var_1] );
|
|
level.arrays_of_colorforced_ai[var_2][self.script_forcecolor] = common_scripts\utility::array_add( level.arrays_of_colorforced_ai[var_2][self.script_forcecolor], self );
|
|
thread maps\_utility_code::new_color_being_set( var_1 );
|
|
}
|
|
|
|
set_force_color_spawner( var_0 )
|
|
{
|
|
self.script_forcecolor = var_0;
|
|
self.old_forcecolor = undefined;
|
|
}
|
|
|
|
issue_color_orders( var_0, var_1 )
|
|
{
|
|
var_2 = strtok( var_0, " " );
|
|
var_3 = [];
|
|
var_4 = [];
|
|
|
|
for ( var_5 = 0; var_5 < var_2.size; var_5++ )
|
|
{
|
|
var_6 = undefined;
|
|
|
|
if ( issubstr( var_2[var_5], "r" ) )
|
|
var_6 = "r";
|
|
else if ( issubstr( var_2[var_5], "b" ) )
|
|
var_6 = "b";
|
|
else if ( issubstr( var_2[var_5], "y" ) )
|
|
var_6 = "y";
|
|
else if ( issubstr( var_2[var_5], "c" ) )
|
|
var_6 = "c";
|
|
else if ( issubstr( var_2[var_5], "g" ) )
|
|
var_6 = "g";
|
|
else if ( issubstr( var_2[var_5], "p" ) )
|
|
var_6 = "p";
|
|
else if ( issubstr( var_2[var_5], "o" ) )
|
|
var_6 = "o";
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
var_4[var_6] = var_2[var_5];
|
|
var_3[var_3.size] = var_6;
|
|
}
|
|
|
|
for ( var_5 = 0; var_5 < var_2.size; var_5++ )
|
|
{
|
|
level.arrays_of_colorcoded_spawners[var_1][var_2[var_5]] = common_scripts\utility::array_removeundefined( level.arrays_of_colorcoded_spawners[var_1][var_2[var_5]] );
|
|
|
|
for ( var_7 = 0; var_7 < level.arrays_of_colorcoded_spawners[var_1][var_2[var_5]].size; var_7++ )
|
|
level.arrays_of_colorcoded_spawners[var_1][var_2[var_5]][var_7].currentcolorcode = var_2[var_5];
|
|
}
|
|
|
|
for ( var_5 = 0; var_5 < var_3.size; var_5++ )
|
|
{
|
|
level.arrays_of_colorforced_ai[var_1][var_3[var_5]] = array_removedead( level.arrays_of_colorforced_ai[var_1][var_3[var_5]] );
|
|
level.currentcolorforced[var_1][var_3[var_5]] = var_4[var_3[var_5]];
|
|
}
|
|
|
|
for ( var_5 = 0; var_5 < var_2.size; var_5++ )
|
|
thread maps\_colors::issue_color_order_to_ai( var_2[var_5], var_3[var_5], var_1 );
|
|
}
|
|
|
|
flashrumbleloop( var_0 )
|
|
{
|
|
var_1 = gettime() + var_0 * 1000;
|
|
|
|
while ( gettime() < var_1 )
|
|
{
|
|
self playrumbleonentity( "damage_heavy" );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
flashmonitorenablehealthshield( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "flashed" );
|
|
wait 0.2;
|
|
self enablehealthshield( 0 );
|
|
wait( var_0 + 2 );
|
|
self enablehealthshield( 1 );
|
|
}
|
|
|
|
ninebanghandler( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = [ 0.8, 0.7, 0.7, 0.6 ];
|
|
var_6 = [ 1.0, 0.8, 0.6, 0.6 ];
|
|
|
|
foreach ( var_12, var_8 in var_6 )
|
|
{
|
|
var_9 = ( var_1 - 0.85 ) / 0.15;
|
|
|
|
if ( var_9 > var_2 )
|
|
var_2 = var_9;
|
|
|
|
if ( var_2 < 0.25 )
|
|
var_2 = 0.25;
|
|
|
|
var_10 = 0.3;
|
|
|
|
if ( var_1 > 1 - var_10 )
|
|
var_1 = 1.0;
|
|
else
|
|
var_1 = var_1 / ( 1 - var_10 );
|
|
|
|
if ( var_4 != self.team )
|
|
var_11 = var_1 * var_2 * 6.0;
|
|
else
|
|
var_11 = var_1 * var_2 * 3.0;
|
|
|
|
if ( var_11 < 0.25 )
|
|
continue;
|
|
|
|
var_11 = var_8 * var_11;
|
|
|
|
if ( isdefined( self.maxflashedseconds ) && var_11 > self.maxflashedseconds )
|
|
var_11 = self.maxflashedseconds;
|
|
|
|
self.flashingteam = var_4;
|
|
self notify( "flashed" );
|
|
self.flashendtime = gettime() + var_11 * 1000;
|
|
self shellshock( "flashbang", var_11 );
|
|
common_scripts\utility::flag_set( "player_flashed" );
|
|
|
|
if ( var_1 * var_2 > 0.5 )
|
|
thread flashmonitorenablehealthshield( var_11 );
|
|
|
|
wait( var_5[var_12] );
|
|
}
|
|
|
|
thread maps\_utility_code::unflash_flag( 0.05 );
|
|
}
|
|
|
|
flashmonitor()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "flashbang", var_0, var_1, var_2, var_3, var_4 );
|
|
|
|
if ( "1" == getdvar( "noflash" ) )
|
|
continue;
|
|
|
|
if ( is_player_down( self ) )
|
|
continue;
|
|
|
|
if ( isdefined( self.threw_ninebang ) )
|
|
{
|
|
var_5 = 0.8;
|
|
var_6 = 1.0 - var_5;
|
|
self.threw_ninebang = undefined;
|
|
|
|
if ( var_1 < var_6 )
|
|
continue;
|
|
|
|
var_1 = ( var_1 - var_6 ) / var_5;
|
|
}
|
|
|
|
var_7 = ( var_1 - 0.85 ) / 0.15;
|
|
|
|
if ( var_7 > var_2 )
|
|
var_2 = var_7;
|
|
|
|
if ( var_2 < 0.25 )
|
|
var_2 = 0.25;
|
|
|
|
var_8 = 0.3;
|
|
|
|
if ( var_1 > 1 - var_8 )
|
|
var_1 = 1.0;
|
|
else
|
|
var_1 = var_1 / ( 1 - var_8 );
|
|
|
|
if ( var_4 != self.team )
|
|
var_9 = var_1 * var_2 * 6.0;
|
|
else
|
|
var_9 = var_1 * var_2 * 3.0;
|
|
|
|
if ( var_9 < 0.25 )
|
|
continue;
|
|
|
|
if ( isdefined( self.maxflashedseconds ) && var_9 > self.maxflashedseconds )
|
|
var_9 = self.maxflashedseconds;
|
|
|
|
self.flashingteam = var_4;
|
|
self notify( "flashed" );
|
|
self.flashendtime = gettime() + var_9 * 1000;
|
|
self shellshock( "flashbang", var_9 );
|
|
common_scripts\utility::flag_set( "player_flashed" );
|
|
thread maps\_utility_code::unflash_flag( var_9 );
|
|
|
|
if ( var_1 * var_2 > 0.5 )
|
|
thread flashmonitorenablehealthshield( var_9 );
|
|
|
|
if ( var_9 > 2 )
|
|
thread flashrumbleloop( 0.75 );
|
|
else
|
|
thread flashrumbleloop( 0.25 );
|
|
|
|
if ( var_4 != "allies" )
|
|
thread flashnearbyallies( var_9, var_4 );
|
|
}
|
|
}
|
|
|
|
flashnearbyallies( var_0, var_1 )
|
|
{
|
|
wait 0.05;
|
|
var_2 = getaiarray( "allies" );
|
|
|
|
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
|
|
{
|
|
if ( distancesquared( var_2[var_3].origin, self.origin ) < 122500 )
|
|
{
|
|
var_4 = var_0 + randomfloatrange( -1000, 1500 );
|
|
|
|
if ( var_4 > 4.5 )
|
|
var_4 = 4.5;
|
|
else if ( var_4 < 0.25 )
|
|
continue;
|
|
|
|
var_5 = gettime() + var_4 * 1000;
|
|
|
|
if ( !isdefined( var_2[var_3].flashendtime ) || var_2[var_3].flashendtime < var_5 )
|
|
{
|
|
var_2[var_3].flashingteam = var_1;
|
|
var_2[var_3] flashbangstart( var_4 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
restarteffect()
|
|
{
|
|
common_scripts\_createfx::restart_fx_looper();
|
|
}
|
|
|
|
pauseexploder( var_0 )
|
|
{
|
|
var_0 = var_0 + "";
|
|
|
|
if ( isdefined( level.createfxexploders ) )
|
|
{
|
|
var_1 = level.createfxexploders[var_0];
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
foreach ( var_3 in var_1 )
|
|
var_3 common_scripts\utility::pauseeffect();
|
|
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_6 in level.createfxent )
|
|
{
|
|
if ( !isdefined( var_6.v["exploder"] ) )
|
|
continue;
|
|
|
|
if ( var_6.v["exploder"] != var_0 )
|
|
continue;
|
|
|
|
var_6 common_scripts\utility::pauseeffect();
|
|
}
|
|
}
|
|
}
|
|
|
|
restartexploder( var_0 )
|
|
{
|
|
var_0 = var_0 + "";
|
|
|
|
if ( isdefined( level.createfxexploders ) )
|
|
{
|
|
var_1 = level.createfxexploders[var_0];
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
foreach ( var_3 in var_1 )
|
|
var_3 restarteffect();
|
|
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_6 in level.createfxent )
|
|
{
|
|
if ( !isdefined( var_6.v["exploder"] ) )
|
|
continue;
|
|
|
|
if ( var_6.v["exploder"] != var_0 )
|
|
continue;
|
|
|
|
var_6 restarteffect();
|
|
}
|
|
}
|
|
}
|
|
|
|
getfxarraybyid( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
if ( isdefined( level.createfxbyfxid ) )
|
|
{
|
|
var_2 = level.createfxbyfxid[var_0];
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_1 = var_2;
|
|
}
|
|
else
|
|
{
|
|
for ( var_3 = 0; var_3 < level.createfxent.size; var_3++ )
|
|
{
|
|
if ( level.createfxent[var_3].v["fxid"] == var_0 )
|
|
var_1[var_1.size] = level.createfxent[var_3];
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
ignoreallenemies( var_0 )
|
|
{
|
|
self notify( "ignoreAllEnemies_threaded" );
|
|
self endon( "ignoreAllEnemies_threaded" );
|
|
|
|
if ( var_0 )
|
|
{
|
|
self.old_threat_bias_group = self getthreatbiasgroup();
|
|
var_1 = undefined;
|
|
createthreatbiasgroup( "ignore_everybody" );
|
|
self setthreatbiasgroup( "ignore_everybody" );
|
|
var_2 = [];
|
|
var_2["axis"] = "allies";
|
|
var_2["allies"] = "axis";
|
|
var_3 = getaiarray( var_2[self.team] );
|
|
var_4 = [];
|
|
|
|
for ( var_5 = 0; var_5 < var_3.size; var_5++ )
|
|
var_4[var_3[var_5] getthreatbiasgroup()] = 1;
|
|
|
|
var_6 = getarraykeys( var_4 );
|
|
|
|
for ( var_5 = 0; var_5 < var_6.size; var_5++ )
|
|
setthreatbias( var_6[var_5], "ignore_everybody", 0 );
|
|
}
|
|
else
|
|
{
|
|
var_1 = undefined;
|
|
|
|
if ( self.old_threat_bias_group != "" )
|
|
self setthreatbiasgroup( self.old_threat_bias_group );
|
|
|
|
self.old_threat_bias_group = undefined;
|
|
}
|
|
}
|
|
|
|
vehicle_detachfrompath()
|
|
{
|
|
maps\_vehicle_code::vehicle_pathdetach();
|
|
}
|
|
|
|
vehicle_resumepath()
|
|
{
|
|
thread maps\_vehicle_code::vehicle_resumepathvehicle();
|
|
}
|
|
|
|
vehicle_land( var_0 )
|
|
{
|
|
maps\_vehicle_code::vehicle_landvehicle( var_0 );
|
|
}
|
|
|
|
vehicle_liftoff( var_0 )
|
|
{
|
|
maps\_vehicle_code::vehicle_liftoffvehicle( var_0 );
|
|
}
|
|
|
|
vehicle_dynamicpath( var_0, var_1 )
|
|
{
|
|
maps\_vehicle::vehicle_paths( var_0, var_1 );
|
|
}
|
|
|
|
groundpos( var_0 )
|
|
{
|
|
return bullettrace( var_0, var_0 + ( 0, 0, -100000 ), 0, self )["position"];
|
|
}
|
|
|
|
change_player_health_packets( var_0 )
|
|
{
|
|
self.player_health_packets = self.player_health_packets + var_0;
|
|
self notify( "update_health_packets" );
|
|
|
|
if ( self.player_health_packets >= 3 )
|
|
self.player_health_packets = 3;
|
|
}
|
|
|
|
getvehiclespawner( var_0 )
|
|
{
|
|
var_1 = getvehiclespawnerarray( var_0 );
|
|
return var_1[0];
|
|
}
|
|
|
|
getvehiclespawnerarray( var_0 )
|
|
{
|
|
return maps\_vehicle_code::_getvehiclespawnerarray( var_0 );
|
|
}
|
|
|
|
describe_start( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
add_start_assert();
|
|
|
|
if ( !isdefined( level.start_description ) )
|
|
level.start_description = [];
|
|
|
|
level.start_description[var_0] = add_start_construct( var_0, var_1, var_2, var_3, var_4, var_5 );
|
|
}
|
|
|
|
add_start( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
add_start_assert();
|
|
var_0 = tolower( var_0 );
|
|
|
|
if ( isdefined( level.start_description ) && isdefined( level.start_description[var_0] ) )
|
|
var_7 = level.start_description[var_0];
|
|
else
|
|
var_7 = add_start_construct( var_0, var_1, var_2, var_3, var_4, var_5 );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
{
|
|
if ( !isdefined( level.start_description ) )
|
|
{
|
|
|
|
}
|
|
else if ( !issubstr( var_0, "no_game" ) )
|
|
{
|
|
if ( !isdefined( level.start_description[var_0] ) )
|
|
return;
|
|
}
|
|
}
|
|
|
|
level.start_functions[level.start_functions.size] = var_7;
|
|
level.start_arrays[var_0] = var_7;
|
|
}
|
|
|
|
is_no_game_start()
|
|
{
|
|
return issubstr( level.start_point, "no_game" );
|
|
}
|
|
|
|
add_start_construct( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = [];
|
|
var_6["name"] = var_0;
|
|
var_6["start_func"] = var_1;
|
|
var_6["start_loc_string"] = var_2;
|
|
var_6["logic_func"] = var_3;
|
|
var_6["transient"] = var_4;
|
|
var_6["catchup_function"] = var_5;
|
|
return var_6;
|
|
}
|
|
|
|
add_start_assert()
|
|
{
|
|
if ( !isdefined( level.start_functions ) )
|
|
level.start_functions = [];
|
|
}
|
|
|
|
level_has_start_points()
|
|
{
|
|
return level.start_functions.size > 1;
|
|
}
|
|
|
|
set_default_start( var_0 )
|
|
{
|
|
level.default_start_override = var_0;
|
|
}
|
|
|
|
default_start( var_0 )
|
|
{
|
|
level.default_start = var_0;
|
|
}
|
|
|
|
linetime( var_0, var_1, var_2, var_3 )
|
|
{
|
|
thread maps\_utility_code::linetime_proc( var_0, var_1, var_2, var_3 );
|
|
}
|
|
|
|
within_fov_2d( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = vectornormalize( ( var_2[0], var_2[1], 0 ) - ( var_0[0], var_0[1], 0 ) );
|
|
var_5 = anglestoforward( ( 0, var_1[1], 0 ) );
|
|
return vectordot( var_5, var_4 ) >= var_3;
|
|
}
|
|
|
|
get_dot( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = vectornormalize( var_2 - var_0 );
|
|
var_4 = anglestoforward( var_1 );
|
|
var_5 = vectordot( var_4, var_3 );
|
|
return var_5;
|
|
}
|
|
|
|
within_fov_of_players( var_0, var_1 )
|
|
{
|
|
var_2 = undefined;
|
|
|
|
for ( var_3 = 0; var_3 < level.players.size; var_3++ )
|
|
{
|
|
var_4 = level.players[var_3] geteye();
|
|
var_2 = common_scripts\utility::within_fov( var_4, level.players[var_3] getplayerangles(), var_0, var_1 );
|
|
|
|
if ( !var_2 )
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
wait_for_buffer_time_to_pass( var_0, var_1 )
|
|
{
|
|
var_2 = var_1 * 1000 - ( gettime() - var_0 );
|
|
var_2 = var_2 * 0.001;
|
|
|
|
if ( var_2 > 0 )
|
|
wait( var_2 );
|
|
}
|
|
|
|
bcs_scripted_dialogue_start()
|
|
{
|
|
anim.scripteddialoguestarttime = gettime();
|
|
}
|
|
|
|
dialogue_queue( var_0 )
|
|
{
|
|
bcs_scripted_dialogue_start();
|
|
maps\_anim::anim_single_queue( self, var_0 );
|
|
}
|
|
|
|
generic_dialogue_queue( var_0, var_1 )
|
|
{
|
|
bcs_scripted_dialogue_start();
|
|
maps\_anim::anim_generic_queue( self, var_0, undefined, undefined, var_1 );
|
|
}
|
|
|
|
radio_dialogue( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( level.player_radio_emitter ) )
|
|
{
|
|
var_2 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_2 linkto( level.player, "", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
level.player_radio_emitter = var_2;
|
|
}
|
|
|
|
bcs_scripted_dialogue_start();
|
|
var_3 = 0;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_3 = level.player_radio_emitter function_stack( ::play_sound_on_tag, level.scr_radio[var_0], undefined, 1 );
|
|
else
|
|
var_3 = level.player_radio_emitter function_stack_timeout( var_1, ::play_sound_on_tag, level.scr_radio[var_0], undefined, 1 );
|
|
|
|
return var_3;
|
|
}
|
|
|
|
radio_dialogue_overlap( var_0 )
|
|
{
|
|
level.player_radio_emitter play_sound_on_tag( level.scr_radio[var_0], undefined, 1 );
|
|
}
|
|
|
|
radio_dialogue_stop()
|
|
{
|
|
if ( !isdefined( level.player_radio_emitter ) )
|
|
return;
|
|
|
|
level.player_radio_emitter delete();
|
|
}
|
|
|
|
radio_dialogue_clear_stack()
|
|
{
|
|
if ( !isdefined( level.player_radio_emitter ) )
|
|
return;
|
|
|
|
level.player_radio_emitter function_stack_clear();
|
|
}
|
|
|
|
radio_dialogue_interupt( var_0 )
|
|
{
|
|
if ( !isdefined( level.player_radio_emitter ) )
|
|
{
|
|
var_1 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_1 linkto( level.player, "", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
level.player_radio_emitter = var_1;
|
|
}
|
|
|
|
level.player_radio_emitter play_sound_on_tag( level.scr_radio[var_0], undefined, 1 );
|
|
}
|
|
|
|
radio_dialogue_safe( var_0 )
|
|
{
|
|
return radio_dialogue( var_0, 0.05 );
|
|
}
|
|
|
|
smart_radio_dialogue( var_0, var_1 )
|
|
{
|
|
maps\_utility_code::add_to_radio( var_0 );
|
|
radio_dialogue( var_0, var_1 );
|
|
}
|
|
|
|
smart_radio_dialogue_interrupt( var_0 )
|
|
{
|
|
maps\_utility_code::add_to_radio( var_0 );
|
|
radio_dialogue_stop();
|
|
radio_dialogue_interupt( var_0 );
|
|
}
|
|
|
|
smart_radio_dialogue_overlap( var_0 )
|
|
{
|
|
maps\_utility_code::add_to_radio( var_0 );
|
|
radio_dialogue_overlap( var_0 );
|
|
}
|
|
|
|
smart_dialogue( var_0 )
|
|
{
|
|
maps\_utility_code::add_to_dialogue( var_0 );
|
|
dialogue_queue( var_0 );
|
|
}
|
|
|
|
smart_dialogue_generic( var_0 )
|
|
{
|
|
maps\_utility_code::add_to_dialogue_generic( var_0 );
|
|
generic_dialogue_queue( var_0 );
|
|
}
|
|
|
|
radio_dialogue_queue( var_0 )
|
|
{
|
|
radio_dialogue( var_0 );
|
|
}
|
|
|
|
hint_create( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = spawnstruct();
|
|
|
|
if ( isdefined( var_1 ) && var_1 == 1 )
|
|
var_3.bg = newhudelem();
|
|
|
|
var_3.elm = newhudelem();
|
|
var_3 hint_position_internal( var_2 );
|
|
var_3.elm settext( var_0 );
|
|
return var_3;
|
|
}
|
|
|
|
hint_delete()
|
|
{
|
|
self notify( "death" );
|
|
|
|
if ( isdefined( self.elm ) )
|
|
self.elm destroy();
|
|
|
|
if ( isdefined( self.bg ) )
|
|
self.bg destroy();
|
|
}
|
|
|
|
hint_position_internal( var_0 )
|
|
{
|
|
if ( level.console )
|
|
self.elm.fontscale = 2;
|
|
else
|
|
self.elm.fontscale = 1.6;
|
|
|
|
self.elm.x = 0;
|
|
self.elm.y = -40;
|
|
self.elm.alignx = "center";
|
|
self.elm.aligny = "bottom";
|
|
self.elm.horzalign = "center";
|
|
self.elm.vertalign = "middle";
|
|
self.elm.sort = 1;
|
|
self.elm.alpha = 0.8;
|
|
|
|
if ( !isdefined( self.bg ) )
|
|
return;
|
|
|
|
self.bg.x = 0;
|
|
self.bg.y = -40;
|
|
self.bg.alignx = "center";
|
|
self.bg.aligny = "middle";
|
|
self.bg.horzalign = "center";
|
|
self.bg.vertalign = "middle";
|
|
self.bg.sort = -1;
|
|
|
|
if ( level.console )
|
|
self.bg setshader( "popmenu_bg", 650, 52 );
|
|
else
|
|
self.bg setshader( "popmenu_bg", 650, 42 );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 0.5;
|
|
|
|
self.bg.alpha = var_0;
|
|
}
|
|
|
|
string( var_0 )
|
|
{
|
|
return "" + var_0;
|
|
}
|
|
|
|
ignoreeachother( var_0, var_1 )
|
|
{
|
|
setignoremegroup( var_0, var_1 );
|
|
setignoremegroup( var_1, var_0 );
|
|
}
|
|
|
|
add_global_spawn_function( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = [];
|
|
var_5["function"] = var_1;
|
|
var_5["param1"] = var_2;
|
|
var_5["param2"] = var_3;
|
|
var_5["param3"] = var_4;
|
|
level.spawn_funcs[var_0][level.spawn_funcs[var_0].size] = var_5;
|
|
}
|
|
|
|
remove_global_spawn_function( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
|
|
for ( var_3 = 0; var_3 < level.spawn_funcs[var_0].size; var_3++ )
|
|
{
|
|
if ( level.spawn_funcs[var_0][var_3]["function"] != var_1 )
|
|
var_2[var_2.size] = level.spawn_funcs[var_0][var_3];
|
|
}
|
|
|
|
level.spawn_funcs[var_0] = var_2;
|
|
}
|
|
|
|
exists_global_spawn_function( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( level.spawn_funcs ) )
|
|
return 0;
|
|
|
|
for ( var_2 = 0; var_2 < level.spawn_funcs[var_0].size; var_2++ )
|
|
{
|
|
if ( level.spawn_funcs[var_0][var_2]["function"] == var_1 )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
remove_spawn_function( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in self.spawn_functions )
|
|
{
|
|
if ( var_3["function"] == var_0 )
|
|
continue;
|
|
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
|
|
self.spawn_functions = var_1;
|
|
}
|
|
|
|
add_spawn_function( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
foreach ( var_7 in self.spawn_functions )
|
|
{
|
|
if ( var_7["function"] == var_0 )
|
|
return;
|
|
}
|
|
|
|
var_9 = [];
|
|
var_9["function"] = var_0;
|
|
var_9["param1"] = var_1;
|
|
var_9["param2"] = var_2;
|
|
var_9["param3"] = var_3;
|
|
var_9["param4"] = var_4;
|
|
var_9["param5"] = var_5;
|
|
self.spawn_functions[self.spawn_functions.size] = var_9;
|
|
}
|
|
|
|
array_delete( var_0 )
|
|
{
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
var_0[var_1] delete();
|
|
}
|
|
|
|
array_kill( var_0 )
|
|
{
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
var_0[var_1] kill();
|
|
}
|
|
|
|
ignore_triggers( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self.ignoretriggers = 1;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
wait( var_0 );
|
|
else
|
|
wait 0.5;
|
|
|
|
self.ignoretriggers = 0;
|
|
}
|
|
|
|
activate_trigger_with_targetname( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
var_1 activate_trigger();
|
|
}
|
|
|
|
activate_trigger_with_noteworthy( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "script_noteworthy" );
|
|
var_1 activate_trigger();
|
|
}
|
|
|
|
disable_trigger_with_targetname( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
var_1 common_scripts\utility::trigger_off();
|
|
}
|
|
|
|
disable_trigger_with_noteworthy( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "script_noteworthy" );
|
|
var_1 common_scripts\utility::trigger_off();
|
|
}
|
|
|
|
enable_trigger_with_targetname( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "targetname" );
|
|
var_1 common_scripts\utility::trigger_on();
|
|
}
|
|
|
|
enable_trigger_with_noteworthy( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "script_noteworthy" );
|
|
var_1 common_scripts\utility::trigger_on();
|
|
}
|
|
|
|
is_hero()
|
|
{
|
|
return isdefined( level.hero_list[get_ai_number()] );
|
|
}
|
|
|
|
get_ai_number()
|
|
{
|
|
if ( !isdefined( self.unique_id ) )
|
|
set_ai_number();
|
|
|
|
return self.unique_id;
|
|
}
|
|
|
|
set_ai_number()
|
|
{
|
|
self.unique_id = "ai" + level.ai_number;
|
|
level.ai_number++;
|
|
}
|
|
|
|
make_hero()
|
|
{
|
|
level.hero_list[self.unique_id] = 1;
|
|
}
|
|
|
|
unmake_hero()
|
|
{
|
|
level.hero_list[self.unique_id] = undefined;
|
|
}
|
|
|
|
get_heroes()
|
|
{
|
|
var_0 = [];
|
|
var_1 = getaiarray( "allies" );
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
if ( var_1[var_2] is_hero() )
|
|
var_0[var_0.size] = var_1[var_2];
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
set_team_pacifist( var_0, var_1 )
|
|
{
|
|
var_2 = getaiarray( var_0 );
|
|
|
|
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
|
|
var_2[var_3].pacifist = var_1;
|
|
}
|
|
|
|
replace_on_death()
|
|
{
|
|
maps\_colors::colornode_replace_on_death();
|
|
}
|
|
|
|
spawn_reinforcement( var_0, var_1 )
|
|
{
|
|
maps\_colors::colornode_spawn_reinforcement( var_0, var_1 );
|
|
}
|
|
|
|
clear_promotion_order()
|
|
{
|
|
level.current_color_order = [];
|
|
}
|
|
|
|
set_promotion_order( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( level.current_color_order ) )
|
|
level.current_color_order = [];
|
|
|
|
var_0 = shortencolor( var_0 );
|
|
var_1 = shortencolor( var_1 );
|
|
level.current_color_order[var_0] = var_1;
|
|
|
|
if ( !isdefined( level.current_color_order[var_1] ) )
|
|
set_empty_promotion_order( var_1 );
|
|
}
|
|
|
|
set_empty_promotion_order( var_0 )
|
|
{
|
|
if ( !isdefined( level.current_color_order ) )
|
|
level.current_color_order = [];
|
|
|
|
level.current_color_order[var_0] = "none";
|
|
}
|
|
|
|
remove_dead_from_array( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( !isalive( var_3 ) )
|
|
continue;
|
|
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
remove_heroes_from_array( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
if ( var_0[var_2] is_hero() )
|
|
continue;
|
|
|
|
var_1[var_1.size] = var_0[var_2];
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
remove_color_from_array( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
var_4 = var_0[var_3];
|
|
|
|
if ( !isdefined( var_4.script_forcecolor ) )
|
|
continue;
|
|
|
|
if ( var_4.script_forcecolor == var_1 )
|
|
continue;
|
|
|
|
var_2[var_2.size] = var_4;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
remove_noteworthy_from_array( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
var_4 = var_0[var_3];
|
|
|
|
if ( !isdefined( var_4.script_noteworthy ) )
|
|
continue;
|
|
|
|
if ( var_4.script_noteworthy == var_1 )
|
|
continue;
|
|
|
|
var_2[var_2.size] = var_4;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
get_closest_colored_friendly( var_0, var_1 )
|
|
{
|
|
var_2 = get_force_color_guys( "allies", var_0 );
|
|
var_2 = remove_heroes_from_array( var_2 );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_3 = level.player.origin;
|
|
else
|
|
var_3 = var_1;
|
|
|
|
return common_scripts\utility::getclosest( var_3, var_2 );
|
|
}
|
|
|
|
remove_without_classname( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
if ( !issubstr( var_0[var_3].classname, var_1 ) )
|
|
continue;
|
|
|
|
var_2[var_2.size] = var_0[var_3];
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
remove_without_model( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
if ( !issubstr( var_0[var_3].model, var_1 ) )
|
|
continue;
|
|
|
|
var_2[var_2.size] = var_0[var_3];
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
get_closest_colored_friendly_with_classname( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = get_force_color_guys( "allies", var_0 );
|
|
var_3 = remove_heroes_from_array( var_3 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_4 = level.player.origin;
|
|
else
|
|
var_4 = var_2;
|
|
|
|
var_3 = remove_without_classname( var_3, var_1 );
|
|
return common_scripts\utility::getclosest( var_4, var_3 );
|
|
}
|
|
|
|
promote_nearest_friendly( var_0, var_1 )
|
|
{
|
|
for (;;)
|
|
{
|
|
var_2 = get_closest_colored_friendly( var_0 );
|
|
|
|
if ( !isalive( var_2 ) )
|
|
{
|
|
wait 1;
|
|
continue;
|
|
}
|
|
|
|
var_2 set_force_color( var_1 );
|
|
return;
|
|
}
|
|
}
|
|
|
|
instantly_promote_nearest_friendly( var_0, var_1 )
|
|
{
|
|
for (;;)
|
|
{
|
|
var_2 = get_closest_colored_friendly( var_0 );
|
|
|
|
if ( !isalive( var_2 ) )
|
|
return;
|
|
|
|
var_2 set_force_color( var_1 );
|
|
return;
|
|
}
|
|
}
|
|
|
|
instantly_promote_nearest_friendly_with_classname( var_0, var_1, var_2 )
|
|
{
|
|
for (;;)
|
|
{
|
|
var_3 = get_closest_colored_friendly_with_classname( var_0, var_2 );
|
|
|
|
if ( !isalive( var_3 ) )
|
|
return;
|
|
|
|
var_3 set_force_color( var_1 );
|
|
return;
|
|
}
|
|
}
|
|
|
|
promote_nearest_friendly_with_classname( var_0, var_1, var_2 )
|
|
{
|
|
for (;;)
|
|
{
|
|
var_3 = get_closest_colored_friendly_with_classname( var_0, var_2 );
|
|
|
|
if ( !isalive( var_3 ) )
|
|
{
|
|
wait 1;
|
|
continue;
|
|
}
|
|
|
|
var_3 set_force_color( var_1 );
|
|
return;
|
|
}
|
|
}
|
|
|
|
riotshield_lock_orientation( var_0 )
|
|
{
|
|
self orientmode( "face angle", var_0 );
|
|
self.lockorientation = 1;
|
|
}
|
|
|
|
riotshield_unlock_orientation()
|
|
{
|
|
self.lockorientation = 0;
|
|
}
|
|
|
|
instantly_set_color_from_array_with_classname( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = 0;
|
|
var_4 = [];
|
|
|
|
for ( var_5 = 0; var_5 < var_0.size; var_5++ )
|
|
{
|
|
var_6 = var_0[var_5];
|
|
|
|
if ( var_3 || !issubstr( var_6.classname, var_2 ) )
|
|
{
|
|
var_4[var_4.size] = var_6;
|
|
continue;
|
|
}
|
|
|
|
var_3 = 1;
|
|
var_6 set_force_color( var_1 );
|
|
}
|
|
|
|
return var_4;
|
|
}
|
|
|
|
instantly_set_color_from_array( var_0, var_1 )
|
|
{
|
|
var_2 = 0;
|
|
var_3 = [];
|
|
|
|
for ( var_4 = 0; var_4 < var_0.size; var_4++ )
|
|
{
|
|
var_5 = var_0[var_4];
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_3[var_3.size] = var_5;
|
|
continue;
|
|
}
|
|
|
|
var_2 = 1;
|
|
var_5 set_force_color( var_1 );
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
wait_for_script_noteworthy_trigger( var_0 )
|
|
{
|
|
maps\_utility_code::wait_for_trigger( var_0, "script_noteworthy" );
|
|
}
|
|
|
|
wait_for_targetname_trigger( var_0 )
|
|
{
|
|
maps\_utility_code::wait_for_trigger( var_0, "targetname" );
|
|
}
|
|
|
|
wait_for_flag_or_timeout( var_0, var_1 )
|
|
{
|
|
if ( common_scripts\utility::flag( var_0 ) )
|
|
return;
|
|
|
|
level endon( var_0 );
|
|
wait( var_1 );
|
|
}
|
|
|
|
wait_for_notify_or_timeout( var_0, var_1 )
|
|
{
|
|
self endon( var_0 );
|
|
wait( var_1 );
|
|
}
|
|
|
|
wait_for_trigger_or_timeout( var_0 )
|
|
{
|
|
self endon( "trigger" );
|
|
wait( var_0 );
|
|
}
|
|
|
|
wait_for_either_trigger( var_0, var_1 )
|
|
{
|
|
var_2 = spawnstruct();
|
|
var_3 = [];
|
|
var_3 = common_scripts\utility::array_combine( var_3, getentarray( var_0, "targetname" ) );
|
|
var_3 = common_scripts\utility::array_combine( var_3, getentarray( var_1, "targetname" ) );
|
|
|
|
for ( var_4 = 0; var_4 < var_3.size; var_4++ )
|
|
var_2 thread maps\_utility_code::ent_waits_for_trigger( var_3[var_4] );
|
|
|
|
var_2 waittill( "done" );
|
|
}
|
|
|
|
dronespawn_bodyonly( var_0 )
|
|
{
|
|
var_1 = maps\_spawner::spawner_dronespawn( var_0 );
|
|
return var_1;
|
|
}
|
|
|
|
dronespawn( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = self;
|
|
|
|
var_1 = maps\_spawner::spawner_dronespawn( var_0 );
|
|
var_1 [[ level.drone_spawn_func ]]();
|
|
var_1.spawn_funcs = var_0.spawn_functions;
|
|
var_1 thread maps\_spawner::run_spawn_functions();
|
|
return var_1;
|
|
}
|
|
|
|
makerealai( var_0 )
|
|
{
|
|
return maps\_spawner::spawner_makerealai( var_0 );
|
|
}
|
|
|
|
get_trigger_flag()
|
|
{
|
|
if ( isdefined( self.script_flag ) )
|
|
return self.script_flag;
|
|
|
|
if ( isdefined( self.script_noteworthy ) )
|
|
return self.script_noteworthy;
|
|
}
|
|
|
|
set_default_pathenemy_settings()
|
|
{
|
|
self.pathenemylookahead = 192;
|
|
self.pathenemyfightdist = 192;
|
|
}
|
|
|
|
cqb_walk( var_0 )
|
|
{
|
|
if ( var_0 == "on" )
|
|
enable_cqbwalk();
|
|
else
|
|
disable_cqbwalk();
|
|
}
|
|
|
|
enable_cqbwalk( var_0 )
|
|
{
|
|
if ( self.type == "dog" )
|
|
return;
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
self.cqbenabled = 1;
|
|
|
|
self.cqbwalking = 1;
|
|
self.turnrate = 0.2;
|
|
level thread animscripts\cqb::findcqbpointsofinterest();
|
|
}
|
|
|
|
disable_cqbwalk()
|
|
{
|
|
if ( self.type == "dog" )
|
|
return;
|
|
|
|
self.cqbwalking = undefined;
|
|
self.cqbenabled = undefined;
|
|
self.turnrate = 0.3;
|
|
self.cqb_point_of_interest = undefined;
|
|
}
|
|
|
|
enable_readystand()
|
|
{
|
|
self.busereadyidle = 1;
|
|
}
|
|
|
|
disable_readystand()
|
|
{
|
|
self.busereadyidle = undefined;
|
|
}
|
|
|
|
cqb_aim( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
self.cqb_target = undefined;
|
|
else
|
|
{
|
|
self.cqb_target = var_0;
|
|
|
|
if ( !isdefined( var_0.origin ) )
|
|
return;
|
|
}
|
|
}
|
|
|
|
set_force_cover( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) && var_0 )
|
|
self.forcesuppression = 1;
|
|
else
|
|
self.forcesuppression = undefined;
|
|
}
|
|
|
|
do_in_order( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
[[ var_0 ]]( var_1 );
|
|
else
|
|
[[ var_0 ]]();
|
|
|
|
if ( isdefined( var_3 ) )
|
|
[[ var_2 ]]( var_3 );
|
|
else
|
|
[[ var_2 ]]();
|
|
}
|
|
|
|
send_notify( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
self notify( var_0, var_1 );
|
|
else
|
|
self notify( var_0 );
|
|
}
|
|
|
|
waittill_match_or_timeout( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = spawnstruct();
|
|
var_3 endon( "complete" );
|
|
var_3 delaythread( var_2, ::send_notify, "complete" );
|
|
self waittillmatch( var_0, var_1 );
|
|
}
|
|
|
|
deleteent( var_0 )
|
|
{
|
|
var_0 notify( "deleted" );
|
|
var_0 delete();
|
|
}
|
|
|
|
first_touch( var_0 )
|
|
{
|
|
if ( !isdefined( self.touched ) )
|
|
self.touched = [];
|
|
|
|
if ( isdefined( self.touched[var_0.unique_id] ) )
|
|
return 0;
|
|
|
|
self.touched[var_0.unique_id] = 1;
|
|
return 1;
|
|
}
|
|
|
|
getanim( var_0 )
|
|
{
|
|
return level.scr_anim[self.animname][var_0];
|
|
}
|
|
|
|
hasanim( var_0 )
|
|
{
|
|
return isdefined( level.scr_anim[self.animname][var_0] );
|
|
}
|
|
|
|
getanim_from_animname( var_0, var_1 )
|
|
{
|
|
return level.scr_anim[var_1][var_0];
|
|
}
|
|
|
|
getanim_generic( var_0 )
|
|
{
|
|
return level.scr_anim["generic"][var_0];
|
|
}
|
|
|
|
add_hint_string( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( level.trigger_hint_string ) )
|
|
{
|
|
level.trigger_hint_string = [];
|
|
level.trigger_hint_func = [];
|
|
}
|
|
|
|
level.trigger_hint_string[var_0] = var_1;
|
|
precachestring( var_1 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
level.trigger_hint_func[var_0] = var_2;
|
|
}
|
|
|
|
show_hint( var_0 )
|
|
{
|
|
thread maps\_utility_code::showhintprint_struct( var_0 );
|
|
}
|
|
|
|
hide_hint( var_0 )
|
|
{
|
|
var_0.timeout = 1;
|
|
}
|
|
|
|
fire_radius( var_0, var_1 )
|
|
{
|
|
var_2 = spawn( "trigger_radius", var_0, 0, var_1, 48 );
|
|
|
|
for (;;)
|
|
{
|
|
var_2 waittill( "trigger", var_3 );
|
|
level.player dodamage( 5, var_0 );
|
|
}
|
|
}
|
|
|
|
clearthreatbias( var_0, var_1 )
|
|
{
|
|
setthreatbias( var_0, var_1, 0 );
|
|
setthreatbias( var_1, var_0, 0 );
|
|
}
|
|
|
|
throwgrenadeatplayerasap()
|
|
{
|
|
animscripts\combat_utility::throwgrenadeatplayerasap_combat_utility();
|
|
}
|
|
|
|
array_combine_keys( var_0, var_1 )
|
|
{
|
|
if ( !var_0.size )
|
|
return var_1;
|
|
|
|
var_2 = getarraykeys( var_1 );
|
|
|
|
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
|
|
var_0[var_2[var_3]] = var_1[var_2[var_3]];
|
|
|
|
return var_0;
|
|
}
|
|
|
|
set_ignoresuppression( var_0 )
|
|
{
|
|
self.ignoresuppression = var_0;
|
|
}
|
|
|
|
set_goalradius( var_0 )
|
|
{
|
|
self.goalradius = var_0;
|
|
}
|
|
|
|
try_forever_spawn()
|
|
{
|
|
var_0 = self.export;
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = self dospawn();
|
|
|
|
if ( spawn_failed( var_1 ) )
|
|
{
|
|
wait 1;
|
|
continue;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
}
|
|
|
|
set_allowdeath( var_0 )
|
|
{
|
|
self.allowdeath = var_0;
|
|
}
|
|
|
|
set_run_anim( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
self.alwaysrunforward = var_1;
|
|
else
|
|
self.alwaysrunforward = 1;
|
|
|
|
disable_turnanims();
|
|
self.run_overrideanim = level.scr_anim[self.animname][var_0];
|
|
self.walk_overrideanim = self.run_overrideanim;
|
|
}
|
|
|
|
set_dog_walk_anim()
|
|
{
|
|
self.a.movement = "walk";
|
|
self.disablearrivals = 1;
|
|
self.disableexits = 1;
|
|
self.script_nobark = 1;
|
|
}
|
|
|
|
set_combat_stand_animset( var_0, var_1, var_2, var_3 )
|
|
{
|
|
animscripts\animset::init_animset_custom_stand( var_0, var_1, var_2, var_3 );
|
|
}
|
|
|
|
set_move_animset( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = animscripts\utility::lookupanimarray( var_0 );
|
|
|
|
if ( isarray( var_1 ) )
|
|
{
|
|
var_3["straight"] = var_1[0];
|
|
var_3["move_f"] = var_1[0];
|
|
var_3["move_l"] = var_1[1];
|
|
var_3["move_r"] = var_1[2];
|
|
var_3["move_b"] = var_1[3];
|
|
}
|
|
else
|
|
{
|
|
var_3["straight"] = var_1;
|
|
var_3["move_f"] = var_1;
|
|
}
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_3["sprint"] = var_2;
|
|
|
|
self.custommoveanimset[var_0] = var_3;
|
|
}
|
|
|
|
set_generic_idle_anim( var_0 )
|
|
{
|
|
var_1 = level.scr_anim["generic"][var_0];
|
|
|
|
if ( isarray( var_1 ) )
|
|
self.specialidleanim = var_1;
|
|
else
|
|
self.specialidleanim[0] = var_1;
|
|
}
|
|
|
|
set_idle_anim( var_0 )
|
|
{
|
|
var_1 = level.scr_anim[self.animname][var_0];
|
|
|
|
if ( isarray( var_1 ) )
|
|
self.specialidleanim = var_1;
|
|
else
|
|
self.specialidleanim[0] = var_1;
|
|
}
|
|
|
|
clear_generic_idle_anim()
|
|
{
|
|
self.specialidleanim = undefined;
|
|
self notify( "stop_specialidle" );
|
|
}
|
|
|
|
set_generic_run_anim( var_0, var_1 )
|
|
{
|
|
set_generic_run_anim_array( var_0, undefined, var_1 );
|
|
}
|
|
|
|
clear_generic_run_anim()
|
|
{
|
|
self notify( "movemode" );
|
|
enable_turnanims();
|
|
self.run_overrideanim = undefined;
|
|
self.walk_overrideanim = undefined;
|
|
}
|
|
|
|
set_generic_run_anim_array( var_0, var_1, var_2 )
|
|
{
|
|
self notify( "movemode" );
|
|
|
|
if ( !isdefined( var_2 ) || var_2 )
|
|
self.alwaysrunforward = 1;
|
|
else
|
|
self.alwaysrunforward = undefined;
|
|
|
|
disable_turnanims();
|
|
self.run_overrideanim = level.scr_anim["generic"][var_0];
|
|
self.walk_overrideanim = self.run_overrideanim;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
self.run_override_weights = level.scr_anim["generic"][var_1];
|
|
self.walk_override_weights = self.run_override_weights;
|
|
}
|
|
else
|
|
{
|
|
self.run_override_weights = undefined;
|
|
self.walk_override_weights = undefined;
|
|
}
|
|
}
|
|
|
|
set_run_anim_array( var_0, var_1, var_2 )
|
|
{
|
|
self notify( "movemode" );
|
|
|
|
if ( !isdefined( var_2 ) || var_2 )
|
|
self.alwaysrunforward = 1;
|
|
else
|
|
self.alwaysrunforward = undefined;
|
|
|
|
disable_turnanims();
|
|
self.run_overrideanim = level.scr_anim[self.animname][var_0];
|
|
self.walk_overrideanim = self.run_overrideanim;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
self.run_override_weights = level.scr_anim[self.animname][var_1];
|
|
self.walk_override_weights = self.run_override_weights;
|
|
}
|
|
else
|
|
{
|
|
self.run_override_weights = undefined;
|
|
self.walk_override_weights = undefined;
|
|
}
|
|
}
|
|
|
|
clear_run_anim()
|
|
{
|
|
self notify( "clear_run_anim" );
|
|
self notify( "movemode" );
|
|
|
|
if ( self.type == "dog" )
|
|
{
|
|
self.a.movement = "run";
|
|
self.disablearrivals = 0;
|
|
self.disableexits = 0;
|
|
self.script_nobark = undefined;
|
|
return;
|
|
}
|
|
|
|
if ( !isdefined( self.casual_killer ) )
|
|
enable_turnanims();
|
|
|
|
self.alwaysrunforward = undefined;
|
|
self.run_overrideanim = undefined;
|
|
self.walk_overrideanim = undefined;
|
|
self.run_override_weights = undefined;
|
|
self.walk_override_weights = undefined;
|
|
}
|
|
|
|
debugvar( var_0, var_1 )
|
|
{
|
|
setdvarifuninitialized( var_0, var_1 );
|
|
return getdvarfloat( var_0 );
|
|
}
|
|
|
|
physicsjolt_proximity( var_0, var_1, var_2 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_physicsjolt" );
|
|
|
|
if ( !isdefined( var_0 ) || !isdefined( var_1 ) || !isdefined( var_2 ) )
|
|
{
|
|
var_0 = 400;
|
|
var_1 = 256;
|
|
var_2 = ( 0, 0, 0.075 );
|
|
}
|
|
|
|
var_3 = var_0 * var_0;
|
|
var_4 = 3;
|
|
var_5 = var_2;
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.1;
|
|
var_2 = var_5;
|
|
|
|
if ( self.code_classname == "script_vehicle" )
|
|
{
|
|
var_6 = self vehicle_getspeed();
|
|
|
|
if ( var_6 < var_4 )
|
|
{
|
|
var_7 = var_6 / var_4;
|
|
var_2 = var_5 * var_7;
|
|
}
|
|
}
|
|
|
|
var_8 = distancesquared( self.origin, level.player.origin );
|
|
var_7 = var_3 / var_8;
|
|
|
|
if ( var_7 > 1 )
|
|
var_7 = 1;
|
|
|
|
var_2 = var_2 * var_7;
|
|
var_9 = var_2[0] + var_2[1] + var_2[2];
|
|
|
|
if ( var_9 > 0.025 )
|
|
physicsjitter( self.origin, var_0, var_1, var_2[2], var_2[2] * 2.0 );
|
|
}
|
|
}
|
|
|
|
set_goal_entity( var_0 )
|
|
{
|
|
self setgoalentity( var_0 );
|
|
}
|
|
|
|
activate_trigger( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
activate_trigger_process( var_2 );
|
|
else
|
|
common_scripts\utility::array_thread( getentarray( var_0, var_1 ), ::activate_trigger_process, var_2 );
|
|
}
|
|
|
|
activate_trigger_process( var_0 )
|
|
{
|
|
if ( isdefined( self.script_color_allies ) )
|
|
{
|
|
self.activated_color_trigger = 1;
|
|
maps\_colors::activate_color_trigger( "allies" );
|
|
}
|
|
|
|
if ( isdefined( self.script_color_axis ) )
|
|
{
|
|
self.activated_color_trigger = 1;
|
|
maps\_colors::activate_color_trigger( "axis" );
|
|
}
|
|
|
|
self notify( "trigger", var_0 );
|
|
}
|
|
|
|
self_delete()
|
|
{
|
|
self delete();
|
|
}
|
|
|
|
remove_nocolor_from_array( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
var_3 = var_0[var_2];
|
|
|
|
if ( var_3 has_color() )
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
has_color()
|
|
{
|
|
if ( maps\_colors::get_team() == "axis" )
|
|
return isdefined( self.script_color_axis ) || isdefined( self.script_forcecolor );
|
|
|
|
return isdefined( self.script_color_allies ) || isdefined( self.script_forcecolor );
|
|
}
|
|
|
|
clear_colors()
|
|
{
|
|
clear_team_colors( "axis" );
|
|
clear_team_colors( "allies" );
|
|
}
|
|
|
|
clear_team_colors( var_0 )
|
|
{
|
|
level.currentcolorforced[var_0]["r"] = undefined;
|
|
level.currentcolorforced[var_0]["b"] = undefined;
|
|
level.currentcolorforced[var_0]["c"] = undefined;
|
|
level.currentcolorforced[var_0]["y"] = undefined;
|
|
level.currentcolorforced[var_0]["p"] = undefined;
|
|
level.currentcolorforced[var_0]["o"] = undefined;
|
|
level.currentcolorforced[var_0]["g"] = undefined;
|
|
}
|
|
|
|
get_script_palette()
|
|
{
|
|
var_0 = [];
|
|
var_0["r"] = ( 1, 0, 0 );
|
|
var_0["o"] = ( 1, 0.5, 0 );
|
|
var_0["y"] = ( 1, 1, 0 );
|
|
var_0["g"] = ( 0, 1, 0 );
|
|
var_0["c"] = ( 0, 1, 1 );
|
|
var_0["b"] = ( 0, 0, 1 );
|
|
var_0["p"] = ( 1, 0, 1 );
|
|
return var_0;
|
|
}
|
|
|
|
notify_delay( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( var_1 > 0 )
|
|
wait( var_1 );
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
self notify( var_0 );
|
|
}
|
|
|
|
gun_remove()
|
|
{
|
|
if ( isai( self ) )
|
|
animscripts\shared::placeweaponon( self.weapon, "none" );
|
|
else
|
|
self detach( getweaponmodel( self.weapon ), "tag_weapon_right" );
|
|
}
|
|
|
|
gun_recall()
|
|
{
|
|
if ( isai( self ) )
|
|
animscripts\shared::placeweaponon( self.weapon, "right" );
|
|
else
|
|
self attach( getweaponmodel( self.weapon ), "tag_weapon_right" );
|
|
}
|
|
|
|
place_weapon_on( var_0, var_1 )
|
|
{
|
|
if ( !animscripts\utility::aihasweapon( var_0 ) )
|
|
animscripts\init::initweapon( var_0 );
|
|
|
|
animscripts\shared::placeweaponon( var_0, var_1 );
|
|
}
|
|
|
|
forceuseweapon( var_0, var_1 )
|
|
{
|
|
if ( !animscripts\init::isweaponinitialized( var_0 ) )
|
|
animscripts\init::initweapon( var_0 );
|
|
|
|
var_2 = self.weapon != "none";
|
|
var_3 = animscripts\utility::usingsidearm();
|
|
var_4 = var_1 == "sidearm";
|
|
var_5 = var_1 == "secondary";
|
|
|
|
if ( var_2 && var_3 != var_4 )
|
|
{
|
|
if ( var_3 )
|
|
var_6 = "none";
|
|
else if ( var_5 )
|
|
var_6 = "back";
|
|
else
|
|
var_6 = "chest";
|
|
|
|
animscripts\shared::placeweaponon( self.weapon, var_6 );
|
|
self.lastweapon = self.weapon;
|
|
}
|
|
else
|
|
self.lastweapon = var_0;
|
|
|
|
animscripts\shared::placeweaponon( var_0, "right" );
|
|
|
|
if ( var_4 )
|
|
self.sidearm = var_0;
|
|
else if ( var_5 )
|
|
self.secondaryweapon = var_0;
|
|
else
|
|
self.primaryweapon = var_0;
|
|
|
|
self.weapon = var_0;
|
|
self.bulletsinclip = weaponclipsize( self.weapon );
|
|
self notify( "weapon_switch_done" );
|
|
}
|
|
|
|
lerp_player_view_to_tag( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
maps\_utility_code::lerp_player_view_to_tag_internal( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, 0 );
|
|
}
|
|
|
|
lerp_player_view_to_tag_and_hit_geo( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
maps\_utility_code::lerp_player_view_to_tag_internal( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, 1 );
|
|
}
|
|
|
|
lerp_player_view_to_position( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
|
|
{
|
|
var_9 = get_player_from_self();
|
|
var_10 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_10.origin = var_9.origin;
|
|
var_10.angles = var_9 getplayerangles();
|
|
|
|
if ( isdefined( var_8 ) && var_8 )
|
|
var_9 playerlinkto( var_10, "", var_3, var_4, var_5, var_6, var_7, var_8 );
|
|
else if ( isdefined( var_4 ) )
|
|
var_9 playerlinkto( var_10, "", var_3, var_4, var_5, var_6, var_7 );
|
|
else if ( isdefined( var_3 ) )
|
|
var_9 playerlinkto( var_10, "", var_3 );
|
|
else
|
|
var_9 playerlinkto( var_10 );
|
|
|
|
var_10 moveto( var_0, var_2, var_2 * 0.25 );
|
|
var_10 rotateto( var_1, var_2, var_2 * 0.25 );
|
|
wait( var_2 );
|
|
var_10 delete();
|
|
}
|
|
|
|
lerp_player_view_to_tag_oldstyle( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
maps\_utility_code::lerp_player_view_to_tag_oldstyle_internal( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, 0 );
|
|
}
|
|
|
|
lerp_player_view_to_position_oldstyle( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
|
|
{
|
|
var_9 = get_player_from_self();
|
|
var_10 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_10.origin = var_9 get_player_feet_from_view();
|
|
var_10.angles = var_9 getplayerangles();
|
|
|
|
if ( isdefined( var_8 ) )
|
|
var_9 playerlinktodelta( var_10, "", var_3, var_4, var_5, var_6, var_7, var_8 );
|
|
else if ( isdefined( var_4 ) )
|
|
var_9 playerlinktodelta( var_10, "", var_3, var_4, var_5, var_6, var_7 );
|
|
else if ( isdefined( var_3 ) )
|
|
var_9 playerlinktodelta( var_10, "", var_3 );
|
|
else
|
|
var_9 playerlinktodelta( var_10 );
|
|
|
|
var_10 moveto( var_0, var_2, var_2 * 0.25 );
|
|
var_10 rotateto( var_1, var_2, var_2 * 0.25 );
|
|
wait( var_2 );
|
|
var_10 delete();
|
|
}
|
|
|
|
player_moves( var_0 )
|
|
{
|
|
var_1 = level.player.origin;
|
|
|
|
for (;;)
|
|
{
|
|
if ( distance( var_1, level.player.origin ) > var_0 )
|
|
break;
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
waittill_either_function( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = spawnstruct();
|
|
thread maps\_utility_code::waittill_either_function_internal( var_4, var_0, var_1 );
|
|
thread maps\_utility_code::waittill_either_function_internal( var_4, var_2, var_3 );
|
|
var_4 waittill( "done" );
|
|
}
|
|
|
|
waittill_msg( var_0 )
|
|
{
|
|
self waittill( var_0 );
|
|
}
|
|
|
|
display_hint( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = get_player_from_self();
|
|
|
|
if ( isdefined( level.trigger_hint_func[var_0] ) )
|
|
{
|
|
if ( var_4 [[ level.trigger_hint_func[var_0] ]]() )
|
|
return;
|
|
|
|
var_4 thread maps\_utility_code::hintprint( level.trigger_hint_string[var_0], level.trigger_hint_func[var_0], var_1, var_2, var_3, 30 );
|
|
}
|
|
else
|
|
var_4 thread maps\_utility_code::hintprint( level.trigger_hint_string[var_0], undefined, undefined, undefined, undefined, 30 );
|
|
}
|
|
|
|
display_hint_timeout( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = get_player_from_self();
|
|
|
|
if ( var_5 [[ level.trigger_hint_func[var_0] ]]() )
|
|
return;
|
|
|
|
var_5 thread maps\_utility_code::hintprint( level.trigger_hint_string[var_0], level.trigger_hint_func[var_0], var_2, var_3, var_4, var_1 );
|
|
}
|
|
|
|
display_hint_timeout_mintime( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = get_player_from_self();
|
|
|
|
if ( var_6 [[ level.trigger_hint_func[var_0] ]]() )
|
|
return;
|
|
|
|
var_6 thread maps\_utility_code::hintprint( level.trigger_hint_string[var_0], level.trigger_hint_func[var_0], var_3, var_4, var_5, var_1, var_2 );
|
|
}
|
|
|
|
display_hint_stick( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
|
|
{
|
|
if ( !isdefined( var_6 ) )
|
|
var_6 = 0;
|
|
|
|
var_10 = maps\_utility_code::hint_stick_get_updated( var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
|
|
thread display_hint( var_10, var_7, var_8, var_9 );
|
|
thread maps\_utility_code::hint_stick_update( var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
|
|
}
|
|
|
|
display_hint_stick_timeout( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 )
|
|
{
|
|
if ( !isdefined( var_7 ) )
|
|
var_7 = 0;
|
|
|
|
var_11 = maps\_utility_code::hint_stick_get_updated( var_0, var_2, var_3, var_4, var_5, var_6, var_7 );
|
|
thread display_hint_timeout( var_11, var_1, var_8, var_9, var_10 );
|
|
thread maps\_utility_code::hint_stick_update( var_0, var_2, var_3, var_4, var_5, var_6, var_7 );
|
|
}
|
|
|
|
display_hint_stick_timeout_mintime( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 )
|
|
{
|
|
if ( !isdefined( var_8 ) )
|
|
var_8 = 0;
|
|
|
|
var_12 = maps\_utility_code::hint_stick_get_updated( var_0, var_3, var_4, var_5, var_6, var_7, var_8 );
|
|
thread display_hint_timeout_mintime( var_12, var_1, var_2, var_9, var_10, var_11 );
|
|
thread maps\_utility_code::hint_stick_update( var_0, var_3, var_4, var_5, var_6, var_7, var_8 );
|
|
}
|
|
|
|
check_hint_condition( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
return [[ level.trigger_hint_func[var_0] ]]( var_1, var_2, var_3 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
return [[ level.trigger_hint_func[var_0] ]]( var_1, var_2 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
return [[ level.trigger_hint_func[var_0] ]]( var_1 );
|
|
|
|
return [[ level.trigger_hint_func[var_0] ]]();
|
|
}
|
|
|
|
getgenericanim( var_0 )
|
|
{
|
|
return level.scr_anim["generic"][var_0];
|
|
}
|
|
|
|
enable_careful()
|
|
{
|
|
self.script_careful = 1;
|
|
}
|
|
|
|
disable_careful()
|
|
{
|
|
self.script_careful = 0;
|
|
self notify( "stop_being_careful" );
|
|
}
|
|
|
|
enable_sprint()
|
|
{
|
|
self.sprint = 1;
|
|
}
|
|
|
|
disable_sprint()
|
|
{
|
|
self.sprint = undefined;
|
|
}
|
|
|
|
disable_bulletwhizbyreaction()
|
|
{
|
|
self.disablebulletwhizbyreaction = 1;
|
|
}
|
|
|
|
enable_bulletwhizbyreaction()
|
|
{
|
|
self.disablebulletwhizbyreaction = undefined;
|
|
}
|
|
|
|
clear_dvar( var_0 )
|
|
{
|
|
setdvar( var_0, "" );
|
|
}
|
|
|
|
set_fixednode_true()
|
|
{
|
|
self.fixednode = 1;
|
|
}
|
|
|
|
set_fixednode_false()
|
|
{
|
|
self.fixednode = 0;
|
|
}
|
|
|
|
spawn_ai( var_0, var_1 )
|
|
{
|
|
if ( isdefined( self.script_delay_spawn ) )
|
|
{
|
|
self endon( "death" );
|
|
wait( self.script_delay_spawn );
|
|
}
|
|
|
|
var_2 = undefined;
|
|
var_3 = isdefined( self.script_stealth ) && common_scripts\utility::flag( "_stealth_enabled" ) && !common_scripts\utility::flag( "_stealth_spotted" );
|
|
|
|
if ( isdefined( self.script_forcespawn ) || isdefined( var_0 ) )
|
|
{
|
|
if ( !isdefined( self.script_drone ) )
|
|
var_2 = self stalingradspawn( var_3 );
|
|
else
|
|
var_2 = dronespawn( self );
|
|
}
|
|
else if ( !isdefined( self.script_drone ) )
|
|
var_2 = self dospawn( var_3 );
|
|
else
|
|
var_2 = dronespawn( self );
|
|
|
|
if ( isdefined( var_1 ) && var_1 && isalive( var_2 ) )
|
|
var_2 magic_bullet_shield();
|
|
|
|
if ( !isdefined( self.script_drone ) )
|
|
spawn_failed( var_2 );
|
|
|
|
if ( isdefined( self.script_spawn_once ) )
|
|
self delete();
|
|
|
|
return var_2;
|
|
}
|
|
|
|
function_stack( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = spawnstruct();
|
|
var_6 thread maps\_utility_code::function_stack_proc( self, var_0, var_1, var_2, var_3, var_4, var_5 );
|
|
return maps\_utility_code::function_stack_wait_finish( var_6 );
|
|
}
|
|
|
|
function_stack_timeout( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
var_7 = spawnstruct();
|
|
var_7 thread maps\_utility_code::function_stack_proc( self, var_1, var_2, var_3, var_4, var_5, var_6 );
|
|
|
|
if ( isdefined( var_7.function_stack_func_begun ) || var_7 common_scripts\utility::waittill_any_timeout( var_0, "function_stack_func_begun" ) != "timeout" )
|
|
return maps\_utility_code::function_stack_wait_finish( var_7 );
|
|
else
|
|
{
|
|
var_7 notify( "death" );
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
function_stack_clear()
|
|
{
|
|
var_0 = [];
|
|
|
|
if ( isdefined( self.function_stack[0] ) && isdefined( self.function_stack[0].function_stack_func_begun ) )
|
|
var_0[0] = self.function_stack[0];
|
|
|
|
self.function_stack = undefined;
|
|
self notify( "clear_function_stack" );
|
|
waittillframeend;
|
|
|
|
if ( !var_0.size )
|
|
return;
|
|
|
|
if ( !var_0[0].function_stack_func_begun )
|
|
return;
|
|
|
|
self.function_stack = var_0;
|
|
}
|
|
|
|
geo_off()
|
|
{
|
|
if ( isdefined( self.geo_off ) )
|
|
return;
|
|
|
|
self.realorigin = self getorigin();
|
|
self moveto( self.realorigin + ( 0, 0, -10000 ), 0.2 );
|
|
self.geo_off = 1;
|
|
}
|
|
|
|
geo_on()
|
|
{
|
|
if ( !isdefined( self.geo_off ) )
|
|
return;
|
|
|
|
self moveto( self.realorigin, 0.2 );
|
|
self waittill( "movedone" );
|
|
self.geo_off = undefined;
|
|
}
|
|
|
|
disable_exits()
|
|
{
|
|
self.disableexits = 1;
|
|
}
|
|
|
|
enable_exits()
|
|
{
|
|
self.disableexits = undefined;
|
|
}
|
|
|
|
disable_turnanims()
|
|
{
|
|
self.noturnanims = 1;
|
|
}
|
|
|
|
enable_turnanims()
|
|
{
|
|
self.noturnanims = undefined;
|
|
}
|
|
|
|
disable_arrivals()
|
|
{
|
|
self.disablearrivals = 1;
|
|
}
|
|
|
|
enable_arrivals()
|
|
{
|
|
self endon( "death" );
|
|
waittillframeend;
|
|
self.disablearrivals = undefined;
|
|
}
|
|
|
|
set_blur( var_0, var_1 )
|
|
{
|
|
setblur( var_0, var_1 );
|
|
}
|
|
|
|
set_goal_radius( var_0 )
|
|
{
|
|
self.goalradius = var_0;
|
|
}
|
|
|
|
set_goal_node( var_0 )
|
|
{
|
|
self.last_set_goalnode = var_0;
|
|
self.last_set_goalpos = undefined;
|
|
self.last_set_goalent = undefined;
|
|
self setgoalnode( var_0 );
|
|
}
|
|
|
|
set_goal_node_targetname( var_0 )
|
|
{
|
|
var_1 = getnode( var_0, "targetname" );
|
|
set_goal_node( var_1 );
|
|
}
|
|
|
|
set_goal_pos( var_0 )
|
|
{
|
|
self.last_set_goalnode = undefined;
|
|
self.last_set_goalpos = var_0;
|
|
self.last_set_goalent = undefined;
|
|
self setgoalpos( var_0 );
|
|
}
|
|
|
|
set_goal_ent( var_0 )
|
|
{
|
|
set_goal_pos( var_0.origin );
|
|
self.last_set_goalent = var_0;
|
|
}
|
|
|
|
objective_complete( var_0 )
|
|
{
|
|
maps\_utility_code::objective_recon( var_0 );
|
|
objective_state( var_0, "done" );
|
|
level notify( "objective_complete" + var_0 );
|
|
}
|
|
|
|
handsignal( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = 1;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_4 = !var_1;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
level endon( var_2 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
level waittill( var_3 );
|
|
|
|
var_5 = "signal_" + var_0;
|
|
|
|
if ( self.a.pose == "crouch" )
|
|
var_5 = var_5 + "_crouch";
|
|
else if ( self.script == "cover_right" || self.script == "cover_multi" && self.cover.state == "right" )
|
|
var_5 = var_5 + "_coverR";
|
|
else if ( animscripts\utility::iscqbwalking() )
|
|
var_5 = var_5 + "_cqb";
|
|
|
|
if ( var_4 )
|
|
self setanimrestart( getgenericanim( var_5 ), 1, 0, 1.1 );
|
|
else
|
|
maps\_anim::anim_generic( self, var_5 );
|
|
}
|
|
|
|
array_spawn( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
var_3 = [];
|
|
|
|
foreach ( var_5 in var_0 )
|
|
{
|
|
var_5.count = 1;
|
|
|
|
if ( getsubstr( var_5.classname, 7, 10 ) == "veh" )
|
|
{
|
|
var_6 = var_5 spawn_vehicle();
|
|
|
|
if ( isdefined( var_6.target ) && !isdefined( var_6.script_moveoverride ) )
|
|
var_6 thread maps\_vehicle::gopath();
|
|
|
|
var_3[var_3.size] = var_6;
|
|
continue;
|
|
}
|
|
|
|
var_6 = var_5 spawn_ai( var_1 );
|
|
|
|
if ( !var_2 )
|
|
{
|
|
|
|
}
|
|
|
|
var_3[var_3.size] = var_6;
|
|
}
|
|
|
|
if ( !var_2 )
|
|
{
|
|
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
array_spawn_targetname( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = getentarray( var_0, "targetname" );
|
|
|
|
if ( isdefined( level.spawn_pool_enabled ) )
|
|
{
|
|
var_5 = common_scripts\utility::getstructarray( var_0, "targetname" );
|
|
|
|
if ( isdefined( var_3 ) && var_3 )
|
|
deletestructarray_ref( var_5 );
|
|
|
|
var_6 = maps\_spawner::get_pool_spawners_from_structarray( var_5 );
|
|
var_4 = common_scripts\utility::array_combine( var_4, var_6 );
|
|
}
|
|
|
|
return array_spawn( var_4, var_1, var_2 );
|
|
}
|
|
|
|
array_spawn_noteworthy( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = getentarray( var_0, "script_noteworthy" );
|
|
|
|
if ( isdefined( level.spawn_pool_enabled ) )
|
|
{
|
|
var_5 = common_scripts\utility::getstructarray( var_0, "script_noteworthy" );
|
|
|
|
if ( isdefined( var_3 ) && var_3 )
|
|
deletestructarray_ref( var_5 );
|
|
|
|
var_6 = maps\_spawner::get_pool_spawners_from_structarray( var_5 );
|
|
var_4 = common_scripts\utility::array_combine( var_4, var_6 );
|
|
}
|
|
|
|
return array_spawn( var_4, var_1, var_2 );
|
|
}
|
|
|
|
spawn_script_noteworthy( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_0, "script_noteworthy" );
|
|
var_3 = var_2 spawn_ai( var_1 );
|
|
return var_3;
|
|
}
|
|
|
|
spawn_targetname( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_0, "targetname" );
|
|
var_3 = var_2 spawn_ai( var_1 );
|
|
return var_3;
|
|
}
|
|
|
|
add_dialogue_line( var_0, var_1, var_2 )
|
|
{
|
|
if ( getdvarint( "loc_warnings", 0 ) )
|
|
return;
|
|
|
|
if ( !isdefined( level.dialogue_huds ) )
|
|
level.dialogue_huds = [];
|
|
|
|
var_3 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( level.dialogue_huds[var_3] ) )
|
|
break;
|
|
|
|
var_3++;
|
|
}
|
|
|
|
var_4 = "^3";
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
switch ( var_2 )
|
|
{
|
|
case "red":
|
|
case "r":
|
|
var_4 = "^1";
|
|
break;
|
|
case "green":
|
|
case "g":
|
|
var_4 = "^2";
|
|
break;
|
|
case "yellow":
|
|
case "y":
|
|
var_4 = "^3";
|
|
break;
|
|
case "blue":
|
|
case "b":
|
|
var_4 = "^4";
|
|
break;
|
|
case "cyan":
|
|
case "c":
|
|
var_4 = "^5";
|
|
break;
|
|
case "purple":
|
|
case "p":
|
|
var_4 = "^6";
|
|
break;
|
|
case "white":
|
|
case "w":
|
|
var_4 = "^7";
|
|
break;
|
|
case "black":
|
|
case "bl":
|
|
var_4 = "^8";
|
|
break;
|
|
}
|
|
}
|
|
|
|
level.dialogue_huds[var_3] = 1;
|
|
var_5 = maps\_hud_util::createfontstring( "default", 1.5 );
|
|
var_5.location = 0;
|
|
var_5.alignx = "left";
|
|
var_5.aligny = "top";
|
|
var_5.foreground = 1;
|
|
var_5.sort = 20;
|
|
var_5.alpha = 0;
|
|
var_5 fadeovertime( 0.5 );
|
|
var_5.alpha = 1;
|
|
var_5.x = 40;
|
|
var_5.y = 260 + var_3 * 18;
|
|
var_5.label = " " + var_4 + "< " + var_0 + " > ^7" + var_1;
|
|
var_5.color = ( 1, 1, 1 );
|
|
wait 2;
|
|
var_6 = 40;
|
|
var_5 fadeovertime( 6 );
|
|
var_5.alpha = 0;
|
|
|
|
for ( var_7 = 0; var_7 < var_6; var_7++ )
|
|
{
|
|
var_5.color = ( 1, 1, 0 / ( var_6 - var_7 ) );
|
|
wait 0.05;
|
|
}
|
|
|
|
wait 4;
|
|
var_5 destroy();
|
|
level.dialogue_huds[var_3] = undefined;
|
|
}
|
|
|
|
destructible_disable_explosion()
|
|
{
|
|
common_scripts\_destructible::disable_explosion();
|
|
}
|
|
|
|
destructible_force_explosion()
|
|
{
|
|
common_scripts\_destructible::force_explosion();
|
|
}
|
|
|
|
set_grenadeammo( var_0 )
|
|
{
|
|
self.grenadeammo = var_0;
|
|
}
|
|
|
|
get_player_feet_from_view()
|
|
{
|
|
var_0 = self.origin;
|
|
var_1 = anglestoup( self getplayerangles() );
|
|
var_2 = self getplayerviewheight();
|
|
var_3 = var_0 + ( 0, 0, var_2 );
|
|
var_4 = var_0 + var_1 * var_2;
|
|
var_5 = var_3 - var_4;
|
|
var_6 = var_0 + var_5;
|
|
return var_6;
|
|
}
|
|
|
|
set_baseaccuracy( var_0 )
|
|
{
|
|
self.baseaccuracy = var_0;
|
|
}
|
|
|
|
set_console_status()
|
|
{
|
|
if ( !isdefined( level.console ) )
|
|
level.console = getdvar( "consoleGame" ) == "true";
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
if ( !isdefined( level.xenon ) )
|
|
level.xenon = getdvar( "xenonGame" ) == "true";
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
if ( !isdefined( level.ps3 ) )
|
|
level.ps3 = getdvar( "ps3Game" ) == "true";
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
if ( !isdefined( level.xb3 ) )
|
|
level.xb3 = getdvar( "xb3Game" ) == "true";
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
if ( !isdefined( level.ps4 ) )
|
|
level.ps4 = getdvar( "ps4Game" ) == "true";
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
is_gen4()
|
|
{
|
|
if ( level.xb3 || level.ps4 || !level.console )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
autosave_now( var_0 )
|
|
{
|
|
return maps\_autosave::_autosave_game_now( var_0 );
|
|
}
|
|
|
|
autosave_now_silent()
|
|
{
|
|
return maps\_autosave::_autosave_game_now( 1 );
|
|
}
|
|
|
|
set_generic_deathanim( var_0 )
|
|
{
|
|
self.deathanim = getgenericanim( var_0 );
|
|
}
|
|
|
|
set_deathanim( var_0 )
|
|
{
|
|
self.deathanim = getanim( var_0 );
|
|
}
|
|
|
|
clear_deathanim()
|
|
{
|
|
self.deathanim = undefined;
|
|
}
|
|
|
|
hunted_style_door_open( var_0 )
|
|
{
|
|
wait 1.75;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
self playsound( var_0 );
|
|
else
|
|
self playsound( "door_wood_slow_open" );
|
|
|
|
self rotateto( self.angles + ( 0, 70, 0 ), 2, 0.5, 0 );
|
|
self connectpaths();
|
|
self waittill( "rotatedone" );
|
|
self rotateto( self.angles + ( 0, 40, 0 ), 2, 0, 2 );
|
|
}
|
|
|
|
palm_style_door_open( var_0 )
|
|
{
|
|
wait 1.35;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
self playsound( var_0 );
|
|
else
|
|
self playsound( "door_wood_slow_open" );
|
|
|
|
self rotateto( self.angles + ( 0, 70, 0 ), 2, 0.5, 0 );
|
|
self connectpaths();
|
|
self waittill( "rotatedone" );
|
|
self rotateto( self.angles + ( 0, 40, 0 ), 2, 0, 2 );
|
|
}
|
|
|
|
lerp_fov_overtime( var_0, var_1 )
|
|
{
|
|
foreach ( var_3 in level.players )
|
|
var_3 lerpfov( var_1, var_0 );
|
|
|
|
wait( var_0 );
|
|
}
|
|
|
|
lerp_fovscale_overtime( var_0, var_1 )
|
|
{
|
|
var_2 = getdvarfloat( "cg_fovscale" );
|
|
var_3 = int( var_0 / 0.05 );
|
|
var_4 = ( var_1 - var_2 ) / var_3;
|
|
var_5 = var_2;
|
|
|
|
for ( var_6 = 0; var_6 < var_3; var_6++ )
|
|
{
|
|
var_5 = var_5 + var_4;
|
|
setsaveddvar( "cg_fovscale", var_5 );
|
|
wait 0.05;
|
|
}
|
|
|
|
setsaveddvar( "cg_fovscale", var_1 );
|
|
}
|
|
|
|
putgunaway()
|
|
{
|
|
animscripts\shared::placeweaponon( self.weapon, "none" );
|
|
self.weapon = "none";
|
|
}
|
|
|
|
apply_fog()
|
|
{
|
|
maps\_art::set_fog_progress( 0 );
|
|
}
|
|
|
|
apply_end_fog()
|
|
{
|
|
maps\_art::set_fog_progress( 1 );
|
|
}
|
|
|
|
anim_stopanimscripted()
|
|
{
|
|
self stopanimscripted();
|
|
self notify( "stop_loop" );
|
|
self notify( "single anim", "end" );
|
|
self notify( "looping anim", "end" );
|
|
}
|
|
|
|
disable_pain()
|
|
{
|
|
self.a.disablepain = 1;
|
|
self.allowpain = 0;
|
|
}
|
|
|
|
enable_pain()
|
|
{
|
|
self.a.disablepain = 0;
|
|
self.allowpain = 1;
|
|
}
|
|
|
|
kill_wrapper()
|
|
{
|
|
if ( isplayer( self ) )
|
|
{
|
|
if ( common_scripts\utility::flag_exist( "special_op_terminated" ) && common_scripts\utility::flag( "special_op_terminated" ) )
|
|
return 0;
|
|
|
|
if ( is_player_down( self ) )
|
|
self disableinvulnerability();
|
|
}
|
|
|
|
self enabledeathshield( 0 );
|
|
self kill();
|
|
return 1;
|
|
}
|
|
|
|
disable_oneshotfx_with_noteworthy( var_0 )
|
|
{
|
|
var_1 = getarraykeys( level._global_fx_ents[var_0] );
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
level._global_fx_ents[var_0][var_1[var_2]].looper delete();
|
|
level._global_fx_ents[var_0][var_1[var_2]] = undefined;
|
|
}
|
|
}
|
|
|
|
array_wait( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = getarraykeys( var_0 );
|
|
var_4 = [];
|
|
|
|
for ( var_5 = 0; var_5 < var_3.size; var_5++ )
|
|
var_6 = var_3[var_5];
|
|
|
|
for ( var_5 = 0; var_5 < var_3.size; var_5++ )
|
|
{
|
|
var_6 = var_3[var_5];
|
|
var_4[var_6] = spawnstruct();
|
|
var_4[var_6]._array_wait = 1;
|
|
var_4[var_6] thread maps\_utility_code::array_waitlogic1( var_0[var_6], var_1, var_2 );
|
|
}
|
|
|
|
for ( var_5 = 0; var_5 < var_3.size; var_5++ )
|
|
{
|
|
var_6 = var_3[var_5];
|
|
|
|
if ( isdefined( var_0[var_6] ) && var_4[var_6]._array_wait )
|
|
var_4[var_6] waittill( "_array_wait" );
|
|
}
|
|
}
|
|
|
|
die()
|
|
{
|
|
self kill( ( 0, 0, 0 ) );
|
|
}
|
|
|
|
getmodel( var_0 )
|
|
{
|
|
return level.scr_model[var_0];
|
|
}
|
|
|
|
isads()
|
|
{
|
|
return self playerads() > 0.5;
|
|
}
|
|
|
|
disable_replace_on_death()
|
|
{
|
|
self.replace_on_death = undefined;
|
|
self notify( "_disable_reinforcement" );
|
|
}
|
|
|
|
waittill_player_lookat( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = level.player;
|
|
|
|
var_6 = spawnstruct();
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_6 thread notify_delay( "timeout", var_3 );
|
|
|
|
var_6 endon( "timeout" );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 0.92;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
var_7 = int( var_1 * 20 );
|
|
var_8 = var_7;
|
|
self endon( "death" );
|
|
var_9 = isai( self );
|
|
var_10 = undefined;
|
|
|
|
for (;;)
|
|
{
|
|
if ( var_9 )
|
|
var_10 = self geteye();
|
|
else
|
|
var_10 = self.origin;
|
|
|
|
if ( var_5 player_looking_at( var_10, var_0, var_2, var_4 ) )
|
|
{
|
|
var_8--;
|
|
|
|
if ( var_8 <= 0 )
|
|
return 1;
|
|
}
|
|
else
|
|
var_8 = var_7;
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
waittill_player_lookat_for_time( var_0, var_1, var_2, var_3 )
|
|
{
|
|
waittill_player_lookat( var_1, var_0, var_2, undefined, var_3 );
|
|
}
|
|
|
|
player_looking_at( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0.8;
|
|
|
|
var_4 = get_player_from_self();
|
|
var_5 = var_4 geteye();
|
|
var_6 = vectortoangles( var_0 - var_5 );
|
|
var_7 = anglestoforward( var_6 );
|
|
var_8 = var_4 getplayerangles();
|
|
var_9 = anglestoforward( var_8 );
|
|
var_10 = vectordot( var_7, var_9 );
|
|
|
|
if ( var_10 < var_1 )
|
|
return 0;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
return 1;
|
|
|
|
var_11 = bullettrace( var_0, var_5, 0, var_3 );
|
|
return var_11["fraction"] == 1;
|
|
}
|
|
|
|
either_player_looking_at( var_0, var_1, var_2, var_3 )
|
|
{
|
|
for ( var_4 = 0; var_4 < level.players.size; var_4++ )
|
|
{
|
|
if ( level.players[var_4] player_looking_at( var_0, var_1, var_2, var_3 ) )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
player_can_see_ai( var_0, var_1 )
|
|
{
|
|
var_2 = gettime();
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
if ( isdefined( var_0.playerseesmetime ) && var_0.playerseesmetime + var_1 >= var_2 )
|
|
return var_0.playerseesme;
|
|
|
|
var_0.playerseesmetime = var_2;
|
|
|
|
if ( !common_scripts\utility::within_fov( level.player.origin, level.player.angles, var_0.origin, 0.766 ) )
|
|
{
|
|
var_0.playerseesme = 0;
|
|
return 0;
|
|
}
|
|
|
|
var_3 = level.player geteye();
|
|
var_4 = var_0.origin;
|
|
|
|
if ( sighttracepassed( var_3, var_4, 1, level.player, var_0 ) )
|
|
{
|
|
var_0.playerseesme = 1;
|
|
return 1;
|
|
}
|
|
|
|
var_5 = var_0 geteye();
|
|
|
|
if ( sighttracepassed( var_3, var_5, 1, level.player, var_0 ) )
|
|
{
|
|
var_0.playerseesme = 1;
|
|
return 1;
|
|
}
|
|
|
|
var_6 = ( var_5 + var_4 ) * 0.5;
|
|
|
|
if ( sighttracepassed( var_3, var_6, 1, level.player, var_0 ) )
|
|
{
|
|
var_0.playerseesme = 1;
|
|
return 1;
|
|
}
|
|
|
|
var_0.playerseesme = 0;
|
|
return 0;
|
|
}
|
|
|
|
players_within_distance( var_0, var_1 )
|
|
{
|
|
var_2 = var_0 * var_0;
|
|
|
|
for ( var_3 = 0; var_3 < level.players.size; var_3++ )
|
|
{
|
|
if ( distancesquared( var_1, level.players[var_3].origin ) < var_2 )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
ai_delete_when_out_of_sight( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
var_2 = 0.75;
|
|
|
|
if ( issplitscreen() )
|
|
var_2 = 0.65;
|
|
|
|
while ( var_0.size > 0 )
|
|
{
|
|
wait 1;
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
if ( !isdefined( var_0[var_3] ) || !isalive( var_0[var_3] ) )
|
|
{
|
|
var_0 = common_scripts\utility::array_remove( var_0, var_0[var_3] );
|
|
continue;
|
|
}
|
|
|
|
if ( players_within_distance( var_1, var_0[var_3].origin ) )
|
|
continue;
|
|
|
|
if ( either_player_looking_at( var_0[var_3].origin + ( 0, 0, 48 ), var_2, 1 ) )
|
|
continue;
|
|
|
|
if ( isdefined( var_0[var_3].magic_bullet_shield ) )
|
|
var_0[var_3] stop_magic_bullet_shield();
|
|
|
|
var_0[var_3] delete();
|
|
var_0 = common_scripts\utility::array_remove( var_0, var_0[var_3] );
|
|
}
|
|
}
|
|
}
|
|
|
|
add_wait( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = spawnstruct();
|
|
var_4.caller = self;
|
|
var_4.func = var_0;
|
|
var_4.parms = [];
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_4.parms[var_4.parms.size] = var_1;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_4.parms[var_4.parms.size] = var_2;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_4.parms[var_4.parms.size] = var_3;
|
|
|
|
level.wait_any_func_array[level.wait_any_func_array.size] = var_4;
|
|
}
|
|
|
|
add_abort( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = spawnstruct();
|
|
var_4.caller = self;
|
|
var_4.func = var_0;
|
|
var_4.parms = [];
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_4.parms[var_4.parms.size] = var_1;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_4.parms[var_4.parms.size] = var_2;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_4.parms[var_4.parms.size] = var_3;
|
|
|
|
level.abort_wait_any_func_array[level.abort_wait_any_func_array.size] = var_4;
|
|
}
|
|
|
|
add_func( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = spawnstruct();
|
|
var_6.caller = self;
|
|
var_6.func = var_0;
|
|
var_6.parms = [];
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_6.parms[var_6.parms.size] = var_1;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_6.parms[var_6.parms.size] = var_2;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_6.parms[var_6.parms.size] = var_3;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_6.parms[var_6.parms.size] = var_4;
|
|
|
|
if ( isdefined( var_5 ) )
|
|
var_6.parms[var_6.parms.size] = var_5;
|
|
|
|
level.run_func_after_wait_array[level.run_func_after_wait_array.size] = var_6;
|
|
}
|
|
|
|
add_call( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = spawnstruct();
|
|
var_6.caller = self;
|
|
var_6.func = var_0;
|
|
var_6.parms = [];
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_6.parms[var_6.parms.size] = var_1;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_6.parms[var_6.parms.size] = var_2;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_6.parms[var_6.parms.size] = var_3;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_6.parms[var_6.parms.size] = var_4;
|
|
|
|
if ( isdefined( var_5 ) )
|
|
var_6.parms[var_6.parms.size] = var_5;
|
|
|
|
level.run_call_after_wait_array[level.run_call_after_wait_array.size] = var_6;
|
|
}
|
|
|
|
add_noself_call( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = spawnstruct();
|
|
var_6.func = var_0;
|
|
var_6.parms = [];
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_6.parms[var_6.parms.size] = var_1;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_6.parms[var_6.parms.size] = var_2;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_6.parms[var_6.parms.size] = var_3;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_6.parms[var_6.parms.size] = var_4;
|
|
|
|
if ( isdefined( var_5 ) )
|
|
var_6.parms[var_6.parms.size] = var_5;
|
|
|
|
level.run_noself_call_after_wait_array[level.run_noself_call_after_wait_array.size] = var_6;
|
|
}
|
|
|
|
add_endon( var_0 )
|
|
{
|
|
var_1 = spawnstruct();
|
|
var_1.caller = self;
|
|
var_1.ender = var_0;
|
|
level.do_wait_endons_array[level.do_wait_endons_array.size] = var_1;
|
|
}
|
|
|
|
do_wait_any()
|
|
{
|
|
do_wait( level.wait_any_func_array.size - 1 );
|
|
}
|
|
|
|
do_wait( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 0;
|
|
|
|
var_1 = spawnstruct();
|
|
var_2 = level.wait_any_func_array;
|
|
var_3 = level.do_wait_endons_array;
|
|
var_4 = level.run_func_after_wait_array;
|
|
var_5 = level.run_call_after_wait_array;
|
|
var_6 = level.run_noself_call_after_wait_array;
|
|
var_7 = level.abort_wait_any_func_array;
|
|
level.wait_any_func_array = [];
|
|
level.run_func_after_wait_array = [];
|
|
level.do_wait_endons_array = [];
|
|
level.abort_wait_any_func_array = [];
|
|
level.run_call_after_wait_array = [];
|
|
level.run_noself_call_after_wait_array = [];
|
|
var_1.count = var_2.size;
|
|
var_1 common_scripts\utility::array_levelthread( var_2, maps\_utility_code::waittill_func_ends, var_3 );
|
|
var_1 thread maps\_utility_code::do_abort( var_7 );
|
|
var_1 endon( "any_funcs_aborted" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( var_1.count <= var_0 )
|
|
break;
|
|
|
|
var_1 waittill( "func_ended" );
|
|
}
|
|
|
|
var_1 notify( "all_funcs_ended" );
|
|
common_scripts\utility::array_levelthread( var_4, maps\_utility_code::exec_func, [] );
|
|
common_scripts\utility::array_levelthread( var_5, maps\_utility_code::exec_call );
|
|
common_scripts\utility::array_levelthread( var_6, maps\_utility_code::exec_call_noself );
|
|
}
|
|
|
|
do_funcs()
|
|
{
|
|
var_0 = spawnstruct();
|
|
var_1 = level.run_func_after_wait_array;
|
|
level.run_func_after_wait_array = [];
|
|
|
|
foreach ( var_3 in var_1 )
|
|
level maps\_utility_code::exec_func( var_3, [] );
|
|
|
|
var_0 notify( "all_funcs_ended" );
|
|
}
|
|
|
|
is_default_start()
|
|
{
|
|
if ( isdefined( level.forced_start_catchup ) && level.forced_start_catchup == 1 )
|
|
return 0;
|
|
|
|
if ( isdefined( level.default_start_override ) && level.default_start_override == level.start_point )
|
|
return 1;
|
|
|
|
if ( isdefined( level.default_start ) )
|
|
return level.start_point == "default";
|
|
|
|
if ( level_has_start_points() )
|
|
return level.start_point == level.start_functions[0]["name"];
|
|
|
|
return level.start_point == "default";
|
|
}
|
|
|
|
force_start_catchup()
|
|
{
|
|
level.forced_start_catchup = 1;
|
|
}
|
|
|
|
is_first_start()
|
|
{
|
|
if ( !level_has_start_points() )
|
|
return 1;
|
|
|
|
return level.start_point == level.start_functions[0]["name"];
|
|
}
|
|
|
|
is_after_start( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
if ( level.start_point == var_0 )
|
|
return 0;
|
|
|
|
for ( var_2 = 0; var_2 < level.start_functions.size; var_2++ )
|
|
{
|
|
if ( level.start_functions[var_2]["name"] == var_0 )
|
|
{
|
|
var_1 = 1;
|
|
continue;
|
|
}
|
|
|
|
if ( level.start_functions[var_2]["name"] == level.start_point )
|
|
return var_1;
|
|
}
|
|
}
|
|
|
|
waterfx( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_2 = 0;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_2 = 1;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
common_scripts\utility::flag_assert( var_0 );
|
|
level endon( var_0 );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
wait( randomfloatrange( 0.15, 0.3 ) );
|
|
var_3 = self.origin + ( 0, 0, 150 );
|
|
var_4 = self.origin - ( 0, 0, 150 );
|
|
var_5 = bullettrace( var_3, var_4, 0, undefined );
|
|
|
|
if ( var_5["surfacetype"] != "water" )
|
|
continue;
|
|
|
|
var_6 = "water_movement";
|
|
|
|
if ( isplayer( self ) )
|
|
{
|
|
if ( distance( self getvelocity(), ( 0, 0, 0 ) ) < 5 )
|
|
var_6 = "water_stop";
|
|
}
|
|
else if ( isdefined( level._effect["water_" + self.a.movement] ) )
|
|
var_6 = "water_" + self.a.movement;
|
|
|
|
var_7 = common_scripts\utility::getfx( var_6 );
|
|
var_3 = var_5["position"];
|
|
var_8 = ( 0, self.angles[1], 0 );
|
|
var_9 = anglestoforward( var_8 );
|
|
var_10 = anglestoup( var_8 );
|
|
playfx( var_7, var_3, var_10, var_9 );
|
|
|
|
if ( var_6 != "water_stop" && var_2 )
|
|
thread common_scripts\utility::play_sound_in_space( var_1, var_3 );
|
|
}
|
|
}
|
|
|
|
playersnowfootsteps( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
common_scripts\utility::flag_assert( var_0 );
|
|
level endon( var_0 );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
wait( randomfloatrange( 0.25, 0.5 ) );
|
|
var_1 = self.origin + ( 0, 0, 0 );
|
|
var_2 = self.origin - ( 0, 0, 5 );
|
|
var_3 = bullettrace( var_1, var_2, 0, undefined );
|
|
var_4 = anglestoforward( self.angles );
|
|
var_5 = distance( self getvelocity(), ( 0, 0, 0 ) );
|
|
|
|
if ( isdefined( self.vehicle ) )
|
|
continue;
|
|
|
|
if ( var_3["surfacetype"] != "snow" )
|
|
continue;
|
|
|
|
if ( var_5 <= 10 )
|
|
continue;
|
|
|
|
var_6 = "snow_movement";
|
|
|
|
if ( distance( self getvelocity(), ( 0, 0, 0 ) ) <= 154 )
|
|
playfx( common_scripts\utility::getfx( "footstep_snow_small" ), var_3["position"], var_3["normal"], var_4 );
|
|
|
|
if ( distance( self getvelocity(), ( 0, 0, 0 ) ) > 154 )
|
|
playfx( common_scripts\utility::getfx( "footstep_snow" ), var_3["position"], var_3["normal"], var_4 );
|
|
}
|
|
}
|
|
|
|
mix_up( var_0 )
|
|
{
|
|
var_1 = 60;
|
|
|
|
for ( var_2 = 0; var_2 < var_1; var_2++ )
|
|
{
|
|
self setsoundblend( var_0, var_0 + "_off", ( var_1 - var_2 ) / var_1 );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
mix_down( var_0 )
|
|
{
|
|
var_1 = 60;
|
|
|
|
for ( var_2 = 0; var_2 < var_1; var_2++ )
|
|
{
|
|
self setsoundblend( var_0, var_0 + "_off", var_2 / var_1 );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
manual_linkto( var_0, var_1 )
|
|
{
|
|
var_0 endon( "death" );
|
|
self endon( "death" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = ( 0, 0, 0 );
|
|
|
|
for (;;)
|
|
{
|
|
self.origin = var_0.origin + var_1;
|
|
self.angles = var_0.angles;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
nextmission()
|
|
{
|
|
maps\_utility_code::mission_recon();
|
|
maps\_endmission::_nextmission();
|
|
}
|
|
|
|
make_array( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = [];
|
|
var_5[var_5.size] = var_0;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_5[var_5.size] = var_1;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_5[var_5.size] = var_2;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_5[var_5.size] = var_3;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_5[var_5.size] = var_4;
|
|
|
|
return var_5;
|
|
}
|
|
|
|
fail_on_friendly_fire()
|
|
{
|
|
level.failonfriendlyfire = 1;
|
|
}
|
|
|
|
normal_friendly_fire_penalty()
|
|
{
|
|
level.failonfriendlyfire = 0;
|
|
}
|
|
|
|
getplayerclaymores()
|
|
{
|
|
var_0 = self getweaponslistall();
|
|
var_1 = [];
|
|
|
|
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
|
|
{
|
|
var_3 = var_0[var_2];
|
|
var_1[var_3] = self getweaponammoclip( var_3 );
|
|
}
|
|
|
|
var_4 = 0;
|
|
|
|
if ( isdefined( var_1["claymore"] ) && var_1["claymore"] > 0 )
|
|
var_4 = var_1["claymore"];
|
|
|
|
return var_4;
|
|
}
|
|
|
|
_wait( var_0 )
|
|
{
|
|
wait( var_0 );
|
|
}
|
|
|
|
lerp_saveddvar( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = getdvarfloat( var_0 );
|
|
level notify( var_0 + "_lerp_savedDvar" );
|
|
level endon( var_0 + "_lerp_savedDvar" );
|
|
var_4 = var_1 - var_3;
|
|
var_5 = 0.05;
|
|
var_6 = int( var_2 / var_5 );
|
|
|
|
for ( var_7 = var_4 / var_6; var_6; var_6-- )
|
|
{
|
|
var_3 = var_3 + var_7;
|
|
setsaveddvar( var_0, var_3 );
|
|
wait( var_5 );
|
|
}
|
|
|
|
setsaveddvar( var_0, var_1 );
|
|
}
|
|
|
|
lerp_saveddvar_cg_ng( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( is_gen4() )
|
|
lerp_saveddvar( var_0, var_2, var_3 );
|
|
else
|
|
lerp_saveddvar( var_0, var_1, var_3 );
|
|
}
|
|
|
|
giveachievement_wrapper( var_0 )
|
|
{
|
|
if ( is_demo() )
|
|
return;
|
|
|
|
foreach ( var_2 in level.players )
|
|
var_2 giveachievement( var_0 );
|
|
}
|
|
|
|
player_giveachievement_wrapper( var_0 )
|
|
{
|
|
if ( is_demo() )
|
|
return;
|
|
|
|
self giveachievement( var_0 );
|
|
}
|
|
|
|
add_jav_glow( var_0 )
|
|
{
|
|
var_1 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_1 setcontents( 0 );
|
|
var_1 setmodel( "weapon_javelin_obj" );
|
|
var_1.origin = self.origin;
|
|
var_1.angles = self.angles;
|
|
add_wait( ::delete_on_not_defined );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
common_scripts\utility::flag_assert( var_0 );
|
|
add_wait( common_scripts\utility::flag_wait, var_0 );
|
|
}
|
|
|
|
do_wait_any();
|
|
var_1 delete();
|
|
}
|
|
|
|
add_c4_glow( var_0 )
|
|
{
|
|
var_1 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_1 setcontents( 0 );
|
|
var_1 setmodel( "weapon_c4_obj" );
|
|
var_1.origin = self.origin;
|
|
var_1.angles = self.angles;
|
|
add_wait( ::delete_on_not_defined );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
common_scripts\utility::flag_assert( var_0 );
|
|
add_wait( common_scripts\utility::flag_wait, var_0 );
|
|
}
|
|
|
|
do_wait_any();
|
|
var_1 delete();
|
|
}
|
|
|
|
delete_on_not_defined()
|
|
{
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
slowmo_start()
|
|
{
|
|
|
|
}
|
|
|
|
slowmo_end()
|
|
{
|
|
|
|
}
|
|
|
|
slowmo_setspeed_slow( var_0 )
|
|
{
|
|
level.slowmo.speed_slow = var_0;
|
|
}
|
|
|
|
slowmo_setspeed_norm( var_0 )
|
|
{
|
|
level.slowmo.speed_norm = var_0;
|
|
}
|
|
|
|
slowmo_setlerptime_in( var_0 )
|
|
{
|
|
level.slowmo.lerp_time_in = var_0;
|
|
}
|
|
|
|
slowmo_setlerptime_out( var_0 )
|
|
{
|
|
level.slowmo.lerp_time_out = var_0;
|
|
}
|
|
|
|
slowmo_lerp_in()
|
|
{
|
|
if ( isdefined( level.no_slowmo ) && level.no_slowmo )
|
|
return;
|
|
|
|
setslowmotion( level.slowmo.speed_norm, level.slowmo.speed_slow, level.slowmo.lerp_time_in );
|
|
}
|
|
|
|
slowmo_lerp_out()
|
|
{
|
|
if ( isdefined( level.no_slowmo ) && level.no_slowmo )
|
|
return;
|
|
|
|
setslowmotion( level.slowmo.speed_slow, level.slowmo.speed_norm, level.slowmo.lerp_time_out );
|
|
}
|
|
|
|
add_earthquake( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level.earthquake[var_0]["magnitude"] = var_1;
|
|
level.earthquake[var_0]["duration"] = var_2;
|
|
level.earthquake[var_0]["radius"] = var_3;
|
|
}
|
|
|
|
arcademode()
|
|
{
|
|
return getdvar( "arcademode" ) == "1";
|
|
}
|
|
|
|
arcademode_stop_timer()
|
|
{
|
|
if ( !isdefined( level.arcademode_hud_timer ) )
|
|
return;
|
|
|
|
level notify( "arcadeMode_remove_timer" );
|
|
level.arcademode_stoptime = gettime();
|
|
level.arcademode_hud_timer destroy();
|
|
level.arcademode_hud_timer = undefined;
|
|
}
|
|
|
|
musicplaywrapper( var_0, var_1, var_2 )
|
|
{
|
|
level._audio.last_song = var_0;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 1;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
musicstop( 0 );
|
|
musicplay( var_0, 0, 1.0, 1, var_2 );
|
|
}
|
|
|
|
music_loop( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
thread maps\_utility_code::music_loop_internal( var_0, var_1, var_2, var_3, var_4 );
|
|
}
|
|
|
|
music_loop_stealth( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
thread maps\_utility_code::music_loop_internal( var_0, var_1, var_2, var_3, var_4, 1 );
|
|
}
|
|
|
|
music_play( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( var_1 ) && var_1 > 0 )
|
|
{
|
|
thread maps\_utility_code::music_play_internal_stop_with_fade_then_call( var_0, var_1, var_2, var_3 );
|
|
return;
|
|
}
|
|
|
|
music_stop();
|
|
musicplaywrapper( var_0, var_2, var_3 );
|
|
}
|
|
|
|
music_crossfade( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 1;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 0;
|
|
|
|
if ( isdefined( level._audio.last_song ) )
|
|
musicstop( var_1, level._audio.last_song, var_3 );
|
|
else
|
|
iprintln( "^3WARNING! script music_crossfade(): No previous song was played - no previous song to crossfade from - not fading out anything" );
|
|
|
|
level._audio.last_song = var_0;
|
|
musicplay( var_0, var_1, var_2, 0, var_3 );
|
|
level endon( "stop_music" );
|
|
wait( var_1 );
|
|
level notify( "done_crossfading" );
|
|
}
|
|
|
|
music_stop( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) || var_0 <= 0 )
|
|
musicstop();
|
|
else
|
|
musicstop( var_0 );
|
|
|
|
level notify( "stop_music" );
|
|
}
|
|
|
|
player_is_near_live_grenade()
|
|
{
|
|
var_0 = getentarray( "grenade", "classname" );
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
{
|
|
var_2 = var_0[var_1];
|
|
|
|
if ( var_2.model == "weapon_claymore" )
|
|
continue;
|
|
|
|
for ( var_3 = 0; var_3 < level.players.size; var_3++ )
|
|
{
|
|
var_4 = level.players[var_3];
|
|
|
|
if ( distancesquared( var_2.origin, var_4.origin ) < 75625 )
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
player_died_recently()
|
|
{
|
|
return getdvarint( "player_died_recently", "0" ) > 0;
|
|
}
|
|
|
|
all_players_istouching( var_0 )
|
|
{
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( !var_2 istouching( var_0 ) )
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
any_players_istouching( var_0 )
|
|
{
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( var_2 istouching( var_0 ) )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
getdifficulty()
|
|
{
|
|
if ( level.gameskill < 1 )
|
|
return "easy";
|
|
|
|
if ( level.gameskill < 2 )
|
|
return "medium";
|
|
|
|
if ( level.gameskill < 3 )
|
|
return "hard";
|
|
|
|
return "fu";
|
|
}
|
|
|
|
getaverageplayerorigin()
|
|
{
|
|
var_0 = 0;
|
|
var_1 = 0;
|
|
var_2 = 0;
|
|
|
|
foreach ( var_4 in level.players )
|
|
{
|
|
var_0 = var_0 + var_4.origin[0];
|
|
var_1 = var_1 + var_4.origin[1];
|
|
var_2 = var_2 + var_4.origin[2];
|
|
}
|
|
|
|
var_0 = var_0 / level.players.size;
|
|
var_1 = var_1 / level.players.size;
|
|
var_2 = var_2 / level.players.size;
|
|
return ( var_0, var_1, var_2 );
|
|
}
|
|
|
|
get_average_origin( var_0 )
|
|
{
|
|
var_1 = ( 0, 0, 0 );
|
|
|
|
foreach ( var_3 in var_0 )
|
|
var_1 = var_1 + var_3.origin;
|
|
|
|
return var_1 * ( 1.0 / var_0.size );
|
|
}
|
|
|
|
generic_damage_think()
|
|
{
|
|
self.damage_functions = [];
|
|
self endon( "entitydeleted" );
|
|
self endon( "stop_generic_damage_think" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
|
|
|
|
foreach ( var_8 in self.damage_functions )
|
|
thread [[ var_8 ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
|
|
}
|
|
}
|
|
|
|
add_damage_function( var_0 )
|
|
{
|
|
self.damage_functions[self.damage_functions.size] = var_0;
|
|
}
|
|
|
|
remove_damage_function( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in self.damage_functions )
|
|
{
|
|
if ( var_3 == var_0 )
|
|
continue;
|
|
|
|
var_1[var_1.size] = var_3;
|
|
}
|
|
|
|
self.damage_functions = var_1;
|
|
}
|
|
|
|
givexp( var_0, var_1 )
|
|
{
|
|
if ( isdefined( level.xp_enable ) && level.xp_enable && isdefined( level.xp_give_func ) )
|
|
self [[ level.xp_give_func ]]( var_0, var_1 );
|
|
}
|
|
|
|
playlocalsoundwrapper( var_0 )
|
|
{
|
|
self playlocalsound( var_0 );
|
|
}
|
|
|
|
enableplayerweapons( var_0 )
|
|
{
|
|
if ( level.players.size < 1 )
|
|
return;
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( var_0 == 1 )
|
|
{
|
|
var_2 enableweapons();
|
|
continue;
|
|
}
|
|
|
|
var_2 disableweapons();
|
|
}
|
|
}
|
|
|
|
teleport_players( var_0 )
|
|
{
|
|
var_1 = undefined;
|
|
var_2 = undefined;
|
|
var_3 = undefined;
|
|
|
|
foreach ( var_5 in var_0 )
|
|
{
|
|
if ( isdefined( var_5.script_noteworthy ) && var_5.script_noteworthy == "player1" )
|
|
{
|
|
var_1 = var_5;
|
|
continue;
|
|
}
|
|
|
|
if ( isdefined( var_5.script_noteworthy ) && var_5.script_noteworthy == "player2" )
|
|
{
|
|
var_2 = var_5;
|
|
continue;
|
|
}
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = var_5;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = var_5;
|
|
}
|
|
|
|
foreach ( var_8 in level.players )
|
|
{
|
|
if ( var_8 == level.player )
|
|
var_3 = var_1;
|
|
else if ( var_8 == level.player2 )
|
|
var_3 = var_2;
|
|
|
|
var_8 setorigin( var_3.origin );
|
|
var_8 setplayerangles( var_3.angles );
|
|
}
|
|
}
|
|
|
|
teleport_player( var_0 )
|
|
{
|
|
level.player setorigin( var_0.origin );
|
|
|
|
if ( isdefined( var_0.angles ) )
|
|
level.player setplayerangles( var_0.angles );
|
|
}
|
|
|
|
translate_local()
|
|
{
|
|
var_0 = [];
|
|
|
|
if ( isdefined( self.entities ) )
|
|
var_0 = self.entities;
|
|
|
|
if ( isdefined( self.entity ) )
|
|
var_0[var_0.size] = self.entity;
|
|
|
|
common_scripts\utility::array_levelthread( var_0, maps\_utility_code::translate_local_on_ent );
|
|
}
|
|
|
|
open_up_fov( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
level.player endon( "stop_opening_fov" );
|
|
wait( var_0 );
|
|
level.player playerlinktodelta( var_1, var_2, 1, var_3, var_4, var_5, var_6, 1 );
|
|
}
|
|
|
|
get_ai_touching_volume( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = "all";
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = "all";
|
|
|
|
var_3 = getaispeciesarray( var_0, var_1 );
|
|
var_4 = [];
|
|
|
|
foreach ( var_6 in var_3 )
|
|
{
|
|
if ( var_6 istouching( self ) )
|
|
var_4[var_4.size] = var_6;
|
|
}
|
|
|
|
return var_4;
|
|
}
|
|
|
|
get_drones_touching_volume( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = "all";
|
|
|
|
var_1 = [];
|
|
|
|
if ( var_0 == "all" )
|
|
{
|
|
var_1 = array_merge( level.drones["allies"].array, level.drones["axis"].array );
|
|
var_1 = array_merge( var_1, level.drones["neutral"].array );
|
|
}
|
|
else
|
|
var_1 = level.drones[var_0].array;
|
|
|
|
var_2 = [];
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
if ( !isdefined( var_4 ) )
|
|
continue;
|
|
|
|
if ( var_4 istouching( self ) )
|
|
var_2[var_2.size] = var_4;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
get_drones_with_targetname( var_0 )
|
|
{
|
|
var_1 = array_merge( level.drones["allies"].array, level.drones["axis"].array );
|
|
var_1 = array_merge( var_1, level.drones["neutral"].array );
|
|
var_2 = [];
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
if ( !isdefined( var_4 ) )
|
|
continue;
|
|
|
|
if ( isdefined( var_4.targetname ) && var_4.targetname == var_0 )
|
|
var_2[var_2.size] = var_4;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
get_other_player( var_0 )
|
|
{
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( var_0 == var_2 )
|
|
continue;
|
|
|
|
return var_2;
|
|
}
|
|
}
|
|
|
|
set_count( var_0 )
|
|
{
|
|
self.count = var_0;
|
|
}
|
|
|
|
follow_path( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self notify( "_utility::follow_path" );
|
|
self endon( "_utility::follow_path" );
|
|
self endon( "death" );
|
|
var_4 = undefined;
|
|
|
|
if ( !isdefined( var_0.classname ) )
|
|
{
|
|
if ( !isdefined( var_0.type ) )
|
|
var_4 = "struct";
|
|
else
|
|
var_4 = "node";
|
|
}
|
|
else
|
|
var_4 = "entity";
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 300;
|
|
|
|
var_5 = self.script_forcegoal;
|
|
self.script_forcegoal = 1;
|
|
maps\_spawner::go_to_node( var_0, var_4, var_2, var_1, var_3 );
|
|
self.script_forcegoal = var_5;
|
|
}
|
|
|
|
enable_dynamic_run_speed( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 250;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 100;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = var_0 * 2;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = var_0 * 1.25;
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = 0;
|
|
|
|
self.dontchangemoveplaybackrate = var_5;
|
|
thread maps\_utility_code::dynamic_run_speed_proc( var_0, var_1, var_2, var_3, var_4 );
|
|
}
|
|
|
|
disable_dynamic_run_speed()
|
|
{
|
|
self notify( "stop_dynamic_run_speed" );
|
|
}
|
|
|
|
player_seek_enable()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_player_seek" );
|
|
var_0 = 1200;
|
|
|
|
if ( has_shotgun() )
|
|
var_0 = 250;
|
|
|
|
var_1 = distance( self.origin, level.player.origin );
|
|
|
|
for (;;)
|
|
{
|
|
wait 2;
|
|
self.goalradius = var_1;
|
|
var_2 = get_closest_player( self.origin );
|
|
self setgoalentity( var_2 );
|
|
var_1 = var_1 - 175;
|
|
|
|
if ( var_1 < var_0 )
|
|
{
|
|
var_1 = var_0;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
player_seek_disable()
|
|
{
|
|
self notify( "stop_player_seek" );
|
|
}
|
|
|
|
waittill_entity_in_range_or_timeout( var_0, var_1, var_2 )
|
|
{
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 5;
|
|
|
|
var_3 = gettime() + var_2 * 1000;
|
|
|
|
while ( isdefined( var_0 ) )
|
|
{
|
|
if ( distance( var_0.origin, self.origin ) <= var_1 )
|
|
break;
|
|
|
|
if ( gettime() > var_3 )
|
|
break;
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
waittill_entity_in_range( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
|
|
while ( isdefined( var_0 ) )
|
|
{
|
|
if ( distance( var_0.origin, self.origin ) <= var_1 )
|
|
break;
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
waittill_entity_out_of_range( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
|
|
while ( isdefined( var_0 ) )
|
|
{
|
|
if ( distance( var_0.origin, self.origin ) > var_1 )
|
|
break;
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
has_shotgun()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( !isdefined( self.weapon ) )
|
|
return 0;
|
|
|
|
if ( weaponclass( self.weapon ) == "spread" )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
isprimaryweapon( var_0 )
|
|
{
|
|
if ( var_0 == "none" )
|
|
return 0;
|
|
|
|
if ( weaponinventorytype( var_0 ) != "primary" )
|
|
return 0;
|
|
|
|
switch ( weaponclass( var_0 ) )
|
|
{
|
|
case "rifle":
|
|
case "sniper":
|
|
case "smg":
|
|
case "spread":
|
|
case "rocketlauncher":
|
|
case "pistol":
|
|
case "mg":
|
|
return 1;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
player_has_thermal()
|
|
{
|
|
var_0 = self getweaponslistall();
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return 0;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( issubstr( var_2, "thermal" ) )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
waittill_true_goal( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = self.goalradius;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "goal" );
|
|
|
|
if ( distance( self.origin, var_0 ) < var_1 + 10 )
|
|
break;
|
|
}
|
|
}
|
|
|
|
player_speed_percent( var_0, var_1 )
|
|
{
|
|
var_2 = int( getdvar( "g_speed" ) );
|
|
|
|
if ( !isdefined( level.player.g_speed ) )
|
|
level.player.g_speed = var_2;
|
|
|
|
var_3 = int( level.player.g_speed * var_0 * 0.01 );
|
|
level.player player_speed_set( var_3, var_1 );
|
|
}
|
|
|
|
blend_movespeedscale_percent( var_0, var_1 )
|
|
{
|
|
var_2 = self;
|
|
|
|
if ( !isplayer( var_2 ) )
|
|
var_2 = level.player;
|
|
|
|
if ( !isdefined( var_2.movespeedscale ) )
|
|
var_2.movespeedscale = 1.0;
|
|
|
|
var_3 = var_0 * 0.01;
|
|
var_2 blend_movespeedscale( var_3, var_1 );
|
|
}
|
|
|
|
player_speed_set( var_0, var_1 )
|
|
{
|
|
var_2 = int( getdvar( "g_speed" ) );
|
|
|
|
if ( !isdefined( level.player.g_speed ) )
|
|
level.player.g_speed = var_2;
|
|
|
|
var_3 = maps\_utility_code::g_speed_get_func;
|
|
var_4 = maps\_utility_code::g_speed_set_func;
|
|
level.player thread player_speed_proc( var_0, var_1, var_3, var_4, "player_speed_set" );
|
|
}
|
|
|
|
player_bob_scale_set( var_0, var_1 )
|
|
{
|
|
var_2 = maps\_utility_code::g_bob_scale_get_func;
|
|
var_3 = maps\_utility_code::g_bob_scale_set_func;
|
|
level.player thread player_speed_proc( var_0, var_1, var_2, var_3, "player_bob_scale_set" );
|
|
}
|
|
|
|
blend_movespeedscale( var_0, var_1 )
|
|
{
|
|
var_2 = self;
|
|
|
|
if ( !isplayer( var_2 ) )
|
|
var_2 = level.player;
|
|
|
|
if ( !isdefined( var_2.movespeedscale ) )
|
|
var_2.movespeedscale = 1.0;
|
|
|
|
var_3 = maps\_utility_code::movespeed_get_func;
|
|
var_4 = maps\_utility_code::movespeed_set_func;
|
|
var_2 thread player_speed_proc( var_0, var_1, var_3, var_4, "blend_movespeedscale" );
|
|
}
|
|
|
|
player_speed_proc( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
self notify( var_4 );
|
|
self endon( var_4 );
|
|
var_5 = [[ var_2 ]]();
|
|
var_6 = var_0;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_7 = var_6 - var_5;
|
|
var_8 = 0.05;
|
|
var_9 = var_1 / var_8;
|
|
var_10 = var_7 / var_9;
|
|
|
|
while ( abs( var_6 - var_5 ) > abs( var_10 * 1.1 ) )
|
|
{
|
|
var_5 = var_5 + var_10;
|
|
[[ var_3 ]]( var_5 );
|
|
wait( var_8 );
|
|
}
|
|
}
|
|
|
|
[[ var_3 ]]( var_6 );
|
|
}
|
|
|
|
player_speed_default( var_0 )
|
|
{
|
|
if ( !isdefined( level.player.g_speed ) )
|
|
return;
|
|
|
|
level.player player_speed_set( level.player.g_speed, var_0 );
|
|
waittillframeend;
|
|
level.player.g_speed = undefined;
|
|
}
|
|
|
|
blend_movespeedscale_default( var_0 )
|
|
{
|
|
var_1 = self;
|
|
|
|
if ( !isplayer( var_1 ) )
|
|
var_1 = level.player;
|
|
|
|
if ( !isdefined( var_1.movespeedscale ) )
|
|
return;
|
|
|
|
var_1 blend_movespeedscale( 1.0, var_0 );
|
|
waittillframeend;
|
|
var_1.movespeedscale = undefined;
|
|
}
|
|
|
|
teleport_ent( var_0 )
|
|
{
|
|
if ( isplayer( self ) )
|
|
{
|
|
self setorigin( var_0.origin );
|
|
self setplayerangles( var_0.angles );
|
|
}
|
|
else
|
|
self forceteleport( var_0.origin, var_0.angles );
|
|
}
|
|
|
|
teleport_to_ent_tag( var_0, var_1 )
|
|
{
|
|
var_2 = var_0 gettagorigin( var_1 );
|
|
var_3 = var_0 gettagangles( var_1 );
|
|
self dontinterpolate();
|
|
|
|
if ( isplayer( self ) )
|
|
{
|
|
self setorigin( var_2 );
|
|
self setplayerangles( var_3 );
|
|
}
|
|
else if ( isai( self ) )
|
|
self forceteleport( var_2, var_3 );
|
|
else
|
|
{
|
|
self.origin = var_2;
|
|
self.angles = var_3;
|
|
}
|
|
}
|
|
|
|
teleport_ai( var_0 )
|
|
{
|
|
self forceteleport( var_0.origin, var_0.angles );
|
|
self setgoalpos( self.origin );
|
|
self setgoalnode( var_0 );
|
|
}
|
|
|
|
move_all_fx( var_0 )
|
|
{
|
|
foreach ( var_2 in level.createfxent )
|
|
var_2.v["origin"] = var_2.v["origin"] + var_0;
|
|
}
|
|
|
|
issliding()
|
|
{
|
|
return isdefined( self.slidemodel );
|
|
}
|
|
|
|
beginsliding( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = self;
|
|
var_3 thread play_sound_on_entity( "foot_slide_plr_start" );
|
|
var_3 thread play_loop_sound_on_tag( "foot_slide_plr_loop" );
|
|
var_4 = isdefined( level.custom_linkto_slide );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = var_3 getvelocity() + ( 0, 0, -10 );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 10;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0.035;
|
|
|
|
var_5 = spawn( "script_origin", var_3.origin );
|
|
var_5.angles = var_3.angles;
|
|
var_3.slidemodel = var_5;
|
|
var_5 moveslide( ( 0, 0, 15 ), 15, var_0 );
|
|
|
|
if ( var_4 )
|
|
var_3 playerlinktoblend( var_5, undefined, 1 );
|
|
else
|
|
var_3 playerlinkto( var_5 );
|
|
|
|
var_3 disableweapons();
|
|
var_3 allowprone( 0 );
|
|
var_3 allowcrouch( 1 );
|
|
var_3 allowstand( 0 );
|
|
var_3 thread maps\_utility_code::doslide( var_5, var_1, var_2 );
|
|
}
|
|
|
|
endsliding()
|
|
{
|
|
var_0 = self;
|
|
var_0 notify( "stop soundfoot_slide_plr_loop" );
|
|
var_0 thread play_sound_on_entity( "foot_slide_plr_end" );
|
|
var_0 unlink();
|
|
var_0 setvelocity( var_0.slidemodel.slidevelocity );
|
|
var_0.slidemodel delete();
|
|
var_0 enableweapons();
|
|
var_0 allowprone( 1 );
|
|
var_0 allowcrouch( 1 );
|
|
var_0 allowstand( 1 );
|
|
var_0 notify( "stop_sliding" );
|
|
}
|
|
|
|
spawn_vehicle()
|
|
{
|
|
return maps\_vehicle::vehicle_spawn( self );
|
|
}
|
|
|
|
getentwithflag( var_0 )
|
|
{
|
|
var_1 = maps\_trigger::get_load_trigger_classes();
|
|
var_2 = [];
|
|
|
|
foreach ( var_6, var_4 in var_1 )
|
|
{
|
|
if ( !issubstr( var_6, "flag" ) )
|
|
continue;
|
|
|
|
var_5 = getentarray( var_6, "classname" );
|
|
var_2 = common_scripts\utility::array_combine( var_2, var_5 );
|
|
}
|
|
|
|
var_7 = maps\_trigger::get_load_trigger_funcs();
|
|
|
|
foreach ( var_9, var_4 in var_7 )
|
|
{
|
|
if ( !issubstr( var_9, "flag" ) )
|
|
continue;
|
|
|
|
var_5 = getentarray( var_9, "targetname" );
|
|
var_2 = common_scripts\utility::array_combine( var_2, var_5 );
|
|
}
|
|
|
|
var_10 = undefined;
|
|
|
|
foreach ( var_12 in var_2 )
|
|
{
|
|
if ( var_12.script_flag == var_0 )
|
|
return var_12;
|
|
}
|
|
}
|
|
|
|
getentarraywithflag( var_0 )
|
|
{
|
|
var_1 = maps\_trigger::get_load_trigger_classes();
|
|
var_2 = [];
|
|
|
|
foreach ( var_6, var_4 in var_1 )
|
|
{
|
|
if ( !issubstr( var_6, "flag" ) )
|
|
continue;
|
|
|
|
var_5 = getentarray( var_6, "classname" );
|
|
var_2 = common_scripts\utility::array_combine( var_2, var_5 );
|
|
}
|
|
|
|
var_7 = maps\_trigger::get_load_trigger_funcs();
|
|
|
|
foreach ( var_9, var_4 in var_7 )
|
|
{
|
|
if ( !issubstr( var_9, "flag" ) )
|
|
continue;
|
|
|
|
var_5 = getentarray( var_9, "targetname" );
|
|
var_2 = common_scripts\utility::array_combine( var_2, var_5 );
|
|
}
|
|
|
|
var_10 = [];
|
|
|
|
foreach ( var_12 in var_2 )
|
|
{
|
|
if ( var_12.script_flag == var_0 )
|
|
var_10[var_10.size] = var_12;
|
|
}
|
|
|
|
return var_10;
|
|
}
|
|
|
|
set_z( var_0, var_1 )
|
|
{
|
|
return ( var_0[0], var_0[1], var_1 );
|
|
}
|
|
|
|
add_z( var_0, var_1 )
|
|
{
|
|
return ( var_0[0], var_0[1], var_0[2] + var_1 );
|
|
}
|
|
|
|
set_y( var_0, var_1 )
|
|
{
|
|
return ( var_0[0], var_1, var_0[2] );
|
|
}
|
|
|
|
set_x( var_0, var_1 )
|
|
{
|
|
return ( var_1, var_0[1], var_0[2] );
|
|
}
|
|
|
|
player_using_missile()
|
|
{
|
|
var_0 = self getcurrentweapon();
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return 0;
|
|
|
|
if ( issubstr( tolower( var_0 ), "rpg" ) )
|
|
return 1;
|
|
|
|
if ( issubstr( tolower( var_0 ), "stinger" ) )
|
|
return 1;
|
|
|
|
if ( issubstr( tolower( var_0 ), "at4" ) )
|
|
return 1;
|
|
|
|
if ( issubstr( tolower( var_0 ), "javelin" ) )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
doinglongdeath()
|
|
{
|
|
return isdefined( self.a.doinglongdeath );
|
|
}
|
|
|
|
get_rumble_ent( var_0 )
|
|
{
|
|
if ( is_coop() )
|
|
{
|
|
|
|
}
|
|
|
|
var_1 = get_player_from_self();
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = "steady_rumble";
|
|
|
|
var_2 = spawn( "script_origin", var_1 geteye() );
|
|
var_2.intensity = 1;
|
|
var_2 thread maps\_utility_code::update_rumble_intensity( var_1, var_0 );
|
|
return var_2;
|
|
}
|
|
|
|
set_rumble_intensity( var_0 )
|
|
{
|
|
self.intensity = var_0;
|
|
}
|
|
|
|
rumble_ramp_on( var_0 )
|
|
{
|
|
thread rumble_ramp_to( 1, var_0 );
|
|
}
|
|
|
|
rumble_ramp_off( var_0 )
|
|
{
|
|
thread rumble_ramp_to( 0, var_0 );
|
|
}
|
|
|
|
rumble_ramp_to( var_0, var_1 )
|
|
{
|
|
self notify( "new_ramp" );
|
|
self endon( "new_ramp" );
|
|
self endon( "death" );
|
|
var_2 = var_1 * 20;
|
|
var_3 = var_0 - self.intensity;
|
|
var_4 = var_3 / var_2;
|
|
|
|
for ( var_5 = 0; var_5 < var_2; var_5++ )
|
|
{
|
|
self.intensity = self.intensity + var_4;
|
|
wait 0.05;
|
|
}
|
|
|
|
self.intensity = var_0;
|
|
}
|
|
|
|
get_player_from_self()
|
|
{
|
|
if ( isdefined( self ) )
|
|
{
|
|
if ( !is_in_array( level.players, self ) )
|
|
return level.player;
|
|
else
|
|
return self;
|
|
}
|
|
else
|
|
return level.player;
|
|
}
|
|
|
|
get_player_gameskill()
|
|
{
|
|
return int( self getplayersetting( "gameskill" ) );
|
|
}
|
|
|
|
glow( var_0 )
|
|
{
|
|
if ( isdefined( self.non_glow_model ) )
|
|
return;
|
|
|
|
self.non_glow_model = self.model;
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = self.model + "_obj";
|
|
|
|
self setmodel( var_0 );
|
|
}
|
|
|
|
stopglow( var_0 )
|
|
{
|
|
if ( !isdefined( self.non_glow_model ) )
|
|
return;
|
|
|
|
self setmodel( self.non_glow_model );
|
|
self.non_glow_model = undefined;
|
|
}
|
|
|
|
array_delete_evenly( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = [];
|
|
var_1 = var_2 - var_1;
|
|
|
|
foreach ( var_5 in var_0 )
|
|
{
|
|
var_3[var_3.size] = var_5;
|
|
|
|
if ( var_3.size == var_2 )
|
|
{
|
|
var_3 = common_scripts\utility::array_randomize( var_3 );
|
|
|
|
for ( var_6 = var_1; var_6 < var_3.size; var_6++ )
|
|
var_3[var_6] delete();
|
|
|
|
var_3 = [];
|
|
}
|
|
}
|
|
|
|
var_8 = [];
|
|
|
|
foreach ( var_5 in var_0 )
|
|
{
|
|
if ( !isdefined( var_5 ) )
|
|
continue;
|
|
|
|
var_8[var_8.size] = var_5;
|
|
}
|
|
|
|
return var_8;
|
|
}
|
|
|
|
waittill_in_range( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0.5;
|
|
|
|
self endon( "death" );
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
if ( distance( var_0, self.origin ) <= var_1 )
|
|
break;
|
|
|
|
wait( var_2 );
|
|
}
|
|
}
|
|
|
|
add_trace_fx( var_0 )
|
|
{
|
|
var_1 = spawnstruct();
|
|
var_1 thread maps\_utility_code::add_trace_fx_proc( var_0 );
|
|
return var_1;
|
|
}
|
|
|
|
tracefx_on_tag( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = self gettagorigin( var_1 );
|
|
var_4 = self gettagangles( var_1 );
|
|
tracefx( var_0, var_3, var_4, var_2 );
|
|
}
|
|
|
|
tracefx( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = anglestoforward( var_2 );
|
|
var_5 = bullettrace( var_1, var_1 + var_4 * var_3, 0, undefined );
|
|
|
|
if ( var_5["fraction"] >= 1 )
|
|
return;
|
|
|
|
var_6 = var_5["surfacetype"];
|
|
|
|
if ( !isdefined( level.trace_fx[var_0][var_6] ) )
|
|
var_6 = "default";
|
|
|
|
var_7 = level.trace_fx[var_0][var_6];
|
|
|
|
if ( isdefined( var_7["fx"] ) )
|
|
playfx( var_7["fx"], var_5["position"], var_5["normal"] );
|
|
|
|
if ( isdefined( var_7["fx_array"] ) )
|
|
{
|
|
foreach ( var_9 in var_7["fx_array"] )
|
|
playfx( var_9, var_5["position"], var_5["normal"] );
|
|
}
|
|
|
|
if ( isdefined( var_7["sound"] ) )
|
|
level thread common_scripts\utility::play_sound_in_space( var_7["sound"], var_5["position"] );
|
|
|
|
if ( isdefined( var_7["rumble"] ) )
|
|
{
|
|
var_11 = get_player_from_self();
|
|
var_11 playrumbleonentity( var_7["rumble"] );
|
|
}
|
|
}
|
|
|
|
disable_surprise()
|
|
{
|
|
self.newenemyreactiondistsq = 0;
|
|
}
|
|
|
|
enable_surprise()
|
|
{
|
|
self.newenemyreactiondistsq = squared( 512 );
|
|
}
|
|
|
|
enable_heat_behavior( var_0 )
|
|
{
|
|
self.heat = 1;
|
|
self.no_pistol_switch = 1;
|
|
self.usecombatscriptatcover = 1;
|
|
|
|
if ( !isdefined( var_0 ) || !var_0 )
|
|
{
|
|
self.dontshootwhilemoving = 1;
|
|
self.maxfaceenemydist = 64;
|
|
self.pathenemylookahead = 2048;
|
|
disable_surprise();
|
|
}
|
|
|
|
self.specialreloadanimfunc = animscripts\animset::heat_reload_anim;
|
|
self.custommoveanimset["run"] = animscripts\utility::lookupanimarray( "heat_run" );
|
|
}
|
|
|
|
disable_heat_behavior()
|
|
{
|
|
self.heat = undefined;
|
|
self.no_pistol_switch = undefined;
|
|
self.dontshootwhilemoving = undefined;
|
|
self.usecombatscriptatcover = 0;
|
|
self.maxfaceenemydist = 512;
|
|
self.specialreloadanimfunc = undefined;
|
|
self.custommoveanimset = undefined;
|
|
}
|
|
|
|
getvehiclearray()
|
|
{
|
|
return vehicle_getarray();
|
|
}
|
|
|
|
hint( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
var_3 = 0.5;
|
|
level endon( "clearing_hints" );
|
|
|
|
if ( isdefined( level.hintelement ) )
|
|
level.hintelement maps\_hud_util::destroyelem();
|
|
|
|
level.hintelement = maps\_hud_util::createfontstring( "default", 1.5 );
|
|
level.hintelement maps\_hud_util::setpoint( "MIDDLE", undefined, 0, 30 + var_2 );
|
|
level.hintelement.color = ( 1, 1, 1 );
|
|
level.hintelement settext( var_0 );
|
|
level.hintelement.alpha = 0;
|
|
level.hintelement fadeovertime( 0.5 );
|
|
level.hintelement.alpha = 1;
|
|
wait 0.5;
|
|
level.hintelement endon( "death" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
wait( var_1 );
|
|
else
|
|
return;
|
|
|
|
level.hintelement fadeovertime( var_3 );
|
|
level.hintelement.alpha = 0;
|
|
wait( var_3 );
|
|
level.hintelement maps\_hud_util::destroyelem();
|
|
}
|
|
|
|
hint_fade()
|
|
{
|
|
var_0 = 1;
|
|
|
|
if ( isdefined( level.hintelement ) )
|
|
{
|
|
level notify( "clearing_hints" );
|
|
level.hintelement fadeovertime( var_0 );
|
|
level.hintelement.alpha = 0;
|
|
wait( var_0 );
|
|
}
|
|
}
|
|
|
|
kill_deathflag( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( level.flag[var_0] ) )
|
|
return;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
foreach ( var_3 in level.deathflags[var_0] )
|
|
{
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( isalive( var_5 ) )
|
|
{
|
|
var_5 thread maps\_utility_code::kill_deathflag_proc( var_1 );
|
|
continue;
|
|
}
|
|
|
|
var_5 delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
get_player_view_controller( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = "player_view_controller";
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = ( 0, 0, 0 );
|
|
|
|
var_4 = var_0 gettagorigin( var_1 );
|
|
var_5 = spawnturret( "misc_turret", var_4, var_3 );
|
|
var_5.angles = var_0 gettagangles( var_1 );
|
|
var_5 setmodel( "tag_turret" );
|
|
var_5 linkto( var_0, var_1, var_2, ( 0, 0, 0 ) );
|
|
var_5 makeunusable();
|
|
var_5 hide();
|
|
var_5 setmode( "manual" );
|
|
return var_5;
|
|
}
|
|
|
|
create_blend( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = spawnstruct();
|
|
var_4 childthread maps\_utility_code::process_blend( var_0, self, var_1, var_2, var_3 );
|
|
return var_4;
|
|
}
|
|
|
|
store_players_weapons( var_0 )
|
|
{
|
|
if ( !isdefined( self.stored_weapons ) )
|
|
self.stored_weapons = [];
|
|
|
|
var_1 = [];
|
|
var_2 = self getweaponslistall();
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
var_1[var_4] = [];
|
|
var_1[var_4]["clip_left"] = self getweaponammoclip( var_4, "left" );
|
|
var_1[var_4]["clip_right"] = self getweaponammoclip( var_4, "right" );
|
|
var_1[var_4]["stock"] = self getweaponammostock( var_4 );
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = "default";
|
|
|
|
self.stored_weapons[var_0] = [];
|
|
self.stored_weapons[var_0]["current_weapon"] = self getcurrentweapon();
|
|
self.stored_weapons[var_0]["inventory"] = var_1;
|
|
}
|
|
|
|
restore_players_weapons( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = "default";
|
|
|
|
if ( !isdefined( self.stored_weapons ) || !isdefined( self.stored_weapons[var_0] ) )
|
|
return;
|
|
|
|
self takeallweapons();
|
|
|
|
foreach ( var_3, var_2 in self.stored_weapons[var_0]["inventory"] )
|
|
{
|
|
if ( weaponinventorytype( var_3 ) != "altmode" )
|
|
self giveweapon( var_3 );
|
|
|
|
self setweaponammoclip( var_3, var_2["clip_left"], "left" );
|
|
self setweaponammoclip( var_3, var_2["clip_right"], "right" );
|
|
self setweaponammostock( var_3, var_2["stock"] );
|
|
}
|
|
|
|
var_4 = self.stored_weapons[var_0]["current_weapon"];
|
|
|
|
if ( var_4 != "none" )
|
|
self switchtoweapon( var_4 );
|
|
}
|
|
|
|
hide_entity()
|
|
{
|
|
switch ( self.code_classname )
|
|
{
|
|
case "light_spot":
|
|
case "script_vehicle":
|
|
case "script_model":
|
|
self hide();
|
|
break;
|
|
case "script_brushmodel":
|
|
self hide();
|
|
self notsolid();
|
|
|
|
if ( self.spawnflags & 1 )
|
|
self connectpaths();
|
|
|
|
break;
|
|
case "trigger_multiple_flag_looking":
|
|
case "trigger_multiple_flag_lookat":
|
|
case "trigger_multiple_breachIcon":
|
|
case "trigger_multiple_flag_set":
|
|
case "trigger_use_touch":
|
|
case "trigger_use":
|
|
case "trigger_multiple":
|
|
case "trigger_radius":
|
|
common_scripts\utility::trigger_off();
|
|
break;
|
|
default:
|
|
}
|
|
}
|
|
|
|
show_entity()
|
|
{
|
|
switch ( self.code_classname )
|
|
{
|
|
case "light_spot":
|
|
case "script_vehicle":
|
|
case "script_model":
|
|
self show();
|
|
break;
|
|
case "script_brushmodel":
|
|
self show();
|
|
self solid();
|
|
|
|
if ( self.spawnflags & 1 )
|
|
self disconnectpaths();
|
|
|
|
break;
|
|
case "trigger_multiple_flag_looking":
|
|
case "trigger_multiple_flag_lookat":
|
|
case "trigger_multiple_breachIcon":
|
|
case "trigger_multiple_flag_set":
|
|
case "trigger_use_touch":
|
|
case "trigger_use":
|
|
case "trigger_multiple":
|
|
case "trigger_radius":
|
|
common_scripts\utility::trigger_on();
|
|
break;
|
|
default:
|
|
}
|
|
}
|
|
|
|
set_moveplaybackrate( var_0, var_1 )
|
|
{
|
|
self notify( "set_moveplaybackrate" );
|
|
self endon( "set_moveplaybackrate" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_2 = var_0 - self.moveplaybackrate;
|
|
var_3 = 0.05;
|
|
var_4 = var_1 / var_3;
|
|
var_5 = var_2 / var_4;
|
|
|
|
while ( abs( var_0 - self.moveplaybackrate ) > abs( var_5 * 1.1 ) )
|
|
{
|
|
self.moveplaybackrate = self.moveplaybackrate + var_5;
|
|
wait( var_3 );
|
|
}
|
|
}
|
|
|
|
self.moveplaybackrate = var_0;
|
|
}
|
|
|
|
array_spawn_function( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
foreach ( var_7 in var_0 )
|
|
var_7 thread add_spawn_function( var_1, var_2, var_3, var_4, var_5 );
|
|
}
|
|
|
|
array_spawn_function_targetname( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = getentarray( var_0, "targetname" );
|
|
array_spawn_function( var_6, var_1, var_2, var_3, var_4, var_5 );
|
|
}
|
|
|
|
array_spawn_function_noteworthy( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = getentarray( var_0, "script_noteworthy" );
|
|
array_spawn_function( var_6, var_1, var_2, var_3, var_4, var_5 );
|
|
}
|
|
|
|
enable_dontevershoot()
|
|
{
|
|
self.dontevershoot = 1;
|
|
}
|
|
|
|
disable_dontevershoot()
|
|
{
|
|
self.dontevershoot = undefined;
|
|
}
|
|
|
|
create_sunflare_setting( var_0 )
|
|
{
|
|
if ( !isdefined( level.sunflare_settings ) )
|
|
level.sunflare_settings = [];
|
|
|
|
var_1 = spawnstruct();
|
|
var_1.name = var_0;
|
|
level.sunflare_settings[var_0] = var_1;
|
|
return var_1;
|
|
}
|
|
|
|
create_vision_set_fog( var_0 )
|
|
{
|
|
if ( !isdefined( level.vision_set_fog ) )
|
|
level.vision_set_fog = [];
|
|
|
|
var_1 = spawnstruct();
|
|
var_1.name = var_0;
|
|
var_1.hdrcolorintensity = 1;
|
|
var_1.hdrsuncolorintensity = 1;
|
|
var_1.skyfogintensity = 0;
|
|
var_1.skyfogminangle = 0;
|
|
var_1.skyfogmaxangle = 0;
|
|
level.vision_set_fog[tolower( var_0 )] = var_1;
|
|
return var_1;
|
|
}
|
|
|
|
get_vision_set_fog( var_0 )
|
|
{
|
|
if ( !isdefined( level.vision_set_fog ) )
|
|
level.vision_set_fog = [];
|
|
|
|
var_1 = level.vision_set_fog[tolower( var_0 )];
|
|
|
|
if ( using_hdr_fog() && isdefined( var_1 ) && isdefined( var_1.hdroverride ) )
|
|
var_1 = level.vision_set_fog[tolower( var_1.hdroverride )];
|
|
|
|
return var_1;
|
|
}
|
|
|
|
create_fog( var_0 )
|
|
{
|
|
if ( !isdefined( level.fog_set ) )
|
|
level.fog_set = [];
|
|
|
|
var_1 = spawnstruct();
|
|
var_1.name = var_0;
|
|
level.fog_set[tolower( var_0 )] = var_1;
|
|
return var_1;
|
|
}
|
|
|
|
get_fog( var_0 )
|
|
{
|
|
if ( !isdefined( level.fog_set ) )
|
|
level.fog_set = [];
|
|
|
|
var_1 = level.fog_set[tolower( var_0 )];
|
|
return var_1;
|
|
}
|
|
|
|
init_self_fog_transition()
|
|
{
|
|
if ( !isdefined( self.fog_transition_ent ) )
|
|
{
|
|
self.fog_transition_ent = spawnstruct();
|
|
self.fog_transition_ent.fogset = "";
|
|
self.fog_transition_ent.time = 0;
|
|
}
|
|
}
|
|
|
|
using_hdr_fog()
|
|
{
|
|
if ( !isdefined( level.console ) )
|
|
set_console_status();
|
|
|
|
return is_gen4();
|
|
}
|
|
|
|
fog_set_changes( var_0, var_1 )
|
|
{
|
|
if ( !isplayer( self ) )
|
|
maps\_art::init_fog_transition();
|
|
else
|
|
init_self_fog_transition();
|
|
|
|
if ( !isdefined( level.fog_set ) )
|
|
level.fog_set = [];
|
|
|
|
var_2 = level.fog_set[tolower( var_0 )];
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = level.vision_set_fog[tolower( var_0 )];
|
|
|
|
if ( isdefined( var_2 ) && isdefined( var_2.hdroverride ) && using_hdr_fog() )
|
|
{
|
|
if ( isdefined( level.fog_set[tolower( var_2.hdroverride )] ) )
|
|
var_2 = level.fog_set[tolower( var_2.hdroverride )];
|
|
else if ( isdefined( level.vision_set_fog ) )
|
|
var_2 = level.vision_set_fog[tolower( var_2.hdroverride )];
|
|
}
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = var_2.transitiontime;
|
|
|
|
if ( !isplayer( self ) )
|
|
{
|
|
set_fog_to_ent_values( var_2, var_1 );
|
|
level.fog_transition_ent.fogset = var_0;
|
|
level.fog_transition_ent.time = var_1;
|
|
}
|
|
else
|
|
{
|
|
if ( var_0 != "" && self.fog_transition_ent.fogset == var_0 && self.fog_transition_ent.time == var_1 )
|
|
return;
|
|
|
|
set_fog_to_ent_values( var_2, var_1 );
|
|
self.fog_transition_ent.fogset = var_0;
|
|
self.fog_transition_ent.time = var_1;
|
|
}
|
|
}
|
|
|
|
set_fog_to_ent_values( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_0.sunfogenabled ) && var_0.sunfogenabled )
|
|
{
|
|
if ( !isplayer( self ) )
|
|
setexpfog( var_0.startdist, var_0.halfwaydist, var_0.red, var_0.green, var_0.blue, var_0.hdrcolorintensity, var_0.maxopacity, var_1, var_0.sunred, var_0.sungreen, var_0.sunblue, var_0.hdrsuncolorintensity, var_0.sundir, var_0.sunbeginfadeangle, var_0.sunendfadeangle, var_0.normalfogscale, var_0.skyfogintensity, var_0.skyfogminangle, var_0.skyfogmaxangle );
|
|
else
|
|
self playersetexpfog( var_0.startdist, var_0.halfwaydist, var_0.red, var_0.green, var_0.blue, var_0.hdrcolorintensity, var_0.maxopacity, var_1, var_0.sunred, var_0.sungreen, var_0.sunblue, var_0.hdrsuncolorintensity, var_0.sundir, var_0.sunbeginfadeangle, var_0.sunendfadeangle, var_0.normalfogscale, var_0.skyfogintensity, var_0.skyfogminangle, var_0.skyfogmaxangle );
|
|
}
|
|
else if ( !isplayer( self ) )
|
|
setexpfog( var_0.startdist, var_0.halfwaydist, var_0.red, var_0.green, var_0.blue, var_0.hdrcolorintensity, var_0.maxopacity, var_1, var_0.skyfogintensity, var_0.skyfogminangle, var_0.skyfogmaxangle );
|
|
else
|
|
self playersetexpfog( var_0.startdist, var_0.halfwaydist, var_0.red, var_0.green, var_0.blue, var_0.hdrcolorintensity, var_0.maxopacity, var_1, var_0.skyfogintensity, var_0.skyfogminangle, var_0.skyfogmaxangle );
|
|
}
|
|
|
|
vision_set_fog_changes( var_0, var_1 )
|
|
{
|
|
var_2 = vision_set_changes( var_0, var_1 );
|
|
|
|
if ( var_2 )
|
|
{
|
|
if ( isdefined( get_vision_set_fog( var_0 ) ) )
|
|
fog_set_changes( var_0, var_1 );
|
|
else
|
|
clearfog( var_1 );
|
|
}
|
|
}
|
|
|
|
init_self_visionset()
|
|
{
|
|
if ( !isdefined( self.vision_set_transition_ent ) )
|
|
{
|
|
self.vision_set_transition_ent = spawnstruct();
|
|
self.vision_set_transition_ent.vision_set = "";
|
|
self.vision_set_transition_ent.time = 0;
|
|
}
|
|
}
|
|
|
|
vision_set_changes( var_0, var_1 )
|
|
{
|
|
if ( !isplayer( self ) )
|
|
{
|
|
var_2 = 1;
|
|
|
|
if ( !isdefined( level.vision_set_transition_ent ) )
|
|
{
|
|
level.vision_set_transition_ent = spawnstruct();
|
|
level.vision_set_transition_ent.vision_set = "";
|
|
level.vision_set_transition_ent.time = 0;
|
|
var_2 = 0;
|
|
}
|
|
|
|
if ( var_0 != "" && level.vision_set_transition_ent.vision_set == var_0 && level.vision_set_transition_ent.time == var_1 )
|
|
return 0;
|
|
|
|
level.vision_set_transition_ent.vision_set = var_0;
|
|
level.vision_set_transition_ent.time = var_1;
|
|
|
|
if ( var_2 && getdvarint( "scr_art_tweak" ) != 0 )
|
|
{
|
|
|
|
}
|
|
else
|
|
visionsetnaked( var_0, var_1 );
|
|
|
|
level.lvl_visionset = var_0;
|
|
setdvar( "vision_set_current", var_0 );
|
|
}
|
|
else
|
|
{
|
|
init_self_visionset();
|
|
|
|
if ( var_0 != "" && self.vision_set_transition_ent.vision_set == var_0 && self.vision_set_transition_ent.time == var_1 )
|
|
return 0;
|
|
|
|
self.vision_set_transition_ent.vision_set = var_0;
|
|
self.vision_set_transition_ent.time = var_1;
|
|
self visionsetnakedforplayer( var_0, var_1 );
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
enable_teamflashbangimmunity()
|
|
{
|
|
thread enable_teamflashbangimmunity_proc();
|
|
}
|
|
|
|
enable_teamflashbangimmunity_proc()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self.teamflashbangimmunity = 1;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
disable_teamflashbangimmunity()
|
|
{
|
|
self.teamflashbangimmunity = undefined;
|
|
}
|
|
|
|
mask_destructibles_in_volumes( var_0 )
|
|
{
|
|
var_1 = getentarray( "destructible_toy", "targetname" );
|
|
var_2 = getentarray( "destructible_vehicle", "targetname" );
|
|
var_3 = common_scripts\utility::array_combine( var_1, var_2 );
|
|
|
|
foreach ( var_5 in var_0 )
|
|
var_5.destructibles = [];
|
|
|
|
foreach ( var_8 in var_3 )
|
|
{
|
|
foreach ( var_5 in var_0 )
|
|
{
|
|
if ( !var_5 istouching( var_8 ) )
|
|
continue;
|
|
|
|
var_5 maps\_utility_code::put_toy_in_volume( var_8 );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
interactivekeypairs()
|
|
{
|
|
var_0 = [];
|
|
var_0[0] = [ "interactive_birds", "targetname" ];
|
|
var_0[1] = [ "interactive_vulture", "targetname" ];
|
|
var_0[2] = [ "interactive_fish", "script_noteworthy" ];
|
|
return var_0;
|
|
}
|
|
|
|
mask_interactives_in_volumes( var_0 )
|
|
{
|
|
var_1 = interactivekeypairs();
|
|
var_2 = [];
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
var_5 = getentarray( var_4[0], var_4[1] );
|
|
var_2 = common_scripts\utility::array_combine( var_2, var_5 );
|
|
}
|
|
|
|
foreach ( var_8 in var_2 )
|
|
{
|
|
if ( !isdefined( level._interactive[var_8.interactive_type].savetostructfn ) )
|
|
continue;
|
|
|
|
foreach ( var_11 in var_0 )
|
|
{
|
|
if ( !var_11 istouching( var_8 ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_11.interactives ) )
|
|
var_11.interactives = [];
|
|
|
|
var_11.interactives[var_11.interactives.size] = var_8 [[ level._interactive[var_8.interactive_type].savetostructfn ]]();
|
|
}
|
|
}
|
|
}
|
|
|
|
activate_interactives_in_volume()
|
|
{
|
|
if ( !isdefined( self.interactives ) )
|
|
return;
|
|
|
|
foreach ( var_1 in self.interactives )
|
|
var_1 [[ level._interactive[var_1.interactive_type].loadfromstructfn ]]();
|
|
|
|
self.interactives = undefined;
|
|
}
|
|
|
|
delete_interactives_in_volumes( var_0 )
|
|
{
|
|
mask_interactives_in_volumes( var_0 );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2.interactives = undefined;
|
|
}
|
|
|
|
mask_exploders_in_volume( var_0 )
|
|
{
|
|
if ( getdvar( "createfx" ) != "" )
|
|
return;
|
|
|
|
var_1 = getentarray( "script_brushmodel", "classname" );
|
|
var_2 = getentarray( "script_model", "classname" );
|
|
|
|
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
|
|
var_1[var_1.size] = var_2[var_3];
|
|
|
|
foreach ( var_5 in var_0 )
|
|
{
|
|
foreach ( var_7 in var_1 )
|
|
{
|
|
if ( isdefined( var_7.script_prefab_exploder ) )
|
|
var_7.script_exploder = var_7.script_prefab_exploder;
|
|
|
|
if ( !isdefined( var_7.script_exploder ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_7.model ) )
|
|
continue;
|
|
|
|
if ( var_7.code_classname != "script_model" )
|
|
continue;
|
|
|
|
if ( !var_7 istouching( var_5 ) )
|
|
continue;
|
|
|
|
var_7.masked_exploder = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
activate_exploders_in_volume()
|
|
{
|
|
var_0 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
|
|
foreach ( var_2 in level.createfxent )
|
|
{
|
|
if ( !isdefined( var_2.v["masked_exploder"] ) )
|
|
continue;
|
|
|
|
var_0.origin = var_2.v["origin"];
|
|
var_0.angles = var_2.v["angles"];
|
|
|
|
if ( !var_0 istouching( self ) )
|
|
continue;
|
|
|
|
var_3 = var_2.v["masked_exploder"];
|
|
var_4 = var_2.v["masked_exploder_spawnflags"];
|
|
var_5 = var_2.v["masked_exploder_script_disconnectpaths"];
|
|
var_6 = spawn( "script_model", ( 0, 0, 0 ), var_4 );
|
|
var_6 setmodel( var_3 );
|
|
var_6.origin = var_2.v["origin"];
|
|
var_6.angles = var_2.v["angles"];
|
|
var_2.v["masked_exploder"] = undefined;
|
|
var_2.v["masked_exploder_spawnflags"] = undefined;
|
|
var_2.v["masked_exploder_script_disconnectpaths"] = undefined;
|
|
var_6.disconnect_paths = var_5;
|
|
var_6.script_exploder = var_2.v["exploder"];
|
|
common_scripts\_exploder::setup_individual_exploder( var_6 );
|
|
var_2.model = var_6;
|
|
}
|
|
|
|
var_0 delete();
|
|
}
|
|
|
|
precache_destructible( var_0 )
|
|
{
|
|
var_1 = common_scripts\_destructible::destructible_getinfoindex( var_0 );
|
|
|
|
if ( var_1 != -1 )
|
|
return;
|
|
|
|
if ( !isdefined( level.destructible_functions ) )
|
|
level.destructible_functions = [];
|
|
|
|
var_2 = spawnstruct();
|
|
var_2.destructibleinfo = common_scripts\_destructible::destructible_gettype( var_0 );
|
|
var_2 thread common_scripts\_destructible::precache_destructibles();
|
|
var_2 thread common_scripts\_destructible::add_destructible_fx();
|
|
}
|
|
|
|
delete_destructibles_in_volumes( var_0, var_1 )
|
|
{
|
|
foreach ( var_3 in var_0 )
|
|
var_3.destructibles = [];
|
|
|
|
var_5 = [ "destructible_toy", "destructible_vehicle" ];
|
|
var_6 = 0;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
foreach ( var_8 in var_5 )
|
|
{
|
|
var_9 = getentarray( var_8, "targetname" );
|
|
|
|
foreach ( var_11 in var_9 )
|
|
{
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( var_1 )
|
|
{
|
|
var_6++;
|
|
var_6 = var_6 % 5;
|
|
|
|
if ( var_6 == 1 )
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( !var_3 istouching( var_11 ) )
|
|
continue;
|
|
|
|
var_11 delete();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
delete_exploders_in_volumes( var_0, var_1 )
|
|
{
|
|
var_2 = getentarray( "script_brushmodel", "classname" );
|
|
var_3 = getentarray( "script_model", "classname" );
|
|
|
|
for ( var_4 = 0; var_4 < var_3.size; var_4++ )
|
|
var_2[var_2.size] = var_3[var_4];
|
|
|
|
var_5 = [];
|
|
var_6 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_7 = 0;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
foreach ( var_9 in var_0 )
|
|
{
|
|
foreach ( var_11 in var_2 )
|
|
{
|
|
if ( !isdefined( var_11.script_exploder ) )
|
|
continue;
|
|
|
|
var_6.origin = var_11 getorigin();
|
|
|
|
if ( !var_9 istouching( var_6 ) )
|
|
continue;
|
|
|
|
var_5[var_5.size] = var_11;
|
|
}
|
|
}
|
|
|
|
array_delete( var_5 );
|
|
var_6 delete();
|
|
}
|
|
|
|
activate_destructibles_in_volume()
|
|
{
|
|
if ( !isdefined( self.destructibles ) )
|
|
return;
|
|
|
|
foreach ( var_1 in self.destructibles )
|
|
{
|
|
var_2 = spawn( "script_model", ( 0, 0, 0 ) );
|
|
var_2 setmodel( var_1.toy_model );
|
|
var_2.origin = var_1.origin;
|
|
var_2.angles = var_1.angles;
|
|
var_2.script_noteworthy = var_1.script_noteworthy;
|
|
var_2.targetname = var_1.targetname;
|
|
var_2.target = var_1.target;
|
|
var_2.script_linkto = var_1.script_linkto;
|
|
var_2.destructible_type = var_1.destructible_type;
|
|
var_2.script_noflip = var_1.script_noflip;
|
|
var_2 common_scripts\_destructible::setup_destructibles( 1 );
|
|
}
|
|
|
|
self.destructibles = [];
|
|
}
|
|
|
|
setflashbangimmunity( var_0 )
|
|
{
|
|
self.flashbangimmunity = var_0;
|
|
}
|
|
|
|
flashbanggettimeleftsec()
|
|
{
|
|
var_0 = self.flashendtime - gettime();
|
|
|
|
if ( var_0 < 0 )
|
|
return 0;
|
|
|
|
return var_0 * 0.001;
|
|
}
|
|
|
|
flashbangisactive()
|
|
{
|
|
return flashbanggettimeleftsec() > 0;
|
|
}
|
|
|
|
flashbangstart( var_0 )
|
|
{
|
|
if ( isdefined( self.flashbangimmunity ) && self.flashbangimmunity )
|
|
return;
|
|
|
|
var_1 = gettime() + var_0 * 1000.0;
|
|
|
|
if ( isdefined( self.flashendtime ) )
|
|
self.flashendtime = max( self.flashendtime, var_1 );
|
|
else
|
|
self.flashendtime = var_1;
|
|
|
|
self notify( "flashed" );
|
|
self setflashbanged( 1 );
|
|
}
|
|
|
|
waittill_volume_dead()
|
|
{
|
|
for (;;)
|
|
{
|
|
var_0 = getaispeciesarray( "axis", "all" );
|
|
var_1 = 0;
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( !isalive( var_3 ) )
|
|
continue;
|
|
|
|
if ( var_3 istouching( self ) )
|
|
{
|
|
var_1 = 1;
|
|
break;
|
|
}
|
|
|
|
wait 0.0125;
|
|
}
|
|
|
|
if ( !var_1 )
|
|
{
|
|
var_5 = get_ai_touching_volume( "axis" );
|
|
|
|
if ( !var_5.size )
|
|
break;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
waittill_volume_dead_or_dying()
|
|
{
|
|
var_0 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = getaispeciesarray( "axis", "all" );
|
|
var_2 = 0;
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
if ( !isalive( var_4 ) )
|
|
continue;
|
|
|
|
if ( var_4 istouching( self ) )
|
|
{
|
|
if ( var_4 doinglongdeath() )
|
|
continue;
|
|
|
|
var_2 = 1;
|
|
var_0 = 1;
|
|
break;
|
|
}
|
|
|
|
wait 0.0125;
|
|
}
|
|
|
|
if ( !var_2 )
|
|
{
|
|
var_6 = get_ai_touching_volume( "axis" );
|
|
|
|
if ( !var_6.size )
|
|
break;
|
|
else
|
|
var_0 = 1;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
waittill_volume_dead_then_set_flag( var_0 )
|
|
{
|
|
waittill_volume_dead();
|
|
common_scripts\utility::flag_set( var_0 );
|
|
}
|
|
|
|
waittill_targetname_volume_dead_then_set_flag( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_0, "targetname" );
|
|
var_2 waittill_volume_dead_then_set_flag( var_1 );
|
|
}
|
|
|
|
player_can_be_shot()
|
|
{
|
|
level.player ent_flag_clear( "player_zero_attacker_accuracy" );
|
|
level.player.ignorerandombulletdamage = 0;
|
|
level.player maps\_gameskill::update_player_attacker_accuracy();
|
|
}
|
|
|
|
player_cant_be_shot()
|
|
{
|
|
level.player ent_flag_set( "player_zero_attacker_accuracy" );
|
|
level.player.attackeraccuracy = 0;
|
|
level.player.ignorerandombulletdamage = 1;
|
|
}
|
|
|
|
set_player_attacker_accuracy( var_0 )
|
|
{
|
|
var_1 = get_player_from_self();
|
|
var_1.gs.player_attacker_accuracy = var_0;
|
|
var_1 maps\_gameskill::update_player_attacker_accuracy();
|
|
}
|
|
|
|
array_index_by_parameters( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in var_0 )
|
|
var_1[var_3.script_parameters] = var_3;
|
|
|
|
return var_1;
|
|
}
|
|
|
|
array_index_by_classname( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in var_0 )
|
|
var_1[var_3.classname] = var_3;
|
|
|
|
return var_1;
|
|
}
|
|
|
|
array_index_by_script_index( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
var_4 = var_3.script_index;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_1[var_4] = var_3;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
add_target_pivot( var_0 )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
self.pivot = var_0;
|
|
else
|
|
self.pivot = getent( self.target, "targetname" );
|
|
|
|
self linkto( self.pivot );
|
|
}
|
|
|
|
get_color_volume_from_trigger()
|
|
{
|
|
var_0 = maps\_utility_code::get_color_info_from_trigger();
|
|
var_1 = var_0["team"];
|
|
|
|
foreach ( var_3 in var_0["codes"] )
|
|
{
|
|
var_4 = level.arrays_of_colorcoded_volumes[var_1][var_3];
|
|
|
|
if ( isdefined( var_4 ) )
|
|
return var_4;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
get_color_nodes_from_trigger()
|
|
{
|
|
var_0 = maps\_utility_code::get_color_info_from_trigger();
|
|
var_1 = var_0["team"];
|
|
|
|
foreach ( var_3 in var_0["codes"] )
|
|
{
|
|
var_4 = level.arrays_of_colorcoded_nodes[var_1][var_3];
|
|
|
|
if ( isdefined( var_4 ) )
|
|
return var_4;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
flashbangstop()
|
|
{
|
|
self.flashendtime = undefined;
|
|
self setflashbanged( 0 );
|
|
}
|
|
|
|
getent_or_struct( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_0, var_1 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
return var_2;
|
|
|
|
return common_scripts\utility::getstruct( var_0, var_1 );
|
|
}
|
|
|
|
grenade_earthquake()
|
|
{
|
|
thread endondeath();
|
|
self endon( "end_explode" );
|
|
self waittill( "explode", var_0 );
|
|
dirt_on_screen_from_position( var_0 );
|
|
}
|
|
|
|
endondeath()
|
|
{
|
|
self waittill( "death" );
|
|
waittillframeend;
|
|
self notify( "end_explode" );
|
|
}
|
|
|
|
dirt_on_screen_from_position( var_0 )
|
|
{
|
|
playrumbleonposition( "grenade_rumble", var_0 );
|
|
earthquake( 0.3, 0.5, var_0, 400 );
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( distance( var_0, var_2.origin ) > 600 )
|
|
continue;
|
|
|
|
if ( var_2 damageconetrace( var_0 ) )
|
|
var_2 thread dirteffect( var_0 );
|
|
}
|
|
}
|
|
|
|
player_rides_shotgun_in_humvee( var_0, var_1, var_2, var_3 )
|
|
{
|
|
return player_rides_in_humvee( "shotgun", level.player, var_0, var_1, var_2, var_3 );
|
|
}
|
|
|
|
player_rides_in_humvee( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = level.player;
|
|
|
|
var_1 allowcrouch( 0 );
|
|
var_1 allowprone( 0 );
|
|
var_1 disableweapons();
|
|
var_6 = common_scripts\utility::spawn_tag_origin();
|
|
var_6 linkto( self, "tag_passenger", player_rides_in_humvee_offset( var_0 ), ( 0, 0, 0 ) );
|
|
var_6.player_dismount = common_scripts\utility::spawn_tag_origin();
|
|
var_6.player_dismount linkto( self, "tag_body", player_rides_humvee_offset_dismount( var_0 ), ( 0, 0, 0 ) );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 90;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 90;
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = 40;
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = 40;
|
|
|
|
var_1 disableweapons();
|
|
var_1 playerlinkto( var_6, "tag_origin", 0.8, var_2, var_3, var_4, var_5 );
|
|
var_1.humvee_org = var_6;
|
|
return var_6;
|
|
}
|
|
|
|
player_rides_in_humvee_offset( var_0 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "shotgun":
|
|
return ( -5, 10, -34 );
|
|
case "backleft":
|
|
return ( -45, 45, -34 );
|
|
case "backright":
|
|
return ( -45, 5, -34 );
|
|
}
|
|
}
|
|
|
|
player_rides_humvee_offset_dismount( var_0 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "shotgun":
|
|
return ( -8, -90, -12.6 );
|
|
case "backleft":
|
|
return ( -58, 85, -12.6 );
|
|
case "backright":
|
|
return ( -58, -95, -12.6 );
|
|
}
|
|
}
|
|
|
|
player_leaves_humvee( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 0;
|
|
|
|
var_1 = self;
|
|
var_2 = level.player;
|
|
|
|
if ( isplayer( self ) )
|
|
{
|
|
var_2 = self;
|
|
var_1 = var_2.humvee_org;
|
|
}
|
|
|
|
var_1 unlink();
|
|
|
|
if ( !var_0 )
|
|
{
|
|
var_3 = 0.6;
|
|
var_1 moveto( var_1.player_dismount.origin, var_3, var_3 * 0.5, var_3 * 0.5 );
|
|
wait( var_3 );
|
|
}
|
|
|
|
var_2 unlink();
|
|
var_2 enableweapons();
|
|
var_2 allowcrouch( 1 );
|
|
var_2 allowprone( 1 );
|
|
var_2.humvee_org = undefined;
|
|
var_1.player_dismount delete();
|
|
var_1 delete();
|
|
}
|
|
|
|
dirteffect( var_0, var_1 )
|
|
{
|
|
var_2 = screen_effect_sides( var_0 );
|
|
|
|
foreach ( var_5, var_4 in var_2 )
|
|
thread maps\_gameskill::grenade_dirt_on_screen( var_5 );
|
|
}
|
|
|
|
bloodsplateffect( var_0 )
|
|
{
|
|
if ( !isdefined( self.damageattacker ) )
|
|
return;
|
|
|
|
var_1 = screen_effect_sides( self.damageattacker.origin );
|
|
|
|
foreach ( var_4, var_3 in var_1 )
|
|
thread maps\_gameskill::blood_splat_on_screen( var_4 );
|
|
}
|
|
|
|
screen_effect_sides( var_0 )
|
|
{
|
|
var_1 = vectornormalize( anglestoforward( self.angles ) );
|
|
var_2 = vectornormalize( anglestoright( self.angles ) );
|
|
var_3 = vectornormalize( var_0 - self.origin );
|
|
var_4 = vectordot( var_3, var_1 );
|
|
var_5 = vectordot( var_3, var_2 );
|
|
var_6 = [];
|
|
var_7 = self getcurrentweapon();
|
|
|
|
if ( var_4 > 0 && var_4 > 0.5 && weapontype( var_7 ) != "riotshield" )
|
|
var_6["bottom"] = 1;
|
|
|
|
if ( abs( var_4 ) < 0.866 )
|
|
{
|
|
if ( var_5 > 0 )
|
|
var_6["right"] = 1;
|
|
else
|
|
var_6["left"] = 1;
|
|
}
|
|
|
|
return var_6;
|
|
}
|
|
|
|
pathrandompercent_set( var_0 )
|
|
{
|
|
if ( !isdefined( self.old_pathrandompercent ) )
|
|
self.old_pathrandompercent = self.pathrandompercent;
|
|
|
|
self.pathrandompercent = var_0;
|
|
}
|
|
|
|
pathrandompercent_zero()
|
|
{
|
|
if ( isdefined( self.old_pathrandompercent ) )
|
|
return;
|
|
|
|
self.old_pathrandompercent = self.pathrandompercent;
|
|
self.pathrandompercent = 0;
|
|
}
|
|
|
|
pathrandompercent_reset()
|
|
{
|
|
self.pathrandompercent = self.old_pathrandompercent;
|
|
self.old_pathrandompercent = undefined;
|
|
}
|
|
|
|
walkdist_zero()
|
|
{
|
|
if ( isdefined( self.old_walkdistfacingmotion ) )
|
|
return;
|
|
|
|
self.old_walkdist = self.walkdist;
|
|
self.old_walkdistfacingmotion = self.walkdistfacingmotion;
|
|
self.walkdist = 0;
|
|
self.walkdistfacingmotion = 0;
|
|
}
|
|
|
|
walkdist_reset()
|
|
{
|
|
self.walkdist = self.old_walkdist;
|
|
self.walkdistfacingmotion = self.old_walkdistfacingmotion;
|
|
self.old_walkdist = undefined;
|
|
self.old_walkdistfacingmotion = undefined;
|
|
}
|
|
|
|
enable_ignorerandombulletdamage_drone()
|
|
{
|
|
thread ignorerandombulletdamage_drone_proc();
|
|
}
|
|
|
|
ignorerandombulletdamage_drone_proc()
|
|
{
|
|
self endon( "disable_ignorerandombulletdamage_drone" );
|
|
self endon( "death" );
|
|
self.ignorerandombulletdamage = 1;
|
|
self.fakehealth = self.health;
|
|
self.health = 1000000;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_0, var_1 );
|
|
|
|
if ( !isplayer( var_1 ) && issentient( var_1 ) )
|
|
{
|
|
if ( isdefined( var_1.enemy ) && var_1.enemy != self )
|
|
continue;
|
|
}
|
|
|
|
self.fakehealth = self.fakehealth - var_0;
|
|
|
|
if ( self.fakehealth <= 0 )
|
|
break;
|
|
}
|
|
|
|
self kill();
|
|
}
|
|
|
|
hide_notsolid()
|
|
{
|
|
if ( !isdefined( self.oldcontents ) )
|
|
self.oldcontents = self setcontents( 0 );
|
|
|
|
self hide();
|
|
}
|
|
|
|
show_solid()
|
|
{
|
|
if ( !isai( self ) )
|
|
self solid();
|
|
|
|
if ( isdefined( self.oldcontents ) )
|
|
self setcontents( self.oldcontents );
|
|
|
|
self show();
|
|
}
|
|
|
|
set_brakes( var_0 )
|
|
{
|
|
self.veh_brake = var_0;
|
|
}
|
|
|
|
disable_ignorerandombulletdamage_drone()
|
|
{
|
|
if ( !isalive( self ) )
|
|
return;
|
|
|
|
if ( !isdefined( self.ignorerandombulletdamage ) )
|
|
return;
|
|
|
|
self notify( "disable_ignorerandombulletdamage_drone" );
|
|
self.ignorerandombulletdamage = undefined;
|
|
self.health = self.fakehealth;
|
|
}
|
|
|
|
timeoutent( var_0 )
|
|
{
|
|
var_1 = spawnstruct();
|
|
var_1 delaythread( var_0, ::send_notify, "timeout" );
|
|
return var_1;
|
|
}
|
|
|
|
delaythread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
thread maps\_utility_code::delaythread_proc( var_1, var_0, var_2, var_3, var_4, var_5, var_6, var_7 );
|
|
}
|
|
|
|
delaychildthread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
childthread maps\_utility_code::delaychildthread_proc( var_1, var_0, var_2, var_3, var_4, var_5, var_6, var_7 );
|
|
}
|
|
|
|
flagwaitthread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
if ( !isarray( var_0 ) )
|
|
var_0 = [ var_0, 0 ];
|
|
|
|
thread maps\_utility_code::flagwaitthread_proc( var_1, var_0, var_2, var_3, var_4, var_5, var_6, var_7 );
|
|
}
|
|
|
|
waittillthread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( !isarray( var_0 ) )
|
|
var_0 = [ var_0, 0 ];
|
|
|
|
thread maps\_utility_code::waittillthread_proc( var_1, var_0, var_2, var_3, var_4, var_5, var_6, var_7 );
|
|
}
|
|
|
|
enable_danger_react( var_0 )
|
|
{
|
|
var_0 = var_0 * 1000;
|
|
self.dodangerreact = 1;
|
|
self.dangerreactduration = var_0;
|
|
self.neversprintforvariation = undefined;
|
|
}
|
|
|
|
disable_danger_react()
|
|
{
|
|
self.dodangerreact = 0;
|
|
self.neversprintforvariation = 1;
|
|
}
|
|
|
|
set_group_advance_to_enemy_parameters( var_0, var_1 )
|
|
{
|
|
level.advancetoenemyinterval = var_0;
|
|
level.advancetoenemygroupmax = var_1;
|
|
}
|
|
|
|
reset_group_advance_to_enemy_timer( var_0 )
|
|
{
|
|
level.lastadvancetoenemytime[var_0] = gettime();
|
|
}
|
|
|
|
set_custom_gameskill_func( var_0 )
|
|
{
|
|
level.custom_gameskill_func = var_0;
|
|
thread maps\_gameskill::resetskill();
|
|
}
|
|
|
|
clear_custom_gameskill_func()
|
|
{
|
|
level.custom_gameskill_func = undefined;
|
|
thread maps\_gameskill::resetskill();
|
|
}
|
|
|
|
set_wind( var_0, var_1, var_2 )
|
|
{
|
|
maps\_animatedmodels::init_wind_if_uninitialized();
|
|
|
|
if ( isdefined( var_2 ) )
|
|
level.wind.variance = var_2;
|
|
|
|
level.wind.rate = var_1;
|
|
level.wind.weight = var_0;
|
|
level notify( "windchange", "strong" );
|
|
}
|
|
|
|
string_is_single_digit_integer( var_0 )
|
|
{
|
|
if ( var_0.size > 1 )
|
|
return 0;
|
|
|
|
var_1 = [];
|
|
var_1["0"] = 1;
|
|
var_1["1"] = 1;
|
|
var_1["2"] = 1;
|
|
var_1["3"] = 1;
|
|
var_1["4"] = 1;
|
|
var_1["5"] = 1;
|
|
var_1["6"] = 1;
|
|
var_1["7"] = 1;
|
|
var_1["8"] = 1;
|
|
var_1["9"] = 1;
|
|
|
|
if ( isdefined( var_1[var_0] ) )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
set_battlechatter_variable( var_0, var_1 )
|
|
{
|
|
level.battlechatter[var_0] = var_1;
|
|
maps\_utility_code::update_battlechatter_hud();
|
|
}
|
|
|
|
objective_clearadditionalpositions( var_0 )
|
|
{
|
|
for ( var_1 = 0; var_1 < 8; var_1++ )
|
|
objective_additionalposition( var_0, var_1, ( 0, 0, 0 ) );
|
|
}
|
|
|
|
get_minutes_and_seconds( var_0 )
|
|
{
|
|
var_1 = [];
|
|
var_1["minutes"] = 0;
|
|
|
|
for ( var_1["seconds"] = int( var_0 / 1000 ); var_1["seconds"] >= 60; var_1["seconds"] = var_1["seconds"] - 60 )
|
|
var_1["minutes"]++;
|
|
|
|
if ( var_1["seconds"] < 10 )
|
|
var_1["seconds"] = "0" + var_1["seconds"];
|
|
|
|
return var_1;
|
|
}
|
|
|
|
player_has_weapon( var_0 )
|
|
{
|
|
var_1 = level.player getweaponslistprimaries();
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( var_3 == var_0 )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
obj( var_0 )
|
|
{
|
|
if ( !isdefined( level.obj_array ) )
|
|
level.obj_array = [];
|
|
|
|
if ( !isdefined( level.obj_array[var_0] ) )
|
|
level.obj_array[var_0] = level.obj_array.size + 1;
|
|
|
|
return level.obj_array[var_0];
|
|
}
|
|
|
|
obj_exists( var_0 )
|
|
{
|
|
return isdefined( level.obj_array ) && isdefined( level.obj_array[var_0] );
|
|
}
|
|
|
|
player_mount_vehicle( var_0 )
|
|
{
|
|
self mountvehicle( var_0 );
|
|
self.drivingvehicle = var_0;
|
|
}
|
|
|
|
player_dismount_vehicle()
|
|
{
|
|
self dismountvehicle();
|
|
self.drivingvehicle = undefined;
|
|
}
|
|
|
|
graph_position( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = var_4 - var_2;
|
|
var_6 = var_3 - var_1;
|
|
var_7 = var_5 / var_6;
|
|
var_0 = var_0 - var_3;
|
|
var_0 = var_7 * var_0;
|
|
var_0 = var_0 + var_4;
|
|
return var_0;
|
|
}
|
|
|
|
enable_achievement_harder_they_fall()
|
|
{
|
|
self.rappeller = 1;
|
|
}
|
|
|
|
disable_achievement_harder_they_fall()
|
|
{
|
|
self.rappeller = undefined;
|
|
}
|
|
|
|
enable_achievement_harder_they_fall_guy( var_0 )
|
|
{
|
|
var_0 enable_achievement_harder_they_fall();
|
|
}
|
|
|
|
disable_achievement_harder_they_fall_guy( var_0 )
|
|
{
|
|
var_0 disable_achievement_harder_they_fall();
|
|
}
|
|
|
|
musiclength( var_0 )
|
|
{
|
|
var_1 = lookupsoundlength( var_0 );
|
|
var_1 = var_1 * 0.001;
|
|
return var_1;
|
|
}
|
|
|
|
is_command_bound( var_0 )
|
|
{
|
|
var_1 = getkeybinding( var_0 );
|
|
return var_1["count"];
|
|
}
|
|
|
|
linear_interpolate( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = var_2 - var_1;
|
|
var_4 = var_0 * var_3;
|
|
var_5 = var_1 + var_4;
|
|
return var_5;
|
|
}
|
|
|
|
define_loadout( var_0 )
|
|
{
|
|
level.loadout = var_0;
|
|
}
|
|
|
|
template_level( var_0 )
|
|
{
|
|
define_loadout( var_0 );
|
|
level.template_script = var_0;
|
|
}
|
|
|
|
template_so_level( var_0 )
|
|
{
|
|
level.audio_stringtable_mapname = var_0;
|
|
}
|
|
|
|
fx_volume_pause_noteworthy( var_0, var_1 )
|
|
{
|
|
thread fx_volume_pause_noteworthy_thread( var_0, var_1 );
|
|
}
|
|
|
|
fx_volume_pause_noteworthy_thread( var_0, var_1 )
|
|
{
|
|
var_2 = getent( var_0, "script_noteworthy" );
|
|
var_2 notify( "new_volume_command" );
|
|
var_2 endon( "new_volume_command" );
|
|
wait 0.05;
|
|
fx_volume_pause( var_2, var_1 );
|
|
}
|
|
|
|
fx_volume_pause( var_0, var_1 )
|
|
{
|
|
var_0.fx_paused = 1;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
if ( var_1 )
|
|
array_thread_mod_delayed( var_0.fx, common_scripts\utility::pauseeffect );
|
|
else
|
|
common_scripts\utility::array_thread( var_0.fx, common_scripts\utility::pauseeffect );
|
|
}
|
|
|
|
array_thread_mod_delayed( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = 0;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 5;
|
|
|
|
var_4 = [];
|
|
|
|
foreach ( var_6 in var_0 )
|
|
{
|
|
var_4[var_4.size] = var_6;
|
|
var_3++;
|
|
var_3 = var_3 % var_2;
|
|
|
|
if ( var_2 == 0 )
|
|
{
|
|
common_scripts\utility::array_thread( var_4, var_1 );
|
|
wait 0.05;
|
|
var_4 = [];
|
|
}
|
|
}
|
|
}
|
|
|
|
fx_volume_restart_noteworthy( var_0 )
|
|
{
|
|
thread fx_volume_restart_noteworthy_thread( var_0 );
|
|
}
|
|
|
|
fx_volume_restart_noteworthy_thread( var_0 )
|
|
{
|
|
var_1 = getent( var_0, "script_noteworthy" );
|
|
var_1 notify( "new_volume_command" );
|
|
var_1 endon( "new_volume_command" );
|
|
wait 0.05;
|
|
|
|
if ( !isdefined( var_1.fx_paused ) )
|
|
return;
|
|
|
|
var_1.fx_paused = undefined;
|
|
fx_volume_restart( var_1 );
|
|
}
|
|
|
|
fx_volume_restart( var_0 )
|
|
{
|
|
common_scripts\utility::array_thread( var_0.fx, ::restarteffect );
|
|
}
|
|
|
|
flag_count_increment( var_0 )
|
|
{
|
|
if ( !isdefined( level.flag_count ) )
|
|
level.flag_count = [];
|
|
|
|
if ( !isdefined( level.flag_count[var_0] ) )
|
|
level.flag_count[var_0] = 1;
|
|
else
|
|
level.flag_count[var_0]++;
|
|
}
|
|
|
|
flag_count_decrement( var_0 )
|
|
{
|
|
level.flag_count[var_0]--;
|
|
level.flag_count[var_0] = int( max( 0, level.flag_count[var_0] ) );
|
|
|
|
if ( level.flag_count[var_0] )
|
|
return;
|
|
|
|
common_scripts\utility::flag_set( var_0 );
|
|
}
|
|
|
|
flag_count_set( var_0, var_1 )
|
|
{
|
|
level.flag_count[var_0] = var_1;
|
|
}
|
|
|
|
add_cleanup_ent( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( level.cleanup_ents ) )
|
|
level.cleanup_ents = [];
|
|
|
|
if ( !isdefined( level.cleanup_ents[var_1] ) )
|
|
level.cleanup_ents[var_1] = [];
|
|
|
|
level.cleanup_ents[var_1][level.cleanup_ents[var_1].size] = var_0;
|
|
}
|
|
|
|
cleanup_ents( var_0 )
|
|
{
|
|
var_1 = level.cleanup_ents[var_0];
|
|
var_1 = common_scripts\utility::array_removeundefined( var_1 );
|
|
array_delete( var_1 );
|
|
level.cleanup_ents[var_0] = undefined;
|
|
}
|
|
|
|
cleanup_ents_removing_bullet_shield( var_0 )
|
|
{
|
|
if ( !isdefined( level.cleanup_ents ) )
|
|
return;
|
|
|
|
if ( !isdefined( level.cleanup_ents[var_0] ) )
|
|
return;
|
|
|
|
var_1 = level.cleanup_ents[var_0];
|
|
var_1 = common_scripts\utility::array_removeundefined( var_1 );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( !isai( var_3 ) )
|
|
continue;
|
|
|
|
if ( !isalive( var_3 ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_3.magic_bullet_shield ) )
|
|
continue;
|
|
|
|
if ( !var_3.magic_bullet_shield )
|
|
continue;
|
|
|
|
var_3 stop_magic_bullet_shield();
|
|
}
|
|
|
|
array_delete( var_1 );
|
|
level.cleanup_ents[var_0] = undefined;
|
|
}
|
|
|
|
add_trigger_function( var_0 )
|
|
{
|
|
if ( !isdefined( self.trigger_functions ) )
|
|
thread maps\_utility_code::add_trigger_func_thread();
|
|
|
|
self.trigger_functions[self.trigger_functions.size] = var_0;
|
|
}
|
|
|
|
getallweapons()
|
|
{
|
|
var_0 = [];
|
|
var_1 = getentarray();
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( !isdefined( var_3.classname ) )
|
|
continue;
|
|
|
|
if ( issubstr( var_3.classname, "weapon_" ) )
|
|
var_0[var_0.size] = var_3;
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
radio_add( var_0 )
|
|
{
|
|
level.scr_radio[var_0] = var_0;
|
|
}
|
|
|
|
move_with_rate( var_0, var_1, var_2 )
|
|
{
|
|
self notify( "newmove" );
|
|
self endon( "newmove" );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 200;
|
|
|
|
var_3 = distance( self.origin, var_0 );
|
|
var_4 = var_3 / var_2;
|
|
var_5 = vectornormalize( var_0 - self.origin );
|
|
self moveto( var_0, var_4, 0, 0 );
|
|
self rotateto( var_1, var_4, 0, 0 );
|
|
wait( var_4 );
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
self.velocity = var_5 * ( var_3 / var_4 );
|
|
}
|
|
|
|
flag_on_death( var_0 )
|
|
{
|
|
level endon( var_0 );
|
|
self waittill( "death" );
|
|
common_scripts\utility::flag_set( var_0 );
|
|
}
|
|
|
|
enable_damagefeedback()
|
|
{
|
|
level.damagefeedback = 1;
|
|
}
|
|
|
|
disable_damagefeedback()
|
|
{
|
|
level.damagefeedback = 0;
|
|
}
|
|
|
|
is_damagefeedback_enabled()
|
|
{
|
|
return isdefined( level.damagefeedback ) && level.damagefeedback;
|
|
}
|
|
|
|
add_damagefeedback()
|
|
{
|
|
maps\_damagefeedback::monitordamage();
|
|
}
|
|
|
|
remove_damagefeedback()
|
|
{
|
|
maps\_damagefeedback::stopmonitordamage();
|
|
}
|
|
|
|
is_demo()
|
|
{
|
|
if ( getdvar( "e3demo" ) == "1" )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
deletestructarray( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = common_scripts\utility::getstructarray( var_0, var_1 );
|
|
deletestructarray_ref( var_3, var_2 );
|
|
}
|
|
|
|
deletestruct_ref( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
var_1 = var_0.script_linkname;
|
|
|
|
if ( isdefined( var_1 ) && isdefined( level.struct_class_names["script_linkname"] ) && isdefined( level.struct_class_names["script_linkname"][var_1] ) )
|
|
{
|
|
foreach ( var_4, var_3 in level.struct_class_names["script_linkname"][var_1] )
|
|
{
|
|
if ( isdefined( var_3 ) && var_0 == var_3 )
|
|
level.struct_class_names["script_linkname"][var_1][var_4] = undefined;
|
|
}
|
|
|
|
if ( level.struct_class_names["script_linkname"][var_1].size == 0 )
|
|
level.struct_class_names["script_linkname"][var_1] = undefined;
|
|
}
|
|
|
|
var_1 = var_0.script_noteworthy;
|
|
|
|
if ( isdefined( var_1 ) && isdefined( level.struct_class_names["script_noteworthy"] ) && isdefined( level.struct_class_names["script_noteworthy"][var_1] ) )
|
|
{
|
|
foreach ( var_4, var_3 in level.struct_class_names["script_noteworthy"][var_1] )
|
|
{
|
|
if ( isdefined( var_3 ) && var_0 == var_3 )
|
|
level.struct_class_names["script_noteworthy"][var_1][var_4] = undefined;
|
|
}
|
|
|
|
if ( level.struct_class_names["script_noteworthy"][var_1].size == 0 )
|
|
level.struct_class_names["script_noteworthy"][var_1] = undefined;
|
|
}
|
|
|
|
var_1 = var_0.target;
|
|
|
|
if ( isdefined( var_1 ) && isdefined( level.struct_class_names["target"] ) && isdefined( level.struct_class_names["target"][var_1] ) )
|
|
{
|
|
foreach ( var_4, var_3 in level.struct_class_names["target"][var_1] )
|
|
{
|
|
if ( isdefined( var_3 ) && var_0 == var_3 )
|
|
level.struct_class_names["target"][var_1][var_4] = undefined;
|
|
}
|
|
|
|
if ( level.struct_class_names["target"][var_1].size == 0 )
|
|
level.struct_class_names["target"][var_1] = undefined;
|
|
}
|
|
|
|
var_1 = var_0.targetname;
|
|
|
|
if ( isdefined( var_1 ) && isdefined( level.struct_class_names["targetname"] ) && isdefined( level.struct_class_names["targetname"][var_1] ) )
|
|
{
|
|
foreach ( var_4, var_3 in level.struct_class_names["targetname"][var_1] )
|
|
{
|
|
if ( isdefined( var_3 ) && var_0 == var_3 )
|
|
level.struct_class_names["targetname"][var_1][var_4] = undefined;
|
|
}
|
|
|
|
if ( level.struct_class_names["targetname"][var_1].size == 0 )
|
|
level.struct_class_names["targetname"][var_1] = undefined;
|
|
}
|
|
|
|
if ( isdefined( level.struct ) )
|
|
{
|
|
foreach ( var_4, var_3 in level.struct )
|
|
{
|
|
if ( var_0 == var_3 )
|
|
level.struct[var_4] = undefined;
|
|
}
|
|
}
|
|
}
|
|
|
|
deletestructarray_ref( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_0 ) || !isarray( var_0 ) || var_0.size == 0 )
|
|
return;
|
|
|
|
var_1 = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, 0 );
|
|
var_1 = common_scripts\utility::ter_op( var_1 > 0, var_1, 0 );
|
|
|
|
if ( var_1 > 0 )
|
|
{
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
deletestruct_ref( var_3 );
|
|
wait( var_1 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_3 in var_0 )
|
|
deletestruct_ref( var_3 );
|
|
}
|
|
}
|
|
|
|
getstruct_delete( var_0, var_1 )
|
|
{
|
|
var_2 = common_scripts\utility::getstruct( var_0, var_1 );
|
|
deletestruct_ref( var_2 );
|
|
return var_2;
|
|
}
|
|
|
|
getstructarray_delete( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = common_scripts\utility::getstructarray( var_0, var_1 );
|
|
deletestructarray_ref( var_3, var_2 );
|
|
return var_3;
|
|
}
|
|
|
|
getent_or_struct_or_node( var_0, var_1 )
|
|
{
|
|
var_2 = getent_or_struct( var_0, var_1 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = getnode( var_0, var_1 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = getvehiclenode( var_0, var_1 );
|
|
|
|
return var_2;
|
|
}
|
|
|
|
setentityheadicon( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
self.entityheadiconoffset = var_3;
|
|
else
|
|
self.entityheadiconoffset = ( 0, 0, 0 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
self.entityheadiconreferencefunc = var_4;
|
|
|
|
self notify( "new_head_icon" );
|
|
var_5 = newhudelem();
|
|
var_5.archived = 1;
|
|
var_5.alpha = 0.8;
|
|
var_5 setshader( var_0, var_1, var_2 );
|
|
var_5 setwaypoint( 0, 0, 0, 1 );
|
|
self.entityheadicon = var_5;
|
|
updateentityheadiconorigin();
|
|
thread updateentityheadicon();
|
|
thread destroyentityheadiconondeath();
|
|
}
|
|
|
|
removeentityheadicon()
|
|
{
|
|
if ( !isdefined( self.entityheadicon ) )
|
|
return;
|
|
|
|
self.entityheadicon destroy();
|
|
}
|
|
|
|
updateentityheadicon()
|
|
{
|
|
self endon( "new_head_icon" );
|
|
self endon( "death" );
|
|
var_0 = self.origin;
|
|
|
|
for (;;)
|
|
{
|
|
if ( var_0 != self.origin )
|
|
{
|
|
updateentityheadiconorigin();
|
|
var_0 = self.origin;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
updateentityheadiconorigin()
|
|
{
|
|
if ( isdefined( self.entityheadiconreferencefunc ) )
|
|
{
|
|
var_0 = self [[ self.entityheadiconreferencefunc ]]();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
self.entityheadicon.x = self.entityheadiconoffset[0] + var_0[0];
|
|
self.entityheadicon.y = self.entityheadiconoffset[1] + var_0[1];
|
|
self.entityheadicon.z = self.entityheadiconoffset[2] + var_0[2];
|
|
return;
|
|
}
|
|
}
|
|
|
|
self.entityheadicon.x = self.origin[0] + self.entityheadiconoffset[0];
|
|
self.entityheadicon.y = self.origin[1] + self.entityheadiconoffset[1];
|
|
self.entityheadicon.z = self.origin[2] + self.entityheadiconoffset[2];
|
|
}
|
|
|
|
destroyentityheadiconondeath()
|
|
{
|
|
self endon( "new_head_icon" );
|
|
self waittill( "death" );
|
|
|
|
if ( !isdefined( self.entityheadicon ) )
|
|
return;
|
|
|
|
self.entityheadicon destroy();
|
|
}
|
|
|
|
worldtolocalcoords( var_0 )
|
|
{
|
|
var_1 = var_0 - self.origin;
|
|
return ( vectordot( var_1, anglestoforward( self.angles ) ), -1.0 * vectordot( var_1, anglestoright( self.angles ) ), vectordot( var_1, anglestoup( self.angles ) ) );
|
|
}
|
|
|
|
set_audio_zone( var_0, var_1 )
|
|
{
|
|
maps\_audio::set_zone( var_0, var_1 );
|
|
}
|
|
|
|
stop_audio_zones( var_0 )
|
|
{
|
|
maps\_audio::stop_zones( var_0 );
|
|
}
|
|
|
|
get_audio_zone()
|
|
{
|
|
return level._audio.zone.current_zone;
|
|
}
|
|
|
|
set_audio_filter( var_0, var_1 )
|
|
{
|
|
maps\_audio::set_filter( var_0, var_1 );
|
|
}
|
|
|
|
clear_audio_filter( var_0 )
|
|
{
|
|
maps\_audio::clear_filter( var_0 );
|
|
}
|
|
|
|
set_audio_occlusion( var_0 )
|
|
{
|
|
maps\_audio::set_occlusion( var_0 );
|
|
}
|
|
|
|
clear_audio_occlusion()
|
|
{
|
|
maps\_audio::deactivate_occlusion();
|
|
}
|
|
|
|
sound_fade_and_delete( var_0 )
|
|
{
|
|
self scalevolume( 0, var_0 );
|
|
common_scripts\utility::delaycall( var_0 + 0.05, ::stopsounds );
|
|
common_scripts\utility::delaycall( var_0 + 0.1, ::delete );
|
|
}
|
|
|
|
sound_fade_in( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_1 = clamp( var_1, 0, 1 );
|
|
var_2 = max( 0.05, var_2 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
self playloopsound( var_0 );
|
|
else
|
|
self playsound( var_0 );
|
|
|
|
self scalevolume( 0.0 );
|
|
common_scripts\utility::delaycall( 0.05, ::scalevolume, var_1, var_2 );
|
|
}
|
|
|
|
delete_on_sounddone()
|
|
{
|
|
self waittill( "sounddone" );
|
|
self delete();
|
|
}
|
|
|
|
set_level_fadein_time( var_0 )
|
|
{
|
|
level._audio.level_fade_time = var_0;
|
|
}
|
|
|
|
set_audio_mix( var_0 )
|
|
{
|
|
maps\_audio::set_mix( var_0 );
|
|
}
|
|
|
|
clear_audio_mix( var_0 )
|
|
{
|
|
maps\_audio::clear_mix( var_0 );
|
|
}
|
|
|
|
previous_audio_mix()
|
|
{
|
|
|
|
}
|
|
|
|
intro_screen_create( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
level.introscreen = spawnstruct();
|
|
level.introscreen.completed_delay = 3;
|
|
level.introscreen.fade_out_time = 1.5;
|
|
level.introscreen.fade_in_time = undefined;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
level.introscreen.lines = [ var_0, var_1, var_2, var_3 ];
|
|
else
|
|
level.introscreen.lines = [ var_0, var_1, var_2 ];
|
|
|
|
common_scripts\utility::noself_array_call( level.introscreen.lines, ::precachestring );
|
|
}
|
|
|
|
intro_screen_custom_func( var_0 )
|
|
{
|
|
level.introscreen.customfunc = var_0;
|
|
}
|
|
|
|
intro_screen_custom_timing( var_0, var_1, var_2 )
|
|
{
|
|
level.introscreen.completed_delay = var_0;
|
|
level.introscreen.fade_out_time = var_1;
|
|
level.introscreen.fade_in_time = var_2;
|
|
}
|
|
|
|
register_archetype( var_0, var_1, var_2 )
|
|
{
|
|
animscripts\animset::registerarchetype( var_0, var_1, var_2 );
|
|
}
|
|
|
|
archetype_exists( var_0 )
|
|
{
|
|
return animscripts\animset::archetypeexists( var_0 );
|
|
}
|
|
|
|
set_archetype( var_0 )
|
|
{
|
|
self.animarchetype = var_0;
|
|
self notify( "move_loop_restart" );
|
|
|
|
if ( var_0 == "creepwalk" )
|
|
self.sharpturnlookaheaddist = 72;
|
|
}
|
|
|
|
clear_archetype()
|
|
{
|
|
if ( isdefined( self.animarchetype ) && self.animarchetype == "creepwalk" )
|
|
self.sharpturnlookaheaddist = 30;
|
|
|
|
self.animarchetype = undefined;
|
|
self notify( "move_loop_restart" );
|
|
}
|
|
|
|
in_alien_mode()
|
|
{
|
|
if ( isdefined( level.alien_mode ) && level.alien_mode == 1 )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
transient_load( var_0 )
|
|
{
|
|
loadtransient( var_0 );
|
|
|
|
while ( !istransientloaded( var_0 ) )
|
|
wait 0.1;
|
|
|
|
common_scripts\utility::flag_set( var_0 + "_loaded" );
|
|
}
|
|
|
|
transient_unload( var_0 )
|
|
{
|
|
unloadtransient( var_0 );
|
|
|
|
while ( istransientloaded( var_0 ) )
|
|
wait 0.1;
|
|
|
|
common_scripts\utility::flag_clear( var_0 + "_loaded" );
|
|
}
|
|
|
|
transient_init( var_0 )
|
|
{
|
|
common_scripts\utility::flag_init( var_0 + "_loaded" );
|
|
}
|
|
|
|
transient_switch( var_0, var_1 )
|
|
{
|
|
if ( common_scripts\utility::flag( var_0 + "_loaded" ) )
|
|
transient_unload( var_0 );
|
|
|
|
if ( !common_scripts\utility::flag( var_1 + "_loaded" ) )
|
|
transient_load( var_1 );
|
|
}
|
|
|
|
transient_unloadall_and_load( var_0 )
|
|
{
|
|
unloadalltransients();
|
|
transient_load( var_0 );
|
|
}
|
|
|
|
deep_array_call( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
{
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_call( var_4, var_1 );
|
|
continue;
|
|
}
|
|
|
|
var_4 call [[ var_1 ]]();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch ( var_2.size )
|
|
{
|
|
case 0:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_call( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 call [[ var_1 ]]();
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 1:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_call( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 call [[ var_1 ]]( var_2[0] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_call( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 call [[ var_1 ]]( var_2[0], var_2[1] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 3:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_call( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 call [[ var_1 ]]( var_2[0], var_2[1], var_2[2] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 4:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_call( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 call [[ var_1 ]]( var_2[0], var_2[1], var_2[2], var_2[3] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 5:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_call( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 call [[ var_1 ]]( var_2[0], var_2[1], var_2[2], var_2[3], var_2[4] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
deep_array_thread( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
{
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_thread( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 thread [[ var_1 ]]();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch ( var_2.size )
|
|
{
|
|
case 0:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_thread( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 thread [[ var_1 ]]();
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 1:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_thread( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 thread [[ var_1 ]]( var_2[0] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_thread( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 thread [[ var_1 ]]( var_2[0], var_2[1] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 3:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_thread( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 thread [[ var_1 ]]( var_2[0], var_2[1], var_2[2] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 4:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_thread( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 thread [[ var_1 ]]( var_2[0], var_2[1], var_2[2], var_2[3] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 5:
|
|
foreach ( var_4 in var_0 )
|
|
{
|
|
if ( isdefined( var_4 ) )
|
|
{
|
|
if ( isarray( var_4 ) )
|
|
{
|
|
deep_array_thread( var_4, var_1, var_2 );
|
|
continue;
|
|
}
|
|
|
|
var_4 thread [[ var_1 ]]( var_2[0], var_2[1], var_2[2], var_2[3], var_2[4] );
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
setdvar_cg_ng( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( level.console ) )
|
|
set_console_status();
|
|
|
|
if ( is_gen4() )
|
|
setdvar( var_0, var_2 );
|
|
else
|
|
setdvar( var_0, var_1 );
|
|
}
|
|
|
|
setsaveddvar_cg_ng( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( level.console ) )
|
|
set_console_status();
|
|
|
|
if ( is_gen4() )
|
|
setsaveddvar( var_0, var_2 );
|
|
else
|
|
setsaveddvar( var_0, var_1 );
|
|
}
|
|
|
|
follow_path_and_animate( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_path" );
|
|
self notify( "stop_going_to_node" );
|
|
self notify( "follow_path" );
|
|
self endon( "follow_path" );
|
|
wait 0.1;
|
|
var_2 = var_0;
|
|
var_3 = undefined;
|
|
var_4 = undefined;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 300;
|
|
|
|
self.current_follow_path = var_2;
|
|
var_2 script_delay();
|
|
|
|
while ( isdefined( var_2 ) )
|
|
{
|
|
self.current_follow_path = var_2;
|
|
|
|
if ( isdefined( var_2.lookahead ) )
|
|
break;
|
|
|
|
if ( isdefined( level.struct_class_names["targetname"][var_2.targetname] ) )
|
|
var_4 = ::follow_path_animate_set_struct;
|
|
else if ( isdefined( var_2.classname ) )
|
|
var_4 = ::follow_path_animate_set_ent;
|
|
else
|
|
var_4 = ::follow_path_animate_set_node;
|
|
|
|
if ( isdefined( var_2.radius ) && var_2.radius != 0 )
|
|
self.goalradius = var_2.radius;
|
|
|
|
if ( self.goalradius < 16 )
|
|
self.goalradius = 16;
|
|
|
|
if ( isdefined( var_2.height ) && var_2.height != 0 )
|
|
self.goalheight = var_2.height;
|
|
|
|
var_5 = self.goalradius;
|
|
self childthread [[ var_4 ]]( var_2 );
|
|
|
|
if ( isdefined( var_2.animation ) )
|
|
var_2 waittill( var_2.animation );
|
|
else
|
|
{
|
|
for (;;)
|
|
{
|
|
self waittill( "goal" );
|
|
|
|
if ( distance( var_2.origin, self.origin ) < var_5 + 10 || self.team != "allies" )
|
|
break;
|
|
}
|
|
}
|
|
|
|
var_2 notify( "trigger", self );
|
|
|
|
if ( isdefined( var_2.script_flag_set ) )
|
|
common_scripts\utility::flag_set( var_2.script_flag_set );
|
|
|
|
if ( isdefined( var_2.script_parameters ) )
|
|
{
|
|
var_6 = strtok( var_2.script_parameters, " " );
|
|
|
|
for ( var_7 = 0; var_7 < var_6.size; var_7++ )
|
|
{
|
|
if ( isdefined( level.custom_followpath_parameter_func ) )
|
|
self [[ level.custom_followpath_parameter_func ]]( var_6[var_7], var_2 );
|
|
|
|
if ( self.type == "dog" )
|
|
continue;
|
|
|
|
switch ( var_6[var_7] )
|
|
{
|
|
case "enable_cqb":
|
|
enable_cqbwalk();
|
|
break;
|
|
case "disable_cqb":
|
|
disable_cqbwalk();
|
|
break;
|
|
case "deleteme":
|
|
self delete();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( var_2.script_requires_player ) && var_1 > 0 && self.team == "allies" )
|
|
{
|
|
while ( isalive( level.player ) )
|
|
{
|
|
if ( follow_path_wait_for_player( var_2, var_1 ) )
|
|
break;
|
|
|
|
if ( isdefined( var_2.animation ) )
|
|
{
|
|
self.goalradius = var_5;
|
|
self setgoalpos( self.origin );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( var_2.target ) )
|
|
break;
|
|
|
|
if ( isdefined( var_2.script_flag_wait ) )
|
|
common_scripts\utility::flag_wait( var_2.script_flag_wait );
|
|
|
|
var_2 script_delay();
|
|
var_2 = var_2 common_scripts\utility::get_target_ent();
|
|
}
|
|
|
|
self notify( "path_end_reached" );
|
|
}
|
|
|
|
follow_path_wait_for_player( var_0, var_1 )
|
|
{
|
|
if ( distance( level.player.origin, var_0.origin ) < distance( self.origin, var_0.origin ) )
|
|
return 1;
|
|
|
|
var_2 = undefined;
|
|
var_2 = anglestoforward( self.angles );
|
|
var_3 = vectornormalize( level.player.origin - self.origin );
|
|
|
|
if ( isdefined( var_0.target ) )
|
|
{
|
|
var_4 = common_scripts\utility::get_target_ent( var_0.target );
|
|
var_2 = vectornormalize( var_4.origin - var_0.origin );
|
|
}
|
|
else if ( isdefined( var_0.angles ) )
|
|
var_2 = anglestoforward( var_0.angles );
|
|
else
|
|
var_2 = anglestoforward( self.angles );
|
|
|
|
if ( vectordot( var_2, var_3 ) > 0 )
|
|
return 1;
|
|
|
|
if ( distance( level.player.origin, self.origin ) < var_1 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
follow_path_animate_set_node( var_0 )
|
|
{
|
|
self notify( "follow_path_new_goal" );
|
|
|
|
if ( isdefined( var_0.animation ) )
|
|
{
|
|
var_0 maps\_anim::anim_generic_reach( self, var_0.animation );
|
|
self notify( "starting_anim", var_0.animation );
|
|
|
|
if ( isdefined( var_0.script_parameters ) && issubstr( var_0.script_parameters, "gravity" ) )
|
|
var_0 maps\_anim::anim_generic_gravity( self, var_0.animation );
|
|
else
|
|
var_0 maps\_anim::anim_generic_run( self, var_0.animation );
|
|
|
|
self setgoalpos( self.origin );
|
|
}
|
|
else
|
|
set_goal_node( var_0 );
|
|
}
|
|
|
|
follow_path_animate_set_ent( var_0 )
|
|
{
|
|
self notify( "follow_path_new_goal" );
|
|
|
|
if ( isdefined( var_0.animation ) )
|
|
{
|
|
var_0 maps\_anim::anim_generic_reach( self, var_0.animation );
|
|
self notify( "starting_anim", var_0.animation );
|
|
|
|
if ( isdefined( var_0.script_parameters ) && issubstr( var_0.script_parameters, "gravity" ) )
|
|
var_0 maps\_anim::anim_generic_gravity( self, var_0.animation );
|
|
else
|
|
var_0 maps\_anim::anim_generic_run( self, var_0.animation );
|
|
|
|
self setgoalpos( self.origin );
|
|
}
|
|
else
|
|
set_goal_ent( var_0 );
|
|
}
|
|
|
|
follow_path_animate_set_struct( var_0 )
|
|
{
|
|
self notify( "follow_path_new_goal" );
|
|
|
|
if ( isdefined( var_0.animation ) )
|
|
{
|
|
var_0 maps\_anim::anim_generic_reach( self, var_0.animation );
|
|
self notify( "starting_anim", var_0.animation );
|
|
disable_exits();
|
|
|
|
if ( isdefined( var_0.script_parameters ) && issubstr( var_0.script_parameters, "gravity" ) )
|
|
var_0 maps\_anim::anim_generic_gravity( self, var_0.animation );
|
|
else
|
|
var_0 maps\_anim::anim_generic_run( self, var_0.animation );
|
|
|
|
delaythread( 0.05, ::enable_exits );
|
|
self setgoalpos( self.origin );
|
|
}
|
|
else
|
|
set_goal_pos( var_0.origin );
|
|
}
|
|
|
|
post_load_precache( var_0 )
|
|
{
|
|
if ( !isdefined( level.post_load_funcs ) )
|
|
level.post_load_funcs = [];
|
|
|
|
level.post_load_funcs = common_scripts\utility::array_add( level.post_load_funcs, var_0 );
|
|
}
|
|
|
|
game_is_current_gen()
|
|
{
|
|
if ( level.xenon )
|
|
return 1;
|
|
|
|
if ( level.ps3 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
lerpfov_saved( var_0, var_1 )
|
|
{
|
|
thread lerpfov_saved_thread( var_0, var_1 );
|
|
}
|
|
|
|
lerpfov_saved_thread( var_0, var_1 )
|
|
{
|
|
self notify( "new_lerp_Fov_Saved" );
|
|
self endon( "new_lerp_Fov_Saved" );
|
|
self lerpfov( var_0, var_1 );
|
|
wait( var_1 );
|
|
setsaveddvar( "cg_fov", var_0 );
|
|
}
|
|
|
|
ui_action_slot_force_active_on( var_0 )
|
|
{
|
|
var_1 = "ui_actionslot_" + var_0 + "_forceActive";
|
|
setdvar( var_1, "on" );
|
|
}
|
|
|
|
ui_action_slot_force_active_off( var_0 )
|
|
{
|
|
var_1 = "ui_actionslot_" + var_0 + "_forceActive";
|
|
setdvar( var_1, "turn_off" );
|
|
}
|
|
|
|
ui_action_slot_force_active_one_time( var_0 )
|
|
{
|
|
var_1 = "ui_actionslot_" + var_0 + "_forceActive";
|
|
setdvar( var_1, "onetime" );
|
|
}
|
|
|
|
hastag( var_0, var_1 )
|
|
{
|
|
var_2 = getnumparts( var_0 );
|
|
|
|
for ( var_3 = 0; var_3 < var_2; var_3++ )
|
|
{
|
|
if ( tolower( getpartname( var_0, var_3 ) ) == tolower( var_1 ) )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
stylized_center_text( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isarray( var_0 ) )
|
|
var_0 = [ var_0 ];
|
|
|
|
var_4 = 320;
|
|
var_5 = 200;
|
|
var_6 = [];
|
|
|
|
foreach ( var_10, var_8 in var_0 )
|
|
{
|
|
var_9 = maps\_introscreen::stylized_line( var_8, var_1, var_4, var_5 + var_10 * 20, "center", var_2, var_3 );
|
|
var_6 = common_scripts\utility::array_combine( var_9, var_6 );
|
|
}
|
|
|
|
wait( var_1 );
|
|
maps\_introscreen::stylized_fadeout( var_6, var_4, var_5, var_0.size );
|
|
}
|