From 71032416d8f83274718929048b32efb50e0e9597 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 11 Sep 2020 15:07:17 -0600 Subject: [PATCH] grenade --- userraw/maps/mp/bots/_bot_internal.gsc | 29 -------- userraw/maps/mp/bots/_bot_script.gsc | 94 ++++++++++++++++++++++++++ userraw/maps/mp/bots/_bot_utility.gsc | 29 ++++++++ 3 files changed, 123 insertions(+), 29 deletions(-) diff --git a/userraw/maps/mp/bots/_bot_internal.gsc b/userraw/maps/mp/bots/_bot_internal.gsc index fdbb467..4c807fe 100644 --- a/userraw/maps/mp/bots/_bot_internal.gsc +++ b/userraw/maps/mp/bots/_bot_internal.gsc @@ -1905,35 +1905,6 @@ doSemiTime() self.bot.semi_time = false; } -/* - Returns a random grenade in the bot's inventory. -*/ -getValidGrenade() -{ - grenadeTypes = []; - grenadeTypes[grenadeTypes.size] = "frag_grenade_mp"; - 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 = []; - - for(i = 0; i < grenadeTypes.size; i++) - { - if ( !self hasWeapon( grenadeTypes[i] ) ) - continue; - - if ( !self getAmmoCount( grenadeTypes[i] ) ) - continue; - - possibles[possibles.size] = grenadeTypes[i]; - } - - return random(possibles); -} - /* Returns true if the bot can fire their current weapon. */ diff --git a/userraw/maps/mp/bots/_bot_script.gsc b/userraw/maps/mp/bots/_bot_script.gsc index 3a27e9c..a92500f 100644 --- a/userraw/maps/mp/bots/_bot_script.gsc +++ b/userraw/maps/mp/bots/_bot_script.gsc @@ -1427,6 +1427,100 @@ bot_perk_think() } } +bot_use_grenade_think() +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + + for (;;) + { + wait randomintRange(2, 4); + + if (randomInt(100) < 20) + continue; + + nade = self getValidGrenade(); + if (!isDefined(nade)) + continue; + + if (self HasThreat() || self HasBotJavelinLocation()) + continue; + + if(self BotIsFrozen()) + continue; + + if(self IsBotReloading() || self IsBotFragging() || self IsBotKnifing()) + continue; + + if(self isDefusing() || self isPlanting()) + continue; + + curWeap = self GetCurrentWeapon(); + if (!isWeaponPrimary(curWeap) || self.disabledWeapon) + continue; + + if (self botIsClimbing()) + continue; + + if (self IsUsingRemote()) + continue; + + nadeWp = undefined; + + for (i = 0; i < level.waypointsGren.size; i++) + { + if (Distance(self.origin, level.waypointsGren[i].origin) > 1024) + continue; + + if (isDefined(nadeWp) && closer(self.origin, nadeWp.origin, level.waypointsGren[i].origin)) + continue; + + nadeWp = level.waypointsGren[i]; + } + + loc = undefined; + myEye = self GetEye(); + if (!isDefined(nadeWp) || self HasScriptGoal() || self.bot_lock_goal) + { + traceForward = BulletTrace(myEye, myEye + AnglesToForward(self GetPlayerAngles()) * 900, false, self); + + loc = traceForward["position"]; + dist = DistanceSquared(self.origin, loc); + if (dist < level.bots_minGrenadeDistance || dist > level.bots_maxGrenadeDistance) + continue; + + if (!bulletTracePassed(self.origin + (0, 0, 5), self.origin + (0, 0, 2048), false, self)) + continue; + + if (!bulletTracePassed(loc + (0, 0, 5), loc + (0, 0, 2048), false, self)) + continue; + + loc += (0, 0, dist/3000); + } + else + { + loc = nadeWp.origin + AnglesToForward(nadeWp.angles) * 2048; + + self SetScriptGoal(nadeWp.origin, 16); + + ret = self waittill_any_return("new_goal", "goal", "bad_path"); + + if (ret != "new_goal") + self ClearScriptGoal(); + + if (ret != "goal") + continue; + } + + self SetScriptAimPos(loc); + + self throwBotGrenade(nade); + + self ClearScriptAimPos(loc); + } +} + bot_jav_loc_think() { self endon("disconnect"); diff --git a/userraw/maps/mp/bots/_bot_utility.gsc b/userraw/maps/mp/bots/_bot_utility.gsc index 22af4e1..26fb509 100644 --- a/userraw/maps/mp/bots/_bot_utility.gsc +++ b/userraw/maps/mp/bots/_bot_utility.gsc @@ -41,6 +41,35 @@ BotPressAttack(time) self maps\mp\bots\_bot_internal::pressFire(time); } +/* + Returns a random grenade in the bot's inventory. +*/ +getValidGrenade() +{ + grenadeTypes = []; + grenadeTypes[grenadeTypes.size] = "frag_grenade_mp"; + 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 = []; + + for(i = 0; i < grenadeTypes.size; i++) + { + if ( !self hasWeapon( grenadeTypes[i] ) ) + continue; + + if ( !self getAmmoCount( grenadeTypes[i] ) ) + continue; + + possibles[possibles.size] = grenadeTypes[i]; + } + + return random(possibles); +} + throwBotGrenade(gname) { return self maps\mp\bots\_bot_internal::botThrowGrenade(gname);