mirror of
https://github.com/ineedbots/iw4_bot_warfare.git
synced 2025-04-23 14:25:43 +00:00
grenade
This commit is contained in:
parent
af0121c77f
commit
71032416d8
@ -1905,35 +1905,6 @@ doSemiTime()
|
|||||||
self.bot.semi_time = false;
|
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.
|
Returns true if the bot can fire their current weapon.
|
||||||
*/
|
*/
|
||||||
|
@ -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()
|
bot_jav_loc_think()
|
||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon("disconnect");
|
||||||
|
@ -41,6 +41,35 @@ BotPressAttack(time)
|
|||||||
self maps\mp\bots\_bot_internal::pressFire(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)
|
throwBotGrenade(gname)
|
||||||
{
|
{
|
||||||
return self maps\mp\bots\_bot_internal::botThrowGrenade(gname);
|
return self maps\mp\bots\_bot_internal::botThrowGrenade(gname);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user