Compare commits

...

6 Commits

Author SHA1 Message Date
ineed bots
93b82d7720 use wrapper 2025-01-23 23:56:31 -06:00
ineed bots
d19be1dd2d fix this var leak 2025-01-23 23:48:35 -06:00
ineed bots
223c6e4664 democlient checks 2025-01-17 23:40:05 -06:00
ineed bots
28bfe5bbda demo records without players 2025-01-16 20:11:03 -06:00
ineed bots
9cbff651ce more funcs 2025-01-15 00:58:51 -06:00
ineed bots
232938dfd7 pt5mp rewrite 2025-01-02 10:12:21 -06:00
6 changed files with 184 additions and 172 deletions

2
.gitignore vendored
View File

@ -1,5 +1,5 @@
*.zip
*.log
*.log*
*.stat
logs/
demos/

View File

@ -216,7 +216,7 @@ bot_get_prestige()
continue;
}
if ( player is_bot() )
if ( player is_bot() || player isdemoclient() )
{
continue;
}
@ -1246,7 +1246,7 @@ bot_get_cod_points()
for ( i = 0; i < players.size; i++ )
{
if ( players[ i ] is_bot() )
if ( players[ i ] is_bot() || players[ i ] isdemoclient() )
{
continue;
}

View File

@ -166,7 +166,7 @@ bot_on_spawn()
for ( ;; )
{
self waittill( "spawned_player" );
self BotBuiltinClearOverrides( true );
self BotBuiltinClearOverride( false );
self BotBuiltinWeaponOverride( self getcurrentweapon() );
self.bot_is_doing_some_other_override = false;
@ -2449,7 +2449,7 @@ do_bot_plane_combat( plane, weap )
self endon( "missile_fire" );
time = 7;
self BotBuiltinAimOverride();
self BotBuiltinAimOverride( true );
while ( time > 0 && isdefined( plane ) && isalive( plane ) && self getcurrentweapon() == weap && !self inLastStand() && !isdefined( self getthreat() ) )
{
@ -2458,7 +2458,7 @@ do_bot_plane_combat( plane, weap )
if ( bullettracepassed( myeye, plane.origin, false, plane ) )
{
self thread bot_lookat( plane.origin, 0.3 );
self BotBuiltinButtonOverride( "ads", "enable" );
self BotBuiltinButtonOverride( "+ads" );
if ( isdefined( self.stingerlockfinalized ) && self.stingerlockfinalized )
{
@ -2467,7 +2467,7 @@ do_bot_plane_combat( plane, weap )
}
else
{
self BotBuiltinButtonOverride( "ads", "disable" );
self BotBuiltinButtonOverride( "-ads" );
}
time -= 0.05;
@ -2499,8 +2499,8 @@ bot_plane_attack( plane )
self do_bot_plane_combat( plane, weap );
self notify( "bots_aim_overlap" );
self BotBuiltinClearAimOverride();
self BotBuiltinClearButtonOverride( "ads" );
self BotBuiltinAimOverride( false );
self BotBuiltinButtonOverride( "~ads" );
}
self.bot_is_doing_some_other_override = false;
@ -6405,8 +6405,8 @@ watch_for_melee_override()
angles = vectortoangles( threat.origin - self.origin );
self BotBuiltinBotMeleeParams( angles[ 1 ], dist );
self BotBuiltinButtonOverride( "melee", "enable" );
self BotBuiltinAimOverride();
self BotBuiltinButtonOverride( "+melee" );
self BotBuiltinAimOverride( true );
time_left = 1;
once = false;
@ -6420,17 +6420,17 @@ watch_for_melee_override()
if ( !once )
{
once = true;
self BotBuiltinClearButtonOverride( "melee" );
self BotBuiltinButtonOverride( "~melee" );
}
}
if ( !once )
{
self BotBuiltinClearButtonOverride( "melee" );
self BotBuiltinButtonOverride( "~melee" );
}
self BotBuiltinClearMeleeParams();
self BotBuiltinClearAimOverride();
self BotBuiltinBotMeleeParams( false );
self BotBuiltinAimOverride( false );
wait 1;
break;
@ -6498,7 +6498,7 @@ watch_for_override_stuff()
if ( need_to_clear_mantle_override && ( time - last_jump_time ) > 3000 )
{
need_to_clear_mantle_override = false;
self BotBuiltinClearMantleOverride();
self BotBuiltinMantleOverride( false );
}
weapon_is_good = true;
@ -6520,28 +6520,28 @@ watch_for_override_stuff()
{
last_jump_time = time;
need_to_clear_mantle_override = true;
self BotBuiltinMantleOverride();
self BotBuiltinMantleOverride( true );
// drop shot
self BotBuiltinMovementOverride( 0, 0 );
self BotBuiltinButtonOverride( "prone", "enable" );
self BotBuiltinButtonOverride( "+prone" );
wait 1.5;
self BotBuiltinClearMovementOverride();
self BotBuiltinClearButtonOverride( "prone" );
self BotBuiltinMovementOverride( false );
self BotBuiltinButtonOverride( "~prone" );
}
}
else
{
last_jump_time = time;
need_to_clear_mantle_override = true;
self BotBuiltinMantleOverride();
self BotBuiltinMantleOverride( true );
// jump shot
self BotBuiltinButtonOverride( "gostand", "enable" );
self BotBuiltinButtonOverride( "+gostand" );
wait 0.1;
self BotBuiltinClearButtonOverride( "gostand" );
self BotBuiltinButtonOverride( "~gostand" );
}
}

