mirror of
https://github.com/ineedbots/iw4_bot_warfare.git
synced 2025-05-12 15:34:51 +00:00
throw back
This commit is contained in:
parent
63a18c0667
commit
547f486bbb
@ -71,6 +71,7 @@ init()
|
||||
level.bots_maxShotgunDistance *= level.bots_maxShotgunDistance;
|
||||
level.bots_listenDist = 100;
|
||||
level.bots_listenDist *= level.bots_listenDist;
|
||||
level.botPushOutDist = 30;
|
||||
|
||||
level.smokeRadius = 255;
|
||||
|
||||
@ -557,18 +558,21 @@ onGrenadeFire()
|
||||
if(weaponName == "smoke_grenade_mp")
|
||||
grenade thread AddToSmokeList();
|
||||
else if (isSubStr(weaponName, "frag_"))
|
||||
grenade thread AddToFragList();
|
||||
grenade thread AddToFragList(self);
|
||||
else if ( weaponName == "claymore" || weaponName == "claymore_mp" )
|
||||
grenade thread claymoreDetonationBotFix();
|
||||
}
|
||||
}
|
||||
|
||||
AddToFragList()
|
||||
AddToFragList(who)
|
||||
{
|
||||
grenade = spawnstruct();
|
||||
grenade.origin = self getOrigin();
|
||||
grenade.velocity = (0, 0, 0);
|
||||
grenade.grenade = self;
|
||||
grenade.owner = who;
|
||||
grenade.team = who.team;
|
||||
grenade.throwback = undefined;
|
||||
|
||||
grenade thread thinkFrag();
|
||||
|
||||
@ -580,7 +584,7 @@ thinkFrag()
|
||||
while(isDefined(self.grenade))
|
||||
{
|
||||
nowOrigin = self.grenade getOrigin();
|
||||
self.velocity = (nowOrigin - self.origin)*20; //lensq < 10000
|
||||
self.velocity = (nowOrigin - self.origin)*20;
|
||||
self.origin = nowOrigin;
|
||||
|
||||
wait 0.05;
|
||||
|
@ -154,7 +154,7 @@ onPlayerSpawned()
|
||||
self thread UseRunThink();
|
||||
self thread watchUsingRemote();
|
||||
|
||||
// grenades (pick up too), knife (players and ents), stinger, footsounds
|
||||
// knife (players and ents), stinger, footsounds
|
||||
|
||||
self thread spawned();
|
||||
}
|
||||
@ -429,6 +429,30 @@ moveHack()
|
||||
}
|
||||
|
||||
// push out of players
|
||||
for (i = level.players.size - 1; i >= 0; i--)
|
||||
{
|
||||
player = level.players[i];
|
||||
|
||||
if (player == self)
|
||||
continue;
|
||||
|
||||
if (!isReallyAlive(player))
|
||||
continue;
|
||||
|
||||
dist = distance(self.origin, player.origin);
|
||||
|
||||
if (dist > level.botPushOutDist)
|
||||
continue;
|
||||
|
||||
pushOutDir = VectorNormalize((self.origin[0], self.origin[1], 0)-(player.origin[0], player.origin[1], 0));
|
||||
trace = bulletTrace(self.origin + (0,0,20), (self.origin + (0,0,20)) + (pushOutDir * ((level.botPushOutDist-dist)+10)), false, self);
|
||||
//no collision, so push out
|
||||
if(trace["fraction"] == 1)
|
||||
{
|
||||
pushoutPos = self.origin + (pushOutDir * (level.botPushOutDist-dist));
|
||||
self SetOrigin((pushoutPos[0], pushoutPos[1], self.origin[2]));
|
||||
}
|
||||
}
|
||||
|
||||
if (completedMove)
|
||||
continue;
|
||||
@ -728,6 +752,8 @@ spawned()
|
||||
|
||||
self thread emptyClipShoot();
|
||||
|
||||
self thread grenade_danager();
|
||||
|
||||
self thread target();
|
||||
self thread aim();
|
||||
self thread check_reload();
|
||||
@ -738,6 +764,85 @@ spawned()
|
||||
self notify("bot_spawned");
|
||||
}
|
||||
|
||||
grenade_danager()
|
||||
{
|
||||
self endon("disconnect");
|
||||
self endon("death");
|
||||
|
||||
for(;;)
|
||||
{
|
||||
wait 1;
|
||||
|
||||
if (self.bot.isfrozen || level.gameEnded || !gameFlag( "prematch_done" ))
|
||||
continue;
|
||||
|
||||
if(self.bot.isfraggingafter || self.bot.climbing)
|
||||
continue;
|
||||
|
||||
myEye = self getEye();
|
||||
for (i = level.bots_fragList.count-1; i >= 0; i--)
|
||||
{
|
||||
frag = level.bots_fragList.data[i];
|
||||
|
||||
if (isDefined(frag.throwback))
|
||||
continue;
|
||||
|
||||
if (isDefined(frag.owner) && frag.owner == self)
|
||||
continue;
|
||||
|
||||
if (level.teamBased && frag.team == self.team)
|
||||
continue;
|
||||
|
||||
if (lengthSquared(frag.velocity) > 10000)
|
||||
continue;
|
||||
|
||||
if(DistanceSquared(self.origin, frag.origin) > 20000)
|
||||
continue;
|
||||
|
||||
if (!bulletTracePassed( myEye, frag.origin, false, frag.grenade ))
|
||||
continue;
|
||||
|
||||
frag.throwback = true;
|
||||
|
||||
hasFrag = self HasWeapon("frag_grenade_mp");
|
||||
fragCount = self GetAmmoCount("frag_grenade_mp");
|
||||
|
||||
if (!hasFrag)
|
||||
self _GiveWeapon("frag_grenade_mp", 0);
|
||||
self SetWeaponAmmoClip("frag_grenade_mp", 1);
|
||||
|
||||
self thread watchThrowback(frag);
|
||||
self botThrowGrenade("frag_grenade_mp");
|
||||
|
||||
frag.throwback = undefined;
|
||||
self SetWeaponAmmoClip("frag_grenade_mp", fragCount);
|
||||
if (!hasFrag)
|
||||
self TakeWeapon("frag_grenade_mp");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
watchThrowback(frag)
|
||||
{
|
||||
self endon("bot_kill_throwback");
|
||||
self thread notifyAfterDelay(5, "bot_kill_throwback");
|
||||
self waittill( "grenade_fire", grenade );
|
||||
|
||||
// blew up already
|
||||
if (!isDefined(frag.grenade))
|
||||
{
|
||||
grenade delete();
|
||||
return;
|
||||
}
|
||||
|
||||
grenade.threwBack = true;
|
||||
self thread incPlayerStat( "throwbacks", 1 );
|
||||
grenade thread maps\mp\gametypes\_shellshock::grenade_earthQuake();
|
||||
grenade.originalOwner = frag.owner;
|
||||
frag.grenade delete();
|
||||
}
|
||||
|
||||
/*
|
||||
Bots will update its needed stance according to the nodes on the level. Will also allow the bot to sprint when it can.
|
||||
*/
|
||||
@ -1807,7 +1912,7 @@ botThrowGrenade(grenName)
|
||||
self endon("death");
|
||||
self endon("disconnect");
|
||||
|
||||
if (self.bot.tryingtofrag)
|
||||
if (self.bot.tryingtofrag || self.bot.isfraggingafter)
|
||||
return "already nading";
|
||||
|
||||
if (!self getAmmoCount(grenName))
|
||||
@ -1825,7 +1930,6 @@ botThrowGrenade(grenName)
|
||||
if (ret != "timeout")
|
||||
{
|
||||
ret = self waittill_any_timeout( 5, "grenade_fire", "weapon_change", "offhand_end" );
|
||||
wait 0.95;
|
||||
}
|
||||
|
||||
self.bot.tryingtofrag = false;
|
||||
|
@ -21,7 +21,6 @@ botAdsAmount()
|
||||
return (1 / (self.bot.ads_highest - self.bot.ads_lowest)) * self.bot.ads_tightness + (1 + (self.bot.ads_highest / (self.bot.ads_lowest - self.bot.ads_highest)));
|
||||
}
|
||||
|
||||
// aim loop needs work
|
||||
BotPressADS(time)
|
||||
{
|
||||
self maps\mp\bots\_bot_internal::pressAds(time);
|
||||
@ -215,6 +214,12 @@ getEyeHeight()
|
||||
return myEye[2] - self.origin[2];
|
||||
}
|
||||
|
||||
notifyAfterDelay(delay, not)
|
||||
{
|
||||
wait delay;
|
||||
self notify(not);
|
||||
}
|
||||
|
||||
/*
|
||||
Pezbot's line sphere intersection.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user