This commit is contained in:
Your Name 2020-08-21 00:26:27 -06:00
parent 14d92e01bd
commit a77c24ba9b
2 changed files with 238 additions and 1 deletions

View File

@ -127,6 +127,7 @@ init()
level thread onPlayerConnect();
level thread addNotifyOnAirdrops();
level thread watchScrabler();
level thread handleBots();
}
@ -253,6 +254,43 @@ onPlayerConnect()
}
}
watchScrabler()
{
for (;;)
{
wait 1;
for ( i = level.players.size - 1; i >= 0; i-- )
{
player = level.players[i];
player.bot_isScrambled = false;
if (!player _HasPerk("specialty_localjammer") || !isReallyAlive(player))
continue;
if (player isEMPed())
continue;
for ( h = level.players.size - 1; h >= 0; h-- )
{
player2 = level.players[h];
if (player2 == player)
continue;
if(level.teamBased && player2.team == player.team)
continue;
if (Distance(player2.origin, player.origin) > 100)
continue;
player.bot_isScrambled = true;
}
}
}
}
/*
Called when a player connects.
*/

View File

@ -1085,6 +1085,199 @@ onBotSpawned()
self thread bot_weapon_think();
self thread bot_crate_think();
self thread bot_turret_think();
self thread bot_revenge_think();
self thread bot_uav_think();
self thread bot_listen_to_steps();
}
}
bot_listen_to_steps()
{
self endon("disconnect");
self endon("death");
for(;;)
{
wait 1;
if(self HasScriptGoal() || self.bot_lock_goal)
continue;
if(self.pers["bots"]["skill"]["base"] < 3)
continue;
dist = level.bots_listenDist;
if(self hasPerk("specialty_selectivehearing"))
dist *= 1.4;
dist *= dist;
heard = undefined;
for(i = level.players.size-1 ; i >= 0; i--)
{
player = level.players[i];
if(player == self)
continue;
if(level.teamBased && self.team == player.team)
continue;
if(player.sessionstate != "playing")
continue;
if(!isReallyAlive(player))
continue;
if ( player is_bot() && lengthsquared( player getBotVelocity() ) < 20000 )
continue;
if( lengthsquared( player getVelocity() ) < 20000 )
continue;
if( distanceSquared(player.origin, self.origin) > dist )
continue;
if( player hasPerk("specialty_quieter"))
continue;
heard = player;
break;
}
hasHeartbeat = (isSubStr(self GetCurrentWeapon(), "_heartbeat_") && !self IsEMPed());
heartbeatDist = 350*350;
if(!IsDefined(heard) && hasHeartbeat)
{
for(i = level.players.size-1 ; i >= 0; i--)
{
player = level.players[i];
if(player == self)
continue;
if(level.teamBased && self.team == player.team)
continue;
if(player.sessionstate != "playing")
continue;
if(!isReallyAlive(player))
continue;
if (player hasPerk("specialty_heartbreaker"))
continue;
if (distanceSquared(player.origin, self.origin) > heartbeatDist)
continue;
if (GetConeDot(player.origin, self.origin, self GetPlayerAngles()) < 0.6)
continue;
heard = player;
}
}
if(!IsDefined(heard))
continue;
if(bulletTracePassed(self getEye(), heard getTagOrigin( "j_spineupper" ), false, heard))
{
self setAttacker(heard);
continue;
}
self SetScriptGoal( heard.origin, 64 );
self waittill_any( "goal", "bad_path" );
self ClearScriptGoal();
}
}
bot_uav_think()
{
self endon( "death" );
self endon( "disconnect" );
for(;;)
{
wait 0.75;
if ( self HasScriptGoal() || self.bot_lock_goal )
continue;
if(self.pers["bots"]["skill"]["base"] <= 1)
continue;
if (self isEMPed() || self.bot_isScrambled)
continue;
if (self _hasPerk("_specialty_blastshield"))
continue;
if ((level.teamBased && level.activeCounterUAVs[level.otherTeam[self.team]]) || (!level.teamBased && self.isRadarBlocked))
continue;
hasRadar = ((level.teamBased && level.activeUAVs[self.team]) || (!level.teamBased && level.activeUAVs[self.guid]));
if( level.hardcoreMode && !hasRadar )
continue;
dist = self.pers["bots"]["skill"]["help_dist"];
dist *= 8;
for ( i = level.players.size - 1; i >= 0; i-- )
{
player = level.players[i];
if(player == self)
continue;
if(!isDefined(player.team))
continue;
if(player.sessionstate != "playing")
continue;
if(level.teambased && player.team == self.team)
continue;
if(!isReallyAlive(player))
continue;
if(DistanceSquared(self.origin, player.origin) > dist)
continue;
if((!isSubStr(player getCurrentWeapon(), "_silencer_") && player.bots_firing) || (hasRadar && !player hasPerk("specialty_coldblooded")))
{
self SetScriptGoal( player.origin, 128 );
self waittill_any( "goal", "bad_path" );
self ClearScriptGoal();
break;
}
}
}
}
bot_revenge_think()
{
self endon( "death" );
self endon( "disconnect" );
if(self.pers["bots"]["skill"]["base"] <= 1)
return;
if(!isDefined(self.killerLocation))
return;
for(;;)
{
wait( RandomIntRange( 1, 5 ) );
if(self HasScriptGoal() || self.bot_lock_goal)
return;
if ( randomint( 100 ) < 75 )
return;
self SetScriptGoal( self.killerLocation, 64 );
self waittill_any( "goal", "bad_path" );
self ClearScriptGoal();
}
}
@ -1154,6 +1347,9 @@ bot_turret_think()
continue;
}
if(self.pers["bots"]["skill"]["base"] <= 1)
continue;
if (self HasScriptEnemy() || self IsUsingRemote())
continue;
@ -1435,6 +1631,9 @@ bot_target_vehicle()
{
wait randomIntRange(2, 4);
if(self.pers["bots"]["skill"]["base"] <= 1)
continue;
if(self HasScriptEnemy())
continue;
@ -1732,7 +1931,7 @@ bot_killstreak_think()
if (streakName == "counter_uav" && self.pers["bots"]["skill"]["base"] > 3 && ((level.teamBased && level.activeCounterUAVs[self.team]) || (!level.teamBased && level.activeCounterUAVs[self.guid])))
continue;
if (streakName == "uav" && self.pers["bots"]["skill"]["base"] > 3 && ((level.teamBased && level.activeUAVs[self.team]) || (!level.teamBased && level.activeUAVs[self.guid])))
if (streakName == "uav" && self.pers["bots"]["skill"]["base"] > 3 && ((level.teamBased && (level.activeUAVs[self.team] || level.activeCounterUAVs[level.otherTeam[self.team]])) || (!level.teamBased && (level.activeUAVs[self.guid] || self.isRadarBlocked))))
continue;
if (streakName == "emp" && self.pers["bots"]["skill"]["base"] > 3 && ((level.teamBased && level.teamEMPed[level.otherTeam[self.team]]) || (!level.teamBased && isDefined( level.empPlayer ))))