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_maxShotgunDistance *= level.bots_maxShotgunDistance;
level.bots_listenDist = 100; level.bots_listenDist = 100;
level.bots_listenDist *= level.bots_listenDist; level.bots_listenDist *= level.bots_listenDist;
level.botPushOutDist = 30;
level.smokeRadius = 255; level.smokeRadius = 255;
@ -557,18 +558,21 @@ onGrenadeFire()
if(weaponName == "smoke_grenade_mp") if(weaponName == "smoke_grenade_mp")
grenade thread AddToSmokeList(); grenade thread AddToSmokeList();
else if (isSubStr(weaponName, "frag_")) else if (isSubStr(weaponName, "frag_"))
grenade thread AddToFragList(); grenade thread AddToFragList(self);
else if ( weaponName == "claymore" || weaponName == "claymore_mp" ) else if ( weaponName == "claymore" || weaponName == "claymore_mp" )
grenade thread claymoreDetonationBotFix(); grenade thread claymoreDetonationBotFix();
} }
} }
AddToFragList() AddToFragList(who)
{ {
grenade = spawnstruct(); grenade = spawnstruct();
grenade.origin = self getOrigin(); grenade.origin = self getOrigin();
grenade.velocity = (0, 0, 0); grenade.velocity = (0, 0, 0);
grenade.grenade = self; grenade.grenade = self;
grenade.owner = who;
grenade.team = who.team;
grenade.throwback = undefined;
grenade thread thinkFrag(); grenade thread thinkFrag();
@ -580,7 +584,7 @@ thinkFrag()
while(isDefined(self.grenade)) while(isDefined(self.grenade))
{ {
nowOrigin = self.grenade getOrigin(); nowOrigin = self.grenade getOrigin();
self.velocity = (nowOrigin - self.origin)*20; //lensq < 10000 self.velocity = (nowOrigin - self.origin)*20;
self.origin = nowOrigin; self.origin = nowOrigin;
wait 0.05; wait 0.05;

View File

@ -154,7 +154,7 @@ onPlayerSpawned()
self thread UseRunThink(); self thread UseRunThink();
self thread watchUsingRemote(); self thread watchUsingRemote();
// grenades (pick up too), knife (players and ents), stinger, footsounds // knife (players and ents), stinger, footsounds
self thread spawned(); self thread spawned();
} }
@ -429,6 +429,30 @@ moveHack()
} }
// push out of players // 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) if (completedMove)
continue; continue;
@ -728,6 +752,8 @@ spawned()
self thread emptyClipShoot(); self thread emptyClipShoot();
self thread grenade_danager();
self thread target(); self thread target();
self thread aim(); self thread aim();
self thread check_reload(); self thread check_reload();
@ -738,6 +764,85 @@ spawned()
self notify("bot_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. 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("death");
self endon("disconnect"); self endon("disconnect");
if (self.bot.tryingtofrag) if (self.bot.tryingtofrag || self.bot.isfraggingafter)
return "already nading"; return "already nading";
if (!self getAmmoCount(grenName)) if (!self getAmmoCount(grenName))
@ -1825,7 +1930,6 @@ botThrowGrenade(grenName)
if (ret != "timeout") if (ret != "timeout")
{ {
ret = self waittill_any_timeout( 5, "grenade_fire", "weapon_change", "offhand_end" ); ret = self waittill_any_timeout( 5, "grenade_fire", "weapon_change", "offhand_end" );
wait 0.95;
} }
self.bot.tryingtofrag = false; 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))); 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) BotPressADS(time)
{ {
self maps\mp\bots\_bot_internal::pressAds(time); self maps\mp\bots\_bot_internal::pressAds(time);
@ -215,6 +214,12 @@ getEyeHeight()
return myEye[2] - self.origin[2]; return myEye[2] - self.origin[2];
} }
notifyAfterDelay(delay, not)
{
wait delay;
self notify(not);
}
/* /*
Pezbot's line sphere intersection. Pezbot's line sphere intersection.
*/ */