583 lines
15 KiB
Plaintext
583 lines
15 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
onplayerkilled( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
|
|
{
|
|
if ( level.gameended == 1 )
|
|
return;
|
|
|
|
if ( kill_trigger_event_was_processed() )
|
|
return;
|
|
|
|
set_kill_trigger_event_processed( self, 1 );
|
|
maps\mp\alien\_laststand::callback_playerlaststandalien( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, getkilltriggerspawnloc() );
|
|
}
|
|
|
|
kill_trigger_event_was_processed()
|
|
{
|
|
return maps\mp\alien\_utility::is_true( self.kill_trigger_event_processed );
|
|
}
|
|
|
|
set_kill_trigger_event_processed( var_0, var_1 )
|
|
{
|
|
self.kill_trigger_event_processed = var_1;
|
|
}
|
|
|
|
onnormaldeath( var_0, var_1, var_2 )
|
|
{
|
|
if ( game["state"] == "postgame" && game["teamScores"][var_1.team] > game["teamScores"][level.otherteam[var_1.team]] )
|
|
var_1.finalkill = 1;
|
|
}
|
|
|
|
onalienagentkilled( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
|
|
{
|
|
if ( isdefined( var_3 ) && var_3 == "MOD_SUICIDE" && isdefined( self.scene ) && self.scene )
|
|
return;
|
|
|
|
self.isactive = 0;
|
|
self.hasdied = 0;
|
|
self.owner = undefined;
|
|
var_9 = self.alien_type;
|
|
var_10 = 0;
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = anglestoforward( self.angles );
|
|
|
|
maps\mp\alien\_alien_fx::disable_fx_on_death();
|
|
|
|
if ( var_3 == "MOD_TRIGGER_HURT" )
|
|
return;
|
|
|
|
var_11 = 10;
|
|
|
|
if ( maps\mp\alien\_utility::is_trap( var_0 ) )
|
|
var_11 = 3;
|
|
|
|
level thread maps\mp\alien\_utility::mark_dangerous_nodes( self.origin, 256, var_11 );
|
|
var_12 = is_pettrap_kill( var_0 );
|
|
|
|
if ( var_4 == "alienthrowingknife_mp" && var_3 == "MOD_IMPACT" || var_12 || maps\mp\alien\_utility::is_true( self.hypnoknifed ) )
|
|
{
|
|
if ( maps\mp\alien\_utility::can_hypno( var_1, var_12 ) )
|
|
{
|
|
thread maps\mp\gametypes\aliens::spawnallypet( var_9, 1, self.origin, var_1, self.angles, var_12 );
|
|
var_10 = 1;
|
|
|
|
if ( var_9 == "elite" && var_12 && isdefined( level.update_achievement_hypno_trap_func ) )
|
|
var_1 [[ level.update_achievement_hypno_trap_func ]]();
|
|
}
|
|
|
|
if ( !var_12 )
|
|
var_0 delete();
|
|
}
|
|
|
|
var_13 = 0;
|
|
|
|
if ( isdefined( level.custom_alien_death_func ) )
|
|
var_13 = self [[ level.custom_alien_death_func ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
|
|
|
|
if ( should_do_pipebomb_death( var_4 ) )
|
|
thread do_pipebomb_death();
|
|
else if ( should_play_death() && var_3 != "MOD_SUICIDE" && !var_10 && !var_13 )
|
|
play_death_anim_and_ragdoll( var_0, var_2, var_3, var_4, var_5, var_6 );
|
|
|
|
on_alien_type_killed( var_10 );
|
|
maps\mp\agents\alien\_alien_think::onenteranimstate( self.currentanimstate, "death" );
|
|
var_1 notify( "dlc_vo_notify", maps\mp\alien\_utility::get_alien_type() + "_killed", var_1 );
|
|
|
|
switch ( maps\mp\alien\_utility::get_alien_type() )
|
|
{
|
|
case "mammoth":
|
|
self playsoundonmovingent( "queen_death" );
|
|
break;
|
|
case "elite":
|
|
self playsoundonmovingent( "queen_death" );
|
|
break;
|
|
case "minion":
|
|
self playsoundonmovingent( "alien_minion_explode" );
|
|
break;
|
|
case "spitter":
|
|
self playsoundonmovingent( "spitter_death" );
|
|
break;
|
|
default:
|
|
self playsoundonmovingent( "alien_death" );
|
|
break;
|
|
}
|
|
|
|
if ( isdefined( level.attack_heli ) && var_1 == level.attack_heli )
|
|
{
|
|
var_14 = maps\mp\alien\_gamescore::get_reward_point_for_kill();
|
|
var_15 = var_14 / var_1.reward_pool.size;
|
|
|
|
foreach ( var_17 in var_1.reward_pool )
|
|
{
|
|
if ( isdefined( var_17 ) )
|
|
var_17.chopper_reward = 0;
|
|
}
|
|
|
|
foreach ( var_17 in var_1.reward_pool )
|
|
{
|
|
if ( isdefined( var_17 ) )
|
|
var_17.chopper_reward = var_17.chopper_reward + var_15;
|
|
}
|
|
|
|
foreach ( var_17 in level.players )
|
|
{
|
|
if ( isdefined( var_17 ) && isdefined( var_17.chopper_reward ) )
|
|
maps\mp\alien\_gamescore::givekillreward( var_17, int( var_17.chopper_reward ), "large" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( isdefined( var_1.pet ) && var_1.pet == 1 )
|
|
maps\mp\alien\_gamescore::give_attacker_kill_rewards( var_1.owner );
|
|
else
|
|
maps\mp\alien\_gamescore::give_attacker_kill_rewards( var_1, var_6 );
|
|
|
|
var_1 thread maps\mp\alien\_persistence::update_weaponstats_kills( var_4, 1 );
|
|
}
|
|
|
|
maps\mp\alien\_challenge_function::update_alien_death_challenges( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
|
|
maps\mp\alien\_achievement::update_alien_kill_achievements( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
|
|
maps\mp\alien\_persistence::update_alien_kill_sessionstats( var_0, var_1 );
|
|
|
|
if ( maps\mp\alien\_utility::is_chaos_mode() )
|
|
maps\mp\alien\_chaos::update_alien_killed_event( maps\mp\alien\_utility::get_alien_type(), self.origin, var_1 );
|
|
|
|
blackbox_alienkilled( var_1 );
|
|
var_23 = get_attacker_as_player( var_1 );
|
|
|
|
if ( isdefined( var_23 ) )
|
|
{
|
|
record_player_kills( var_23 );
|
|
check_award_token_for_kill( var_23 );
|
|
}
|
|
|
|
level notify( "alien_killed", self.origin, var_3, var_1 );
|
|
}
|
|
|
|
get_attacker_as_player( var_0 )
|
|
{
|
|
if ( isplayer( var_0 ) )
|
|
return var_0;
|
|
|
|
if ( isdefined( var_0.owner ) && isplayer( var_0.owner ) )
|
|
return var_0.owner;
|
|
|
|
return undefined;
|
|
}
|
|
|
|
record_player_kills( var_0 )
|
|
{
|
|
var_0 maps\mp\alien\_persistence::set_player_kills();
|
|
var_0 maps\mp\alien\_persistence::eog_player_update_stat( "kills", 1 );
|
|
}
|
|
|
|
check_award_token_for_kill( var_0 )
|
|
{
|
|
var_1 = var_0 maps\mp\alien\_persistence::get_player_kills();
|
|
|
|
if ( var_1 % 300 == 0 )
|
|
var_0 maps\mp\alien\_persistence::give_player_tokens( 1, 1 );
|
|
}
|
|
|
|
on_alien_type_killed( var_0 )
|
|
{
|
|
switch ( maps\mp\alien\_utility::get_alien_type() )
|
|
{
|
|
case "minion":
|
|
level thread maps\mp\agents\alien\_alien_minion::minion_explode_on_death( self.origin );
|
|
break;
|
|
case "spitter":
|
|
maps\mp\agents\alien\_alien_spitter::spitter_death();
|
|
break;
|
|
default:
|
|
if ( isdefined( level.dlc_alien_death_override_func ) )
|
|
self [[ level.dlc_alien_death_override_func ]]( var_0 );
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
should_play_death()
|
|
{
|
|
switch ( maps\mp\alien\_utility::get_alien_type() )
|
|
{
|
|
case "bomber":
|
|
case "seeder":
|
|
case "minion":
|
|
return 0;
|
|
default:
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
play_death_anim_and_ragdoll( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = 24;
|
|
var_7 = 30;
|
|
|
|
if ( getdvarint( "alien_easter_egg" ) > 0 || isdefined( level.easter_egg_lodge_sign_active ) && level.easter_egg_lodge_sign_active )
|
|
playfx( level._effect["arcade_death"], self.origin );
|
|
else
|
|
{
|
|
var_8 = get_primary_death_anim_state();
|
|
|
|
if ( !maps\mp\alien\_utility::is_normal_upright( anglestoup( self.angles ) ) )
|
|
move_away_from_surface( anglestoup( self.angles ), var_6 );
|
|
|
|
if ( isdefined( self.apextraversaldeathvector ) )
|
|
move_away_from_surface( self.apextraversaldeathvector, var_7 );
|
|
|
|
play_death_anim_and_ragdoll_internal( var_8, var_0, var_1, var_2, var_3, var_4, var_5 );
|
|
}
|
|
}
|
|
|
|
should_do_immediate_ragdoll( var_0 )
|
|
{
|
|
if ( isdefined( level.dlc_alien_should_immediate_ragdoll_on_death_override_func ) )
|
|
{
|
|
var_1 = [[ level.dlc_alien_should_immediate_ragdoll_on_death_override_func ]]( var_0 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
return var_1;
|
|
}
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "jump":
|
|
case "traverse":
|
|
return 1;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
play_death_anim_and_ragdoll_internal( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
if ( is_special_death( var_0 ) )
|
|
{
|
|
var_7 = "special_death";
|
|
var_8 = maps\mp\agents\alien\_alien_anim_utils::getspecialdeathanimindex( var_0 );
|
|
}
|
|
else
|
|
{
|
|
var_7 = maps\mp\agents\alien\_alien_anim_utils::getdeathanimstate( var_0 + "_death", var_2 );
|
|
var_8 = maps\mp\agents\alien\_alien_anim_utils::getdeathanimindex( var_0, var_5, var_6 );
|
|
}
|
|
|
|
var_9 = should_do_immediate_ragdoll( var_0 );
|
|
self scragentsetphysicsmode( get_death_anim_physics_mode( var_7 ) );
|
|
self setanimstate( var_7, var_8 );
|
|
self.body = get_clone_agent( var_7, var_8 );
|
|
thread handle_ragdoll( self.body, var_7, var_9 );
|
|
}
|
|
|
|
move_away_from_surface( var_0, var_1 )
|
|
{
|
|
var_2 = self.origin + var_0 * var_1;
|
|
self setorigin( var_2 );
|
|
}
|
|
|
|
get_primary_death_anim_state()
|
|
{
|
|
if ( isdefined( self.shocked ) && self.shocked )
|
|
return "electric_shock_death";
|
|
|
|
switch ( self.currentanimstate )
|
|
{
|
|
case "scripted":
|
|
return "idle";
|
|
case "move":
|
|
if ( self.trajectoryactive )
|
|
return "jump";
|
|
else
|
|
return "run";
|
|
case "idle":
|
|
return "idle";
|
|
case "melee":
|
|
if ( self.trajectoryactive )
|
|
return "jump";
|
|
|
|
if ( self.melee_in_move_back || self.melee_in_posture )
|
|
return "idle";
|
|
else
|
|
return "run";
|
|
case "traverse":
|
|
if ( self.trajectoryactive )
|
|
return "jump";
|
|
else
|
|
{
|
|
return "traverse";
|
|
default:
|
|
}
|
|
}
|
|
}
|
|
|
|
is_special_death( var_0 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "electric_shock_death":
|
|
case "traverse":
|
|
return 1;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
get_death_anim_physics_mode( var_0 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "electric_shock":
|
|
return "noclip";
|
|
default:
|
|
return "gravity";
|
|
}
|
|
}
|
|
|
|
get_clone_agent( var_0, var_1 )
|
|
{
|
|
var_2 = self getanimentry( var_0, var_1 );
|
|
var_3 = getanimlength( var_2 );
|
|
|
|
if ( animhasnotetrack( var_2, "start_ragdoll" ) )
|
|
{
|
|
var_4 = getnotetracktimes( var_2, "start_ragdoll" );
|
|
var_3 = var_3 * var_4[0];
|
|
}
|
|
|
|
var_5 = int( var_3 * 1000 );
|
|
return self cloneagent( var_5 );
|
|
}
|
|
|
|
handle_ragdoll( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = var_0 getcorpseanim();
|
|
|
|
if ( !should_do_ragdoll( var_0, var_3 ) )
|
|
return;
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_0 startragdoll();
|
|
|
|
if ( var_0 isragdoll() )
|
|
return;
|
|
}
|
|
|
|
delaystartragdoll( var_0, var_3 );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
if ( var_1 == "shock_death" )
|
|
self notify( "in_ragdoll", var_0.origin );
|
|
}
|
|
|
|
delaystartragdoll( var_0, var_1 )
|
|
{
|
|
var_2 = getanimlength( var_1 );
|
|
|
|
if ( animhasnotetrack( var_1, "start_ragdoll" ) )
|
|
{
|
|
var_3 = getnotetracktimes( var_1, "start_ragdoll" );
|
|
var_4 = var_3[0];
|
|
var_5 = var_4 * var_2;
|
|
}
|
|
else
|
|
var_5 = 0.2;
|
|
|
|
wait( var_5 );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
else
|
|
{
|
|
var_0 startragdoll();
|
|
|
|
if ( var_0 isragdoll() )
|
|
return;
|
|
}
|
|
|
|
if ( var_5 < var_2 )
|
|
{
|
|
wait( var_2 - var_5 );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
else
|
|
{
|
|
var_0 startragdoll();
|
|
|
|
if ( var_0 isragdoll() )
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 delete();
|
|
}
|
|
|
|
should_do_ragdoll( var_0, var_1 )
|
|
{
|
|
if ( var_0 isragdoll() )
|
|
return 0;
|
|
|
|
if ( animhasnotetrack( var_1, "ignore_ragdoll" ) )
|
|
return 0;
|
|
|
|
if ( isdefined( level.noragdollents ) && level.noragdollents.size )
|
|
{
|
|
foreach ( var_3 in level.noragdollents )
|
|
{
|
|
if ( distancesquared( var_0.origin, var_3.origin ) < 65536 )
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
blackbox_alienkilled( var_0 )
|
|
{
|
|
if ( isplayer( var_0 ) || isdefined( var_0.pet ) && var_0.pet == 1 && isplayer( var_0.petowner ) || isdefined( var_0.owner ) && isplayer( var_0.owner ) )
|
|
level.alienbbdata["aliens_killed"]++;
|
|
|
|
self notify( "alien_killed" );
|
|
var_1 = isagent( var_0 );
|
|
|
|
if ( var_1 )
|
|
{
|
|
var_2 = ( gettime() - var_0.birthtime ) / 1000;
|
|
var_3 = "unknown agent";
|
|
var_4 = "none";
|
|
|
|
if ( isdefined( var_0.agent_type ) )
|
|
{
|
|
var_3 = var_0.agent_type;
|
|
|
|
if ( isdefined( var_0.alien_type ) )
|
|
var_3 = var_0.alien_type;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_2 = 0;
|
|
var_4 = "none";
|
|
|
|
if ( isplayer( var_0 ) )
|
|
{
|
|
var_3 = "player";
|
|
|
|
if ( isdefined( var_0.name ) )
|
|
var_4 = var_0.name;
|
|
}
|
|
else
|
|
var_3 = "nonagent";
|
|
}
|
|
|
|
var_5 = 0.0;
|
|
var_6 = 0.0;
|
|
var_7 = 0.0;
|
|
|
|
if ( isdefined( var_0 ) && ( isagent( var_0 ) || isplayer( var_0 ) ) )
|
|
{
|
|
var_5 = var_0.origin[0];
|
|
var_6 = var_0.origin[1];
|
|
var_7 = var_0.origin[2];
|
|
}
|
|
|
|
var_8 = 0;
|
|
|
|
if ( isdefined( self.birthtime ) )
|
|
var_8 = ( gettime() - self.birthtime ) / 1000;
|
|
|
|
var_9 = ( 0, 0, 0 );
|
|
|
|
if ( isdefined( self.spawnorigin ) )
|
|
var_9 = self.spawnorigin;
|
|
|
|
var_10 = 0;
|
|
|
|
if ( isdefined( self.spawnorigin ) )
|
|
var_10 = distance( self.origin, self.spawnorigin );
|
|
|
|
var_11 = 0;
|
|
|
|
if ( isdefined( self.damage_done ) )
|
|
var_11 = self.damage_done;
|
|
|
|
var_12 = "unknown agent";
|
|
|
|
if ( isdefined( self.agent_type ) )
|
|
{
|
|
var_12 = self.agent_type;
|
|
|
|
if ( isdefined( self.alien_type ) )
|
|
var_12 = self.alien_type;
|
|
}
|
|
|
|
var_13 = 0;
|
|
|
|
foreach ( var_15 in level.agentarray )
|
|
{
|
|
if ( !isdefined( var_15.isactive ) || !var_15.isactive )
|
|
continue;
|
|
|
|
if ( isdefined( var_15.team ) && var_15.team == "axis" )
|
|
var_13++;
|
|
}
|
|
|
|
var_17 = 0;
|
|
|
|
if ( isdefined( level.players ) )
|
|
var_17 = level.players.size;
|
|
|
|
bbprint( "alienkilled", "attackerisagent %i attackeralivetime %f attackeragenttype %s attackername %s attackerx %f attackery %f attackerz %f victimalivetime %f victimspawnoriginx %f victimspawnoriginy %f victimspawnoriginz %f victimdistfromspawn %i victimdamagedone %i victimagenttype %s currentenemypopulation %i currentplayerpopulation %i ", var_1, var_2, var_3, var_4, var_0.origin[0], var_0.origin[1], var_0.origin[2], var_8, var_9[0], var_9[1], var_9[2], var_10, var_11, var_12, var_13, var_17 );
|
|
}
|
|
|
|
kill_trigger_spawn_init()
|
|
{
|
|
level.killtriggerspawnlocs = common_scripts\utility::getstructarray( "respawn_edge", "targetname" );
|
|
}
|
|
|
|
getkilltriggerspawnloc()
|
|
{
|
|
return common_scripts\utility::getclosest( self.origin, level.killtriggerspawnlocs );
|
|
}
|
|
|
|
should_do_pipebomb_death( var_0 )
|
|
{
|
|
var_1 = maps\mp\alien\_utility::get_alien_type();
|
|
|
|
if ( var_1 == "minion" || var_1 == "elite" || var_1 == "mammoth" )
|
|
return 0;
|
|
|
|
return isdefined( var_0 ) && var_0 == "iw6_aliendlc22_mp";
|
|
}
|
|
|
|
do_pipebomb_death()
|
|
{
|
|
playfx( level._effect["alien_gib"], self.origin + ( 0, 0, 32 ) );
|
|
}
|
|
|
|
is_pettrap_kill( var_0 )
|
|
{
|
|
return isdefined( var_0 ) && isdefined( var_0.is_pet_trap );
|
|
}
|
|
|
|
general_alien_custom_death( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
var_7 = isdefined( var_1 ) && isplayer( var_1 );
|
|
|
|
if ( var_7 && isdefined( var_4 ) && maps\mp\alien\_utility::weapon_has_alien_attachment( var_4 ) && var_3 != "MOD_MELEE" && !maps\mp\alien\_utility::is_true( level.easter_egg_lodge_sign_active ) )
|
|
{
|
|
playfx( level._effect["alien_ark_gib"], self.origin + ( 0, 0, 32 ) );
|
|
return 1;
|
|
}
|
|
else
|
|
return 0;
|
|
}
|