View File

@ -49,6 +49,46 @@ BotBuiltinPrintConsole( s )
}
}
/*
*/
BotBuiltinDisableDetourOnce( s )
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "disabledetouronce" ] ) )
{
[[ level.bot_builtins[ "disabledetouronce" ] ]]( s );
}
}
/*
*/
BotBuiltinReplaceFunc( s, b )
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "replacefunc" ] ) )
{
return [[ level.bot_builtins[ "replacefunc" ] ]]( s, b );
}
}
/*
*/
BotBuiltinGetFunction( s, b )
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "getfunction" ] ) )
{
return [[ level.bot_builtins[ "getfunction" ] ]]( s, b );
}
}
/*
*/
BotBuiltinClearOverride( a )
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botclearoverride" ] ) )
{
self [[ level.bot_builtins[ "botclearoverride" ] ]]( a );
}
}
/*
*/
BotBuiltinMovementOverride( a, b )
@ -61,71 +101,21 @@ BotBuiltinMovementOverride( a, b )
/*
*/
BotBuiltinClearMovementOverride()
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botclearmovementoverride" ] ) )
{
self [[ level.bot_builtins[ "botclearmovementoverride" ] ]]();
}
}
/*
*/
BotBuiltinClearButtonOverride( a )
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botclearbuttonoverride" ] ) )
{
self [[ level.bot_builtins[ "botclearbuttonoverride" ] ]]( a );
}
}
/*
*/
BotBuiltinButtonOverride( a, b )
BotBuiltinButtonOverride( a )
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botbuttonoverride" ] ) )
{
self [[ level.bot_builtins[ "botbuttonoverride" ] ]]( a, b );
self [[ level.bot_builtins[ "botbuttonoverride" ] ]]( a );
}
}
/*
*/
BotBuiltinClearOverrides( a )
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botclearoverrides" ] ) )
{
self [[ level.bot_builtins[ "botclearoverrides" ] ]]( a );
}
}
/*
*/
BotBuiltinMantleOverride()
BotBuiltinMantleOverride( a )
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botmantleoverride" ] ) )
{
self [[ level.bot_builtins[ "botmantleoverride" ] ]]();
}
}
/*
*/
BotBuiltinClearMantleOverride()
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botclearmantleoverride" ] ) )
{
self [[ level.bot_builtins[ "botclearmantleoverride" ] ]]();
}
}
/*
*/
BotBuiltinClearWeaponOverride()
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botclearweaponoverride" ] ) )
{
self [[ level.bot_builtins[ "botclearweaponoverride" ] ]]();
self [[ level.bot_builtins[ "botmantleoverride" ] ]]( a );
}
}
@ -141,31 +131,11 @@ BotBuiltinWeaponOverride( a )
/*
*/
BotBuiltinClearButtonOverrides()
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botclearbuttonoverrides" ] ) )
{
self [[ level.bot_builtins[ "botclearbuttonoverrides" ] ]]();
}
}
/*
*/
BotBuiltinAimOverride()
BotBuiltinAimOverride( a )
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botaimoverride" ] ) )
{
self [[ level.bot_builtins[ "botaimoverride" ] ]]();
}
}
/*
*/
BotBuiltinClearAimOverride()
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botclearaimoverride" ] ) )
{
self [[ level.bot_builtins[ "botclearaimoverride" ] ]]();
self [[ level.bot_builtins[ "botaimoverride" ] ]]( a );
}
}
@ -174,19 +144,9 @@ BotBuiltinClearAimOverride()
*/
BotBuiltinBotMeleeParams( yaw, dist )
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botmeleeparams" ] ) )
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botmeleeparamsoverride" ] ) )
{
self [[ level.bot_builtins[ "botmeleeparams" ] ]]( yaw, dist );
}
}
/*
*/
BotBuiltinClearMeleeParams()
{
if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "clearbotmeleeparams" ] ) )
{
self [[ level.bot_builtins[ "clearbotmeleeparams" ] ]]();
self [[ level.bot_builtins[ "botmeleeparamsoverride" ] ]]( yaw, dist );
}
}

