mirror of
https://github.com/JezuzLizard/t4sp_bot_warfare.git
synced 2025-10-29 08:56:56 +00:00
new objective system
This commit is contained in:
191
maps/bots/objectives/_utility.gsc
Normal file
191
maps/bots/objectives/_utility.gsc
Normal file
@@ -0,0 +1,191 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\_utility;
|
||||
#include maps\bots\_bot_utility;
|
||||
|
||||
CreateObjectiveForManger( sName, fpFinder, fpExecuter, fpPriority )
|
||||
{
|
||||
Answer = SpawnStruct();
|
||||
|
||||
Answer.sName = sName;
|
||||
Answer.fpFinder = fpFinder;
|
||||
Answer.fpExecuter = fpExecuter;
|
||||
|
||||
if ( !IsDefined( fpPriority ) )
|
||||
{
|
||||
Answer.fpPriority = ::DefaultPriority;
|
||||
}
|
||||
else
|
||||
{
|
||||
Answer.fpPriority = fpPriority;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
DefaultPriority( eObj, eEnt )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
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 );
|
||||
return node;
|
||||
}
|
||||
|
||||
clamp_to_ground( org )
|
||||
{
|
||||
trace = playerPhysicsTrace( org + ( 0, 0, 20 ), org - ( 0, 0, 2000 ) );
|
||||
return trace;
|
||||
}
|
||||
Reference in New Issue
Block a user