From 3d3c7e7fa47f7c98ef9a88680d31f601c12f8155 Mon Sep 17 00:00:00 2001 From: ineed bots Date: Tue, 11 Jul 2023 23:01:06 -0600 Subject: [PATCH] some stuff --- maps/bots/_bot_internal.gsc | 2 +- maps/bots/_bot_script.gsc | 122 ++++++++++++++++++++++++++++++++++++ maps/bots/_bot_utility.gsc | 16 +++++ 3 files changed, 139 insertions(+), 1 deletion(-) diff --git a/maps/bots/_bot_internal.gsc b/maps/bots/_bot_internal.gsc index 3de0061..49a9de6 100644 --- a/maps/bots/_bot_internal.gsc +++ b/maps/bots/_bot_internal.gsc @@ -1309,7 +1309,7 @@ aim_loop() self thread bot_lookat( aimpos, aimspeed ); } - if ( isActor && !self.bot.isknifingafter && conedot > 0.9 && dist < level.bots_maxKnifeDistance && trace_time > reaction_time && getDvarInt( "bots_play_knife" ) ) + if ( isActor && !self.bot.isknifingafter && conedot > 0.9 && dist < level.bots_maxKnifeDistance && trace_time > reaction_time && !self.bot.isreloading && getDvarInt( "bots_play_knife" ) ) { self clear_bot_after_target(); self thread knife(); diff --git a/maps/bots/_bot_script.gsc b/maps/bots/_bot_script.gsc index 709f1b6..05239c9 100644 --- a/maps/bots/_bot_script.gsc +++ b/maps/bots/_bot_script.gsc @@ -39,6 +39,28 @@ connected() */ onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime ) { + if ( !IsDefined( self ) || !isDefined( self.team ) ) + return; + + if ( !isAlive( self ) ) + return; + + if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" ) + return; + + if ( iDamage <= 0 ) + return; + + if ( !IsDefined( eAttacker ) || !isDefined( eAttacker.team ) ) + return; + + if ( eAttacker == self ) + return; + + if ( !isAlive( eAttacker ) ) + return; + + self SetAttacker( eAttacker ); } /* @@ -383,5 +405,105 @@ start_bot_threads() level endon( "intermission" ); self endon( "zombified" ); + self thread doReloadCancel(); + self thread maps\bots\script_objectives\_obj_init::start_bot_threads(); } + +/* + Changes to the weap +*/ +changeToWeapon( weap ) +{ + self endon( "disconnect" ); + self endon( "zombified" ); + level endon( "game_ended" ); + + if ( !self HasWeapon( weap ) ) + return false; + + self BotChangeToWeapon( weap ); + + if ( self GetCurrentWeapon() == weap ) + return true; + + self waittill_any_timeout( 5, "weapon_change" ); + + return ( self GetCurrentWeapon() == weap ); +} + +/* + Reload cancels +*/ +doReloadCancel_loop() +{ + ret = self waittill_any_return( "reload", "weapon_change" ); + + if ( self BotIsFrozen() ) + return; + + if ( self useButtonPressed() ) + return; + + if ( self InLastStand() ) + return; + + curWeap = self GetCurrentWeapon(); + + if ( !self isWeaponPrimary( curWeap ) ) + return; + + if ( ret == "reload" ) + { + // check single reloads + if ( self GetWeaponAmmoClip( curWeap ) < WeaponClipSize( curWeap ) ) + return; + } + + // check difficulty + if ( self.pers["bots"]["skill"]["base"] <= 3 ) + return; + + // check if got another weapon + weaponslist = self GetWeaponsListPrimaries(); + weap = ""; + + while ( weaponslist.size ) + { + weapon = weaponslist[randomInt( weaponslist.size )]; + weaponslist = array_remove( weaponslist, weapon ); + + if ( !self isWeaponPrimary( weapon ) ) + continue; + + if ( curWeap == weapon || weapon == "none" || weapon == "" ) + continue; + + weap = weapon; + break; + } + + if ( weap == "" ) + return; + + // do the cancel + wait 0.1; + self thread ChangeToWeapon( weap ); + wait 0.25; + self thread ChangeToWeapon( curWeap ); + wait 2; +} + +/* + Reload cancels +*/ +doReloadCancel() +{ + self endon( "disconnect" ); + self endon( "zombified" ); + + for ( ;; ) + { + self doReloadCancel_loop(); + } +} diff --git a/maps/bots/_bot_utility.gsc b/maps/bots/_bot_utility.gsc index 22445a5..7244a22 100644 --- a/maps/bots/_bot_utility.gsc +++ b/maps/bots/_bot_utility.gsc @@ -1066,3 +1066,19 @@ targetIsGibbed() { return isDefined( self.gibbed ) && self.gibbed; } + +/* + is weap primary? +*/ +isWeaponPrimary( weap ) +{ + weaps = self GetWeaponsListPrimaries(); + + for ( i = 0; i < weaps.size; i++ ) + { + if ( weap == weaps[i] ) + return true; + } + + return false; +}