diff --git a/raw/maps/mp/bots/_bot.gsc b/raw/maps/mp/bots/_bot.gsc index 43a96fa..8078127 100644 --- a/raw/maps/mp/bots/_bot.gsc +++ b/raw/maps/mp/bots/_bot.gsc @@ -394,23 +394,6 @@ auditModels() } } -/* - Does our flag have a radar? -*/ -flag_has_radar() -{ - if ( !isDefined( level.gameFlag ) || !isDefined( level.gameFlag.currentCarrier ) ) - return false; - - if ( level.gameFlag.currentCarrier != self ) - return false; - - if ( !isDefined( level.gameFlag.portable_radar ) ) - return false; - - return true; -} - /* Loop */ @@ -457,7 +440,7 @@ watchRadar_loop() for ( i = level.players.size - 1; i >= 0; i-- ) { - if ( !isDefined( level.players[i].personalRadar ) && !level.players[i] flag_has_radar() ) + if ( !isDefined( level.players[i].personalRadar ) ) continue; if ( !isReallyAlive( level.players[i] ) ) @@ -485,6 +468,28 @@ watchRadar_loop() player.bot_isInRadar = true; } } + + if ( isDefined( level.gameFlag ) && isDefined( level.gameFlag.carrier ) && isDefined( level.gameFlag.portable_radar ) ) + { + for ( h = level.players.size - 1; h >= 0; h-- ) + { + player = level.players[h]; + + if ( !isReallyAlive( player ) ) + continue; + + if ( level.teamBased && level.gameFlag.carrier.team != player.team ) + continue; + + if ( player _hasPerk( "specialty_coldblooded" ) ) + continue; + + if ( DistanceSquared( player.origin, level.gameFlag.carrier.origin ) > 256 * 256 ) + continue; + + player.bot_isInRadar = true; + } + } } /* diff --git a/raw/maps/mp/bots/_bot_script.gsc b/raw/maps/mp/bots/_bot_script.gsc index bd3de56..99a59d3 100644 --- a/raw/maps/mp/bots/_bot_script.gsc +++ b/raw/maps/mp/bots/_bot_script.gsc @@ -1781,6 +1781,7 @@ start_bot_threads() self thread bot_conf(); self thread bot_grnd(); + self thread bot_tdef(); } } @@ -2830,6 +2831,8 @@ bot_watch_riot_weapons_loop() dist = DistanceSquared( threat.origin, self.origin ); curWeap = self GetCurrentWeapon(); + self BotCrouch(); + if ( randomInt( 2 ) ) { nade = self getValidGrenade(); @@ -7818,3 +7821,72 @@ bot_grnd() self bot_grnd_loop(); } } + +/* + Loop +*/ +bot_tdef_loop() +{ + if ( isDefined( level.gameFlag.carrier ) ) + { + if ( level.gameFlag maps\mp\gametypes\_gameobjects::getOwnerTeam() == level.otherTeam[self.team] ) + { + // go kill + self SetScriptGoal( level.gameFlag.carrier.origin, 64 ); + self thread bot_escort_obj( level.gameFlag, level.gameFlag.carrier ); + + if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + self ClearScriptGoal(); + } + else if ( level.gameFlag.carrier != self ) + { + // go protect + if ( self HasScriptGoal() ) + return; + + if ( DistanceSquared( level.gameFlag.carrier.origin, self.origin ) <= 1024 * 1024 ) + return; + + self SetScriptGoal( level.gameFlag.carrier.origin, 256 ); + self thread bot_escort_obj( level.gameFlag, level.gameFlag.carrier ); + + if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + self ClearScriptGoal(); + } + + return; + } + + //go get it + self bot_cap_get_flag( level.gameFlag ); +} + +/* + Bots play groundzone +*/ +bot_tdef() +{ + self endon( "death" ); + self endon( "disconnect" ); + level endon( "game_ended" ); + + if ( level.gametype != "tdef" ) + return; + + for ( ;; ) + { + wait( randomintrange( 1, 3 ) ); + + if ( self IsUsingRemote() || self.bot_lock_goal ) + { + continue; + } + + if ( !isdefined( level.gameFlag ) ) + { + continue; + } + + self bot_tdef_loop(); + } +} diff --git a/raw/maps/mp/bots/_bot_utility.gsc b/raw/maps/mp/bots/_bot_utility.gsc index d91468e..5d6d069 100644 --- a/raw/maps/mp/bots/_bot_utility.gsc +++ b/raw/maps/mp/bots/_bot_utility.gsc @@ -120,6 +120,14 @@ BotPressAttack( time ) self maps\mp\bots\_bot_internal::pressFire( time ); } +/* + Bot will crouch +*/ +BotCrouch() +{ + self maps\mp\bots\_bot_internal::crouch(); +} + /* Returns a random number thats different everytime it changes target */