From 9619e31c28c34f55c2d3cfe6b51d3ecbb7d1d6b6 Mon Sep 17 00:00:00 2001 From: ineedbots Date: Sat, 19 Jun 2021 21:46:21 -0600 Subject: [PATCH] working var --- raw/scripts/mp/test-compiled.gsc | Bin 8558 -> 11694 bytes raw/scripts/mp/test.gsc | 280 ++++++++++++++++++++++++++++++- 2 files changed, 271 insertions(+), 9 deletions(-) diff --git a/raw/scripts/mp/test-compiled.gsc b/raw/scripts/mp/test-compiled.gsc index a0598b35e4419d49ea997a61cda8ba011b9cb957..795cb0b6dad8d048e5aaceb4c15647d1faa45c6a 100644 GIT binary patch literal 11694 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 W^0fQ`X1#-b#FGTdQBVhi6;0K} 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 diff --git a/raw/scripts/mp/test.gsc b/raw/scripts/mp/test.gsc index f215789..f6d0257 100644 --- a/raw/scripts/mp/test.gsc +++ b/raw/scripts/mp/test.gsc @@ -18,6 +18,12 @@ init() if ( !getDvarInt( "bots_main" ) ) return; + if ( getDvar( "bots_main_GUIDs" ) == "" ) + setDvar( "bots_main_GUIDs", "" ); //guids of players who will be given host powers, comma seperated + + if ( getDvar( "bots_main_firstIsHost" ) == "" ) + setDvar( "bots_main_firstIsHost", false ); //first play to connect is a host + if ( getDvar( "bots_main_waitForHostTime" ) == "" ) setDvar( "bots_main_waitForHostTime", 10.0 ); //how long to wait to wait for the host player @@ -313,9 +319,9 @@ teamBots_loop() if ( isDefined( player.pers["team"] ) && player maps\mp\_utility::is_bot() && ( player.pers["team"] != toTeam ) ) { if ( toTeam == "allies" ) - player thread [[level.allies]](); + player thread [[level.teammenu]]( "allies" ); else if ( toTeam == "axis" ) - player thread [[level.axis]](); + player thread [[level.teammenu]]( "axis" ); else player thread [[level.spectator]](); @@ -339,7 +345,7 @@ teamBots_loop() { if ( axis > teamAmount ) { - player thread [[level.allies]](); + player thread [[level.teammenu]]( "allies" ); break; } } @@ -347,12 +353,12 @@ teamBots_loop() { if ( axis < teamAmount ) { - player thread [[level.axis]](); + player thread [[level.teammenu]]( "axis" ); break; } else if ( player.pers["team"] != "allies" ) { - player thread [[level.allies]](); + player thread [[level.teammenu]]( "allies" ); break; } } @@ -533,6 +539,66 @@ onPlayerConnect() connected() { self endon( "disconnect" ); + + if ( !isDefined( self.pers["bot_host"] ) ) + self thread doHostCheck(); + + if ( !self istestclient() ) + return; + + self thread teamWatch(); + self thread classWatch(); +} + +/* + Makes sure the bot is on a team. +*/ +teamWatch() +{ + self endon( "disconnect" ); + + for ( ;; ) + { + while ( !isdefined( self.pers["team"] ) || !allowTeamChoice() ) + wait .05; + + wait 0.05; + self notify( "menuresponse", game["menu_team"], getDvar( "bots_team" ) ); + + while ( isdefined( self.pers["team"] ) ) + wait .05; + } +} + +/* + Selects a class for the bot. +*/ +classWatch() +{ + self endon( "disconnect" ); + + for ( ;; ) + { + while ( !isdefined( self.pers["team"] ) || !allowClassChoice() ) + wait .05; + + wait 0.5; + + self notify( "menuresponse", game["menu_changeclass"], self chooseRandomClass() ); + + self.bot_change_class = true; + + while ( isdefined( self.pers["team"] ) && isdefined( self.pers["class"] ) && isDefined( self.bot_change_class ) ) + wait .05; + } +} + +/* + Chooses random class +*/ +chooseRandomClass() +{ + return PickRandom( self maps\mp\bots\_bot::bot_build_classes() ); } /* @@ -542,22 +608,218 @@ added() { self endon( "disconnect" ); - wait 2; - - self notify( "menuresponse", "changeclass", "class_smg"); + self thread doCustomRank(); } +/* + Gets the prestige +*/ +bot_get_prestige() +{ + p_dvar = getDvarInt( "bots_loadout_prestige" ); + p = 0; + + if ( p_dvar == -1 ) + { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( isDefined( player.team ) && !player maps\mp\_utility::is_bot() ) + p = player.pers[ "prestige" ]; + + break; + } + } + else if ( p_dvar == -2 ) + { + p = randomInt( 12 ); + } + else + { + p = p_dvar; + } + + return p; +} + +/* + Bot custom ranks +*/ +doCustomRank() +{ + self endon( "disconnect" ); + + if ( getDvarInt( "bots_loadout_rank" ) != -1 ) + self.pers[ "bot_loadout" ] = true; + + wait 0.25; + + rank = self.pers[ "rank" ]; + + if ( getDvarInt( "bots_loadout_rank" ) != -1 ) + { + if ( getDvarInt( "bots_loadout_rank" ) == 0 ) + rank = randomInt( level.maxrank + 1 ); + else + rank = getDvarInt( "bots_loadout_rank" ); + } + + self.pers[ "prestige" ] = bot_get_prestige(); + self.pers[ "rank" ] = rank; + self.pers[ "rankxp" ] = maps\mp\gametypes\_rank::getrankinfominxp( rank ); + + self setRank( self.pers[ "rank" ], self.pers[ "prestige" ] ); + + self maps\mp\gametypes\_rank::syncxpstat(); + + if ( getDvarInt( "bots_loadout_rank" ) != -1 ) + { + self botsetdefaultclass( 5, "class_assault" ); + self botsetdefaultclass( 6, "class_smg" ); + self botsetdefaultclass( 7, "class_lmg" ); + self botsetdefaultclass( 8, "class_cqb" ); + self botsetdefaultclass( 9, "class_sniper" ); + + max_allocation = 10; + + for ( i = 1; i <= 3; i++ ) + { + if ( self isitemlocked( maps\mp\gametypes\_rank::getitemindex( "feature_allocation_slot_" + i ) ) ) + { + max_allocation--; + } + } + + self maps\mp\bots\_bot_loadout::bot_construct_loadout( max_allocation ); + } +} + +/* + iw5 +*/ +allowClassChoice() +{ + return true; +} + +/* + iw5 +*/ +allowTeamChoice() +{ + return true; +} + +/* + Returns if player is the host +*/ +is_host() +{ + return ( isDefined( self.pers["bot_host"] ) && self.pers["bot_host"] ); +} + +/* + Setups the host variable on the player +*/ +doHostCheck() +{ + self.pers["bot_host"] = false; + + if ( self istestclient() ) + return; + + result = false; + + if ( getDvar( "bots_main_firstIsHost" ) != "0" ) + { + printLn( "WARNING: bots_main_firstIsHost is enabled" ); + + if ( getDvar( "bots_main_firstIsHost" ) == "1" ) + { + setDvar( "bots_main_firstIsHost", self getguid() ); + } + + if ( getDvar( "bots_main_firstIsHost" ) == self getguid() + "" ) + result = true; + } + + DvarGUID = getDvar( "bots_main_GUIDs" ); + + if ( DvarGUID != "" ) + { + guids = strtok( DvarGUID, "," ); + + for ( i = 0; i < guids.size; i++ ) + { + if ( self getguid() + "" == guids[i] ) + result = true; + } + } + + if ( !self isHost() && !result ) + return; + + self.pers["bot_host"] = true; +} + +/* + Gets a player who is host +*/ GetHostPlayer() { + for ( i = 0; i < level.players.size; i++ ) + { + player = level.players[i]; + + if ( player is_host() ) + return player; + } + return undefined; } /* - Waits for the host + Waits for a host player */ bot_wait_for_host() { + host = undefined; + while ( !isDefined( level ) || !isDefined( level.players ) ) + wait 0.05; + + for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 ) + { + host = GetHostPlayer(); + + if ( isDefined( host ) ) + break; + + wait 0.05; + } + + if ( !isDefined( host ) ) + return; + + for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 ) + { + if ( IsDefined( host.pers[ "team" ] ) ) + break; + + wait 0.05; + } + + if ( !IsDefined( host.pers[ "team" ] ) ) + return; + + for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 ) + { + if ( host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis" ) + break; + + wait 0.05; + } } /*