diff --git a/mods/bots/maps/mp/bots/_bot_internal.gsc b/mods/bots/maps/mp/bots/_bot_internal.gsc index bc88275..256b0a1 100644 --- a/mods/bots/maps/mp/bots/_bot_internal.gsc +++ b/mods/bots/maps/mp/bots/_bot_internal.gsc @@ -179,18 +179,37 @@ knife() { } -/* - Bot will hold the frag button for a time -*/ -frag(time) +botThrowGrenade(grenName) { -} + self endon("death"); + self endon("disconnect"); -/* - Bot will hold the 'smoke' button for a time. -*/ -smoke(time) -{ + if (self.bot.tryingtofrag) + return "already nading"; + + if (!self getAmmoCount(grenName)) + return "no ammo"; + + curWeap = self GetCurrentWeapon(); + + self setSpawnWeapon(grenName); + self.bot.tryingtofrag = true; + + ret = "grenade_pullback"; + if (grenName != "throwingknife_mp") + ret = self waittill_any_timeout( 5, "grenade_pullback" ); + + if (ret != "timeout") + { + ret = self waittill_any_timeout( 5, "grenade_fire", "weapon_change", "offhand_end" ); + wait 0.95; + } + + self.bot.tryingtofrag = false; + + self setSpawnWeapon(curWeap); + + return ret; } /* @@ -396,7 +415,7 @@ grenade_watch() self.bot.isfragging = true; self.bot.isfraggingafter = true; - self waittill_notify_or_timeout( "grenade_fire", 5 ); + self waittill_any_timeout( 5, "grenade_fire", "weapon_change", "offhand_end" ); self.bot.isfragging = false; self thread doFragAfterThread(); @@ -672,7 +691,7 @@ onWeaponChange() case "none": if(isDefined(self.lastDroppableWeapon) && self.lastDroppableWeapon != "none") self setSpawnWeapon(self.lastDroppableWeapon); - break;//grenades + break; case "ac130_105mm_mp": case "ac130_40mm_mp": case "ac130_25mm_mp": @@ -1388,19 +1407,11 @@ aim() nade = self getValidGrenade(); if(isDefined(nade) && rand <= self.pers["bots"]["behavior"]["nade"] && bulletTracePassed(myEye, myEye + (0, 0, 75), false, self) && bulletTracePassed(last_pos, last_pos + (0, 0, 100), false, target)) //bots_minGrenadeDistance { - if(nade == "frag_grenade_mp") - self thread frag(2.5); - else - self thread smoke(0.5); - + self thread botThrowGrenade(nade); self notify("kill_goal"); } } } - else - { - self stopNading(); - } } if (!usingRemote) @@ -1410,8 +1421,6 @@ aim() continue; } - self stopNading(); - if(isplay) { aimpos = target getTagOrigin( "j_spineupper" ) + (0, 0, nadeAimOffset); @@ -1458,7 +1467,6 @@ aim() } self ads(false); - self stopNading(); if (!isDefined(self.bot.script_aimpos)) { @@ -1514,15 +1522,6 @@ doSemiTime() self.bot.semi_time = false; } -/* - Stop the bot from nading. -*/ -stopNading() -{ - if(self.bot.isfragging) - self thread frag(0); -} - /* Returns a random grenade in the bot's inventory. */ @@ -1533,6 +1532,8 @@ getValidGrenade() grenadeTypes[grenadeTypes.size] = "smoke_grenade_mp"; grenadeTypes[grenadeTypes.size] = "flash_grenade_mp"; grenadeTypes[grenadeTypes.size] = "concussion_grenade_mp"; + grenadeTypes[grenadeTypes.size] = "semtex_mp"; + grenadeTypes[grenadeTypes.size] = "throwingknife_mp"; possibles = []; @@ -1558,6 +1559,9 @@ canFire(curweap) if(curweap == "none") return false; + if (self.bot.isreloading) + return false; + if (curweap == "riotshield_mp") return false; diff --git a/mods/bots/maps/mp/bots/_bot_utility.gsc b/mods/bots/maps/mp/bots/_bot_utility.gsc index 61ab6be..a61cf1b 100644 --- a/mods/bots/maps/mp/bots/_bot_utility.gsc +++ b/mods/bots/maps/mp/bots/_bot_utility.gsc @@ -44,6 +44,11 @@ pressFire(time) self fire(false); } +botThrowGrenade(gname) +{ + return maps\mp\bots\_bot_internal::botThrowGrenade(gname); +} + fire(what) { self.bot.fire_pressed = what;