From 918bb4020a3b7cbb04e0e24821af085985267eab Mon Sep 17 00:00:00 2001 From: ineed bots Date: Mon, 25 Apr 2022 11:19:10 -0600 Subject: [PATCH] pick up guns --- README.md | 2 -- userraw/maps/mp/bots/_bot_internal.gsc | 44 +++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index db59d6d..9528ff4 100644 --- a/README.md +++ b/README.md @@ -161,10 +161,8 @@ You can find the ModDB release post [here](https://www.moddb.com/mods/bot-warfar - Recoil for bots - Use proper activate button for bombs, carepackages, etc - Proper weapon swaps, including altmode - - Pick up weapons from ground - Use static turrets in maps - Proper use of pred missile - - Bots in ac130 have viewport issues (engine) ## Credits - IW4x Team - https://github.com/XLabsProject/iw4x-client diff --git a/userraw/maps/mp/bots/_bot_internal.gsc b/userraw/maps/mp/bots/_bot_internal.gsc index 4b973b3..923ce41 100644 --- a/userraw/maps/mp/bots/_bot_internal.gsc +++ b/userraw/maps/mp/bots/_bot_internal.gsc @@ -472,10 +472,32 @@ spawned() self thread walk(); self thread watchHoldBreath(); self thread watchGrenadeFire(); + self thread watchPickupGun(); self notify( "bot_spawned" ); } +/* + watchPickupGun +*/ +watchPickupGun() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( ;; ) + { + wait 1; + + weap = self GetCurrentWeapon(); + + if ( weap != "none" && self GetAmmoCount( weap ) ) + continue; + + self thread use( 0.5 ); + } +} + /* Watches when the bot fires a grenade */ @@ -682,6 +704,7 @@ grenade_danager_loop() if ( !bulletTracePassed( myEye, frag.origin, false, frag.grenade ) ) continue; + self BotNotifyBotEvent( "throwback", "stop", frag ); self thread frag(); break; } @@ -1435,8 +1458,13 @@ aim_loop() if ( self.bot.isfraggingafter || self.bot.issmokingafter ) nadeAimOffset = dist / 3000; - else if ( curweap != "none" && weaponClass( curweap ) == "grenade" ) - nadeAimOffset = dist / 16000; + else if ( curweap != "none" && ( weaponClass( curweap ) == "grenade" || curweap == "throwingknife_mp" ) ) + { + if ( getWeaponClass( curweap ) == "weapon_projectile" ) + nadeAimOffset = dist / 16000; + else + nadeAimOffset = dist / 3000; + } if ( no_trace_time && ( !isDefined( self.bot.after_target ) || self.bot.after_target != target ) ) { @@ -1572,8 +1600,13 @@ aim_loop() if ( self.bot.isfraggingafter || self.bot.issmokingafter ) nadeAimOffset = dist / 3000; - else if ( curweap != "none" && weaponClass( curweap ) == "grenade" ) - nadeAimOffset = dist / 16000; + else if ( curweap != "none" && ( weaponClass( curweap ) == "grenade" || curweap == "throwingknife_mp" ) ) + { + if ( getWeaponClass( curweap ) == "weapon_projectile" ) + nadeAimOffset = dist / 16000; + else + nadeAimOffset = dist / 3000; + } aimpos = last_pos + ( 0, 0, self getEyeHeight() + nadeAimOffset ); @@ -1726,6 +1759,9 @@ canAds( dist, curweap ) if ( curweap == "none" ) return false; + if ( curweap == "c4_mp" ) + return RandomInt( 2 ); + if ( !getDvarInt( "bots_play_ads" ) ) return false;