From: fgsfds Date: Mon, 2 May 2022 14:05:08 +0000 (+0300) Subject: game: add g_max_bots X-Git-Url: http://deadsoftware.ru/gitweb?a=commitdiff_plain;h=51998d817120cd3833df7bae3d355642fd4abde5;p=d2df-sdl.git game: add g_max_bots --- diff --git a/src/game/g_console.pas b/src/game/g_console.pas index 7ae8166..64b0864 100644 --- a/src/game/g_console.pas +++ b/src/game/g_console.pas @@ -1084,6 +1084,7 @@ begin AddCommand('g_throw_flag', GameCVars); AddCommand('g_bot_vsmonsters', GameCVars); AddCommand('g_bot_vsplayers', GameCVars); + AddCommand('g_max_bots', GameCVars); // intentionally not whitelisted AddCommand('g_scorelimit', GameCVars); AddCommand('g_timelimit', GameCVars); AddCommand('g_maxlives', GameCVars); diff --git a/src/game/g_game.pas b/src/game/g_game.pas index d1246ba..5822952 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -350,6 +350,7 @@ var gWeaponAction: Array [0..1, WP_FACT..WP_LACT] of Boolean; // [player, weapon_action] gSelectWeapon: Array [0..1, WP_FIRST..WP_LAST] of Boolean; // [player, weapon] gInterReadyCount: Integer = 0; + gMaxBots: Integer = 127; g_dbg_ignore_bounds: Boolean = false; r_smallmap_h: Integer = 0; // 0: left; 1: center; 2: right @@ -5807,6 +5808,12 @@ begin (gsTimeLimit div 60) mod 60, gsTimeLimit mod 60])); end + else if cmd = 'g_max_bots' then + begin + if Length(P) > 1 then + gMaxBots := nclamp(StrToIntDef(P[1], gMaxBots), 0, 127); + g_Console_Add('g_max_bots = ' + IntToStr(gMaxBots)); + end else if cmd = 'g_maxlives' then begin if Length(P) > 1 then diff --git a/src/game/g_player.pas b/src/game/g_player.pas index 23be583..19d6be5 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -634,6 +634,7 @@ procedure g_Bot_Add(Team, Difficult: Byte; Handicap: Integer = 100); procedure g_Bot_AddList(Team: Byte; lname: ShortString; num: Integer = -1; Handicap: Integer = 100); procedure g_Bot_MixNames(); procedure g_Bot_RemoveAll(); +function g_Bot_GetCount(): Integer; implementation @@ -944,6 +945,9 @@ var begin if not g_Game_IsServer then Exit; +// Íå äîáàâëÿåì áîòîâ åñëè ëèìèò óæå äîñòèãíóò + if (g_Bot_GetCount() >= gMaxBots) then Exit; + // Ñïèñîê íàçâàíèé ìîäåëåé: m := g_PlayerModel_GetNames(); if m = nil then @@ -1041,6 +1045,9 @@ var begin if not g_Game_IsServer then Exit; +// Íå äîáàâëÿåì áîòîâ åñëè ëèìèò óæå äîñòèãíóò + if (g_Bot_GetCount() >= gMaxBots) then Exit; + // Ñïèñîê íàçâàíèé ìîäåëåé: m := g_PlayerModel_GetNames(); if m = nil then @@ -1408,6 +1415,20 @@ begin Result := Result + 1; end; +function g_Bot_GetCount(): Integer; +var + a: Integer; +begin + Result := 0; + + if gPlayers = nil then + Exit; + + for a := 0 to High(gPlayers) do + if (gPlayers[a] <> nil) and (gPlayers[a] is TBot) then + Result := Result + 1; +end; + function g_Player_GetStats(): TPlayerStatArray; var a: Integer;