mirror of
https://github.com/ineedbots/iw4_bot_warfare.git
synced 2025-04-22 22:05:44 +00:00
Fix
This commit is contained in:
parent
e5cad564ca
commit
a43849dcb3
@ -354,7 +354,7 @@ UseRunThink()
|
||||
self.bot.isfrozen || self.bot.climbing ||
|
||||
self.bot.isreloading ||
|
||||
self.bot.ads_pressed || self.bot.fire_pressed ||
|
||||
self.bot.isfragging ||
|
||||
self.bot.isfragging || self.bot.knifing ||
|
||||
lengthsquared(self.bot.velocity) <= 25 ||
|
||||
self IsStunned() || self isArtShocked() || self maps\mp\_flashgrenades::isFlashbanged())
|
||||
{
|
||||
@ -1060,7 +1060,12 @@ grenade_danager()
|
||||
if (self.bot.isfrozen || level.gameEnded || !gameFlag( "prematch_done" ))
|
||||
continue;
|
||||
|
||||
if(self.bot.isfraggingafter || self.bot.climbing)
|
||||
if(self.bot.isfraggingafter || self.bot.climbing || self.bot.knifingafter)
|
||||
continue;
|
||||
|
||||
curWeap = self GetCurrentWeapon();
|
||||
|
||||
if (!isWeaponDroppable(curWeap))
|
||||
continue;
|
||||
|
||||
myEye = self getEye();
|
||||
@ -1206,7 +1211,7 @@ reload_thread()
|
||||
if (self.bot.isfrozen || level.gameEnded || !gameFlag( "prematch_done" ))
|
||||
return;
|
||||
|
||||
if(isDefined(self.bot.target) || self.bot.isreloading || self.bot.isfraggingafter || self.bot.climbing || self.bot.knifing)
|
||||
if(isDefined(self.bot.target) || self.bot.isreloading || self.bot.isfraggingafter || self.bot.climbing || self.bot.knifingafter)
|
||||
return;
|
||||
|
||||
cur = self getCurrentWEapon();
|
||||
@ -2108,6 +2113,18 @@ knife(ent, knifeDist)
|
||||
{
|
||||
self endon("disconnect");
|
||||
self endon("death");
|
||||
level endon ( "game_ended" );
|
||||
|
||||
if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen)
|
||||
return;
|
||||
|
||||
curWeap = self GetCurrentWeapon();
|
||||
|
||||
if (!isWeaponDroppable(curWeap))
|
||||
return;
|
||||
|
||||
if (self.bot.knifing || self.bot.isfraggingafter)
|
||||
return;
|
||||
|
||||
self notify("bot_kill_knife");
|
||||
self endon("bot_kill_knife");
|
||||
@ -2116,7 +2133,6 @@ knife(ent, knifeDist)
|
||||
self.bot.knifingafter = true;
|
||||
|
||||
isplay = isPlayer(ent);
|
||||
curWeap = self GetCurrentWeapon();
|
||||
usedRiot = self.hasRiotShieldEquipped;
|
||||
distsq = DistanceSquared(self.origin, ent.origin);
|
||||
inLastStand = isDefined(self.lastStand);
|
||||
@ -2260,6 +2276,9 @@ reload()
|
||||
{
|
||||
cur = self GetCurrentWeapon();
|
||||
|
||||
if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen)
|
||||
return;
|
||||
|
||||
self SetWeaponAmmoStock(cur, self GetWeaponAmmoClip(cur) + self GetWeaponAmmoStock(cur));
|
||||
self setWeaponAmmoClip(cur, 0);
|
||||
// the script should reload for us.
|
||||
@ -2269,6 +2288,21 @@ botThrowGrenade(grenName)
|
||||
{
|
||||
self endon("death");
|
||||
self endon("disconnect");
|
||||
level endon ( "game_ended" );
|
||||
|
||||
if (isDefined(self.lastStand) && !self _hasPerk("specialty_laststandoffhand") && (!isDefined(self.inFinalStand) || !self.inFinalStand))
|
||||
return "laststand";
|
||||
|
||||
if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen)
|
||||
return "can't move";
|
||||
|
||||
curWeap = self GetCurrentWeapon();
|
||||
|
||||
if (!isWeaponDroppable(curWeap))
|
||||
return "cur weap is not droppable";
|
||||
|
||||
if (self.bot.knifingafter)
|
||||
return "knifing";
|
||||
|
||||
if (self.bot.tryingtofrag || self.bot.isfraggingafter)
|
||||
return "already nading";
|
||||
@ -2276,8 +2310,6 @@ botThrowGrenade(grenName)
|
||||
if (!self getAmmoCount(grenName))
|
||||
return "no ammo";
|
||||
|
||||
curWeap = self GetCurrentWeapon();
|
||||
|
||||
self setSpawnWeapon(grenName);
|
||||
self.bot.tryingtofrag = true;
|
||||
|
||||
@ -2348,10 +2380,11 @@ jump()
|
||||
{
|
||||
self endon("death");
|
||||
self endon("disconnect");
|
||||
level endon ( "game_ended" );
|
||||
|
||||
if (isDefined(self.lastStand) || self getStance() != "stand" ||
|
||||
level.gameEnded || !gameFlag( "prematch_done" ) || self IsUsingRemote() ||
|
||||
self.bot.isfrozen || self.bot.climbing || self.bot.jumping || self.bot.jumpingafter)
|
||||
self.bot.isfrozen || self.bot.climbing || self.bot.jumpingafter)
|
||||
return;
|
||||
|
||||
self.bot.jumping = true;
|
||||
@ -2426,6 +2459,9 @@ bot_lookat(pos, time)
|
||||
self endon("spawned_player");
|
||||
level endon ( "game_ended" );
|
||||
|
||||
if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen)
|
||||
return;
|
||||
|
||||
if (!isDefined(pos))
|
||||
return;
|
||||
|
||||
|
@ -500,6 +500,33 @@ setKillstreaks()
|
||||
*/
|
||||
onKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration)
|
||||
{
|
||||
self.killerLocation = undefined;
|
||||
|
||||
if(!IsDefined( self ) || !isDefined(self.team))
|
||||
return;
|
||||
|
||||
if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" )
|
||||
return;
|
||||
|
||||
if ( iDamage <= 0 )
|
||||
return;
|
||||
|
||||
if(!IsDefined( eAttacker ) || !isDefined(eAttacker.team))
|
||||
return;
|
||||
|
||||
if(eAttacker == self)
|
||||
return;
|
||||
|
||||
if(level.teamBased && eAttacker.team == self.team)
|
||||
return;
|
||||
|
||||
if ( !IsDefined( eInflictor ) || eInflictor.classname != "player" )
|
||||
return;
|
||||
|
||||
if(!isAlive(eAttacker))
|
||||
return;
|
||||
|
||||
self.killerLocation = eAttacker.origin;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -507,6 +534,101 @@ onKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc,
|
||||
*/
|
||||
onDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset)
|
||||
{
|
||||
if(!IsDefined( self ) || !isDefined(self.team))
|
||||
return;
|
||||
|
||||
if(!isAlive(self))
|
||||
return;
|
||||
|
||||
if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" )
|
||||
return;
|
||||
|
||||
if ( iDamage <= 0 )
|
||||
return;
|
||||
|
||||
if(!IsDefined( eAttacker ) || !isDefined(eAttacker.team))
|
||||
return;
|
||||
|
||||
if(eAttacker == self)
|
||||
return;
|
||||
|
||||
if(level.teamBased && eAttacker.team == self.team)
|
||||
return;
|
||||
|
||||
if ( !IsDefined( eInflictor ) || eInflictor.classname != "player" )
|
||||
return;
|
||||
|
||||
if(!isAlive(eAttacker))
|
||||
return;
|
||||
|
||||
if (!isSubStr(sWeapon, "_silencer_"))
|
||||
self bot_cry_for_help( eAttacker );
|
||||
|
||||
self SetAttacker( eAttacker );
|
||||
}
|
||||
|
||||
/*
|
||||
When the bot gets attacked, have the bot ask for help from teammates.
|
||||
*/
|
||||
bot_cry_for_help( attacker )
|
||||
{
|
||||
if ( !level.teamBased )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
theTime = GetTime();
|
||||
if ( IsDefined( self.help_time ) && theTime - self.help_time < 1000 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self.help_time = theTime;
|
||||
|
||||
for ( i = level.players.size - 1; i >= 0; i-- )
|
||||
{
|
||||
player = level.players[i];
|
||||
|
||||
if ( !player is_bot() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!isDefined(player.team))
|
||||
continue;
|
||||
|
||||
if ( !IsAlive( player ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( player == self )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( player.team != self.team )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
dist = player.pers["bots"]["skill"]["help_dist"];
|
||||
dist *= dist;
|
||||
if ( DistanceSquared( self.origin, player.origin ) > dist )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( RandomInt( 100 ) < 50 )
|
||||
{
|
||||
self SetAttacker( attacker );
|
||||
|
||||
if ( RandomInt( 100 ) > 70 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onKillcam()
|
||||
@ -844,6 +966,9 @@ onSpawned()
|
||||
|
||||
if(randomInt(100) <= self.pers["bots"]["behavior"]["class"])
|
||||
self.bot_change_class = undefined;
|
||||
|
||||
self.bot_lock_goal = false;
|
||||
self.help_time = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@ -883,5 +1008,74 @@ onBotSpawned()
|
||||
{
|
||||
self waittill("bot_spawned");
|
||||
gameFlagWait("prematch_done");
|
||||
|
||||
self thread bot_killstreak_think();
|
||||
}
|
||||
}
|
||||
|
||||
bot_killstreak_think()
|
||||
{
|
||||
self endon("disconnect");
|
||||
self endon("death");
|
||||
level endon("game_ended");
|
||||
|
||||
for (;;)
|
||||
{
|
||||
wait randomIntRange(1, 3);
|
||||
|
||||
if ( !isDefined( self.pers["killstreaks"][0] ) )
|
||||
continue;
|
||||
|
||||
if(self BotIsFrozen())
|
||||
continue;
|
||||
|
||||
if(self HasThreat())
|
||||
continue;
|
||||
|
||||
if(self IsBotReloading() || self IsBotFragging() || self IsKnifing())
|
||||
continue;
|
||||
|
||||
if(self isDefusing() || self isPlanting())
|
||||
continue;
|
||||
|
||||
curWeap = self GetCurrentWeapon();
|
||||
if (!isWeaponDroppable(curWeap))
|
||||
continue;
|
||||
|
||||
streakName = self.pers["killstreaks"][0].streakName;
|
||||
|
||||
ksWeap = maps\mp\killstreaks\_killstreaks::getKillstreakWeapon( streakName );
|
||||
|
||||
if (maps\mp\killstreaks\_killstreaks::isRideKillstreak(streakName) || maps\mp\killstreaks\_killstreaks::isCarryKillstreak(streakName))
|
||||
{
|
||||
// sentry
|
||||
// predator_missile
|
||||
// ac130
|
||||
// helicopter_minigun
|
||||
}
|
||||
else
|
||||
{
|
||||
// airdrop_mega
|
||||
// airdrop_sentry_minigun
|
||||
// airdrop
|
||||
// case "harrier_airstrike":
|
||||
// case "stealth_airstrike":
|
||||
// case "precision_airstrike":
|
||||
switch (streakName)
|
||||
{
|
||||
case "helicopter":
|
||||
case "helicopter_flares":
|
||||
case "uav":
|
||||
case "nuke":
|
||||
case "counter_uav":
|
||||
case "emp":
|
||||
self BotFreezeControls(true);
|
||||
self setSpawnWeapon(ksWeap);
|
||||
wait 1;
|
||||
self setSpawnWeapon(curWeap);
|
||||
self BotFreezeControls(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -186,6 +186,26 @@ HasThreat()
|
||||
return (isDefined(self GetThreat()));
|
||||
}
|
||||
|
||||
IsKnifing()
|
||||
{
|
||||
return self.bot.knifing;
|
||||
}
|
||||
|
||||
IsDefusing()
|
||||
{
|
||||
return (isDefined(self.isDefusing) && self.isDefusing);
|
||||
}
|
||||
|
||||
isPlanting()
|
||||
{
|
||||
return (isDefined(self.isPlanting) && self.isPlanting);
|
||||
}
|
||||
|
||||
isWeaponDroppable(weap)
|
||||
{
|
||||
return (maps\mp\gametypes\_weapons::mayDropWeapon(weap));
|
||||
}
|
||||
|
||||
/*
|
||||
Returns if we are stunned.
|
||||
*/
|
||||
|
@ -1 +1 @@
|
||||
start iw4x.exe -dedicated +set net_port "28960" +exec server.cfg +map_rotate
|
||||
start iw4x.exe -dedicated +set sv_lanonly "1" +set net_port "28960" +exec server.cfg +map_rotate
|
Loading…
x
Reference in New Issue
Block a user