throw back

This commit is contained in:
Your Name 2020-08-08 03:04:11 -06:00
parent 63a18c0667
commit 547f486bbb
3 changed files with 120 additions and 7 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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.
*/