mirror of
https://github.com/JezuzLizard/t4sp_bot_warfare.git
synced 2025-04-22 14:35:44 +00:00
197 lines
3.5 KiB
Plaintext
197 lines
3.5 KiB
Plaintext
#include common_scripts\utility;
|
|
#include maps\_utility;
|
|
#include maps\bots\_bot_utility;
|
|
|
|
CreateObjectiveForManger( sName, fpFinder, fpExecuter, iProcessRate )
|
|
{
|
|
Answer = SpawnStruct();
|
|
|
|
Answer.sName = sName;
|
|
Answer.fpFinder = fpFinder;
|
|
Answer.fpExecuter = fpExecuter;
|
|
|
|
Answer.aBotProcessTimes = [];
|
|
Answer.iProcessRate = iProcessRate;
|
|
|
|
return Answer;
|
|
}
|
|
|
|
CreateFinderObjective( eObj, sName, eEnt, fPriority )
|
|
{
|
|
Answer = SpawnStruct();
|
|
|
|
Answer.eParentObj = eObj;
|
|
Answer.sName = sName;
|
|
Answer.eEnt = eEnt;
|
|
Answer.fPriority = fPriority;
|
|
Answer.GUID = eEnt GetEntityNumber();
|
|
|
|
Answer.bWasSuccessful = false;
|
|
Answer.sReason = "canceled";
|
|
|
|
return Answer;
|
|
}
|
|
|
|
/*
|
|
Checks whether the path generated by the ASTAR path finding is inaccessible
|
|
*/
|
|
GetPathIsInaccessible( from, to, team, best_effort )
|
|
{
|
|
if ( isDefined( best_effort ) )
|
|
{
|
|
path = generatePath( from, to, team, level.bot_allowed_negotiation_links, best_effort );
|
|
}
|
|
else
|
|
{
|
|
path = generatePath( from, to, team, level.bot_allowed_negotiation_links );
|
|
}
|
|
|
|
return ( !isDefined( path ) || ( path.size <= 0 ) );
|
|
}
|
|
|
|
get_path_dist( start, end, team )
|
|
{
|
|
path = generatePath( start, end, team, level.bot_allowed_negotiation_links, 192.0 );
|
|
|
|
if ( !isDefined( path ) || path.size <= 0 )
|
|
{
|
|
return 999999999;
|
|
}
|
|
|
|
dist = 0;
|
|
prev_node = undefined;
|
|
|
|
for ( i = 0; i < path.size; i++ )
|
|
{
|
|
if ( i == 0 )
|
|
{
|
|
prev_node = path[ i ];
|
|
continue;
|
|
}
|
|
|
|
dist += distance( prev_node.origin, path[ i ].origin );
|
|
prev_node = path[ i ];
|
|
}
|
|
|
|
return dist;
|
|
}
|
|
|
|
ClampLerp( dist, min_dist, max_dist, max_bonus, min_bonus )
|
|
{
|
|
answer = 0;
|
|
|
|
if ( dist <= min_dist )
|
|
{
|
|
answer += max_bonus;
|
|
}
|
|
else if ( dist >= max_dist )
|
|
{
|
|
answer += min_bonus;
|
|
}
|
|
else
|
|
{
|
|
dist_multi = 1 - ( ( dist - min_dist ) / ( max_dist - min_dist ) );
|
|
answer += min_bonus + ( ( max_bonus - min_bonus ) * dist_multi );
|
|
}
|
|
|
|
return answer;
|
|
}
|
|
|
|
GetBotsAmountForEntity( eEnt )
|
|
{
|
|
if ( !isDefined( eEnt.bots ) )
|
|
{
|
|
eEnt.bots = 0;
|
|
}
|
|
|
|
return eEnt.bots;
|
|
}
|
|
|
|
IncrementBotsForEntity( eEnt )
|
|
{
|
|
self endon( "bots_for_entity_cleanup" );
|
|
|
|
eEnt.bots++;
|
|
|
|
self waittill_either( "disconnect", "zombified" );
|
|
|
|
if ( isDefined( eEnt ) )
|
|
{
|
|
eEnt.bots--;
|
|
}
|
|
}
|
|
|
|
DecrementBotsForEntity( eEnt )
|
|
{
|
|
self notify( "bots_for_entity_cleanup" );
|
|
|
|
if ( isDefined( eEnt ) )
|
|
{
|
|
eEnt.bots--;
|
|
}
|
|
}
|
|
|
|
CleanupBotsForEntity( eEnt )
|
|
{
|
|
self notify( "bots_for_entity_cleanup" );
|
|
}
|
|
|
|
CancelObjective( reason )
|
|
{
|
|
self notify( "cancel_bot_objective", reason );
|
|
}
|
|
|
|
CompletedObjective( successful, reason )
|
|
{
|
|
self notify( "completed_bot_objective", successful, reason );
|
|
}
|
|
|
|
HasBotObjective()
|
|
{
|
|
return isDefined( self.bot_current_objective );
|
|
}
|
|
|
|
get_angle_offset_node( forward_size, angle_offset, offset )
|
|
{
|
|
if ( !isDefined( forward_size ) )
|
|
{
|
|
forward_size = 40;
|
|
}
|
|
|
|
if ( !isDefined( angle_offset ) )
|
|
{
|
|
angle_offset = ( 0, 0, 0 );
|
|
}
|
|
|
|
if ( !isDefined( offset ) )
|
|
{
|
|
offset = ( 0, 0, 0 );
|
|
}
|
|
|
|
angles = ( 0, self.angles[ 1 ], 0 );
|
|
angles += angle_offset;
|
|
node = self.origin + ( AnglesToForward( angles ) * forward_size ) + offset;
|
|
node = clamp_to_ground( node );
|
|
|
|
self thread debug_offset_line( node );
|
|
return node;
|
|
}
|
|
|
|
debug_offset_line( node )
|
|
{
|
|
self notify( "debug_offset_line" );
|
|
self endon( "debug_offset_line" );
|
|
|
|
for ( ;; )
|
|
{
|
|
line( self.origin, node );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
clamp_to_ground( org )
|
|
{
|
|
trace = playerPhysicsTrace( org + ( 0, 0, 20 ), org - ( 0, 0, 2000 ) );
|
|
return trace;
|
|
}
|