iw7-mod/data/cdata/ui_scripts/Lobby/GameSetupButtonsBots.lua

371 lines
12 KiB
Lua
Raw Normal View History

local Bot = {}
Bot.BotTeams = {
Friendly = 0,
Enemy = 1,
FFA = 2,
}
Bot.BotLimit = 17
Bot.BotDifficulties = {
Recruit = 0,
Regular = 1,
Hardened = 2,
Veteran = 3,
Mixed = 4,
}
Bot.GetMaxBotLimit = function()
return 17
end
Bot.GetBotsTeamLimit = function(team)
local botcount = 0
if team == Bot.BotTeams.Friendly then
botcount = Engine.GetDvarInt("bot_allies")
elseif team == Bot.BotTeams.Enemy then
botcount = Engine.GetDvarInt("bot_enemies")
else
botcount = Engine.GetDvarInt("bot_free")
end
if tonumber(botcount) <= 0 then
botcount = 0
end
return tonumber(botcount)
end
Bot.SetBotsDifficulty = function(team, difficulty)
if team == Bot.BotTeams.Friendly then
Engine.Exec("set bot_difficulty_allies " .. tostring(difficulty))
elseif team == Bot.BotTeams.Enemy then
Engine.Exec("set bot_difficulty_enemies " .. tostring(difficulty))
else
Engine.Exec("set bot_difficulty_free " .. tostring(difficulty))
end
end
Bot.GetBotsDifficulty = function(team)
local difficulty = 4
if team == Bot.BotTeams.Friendly then
difficulty = Engine.GetDvarInt("bot_difficulty_allies")
elseif team == Bot.BotTeams.Enemy then
difficulty = Engine.GetDvarInt("bot_difficulty_enemies")
else
difficulty = Engine.GetDvarInt("bot_difficulty_free")
end
if not difficulty then
difficulty = 4
end
return tonumber(difficulty)
end
Bot.SetBotsTeamLimit = function(team, size)
Lobby.SetBotsTeamLimit(team, size)
if team == Bot.BotTeams.Friendly then
Engine.Exec("set bot_allies " .. tostring(size))
elseif team == Bot.BotTeams.Enemy then
Engine.Exec("set bot_enemies " .. tostring(size))
else
Engine.Exec("set bot_free " .. tostring(size))
end
end
local update_button = function(f1_arg0, f1_arg1, f1_arg2)
f1_arg0.currentValue = f1_arg1
f1_arg0:UpdateContent()
if f1_arg0.autoFunctionCall then
f1_arg0.action(f1_arg0.currentValue, f1_arg2)
end
end
local f0_local0 = function(f1_arg0, f1_arg1, f1_arg2)
local f1_local0 = {
[Bot.BotTeams.FFA] = f1_arg0.FFABots,
[Bot.BotTeams.Enemy] = f1_arg0.EnemyBots,
[Bot.BotTeams.Friendly] = f1_arg0.FriendlyBots,
}
local f1_local1 = function(team, teambased)
local f2_local0 = {}
local MaxBotLimit = Bot.GetMaxBotLimit()
for f2_local2 = 0, MaxBotLimit, 1 do
table.insert(f2_local0, tostring(f2_local2))
end
local f2_local2 = 1 + Bot.GetBotsTeamLimit(team)
if #f2_local0 < f2_local2 then
Bot.SetBotsTeamLimit(team, #f2_local0 - 1)
f2_local2 = #f2_local0
end
if not teambased then
local MaxBotLimit = Bot.GetMaxBotLimit()
if MaxBotLimit < f2_local2 then
f2_local2 = MaxBotLimit + 1
end
end
return {
labels = f2_local0,
action = function(f3_arg0)
Bot.SetBotsTeamLimit(team, f3_arg0 - 1)
if teambased and (Bot.GetBotsTeamLimit(0) + Bot.GetBotsTeamLimit(1)) >= Bot.GetMaxBotLimit() then
local adjustteam = 0
local otherside = 1
if team == Bot.BotTeams.Friendly then
adjustteam = Bot.BotTeams.Enemy
otherside = 0
end
if team == Bot.BotTeams.Enemy then
adjustteam = Bot.BotTeams.Friendly
otherside = 1
end
local adjustval = Bot.GetMaxBotLimit() - Bot.GetBotsTeamLimit(otherside)
if adjustval <= 0 then
adjustval = 1
end
f1_local0[adjustteam].currentValue = adjustval
f1_local0[adjustteam]:UpdateContent()
Bot.SetBotsTeamLimit(adjustteam, adjustval - 1)
end
end,
defaultValue = f2_local2,
wrapAround = false,
}
end
local f1_local2 = function(f4_arg0)
local f4_local0 = {}
table.insert(f4_local0, Engine.Localize("LUA_MENU_BOTS_RECRUIT"))
table.insert(f4_local0, Engine.Localize("LUA_MENU_BOTS_REGULAR"))
table.insert(f4_local0, Engine.Localize("LUA_MENU_BOTS_HARDENED"))
table.insert(f4_local0, Engine.Localize("LUA_MENU_BOTS_VETERAN"))
table.insert(f4_local0, Engine.Localize("LUA_MENU_BOTS_MIXED"))
return {
labels = f4_local0,
action = function(f5_arg0)
Bot.SetBotsDifficulty(f4_arg0, f5_arg0 - 1)
end,
defaultValue = 1 + Bot.GetBotsDifficulty(f4_arg0),
wrapAround = true,
}
end
if
f1_arg0.FriendlyBots
and f1_arg0.FriendlyBotsDifficulty
and f1_arg0.EnemyBots
and f1_arg0.EnemyBotsDifficulty
then
LUI.AddUIArrowTextButtonLogic(
f1_arg0.FriendlyBots,
f1_arg1,
f1_local1(Bot.BotTeams.Friendly, Bot.BotTeams.Enemy)
)
LUI.AddUIArrowTextButtonLogic(f1_arg0.EnemyBots, f1_arg1, f1_local1(Bot.BotTeams.Enemy, Bot.BotTeams.Friendly))
LUI.AddUIArrowTextButtonLogic(f1_arg0.FriendlyBotsDifficulty, f1_arg1, f1_local2(Bot.BotTeams.Friendly))
LUI.AddUIArrowTextButtonLogic(f1_arg0.EnemyBotsDifficulty, f1_arg1, f1_local2(Bot.BotTeams.Enemy))
end
if f1_arg0.FFABots and f1_arg0.FFABotsDifficulty then
LUI.AddUIArrowTextButtonLogic(f1_arg0.FFABots, f1_arg1, f1_local1(Bot.BotTeams.FFA))
LUI.AddUIArrowTextButtonLogic(f1_arg0.FFABotsDifficulty, f1_arg1, f1_local2(Bot.BotTeams.FFA))
end
local f1_local3 = LUI.DataSourceInGlobalModel.new("frontEnd.Bot.areWeGameHost")
f1_arg0:SubscribeToModel(f1_local3:GetModel(f1_arg1), function(f6_arg0)
local f6_local0 = DataModel.GetModelValue(f6_arg0)
local f6_local1 = IsSystemLink()
if f1_arg0.FriendlyBots and f1_arg0.FriendlyBotsDifficulty then
local f6_local2 = f1_arg0.FriendlyBots
local f6_local3 = f6_local2
f6_local2 = f6_local2.SetButtonDisabled
local f6_local4
if not f6_local0 then
f6_local4 = not f6_local1
else
f6_local4 = false
end
f6_local2(f6_local3, false)
f6_local2 = f1_arg0.FriendlyBotsDifficulty
f6_local3 = f6_local2
f6_local2 = f6_local2.SetButtonDisabled
if not f6_local0 then
f6_local4 = not f6_local1
else
f6_local4 = false
end
f6_local2(f6_local3, false)
end
if f1_arg0.EnemyBots and f1_arg0.EnemyBotsDifficulty then
local f6_local2 = f1_arg0.EnemyBots
local f6_local3 = f6_local2
f6_local2 = f6_local2.SetButtonDisabled
local f6_local4
if not f6_local0 then
f6_local4 = not f6_local1
else
f6_local4 = false
end
f6_local2(f6_local3, false)
f6_local2 = f1_arg0.EnemyBotsDifficulty
f6_local3 = f6_local2
f6_local2 = f6_local2.SetButtonDisabled
if not f6_local0 then
f6_local4 = not f6_local1
else
f6_local4 = false
end
f6_local2(f6_local3, false)
end
if f1_arg0.FFABots and f1_arg0.FFABotsDifficulty then
local f6_local2 = f1_arg0.FFABots
local f6_local3 = f6_local2
f6_local2 = f6_local2.SetButtonDisabled
local f6_local4
if not f6_local0 then
f6_local4 = not f6_local1
else
f6_local4 = false
end
f6_local2(f6_local3, false)
f6_local2 = f1_arg0.FFABotsDifficulty
f6_local3 = f6_local2
f6_local2 = f6_local2.SetButtonDisabled
if not f6_local0 then
f6_local4 = not f6_local1
else
f6_local4 = false
end
f6_local2(f6_local3, false)
end
end)
end
local GameSetupButtonsBotsCombatTraining = function(menu, controller)
local self = LUI.UIVerticalList.new()
self:SetAnchorsAndPosition(0, 1, 0, 1, 0, 600 * _1080p, 0, 280 * _1080p)
self.id = "GameSetupButtonsBotsCombatTraining"
local f7_local1 = controller and controller.controllerIndex
if not f7_local1 and not Engine.InFrontend() then
f7_local1 = self:getRootController()
end
assert(f7_local1)
self:SetSpacing(10 * _1080p)
local f7_local3 = nil
if CONDITIONS.IsTeamBasedGameType(self) then
f7_local3 = MenuBuilder.BuildRegisteredType("GenericArrowButton", {
controllerIndex = f7_local1,
})
f7_local3.id = "FriendlyBots"
if CONDITIONS.IsTeamBasedGameType(self) then
f7_local3.buttonDescription = Engine.Localize("LUA_MENU_FRIENDLY_BOTS_DESC")
end
f7_local3.Title:setText(ToUpperCase(Engine.Localize("LUA_MENU_FRIENDLY_BOTS_CAPS")), 0)
f7_local3.Text:setText(ToUpperCase(""), 0)
f7_local3:SetAnchorsAndPosition(0, 1, 0, 1, 0, _1080p * 600, 0, _1080p * 30)
self:addElement(f7_local3)
self.FriendlyBots = f7_local3
end
local f7_local4 = nil
if CONDITIONS.IsTeamBasedGameType(self) then
f7_local4 = MenuBuilder.BuildRegisteredType("GenericArrowButton", {
controllerIndex = f7_local1,
})
f7_local4.id = "FriendlyBotsDifficulty"
if CONDITIONS.IsTeamBasedGameType(self) then
f7_local4.buttonDescription = Engine.Localize("LUA_MENU_FRIENDLY_BOTDIFFICULTY_DESC")
end
f7_local4.Title:setText(ToUpperCase(Engine.Localize("LUA_MENU_BOTDIFFICULTY_CAPS")), 0)
f7_local4.Text:setText(ToUpperCase(""), 0)
f7_local4:SetAnchorsAndPosition(0, 1, 0, 1, 0, _1080p * 600, _1080p * 40, _1080p * 70)
self:addElement(f7_local4)
self.FriendlyBotsDifficulty = f7_local4
end
local f7_local5 = nil
if CONDITIONS.IsTeamBasedGameType(self) then
f7_local5 = LUI.UIImage.new()
f7_local5.id = "SpacerImage"
f7_local5:SetAlpha(0, 0)
f7_local5:SetAnchorsAndPosition(0, 1, 0, 1, 0, _1080p * 600, _1080p * 80, _1080p * 90)
self:addElement(f7_local5)
self.SpacerImage = f7_local5
end
local f7_local6 = nil
if CONDITIONS.IsTeamBasedGameType(self) then
f7_local6 = MenuBuilder.BuildRegisteredType("GenericArrowButton", {
controllerIndex = f7_local1,
})
f7_local6.id = "EnemyBots"
if CONDITIONS.IsTeamBasedGameType(self) then
f7_local6.buttonDescription = Engine.Localize("LUA_MENU_ENEMY_BOTS_DESC")
end
f7_local6.Title:setText(ToUpperCase(Engine.Localize("LUA_MENU_ENEMY_BOTS_CAPS")), 0)
f7_local6.Text:setText(ToUpperCase(""), 0)
f7_local6:SetAnchorsAndPosition(0, 1, 0, 1, 0, _1080p * 600, _1080p * 100, _1080p * 130)
self:addElement(f7_local6)
self.EnemyBots = f7_local6
end
local f7_local7 = nil
if CONDITIONS.IsTeamBasedGameType(self) then
f7_local7 = MenuBuilder.BuildRegisteredType("GenericArrowButton", {
controllerIndex = f7_local1,
})
f7_local7.id = "EnemyBotsDifficulty"
if CONDITIONS.IsTeamBasedGameType(self) then
f7_local7.buttonDescription = Engine.Localize("LUA_MENU_ENEMY_BOTDIFFICULTY_DESC")
end
f7_local7.Title:setText(ToUpperCase(Engine.Localize("LUA_MENU_BOTDIFFICULTY_CAPS")), 0)
f7_local7.Text:setText(ToUpperCase(""), 0)
f7_local7:SetAnchorsAndPosition(0, 1, 0, 1, 0, _1080p * 600, _1080p * 140, _1080p * 170)
self:addElement(f7_local7)
self.EnemyBotsDifficulty = f7_local7
end
local f7_local8 = nil
if not CONDITIONS.IsTeamBasedGameType(self) then
f7_local8 = MenuBuilder.BuildRegisteredType("GenericArrowButton", {
controllerIndex = f7_local1,
})
f7_local8.id = "FFABots"
if not CONDITIONS.IsTeamBasedGameType(self) then
f7_local8.buttonDescription = Engine.Localize("LUA_MENU_BOTS_DESC")
end
f7_local8.Title:setText(ToUpperCase(Engine.Localize("LUA_MENU_BOTS_CAPS")), 0)
f7_local8.Text:setText(ToUpperCase(""), 0)
f7_local8:SetAnchorsAndPosition(0, 1, 0, 1, 0, _1080p * 600, _1080p * 180, _1080p * 210)
self:addElement(f7_local8)
self.FFABots = f7_local8
end
local f7_local9 = nil
if not CONDITIONS.IsTeamBasedGameType(self) then
f7_local9 = MenuBuilder.BuildRegisteredType("GenericArrowButton", {
controllerIndex = f7_local1,
})
f7_local9.id = "FFABotsDifficulty"
if not CONDITIONS.IsTeamBasedGameType(self) then
f7_local9.buttonDescription = Engine.Localize("LUA_MENU_BOTDIFFICULTY_DESC")
end
f7_local9.Title:setText(ToUpperCase(Engine.Localize("LUA_MENU_BOTDIFFICULTY_CAPS")), 0)
f7_local9.Text:setText(ToUpperCase(""), 0)
f7_local9:SetAnchorsAndPosition(0, 1, 0, 1, 0, _1080p * 600, _1080p * 220, _1080p * 250)
self:addElement(f7_local9)
self.FFABotsDifficulty = f7_local9
end
local ButtonDescriptionText = nil
ButtonDescriptionText = MenuBuilder.BuildRegisteredType("ButtonDescriptionText", {
controllerIndex = f7_local1,
})
ButtonDescriptionText.id = "ButtonDescriptionText"
ButtonDescriptionText:SetAnchorsAndPosition(0, 1, 0, 1, 0, _1080p * 420, _1080p * 260, _1080p * 292)
self:addElement(ButtonDescriptionText)
self.ButtonDescriptionText = ButtonDescriptionText
f0_local0(self, f7_local1, controller)
return self
end
local GameSetupButtonsBotsCustomGames = package.loaded["frontEnd.mp.GameSetupButtonsBots"].GameSetupButtonsBots
GameSetupButtonsBotsOverride = function(menu, controller)
if CONDITIONS.InFrontendPublicMP then
return GameSetupButtonsBotsCombatTraining(menu, controller)
else
return GameSetupButtonsBotsCustomGames(menu, controller)
end
end
MenuBuilder.registerType("GameSetupButtonsBots", GameSetupButtonsBotsOverride)