iw6-lui/lui/common_menus/cacutils.dec.lua
2024-09-12 17:25:45 +02:00

427 lines
15 KiB
Lua

Cac = {
Settings = {
DataLoc = {
squadMembers = {
maxClassSlots = 10
},
privateMatchSquadMembers = {
maxClassSlots = 6
},
coopSquadMembers = {
maxClassSlots = 1
},
loadouts = {
maxClassSlots = 10,
baseClassSlots = 6
},
defaultClassesTeam0 = {
maxClassSlots = 6,
teamName = "allies"
},
defaultClassesTeam1 = {
maxClassSlots = 6,
baseClassSlots = 6,
teamName = "axis",
infectedString = Engine.Localize( "LUA_MENU_INFECT_CAPS" ),
string = Engine.Localize( "@LUA_MENU_AXIS_CAPS" )
},
defaultClassesTeam2 = {
maxClassSlots = 6,
baseClassSlots = 6,
teamName = "allies",
infectedString = Engine.Localize( "LUA_MENU_MP_SURVIVORS_CAPS" ),
string = Engine.Localize( "@LUA_MENU_ALLIES_CAPS" )
},
defaultClassesTeam3 = {
teamName = "spectator"
}
},
minUsableSlots = 5
},
MemberCost = {
0,
3,
3,
3,
3,
3,
200,
300,
400,
500
}
}
if MatchRules then
MatchRules.AllowCustomClasses = function ( f1_arg0 )
if not MatchRules.IsUsingMatchRulesData() then
return false
else
local f1_local0
if f1_arg0 then
f1_local0 = Cac.IsDefaultClass( f1_arg0 )
if not f1_local0 then
elseif not f1_local0 then
return MatchRules.GetData( "commonOption", "allowCustomClasses" )
else
end
end
end
f1_local0 = false
end
end
Cac.GetCacConfig = function ( f2_arg0, f2_arg1, f2_arg2, ... )
local f2_local0 = {
...
}
for f2_local1 = 1, #f2_local0, 1 do
if type( f2_local0[f2_local1] ) == "string" and Cac.IsDefaultClass( f2_local0[f2_local1] ) then
local f2_local4 = Cac.Settings.DataLoc[f2_local0[f2_local1]].teamName
local f2_local5 = f2_local0[f2_local1 + 1]
table.remove( f2_local0, 1 )
table.remove( f2_local0, 1 )
return MatchRules.GetData( "defaultClasses", f2_local4, f2_local5, "class", unpack( f2_local0 ) )
end
end
local f2_local1 = CoD.GetStatsGroupForSquadLocation( f2_arg1 )
if f2_local0[1] == "loadouts" and type( f2_local0[2] ) == "number" then
local f2_local2 = f2_local0[1]
local f2_local3 = f2_local0[2]
if Cac.Settings.DataLoc[f2_local2].baseClassSlots <= f2_local3 then
table.remove( f2_local0, 1 )
table.remove( f2_local0, 1 )
return Engine.GetPlayerDataExtendedEx( f2_arg0, f2_local1, f2_arg1, f2_arg2, f2_local2, f2_local3 - Cac.Settings.DataLoc[f2_local2].baseClassSlots, unpack( f2_local0 ) )
end
end
return Engine.GetPlayerDataEx( f2_arg0, f2_local1, f2_arg1, f2_arg2, ... )
end
Cac.SetCacConfig = function ( f3_arg0, f3_arg1, f3_arg2, ... )
local f3_local0 = {
...
}
for f3_local1 = 1, #f3_local0, 1 do
if type( f3_local0[f3_local1] ) == "string" and Cac.IsDefaultClass( f3_local0[f3_local1] ) then
local f3_local4 = Cac.Settings.DataLoc[f3_local0[f3_local1]].teamName
local f3_local5 = f3_local0[f3_local1 + 1]
table.remove( f3_local0, 1 )
table.remove( f3_local0, 1 )
return MatchRules.SetData( "defaultClasses", f3_local4, f3_local5, "class", unpack( f3_local0 ) )
end
end
local f3_local1 = CoD.GetStatsGroupForSquadLocation( f3_arg1 )
if f3_local0[1] == "loadouts" and type( f3_local0[2] ) == "number" then
local f3_local2 = f3_local0[1]
local f3_local3 = f3_local0[2]
if Cac.Settings.DataLoc[f3_local2].baseClassSlots <= f3_local3 then
table.remove( f3_local0, 1 )
table.remove( f3_local0, 1 )
return Engine.SetPlayerDataExtendedEx( f3_arg0, f3_local1, f3_arg1, f3_arg2, f3_local2, f3_local3 - Cac.Settings.DataLoc[f3_local2].baseClassSlots, unpack( f3_local0 ) )
end
end
return Engine.SetPlayerDataEx( f3_arg0, f3_local1, f3_arg1, f3_arg2, ... )
end
Cac.GetNumCustomSlots = function ( f4_arg0, f4_arg1 )
if not f4_arg1 then
f4_arg1 = Cac.GetCustomClassLoc()
end
if Cac.IsDefaultClass( f4_arg1 ) or IsOnlineMatch() and (Engine.HasExtendedLoadouts( f4_arg0 ) or not IsPrivateMatch()) and Engine.GetDvarInt( "extendedLoadoutsEnable" ) == 1 then
return Cac.Settings.DataLoc[f4_arg1].maxClassSlots
else
return Cac.Settings.DataLoc[f4_arg1].baseClassSlots
end
end
Cac.IsClassInUse = function ( f5_arg0, f5_arg1, f5_arg2, f5_arg3, f5_arg4 )
local f5_local0 = nil
local f5_local1 = Cac.IsDefaultClass( f5_arg3 )
if f5_arg1 == "privateMatchSquadMembers" and not f5_local1 and f5_arg4 < Cac.Settings.DataLoc[f5_arg3].baseClassSlots then
f5_local0 = true
else
f5_local0 = Cac.GetCacConfig( f5_arg0, f5_arg1, f5_arg2, f5_arg3, f5_arg4, "inUse" )
if not f5_local1 and Engine.InFrontend() and f5_arg4 <= 2 and not f5_local0 then
Cac.SetClassInUse( f5_arg0, f5_arg1, f5_arg2, f5_arg3, f5_arg4, true )
end
end
return f5_local0
end
Cac.SetClassInUse = function ( f6_arg0, f6_arg1, f6_arg2, f6_arg3, f6_arg4, f6_arg5 )
if f6_arg5 == nil then
f6_arg5 = true
end
return Cac.SetCacConfig( f6_arg0, f6_arg1, f6_arg2, f6_arg3, f6_arg4, "inUse", f6_arg5 )
end
Cac.IsSquadMemberInUse = function ( f7_arg0, f7_arg1, f7_arg2 )
local f7_local0 = nil
if f7_arg1 == "privateMatchSquadMembers" then
f7_local0 = true
else
f7_local0 = Cac.GetCacConfig( f7_arg0, f7_arg1, f7_arg2, "inUse" )
end
return f7_local0
end
Cac.SetSquadMemberInUse = function ( f8_arg0, f8_arg1, f8_arg2 )
return Cac.SetCacConfig( f8_arg0, f8_arg1, f8_arg2, "inUse", true )
end
Cac.HasCustomClasses = function ( f9_arg0, f9_arg1, f9_arg2, f9_arg3 )
local f9_local0 = false
for f9_local1 = 0, Cac.GetNumCustomSlots( f9_arg0, f9_arg3 ) - 1, 1 do
if Cac.IsClassInUse( f9_arg0, f9_arg1, f9_arg2, f9_arg3, f9_local1 ) then
f9_local0 = true
break
end
end
return f9_local0
end
Cac.GetFirstCustomClass = function ( f10_arg0, f10_arg1, f10_arg2, f10_arg3 )
for f10_local0 = 0, Cac.GetNumCustomSlots( f10_arg0, f10_arg3 ) - 1, 1 do
if Cac.IsClassInUse( f10_arg0, f10_arg1, f10_arg2, f10_arg3, f10_local0 ) then
return f10_local0
end
end
assert( Cac.HasCustomClasses( f10_arg0, f10_arg1, f10_arg2, f10_arg3 ) )
return 0
end
Cac.IsCaCSlotRestricted = function ( f11_arg0, f11_arg1, f11_arg2, f11_arg3, f11_arg4 )
local f11_local0 = false
if MatchRules.AllowCustomClasses( f11_arg3 ) then
if not f11_arg3 then
f11_arg3 = Cac.GetCustomClassLoc()
end
if not Engine.InFrontend() and f11_arg3 == "loadouts" then
local f11_local1 = CoD.GetStatsGroupForGameMode()
if MatchRules.CustomClassIsRestricted( f11_arg0, CoD.GetStatsGroupForGameMode(), f11_arg1, f11_arg2, f11_arg3, f11_arg4 ) then
f11_local0 = true
end
end
end
return f11_local0
end
Cac.IsCaCSlotLocked = function ( f12_arg0, f12_arg1, f12_arg2, f12_arg3, f12_arg4 )
if not Cac.IsDefaultClass( f12_arg3 ) then
return not Cac.IsClassInUse( f12_arg0, f12_arg1, f12_arg2, f12_arg3, f12_arg4 )
else
end
end
Cac.GetSquadLoc = function ()
local f13_local0
if not Engine.GetDvarBool( "onlinegame" ) or Engine.GetDvarBool( "xblive_privatematch" ) then
f13_local0 = Engine.GetDvarBool( "force_ranking" )
else
f13_local0 = true
end
if Engine.IsAliensMode() then
return "coopSquadMembers"
elseif f13_local0 then
return "squadMembers"
else
return "privateMatchSquadMembers"
end
end
Cac.GetEditSquadMember = function ()
return Engine.GetDvarInt( "ui_editSquadMemberIndex" ) or 0
end
Cac.SetEditSquadMember = function ( f15_arg0 )
Engine.SetDvarInt( "ui_editSquadMemberIndex", f15_arg0 )
end
Cac.GetActiveSquadMember = function ( f16_arg0, f16_arg1 )
local f16_local0 = f16_arg1 or CoD.GetStatsGroupForGameMode()
if f16_local0 ~= CoD.StatsGroup.Ranked or not "activeSquadMember" then
local f16_local1 = "privateMatchActiveSquadMember"
end
if Engine.IsAliensMode() then
local f16_local1 = "coopActiveSquadMember"
end
return Engine.GetPlayerDataEx( f16_arg0, f16_local0, f16_local1 )
end
Cac.SetActiveSquadMember = function ( f17_arg0, f17_arg1 )
local f17_local0 = CoD.GetStatsGroupForGameMode()
local f17_local1
if f17_local0 == CoD.StatsGroup.Ranked then
f17_local1 = "activeSquadMember"
if not f17_local1 then
else
Engine.SetPlayerDataEx( f17_arg0, f17_local0, f17_local1, f17_arg1 )
if f17_local0 == CoD.StatsGroup.Ranked then
syncXP( f17_arg0, f17_arg1 )
end
Cac.SyncPrivateDataFromPlayercard( f17_arg0 )
end
end
f17_local1 = "privateMatchActiveSquadMember"
end
Cac.SyncPrivateDataFromPlayercard = function ( f18_arg0 )
local f18_local0 = Engine.GetPlayerDataEx( f18_arg0, CoD.StatsGroup.Ranked, "activeSquadMember" )
local f18_local1 = Engine.GetPlayerDataEx( f18_arg0, CoD.StatsGroup.Ranked, "squadMembers", f18_local0, "patch" )
local f18_local2 = Engine.GetPlayerDataEx( f18_arg0, CoD.StatsGroup.Ranked, "squadMembers", f18_local0, "patchbacking" )
local f18_local3 = Engine.GetPlayerDataEx( f18_arg0, CoD.StatsGroup.Ranked, "squadMembers", f18_local0, "background" )
for f18_local4 = 0, Cac.Settings.DataLoc.privateMatchSquadMembers.maxClassSlots - 1, 1 do
Engine.SetPlayerDataEx( f18_arg0, CoD.StatsGroup.Private, "privateMatchSquadMembers", f18_local4, "patch", f18_local1 )
Engine.SetPlayerDataEx( f18_arg0, CoD.StatsGroup.Private, "privateMatchSquadMembers", f18_local4, "patchbacking", f18_local2 )
Engine.SetPlayerDataEx( f18_arg0, CoD.StatsGroup.Private, "privateMatchSquadMembers", f18_local4, "background", f18_local3 )
end
end
Cac.GetCustomClassLoc = function ( f19_arg0 )
local f19_local0 = "loadouts"
if f19_arg0 ~= nil then
f19_local0 = f19_arg0
elseif not MatchRules.AllowCustomClasses( f19_arg0 ) then
if not Engine.InFrontend() then
f19_local0 = "defaultClassesTeam1"
else
f19_local0 = "defaultClassesTeam1"
end
end
return f19_local0
end
Cac.GetLoadoutName = function ( f20_arg0, f20_arg1, f20_arg2, f20_arg3, f20_arg4 )
local f20_local0 = Cac.GetCacConfig( f20_arg0, f20_arg1, f20_arg2, f20_arg3, f20_arg4, "name" )
if f20_local0 == "" then
f20_local0 = Engine.Localize( "@MP_LOADOUT_DEFAULT_NAME", f20_arg4 + 1 )
end
return f20_local0
end
Cac.MaxSquadMemberCount = function ( f21_arg0 )
return Cac.Settings.DataLoc[f21_arg0].maxClassSlots
end
Cac.ActiveSquadMemberCount = function ( f22_arg0, f22_arg1 )
local f22_local0 = 0
for f22_local1 = 0, Cac.MaxSquadMemberCount( f22_arg1 ) - 1, 1 do
if Cac.IsSquadMemberInUse( f22_arg0, f22_arg1, f22_local1 ) then
f22_local0 = f22_local0 + 1
end
end
return f22_local0
end
Cac.AddNewSquadMember = function ( f23_arg0, f23_arg1 )
local f23_local0 = Cac.ActiveSquadMemberCount( f23_arg0, f23_arg1 )
if f23_local0 + 1 <= Cac.MaxSquadMemberCount( f23_arg1 ) then
Cac.SetSquadMemberInUse( f23_arg0, f23_arg1, f23_local0 )
return f23_local0
else
DebugPrint( "WARNING: Attempting to add squad member when we are already at max. Ignoring..." )
end
end
Cac.UnlockSquadMember = function ( f24_arg0, f24_arg1, f24_arg2 )
if f24_arg2 < Cac.MaxSquadMemberCount( f24_arg1 ) then
Cac.SetSquadMemberInUse( f24_arg0, f24_arg1, f24_arg2 )
else
DebugPrint( "WARNING: Attempting to unlock squad member past the max index. Ignoring..." )
end
local f24_local0 = Cac.ActiveSquadMemberCount( f24_arg0, f24_arg1 )
for f24_local1 = 1, f24_local0, 1 do
Engine.SetPlayerDataEx( f24_arg0, CoD.GetStatsGroupForGameMode(), "challengeState", "ch_squad_member" .. f24_local1 .. "_purchase", 2 )
end
end
Cac.GetSquadMemberName = function ( f25_arg0, f25_arg1, f25_arg2 )
return Engine.GetPlayerDataEx( f25_arg0, CoD.GetStatsGroupForGameMode(), f25_arg1, f25_arg2, "name" )
end
Cac.SetSquadMemberName = function ( f26_arg0, f26_arg1, f26_arg2, f26_arg3 )
return Engine.SetPlayerDataEx( f26_arg0, CoD.GetStatsGroupForGameMode(), f26_arg1, f26_arg2, "name", f26_arg3 )
end
Cac.HasSquadMemberPrestiged = function ( f27_arg0, f27_arg1, f27_arg2 )
return Engine.GetPlayerDataEx( f27_arg0, CoD.GetStatsGroupForGameMode(), f27_arg1, f27_arg2, "squadMemXP" ) >= Rank.GetRankMaxXP( Rank.GetMaxRank() )
end
Cac.GetSquadMemberPrestigeLevel = function ( f28_arg0, f28_arg1, f28_arg2 )
if not Cac.HasSquadMemberPrestiged( f28_arg0, f28_arg1, f28_arg2 ) then
return 0
end
local f28_local0 = 1
local f28_local1 = Engine.GetPlayerDataEx( f28_arg0, CoD.GetStatsGroupForGameMode(), "characterXP", f28_arg2 )
for f28_local2 = 0, Cac.MaxSquadMemberCount( f28_arg1 ) - 1, 1 do
if f28_local2 ~= f28_arg2 and Cac.IsSquadMemberInUse( f28_arg0, f28_arg1, f28_local2 ) and Cac.HasSquadMemberPrestiged( f28_arg0, f28_arg1, f28_local2 ) and Engine.GetPlayerDataEx( f28_arg0, CoD.GetStatsGroupForGameMode(), "characterXP", f28_local2 ) < f28_local1 then
f28_local0 = f28_local0 + 1
end
end
return f28_local0
end
Cac.GetPrestigeLevel = function ( f29_arg0, f29_arg1 )
local f29_local0 = 0
for f29_local1 = 0, Cac.MaxSquadMemberCount( f29_arg1 ) - 1, 1 do
if Cac.IsSquadMemberInUse( f29_arg0, f29_arg1, f29_local1 ) and Cac.HasSquadMemberPrestiged( f29_arg0, f29_arg1, f29_local1 ) then
f29_local0 = f29_local0 + 1
end
end
return f29_local0
end
Cac.SyncPrestigeLevel = function ( f30_arg0 )
Engine.SetPlayerDataEx( f30_arg0, CoD.GetStatsGroupForGameMode(), "prestige", Cac.GetPrestigeLevel( f30_arg0, Cac.GetSquadLoc() ) )
end
Cac.GetSquadMemberLoadoutUnlockCost = function ( f31_arg0 )
if Cac.Settings.DataLoc.loadouts.baseClassSlots <= f31_arg0 then
return 0
else
return 20 + (f31_arg0 - 3) * 5
end
end
Cac.ValidateAllPlayersPrivateSquadMembers = function ()
for f32_local0 = 0, Engine.GetMaxControllerCount() - 1, 1 do
if Engine.HasActiveLocalClient( f32_local0 ) and Engine.HasPlayerData( f32_local0 ) then
if not Lobby.IsItemOfTypeUnlocked( f32_local0, "wolf", "DLC" ) then
DebugPrint( "You are not Entitled to the Wolf. So removing." )
Engine.SetPlayerDataReservedInt( f32_local0, CoD.StatsGroup.Common, "mp_dog_type", 0 )
end
for f32_local3 = 0, Cac.MaxSquadMemberCount( "privateMatchSquadMembers" ) - 1, 1 do
Cac.ValidateCustomizationItems( f32_local0, "privateMatchSquadMembers", f32_local3 )
if not Engine.IsAliensMode() then
Cac.ValidateLoadoutItems( f32_local0, "privateMatchSquadMembers", f32_local3, "loadouts" )
end
end
if not Engine.IsAliensMode() then
Cac.ValidateCustomizationItems( f32_local0, "squadMembers", Cac.GetActiveSquadMember( f32_local0, CoD.StatsGroup.Ranked ) )
end
end
end
end
Cac.ValidateAllPlayersPublicSquadMembers = function ()
local f33_local0 = Cac.GetSquadLoc()
assert( f33_local0 ~= "privateMatchSquadMembers", "Cac.GetSquadLoc() returned private match location in public lobby." )
for f33_local1 = 0, Engine.GetMaxControllerCount() - 1, 1 do
if Engine.HasActiveLocalClient( f33_local1 ) then
if not Lobby.IsItemOfTypeUnlocked( f33_local1, "wolf", "DLC" ) then
DebugPrint( "You are not Entitled to the Wolf. So removing." )
Engine.SetPlayerDataReservedInt( f33_local1, CoD.StatsGroup.Common, "mp_dog_type", 0 )
end
local f33_local4 = Cac.GetActiveSquadMember( f33_local1 )
Cac.ValidateCustomizationItems( f33_local1, f33_local0, f33_local4 )
if not Engine.IsAliensMode() then
Cac.ValidateLoadoutItems( f33_local1, "squadMembers", f33_local4, "loadouts" )
end
end
end
end