From 2f0b2e425f4e9f0ccf1df3d953e6a98f7722cf97 Mon Sep 17 00:00:00 2001 From: ineed bots Date: Wed, 31 May 2023 19:40:30 -0600 Subject: [PATCH] prep for future bot override builtins --- .vscode/settings.json | 2 +- raw/bots.txt | 26 + raw/bots/bots.json | 30 - raw/maps/mp/teams/_teams-src.gsc | 577 ------------------ raw/maps/mp/teams/_teams.gsc | Bin 8036 -> 11707 bytes raw/scripts/mp/botwarfare-compiled.gsc | Bin 21342 -> 0 bytes raw/scripts/mp/botwarfare.gsc | 65 +- .../mp/max_allocation_fix_source-compiled.gsc | Bin 860 -> 0 bytes raw/scripts/mp/spectatorKick-compiled.gsc | Bin 596 -> 0 bytes 9 files changed, 86 insertions(+), 614 deletions(-) create mode 100644 raw/bots.txt delete mode 100644 raw/bots/bots.json delete mode 100644 raw/maps/mp/teams/_teams-src.gsc delete mode 100644 raw/scripts/mp/botwarfare-compiled.gsc delete mode 100644 raw/scripts/mp/max_allocation_fix_source-compiled.gsc delete mode 100644 raw/scripts/mp/spectatorKick-compiled.gsc diff --git a/.vscode/settings.json b/.vscode/settings.json index b51b8ea..5fae49b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,7 +12,7 @@ "vscode-codscript.use_builtin_completionItems": false, "triggerTaskOnSave.tasks": { - "Compile current GSC File": ["*.gsc"] + "Compile current GSC File no": ["*.gsc"] }, "Lua.diagnostics.globals": [ "InheritFrom", diff --git a/raw/bots.txt b/raw/bots.txt new file mode 100644 index 0000000..bacce26 --- /dev/null +++ b/raw/bots.txt @@ -0,0 +1,26 @@ +bota +botb +botc +botd +bote +botf +botg +both +boti +botj +botk +botl +botm +botn +boto +botp +botq +botr +bots +bott +botu +botv +botw +botx +boty +botz \ No newline at end of file diff --git a/raw/bots/bots.json b/raw/bots/bots.json deleted file mode 100644 index 1ba2299..0000000 --- a/raw/bots/bots.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "names": { - "bota": "", - "botb": "", - "botc": "", - "botd": "", - "bote": "", - "botf": "", - "botg": "", - "both": "", - "boti": "", - "botj": "", - "botk": "", - "botl": "", - "botm": "", - "botn": "", - "boto": "", - "botp": "", - "botq": "", - "botr": "", - "bots": "", - "bott": "", - "botu": "", - "botv": "", - "botw": "", - "botx": "", - "boty": "", - "botz": "" - } -} diff --git a/raw/maps/mp/teams/_teams-src.gsc b/raw/maps/mp/teams/_teams-src.gsc deleted file mode 100644 index 143d7d7..0000000 --- a/raw/maps/mp/teams/_teams-src.gsc +++ /dev/null @@ -1,577 +0,0 @@ -#include maps\mp\gametypes\_spectating; -#include maps\mp\gametypes\_globallogic_ui; -#include maps\mp\gametypes\_persistence; -#include maps\mp\_utility; - -init() -{ - precacheshader( "mpflag_spectator" ); - game["strings"]["autobalance"] = &"MP_AUTOBALANCE_NOW"; - precachestring( &"MP_AUTOBALANCE_NOW" ); - - if ( GetDvar( "scr_teambalance" ) == "" ) - { - setdvar( "scr_teambalance", "0" ); - } - - level.teambalance = GetDvarInt( "scr_teambalance" ); - level.teambalancetimer = 0; - - if ( GetDvar( "scr_timeplayedcap" ) == "" ) - { - setdvar( "scr_timeplayedcap", "1800" ); - } - - level.timeplayedcap = int( GetDvarInt( "scr_timeplayedcap" ) ); - level.freeplayers = []; - - if ( level.teambased ) - { - level.alliesplayers = []; - level.axisplayers = []; - level thread onplayerconnect(); - level thread updateTeamBalance(); - wait( 0.15 ); - level thread updateplayertimes(); - } - else - { - level thread onfreeplayerconnect(); - wait( 0.15 ); - level thread updateplayertimes(); - } -} - - -onplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onjoinedteam(); - player thread onjoinedspectators(); - player thread trackplayedtime(); - } -} - - -onfreeplayerconnect() -{ - for ( ;; ) - { - level waittill( "connecting", player ); - player thread trackfreeplayedtime(); - } -} - - -onjoinedteam() -{ - self endon( "disconnect" ); - - for ( ;; ) - { - self waittill( "joined_team" ); - self logstring( "joined team: " + self.pers["team"] ); - self updateteamtime(); - } -} - - -onjoinedspectators() -{ - self endon( "disconnect" ); - - for ( ;; ) - { - self waittill( "joined_spectators" ); - self.pers["teamTime"] = undefined; - } -} - -trackplayedtime() -{ - self endon( "disconnect" ); - - foreach ( team in level.teams ) - { - self.timePlayed[team] = 0; - } - - self.timePlayed["free"] = 0; - self.timePlayed["other"] = 0; - self.timePlayed["alive"] = 0; - - - if ( !isdefined( self.timePlayed["total"] ) ) - self.timePlayed["total"] = 0; - else if ( ( level.gameType == "twar" ) && ( 0 < game["roundsplayed"] ) && ( 0 < self.timeplayed["total"] ) ) - self.timePlayed["total"] = 0; - - while ( level.inprematchperiod ) - { - wait( 0.05 ); - } - - for ( ;; ) - { - if ( game["state"] == "playing" ) - { - if ( isdefined( level.teams[self.sessionteam] ) ) - { - self.timeplayed[self.sessionteam]++; - self.timeplayed["total"]++; - - if ( isalive( self ) ) - { - self.timeplayed["alive"]++; - } - } - else if ( self.sessionteam == "spectator" ) - { - self.timeplayed["other"]++; - } - } - - wait ( 1.0 ); - } - -} - -updateplayertimes() -{ - nexttoupdate = 0; - - for ( ;; ) - { - nexttoupdate++; - - if ( nexttoupdate >= level.players.size ) - { - nexttoupdate = 0; - } - - if ( isdefined( level.players[nexttoupdate] ) ) - { - level.players[nexttoupdate] updateplayedtime(); - level.players[nexttoupdate] maps\mp\gametypes\_persistence::checkcontractexpirations(); - } - - wait( 1 ); - } -} - -updateplayedtime() -{ - pixbeginevent( "updatePlayedTime" ); - - foreach ( team in level.teams ) - { - if ( self.timeplayed[team] ) - { - self addplayerstat( "time_played_" + team, int( min( self.timeplayed[team], level.timeplayedcap ) ) ); - self addplayerstatwithgametype( "time_played_total", int( min( self.timeplayed[team], level.timeplayedcap ) ) ); - } - } - - if ( self.timeplayed["other"] ) - { - self addplayerstat( "time_played_other", int( min( self.timeplayed["other"], level.timeplayedcap ) ) ); - self addplayerstatwithgametype( "time_played_total", int( min( self.timeplayed["other"], level.timeplayedcap ) ) ); - } - - if ( self.timeplayed["alive"] ) - { - timealive = int( min( self.timeplayed["alive"], level.timeplayedcap ) ); - self maps\mp\gametypes\_persistence::incrementcontracttimes( timealive ); - self addplayerstat( "time_played_alive", timealive ); - } - - pixendevent(); - - if ( game["state"] == "postgame" ) - { - return; - } - - foreach ( team in level.teams ) - { - self.timeplayed[team] = 0; - } - - self.timeplayed["other"] = 0; - self.timeplayed["alive"] = 0; -} - -updateteamtime() -{ - if ( game["state"] != "playing" ) - { - return; - } - - self.pers["teamTime"] = GetTime(); -} - -updateteambalancedvar() -{ - for ( ;; ) - { - teambalance = GetDvarInt( "scr_teambalance" ); - - if ( level.teambalance != teambalance ) - { - level.teambalance = GetDvarInt( "scr_teambalance" ); - } - - timeplayedcap = GetDvarInt( "scr_timeplayedcap" ); - - if ( level.timeplayedcap != timeplayedcap ) - { - level.timeplayedcap = int( GetDvarInt( "scr_timeplayedcap" ) ); - } - - wait( 1 ); - } -} - -updateTeamBalance() -{ - level thread updateTeamBalanceDvar(); - - wait .15; - - if ( level.teamBalance && isRoundBased() && level.numlives ) - { - if ( isDefined( game["BalanceTeamsNextRound"] ) ) - iPrintLnbold( &"MP_AUTOBALANCE_NEXT_ROUND" ); - - level waittill( "game_ended" ); - wait 1; - - if ( isDefined( game["BalanceTeamsNextRound"] ) ) - { - level balanceTeams(); - game["BalanceTeamsNextRound"] = undefined; - } - else if ( !getTeamBalance() ) - { - game["BalanceTeamsNextRound"] = true; - } - } - else - { - level endon ( "game_ended" ); - - for ( ;; ) - { - if ( level.teamBalance ) - { - if ( !getTeamBalance() ) - { - iPrintLnBold( &"MP_AUTOBALANCE_SECONDS", 15 ); - wait 15.0; - - if ( !getTeamBalance() ) - level balanceTeams(); - } - - wait 59.0; - } - - wait 1.0; - } - } - -} - -getTeamBalance() -{ - level.team["allies"] = 0; - level.team["axis"] = 0; - - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - if ( ( isdefined( players[i].pers["team"] ) ) && ( players[i].pers["team"] == "allies" ) ) - level.team["allies"]++; - else if ( ( isdefined( players[i].pers["team"] ) ) && ( players[i].pers["team"] == "axis" ) ) - level.team["axis"]++; - } - - if ( ( level.team["allies"] > ( level.team["axis"] + level.teamBalance ) ) || ( level.team["axis"] > ( level.team["allies"] + level.teamBalance ) ) ) - return false; - else - return true; -} - -balanceTeams() -{ - iPrintLnBold( game["strings"]["autobalance"] ); - //Create/Clear the team arrays - AlliedPlayers = []; - AxisPlayers = []; - - // Populate the team arrays - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - if ( !isdefined( players[i].pers["teamTime"] ) ) - continue; - - if ( ( isdefined( players[i].pers["team"] ) ) && ( players[i].pers["team"] == "allies" ) ) - AlliedPlayers[AlliedPlayers.size] = players[i]; - else if ( ( isdefined( players[i].pers["team"] ) ) && ( players[i].pers["team"] == "axis" ) ) - AxisPlayers[AxisPlayers.size] = players[i]; - } - - MostRecent = undefined; - - while ( ( AlliedPlayers.size > ( AxisPlayers.size + 1 ) ) || ( AxisPlayers.size > ( AlliedPlayers.size + 1 ) ) ) - { - if ( AlliedPlayers.size > ( AxisPlayers.size + 1 ) ) - { - // Move the player that's been on the team the shortest ammount of time (highest teamTime value) - // Ignore players capturing or carrying objects - for ( j = 0; j < AlliedPlayers.size; j++ ) - { - - if ( !isdefined( MostRecent ) ) - MostRecent = AlliedPlayers[j]; - else if ( AlliedPlayers[j].pers["teamTime"] > MostRecent.pers["teamTime"] ) - MostRecent = AlliedPlayers[j]; - } - - if ( isdefined( MostRecent ) ) - MostRecent changeTeam( "axis" ); - else - { - // Move the player that's been on the team the shortest ammount of time - for ( j = 0; j < AlliedPlayers.size; j++ ) - { - if ( !isdefined( MostRecent ) ) - MostRecent = AlliedPlayers[j]; - else if ( AlliedPlayers[j].pers["teamTime"] > MostRecent.pers["teamTime"] ) - MostRecent = AlliedPlayers[j]; - } - - MostRecent changeTeam( "axis" ); - } - } - else if ( AxisPlayers.size > ( AlliedPlayers.size + 1 ) ) - { - // Move the player that's been on the team the shortest ammount of time (highest teamTime value) - // Ignore players capturing or carrying objects - for ( j = 0; j < AxisPlayers.size; j++ ) - { - - if ( !isdefined( MostRecent ) ) - MostRecent = AxisPlayers[j]; - else if ( AxisPlayers[j].pers["teamTime"] > MostRecent.pers["teamTime"] ) - MostRecent = AxisPlayers[j]; - } - - if ( isdefined( MostRecent ) ) - MostRecent changeTeam( "allies" ); - else - { - // Move the player that's been on the team the shortest ammount of time - for ( j = 0; j < AxisPlayers.size; j++ ) - { - if ( !isdefined( MostRecent ) ) - MostRecent = AxisPlayers[j]; - else if ( AxisPlayers[j].pers["teamTime"] > MostRecent.pers["teamTime"] ) - MostRecent = AxisPlayers[j]; - } - - MostRecent changeTeam( "allies" ); - } - } - - MostRecent = undefined; - AlliedPlayers = []; - AxisPlayers = []; - - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - if ( ( isdefined( players[i].pers["team"] ) ) && ( players[i].pers["team"] == "allies" ) ) - AlliedPlayers[AlliedPlayers.size] = players[i]; - else if ( ( isdefined( players[i].pers["team"] ) ) && ( players[i].pers["team"] == "axis" ) ) - AxisPlayers[AxisPlayers.size] = players[i]; - } - } -} - -changeTeam( team ) -{ - teams[0] = "allies"; - teams[1] = "axis"; - assignment = team; - - if ( assignment != self.pers["team"] ) - { - if ( self.sessionstate == "playing" || self.sessionstate == "dead" ) - { - self.switching_teams = true; - self.joining_team = assignment; - self.leaving_team = self.pers["team"]; - self suicide(); - } - } - - self.pers["team"] = assignment; - self.team = assignment; - self.pers["class"] = undefined; - self.class = undefined; - self.pers["weapon"] = undefined; - self.pers["savedmodel"] = undefined; - - self maps\mp\gametypes\_globallogic_ui::updateObjectiveText(); - self maps\mp\gametypes\_spectating::setspectatepermissions(); - - if ( level.teamBased ) - self.sessionteam = assignment; - else - { - self.sessionteam = "none"; - self.ffateam = assignment; - } - - if ( !isAlive( self ) ) - self.statusicon = "hud_status_dead"; - - - self notify( "joined_team" ); - level notify( "joined_team" ); - self setclientscriptmainmenu( game["menu_class"] ); - self openmenu( game["menu_class"] ); - self notify( "end_respawn" ); -} - -countplayers() -{ - players = level.players; - playercounts = []; - - foreach ( team in level.teams ) - { - playercounts[team] = 0; - } - - foreach ( player in level.players ) - { - if ( player == self ) - { - continue; - } - - team = player.pers["team"]; - - if ( isdefined( team ) && isdefined( level.teams[team] ) ) - { - playercounts[team]++; - } - } - - return playercounts; -} - -trackfreeplayedtime() -{ - self endon( "disconnect" ); - - foreach ( team in level.teams ) - { - self.timeplayed[team] = 0; - } - - self.timeplayed["other"] = 0; - self.timeplayed["total"] = 0; - self.timeplayed["alive"] = 0; - - while ( game["state"] == "playing" ) - { - team = self.pers["team"]; - - if ( isdefined( team ) && isdefined( level.teams[team] ) && self.sessionteam != "spectator" ) - { - self.timeplayed[team]++; - self.timeplayed["total"]++; - - if ( isalive( self ) ) - { - self.timeplayed["alive"]++; - } - } - else - { - self.timeplayed["other"]++; - } - - wait( 1 ); - } -} - -set_player_model( team, weapon ) -{ - weaponclass = getweaponclass( weapon ); - bodytype = "default"; - - switch ( weaponclass ) - { - case "weapon_sniper": - bodytype = "rifle"; - break; - - case "weapon_cqb": - bodytype = "spread"; - break; - - case "weapon_lmg": - bodytype = "mg"; - break; - - case "weapon_smg": - bodytype = "smg"; - break; - } - - self detachall(); - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); - - if ( level.multiteam ) - { - bodytype = "default"; - - switch ( team ) - { - case "team7": - case "team8": - team = "allies"; - break; - } - } - - self [[ game[ "set_player_model" ][ team ][ bodytype ] ]](); -} - -getteamflagmodel( teamref ) -{ - return game["flagmodels"][teamref]; -} - -getteamflagcarrymodel( teamref ) -{ - return game["carry_flagmodels"][teamref]; -} - -getteamflagicon( teamref ) -{ - return game["carry_icon"][teamref]; -} diff --git a/raw/maps/mp/teams/_teams.gsc b/raw/maps/mp/teams/_teams.gsc index 23f75664e6f22f1fde8f9fe31e3bffcf58f4492e..143d7d74bc5e043e6fe44961cc11bbacc23c0d26 100644 GIT binary patch literal 11707 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 SLP&?YL`|40K}AqKuKowDf<5{G literal 8036 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 diff --git a/raw/scripts/mp/botwarfare-compiled.gsc b/raw/scripts/mp/botwarfare-compiled.gsc deleted file mode 100644 index 244aca2e91db421f4b04570d7e4bf0b590201254..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21342 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 a(2LL?K}#9StI+G9hoOg|A7J}!=>Gxj#IgGT diff --git a/raw/scripts/mp/botwarfare.gsc b/raw/scripts/mp/botwarfare.gsc index 5657bf5..d0b0c3f 100644 --- a/raw/scripts/mp/botwarfare.gsc +++ b/raw/scripts/mp/botwarfare.gsc @@ -602,6 +602,50 @@ connected() self thread onBotSpawned(); self thread setRanks(); + + self thread watchBotDebugEvent(); +} + +/* + DEBUG +*/ +watchBotDebugEvent() +{ + self endon( "disconnect" ); + + for ( ;; ) + { + self waittill( "bot_event", msg, str, b, c, d, e, f, g ); + + if ( GetDvarInt( "bots_main_debug" ) >= 2 ) + { + big_str = "Bot Warfare debug: " + self.name + ": " + msg + ": " + str; + + if ( isDefined( b ) && isString( b ) ) + big_str += ": " + b; + + if ( isDefined( c ) && isString( c ) ) + big_str += ": " + c; + + if ( isDefined( d ) && isString( d ) ) + big_str += ": " + d; + + if ( isDefined( e ) && isString( e ) ) + big_str += ": " + e; + + if ( isDefined( f ) && isString( f ) ) + big_str += ": " + f; + + if ( isDefined( g ) && isString( g ) ) + big_str += ": " + g; + + Print( big_str ); + } + else if ( msg == "debug" && GetDvarInt( "bots_main_debug" ) ) + { + Print( "Bot Warfare debug: " + self.name + ": " + str ); + } + } } /* @@ -616,6 +660,7 @@ onBotSpawned() self waittill( "spawned_player" ); self thread watch_for_override_stuff(); + self BotNotifyBotEvent( "debug", "we spawned!" ); waittillframeend; @@ -640,7 +685,7 @@ botMovementOverride( a, b ) {} botClearMovementOverride() {} botClearButtonOverride( a ) {} botButtonOverride( a, b ) {} -botClearOverrides() {} +botClearOverrides( a ) {} /* custom movement stuff @@ -650,7 +695,7 @@ watch_for_override_stuff() self endon( "disconnect" ); self endon( "death" ); - self botClearOverrides(); + self botClearOverrides( true ); NEAR_DIST = 80; LONG_DIST = 1000; @@ -690,12 +735,12 @@ watch_for_override_stuff() // drop shot self botMovementOverride( 0, 0 ); - self botButtonOverride( "stance", "prone" ); + self botButtonOverride( "prone", "enable" ); wait 1.5; self botClearMovementOverride(); - self botClearButtonOverride( "stance" ); + self botClearButtonOverride( "prone" ); } } else @@ -703,9 +748,9 @@ watch_for_override_stuff() last_jump_time = time; // jump shot - self botButtonOverride( "jump", true ); + self botButtonOverride( "gostand", "enable" ); wait 0.1; - self botClearButtonOverride( "jump" ); + self botClearButtonOverride( "gostand" ); } } @@ -920,6 +965,14 @@ allowTeamChoice() return true; } +/* + Notify the bot chat message +*/ +BotNotifyBotEvent( msg, a, b, c, d, e, f, g ) +{ + self notify( "bot_event", msg, a, b, c, d, e, f, g ); +} + /* Returns if player is the host */ diff --git a/raw/scripts/mp/max_allocation_fix_source-compiled.gsc b/raw/scripts/mp/max_allocation_fix_source-compiled.gsc deleted file mode 100644 index 834441b6019fe9832c66b1750bcb2cdb2f1a4e91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 860 zcmZ8fK~EDw7=5#?#%$6+Ocd%tCZe<)O0*$Ov<4)S2p40bR3j#vWjoNZ+ugFe)gl+e z*{FA~oQx3C&*>LMJ z2}8Pr6{!=|ilq)@(oi~*o;lwbn%ZlcZ8$(DD?ILkiZD{@ABV%YR>6Q+MOIW%gpFnN z&z;AGQXUtntuZcFb6`4dUhoS>W%A>1U?8)BO>EP#j=sB@f>q30S$n4XlD$@+@oq5+ zqBtb6!>(PFSlwgI#y)b=7B&V&UffJq0Yz>xhGBm5N?zn7Y%yD%VDG3HlK=b5sp}t4 z$xH|4=^rE3%p4S~smTVr*zDLfVF}qEEmSk9%Tv)%DmzmEqC(T|ZuccgA)8xIi3L(0bm)WyM z++hBOxJi6V+$O#wu2X+c+<_%N5l?f%F8BFNeujLX`d4yWSmK94)&_;ZPx4XXN#g+X1buF|LeI1R*7A9jO?HRI&} zy*LSUz1jI3oXRMMZc43=BoxMxRM8CLxD%X&@({^ZQ`9zX8&b*%r_#Hl31_e+fx;nPe5Thb8i032O{oo2L+C4CTwAq6I<3JeJ}B_r M9dhqJwMDw*8KsbQGynhq