iw6-scripts/maps/mp/agents/alien/_alien_leper.gsc
2024-02-13 13:20:49 +01:00

172 lines
3.7 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
leper_init()
{
self.leperdespawntime = gettime() + 35000;
thread handle_favorite_enemy();
}
leper_combat( var_0 )
{
self endon( "death" );
var_0 endon( "death" );
leper_retreat( var_0 );
}
leper_retreat( var_0 )
{
for (;;)
{
leper_approach( var_0 );
leper_wait_at_node( var_0 );
}
}
leper_challenge_despawn( var_0 )
{
self endon( "leper_despawn" );
self endon( "death" );
wait( var_0 );
leper_despawn();
}
handle_favorite_enemy()
{
self endon( "death" );
for (;;)
{
self.favoriteenemy = maps\mp\alien\_utility::get_closest_living_player();
wait 5;
}
}
leper_despawn()
{
self endon( "death" );
self.health = 30000;
self.maxhealth = 30000;
self scragentsetgoalpos( self.origin );
self scragentsetgoalradius( 2048 );
playfxontag( level._effect["alien_teleport"], self, "tag_origin" );
wait 1.0;
self suicide();
}
leper_approach( var_0 )
{
var_1 = get_leper_retreat_node( var_0 );
if ( !isdefined( var_1 ) )
{
wait 1;
return;
}
self scragentsetgoalnode( var_1 );
self scragentsetgoalradius( 64 );
self waittill( "goal_reached" );
}
leave_node_on_distance_breach( var_0 )
{
var_0 endon( "death" );
self endon( "death" );
self endon( "enemy" );
self endon( "alien_main_loop_restart" );
self endon( "leave_node " );
for (;;)
{
if ( distancesquared( var_0.origin, self.origin ) < 1048576 )
self notify( "leave_node" );
wait 1;
}
}
leave_node_on_attacked( var_0 )
{
var_0 endon( "death" );
self endon( "death" );
self endon( "enemy" );
self endon( "alien_main_loop_restart" );
self endon( "leave_node " );
self waittill( "damage" );
wait 1.5;
self notify( "leave_node" );
}
leper_wait_at_node( var_0 )
{
self endon( "leave_node" );
thread leave_node_on_attacked( var_0 );
thread leave_node_on_distance_breach( var_0 );
wait 5.0;
}
get_leper_retreat_node( var_0 )
{
var_1 = get_named_retreat_nodes();
if ( !isdefined( var_1 ) )
var_1 = get_possible_retreat_nodes();
var_2 = [];
var_2["direction"] = "override";
var_2["direction_override"] = get_direction_away_from_players();
var_2["direction_weight"] = 2.0;
var_2["min_height"] = 64.0;
var_2["max_height"] = 500.0;
var_2["height_weight"] = 2.0;
var_2["enemy_los"] = 0;
var_2["enemy_los_weight"] = 2.0;
var_2["min_dist_from_enemy"] = 500.0;
var_2["max_dist_from_enemy"] = 2048.0;
var_2["desired_dist_from_enemy"] = 1500.0;
var_2["dist_from_enemy_weight"] = 3.0;
var_2["min_dist_from_all_enemies"] = 800.0;
var_2["min_dist_from_all_enemies_weight"] = 5.0;
var_2["not_recently_used_weight"] = 4.0;
var_2["random_weight"] = 1.5;
var_3 = maps\mp\agents\alien\_alien_think::get_retreat_node_rated( var_0, var_2, var_1 );
return var_3;
}
get_possible_retreat_nodes()
{
var_0 = getnodesinradius( self.origin, 1024, 400, 500, "jump" );
return var_0;
}
get_direction_away_from_players()
{
if ( level.players.size == 0 )
return self.origin + anglestoforward( self.angles ) * 100;
var_0 = ( 0, 0, 0 );
foreach ( var_2 in level.players )
var_0 = var_0 + var_2.origin;
var_0 = var_0 / level.players.size;
return self.origin - var_0;
}
leper_attack()
{
return;
}
get_named_retreat_nodes()
{
var_0 = maps\mp\alien\_utility::get_current_area_name();
var_1 = getnodearray( var_0 + "_leper_location", "targetname" );
if ( isdefined( var_1 ) && var_1.size > 0 )
return var_1;
return undefined;
}