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

245 lines
7.5 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
stealth_smartstance_friendly_main()
{
friendly_init();
thread friendly_stance_handler();
}
friendly_stance_handler()
{
self endon( "death" );
self endon( "pain_death" );
self.old_fixednode = self.fixednode;
self.old_fixednodesaferadius = self.fixednodesaferadius;
for (;;)
{
maps\_utility::ent_flag_wait( "_stealth_stance_handler" );
common_scripts\utility::flag_waitopen( "_stealth_spotted" );
self.fixednode = 1;
self.fixednodesaferadius = 10;
while ( maps\_utility::ent_flag( "_stealth_stance_handler" ) && !common_scripts\utility::flag( "_stealth_spotted" ) )
{
friendly_stance_handler_set_stance_up();
var_0 = [];
var_0 = friendly_stance_handler_check_mightbeseen( var_0 );
if ( var_0[self._stealth.logic.stance] )
thread friendly_stance_handler_change_stance_down();
else if ( maps\_utility::ent_flag( "_stealth_stay_still" ) )
thread friendly_stance_handler_resume_path();
else if ( !var_0[self._stealth.behavior.stance_up] && self._stealth.behavior.stance_up != self._stealth.logic.stance )
thread friendly_stance_handler_change_stance_up();
else if ( maps\_utility::ent_flag( "_stealth_stance_change" ) )
self notify( "_stealth_stance_dont_change" );
wait 0.05;
}
self.fixednode = self.old_fixednode;
self.fixednodesaferadius = self.old_fixednodesaferadius;
self.moveplaybackrate = 1;
self allowedstances( "stand", "crouch", "prone" );
if ( maps\_utility::ent_flag( "_stealth_stay_still" ) )
thread friendly_stance_handler_resume_path( 0 );
}
}
friendly_stance_handler_set_stance_up()
{
switch ( self._stealth.logic.stance )
{
case "prone":
self._stealth.behavior.stance_up = "crouch";
break;
case "crouch":
self._stealth.behavior.stance_up = "stand";
break;
case "stand":
self._stealth.behavior.stance_up = "stand";
break;
}
}
friendly_stance_handler_check_mightbeseen( var_0 )
{
var_1 = getaispeciesarray( "bad_guys", "all" );
var_0[self._stealth.logic.stance] = 0;
var_0[self._stealth.behavior.stance_up] = 0;
foreach ( var_9, var_3 in var_1 )
{
var_4 = friendly_stance_handler_return_ai_sight( var_3, self._stealth.logic.stance );
var_5 = friendly_stance_handler_return_ai_sight( var_3, self._stealth.behavior.stance_up );
var_6 = maps\_stealth_visibility_friendly::friendly_compute_score() + var_4;
var_7 = maps\_stealth_visibility_friendly::friendly_compute_score( self._stealth.behavior.stance_up ) + var_5;
var_8 = distance( var_3.origin, self.origin );
if ( var_8 < var_6 )
{
var_0[self._stealth.logic.stance] = var_6;
break;
}
if ( var_8 < var_7 )
var_0[self._stealth.behavior.stance_up] = var_7;
}
return var_0;
}
friendly_stance_handler_return_ai_sight( var_0, var_1 )
{
var_2 = anglestoforward( var_0.angles );
var_3 = vectornormalize( self.origin - var_0.origin );
var_4 = vectordot( var_2, var_3 );
if ( var_4 > 0.3 )
return self._stealth.behavior.stance_handler["looking_towards"][var_1];
else if ( var_4 < -0.7 )
return self._stealth.behavior.stance_handler["looking_away"][var_1];
else
return self._stealth.behavior.stance_handler["neutral"][var_1];
}
friendly_stance_handler_change_stance_down()
{
self.moveplaybackrate = 1;
self notify( "_stealth_stance_down" );
switch ( self._stealth.logic.stance )
{
case "stand":
self.moveplaybackrate = 0.7;
self allowedstances( "crouch" );
break;
case "crouch":
if ( self._stealth.behavior.no_prone )
friendly_stance_handler_stay_still();
else
self allowedstances( "prone" );
break;
case "prone":
friendly_stance_handler_stay_still();
break;
}
}
friendly_stance_handler_change_stance_up()
{
self endon( "_stealth_stance_down" );
self endon( "_stealth_stance_dont_change" );
self endon( "_stealth_stance_handler" );
if ( maps\_utility::ent_flag( "_stealth_stance_change" ) )
return;
var_0 = 4;
maps\_utility::ent_flag_set( "_stealth_stance_change" );
maps\_utility::add_wait( maps\_utility::_wait, var_0 );
maps\_utility::add_wait( maps\_utility::waittill_msg, "_stealth_stance_down" );
maps\_utility::add_wait( maps\_utility::waittill_msg, "_stealth_stance_dont_change" );
maps\_utility::add_wait( maps\_utility::waittill_msg, "_stealth_stance_handler" );
maps\_utility::add_func( maps\_utility::ent_flag_clear, "_stealth_stance_change" );
thread maps\_utility::do_wait_any();
wait( var_0 );
self.moveplaybackrate = 1;
switch ( self._stealth.logic.stance )
{
case "prone":
self allowedstances( "crouch" );
break;
case "crouch":
self allowedstances( "stand" );
break;
case "stand":
break;
}
}
friendly_stance_handler_stay_still()
{
self notify( "friendly_stance_handler_stay_still" );
if ( maps\_utility::ent_flag( "_stealth_stay_still" ) )
return;
maps\_utility::ent_flag_set( "_stealth_stay_still" );
badplace_cylinder( "_stealth_" + self.unique_id + "_prone", 0, self.origin, 30, 90, "bad_guys" );
self.fixednodesaferadius = 5000;
}
friendly_stance_handler_resume_path( var_0 )
{
self endon( "friendly_stance_handler_stay_still" );
if ( !isdefined( var_0 ) )
var_0 = self._stealth.behavior.wait_resume_path;
wait( var_0 );
if ( !maps\_utility::ent_flag( "_stealth_stay_still" ) )
return;
maps\_utility::ent_flag_clear( "_stealth_stay_still" );
badplace_delete( "_stealth_" + self.unique_id + "_prone" );
self.fixednodesaferadius = 10;
}
friendly_init()
{
maps\_utility::ent_flag_init( "_stealth_stance_handler" );
maps\_utility::ent_flag_init( "_stealth_stay_still" );
maps\_utility::ent_flag_init( "_stealth_stance_change" );
self._stealth.behavior.stance_up = undefined;
self._stealth.behavior.stance_handler = [];
friendly_default_stance_handler_distances();
self._stealth.behavior.no_prone = 0;
self._stealth.behavior.wait_resume_path = 2;
self._stealth.plugins.smartstance = 1;
}
friendly_default_stance_handler_distances()
{
var_0 = [];
var_0["stand"] = 500;
var_0["crouch"] = -400;
var_0["prone"] = 0;
var_1 = [];
var_1["stand"] = 500;
var_1["crouch"] = 200;
var_1["prone"] = 50;
var_2 = [];
var_2["stand"] = 800;
var_2["crouch"] = 400;
var_2["prone"] = 100;
friendly_set_stance_handler_distances( var_0, var_1, var_2 );
}
friendly_set_stance_handler_distances( var_0, var_1, var_2 )
{
if ( isdefined( var_0 ) )
{
foreach ( var_5, var_4 in var_0 )
self._stealth.behavior.stance_handler["looking_away"][var_5] = var_4;
}
if ( isdefined( var_1 ) )
{
foreach ( var_5, var_4 in var_1 )
self._stealth.behavior.stance_handler["neutral"][var_5] = var_4;
}
if ( isdefined( var_2 ) )
{
foreach ( var_5, var_4 in var_2 )
self._stealth.behavior.stance_handler["looking_towards"][var_5] = var_4;
}
}