This commit is contained in:
Your Name 2020-08-18 00:27:49 -06:00
parent 88491f954a
commit 0106fab764
3 changed files with 194 additions and 7 deletions

View File

@ -216,7 +216,7 @@ lockon_watch()
if (!isDefined(self.bot.target) || !isDefined(self.bot.target.entity))
continue;
if (self.bot.target.entity.classname != "script_vehicle" && self.bot.target.entity.model != "vehicle_uav_static_mp")
if (!entIsVehicle(self.bot.target.entity))
continue;
weap = self getCurrentWeapon();
@ -1925,7 +1925,7 @@ walk()
{
curweap = self getCurrentWeapon();
if(self.bot.target.entity.classname == "script_vehicle" || self.bot.target.entity.model == "vehicle_uav_static_mp" || self.bot.isfraggingafter)
if(entIsVehicle(self.bot.target.entity) || self.bot.isfraggingafter)
{
continue;
}

View File

@ -1010,6 +1010,184 @@ onBotSpawned()
gameFlagWait("prematch_done");
self thread bot_killstreak_think();
self thread bot_target_vehicle();
self thread bot_weapon_think();
}
}
bot_weapon_think()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
for(;;)
{
self waittill_any_timeout(randomIntRange(2, 4), "bot_force_check_switch");
if(self IsBotReloading() || self IsBotFragging() || self botIsClimbing() || self IsBotKnifing())
continue;
if(self BotIsFrozen())
continue;
if(self isDefusing() || self isPlanting())
continue;
if (self IsUsingRemote())
continue;
curWeap = self GetCurrentWeapon();
hasTarget = self hasThreat();
if(hasTarget)
{
threat = self getThreat();
rocketAmmo = self getRocketAmmo();
if(entIsVehicle(threat) && isDefined(rocketAmmo))
{
if (curWeap != rocketAmmo)
self setSpawnWeapon(rocketAmmo);
continue;
}
}
if(curWeap != "none" && self getAmmoCount(curWeap) && curWeap != "stinger_mp" && curWeap != "javelin_mp")
{
if(randomInt(100) > self.pers["bots"]["behavior"]["switch"])
continue;
if(hasTarget)
continue;
}
weaponslist = self getweaponslistall();
weap = "";
while(weaponslist.size)
{
weapon = weaponslist[randomInt(weaponslist.size)];
weaponslist = array_remove(weaponslist, weapon);
if(!self getAmmoCount(weapon))
continue;
if (!isWeaponDroppable(weapon))
continue;
if(curWeap == weapon || weapon == "none" || weapon == "")
continue;
weap = weapon;
break;
}
if(weap == "")
continue;
self setSpawnWeapon(weap);
}
}
getRocketAmmo()
{
answer = undefined;
if(self getAmmoCount("rpg_mp"))
answer = "rpg_mp";
if(self getAmmoCount("at4_mp"))
answer = "at4_mp";
if(self getAmmoCount("stinger_mp"))
answer = "stinger_mp";
return answer;
}
getLockonAmmo()
{
answer = undefined;
if(self getAmmoCount("at4_mp"))
answer = "at4_mp";
if(self getAmmoCount("stinger_mp"))
answer = "stinger_mp";
return answer;
}
bot_target_vehicle()
{
self endon("disconnect");
self endon("death");
for (;;)
{
wait randomIntRange(2, 4);
if(self HasScriptEnemy())
continue;
if (self IsUsingRemote())
continue;
rocketAmmo = self getRocketAmmo();
if(!isDefined(rocketAmmo) && self BotGetRandom() < 90)
continue;
targets = maps\mp\_stinger::GetTargetList();
if (!targets.size)
continue;
lockOnAmmo = self getLockonAmmo();
myEye = self GetEye();
target = undefined;
for (i = targets.size - 1; i >= 0; i--)
{
tempTarget = targets[i];
if (isDefined(tempTarget.owner) && tempTarget.owner == self)
continue;
if(!bulletTracePassed( myEye, tempTarget.origin, false, tempTarget ))
continue;
if (tempTarget.health <= 0)
continue;
if (tempTarget.classname != "script_vehicle" && !isDefined(lockOnAmmo))
continue;
target = tempTarget;
}
if (!isDefined(target))
continue;
self SetScriptEnemy( target, (0, 0, 0) );
self bot_attack_vehicle( target );
self ClearScriptEnemy();
self notify("bot_force_check_switch");
}
}
bot_attack_vehicle( target )
{
target endon("death");
wait_time = RandomIntRange( 7, 10 );
for ( i = 0; i < wait_time; i++ )
{
self notify("bot_force_check_switch");
wait( 1 );
if ( !IsDefined( target ) )
{
return;
}
}
}
@ -1055,11 +1233,6 @@ bot_killstreak_think()
self endon("death");
level endon("game_ended");
if (randomInt(2))
self maps\mp\killstreaks\_killstreaks::tryGiveKillstreak("ac130");
else
self maps\mp\killstreaks\_killstreaks::tryGiveKillstreak("helicopter_minigun");
for (;;)
{
wait randomIntRange(1, 3);
@ -1247,6 +1420,15 @@ bot_killstreak_think()
if (streakName == "nuke" && isDefined( level.nukeIncoming ))
continue;
if (streakName == "counter_uav" && self.pers["bots"]["skill"]["base"] > 3 && ((level.teamBased && level.activeCounterUAVs[self.team]) || (!level.teamBased && level.activeCounterUAVs[self.guid])))
continue;
if (streakName == "uav" && self.pers["bots"]["skill"]["base"] > 3 && ((level.teamBased && level.activeUAVs[self.team]) || (!level.teamBased && level.activeUAVs[self.guid])))
continue;
if (streakName == "emp" && self.pers["bots"]["skill"]["base"] > 3 && ((level.teamBased && level.teamEMPed[level.otherTeam[self.team]]) || (!level.teamBased && isDefined( level.empPlayer ))))
continue;
location = undefined;
directionYaw = undefined;
switch (streakName)

View File

@ -13,6 +13,11 @@ is_bot()
return ((isDefined(self.pers["isBot"]) && self.pers["isBot"]) || (isDefined(self.pers["isBotWarfare"]) && self.pers["isBotWarfare"]) || isSubStr( self.guid, "bot" ));
}
entIsVehicle(ent)
{
return (ent.classname == "script_vehicle" || ent.model == "vehicle_uav_static_mp" || ent.model == "vehicle_ac130_coop");
}
/*
Returns how much the bot is ads'ing all the way.
*/