if (game:issingleplayer() or not Engine.InFrontend()) then return end game:addlocalizedstring("LUA_MENU_STATS", "Stats") game:addlocalizedstring("LUA_MENU_STATS_DESC", "Edit player stats settings.") game:addlocalizedstring("LUA_MENU_UNLOCKALL_ITEMS", "Unlock all items") game:addlocalizedstring("LUA_MENU_UNLOCKALL_ITEMS_DESC", "Whether items should be locked based on the player's stats or always unlocked.") game:addlocalizedstring("LUA_MENU_UNLOCKALL_LOOT", "Unlock all loot") game:addlocalizedstring("LUA_MENU_UNLOCKALL_LOOT_DESC", "Whether loot should be locked based on the player's stats or always unlocked.") game:addlocalizedstring("LUA_MENU_UNLOCKALL_CLASSES", "Unlock all classes") game:addlocalizedstring("LUA_MENU_UNLOCKALL_CLASSES_DESC", "Whether classes should be locked based on the player's stats or always unlocked.") game:addlocalizedstring("LUA_MENU_PRESTIGE", "Prestige") game:addlocalizedstring("LUA_MENU_PRESTIGE_DESC", "Edit prestige level.") game:addlocalizedstring("LUA_MENU_RANK", "Rank") game:addlocalizedstring("LUA_MENU_RANK_DESC", "Edit rank.") game:addlocalizedstring("LUA_MENU_UNSAVED_CHANGES", "You have unsaved changes, are you sure you want to exit?") game:addlocalizedstring("LUA_MENU_SAVE", "Save changes") game:addlocalizedstring("LUA_MENU_SAVE_DESC", "Save changes.") game:addlocalizedstring("LUA_MENU_SETTINGS", "Settings") game:addlocalizedstring("LUA_MENU_EDIT_STATS", "Edit Stats") function createdivider(menu, text) local element = LUI.UIElement.new({ leftAnchor = true, rightAnchor = true, left = 0, right = 0, topAnchor = true, bottomAnchor = false, top = 0, bottom = 33.33 }) element.scrollingToNext = true element:addElement(LUI.MenuBuilder.BuildRegisteredType("h1_option_menu_titlebar", { title_bar_text = Engine.ToUpperCase(Engine.Localize(text)) })) menu.list:addElement(element) end local personalizationbutton = LUI.MPLobbyBase.AddPersonalizationButton LUI.MPLobbyBase.AddPersonalizationButton = function(menu) personalizationbutton(menu) menu:AddButton("@LUA_MENU_STATS", function() LUI.FlowManager.RequestAddMenu(nil, "stats_menu") end) end LUI.MenuBuilder.registerType("stats_menu", function(a1) local menu = LUI.MenuTemplate.new(a1, { menu_title = Engine.ToUpperCase(Engine.Localize("@LUA_MENU_STATS")), menu_width = luiglobals.GenericMenuDims.OptionMenuWidth }) createdivider(menu, "@LUA_MENU_SETTINGS") LUI.Options.CreateOptionButton(menu, "cg_unlockall_items", "@LUA_MENU_UNLOCKALL_ITEMS", "@LUA_MENU_UNLOCKALL_ITEMS_DESC", {{ text = "@LUA_MENU_ENABLED", value = true }, { text = "@LUA_MENU_DISABLED", value = false }}, nil, nil) LUI.Options.CreateOptionButton(menu, "cg_unlockall_loot", "@LUA_MENU_UNLOCKALL_LOOT", "@LUA_MENU_UNLOCKALL_LOOT_DESC", {{ text = "@LUA_MENU_ENABLED", value = true }, { text = "@LUA_MENU_DISABLED", value = false }}, nil, nil) LUI.Options.CreateOptionButton(menu, "cg_unlockall_classes", "@LUA_MENU_UNLOCKALL_CLASSES", "@LUA_MENU_UNLOCKALL_CLASSES_DESC", {{ text = "@LUA_MENU_ENABLED", value = true }, { text = "@LUA_MENU_DISABLED", value = false }}, nil, nil) createdivider(menu, "@LUA_MENU_EDIT_STATS") local prestige = Engine.GetPlayerData(0, CoD.StatsGroup.Ranked, "prestige") or 0 local experience = Engine.GetPlayerData(0, CoD.StatsGroup.Ranked, "experience") or 0 local rank = Lobby.GetRankForXP(experience, prestige) prestigeeditbutton(menu, function(value) Engine.SetPlayerData(0, CoD.StatsGroup.Ranked, "prestige", tonumber(value)) end) rankeditbutton(menu, function(value) local rank = tonumber(value) local prestige = Engine.GetPlayerData(0, CoD.StatsGroup.Ranked, "prestige") or 0 local experience = rank == 0 and 0 or Rank.GetRankMaxXP(tonumber(value) - 1, prestige) Engine.SetPlayerData(0, CoD.StatsGroup.Ranked, "experience", experience) end) LUI.Options.InitScrollingList(menu.list, nil) LUI.Options.AddOptionTextInfo(menu) menu:AddBackButton() return menu end) function prestigeeditbutton(menu, callback) local options = {} local max = Lobby.GetMaxPrestigeLevel() local prestige = Engine.GetPlayerData(0, CoD.StatsGroup.Ranked, "prestige") or 0 for i = 0, max do game:addlocalizedstring("LUA_MENU_" .. i, i .. "") table.insert(options, { text = "@" .. i, value = i .. "" }) end Engine.SetDvarFromString("ui_prestige_level", prestige .. "") LUI.Options.CreateOptionButton(menu, "ui_prestige_level", "@LUA_MENU_PRESTIGE", "@LUA_MENU_PRESTIGE_DESC", options, nil, nil, callback) end function rankeditbutton(menu, callback) local options = {} local prestige = Engine.GetPlayerData(0, CoD.StatsGroup.Ranked, "prestige") or 0 local experience = Engine.GetPlayerData(0, CoD.StatsGroup.Ranked, "experience") or 0 local rank = Lobby.GetRankForXP(experience, prestige) local max = Rank.GetMaxRank(prestige) local maxprestige = Lobby.GetMaxPrestigeLevel() for i = 0, max do game:addlocalizedstring("LUA_MENU_" .. i, i .. "") table.insert(options, { text = "@" .. (i + 1), value = i .. "" }) end Engine.SetDvarFromString("ui_rank_level_", rank .. "") return LUI.Options.CreateOptionButton(menu, "ui_rank_level_", "@LUA_MENU_RANK", "@LUA_MENU_RANK_DESC", options, nil, nil, callback) end local isclasslocked = Cac.IsCustomClassLocked Cac.IsCustomClassLocked = function(...) if (Engine.GetDvarBool("cg_unlockall_classes")) then return false end return isclasslocked(...) end