iw6-scripts/maps/loki_util.gsc
2024-02-13 13:20:49 +01:00

1292 lines
34 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
player_move_to_checkpoint_start( var_0 )
{
var_1 = getent( var_0, "targetname" );
level.player setorigin( var_1.origin );
level.player setplayerangles( var_1.angles );
}
allies_move_to_checkpoint_start( var_0, var_1 )
{
for ( var_2 = 0; var_2 < 3; var_2++ )
{
var_3 = var_0 + "_ally_" + var_2;
var_4 = common_scripts\utility::getstruct( var_3, "targetname" );
level.allies[var_2] forceteleport( var_4.origin, var_4.angles );
if ( isdefined( var_1 ) )
{
level.allies[var_2] maps\_utility::clear_force_color();
level.allies[var_2] setgoalpos( var_4.origin );
}
}
}
spawn_allies()
{
level.allies = [];
level.allies[level.allies.size] = spawn_ally( "ally_0" );
level.allies[level.allies.size] = spawn_ally( "ally_1" );
level.allies[level.allies.size] = spawn_ally( "ally_2" );
}
spawn_ally( var_0, var_1 )
{
var_2 = undefined;
if ( !isdefined( var_1 ) )
var_2 = level.start_point + "_" + var_0;
else
var_2 = var_1 + "_" + var_0;
var_3 = spawn_targetname_at_struct_targetname( var_0, var_2 );
if ( !isdefined( var_3 ) )
return undefined;
var_3 maps\_utility::make_hero();
if ( !isdefined( var_3.magic_bullet_shield ) )
{
var_3 maps\_utility::magic_bullet_shield();
var_3.animname = var_0;
}
return var_3;
}
spawn_targetname_at_struct_targetname( var_0, var_1 )
{
var_2 = getent( var_0, "targetname" );
var_3 = common_scripts\utility::getstruct( var_1, "targetname" );
if ( isdefined( var_2 ) && isdefined( var_3 ) )
{
var_2 maps\_utility::add_spawn_function( maps\_space_ai::enable_space );
var_4 = var_2 maps\_utility::spawn_ai();
if ( !isdefined( var_3.angles ) )
var_3.angles = level.player.angles;
var_4 forceteleport( var_3.origin, var_3.angles );
return var_4;
}
if ( isdefined( var_2 ) )
{
var_2 maps\_utility::add_spawn_function( maps\_space_ai::enable_space );
var_4 = var_2 maps\_utility::spawn_ai();
iprintlnbold( "Add a script struct called: " + var_1 + " to spawn him in the correct location." );
var_4 teleport( level.player.origin, level.player.angles );
return var_4;
}
iprintlnbold( "failed to spawn " + var_0 + " at " + var_1 );
return undefined;
}
spawn_space_ai( var_0, var_1 )
{
var_2 = var_0 maps\_utility::spawn_ai( 1 );
var_2 thread maps\_space_ai::enable_space();
var_3 = var_0 common_scripts\utility::get_target_ent();
if ( !isdefined( var_3.angles ) )
var_3.angles = var_0.angles;
var_2 forceteleport( var_3.origin, var_3.angles );
if ( isdefined( var_1 ) && var_1 )
{
var_4 = getnode( var_3.target, "targetname" );
var_2 forceteleport( var_4.origin, var_4.angles );
}
var_2 thread follow_space_node_path( var_3 );
return var_2;
}
follow_space_node_path( var_0 )
{
self endon( "death" );
self endon( "stop_following_node_path" );
while ( isdefined( var_0 ) && isdefined( var_0.target ) )
{
set_space_goal_node( var_0 );
self.goalradius = 8;
self waittill( "goal" );
var_0 = getnode( var_0.target, "targetname" );
}
self notify( "initial_path_completed" );
}
set_space_goal_node( var_0 )
{
var_1 = getnode( var_0.target, "targetname" );
if ( isdefined( var_1 ) )
{
common_scripts\utility::waitframe();
self setgoalnode( var_1 );
}
}
spawn_space_ai_from_targetname( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 0;
var_2 = getent( var_0, "targetname" );
var_3 = spawn_space_ai( var_2, var_1 );
return var_3;
}
spawn_space_ais_from_targetname( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 0;
var_2 = getentarray( var_0, "targetname" );
var_3 = [];
foreach ( var_5 in var_2 )
{
var_6 = spawn_space_ai( var_5, var_1 );
var_3[var_3.size] = var_6;
}
return var_3;
}
xm25_destroy_hud( var_0 )
{
if ( !isdefined( var_0 ) )
return;
if ( isdefined( var_0.data_value ) )
var_0.data_value destroy();
if ( isdefined( var_0.data_value_suffix ) )
var_0.data_value_suffix destroy();
var_0 destroy();
}
cleanup_ads_at_death()
{
self waittill( "death" );
if ( isdefined( self.hud0 ) )
xm25_destroy_hud( self.hud0 );
}
watchweaponswitch( var_0 )
{
self endon( "death" );
for (;;)
{
self waittill( "weapon_switch_started" );
if ( isdefined( self.hud0 ) )
xm25_destroy_hud( self.hud0 );
if ( !self.cg_drawbreathhint && self getcurrentweapon() != var_0 )
{
setsaveddvar( "cg_drawBreathHint", 1 );
self.cg_drawbreathhint = 1;
}
if ( self getcurrentweapon() == var_0 )
self.weapon_change_timer = 20;
}
}
watchads( var_0 )
{
thread cleanup_ads_at_death();
self endon( "death" );
self.cg_drawbreathhint = 1;
self.weapon_change_timer = 0;
thread watchweaponswitch( var_0 );
for (;;)
{
var_1 = self adsbuttonpressed();
var_2 = self getcurrentweapon();
if ( var_2 == var_0 )
{
if ( var_1 || self playerads() >= 0 )
{
setsaveddvar( "cg_drawBreathHint", 0 );
self.cg_drawbreathhint = 0;
}
else
{
setsaveddvar( "cg_drawBreathHint", 1 );
self.cg_drawbreathhint = 1;
}
}
if ( !var_1 || var_2 != var_0 || self isreloading() || !isalive( self ) )
{
if ( isdefined( self.hud0 ) )
xm25_destroy_hud( self.hud0 );
if ( isdefined( self.hud1 ) )
xm25_destroy_hud( self.hud1 );
}
if ( var_2 == var_0 && var_1 && self playerads() >= 0.75 && !isdefined( self.hud ) && self.weapon_change_timer <= 0 )
{
if ( !isdefined( self.hud0 ) )
self.hud0 = create_hud_xm25_screen( 1, 1, self );
if ( !isdefined( self.hud1 ) )
self.hud1 = create_hud_xm25_scanlines( 1, 1 );
}
if ( isdefined( self.hud1 ) )
{
self.hud1.y = self.hud1.y + 1;
if ( self.hud1.y > 8 )
self.hud1.y = -4;
}
self.weapon_change_timer--;
if ( self.weapon_change_timer == 0 )
{
if ( var_2 == var_0 )
{
setsaveddvar( "cg_drawBreathHint", 0 );
self.cg_drawbreathhint = 0;
}
else
{
setsaveddvar( "cg_drawBreathHint", 1 );
self.cg_drawbreathhint = 1;
}
}
wait 0.05;
}
}
create_hud_xm25_screen( var_0, var_1, var_2 )
{
var_3 = "hud_xm25_temp";
var_4 = newclienthudelem( var_2 );
var_4.x = 0;
var_4.y = 0;
var_4.sort = var_0;
var_4.horzalign = "fullscreen";
var_4.vertalign = "fullscreen";
var_4.alpha = var_1;
var_4 setshader( var_3, 640, 480 );
return var_4;
}
create_hud_xm25_scanlines( var_0, var_1 )
{
var_2 = "hud_xm25_scanlines";
var_3 = newhudelem();
var_3.x = 0;
var_3.y = 0;
var_3.sort = var_0;
var_3.horzalign = "fullscreen";
var_3.vertalign = "fullscreen";
var_3.alpha = var_1;
var_3 setshader( var_2, 640, 480 );
return var_3;
}
jkuline( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( isdefined( level.jkudebug ) && level.jkudebug )
{
if ( !isdefined( var_2 ) )
return;
if ( !isdefined( var_3 ) )
return;
if ( !isdefined( var_4 ) )
return;
if ( !isdefined( var_5 ) )
return;
return;
return;
return;
return;
}
}
jkupoint( var_0, var_1, var_2, var_3 )
{
if ( isdefined( level.jkudebug ) && level.jkudebug )
{
if ( !isdefined( var_1 ) )
var_1 = 6;
if ( !isdefined( var_2 ) )
var_2 = ( 1, 1, 1 );
if ( !isdefined( var_3 ) )
var_3 = 9999;
}
}
jkuprint( var_0, var_1 )
{
if ( isdefined( level.jkudebug ) && level.jkudebug )
iprintln( var_0 );
}
reassign_goal_volume( var_0, var_1 )
{
if ( !isarray( var_0 ) )
var_0 = maps\_utility::make_array( var_0 );
var_0 = maps\_utility::array_removedead_or_dying( var_0 );
var_2 = getent( var_1, "targetname" );
foreach ( var_4 in var_0 )
var_4 setgoalvolumeauto( var_2 );
}
enemy_marker()
{
var_0 = newhudelem();
var_0 setshader( "apache_target_lock", 1, 1 );
var_0.alpha = 0.0;
var_0.color = ( 1, 0, 0 );
var_0 setwaypoint( 1 );
var_1 = self.bulletsinclip;
var_2 = 0;
var_3 = 1.0;
var_4 = 0.18;
var_5 = 1;
var_6 = 0;
var_7 = 0;
var_8 = 1;
var_9 = 2;
var_10 = 0.2;
var_11 = 0;
var_12 = 0;
var_13 = 1;
var_14 = 0;
var_15 = 0;
while ( isalive( self ) && isalive( level.player ) )
{
var_0.x = self gettagorigin( "j_spinelower" )[0];
var_0.y = self gettagorigin( "j_spinelower" )[1];
var_0.z = self gettagorigin( "j_spinelower" )[2];
if ( var_14 )
{
if ( level.player playerads() == 1 )
var_10 = 0.997;
else
var_10 = 0.95;
if ( maps\_utility::player_looking_at( self.origin, var_10, 1 ) )
var_12 = 1;
else
var_12 = 0;
}
if ( var_13 )
{
if ( maps\_utility::player_looking_at( self.origin, 0.2 ) )
var_2 = 1;
else
var_2 = 0;
}
if ( var_15 )
{
if ( self.bulletsinclip != var_1 )
var_11 = 1;
else
var_11 = 0;
var_1 = self.bulletsinclip;
}
if ( var_6 == var_7 )
{
if ( var_2 && ( var_12 && var_14 || var_11 && var_15 ) )
{
var_6 = var_8;
var_3 = 1.0;
var_5 = 1;
}
else if ( var_2 && var_13 )
var_6 = var_9;
else
var_0.alpha = 0.0;
}
if ( var_6 == var_8 )
{
if ( !var_2 && var_13 )
var_6 = var_7;
else if ( var_3 > 0 )
{
var_6 = var_8;
if ( var_5 )
{
var_0.alpha = 0.0;
var_3 = var_3 - var_4;
var_5 = 0;
}
else
{
var_0.alpha = 0.25;
var_3 = var_3 - var_4;
var_5 = 1;
}
}
else
var_6 = var_9;
}
if ( var_6 == var_9 )
{
if ( !var_2 && var_13 )
var_6 = var_7;
else if ( var_11 && var_15 )
{
var_6 = var_8;
var_3 = 1.0;
}
else
{
var_6 = var_9;
var_0.alpha = 0.25;
}
}
common_scripts\utility::waitframe();
}
var_0 destroy();
}
spawn_enemy_death_hud_element( var_0 )
{
var_1 = newhudelem();
var_1 setshader( "veh_hud_target_invalid", 1, 1 );
var_1.alpha = 0.25;
var_1.color = ( 1, 0, 0 );
var_1.x = var_0[0];
var_1.y = var_0[1];
var_1.z = var_0[2];
var_1 setwaypoint( 1 );
wait 1.0;
var_1 destroy();
}
player_boundaries_on( var_0, var_1, var_2, var_3 )
{
level.player endon( "death" );
if ( !common_scripts\utility::flag( "boundary_system_on" ) )
{
common_scripts\utility::flag_set( "boundary_system_on" );
level thread player_boundary_check( var_0, var_1, var_2, var_3 );
if ( !isdefined( var_1 ) || var_1 == 0 )
level thread player_boundary_vo_player( var_3 );
}
}
player_boundary_check( var_0, var_1, var_2, var_3 )
{
level.player endon( "death" );
level endon( "boundary_system_off" );
if ( !isdefined( var_2 ) )
var_2 = 7;
while ( common_scripts\utility::flag( "boundary_system_on" ) )
{
common_scripts\utility::flag_waitopen( "in_combat_area" );
if ( !isdefined( var_0 ) )
level thread player_boundary_ai_focus();
if ( !isdefined( var_1 ) || var_1 == 0 )
level thread player_boundary_vo_player( var_3 );
level thread player_boundary_fail( var_2 );
common_scripts\utility::flag_wait( "in_combat_area" );
if ( !isdefined( var_0 ) )
level thread player_boundary_ai_return();
}
}
player_boundary_ai_focus()
{
level.player endon( "death" );
level endon( "in_combat_area" );
level endon( "boundary_system_off" );
wait 1.0;
var_0 = getaiarray( "axis" );
foreach ( var_2 in var_0 )
{
var_2.favoriteenemy = level.player;
var_2.baseaccuracy = 50;
}
}
player_boundary_ai_return()
{
level.player endon( "death" );
wait 1.0;
var_0 = getaiarray( "axis" );
foreach ( var_2 in var_0 )
{
self.favoriteenemy = undefined;
self.baseaccuracy = level.accuracy_enemy;
}
}
player_boundary_vo_player( var_0 )
{
level.player endon( "death" );
level endon( "in_combat_area" );
level endon( "boundary_system_off" );
wait 1.5;
var_1 = getaicount( "axis" );
if ( !isdefined( var_0 ) )
{
if ( var_1 > 2 )
var_0 = [ "loki_kgn_thompsonstickwiththe", "loki_kgn_thompsonweneedsupport", "loki_kgn_thompsonweretakingheavy", "loki_kgn_thompsonstayinformation", "loki_kgn_weresurrounded", "loki_kgn_therestoomanyof" ];
else
var_0 = [ "loki_kgn_thompsonstickwiththe", "loki_kgn_thompsonweneedsupport", "loki_kgn_thompsonstayinformation" ];
}
level.allies[0] thread play_nag( var_0, "in_combat_area", 1, 8, 1, 8, "boundary_fail" );
}
player_boundary_fail( var_0 )
{
level.player endon( "death" );
level endon( "in_combat_area" );
level endon( "boundary_system_off" );
wait( var_0 );
level.allies[0] notify( "boundary_fail" );
wait 1.0;
if ( common_scripts\utility::flag( "space_breach_done" ) )
setdvar( "ui_deadquote", &"LOKI_CONTROL_BOUNDS_FAIL" );
else
setdvar( "ui_deadquote", &"LOKI_BOUNDS_FAIL" );
level thread maps\_utility::missionfailedwrapper();
}
player_boundaries_off()
{
common_scripts\utility::flag_clear( "boundary_system_on" );
common_scripts\utility::flag_set( "in_combat_area" );
level.allies[0] notify( "boundary_fail" );
level notify( "boundary_system_off" );
level thread player_boundary_ai_return();
}
loki_autosave_now( var_0 )
{
level.player endon( "death" );
if ( isdefined( var_0 ) )
level endon( var_0 );
if ( common_scripts\utility::flag( "boundary_system_on" ) )
common_scripts\utility::flag_wait( "in_combat_area" );
maps\_utility::autosave_now();
}
loki_autosave_by_name_silent( var_0, var_1 )
{
level.player endon( "death" );
if ( isdefined( var_1 ) )
level endon( var_1 );
if ( common_scripts\utility::flag( "boundary_system_on" ) )
common_scripts\utility::flag_wait( "in_combat_area" );
maps\_utility::autosave_by_name_silent( var_0 );
}
loki_autosave_by_name( var_0, var_1 )
{
level.player endon( "death" );
if ( isdefined( var_1 ) )
level endon( var_1 );
if ( common_scripts\utility::flag( "boundary_system_on" ) )
common_scripts\utility::flag_wait( "in_combat_area" );
maps\_utility::autosave_by_name( var_0 );
}
play_nag( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self endon( "death" );
self endon( "stop nags" );
if ( isdefined( var_6 ) )
self endon( var_6 );
var_9 = var_2;
if ( !isdefined( var_3 ) )
var_3 = 30;
var_10 = 0;
var_11 = 1;
var_12 = 0;
while ( !common_scripts\utility::flag( var_1 ) )
{
var_10 = randomint( var_0.size );
if ( var_0.size > 1 )
{
while ( var_11 == var_10 )
{
var_10 = randomint( var_0.size );
wait 0.05;
}
}
var_11 = var_10;
var_13 = var_0[var_10];
if ( isdefined( var_7 ) )
{
var_14 = var_7[randomint( var_7.size )];
thread maps\_anim::anim_single_solo( self, var_14 );
}
if ( !common_scripts\utility::flag( var_1 ) )
{
level notify( "nagging" );
if ( isdefined( var_8 ) )
maps\_space_ai::smart_radio_dialogue_facial( var_13, var_13 );
else
maps\_utility::smart_radio_dialogue( var_13 );
}
else
break;
wait( randomfloatrange( var_9 * 0.8, var_9 * 1.2 ) );
if ( var_3 > var_9 )
{
var_12 = var_12 + 1;
if ( var_12 == var_4 )
{
var_12 = 0;
var_9 = var_9 * var_5;
if ( var_3 < var_9 )
var_9 = var_3;
}
}
}
}
space_death_fx()
{
playfxontag( common_scripts\utility::getfx( "swim_ai_death_blood" ), self, "j_spineupper" );
playfxontag( common_scripts\utility::getfx( "sp_blood_float" ), self, "j_spineupper" );
playfxontag( common_scripts\utility::getfx( "factory_roof_steam_small_01" ), self, "j_spineupper" );
}
watch_input_infil( var_0, var_1 )
{
level.player endon( "death" );
level endon( "infil_done" );
level.infil_allow_movement = 1;
level.infil_path_offset = 0;
level.infil_allowed_slide = 150;
level.infil_movement_step = 3;
for (;;)
{
var_2 = level.player getnormalizedmovement();
if ( var_2[1] >= 0.15 )
{
iprintln( distance2d( level.player.origin, var_1.origin ) );
common_scripts\utility::flag_clear( "left_pressed" );
common_scripts\utility::flag_set( "right_pressed" );
if ( level.infil_allow_movement )
{
var_3 = anglestoright( var_1.angles );
var_4 = var_0.origin + level.infil_movement_step * var_3;
if ( distance2d( var_4, var_1.origin ) <= level.infil_allowed_slide )
{
var_0.origin = var_4;
var_0 linkto( var_1, "tag_player" );
}
}
}
else if ( var_2[1] <= -0.15 )
{
iprintln( distance2d( level.player.origin, var_1.origin ) );
common_scripts\utility::flag_clear( "right_pressed" );
common_scripts\utility::flag_set( "left_pressed" );
if ( level.infil_allow_movement )
{
var_3 = anglestoright( var_1.angles );
var_4 = var_0.origin + level.infil_movement_step * -1 * var_3;
if ( distance2d( var_4, var_1.origin ) <= level.infil_allowed_slide )
{
var_0.origin = var_4;
var_0 linkto( var_1, "tag_player" );
}
}
}
else
{
common_scripts\utility::flag_clear( "left_pressed" );
common_scripts\utility::flag_clear( "right_pressed" );
}
common_scripts\utility::waitframe();
}
}
adjust_movement_step_up( var_0, var_1 )
{
level.player endon( "death" );
level endon( "infil_done" );
var_2 = var_1 * 20;
var_3 = 0;
var_4 = var_0 / var_2;
for ( var_5 = 0; var_5 < var_2; var_5++ )
{
level.infil_movement_step = var_3;
var_3 = var_3 + var_4;
common_scripts\utility::waitframe();
}
}
spawn_and_link_models_to_tags( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = 0;
var_3 = 0;
var_4 = getnumparts( self.model );
for ( var_5 = 0; var_5 < var_4; var_5++ )
{
var_6 = getpartname( self.model, var_5 );
if ( getsubstr( var_6, 0, 4 ) == "mdl_" )
{
var_7 = getsubstr( var_6, 4, var_6.size - 4 );
jkuprint( var_7 );
if ( var_6 == "mdl_loki_exterior_round_hatch_000" )
var_8 = level.combat_one_door;
else if ( var_6 == "mdl_space_exterior_airlock_entrance_000" )
var_8 = spawn( "script_model", self gettagorigin( var_6 ) );
else if ( var_6 == "mdl_space_module_5_000" )
var_8 = spawn( "script_model", self gettagorigin( var_6 ) );
else
{
var_8 = spawn( "script_model", self gettagorigin( var_6 ) );
var_8 setmodel( var_7 );
}
var_8.angles = self gettagangles( var_6 );
var_8 linkto( self, var_6 );
if ( isdefined( var_0 ) )
var_8.targetname = var_0;
if ( isdefined( var_1 ) )
var_8 retargetscriptmodellighting( var_1 );
switch ( var_6 )
{
case "mdl_loki_truss_sail_003":
level.hitsail = var_8;
break;
case "mdl_space_solar_array_damage_000":
level.solar_array0 = var_8;
break;
case "mdl_space_solar_array_damage_001":
level.solar_array1 = var_8;
break;
case "mdl_loki_cargo_container_01_000":
level.cargo_container = var_8;
var_8 thread maps\loki_audio::play_sound_on_moving_cover_object( "scn_loki_moving_cover_obj_03_lr", 3.2 );
break;
case "mdl_space_module_2_dest_split_01_000":
level.module_ext = var_8;
break;
case "mdl_space_module_2_dest_split_01_int_000":
level.module_int = var_8;
break;
case "mdl_space_module_2_dest_split_01_int_props_01_000":
level.module_int_props01 = var_8;
break;
case "mdl_space_module_2_dest_split_01_int_props_02_000":
level.module_int_props02 = var_8;
var_8 thread maps\loki_audio::play_sound_on_moving_cover_object( "scn_loki_moving_cover_obj_02_lr", 3.2 );
break;
case "mdl_space_a25_ams_000":
level.ams = var_8;
var_8 thread maps\loki_audio::play_sound_on_moving_cover_object( "scn_loki_moving_cover_obj_01_lr", 4.8 );
break;
case "mdl_loki_crate_01_000":
level.space_crate_01 = var_8;
break;
case "mdl_loki_crate_01_001":
level.space_crate_02 = var_8;
break;
case "mdl_vehicle_space_shuttle_000":
level.space_shuttle = var_8;
break;
case "mdl_loki_antenna_2_000":
level.antenna_2 = var_8;
break;
case "mdl_loki_p6_battery_000":
level.p6_battery = var_8;
break;
}
}
if ( !var_2 )
{
common_scripts\utility::waitframe();
continue;
}
if ( var_3 == 2 )
{
var_3 = 0;
common_scripts\utility::waitframe();
continue;
}
var_3++;
}
}
track_origin()
{
for (;;)
{
iprintln( self.origin );
common_scripts\utility::waitframe();
}
}
ammo_hack( var_0 )
{
while ( !isdefined( var_0 ) || var_0.size == 0 )
{
var_0 = self getweaponslistall();
wait 0.05;
}
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
self givestartammo( var_0[var_1] );
}
loki_drop_weapon( var_0, var_1 )
{
var_2 = self.a.weaponpos["right"];
jkuprint( getweaponmodel( var_2 ) );
jkuprint( getweaponattachments( var_2 ).size );
if ( var_2 != "none" )
{
var_3 = create_world_model_from_ent_weapon( var_2 );
var_3 hide();
var_3.origin = self gettagorigin( "tag_weapon" );
var_3.angles = self gettagangles( "tag_weapon" );
var_3 linkto( self, "tag_weapon" );
if ( isdefined( var_1 ) )
common_scripts\utility::waittill_any( "death", "damage" );
else
self waittill( "death" );
var_4 = create_drop_weapon_trigger( var_3 );
var_3 show();
animscripts\shared::placeweaponon( var_2, "none" );
if ( common_scripts\utility::cointoss() )
var_5 = randomintrange( -400, -100 );
else
var_5 = randomintrange( 100, 400 );
if ( common_scripts\utility::cointoss() )
var_6 = randomintrange( -400, -100 );
else
var_6 = randomintrange( 100, 400 );
if ( isdefined( var_0 ) )
var_3 physicslaunchserver( var_3.origin + ( 0, 0, 10 ), var_0 );
else if ( common_scripts\utility::cointoss() )
var_3 physicslaunchserver( var_3.origin + ( 0, 0, 10 ), ( var_5, 0, 0 ) );
else if ( maps\_utility::within_fov_2d( self.origin, self.angles, level.player.origin, cos( 45 ) ) )
{
jkuprint( "launching weapon towards player" );
var_7 = bullettrace( self.origin, self.origin + anglestoforward( self.angles ) * 60, 0 );
if ( var_7["surfacetype"] == "none" )
var_3 physicslaunchserver( var_3.origin + ( 0, 0, 10 ), anglestoforward( self.angles ) * 1000 );
else
jkuprint( "trace failed" );
}
else
{
jkuprint( "not launching weapon towards player" );
var_3 physicslaunchserver( var_3.origin + ( 0, 0, 10 ), ( var_5, 0, 0 ) );
}
var_3 thread loki_drop_weapon_cleanup( var_4 );
}
}
create_drop_weapon_trigger( var_0, var_1 )
{
var_2 = spawn( "trigger_radius", var_0.origin, 0, 20, 20 );
var_2 enablelinkto();
var_2 linkto( var_0 );
var_2 thread loki_drop_weapon_trigger( var_0, var_1 );
return var_2;
}
create_pushed_dropped_weapon( var_0, var_1, var_2, var_3 )
{
var_4 = spawn( "script_model", var_0 );
var_4.angles = var_1;
var_4 setmodel( var_2 );
var_4 hidepart( "tag_clip" );
var_4.attachments = var_3;
var_4 create_world_model_from_ent_weapon();
var_4 physicslaunchserver( var_4.origin, anglestoforward( level.player.angles ) * 2500, 500000, 5 );
wait 0.5;
var_5 = create_drop_weapon_trigger( var_4, 1 );
var_4 thread loki_drop_weapon_cleanup( var_5, 10 );
}
loki_drop_weapon_trigger( var_0, var_1 )
{
var_0 endon( "death" );
self waittill( "trigger" );
if ( !isdefined( var_1 ) )
{
var_2 = level.player getcurrentprimaryweapon();
var_3 = weaponaltweaponname( var_2 );
var_4 = level.player getweaponammostock( var_2 );
var_5 = level.player getweaponammostock( var_3 );
jkuprint( var_4 + " " + var_2 );
jkuprint( var_5 + " " + var_3 );
level.player playsound( "weap_pickup_large_plr" );
level.player setweaponammostock( var_2, var_4 + randomintrange( 30, 60 ) );
level.player setweaponammostock( var_3, var_5 + 1 );
var_0 hidepart( "tag_clip" );
}
level thread create_pushed_dropped_weapon( var_0.origin, var_0.angles, var_0.model, var_0.attachments );
var_0 delete();
self delete();
}
loki_drop_weapon_cleanup( var_0, var_1 )
{
self endon( "death" );
if ( !isdefined( var_1 ) )
var_1 = 45;
wait( var_1 );
while ( maps\_utility::player_looking_at( self.origin, 0.4, 1 ) )
common_scripts\utility::waitframe();
if ( isdefined( var_0 ) && isalive( var_0 ) )
var_0 delete();
self delete();
}
create_world_model_from_ent_weapon( var_0 )
{
if ( isdefined( var_0 ) )
{
var_1 = getweaponmodel( var_0 );
var_2 = spawn( "script_model", ( 0, 0, -10000 ) );
var_2 setmodel( var_1 );
var_2.attachments = getweaponattachments( var_0 );
}
else
{
var_2 = self;
var_1 = self.model;
var_2.attachments = self.attachments;
}
jkuprint( "weapon attachment number: " + var_2.attachments.size );
foreach ( var_4 in var_2.attachments )
{
var_5 = getsubstr( var_4, 0, 4 );
switch ( var_5 )
{
case "acog":
jkuprint( var_4 );
var_2 hidepart( "tag_sight_on", var_1 );
var_2 attach( "weapon_acog_iw6", "tag_acog_2", 1 );
break;
case "eote":
jkuprint( var_4 );
var_2 hidepart( "tag_sight_on", var_1 );
var_2 attach( "weapon_eotech_iw6", "tag_eotech", 1 );
break;
case "refl":
jkuprint( var_4 );
var_2 hidepart( "tag_sight_on", var_1 );
var_2 attach( "weapon_reflex_reddot", "tag_red_dot", 1 );
break;
case "sile":
jkuprint( var_4 );
var_2 attach( "weapon_silencer_01", "tag_silencer", 1 );
break;
default:
jkuprint( "attachment failed: " + var_4 );
break;
}
}
return var_2;
}
create_rumble_ent( var_0, var_1, var_2 )
{
if ( !isdefined( var_0 ) )
var_0 = 0;
var_3 = common_scripts\utility::spawn_tag_origin();
var_3.origin = level.player.origin + ( 0, 0, var_0 );
var_3 linkto( level.player );
if ( isdefined( var_1 ) )
var_3.script_noteworthy = var_1;
if ( isdefined( var_2 ) )
var_3 common_scripts\utility::delaycall( var_2, ::delete );
return var_3;
}
player_physics_pulse( var_0 )
{
if ( isdefined( level.player.physics_pulse_on ) && level.player.physics_pulse_on )
return;
level.player.physics_pulse_on = 1;
var_1 = 0.15;
var_2 = 96;
while ( !common_scripts\utility::flag( var_0 ) )
{
physicsexplosionsphere( level.player.origin, var_2, 1, var_1 );
wait 0.05;
}
}
ally_physics_pulse( var_0 )
{
level endon( "death" );
if ( isdefined( self.physics_pulse_on ) && self.physics_pulse_on )
return;
self.physics_pulse_on = 1;
while ( !common_scripts\utility::flag( var_0 ) )
{
physicsexplosionsphere( self.origin, 45, 32, 0.15 );
wait 0.05;
}
}
waittill_trigger_activate_looking_at( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
var_7 = 0.5;
if ( isdefined( var_3 ) )
var_7 = var_3;
var_8 = 64;
if ( isdefined( var_2 ) )
var_8 = var_2;
var_9 = var_0;
if ( isdefined( var_4 ) )
{
var_9 = var_0 common_scripts\utility::spawn_tag_origin();
var_9 linkto( var_0, var_4, ( 0, 0, 0 ), ( 0, 0, 0 ) );
}
if ( !isdefined( var_5 ) )
var_5 = 5;
var_10 = var_1;
if ( !common_scripts\utility::flag_exist( var_10 ) )
common_scripts\utility::flag_init( var_10 );
var_11 = 0;
var_12 = 0;
for (;;)
{
if ( level.player ismeleeing() )
{
common_scripts\utility::flag_clear( var_10 );
var_12 = 0;
level.player enableweaponpickup();
}
else if ( level.player maps\_utility::player_looking_at( var_9.origin, var_7, 1 ) )
{
if ( isdefined( var_6 ) )
{
if ( level.player istouching( var_6 ) )
{
if ( !common_scripts\utility::flag( var_10 ) )
var_11 = 1;
}
else
{
common_scripts\utility::flag_clear( var_10 );
var_12 = 0;
level.player enableweaponpickup();
}
}
else if ( distance( level.player geteye(), var_9.origin ) <= var_8 )
{
if ( !common_scripts\utility::flag( var_10 ) )
var_11 = 1;
}
else
{
common_scripts\utility::flag_clear( var_10 );
var_12 = 0;
level.player enableweaponpickup();
}
}
else
{
common_scripts\utility::flag_clear( var_10 );
var_12 = 0;
level.player enableweaponpickup();
}
if ( level.player usebuttonpressed() )
var_12++;
if ( common_scripts\utility::flag( var_10 ) && var_12 >= var_5 )
break;
if ( var_11 )
{
common_scripts\utility::flag_set( var_10 );
maps\_utility::display_hint_timeout( var_1 );
var_11 = 0;
level.player disableweaponpickup();
}
wait 0.05;
}
level.player enableweaponpickup();
common_scripts\utility::flag_clear( var_10 );
if ( isdefined( var_4 ) )
var_9 delete();
}
waittill_fire_trigger_activate( var_0, var_1, var_2 )
{
if ( !isdefined( var_1 ) )
var_1 = 5;
var_3 = var_0;
if ( !common_scripts\utility::flag_exist( var_3 ) )
common_scripts\utility::flag_init( var_3 );
var_4 = 0;
for (;;)
{
if ( level.player attackbuttonpressed() )
var_4++;
else
var_4 = 0;
if ( level.player ismeleeing() )
{
common_scripts\utility::flag_clear( var_3 );
var_4 = 0;
}
if ( common_scripts\utility::flag( var_3 ) && var_4 >= var_1 )
break;
common_scripts\utility::flag_set( var_3 );
if ( !isdefined( var_2 ) || isdefined( var_2 ) && !common_scripts\utility::flag( var_2 ) )
maps\_utility::display_hint_timeout( var_0 );
else
common_scripts\utility::flag_clear( var_3 );
common_scripts\utility::waitframe();
}
common_scripts\utility::flag_clear( var_3 );
}