mirror of
https://github.com/JezuzLizard/t4sp_bot_warfare.git
synced 2025-04-19 13:22:52 +00:00
cleanup
This commit is contained in:
parent
8a9aa8fdb4
commit
91d1728e41
@ -78,6 +78,9 @@ init()
|
|||||||
if ( getDvar( "bots_t8_mode" ) == "" )
|
if ( getDvar( "bots_t8_mode" ) == "" )
|
||||||
setDvar( "bots_t8_mode", false );
|
setDvar( "bots_t8_mode", false );
|
||||||
|
|
||||||
|
if ( getDvar( "bots_play_opendoors" ) == "" )
|
||||||
|
setDvar( "bots_play_opendoors", true );
|
||||||
|
|
||||||
if ( !isDefined( game["botWarfare"] ) )
|
if ( !isDefined( game["botWarfare"] ) )
|
||||||
game["botWarfare"] = true;
|
game["botWarfare"] = true;
|
||||||
|
|
||||||
|
@ -236,6 +236,14 @@ BotNotifyBotEvent( msg, a, b, c, d, e, f, g )
|
|||||||
self notify( "bot_event", msg, a, b, c, d, e, f, g );
|
self notify( "bot_event", msg, a, b, c, d, e, f, g );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Does the bot have an objective?
|
||||||
|
*/
|
||||||
|
BotHasObjective()
|
||||||
|
{
|
||||||
|
return self maps\bots\objectives\_utility::HasBotObjective();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Returns if the bot has a script goal.
|
Returns if the bot has a script goal.
|
||||||
(like t5 gsc bot)
|
(like t5 gsc bot)
|
||||||
@ -312,6 +320,7 @@ SetPriorityObjective()
|
|||||||
ClearPriorityObjective()
|
ClearPriorityObjective()
|
||||||
{
|
{
|
||||||
self.bot.prio_objective = false;
|
self.bot.prio_objective = false;
|
||||||
|
self notify( "kill_goal" );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -648,6 +657,9 @@ DistanceSquared2D( to, from )
|
|||||||
return DistanceSquared( to, from );
|
return DistanceSquared( to, from );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Distance from box
|
||||||
|
*/
|
||||||
RectDistanceSquared( origin )
|
RectDistanceSquared( origin )
|
||||||
{
|
{
|
||||||
dx = 0;
|
dx = 0;
|
||||||
@ -1071,6 +1083,9 @@ inLastStand()
|
|||||||
return self [[func]]();
|
return self [[func]]();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Is reviving player
|
||||||
|
*/
|
||||||
isReviving( revivee )
|
isReviving( revivee )
|
||||||
{
|
{
|
||||||
func = GetFunction( "maps/_laststand", "is_reviving" );
|
func = GetFunction( "maps/_laststand", "is_reviving" );
|
||||||
@ -1122,3 +1137,204 @@ isWeaponPrimary( weap )
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
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 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Returns how long the path is
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Clamp lerp,
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Base an origin offset from an ent
|
||||||
|
*/
|
||||||
|
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 );
|
||||||
|
|
||||||
|
if ( getDvarInt( "bots_main_debug" ) )
|
||||||
|
{
|
||||||
|
self thread debug_offset_line( node );
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Draw the offset
|
||||||
|
*/
|
||||||
|
debug_offset_line( node )
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
self notify( "debug_offset_line" );
|
||||||
|
self endon( "debug_offset_line" );
|
||||||
|
|
||||||
|
while ( isDefined( self ) )
|
||||||
|
{
|
||||||
|
line( self.origin, node );
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Is the point inside this use trigger?
|
||||||
|
*/
|
||||||
|
PointInsideUseTrigger( point )
|
||||||
|
{
|
||||||
|
if ( getDvarInt( "bots_main_debug" ) )
|
||||||
|
{
|
||||||
|
self thread debug_bounding_box_for_ent();
|
||||||
|
}
|
||||||
|
|
||||||
|
mins = self getmins();
|
||||||
|
maxs = self getmaxs();
|
||||||
|
|
||||||
|
box = spawnstruct();
|
||||||
|
box.x0 = self.origin[0] + mins[0];
|
||||||
|
box.x1 = self.origin[0] + maxs[0];
|
||||||
|
box.y0 = self.origin[1] + mins[1];
|
||||||
|
box.y1 = self.origin[1] + maxs[1];
|
||||||
|
box.z0 = self.origin[2] + mins[2];
|
||||||
|
box.z1 = self.origin[2] + maxs[2];
|
||||||
|
|
||||||
|
if ( box RectDistanceSquared( self.origin ) > 72 * 72 )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !sightTracePassed( point, self.origin, false, undefined ) )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Draw the aabb of the ent
|
||||||
|
*/
|
||||||
|
debug_bounding_box_for_ent( color )
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
self notify( "debug_bounding_box_for_ent" );
|
||||||
|
self endon( "debug_bounding_box_for_ent" );
|
||||||
|
|
||||||
|
if ( !isDefined( color ) )
|
||||||
|
color = ( randomFloatRange( 0, 1 ), randomFloatRange( 0, 1 ), randomFloatRange( 0, 1 ) );
|
||||||
|
|
||||||
|
while ( isDefined( self ) )
|
||||||
|
{
|
||||||
|
mins = self getmins();
|
||||||
|
maxs = self getmaxs();
|
||||||
|
|
||||||
|
line( self.origin + ( mins[0], mins[1], mins[2] ), self.origin + ( mins[0], mins[1], maxs[2] ), color );
|
||||||
|
line( self.origin + ( mins[0], mins[1], mins[2] ), self.origin + ( mins[0], maxs[1], mins[2] ), color );
|
||||||
|
line( self.origin + ( mins[0], mins[1], mins[2] ), self.origin + ( maxs[0], mins[1], mins[2] ), color );
|
||||||
|
|
||||||
|
line( self.origin + ( maxs[0], maxs[1], maxs[2] ), self.origin + ( maxs[0], maxs[1], mins[2] ), color );
|
||||||
|
line( self.origin + ( maxs[0], maxs[1], maxs[2] ), self.origin + ( maxs[0], mins[1], maxs[2] ), color );
|
||||||
|
line( self.origin + ( maxs[0], maxs[1], maxs[2] ), self.origin + ( mins[0], maxs[1], maxs[2] ), color );
|
||||||
|
|
||||||
|
line( self.origin + ( maxs[0], mins[1], mins[2] ), self.origin + ( maxs[0], maxs[1], mins[2] ), color );
|
||||||
|
line( self.origin + ( maxs[0], mins[1], mins[2] ), self.origin + ( maxs[0], mins[1], maxs[2] ), color );
|
||||||
|
|
||||||
|
line( self.origin + ( mins[0], mins[1], maxs[2] ), self.origin + ( maxs[0], mins[1], maxs[2] ), color );
|
||||||
|
line( self.origin + ( mins[0], mins[1], maxs[2] ), self.origin + ( mins[0], maxs[1], maxs[2] ), color );
|
||||||
|
|
||||||
|
line( self.origin + ( mins[0], maxs[1], mins[2] ), self.origin + ( maxs[0], maxs[1], mins[2] ), color );
|
||||||
|
line( self.origin + ( mins[0], maxs[1], mins[2] ), self.origin + ( mins[0], maxs[1], maxs[2] ), color );
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Clamp the origin to the ground
|
||||||
|
*/
|
||||||
|
clamp_to_ground( org )
|
||||||
|
{
|
||||||
|
trace = playerPhysicsTrace( org + ( 0, 0, 20 ), org - ( 0, 0, 2000 ) );
|
||||||
|
return trace;
|
||||||
|
}
|
||||||
|
@ -139,14 +139,14 @@ bot_objective_think()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// already on a better obj
|
// already on a better obj
|
||||||
if ( self HasBotObjective() && ( best_prio.GUID == self.bot_current_objective.GUID || best_prio.fPriority < self [[self.bot_current_objective.eParentObj.fpPriorty]]( self.bot_current_objective.eParentObj, self.bot_current_objective.eEnt ) ) )
|
if ( isDefined( self.bot_current_objective ) && ( best_prio.GUID == self.bot_current_objective.GUID || best_prio.fPriority < self [[self.bot_current_objective.eParentObj.fpPriorty]]( self.bot_current_objective.eParentObj, self.bot_current_objective.eEnt ) ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// DO THE OBJ
|
// DO THE OBJ
|
||||||
// cancel the old obj
|
// cancel the old obj
|
||||||
if ( self HasBotObjective() )
|
if ( isDefined( self.bot_current_objective ) )
|
||||||
{
|
{
|
||||||
// cancel it
|
// cancel it
|
||||||
self CancelObjective( "new obj: " + best_prio.sName );
|
self CancelObjective( "new obj: " + best_prio.sName );
|
||||||
|
@ -104,7 +104,7 @@ Finder( eObj )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
answer[answer.size] = self CreateFinderObjective( eObj, eObj.sName + "_" + vending GetEntityNumber(), vending, self [[eObj.fpPriorty]]( eObj, vending ) );
|
answer[answer.size] = self CreateFinderObjectiveEZ( eObj, vending );
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
return answer;
|
||||||
@ -174,7 +174,7 @@ Priority( eObj, eEnt )
|
|||||||
base_priority = 2;
|
base_priority = 2;
|
||||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1600, 3, 0 );
|
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1600, 3, 0 );
|
||||||
|
|
||||||
if ( self HasBotObjective() && self.bot_current_objective.eEnt != eEnt )
|
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
||||||
{
|
{
|
||||||
base_priority -= 1;
|
base_priority -= 1;
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ Finder( eObj )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
answer[answer.size] = self CreateFinderObjective( eObj, eObj.sName + "_" + ents[i] GetEntityNumber(), ents[i], self [[eObj.fpPriorty]]( eObj, ents[i] ) );
|
answer[answer.size] = self CreateFinderObjectiveEZ( eObj, ents[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
return answer;
|
||||||
@ -46,7 +46,7 @@ Priority( eObj, eEnt )
|
|||||||
base_priority = 0;
|
base_priority = 0;
|
||||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 300, 700, 2, -2 );
|
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 300, 700, 2, -2 );
|
||||||
|
|
||||||
if ( self HasBotObjective() && self.bot_current_objective.eEnt != eEnt )
|
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
||||||
{
|
{
|
||||||
base_priority -= 1;
|
base_priority -= 1;
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ Finder( eObj )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Answer[Answer.size] = self CreateFinderObjective( eObj, eObj.sName + "_" + Player GetEntityNumber(), Player, self [[eObj.fpPriorty]]( eObj, Player ) );
|
Answer[Answer.size] = self CreateFinderObjectiveEZ( eObj, Player );
|
||||||
}
|
}
|
||||||
|
|
||||||
return Answer;
|
return Answer;
|
||||||
@ -58,7 +58,7 @@ Priority( eObj, eEnt )
|
|||||||
base_priority = 3;
|
base_priority = 3;
|
||||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1200, 2, 0 );
|
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1200, 2, 0 );
|
||||||
|
|
||||||
if ( self HasBotObjective() && self.bot_current_objective.eEnt != eEnt )
|
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
||||||
{
|
{
|
||||||
base_priority -= 1;
|
base_priority -= 1;
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ Finder( eObj )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
answer[answer.size] = self CreateFinderObjective( eObj, eObj.sName + "_" + chest GetEntityNumber(), chest, self [[eObj.fpPriorty]]( eObj, chest ) );
|
answer[answer.size] = self CreateFinderObjectiveEZ( eObj, chest );
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
return answer;
|
||||||
@ -99,7 +99,7 @@ Priority( eObj, eEnt )
|
|||||||
base_priority = 1;
|
base_priority = 1;
|
||||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 600, 1800, 2, 0 );
|
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 600, 1800, 2, 0 );
|
||||||
|
|
||||||
if ( self HasBotObjective() && self.bot_current_objective.eEnt != eEnt )
|
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
||||||
{
|
{
|
||||||
base_priority -= 1;
|
base_priority -= 1;
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,11 @@ CreateObjectiveForManger( sName, fpFinder, fpPriorty, fpExecuter, iProcessRate )
|
|||||||
return Answer;
|
return Answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CreateFinderObjectiveEZ( eObj, eEnt )
|
||||||
|
{
|
||||||
|
return self CreateFinderObjective( eObj, eObj.sName + "_" + eEnt GetEntityNumber(), eEnt, self [[eObj.fpPriorty]]( eObj, eEnt ) );
|
||||||
|
}
|
||||||
|
|
||||||
CreateFinderObjective( eObj, sName, eEnt, fPriority )
|
CreateFinderObjective( eObj, sName, eEnt, fPriority )
|
||||||
{
|
{
|
||||||
Answer = SpawnStruct();
|
Answer = SpawnStruct();
|
||||||
@ -33,71 +38,6 @@ CreateFinderObjective( eObj, sName, eEnt, fPriority )
|
|||||||
return Answer;
|
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 )
|
GetBotsAmountForEntity( eEnt )
|
||||||
{
|
{
|
||||||
if ( !isDefined( eEnt.bots ) )
|
if ( !isDefined( eEnt.bots ) )
|
||||||
@ -147,122 +87,28 @@ CompletedObjective( successful, reason )
|
|||||||
self notify( "completed_bot_objective", successful, reason );
|
self notify( "completed_bot_objective", successful, reason );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GetBotObjectiveEnt()
|
||||||
|
{
|
||||||
|
if ( !self HasBotObjective() )
|
||||||
|
{
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self GetBotObjective().eEnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Gets bot objective
|
||||||
|
*/
|
||||||
|
GetBotObjective()
|
||||||
|
{
|
||||||
|
return self.bot_current_objective;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Does the bot have an objective?
|
||||||
|
*/
|
||||||
HasBotObjective()
|
HasBotObjective()
|
||||||
{
|
{
|
||||||
return isDefined( self.bot_current_objective );
|
return isDefined( self GetBotObjective() );
|
||||||
}
|
|
||||||
|
|
||||||
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 );
|
|
||||||
|
|
||||||
if ( getDvarInt( "bots_main_debug" ) )
|
|
||||||
{
|
|
||||||
self thread debug_offset_line( node );
|
|
||||||
}
|
|
||||||
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
debug_offset_line( node )
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
self notify( "debug_offset_line" );
|
|
||||||
self endon( "debug_offset_line" );
|
|
||||||
|
|
||||||
while ( isDefined( self ) )
|
|
||||||
{
|
|
||||||
line( self.origin, node );
|
|
||||||
wait 0.05;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PointInsideUseTrigger( point )
|
|
||||||
{
|
|
||||||
if ( getDvarInt( "bots_main_debug" ) )
|
|
||||||
{
|
|
||||||
self thread debug_bounding_box_for_ent();
|
|
||||||
}
|
|
||||||
|
|
||||||
mins = self getmins();
|
|
||||||
maxs = self getmaxs();
|
|
||||||
|
|
||||||
box = spawnstruct();
|
|
||||||
box.x0 = self.origin[0] + mins[0];
|
|
||||||
box.x1 = self.origin[0] + maxs[0];
|
|
||||||
box.y0 = self.origin[1] + mins[1];
|
|
||||||
box.y1 = self.origin[1] + maxs[1];
|
|
||||||
box.z0 = self.origin[2] + mins[2];
|
|
||||||
box.z1 = self.origin[2] + maxs[2];
|
|
||||||
|
|
||||||
if ( box RectDistanceSquared( self.origin ) > 72 * 72 )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !sightTracePassed( point, self.origin, false, undefined ) )
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
debug_bounding_box_for_ent( color )
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
self notify( "debug_bounding_box_for_ent" );
|
|
||||||
self endon( "debug_bounding_box_for_ent" );
|
|
||||||
|
|
||||||
if ( !isDefined( color ) )
|
|
||||||
color = ( randomFloatRange( 0, 1 ), randomFloatRange( 0, 1 ), randomFloatRange( 0, 1 ) );
|
|
||||||
|
|
||||||
while ( isDefined( self ) )
|
|
||||||
{
|
|
||||||
mins = self getmins();
|
|
||||||
maxs = self getmaxs();
|
|
||||||
|
|
||||||
line( self.origin + ( mins[0], mins[1], mins[2] ), self.origin + ( mins[0], mins[1], maxs[2] ), color );
|
|
||||||
line( self.origin + ( mins[0], mins[1], mins[2] ), self.origin + ( mins[0], maxs[1], mins[2] ), color );
|
|
||||||
line( self.origin + ( mins[0], mins[1], mins[2] ), self.origin + ( maxs[0], mins[1], mins[2] ), color );
|
|
||||||
|
|
||||||
line( self.origin + ( maxs[0], maxs[1], maxs[2] ), self.origin + ( maxs[0], maxs[1], mins[2] ), color );
|
|
||||||
line( self.origin + ( maxs[0], maxs[1], maxs[2] ), self.origin + ( maxs[0], mins[1], maxs[2] ), color );
|
|
||||||
line( self.origin + ( maxs[0], maxs[1], maxs[2] ), self.origin + ( mins[0], maxs[1], maxs[2] ), color );
|
|
||||||
|
|
||||||
line( self.origin + ( maxs[0], mins[1], mins[2] ), self.origin + ( maxs[0], maxs[1], mins[2] ), color );
|
|
||||||
line( self.origin + ( maxs[0], mins[1], mins[2] ), self.origin + ( maxs[0], mins[1], maxs[2] ), color );
|
|
||||||
|
|
||||||
line( self.origin + ( mins[0], mins[1], maxs[2] ), self.origin + ( maxs[0], mins[1], maxs[2] ), color );
|
|
||||||
line( self.origin + ( mins[0], mins[1], maxs[2] ), self.origin + ( mins[0], maxs[1], maxs[2] ), color );
|
|
||||||
|
|
||||||
line( self.origin + ( mins[0], maxs[1], mins[2] ), self.origin + ( maxs[0], maxs[1], mins[2] ), color );
|
|
||||||
line( self.origin + ( mins[0], maxs[1], mins[2] ), self.origin + ( mins[0], maxs[1], maxs[2] ), color );
|
|
||||||
|
|
||||||
wait 0.05;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
clamp_to_ground( org )
|
|
||||||
{
|
|
||||||
trace = playerPhysicsTrace( org + ( 0, 0, 20 ), org - ( 0, 0, 2000 ) );
|
|
||||||
return trace;
|
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ Finder( eObj )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
answer[answer.size] = self CreateFinderObjective( eObj, eObj.sName + "_" + weapon_spawns[i] GetEntityNumber(), weapon_spawns[i], self [[eObj.fpPriorty]]( eObj, weapon_spawns[i] ) );
|
answer[answer.size] = self CreateFinderObjectiveEZ( eObj, weapon_spawns[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
return answer;
|
||||||
@ -107,7 +107,7 @@ Priority( eObj, eEnt )
|
|||||||
base_priority = 0;
|
base_priority = 0;
|
||||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 0, 800, 1, -2 );
|
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 0, 800, 1, -2 );
|
||||||
|
|
||||||
if ( self HasBotObjective() && self.bot_current_objective.eEnt != eEnt )
|
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
||||||
{
|
{
|
||||||
base_priority -= 1;
|
base_priority -= 1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user