diff --git a/maps/mp/bots/_bot.gsc b/maps/mp/bots/_bot.gsc index 0a73e5e..0cc1ba3 100644 --- a/maps/mp/bots/_bot.gsc +++ b/maps/mp/bots/_bot.gsc @@ -279,6 +279,8 @@ init() level thread watchGameEnded(); level thread onPlayerChat(); + array_thread( getentarray( "misc_turret", "classname" ), ::turret_monitoruse_watcher ); + level.teambased = true; if ( getcvar( "g_gametype" ) == "dm" ) @@ -1297,3 +1299,46 @@ onPlayerChat() } } } + +/* + Monitors turret usage +*/ +turret_monitoruse_watcher() +{ + self endon( "death" ); + + for ( ;; ) + { + self waittill ( "trigger", player ); + + self monitor_player_turret( player ); + self.owner = undefined; + + if ( isdefined( player ) ) + { + player.turret = undefined; + } + } +} + +/* + While player uses turret +*/ +monitor_player_turret( player ) +{ + player endon( "death" ); + player endon( "disconnect" ); + + player.turret = self; + self.owner = player; + + while ( isdefined( player ) && player usebuttonpressed() ) + { + wait 0.05; + } + + while ( isdefined( player ) && !player usebuttonpressed() ) + { + wait 0.05; + } +} diff --git a/maps/mp/bots/_bot_internal.gsc b/maps/mp/bots/_bot_internal.gsc index 3ec47c7..f7406c4 100644 --- a/maps/mp/bots/_bot_internal.gsc +++ b/maps/mp/bots/_bot_internal.gsc @@ -328,6 +328,13 @@ watchPickupGun() continue; } + // todo have bots use turrets instead of just kicking them off of it + if ( isdefined( self.turret ) ) + { + self thread use( 0.5 ); + continue; + } + weap = self getcurrentweapon(); if ( weap != "none" && self getAmmoCount( weap ) ) diff --git a/maps/mp/bots/_bot_utility.gsc b/maps/mp/bots/_bot_utility.gsc index c73ada2..5f03334 100644 --- a/maps/mp/bots/_bot_utility.gsc +++ b/maps/mp/bots/_bot_utility.gsc @@ -2773,3 +2773,45 @@ Log( x ) answer = 2.0 * sum; return answer; } + +/* + CoD2 +*/ +array_thread ( ents, process, var, excluders ) +{ + exclude = []; + + for ( i = 0; i < ents.size; i++ ) + { + exclude[ i ] = false; + } + + if ( isdefined ( excluders ) ) + { + for ( i = 0; i < ents.size; i++ ) + { + for ( p = 0; p < excluders.size; p++ ) + { + if ( ents[ i ] == excluders[p] ) + { + exclude[ i ] = true; + } + } + } + } + + for ( i = 0; i < ents.size; i++ ) + { + if ( !exclude[ i ] ) + { + if ( isdefined ( var ) ) + { + ents[ i ] thread [[ process ]]( var ); + } + else + { + ents[ i ] thread [[ process ]](); + } + } + } +}