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.isfrozen || self.bot.climbing ||
|
||||||
self.bot.isreloading ||
|
self.bot.isreloading ||
|
||||||
self.bot.ads_pressed || self.bot.fire_pressed ||
|
self.bot.ads_pressed || self.bot.fire_pressed ||
|
||||||
self.bot.isfragging ||
|
self.bot.isfragging || self.bot.knifing ||
|
||||||
lengthsquared(self.bot.velocity) <= 25 ||
|
lengthsquared(self.bot.velocity) <= 25 ||
|
||||||
self IsStunned() || self isArtShocked() || self maps\mp\_flashgrenades::isFlashbanged())
|
self IsStunned() || self isArtShocked() || self maps\mp\_flashgrenades::isFlashbanged())
|
||||||
{
|
{
|
||||||
@ -1060,7 +1060,12 @@ grenade_danager()
|
|||||||
if (self.bot.isfrozen || level.gameEnded || !gameFlag( "prematch_done" ))
|
if (self.bot.isfrozen || level.gameEnded || !gameFlag( "prematch_done" ))
|
||||||
continue;
|
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;
|
continue;
|
||||||
|
|
||||||
myEye = self getEye();
|
myEye = self getEye();
|
||||||
@ -1206,7 +1211,7 @@ reload_thread()
|
|||||||
if (self.bot.isfrozen || level.gameEnded || !gameFlag( "prematch_done" ))
|
if (self.bot.isfrozen || level.gameEnded || !gameFlag( "prematch_done" ))
|
||||||
return;
|
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;
|
return;
|
||||||
|
|
||||||
cur = self getCurrentWEapon();
|
cur = self getCurrentWEapon();
|
||||||
@ -2108,6 +2113,18 @@ knife(ent, knifeDist)
|
|||||||
{
|
{
|
||||||
self endon("disconnect");
|
self endon("disconnect");
|
||||||
self endon("death");
|
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 notify("bot_kill_knife");
|
||||||
self endon("bot_kill_knife");
|
self endon("bot_kill_knife");
|
||||||
@ -2116,7 +2133,6 @@ knife(ent, knifeDist)
|
|||||||
self.bot.knifingafter = true;
|
self.bot.knifingafter = true;
|
||||||
|
|
||||||
isplay = isPlayer(ent);
|
isplay = isPlayer(ent);
|
||||||
curWeap = self GetCurrentWeapon();
|
|
||||||
usedRiot = self.hasRiotShieldEquipped;
|
usedRiot = self.hasRiotShieldEquipped;
|
||||||
distsq = DistanceSquared(self.origin, ent.origin);
|
distsq = DistanceSquared(self.origin, ent.origin);
|
||||||
inLastStand = isDefined(self.lastStand);
|
inLastStand = isDefined(self.lastStand);
|
||||||
@ -2260,6 +2276,9 @@ reload()
|
|||||||
{
|
{
|
||||||
cur = self GetCurrentWeapon();
|
cur = self GetCurrentWeapon();
|
||||||
|
|
||||||
|
if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen)
|
||||||
|
return;
|
||||||
|
|
||||||
self SetWeaponAmmoStock(cur, self GetWeaponAmmoClip(cur) + self GetWeaponAmmoStock(cur));
|
self SetWeaponAmmoStock(cur, self GetWeaponAmmoClip(cur) + self GetWeaponAmmoStock(cur));
|
||||||
self setWeaponAmmoClip(cur, 0);
|
self setWeaponAmmoClip(cur, 0);
|
||||||
// the script should reload for us.
|
// the script should reload for us.
|
||||||
@ -2269,6 +2288,21 @@ botThrowGrenade(grenName)
|
|||||||
{
|
{
|
||||||
self endon("death");
|
self endon("death");
|
||||||
self endon("disconnect");
|
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)
|
if (self.bot.tryingtofrag || self.bot.isfraggingafter)
|
||||||
return "already nading";
|
return "already nading";
|
||||||
@ -2276,8 +2310,6 @@ botThrowGrenade(grenName)
|
|||||||
if (!self getAmmoCount(grenName))
|
if (!self getAmmoCount(grenName))
|
||||||
return "no ammo";
|
return "no ammo";
|
||||||
|
|
||||||
curWeap = self GetCurrentWeapon();
|
|
||||||
|
|
||||||
self setSpawnWeapon(grenName);
|
self setSpawnWeapon(grenName);
|
||||||
self.bot.tryingtofrag = true;
|
self.bot.tryingtofrag = true;
|
||||||
|
|
||||||
@ -2348,10 +2380,11 @@ jump()
|
|||||||
{
|
{
|
||||||
self endon("death");
|
self endon("death");
|
||||||
self endon("disconnect");
|
self endon("disconnect");
|
||||||
|
level endon ( "game_ended" );
|
||||||
|
|
||||||
if (isDefined(self.lastStand) || self getStance() != "stand" ||
|
if (isDefined(self.lastStand) || self getStance() != "stand" ||
|
||||||
level.gameEnded || !gameFlag( "prematch_done" ) || self IsUsingRemote() ||
|
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;
|
return;
|
||||||
|
|
||||||
self.bot.jumping = true;
|
self.bot.jumping = true;
|
||||||
@ -2426,6 +2459,9 @@ bot_lookat(pos, time)
|
|||||||
self endon("spawned_player");
|
self endon("spawned_player");
|
||||||
level endon ( "game_ended" );
|
level endon ( "game_ended" );
|
||||||
|
|
||||||
|
if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!isDefined(pos))
|
if (!isDefined(pos))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -500,6 +500,33 @@ setKillstreaks()
|
|||||||
*/
|
*/
|
||||||
onKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration)
|
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)
|
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()
|
onKillcam()
|
||||||
@ -844,6 +966,9 @@ onSpawned()
|
|||||||
|
|
||||||
if(randomInt(100) <= self.pers["bots"]["behavior"]["class"])
|
if(randomInt(100) <= self.pers["bots"]["behavior"]["class"])
|
||||||
self.bot_change_class = undefined;
|
self.bot_change_class = undefined;
|
||||||
|
|
||||||
|
self.bot_lock_goal = false;
|
||||||
|
self.help_time = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -883,5 +1008,74 @@ onBotSpawned()
|
|||||||
{
|
{
|
||||||
self waittill("bot_spawned");
|
self waittill("bot_spawned");
|
||||||
gameFlagWait("prematch_done");
|
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()));
|
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.
|
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