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

281 lines
8.0 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
stealth_visibility_friendly_main()
{
friendly_init();
thread friendly_visibility_logic();
}
friendly_visibility_logic()
{
self endon( "death" );
self endon( "pain_death" );
var_0 = self._stealth.logic.current_stance_func;
if ( isplayer( self ) )
thread player_movespeed_calc_loop();
for (;;)
{
maps\_utility::ent_flag_wait( "_stealth_enabled" );
self [[ var_0 ]]();
self.maxvisibledist = friendly_compute_score();
wait 0.05;
}
}
friendly_getvelocity()
{
return length( self getvelocity() );
}
player_getvelocity_pc()
{
var_0 = length( self getvelocity() );
var_1 = self._stealth.logic.stance;
var_2 = [];
var_2["stand"] = 30;
var_2["crouch"] = 15;
var_2["prone"] = 4;
var_3 = [];
var_3["stand"] = 40;
var_3["crouch"] = 25;
var_3["prone"] = 10;
if ( !var_0 )
self._stealth.logic.player_pc_velocity = 0;
else if ( var_0 > self._stealth.logic.player_pc_velocity )
{
self._stealth.logic.player_pc_velocity = self._stealth.logic.player_pc_velocity + var_2[var_1];
if ( self._stealth.logic.player_pc_velocity > var_0 )
self._stealth.logic.player_pc_velocity = var_0;
}
else if ( var_0 < self._stealth.logic.player_pc_velocity )
{
self._stealth.logic.player_pc_velocity = self._stealth.logic.player_pc_velocity - var_3[var_1];
if ( self._stealth.logic.player_pc_velocity < 0 )
self._stealth.logic.player_pc_velocity = 0;
}
return self._stealth.logic.player_pc_velocity;
}
friendly_compute_score( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = self._stealth.logic.stance;
if ( var_0 == "back" )
var_0 = "prone";
if ( isdefined( self.type ) && self.type == "dog" )
{
if ( isdefined( self.sprint ) && self.sprint )
var_0 = "crouch";
else
var_0 = "prone";
}
if ( maps\_stealth_utility::stealth_group_spotted_flag() )
var_1 = "spotted";
else
var_1 = "hidden";
var_2 = level._stealth.logic.detect_range[var_1][var_0];
if ( maps\_utility::ent_flag( "_stealth_in_shadow" ) )
{
var_2 = var_2 * 0.5;
if ( var_2 < level._stealth.logic.detect_range["hidden"]["prone"] )
var_2 = level._stealth.logic.detect_range["hidden"]["prone"];
}
var_3 = self._stealth.logic.movespeed_multiplier[var_1][var_0];
if ( isdefined( self._stealth_move_detection_cap ) && var_3 > self._stealth_move_detection_cap )
var_3 = self._stealth_move_detection_cap;
return var_2 + var_3;
}
friendly_getstance_ai()
{
return self.a.pose;
}
friendly_getangles_ai()
{
return self.angles;
}
friendly_compute_stances_ai()
{
self._stealth.logic.stance = self [[ self._stealth.logic.getstance_func ]]();
self._stealth.logic.oldstance = self._stealth.logic.stance;
}
player_movespeed_calc_loop()
{
self endon( "death" );
self endon( "pain_death" );
var_0 = self._stealth.logic.getangles_func;
var_1 = self._stealth.logic.getvelocity_func;
var_2 = self [[ var_0 ]]();
for (;;)
{
maps\_utility::ent_flag_wait( "_stealth_enabled" );
var_3 = undefined;
if ( maps\_utility::ent_flag( "_stealth_in_shadow" ) )
var_3 = 0;
else
var_3 = self [[ var_1 ]]();
foreach ( var_9, var_5 in self._stealth.logic.movespeed_multiplier )
{
foreach ( var_8, var_7 in var_5 )
var_7 = var_3 * self._stealth.logic.movespeed_scale[var_9][var_8];
}
var_2 = self [[ var_0 ]]();
wait 0.1;
}
}
friendly_getstance_player()
{
return self getstance();
}
friendly_getangles_player()
{
return self getplayerangles();
}
friendly_compute_stances_player()
{
var_0 = self [[ self._stealth.logic.getstance_func ]]();
if ( !self._stealth.logic.stance_change )
{
switch ( var_0 )
{
case "prone":
if ( self._stealth.logic.oldstance != "prone" )
self._stealth.logic.stance_change = self._stealth.logic.stance_change_time;
break;
case "crouch":
if ( self._stealth.logic.oldstance == "stand" )
self._stealth.logic.stance_change = self._stealth.logic.stance_change_time;
break;
}
}
if ( self._stealth.logic.stance_change )
{
self._stealth.logic.stance = self._stealth.logic.oldstance;
if ( self._stealth.logic.stance_change > 0.05 )
self._stealth.logic.stance_change = self._stealth.logic.stance_change - 0.05;
else
{
self._stealth.logic.stance_change = 0;
self._stealth.logic.stance = var_0;
self._stealth.logic.oldstance = var_0;
}
}
else
{
self._stealth.logic.stance = var_0;
self._stealth.logic.oldstance = var_0;
}
}
friendly_init()
{
maps\_utility::ent_flag_init( "_stealth_in_shadow" );
maps\_utility::ent_flag_init( "_stealth_enabled" );
maps\_utility::ent_flag_set( "_stealth_enabled" );
maps\_stealth_shared_utilities::group_flag_init( "_stealth_spotted" );
maps\_stealth_shared_utilities::group_add_to_global_list();
self._stealth = spawnstruct();
self._stealth.logic = spawnstruct();
if ( isplayer( self ) )
{
self._stealth.logic.getstance_func = ::friendly_getstance_player;
self._stealth.logic.getangles_func = ::friendly_getangles_player;
if ( level.console )
self._stealth.logic.getvelocity_func = ::friendly_getvelocity;
else
{
self._stealth.logic.getvelocity_func = ::player_getvelocity_pc;
self._stealth.logic.player_pc_velocity = 0;
}
self._stealth.logic.current_stance_func = ::friendly_compute_stances_player;
}
else
{
self._stealth.logic.getstance_func = ::friendly_getstance_ai;
self._stealth.logic.getangles_func = ::friendly_getangles_ai;
self._stealth.logic.getvelocity_func = ::friendly_getvelocity;
self._stealth.logic.current_stance_func = ::friendly_compute_stances_ai;
}
self._stealth.logic.stance_change_time = 0.2;
self._stealth.logic.stance_change = 0;
self._stealth.logic.oldstance = self [[ self._stealth.logic.getstance_func ]]();
self._stealth.logic.stance = self [[ self._stealth.logic.getstance_func ]]();
self._stealth.logic.spotted_list = [];
self._stealth.logic.movespeed_multiplier = [];
self._stealth.logic.movespeed_scale = [];
self._stealth.logic.movespeed_multiplier["hidden"] = [];
self._stealth.logic.movespeed_multiplier["hidden"]["prone"] = 0;
self._stealth.logic.movespeed_multiplier["hidden"]["crouch"] = 0;
self._stealth.logic.movespeed_multiplier["hidden"]["stand"] = 0;
self._stealth.logic.movespeed_multiplier["spotted"] = [];
self._stealth.logic.movespeed_multiplier["spotted"]["prone"] = 0;
self._stealth.logic.movespeed_multiplier["spotted"]["crouch"] = 0;
self._stealth.logic.movespeed_multiplier["spotted"]["stand"] = 0;
friendly_default_movespeed_scale();
}
friendly_default_movespeed_scale()
{
var_0 = [];
var_0["prone"] = 3;
var_0["crouch"] = 2;
var_0["stand"] = 2;
var_1 = [];
var_1["prone"] = 2;
var_1["crouch"] = 2;
var_1["stand"] = 2;
friendly_set_movespeed_scale( var_0, var_1 );
}
friendly_set_movespeed_scale( var_0, var_1 )
{
if ( isdefined( var_0 ) )
{
self._stealth.logic.movespeed_scale["hidden"]["prone"] = var_0["prone"];
self._stealth.logic.movespeed_scale["hidden"]["crouch"] = var_0["crouch"];
self._stealth.logic.movespeed_scale["hidden"]["stand"] = var_0["stand"];
}
if ( isdefined( var_1 ) )
{
self._stealth.logic.movespeed_scale["spotted"]["prone"] = var_1["prone"];
self._stealth.logic.movespeed_scale["spotted"]["crouch"] = var_1["crouch"];
self._stealth.logic.movespeed_scale["spotted"]["stand"] = var_1["stand"];
}
}