View File

@ -11,19 +11,81 @@
#include maps\mp\bots\_bot_utility;
/*
Entry point to the bots
*/
init()
main()
{
level.bw_version = "1.2.0";
level.bot_offline = false;
if ( getdvar( "bots_main" ) == "" )
{
setdvar( "bots_main", true );
}
if ( !getdvarint( "bots_main" ) )
{
return;
}
if ( !wait_for_builtins() )
{
println( "FATAL: NO BUILT-INS FOR BOTS" );
}
// fix var leak
BotBuiltinReplaceFunc( BotBuiltinGetFunction( "maps/mp/gametypes/_hud_util", "destroyelem" ), ::destroyElemFixed );
}
/*
Fix leak with menus
*/
removeChildFixed( element )
{
temp = [];
for ( i = 0; i < self.children.size ; i++ )
{
if ( isdefined( self.children[ i ] ) && self.children[ i ] != element )
{
self.children[ i ].index = temp.size;
temp[ temp.size ] = self.children[ i ];
}
}
self.children = temp;
}
/*
Fix leak with menus
*/
destroyElemFixed()
{
if ( !isdefined( self ) )
{
return;
}
if ( isdefined( self.parent ) )
{
self.parent removeChildFixed( self );
}
func = BotBuiltinGetFunction( "maps/mp/gametypes/_hud_util", "destroyelem" );
BotBuiltinDisableDetourOnce( func );
self [[ func ]]();
}
/*
Entry point to the bots
*/
init()
{
level.bw_version = "1.2.0";
if ( getdvar( "bots_main" ) == "" )
{
setdvar( "bots_main", true );
}
if ( !getdvarint( "bots_main" ) )
{
return;
@ -190,6 +252,7 @@ init()
}
level.bot_inittime = gettime();
level.demorecord_minplayers = max( 0, getdvarint( #"scr_demorecord_minplayers" ) );
thread fixGamemodes();
thread onPlayerConnect();
@ -293,6 +356,18 @@ connected()
{
return;
}
if ( !isdefined( self.pers[ "isBot" ] ) )
{
// fast restart...
self.pers[ "isBot" ] = true;
}
if ( !isdefined( self.pers[ "isBotWarfare" ] ) )
{
self.pers[ "isBotWarfare" ] = true;
self thread maps\mp\bots\_bot_script::added();
}
self thread maps\mp\bots\_bot_script::connected();

View File

@ -1,25 +1,37 @@
init()
main()
{
level.bot_builtins[ "printconsole" ] = ::do_printconsole;
level.bot_builtins[ "botmovementoverride" ] = ::do_botmovementoverride;
level.bot_builtins[ "botclearmovementoverride" ] = ::do_botclearmovementoverride;
level.bot_builtins[ "botclearbuttonoverride" ] = ::do_botclearbuttonoverride;
level.bot_builtins[ "botbuttonoverride" ] = ::do_botbuttonoverride;
level.bot_builtins[ "botclearoverrides" ] = ::do_botclearoverrides;
level.bot_builtins[ "botclearoverride" ] = ::do_botclearoverride;
level.bot_builtins[ "botmantleoverride" ] = ::do_botmantleoverride;
level.bot_builtins[ "botclearmantleoverride" ] = ::do_botclearmantleoverride;
level.bot_builtins[ "botclearweaponoverride" ] = ::do_botclearweaponoverride;
level.bot_builtins[ "botweaponoverride" ] = ::do_botweaponoverride;
level.bot_builtins[ "botclearbuttonoverrides" ] = ::do_botclearbuttonoverrides;
level.bot_builtins[ "botaimoverride" ] = ::do_botaimoverride;
level.bot_builtins[ "botclearaimoverride" ] = ::do_botclearaimoverride;
level.bot_builtins[ "botmeleeparams" ] = ::do_botmeleeparams;
level.bot_builtins[ "clearbotmeleeparams" ] = ::do_clearbotmeleeparams;
level.bot_builtins[ "botmeleeparamsoverride" ] = ::do_botmeleeparamsoverride;
level.bot_builtins[ "replacefunc" ] = ::do_replacefunc;
level.bot_builtins[ "getfunction" ] = ::do_getfunction;
level.bot_builtins[ "disabledetouronce" ] = ::do_disabledetouronce;
maps\mp\gametypes\_bot::main();
}
do_replacefunc( a, b )
{
return replacefunc( a, b );
}
do_getfunction( a, b )
{
return getfunction( a, b );
}
do_printconsole( s )
{
println( s );
printf( s );
}
do_disabledetouronce( s )
{
disabledetouronce( s );
}
do_botmovementoverride( a, b )
@ -27,39 +39,19 @@ do_botmovementoverride( a, b )
self botmovementoverride( a, b );
}
do_botclearmovementoverride()
do_botclearoverride( a )
{
self botclearmovementoverride();
self botclearoverride( a );
}
do_botclearbuttonoverride( a )
do_botbuttonoverride( a )
{
self botclearbuttonoverride( a );
self botbuttonoverride( a );
}
do_botbuttonoverride( a, b )
do_botmantleoverride( a )
{
self botbuttonoverride( a, b );
}
do_botclearoverrides( a )
{
self botclearoverrides( a );
}
do_botmantleoverride()
{
self botmantleoverride();
}
do_botclearmantleoverride()
{
self botclearmantleoverride();
}
do_botclearweaponoverride()
{
self botclearweaponoverride();
self botmantleoverride( a );
}
do_botweaponoverride( a )
@ -67,27 +59,12 @@ do_botweaponoverride( a )
self botweaponoverride( a );
}
do_botclearbuttonoverrides()
do_botaimoverride( a )
{
self botclearbuttonoverrides();
self botaimoverride( a );
}
do_botaimoverride()
do_botmeleeparamsoverride( yaw, dist )
{
self botaimoverride();
}
do_botclearaimoverride()
{
self botclearaimoverride();
}
do_botmeleeparams( yaw, dist )
{
self botmeleeparams( yaw, dist );
}
do_clearbotmeleeparams()
{
self botclearmeleeparams();
self botmeleeparamsoverride( yaw, dist );
}