From 5a6b14faa98af74a46af4707aca6b2952d102504 Mon Sep 17 00:00:00 2001 From: WantedDV <122710241+WantedDV@users.noreply.github.com> Date: Fri, 12 May 2023 15:04:26 -0230 Subject: [PATCH] Allow setting master rank --- data/ui_scripts/stats/__init__.lua | 152 ++++++++++++++++++++--------- 1 file changed, 106 insertions(+), 46 deletions(-) diff --git a/data/ui_scripts/stats/__init__.lua b/data/ui_scripts/stats/__init__.lua index cad82697..963ca382 100644 --- a/data/ui_scripts/stats/__init__.lua +++ b/data/ui_scripts/stats/__init__.lua @@ -151,43 +151,57 @@ DataSources.MPStatsSettings = DataSourceHelpers.ListSetup("MPStatsSettings", fun end local rankLevels = {} - if Engine.CurrentSessionMode() == Enum.eModes.MODE_MULTIPLAYER then - rankLevels = { 1, 10, 20, 30, 40, 50, 55 } - elseif Engine.CurrentSessionMode() == Enum.eModes.MODE_ZOMBIES then - rankLevels = { 1, 10, 20, 30, 35 } - end local rankObjs = {} - local hasDefault = false + local hasDefault = true + local currentPrestige = CoD.PrestigeUtility.GetCurrentPLevel(controller, Engine.CurrentSessionMode()) local currentRank = CoD.BlackMarketUtility.GetCurrentRank(controller) + 1 - for index, value in ipairs(rankLevels) do - table.insert(rankObjs, { - name = value, - value = value - 1, - default = value == currentRank, - title = "Rank Level", - desc = "" - }) - if not hasDefault then - hasDefault = value == currentRank + + local isMasterPrestige = currentPrestige == 11 + + if Engine.CurrentSessionMode() == Enum.eModes.MODE_MULTIPLAYER then + if not isMasterPrestige then + rankLevels = { 1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 } + else + rankLevels = { 56, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 } + end + + elseif Engine.CurrentSessionMode() == Enum.eModes.MODE_ZOMBIES then + if not isMasterPrestige then + rankLevels = { 1, 5, 10, 15, 20, 25, 30, 35 } + else + rankLevels = { 36, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 } end end - if not hasDefault then + local maxlevel = math.max(table.unpack(rankLevels)) + local minlevel = math.min(table.unpack(rankLevels)) + + for index, value in ipairs(rankLevels) do table.insert(rankObjs, { - name = currentRank, + name = value <= minlevel and "Min" or value >= maxlevel and "Max" or value, + value = value - 1, + default = value == currentRank, + title = "Rank Level", + desc = value~=currentRank and "" or "Current Rank" + }) + end + + if hasDefault and currentRank ~= minlevel and currentRank < maxlevel and not isMasterPrestige then + table.insert(rankObjs, { + name = "Current: " .. tostring(currentRank <= minlevel and "Min" or currentRank >= maxlevel and "Max" or currentRank), value = currentRank - 1, default = true, title = "Rank Level", - desc = "" + desc = "Do not adjust rank" }) end local prestigeTable = {} - for i = 0, 10 do + for i = 0, 11 do table.insert(prestigeTable, { - name = i == 0 and "None" or i, + name = i == 0 and "None" or i==11 and "Master" or i, value = i, - default = i == CoD.PrestigeUtility.GetCurrentPLevel(controller), + default = i == currentPrestige, title = "Prestige", desc = "" }) @@ -228,25 +242,18 @@ DataSources.MPStatsSettings = DataSourceHelpers.ListSetup("MPStatsSettings", fun table.insert(optionsTable, { models = { - name = "Rank Level", + name = "Prestige", desc = "", image = nil, - optionsDatasource = createSettingsDatasource(controller, "MPStatsSettings_rank_level", rankObjs, - CoD.BlackMarketUtility.GetCurrentRank(controller), false, function(f1_arg0, f1_arg1, f1_arg2, dvarName, f1_arg4) + optionsDatasource = createSettingsDatasource(controller, "MPStatsSettings_rank_prestige", prestigeTable, + CoD.PrestigeUtility.GetCurrentPLevel(controller, Engine.CurrentSessionMode()), false, function(f1_arg0, f1_arg1, f1_arg2, dvarName, f1_arg4) UpdateInfoModels(f1_arg1) - local rankTable = nil - if Engine.CurrentSessionMode() == Enum.eModes.MODE_MULTIPLAYER then - rankTable = "gamedata/tables/mp/mp_ranktable.csv" - elseif Engine.CurrentSessionMode() == Enum.eModes.MODE_ZOMBIES then - rankTable = "gamedata/tables/zm/zm_ranktable.csv" + local newPrestige = f1_arg1.value + if newPrestige == 11 then + Engine.Exec( f1_arg0, "PrestigeStatsMaster " .. tostring( Engine.CurrentSessionMode() ) ) end - local skipLines = Engine.CurrentSessionMode() == Enum.eModes.MODE_MULTIPLAYER and 3 or 2 - local maxXp = tonumber(Engine.TableLookupGetColumnValueForRow(rankTable, f1_arg1.value + skipLines, 7)) - if maxXp == nil then - maxXp = 9999999999 - end - Engine.ExecNow(f1_arg0, "statsetbyname rankxp " .. maxXp - 1) - Engine.ExecNow(f1_arg0, "statsetbyname rank " .. f1_arg1.value) + Engine.ExecNow(f1_arg0, "statsetbyname plevel " .. newPrestige) + Engine.ExecNow(f1_arg0, "statsetbyname hasprestiged " .. (newPrestige > 0 and 1 or 0)) Engine.Exec(f1_arg0, "uploadstats " .. tostring(Engine.CurrentSessionMode())) end) }, @@ -258,16 +265,70 @@ DataSources.MPStatsSettings = DataSourceHelpers.ListSetup("MPStatsSettings", fun table.insert(optionsTable, { models = { - name = "Prestige", + name = "Rank Level", desc = "", image = nil, - optionsDatasource = createSettingsDatasource(controller, "MPStatsSettings_rank_prestige", prestigeTable, - CoD.PrestigeUtility.GetCurrentPLevel(controller), false, function(f1_arg0, f1_arg1, f1_arg2, dvarName, f1_arg4) + optionsDatasource = createSettingsDatasource(controller, "MPStatsSettings_rank_level", rankObjs, + CoD.BlackMarketUtility.GetCurrentRank(controller), false, function(f1_arg0, f1_arg1, f1_arg2, dvarName, f1_arg4) UpdateInfoModels(f1_arg1) - local newPrestige = f1_arg1.value - Engine.ExecNow(f1_arg0, "statsetbyname plevel " .. newPrestige) - Engine.ExecNow(f1_arg0, "statsetbyname hasprestiged " .. (newPrestige > 0 and 1 or 0)) - Engine.Exec(f1_arg0, "uploadstats " .. tostring(Engine.CurrentSessionMode())) + local rankTable = nil + local rank = f1_arg1.value + 1 + if currentPrestige <= 10 then + if Engine.CurrentSessionMode() == Enum.eModes.MODE_MULTIPLAYER then + rankTable = "gamedata/tables/mp/mp_ranktable.csv" + elseif Engine.CurrentSessionMode() == Enum.eModes.MODE_ZOMBIES then + rankTable = "gamedata/tables/zm/zm_ranktable.csv" + end + local skipLines = Engine.CurrentSessionMode() == Enum.eModes.MODE_MULTIPLAYER and 3 or 2 + local maxXp = tonumber(Engine.TableLookupGetColumnValueForRow(rankTable, rank - 2 + skipLines, 7)) + if Engine.CurrentSessionMode() == Enum.eModes.MODE_MULTIPLAYER then + if maxXp ~= nil and rank == maxlevel then + maxXp = maxXp + 55600 + end + end + if Engine.CurrentSessionMode() == Enum.eModes.MODE_ZOMBIES then + if maxXp ~= nil and rank == maxlevel then + maxXp = maxXp + 54244 + end + end + if maxXp == nil then + maxXp = 0 + end + Engine.ExecNow(f1_arg0, "statsetbyname rank " .. rank - 1 ) + Engine.ExecNow(f1_arg0, "statsetbyname rankxp " .. maxXp ) + Engine.ExecNow(f1_arg0, "statsetbyname paragon_rankxp " .. 0 ) + else + if Engine.CurrentSessionMode() == Enum.eModes.MODE_MULTIPLAYER then + rankTable = "gamedata/tables/mp/mp_paragonranktable.csv" + elseif Engine.CurrentSessionMode() == Enum.eModes.MODE_ZOMBIES then + rankTable = "gamedata/tables/zm/zm_paragonranktable.csv" + end + local skipLines = 2 + local maxXp = 0 + if Engine.CurrentSessionMode() == Enum.eModes.MODE_MULTIPLAYER then + maxXp = tonumber(Engine.TableLookupGetColumnValueForRow(rankTable, rank - 57 + skipLines, 7)) + if maxXp ~= nil and rank == maxlevel then + maxXp = maxXp + 55600 + end + rank = rank - 55 + end + if Engine.CurrentSessionMode() == Enum.eModes.MODE_ZOMBIES then + maxXp = tonumber(Engine.TableLookupGetColumnValueForRow(rankTable, rank - 37 + skipLines, 7)) + if maxXp ~= nil and rank == maxlevel then + maxXp = maxXp + 54244 + end + rank = rank - 35 + end + if maxXp == nil then + maxXp = 0 + end + Engine.ExecNow(f1_arg0, "statsetbyname paragon_rank " .. rank - 1 ) + Engine.ExecNow(f1_arg0, "statsetbyname paragon_rankxp " .. maxXp ) + end + Engine.Exec(f1_arg0, "uploadstats " .. tostring(Engine.CurrentSessionMode())) + Engine.Exec(f1_arg0, "savegamerprofilestats") + + currentRank = rank end) }, properties = { @@ -300,8 +361,7 @@ LUI.createMenu.BoiiiStatsMenu = function(controller) GameSettingsBackground:setLeftRight(true, true, 0, 0) GameSettingsBackground:setTopBottom(true, true, 0, 0) GameSettingsBackground.MenuFrame.titleLabel:setText(Engine.Localize("STATS SETTINGS")) - GameSettingsBackground.MenuFrame.cac3dTitleIntermediary0.FE3dTitleContainer0.MenuTitle.TextBox1.Label0:setText(Engine - .Localize("STATS SETTINGS")) + GameSettingsBackground.MenuFrame.cac3dTitleIntermediary0.FE3dTitleContainer0.MenuTitle.TextBox1.Label0:setText(Engine.Localize("STATS SETTINGS")) GameSettingsBackground.GameSettingsSelectedItemInfo.GameModeInfo:setAlpha(0) GameSettingsBackground.GameSettingsSelectedItemInfo.GameModeName:setAlpha(0) self:addElement(GameSettingsBackground)