mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-08 18:07:54 -05:00
_bot_conf, _bot_ctf, _bot_dem, _bot_dom, _bot_hack, _bot_hq, _bot_koth, _bot_sd have all been checked.
180 lines
3.7 KiB
Plaintext
180 lines
3.7 KiB
Plaintext
#include maps/mp/bots/_bot;
|
|
#include maps/mp/_utility;
|
|
#include common_scripts/utility;
|
|
#include maps/mp/gametypes/ctf;
|
|
|
|
bot_hack_tank_get_goal_origin( tank ) //checked changed to match cerberus output
|
|
{
|
|
nodes = getnodesinradiussorted( tank.origin, 256, 0, 64, "Path" );
|
|
foreach ( node in nodes )
|
|
{
|
|
dir = vectornormalize( node.origin - tank.origin );
|
|
dir = vectorScale( dir, 32 );
|
|
goal = tank.origin + dir;
|
|
if ( findpath( self.origin, goal, 0 ) )
|
|
{
|
|
return goal;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
bot_hack_has_goal( tank ) //checked matches cerberus output
|
|
{
|
|
goal = self getgoal( "hack" );
|
|
if ( isDefined( goal ) )
|
|
{
|
|
if ( distancesquared( goal, tank.origin ) < 16384 )
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
bot_hack_at_goal() //checked changed to match cerberus output
|
|
{
|
|
if ( self atgoal( "hack" ) )
|
|
{
|
|
return 1;
|
|
}
|
|
goal = self getgoal( "hack" );
|
|
if ( isDefined( goal ) )
|
|
{
|
|
tanks = getentarray( "talon", "targetname" );
|
|
tanks = arraysort( tanks, self.origin );
|
|
foreach ( tank in tanks )
|
|
{
|
|
if ( distancesquared( goal, tank.origin ) < 16384 )
|
|
{
|
|
if ( isDefined( tank.trigger ) && self istouching( tank.trigger ) )
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
bot_hack_goal_pregame( tanks ) //checked partially changed to match cerberus output did not use foreach see github for more info
|
|
{
|
|
i = 0;
|
|
while ( i < tanks.size )
|
|
{
|
|
if ( isDefined( tanks[ i ].owner ) )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
if ( isDefined( tanks[ i ].team ) && tanks[ i ].team == self.team )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
goal = self bot_hack_tank_get_goal_origin( tanks[ i ] );
|
|
if ( isDefined( goal ) )
|
|
{
|
|
if ( self addgoal( goal, 24, 2, "hack" ) )
|
|
{
|
|
self.goal_flag = tanks[ i ];
|
|
return;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
bot_hack_think() //checked partially changed to match cerberus output did not us foreach see github for more info
|
|
{
|
|
if ( bot_hack_at_goal() )
|
|
{
|
|
self setstance( "crouch" );
|
|
wait 0.25;
|
|
self addgoal( self.origin, 24, 4, "hack" );
|
|
self pressusebutton( level.drone_hack_time + 1 );
|
|
wait ( level.drone_hack_time + 1 );
|
|
self setstance( "stand" );
|
|
self cancelgoal( "hack" );
|
|
}
|
|
tanks = getentarray( "talon", "targetname" );
|
|
tanks = arraysort( tanks, self.origin );
|
|
if ( !is_true( level.drones_spawned ) )
|
|
{
|
|
self bot_hack_goal_pregame( tanks );
|
|
}
|
|
i = 0;
|
|
while ( i < tanks.size )
|
|
{
|
|
if ( isDefined( tanks[ i ].owner ) && tanks[ i ].owner == self )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
if ( !isDefined( tanks[ i ].owner ) )
|
|
{
|
|
if ( self bot_hack_has_goal( tanks[ i ] ) )
|
|
{
|
|
return;
|
|
}
|
|
goal = self bot_hack_tank_get_goal_origin( tanks[ i ] );
|
|
if ( isDefined( goal ) )
|
|
{
|
|
self addgoal( goal, 24, 2, "hack" );
|
|
return;
|
|
}
|
|
}
|
|
if ( tanks[ i ].isstunned && distancesquared( self.origin, tanks[ i ].origin ) < 262144 )
|
|
{
|
|
goal = self bot_hack_tank_get_goal_origin( tanks[ i ] );
|
|
if ( isDefined( goal ) )
|
|
{
|
|
self addgoal( goal, 24, 3, "hack" );
|
|
return;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
if ( !maps/mp/bots/_bot::bot_vehicle_weapon_ammo( "emp_grenade_mp" ) )
|
|
{
|
|
ammo = getentarray( "weapon_scavenger_item_hack_mp", "classname" );
|
|
ammo = arraysort( ammo, self.origin );
|
|
foreach ( bag in ammo )
|
|
{
|
|
if ( findpath( self.origin, bag.origin, 0 ) )
|
|
{
|
|
self addgoal( bag.origin, 24, 2, "hack" );
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
i = 0;
|
|
while ( i < tanks.size )
|
|
{
|
|
if ( isDefined( tanks[ i ].owner ) && tanks[ i ].owner == self )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
if ( tanks[ i ].isstunned )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
if ( self throwgrenade( "emp_grenade_mp", tanks[ i ].origin ) )
|
|
{
|
|
self waittill( "grenade_fire" );
|
|
goal = self bot_hack_tank_get_goal_origin( tanks[ i ] );
|
|
if ( isDefined( goal ) )
|
|
{
|
|
self addgoal( goal, 24, 3, "hack" );
|
|
wait 0.5;
|
|
return;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|