Cac = Cac or {} CharacterCameraPresets = { Lobby = { Position = { -25, 0, 156 }, Rotation = { 0, 0, 0 } }, CharSelectMenu = { Position = { -25, 3, 90 }, Rotation = { 0, 0, 0 } }, LoadoutMenu = { Position = { -25, 0, 156 }, Rotation = { 0, 0, 0 } }, MemberSelect = { Position = { -25, 0, 156 }, Rotation = { 0, 0, 0 } }, CustomizeMenu = { Default = { Position = { -25, 0, 156 }, Rotation = { 0, 0, 0 } }, Head = { Position = { 0, 0, 60 }, Rotation = { 0, 0, 0 } }, Helmet = { Position = { 0, 0, -60 }, Rotation = { 0, 0, 0 } }, Patch = { Position = { 0, 0, 0 }, Rotation = { 0, 0, 0 } } }, ClanDetails = { Left = { Position = { -66, 0, 180 }, Rotation = { 0, 0, 0 } }, Center = { Position = { -19, 0, 180 }, Rotation = { 0, 0, 0 } }, Right = { Position = { 28, 0, 180 }, Rotation = { 0, 0, 0 } } } } local f0_local0 = Cac local f0_local1 = { Animations = { default = "mp_menu_male_idle", idles = { normal = { "mp_menu_male_idle", "mp_menu_male_twitch_A", "mp_menu_male_twitch_B" }, riotshield = { "mp_menu_shield_idle", "mp_menu_shield_twitch_A", "mp_menu_shield_twitch_B" }, knifeonly = { "jug_maniac_idle", "jug_maniac_twitchA", "jug_maniac_twitchB", "jug_maniac_twitchC" }, pistol = { "mp_alien_menu_male_idle", "mp_alien_menu_male_twitch_A", "mp_alien_menu_male_twitch_B" } }, weapon_grabs = { normal_1 = { "mp_menu_male_grab_gun_1_A", "mp_menu_male_grab_gun_2_A" }, normal_2 = { "mp_menu_male_grab_gun_1_B", "mp_menu_male_grab_gun_2_B" }, riotshield = { "mp_menu_grab_shield_1_A", "mp_menu_grab_shield_2_A" }, knifeonly = { "mp_menu_male_grab_knife_1_A", "mp_menu_male_grab_knife_2_A" }, pistol = {} } }, FieldIndexes = { Head = 1, Helmet = 2, Body = 3, Patch = 4, Patchbacking = 5, Background = 6, ClanTag = 7, GuardDog = 8, Announcer = 9 }, Gender = { Male = "m", Female = "f", Special = "b" } } local f0_local2 = {} local f0_local3 = { csv = "mp/cac/heads.csv", LocName = "HEAD", UnlockType = "Head", PublicOnly = false, ImpactsPlayercard = false, SaveRef = function ( f1_arg0, f1_arg1, f1_arg2, f1_arg3 ) local f1_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Helmet] local f1_local1 = Cac.IsCommonGender( Cac.GetGenderFromHeadRef( f1_arg3 ) ) if f1_local1 then f1_local1 = not Cac.IsCommonGender( Cac.GetCurrentGender( f1_arg0, f1_arg1, f1_arg2 ) ) end if f1_local1 then Cac.SetBodyIndex( f1_arg0, f1_arg1, f1_arg2, Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body].GetDefaultRef( f1_arg0, Cac.GetGenderFromHeadRef( f1_arg3 ) ) ) end Cac.SetHeadIndex( f1_arg0, f1_arg1, f1_arg2, f1_arg3 ) if not Cac.DoesHeadUseHelmet( f1_arg3 ) then f1_local0.SaveRef( f1_arg0, f1_arg1, f1_arg2, f1_local0.NoneRef ) end end, GetSavedRef = function ( f2_arg0, f2_arg1, f2_arg2 ) return Cac.GetHeadIndex( f2_arg0, f2_arg1, f2_arg2 ) end, GetSavedModel = function ( f3_arg0, f3_arg1, f3_arg2 ) local f3_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head] return f3_local0.MakeModelName( f3_local0.GetSavedRef( f3_arg0, f3_arg1, f3_arg2 ), Cac.Customization.Fields[Cac.Customization.FieldIndexes.Helmet].GetSavedRef( f3_arg0, f3_arg1, f3_arg2 ) ) end, SelectionPopup = "cac_customize_buttons_popup" } local f0_local4 = package.loaded["LUI.mp_menus.CacCustomize"] if f0_local4 then f0_local4 = LUI.mp_menus.CacCustomize.CustomizePopupGridGenericButton end f0_local3.SelectionButtonFactory = f0_local4 f0_local3.GetName = function ( f4_arg0 ) return Engine.TableLookup( "mp/cac/heads.csv", 0, f4_arg0, 2 ) end f0_local3.PreviewFunction = function ( f5_arg0, f5_arg1, f5_arg2, f5_arg3, f5_arg4, f5_arg5 ) local f5_local0 = {} local f5_local1 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body] local f5_local2 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head] local f5_local3 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Helmet] local f5_local4 = f5_local3.GetSavedRef( f5_arg0, Cac.GetSquadLoc(), f5_arg4 ) if not Cac.DoesHeadUseHelmet( f5_arg3 ) or not f5_local4 then f5_local4 = f5_local3.NoneRef end local f5_local5 = f5_local2.MakeModelName( f5_arg3, f5_local4, f5_arg5 ) if Cac.GetGenderFromBodyRef( f5_local1.GetSavedRef( f5_arg0, Cac.GetSquadLoc(), f5_arg4 ) ) ~= Cac.GetGenderFromHeadRef( f5_arg3 ) then local f5_local6 = f5_local1.GetDefaultRef( f5_arg0, Cac.GetGenderFromHeadRef( f5_arg3 ) ) CharacterScene.ChangeBody( f5_arg2, f5_local1.MakeModelName( f5_local6, f5_arg5 ), Cac.GetPatchIndex( f5_arg0, Cac.GetSquadLoc(), f5_arg4 ) ) f5_local0[f5_local1] = f5_local6 end CharacterScene.ChangeHead( f5_arg2, f5_local5 ) f5_local0[f5_local3] = f5_local4 f5_local0[f5_local2] = f5_arg3 return f5_local0 end f0_local3.MakeModelName = function ( f6_arg0, f6_arg1, f6_arg2 ) local f6_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Helmet] if not f6_arg2 then f6_arg2 = Cac.GetDefaultBodyCamoRef() end if not f6_arg1 then f6_arg1 = f6_local0.NoneRef end return Customization.GetCompleteHeadModelName( f6_arg0, f6_arg1, Cac.GetHeadCamoSuffix( f6_arg2 ) ) end f0_local3.CustomizeCamera = CharacterCameraPresets.CustomizeMenu.Head f0_local3.GetUIMaterial = function ( f7_arg0 ) return "icon_aar_head" end f0_local3.GenderColumn = 3 f0_local3.UseHelmetColumn = 4 f0_local3.IsEntitlementColumn = 5 f0_local3.HideUnlessUnlockedColumn = 6 f0_local3.CustomUnlockText = 7 f0_local3.DLCOffer = 9 f0_local3.ReleaseKillswitch = 10 f0_local3.SecondaryEntitlementColumn = 11 f0_local3.GetDefaultRef = function ( f8_arg0, f8_arg1 ) local f8_local0 = Cac.Customization.GetElementRefsForField( f8_arg0, Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head], f8_arg1 ) assert( #f8_local0 > 0 ) return f8_local0[1] end f0_local4 = { csv = "mp/cac/helmets.csv", LocName = "HELMET", UnlockType = "Helmet", PublicOnly = false, ImpactsPlayercard = false, NoneRef = 0, SaveRef = function ( f9_arg0, f9_arg1, f9_arg2, f9_arg3 ) local f9_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Helmet] local f9_local1 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head] local f9_local2 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body] if not Cac.IsCommonGender( Cac.GetCurrentGender( f9_arg0, f9_arg1, f9_arg2 ) ) then Cac.SetBodyIndex( f9_arg0, f9_arg1, f9_arg2, f9_local2.GetDefaultRef( f9_arg0, Cac.Customization.Gender.Male ) ) Cac.SetHeadIndex( f9_arg0, f9_arg1, f9_arg2, f9_local1.GetDefaultRef( f9_arg0, Cac.Customization.Gender.Male ) ) end Cac.SetHelmetIndex( f9_arg0, f9_arg1, f9_arg2, f9_arg3 ) if not Cac.DoesHeadUseHelmet( f9_local1.GetSavedRef( f9_arg0, f9_arg1, f9_arg2 ) ) and f9_arg3 ~= f9_local0.NoneRef then f9_local1.SaveRef( f9_arg0, f9_arg1, f9_arg2, f9_local1.GetDefaultRef( f9_arg0, Cac.GetCurrentGender( f9_arg0, f9_arg1, f9_arg2 ) ) ) end end, GetSavedRef = function ( f10_arg0, f10_arg1, f10_arg2 ) return Cac.GetHelmetIndex( f10_arg0, f10_arg1, f10_arg2 ) end, SelectionPopup = "cac_customize_buttons_popup" } local f0_local5 = package.loaded["LUI.mp_menus.CacCustomize"] if f0_local5 then f0_local5 = LUI.mp_menus.CacCustomize.CustomizePopupGridGenericButton end f0_local4.SelectionButtonFactory = f0_local5 f0_local4.GetName = function ( f11_arg0 ) return Engine.TableLookup( "mp/cac/helmets.csv", 0, f11_arg0, 2 ) end f0_local4.PreviewFunction = function ( f12_arg0, f12_arg1, f12_arg2, f12_arg3, f12_arg4, f12_arg5 ) local f12_local0 = {} local f12_local1 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body] local f12_local2 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head] local f12_local3 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Helmet] local f12_local4 = Cac.GetHeadIndex( f12_arg0, Cac.GetSquadLoc(), f12_arg4 or Cac.GetEditSquadMember( f12_arg0 ) ) if not Cac.IsCommonGender( Cac.GetGenderFromBodyRef( f12_local1.GetSavedRef( f12_arg0, Cac.GetSquadLoc(), f12_arg4 ) ) ) and f12_arg3 ~= f12_local3.NoneRef then local f12_local5 = f12_local1.GetDefaultRef( f12_arg0, Cac.Customization.Gender.Male ) CharacterScene.ChangeBody( f12_arg2, f12_local1.MakeModelName( f12_local5, f12_arg5 ), Cac.GetPatchIndex( f12_arg0, Cac.GetSquadLoc(), f12_arg4 ) ) f12_local0[f12_local1] = f12_local5 end if f12_arg3 ~= f12_local3.NoneRef and not Cac.DoesHeadUseHelmet( f12_local4 ) then local f12_local5 = Cac.GetCurrentGender( f12_arg0, Cac.GetSquadLoc(), f12_arg4 ) if not Cac.IsCommonGender( f12_local5 ) then f12_local5 = Cac.Customization.Gender.Male end f12_local4 = f12_local2.GetDefaultRef( f12_arg0, f12_local5 ) end CharacterScene.ChangeHead( f12_arg2, Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head].MakeModelName( f12_local4, f12_arg3, f12_arg5 ) ) f12_local0[f12_local3] = f12_arg3 f12_local0[f12_local2] = f12_local4 return f12_local0 end f0_local4.CustomizeCamera = CharacterCameraPresets.CustomizeMenu.Helmet f0_local4.GetUIMaterial = function ( f13_arg0 ) return "icon_aar_helmet" end f0_local4.IsEntitlementColumn = 4 f0_local4.HideUnlessUnlockedColumn = 5 f0_local4.CustomUnlockText = 6 f0_local4.DLCOffer = 8 f0_local4.ReleaseKillswitch = 9 f0_local4.GetDefaultRef = function ( f14_arg0, f14_arg1 ) local f14_local0 = Cac.Customization.GetElementRefsForField( f14_arg0, Cac.Customization.Fields[Cac.Customization.FieldIndexes.Helmet], f14_arg1 ) assert( #f14_local0 > 0 ) return f14_local0[1] end f0_local5 = { csv = "mp/cac/bodies.csv", LocName = "BODY", UnlockType = "Body", PublicOnly = false, ImpactsPlayercard = false, SaveRef = function ( f15_arg0, f15_arg1, f15_arg2, f15_arg3 ) local f15_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head] local f15_local1 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Helmet] Cac.SetBodyIndex( f15_arg0, f15_arg1, f15_arg2, f15_arg3 ) local f15_local2 = Cac.GetGenderFromBodyRef( f15_arg3 ) if f15_local2 == Cac.Customization.Gender.Special then Cac.SetHelmetIndex( f15_arg0, f15_arg1, f15_arg2, f15_local1.NoneRef ) Cac.SetHeadIndex( f15_arg0, f15_arg1, f15_arg2, f15_local0.GetDefaultRef( f15_arg0, f15_local2 ) ) elseif not Cac.IsCommonGender( f15_local2 ) then local f15_local3 = f15_local0.GetDefaultRef( f15_arg0, f15_local2 ) Cac.SetHelmetIndex( f15_arg0, f15_arg1, f15_arg2, f15_local1.NoneRef ) Cac.SetHeadIndex( f15_arg0, f15_arg1, f15_arg2, f15_local3 ) elseif not Cac.IsCommonGender( Cac.GetGenderFromHeadRef( f15_local0.GetSavedRef( f15_arg0, f15_arg1, f15_arg2 ) ) ) then Cac.SetHeadIndex( f15_arg0, f15_arg1, f15_arg2, f15_local0.GetDefaultRef( f15_arg0, f15_local2 ) ) end end, GetSavedRef = function ( f16_arg0, f16_arg1, f16_arg2 ) return Cac.GetBodyIndex( f16_arg0, f16_arg1, f16_arg2 ) end, GetSavedModel = function ( f17_arg0, f17_arg1, f17_arg2 ) local f17_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body] return f17_local0.MakeModelName( f17_local0.GetSavedRef( f17_arg0, f17_arg1, f17_arg2 ) ) end, SelectionPopup = "cac_customize_buttons_popup" } local f0_local6 = package.loaded["LUI.mp_menus.CacCustomize"] if f0_local6 then f0_local6 = LUI.mp_menus.CacCustomize.CustomizePopupGridGenericButton end f0_local5.SelectionButtonFactory = f0_local6 f0_local5.GetName = function ( f18_arg0 ) return Engine.TableLookup( "mp/cac/bodies.csv", 0, f18_arg0, 2 ) end f0_local5.PreviewFunction = function ( f19_arg0, f19_arg1, f19_arg2, f19_arg3, f19_arg4, f19_arg5 ) local f19_local0 = {} local f19_local1 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body] local f19_local2 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head] local f19_local3 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Helmet] local f19_local4 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body].MakeModelName( f19_arg3, f19_arg5 ) local f19_local5 = Cac.GetGenderFromBodyRef( f19_arg3 ) local f19_local6 = Cac.GetSquadLoc() CharacterScene.ChangeBody( f19_arg2, f19_local4, Cac.GetPatchIndex( f19_arg0, f19_local6, f19_arg4 ) ) if Cac.IsCommonGender( f19_local5 ) then if not Cac.IsCommonGender( Cac.GetGenderFromHeadRef( f19_local2.GetSavedRef( f19_arg0, f19_local6, f19_arg4 ) ) ) then local f19_local7 = f19_local2.GetDefaultRef( f19_arg0, f19_local5 ) CharacterScene.ChangeHead( f19_arg2, f19_local2.MakeModelName( f19_local7 ) ) f19_local0[f19_local2] = f19_local7 end elseif f19_local5 == Cac.Customization.Gender.Special then else local f19_local7 = f19_local2.GetDefaultRef( f19_arg0, f19_local5 ) CharacterScene.ChangeHead( f19_arg2, f19_local2.MakeModelName( f19_local7 ) ) f19_local0[f19_local3] = f19_local3.NoneRef f19_local0[f19_local2] = f19_local7 end f19_local0[f19_local1] = f19_arg3 return f19_local0 end f0_local5.MakeModelName = function ( f20_arg0, f20_arg1 ) if not f20_arg1 then f20_arg1 = Cac.GetDefaultBodyCamoRef() end return Engine.TableLookup( "mp/cac/bodies.csv", 0, f20_arg0, 1 ) .. Cac.GetBodyCamoSuffix( f20_arg1 ) end f0_local5.CustomizeCamera = CharacterCameraPresets.CustomizeMenu.Default f0_local5.GetUIMaterial = function ( f21_arg0 ) return "icon_aar_uniform" end f0_local5.GenderColumn = 4 f0_local5.IsEntitlementColumn = 6 f0_local5.HideUnlessUnlockedColumn = 7 f0_local5.CustomUnlockText = 8 f0_local5.DLCOffer = 10 f0_local5.ReleaseKillswitch = 11 f0_local5.GetDefaultRef = function ( f22_arg0, f22_arg1 ) local f22_local0 = Cac.Customization.GetElementRefsForField( f22_arg0, Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body], f22_arg1 ) assert( #f22_local0 > 0 ) return f22_local0[1] end f0_local6 = { csv = "mp/cac/patches.csv", LocName = "PATCH", UnlockType = "Patch", PublicOnly = true, ImpactsPlayercard = true, SaveRef = function ( f23_arg0, f23_arg1, f23_arg2, f23_arg3 ) Cac.SetPatchIndex( f23_arg0, f23_arg1, f23_arg2, f23_arg3 ) end, GetSavedRef = function ( f24_arg0, f24_arg1, f24_arg2 ) return Cac.GetPatchIndex( f24_arg0, f24_arg1, f24_arg2 ) end, SelectionPopup = "cac_customize_grid_popup" } local f0_local7 = package.loaded["LUI.mp_menus.CacCustomize"] if f0_local7 then f0_local7 = LUI.mp_menus.CacCustomize.CustomizePopupGridGraphicalButton end f0_local6.SelectionButtonFactory = f0_local7 f0_local6.CategoryColumn = 5 f0_local6.CategoryNameColumn = 6 f0_local6.CategoryDLCName = "DLC" f0_local6.GetName = function ( f25_arg0 ) return Engine.TableLookup( "mp/cac/patches.csv", 0, f25_arg0, 2 ) end f0_local6.GetQuip = function ( f26_arg0 ) return Engine.TableLookup( "mp/cac/patches.csv", 0, f26_arg0, 3 ) end f0_local6.PreviewFunction = function ( f27_arg0, f27_arg1, f27_arg2, f27_arg3, f27_arg4, f27_arg5 ) CharacterScene.ChangeBody( f27_arg2, Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body].MakeModelName( Cac.GetBodyIndex( f27_arg0, Cac.GetSquadLoc(), f27_arg4 ), f27_arg5 ), f27_arg3 ) f27_arg1:processEvent( { name = "update_playercard", patchEmblem = f27_arg3 } ) end f0_local6.InitFunction = function ( f28_arg0, f28_arg1, f28_arg2, f28_arg3, f28_arg4 ) f28_arg1:processEvent( { name = "update_playercard", patchEmblem = f28_arg3 } ) end f0_local6.CustomizeCamera = CharacterCameraPresets.CustomizeMenu.Patch f0_local6.GetUIMaterial = function ( f29_arg0 ) return Engine.TableLookup( "mp/cac/patches.csv", 0, f29_arg0, 4 ) end f0_local6.IsEntitlementColumn = 7 f0_local6.HideUnlessUnlockedColumn = 8 f0_local6.CustomUnlockText = 9 f0_local6.DLCOffer = 10 f0_local6.ReleaseKillswitch = 11 f0_local6.HideIfItemColumn = 12 f0_local6.GetDefaultRef = function ( f30_arg0, f30_arg1 ) local f30_local0 = Cac.Customization.GetElementRefsForField( f30_arg0, Cac.Customization.Fields[Cac.Customization.FieldIndexes.Patch], f30_arg1 ) assert( #f30_local0 > 0 ) return f30_local0[1] end f0_local7 = { csv = "mp/cac/patchbackings.csv", LocName = "PATCHBACKING", UnlockType = "Patchbacking", PublicOnly = true, ImpactsPlayercard = true, SaveRef = function ( f31_arg0, f31_arg1, f31_arg2, f31_arg3 ) Cac.SetPatchbackingIndex( f31_arg0, f31_arg1, f31_arg2, f31_arg3 ) end, GetSavedRef = function ( f32_arg0, f32_arg1, f32_arg2 ) return Cac.GetPatchbackingIndex( f32_arg0, f32_arg1, f32_arg2 ) end, SelectionPopup = "cac_customize_grid_popup" } local f0_local8 = package.loaded["LUI.mp_menus.CacCustomize"] if f0_local8 then f0_local8 = LUI.mp_menus.CacCustomize.CustomizePopupGridGraphicalButton end f0_local7.SelectionButtonFactory = f0_local8 f0_local7.CategoryColumn = 3 f0_local7.CategoryNameColumn = 4 f0_local7.GetName = function ( f33_arg0 ) return Engine.TableLookup( "mp/cac/patchbackings.csv", 0, f33_arg0, 1 ) end f0_local7.PreviewFunction = function ( f34_arg0, f34_arg1, f34_arg2, f34_arg3, f34_arg4 ) f34_arg1:processEvent( { name = "update_playercard", patchShape = f34_arg3 } ) end f0_local7.CustomizeCamera = CharacterCameraPresets.CustomizeMenu.Patch f0_local7.GetUIMaterial = function ( f35_arg0 ) return Engine.TableLookup( "mp/cac/patchbackings.csv", 0, f35_arg0, 2 ) end f0_local7.IsEntitlementColumn = 5 f0_local7.HideUnlessUnlockedColumn = 6 f0_local7.CustomUnlockText = 7 f0_local8 = { csv = "mp/cac/backgrounds.csv", LocName = "BACKGROUND", UnlockType = "Background", PublicOnly = true, ImpactsPlayercard = true, SaveRef = function ( f36_arg0, f36_arg1, f36_arg2, f36_arg3 ) Cac.SetBackgroundIndex( f36_arg0, f36_arg1, f36_arg2, f36_arg3 ) end, GetSavedRef = function ( f37_arg0, f37_arg1, f37_arg2 ) return Cac.GetBackgroundIndex( f37_arg0, f37_arg1, f37_arg2 ) end, SelectionPopup = "cac_customize_vlist_popup" } local f0_local9 = package.loaded["LUI.mp_menus.CacCustomize"] if f0_local9 then f0_local9 = LUI.mp_menus.CacCustomize.CustomizePopupGridGraphicalButton end f0_local8.SelectionButtonFactory = f0_local9 f0_local8.CategoryColumn = 4 f0_local8.CategoryNameColumn = 5 f0_local8.CategoryDLCName = "DLC Backgrounds" f0_local8.GetName = function ( f38_arg0 ) return Engine.TableLookup( "mp/cac/backgrounds.csv", 0, f38_arg0, 2 ) end f0_local8.PreviewFunction = function ( f39_arg0, f39_arg1, f39_arg2, f39_arg3, f39_arg4 ) f39_arg1:processEvent( { name = "update_character_bg", material = RegisterMaterial( Engine.TableLookup( "mp/cac/backgrounds.csv", 0, f39_arg3, 1 ) ) } ) f39_arg1:processEvent( { name = "update_playercard", background = f39_arg3 } ) end f0_local8.CustomizeCamera = CharacterCameraPresets.CustomizeMenu.Default f0_local8.GetUIMaterial = function ( f40_arg0 ) return Engine.TableLookup( "mp/cac/backgrounds.csv", 0, f40_arg0, 3 ) end f0_local8.IsEntitlementColumn = 6 f0_local8.HideUnlessUnlockedColumn = 7 f0_local8.CustomUnlockText = 8 f0_local8.DLCOffer = 9 f0_local8.ReleaseKillswitch = 10 f0_local8.HideIfItemColumn = 11 f0_local8.GetDefaultRef = function ( f41_arg0, f41_arg1 ) local f41_local0 = Cac.Customization.GetElementRefsForField( f41_arg0, Cac.Customization.Fields[Cac.Customization.FieldIndexes.Background], f41_arg1 ) assert( #f41_local0 > 0 ) return f41_local0[1] end f0_local9 = { LocName = "CLAN_TAG", UnlockType = "ClanTag", PublicOnly = false, ImpactsPlayercard = true, SaveRef = function () end, GetSavedRef = function ( f43_arg0 ) return Engine.GetProfileDataUseEliteClanTag( f43_arg0 ) and Engine.GetClanTag( f43_arg0 ) or Engine.GetCustomClanTag( f43_arg0 ) end, SelectionPopup = "cac_customize_clan_tag_popup", PreviewFunction = function ( f44_arg0, f44_arg1, f44_arg2, f44_arg3, f44_arg4 ) f44_arg1:processEvent( { name = "update_playercard", clantag = f44_arg3 } ) end } local f0_local10 = { csv = "mp/cac/dogs.csv", UnlockType = "GuardDog", LocName = "GUARD_DOG", PublicOnly = false, ImpactsPlayercard = false, SaveRef = function ( f45_arg0, f45_arg1, f45_arg2, f45_arg3 ) Engine.SetPlayerDataReservedInt( f45_arg0, CoD.StatsGroup.Common, "mp_dog_type", f45_arg3 ) end, GetSavedRef = function ( f46_arg0 ) return Engine.GetPlayerDataReservedInt( f46_arg0, CoD.StatsGroup.Common, "mp_dog_type" ) end, GetDefaultRef = function () return 0 end, buttonVariant = GenericButtonSettings.Variants.Info, SelectionPopup = "cac_customize_small_popup", HelpText = "LUA_MENU_GUARD_DOG_CHOICE_MESSAGE", GetName = function ( f48_arg0 ) return Engine.TableLookup( "mp/cac/dogs.csv", 0, tostring( f48_arg0 ), 1 ) end, IsUnlocked = function ( f49_arg0, f49_arg1 ) return Lobby.IsItemOfTypeUnlocked( f49_arg0, Engine.TableLookup( "mp/cac/dogs.csv", 0, tostring( f49_arg1 ), 2 ), "DLC" ) end, DLCOffer = 3, GetUIMaterial = function ( f50_arg0 ) return Engine.TableLookup( "mp/cac/dogs.csv", 0, f50_arg0, 4 ) end, IsEntitlementColumn = 5 } local f0_local11 = { csv = "mp/cac/announcers.csv", LocName = "ANNOUNCER", UnlockType = "Announcer", PublicOnly = false, ImpactsPlayercard = false, SaveRef = function ( f51_arg0, f51_arg1, f51_arg2, f51_arg3 ) f51_arg3 = tonumber( f51_arg3 ) assert( f51_arg3 and f51_arg3 < 128 ) Engine.SetPlayerDataReservedInt( f51_arg0, CoD.StatsGroup.Common, "mp_announcer_type", f51_arg3 ) end, GetSavedRef = function ( f52_arg0 ) return Engine.GetPlayerDataReservedInt( f52_arg0, CoD.StatsGroup.Common, "mp_announcer_type" ) end, IsReleased = function ( f53_arg0 ) return Engine.IsAnnouncerReleased( f53_arg0 ) end, IsUnlocked = function ( f54_arg0, f54_arg1 ) return Engine.IsAnnouncerUnlocked( f54_arg1 ) end, DLCOffer = 3, SelectionPopup = "cac_customize_small_popup", HelpText = "LUA_MENU_MP_CHOOSE_ANNOUNCER", PreviewFunction = function ( f55_arg0, f55_arg1, f55_arg2, f55_arg3, f55_arg4 ) local f55_local0 = Engine.TableLookup( "mp/cac/announcers.csv", 0, tostring( f55_arg3 ), 2 ) if f55_local0 ~= "" then return Engine.PlaySound( f55_local0 ) else end end, GetDefaultRef = function () return 0 end, GetName = function ( f57_arg0 ) return Engine.TableLookup( "mp/cac/announcers.csv", 0, tostring( f57_arg0 ), 1 ) end, buttonVariant = GenericButtonSettings.Variants.Info, IsEntitlementColumn = 4 } f0_local2[1] = f0_local3 f0_local2[2] = f0_local4 f0_local2[3] = f0_local5 f0_local2[4] = f0_local6 f0_local2[5] = f0_local7 f0_local2[6] = f0_local8 f0_local2[7] = f0_local9 f0_local2[8] = f0_local10 f0_local2[9] = f0_local11 f0_local1.Fields = f0_local2 f0_local1.Camos = { File = "mp/cac/camos.csv", Cols = { Ref = 0, Suffix = 1, Name = 2, HeadSuffix = 3 } } f0_local0.Customization = f0_local1 Cac.Customization.GetReqsStringForItem = function ( f58_arg0, f58_arg1, f58_arg2, f58_arg3, f58_arg4 ) local f58_local0 = "" local f58_local1 = "" if SvS.IsSvS() then if IsPublicMatch() then f58_local1 = Engine.Localize( "LUA_MENU_PLAY_ONLINE_TO_UNLOCK" ) end return f58_local0, f58_local1 elseif Cac.IsCustomizationItemDLC( f58_arg1, f58_arg0 ) and Cac.IsCustomizationItemUnlocked( f58_arg2, f58_arg1, f58_arg0 ) == true then f58_local0 = "@DLC_ALREADY_PURCHASED" else f58_local0 = Engine.TableLookup( f58_arg1.csv, 0, f58_arg0, f58_arg1.CustomUnlockText ) end if f58_local0 ~= "" then f58_local0 = Engine.Localize( f58_local0 ) end if f58_local0 == "" and (IsPublicMatch() or IsOnlineAliens()) then local f58_local2 = getUnlockReqsForItemOfType( f58_arg0, f58_arg1.UnlockType ) if f58_local2.chalAndTier ~= "" then f58_local0, f58_local1 = getUnlockInfoStrings( f58_local2.chalAndTier, f58_arg2, f58_arg3, f58_arg4 ) elseif f58_local2.rank ~= "" and tonumber( f58_local2.rank ) > 0 then f58_local0 = Engine.Localize( "@LUA_MENU_UNLOCKED_AT_RANK", tonumber( f58_local2.rank ) + 1 ) elseif f58_local2.rankExt ~= "" and tonumber( f58_local2.rankExt ) > 0 then f58_local0 = Engine.Localize( "@LUA_MENU_UNLOCKED_EXT_RANK", tonumber( f58_local2.rankExt ) + 1 ) elseif f58_local2.prestigeExt ~= "" and tonumber( f58_local2.prestigeExt ) > 0 then f58_local0 = Engine.Localize( "@ALIENS_REQ_PRESTIGE", tonumber( f58_local2.prestigeExt ) ) elseif f58_local2.prestige ~= "" and tonumber( f58_local2.prestige ) > 0 then f58_local0 = Engine.Localize( "@LUA_MENU_REACH_PRESTIGE", tonumber( f58_local2.prestige ) ) elseif f58_local2.escapesExt ~= "" and tonumber( f58_local2.escapesExt ) > 0 then local f58_local3 = tonumber( f58_local2.escapesExt ) if f58_local3 == 1 then f58_local0 = Engine.Localize( "@ALIENS_REQ_ESCAPE" ) else f58_local0 = Engine.Localize( "@ALIENS_REQ_ESCAPE_N_TIMES", f58_local3 ) end elseif f58_local2.highestRelicEscapeExt ~= "" and tonumber( f58_local2.highestRelicEscapeExt ) > 0 then f58_local0 = Engine.Localize( "@ALIENS_REQ_N_RELICS", tonumber( f58_local2.highestRelicEscapeExt ) ) elseif f58_local2.killsExt ~= "" and tonumber( f58_local2.killsExt ) > 0 then f58_local0 = Engine.Localize( "@ALIENS_REQ_N_KILLS", tonumber( f58_local2.killsExt ) ) elseif f58_local2.revivesExt ~= "" and tonumber( f58_local2.revivesExt ) > 0 then f58_local0 = Engine.Localize( "@ALIENS_REQ_N_REVIVES", tonumber( f58_local2.revivesExt ) ) else f58_local0 = Engine.Localize( "@LUA_MENU_UNLOCKED_BY_DEFAULT" ) end end return f58_local0, f58_local1 end function makeGenderFilter( f59_arg0 ) if type( f59_arg0 ) == "string" then return function ( f60_arg0 ) return f60_arg0 == f59_arg0 end else return f59_arg0 end end Cac.Customization.GetElementRefsForField = function ( f61_arg0, f61_arg1, f61_arg2 ) assert( f61_arg1.csv ) local f61_local0 = {} local f61_local1 = 0 local f61_local2 = 1000 local f61_local3 = f61_arg2 and f61_arg1.GenderColumn f61_arg2 = makeGenderFilter( f61_arg2 ) for f61_local4 = f61_local1, f61_local2, 1 do if Engine.TableLookup( f61_arg1.csv, 0, tostring( f61_local4 ), 0 ) == "" then break elseif not Cac.ShouldConcealCacItem( f61_arg0, f61_arg1, tostring( f61_local4 ) ) and (not f61_local3 or f61_arg2( Engine.TableLookup( f61_arg1.csv, 0, tostring( f61_local4 ), f61_arg1.GenderColumn ) )) then table.insert( f61_local0, tostring( f61_local4 ) ) end end return f61_local0 end Cac.Customization.GetElementCountForField = function ( f62_arg0 ) local f62_local0 = 0 local f62_local1 = Engine.TableLookup( f62_arg0.csv, 0, tostring( f62_local0 ), 2 ) while f62_local1 ~= "" do f62_local0 = f62_local0 + 1 f62_local1 = Engine.TableLookup( f62_arg0.csv, 0, tostring( f62_local0 ), 2 ) end return f62_local0 end Cac.Customization.GetCategorizedElementRefsForField = function ( f63_arg0, f63_arg1, f63_arg2 ) local f63_local0 = {} local f63_local1 = f63_arg2 and f63_arg1.GenderColumn f63_arg2 = makeGenderFilter( f63_arg2 ) if f63_arg1.CategoryColumn and f63_arg1.CategoryNameColumn then local f63_local2 = 0 local f63_local3 = 1000 local f63_local4 = f63_arg1.unlockType local f63_local5 = {} local f63_local6 = "" local f63_local7 = 0 for f63_local8 = f63_local2, f63_local3, 1 do if Engine.TableLookup( f63_arg1.csv, 0, tostring( f63_local8 ), 1 ) == "" then break elseif not Cac.ShouldConcealCacItem( f63_arg0, f63_arg1, tostring( f63_local8 ) ) then local f63_local11 = Engine.TableLookup( f63_arg1.csv, 0, tostring( f63_local8 ), f63_arg1.CategoryColumn ) if not f63_local5[f63_local11] then table.insert( f63_local0, { name = Engine.Localize( Engine.TableLookup( f63_arg1.csv, 0, tostring( f63_local8 ), f63_arg1.CategoryNameColumn ) ), elements = {}, dlc = f63_arg1.CategoryDLCName == f63_local11 } ) f63_local5[f63_local11] = #f63_local0 end if not f63_local1 or f63_arg2( Engine.TableLookup( f63_arg1.csv, 0, tostring( f63_local8 ), f63_arg1.GenderColumn ) ) then f63_local7 = f63_local5[f63_local11] table.insert( f63_local0[f63_local5[f63_local11]].elements, tostring( f63_local8 ) ) end end end if f63_arg1.CategoryDLCName then for f63_local12, f63_local13 in ipairs( f63_local0 ) do if f63_local13.dlc then f63_local13.elements = LUI.ReverseTable( f63_local13.elements ) end end end else f63_local0 = { { name = Engine.Localize( "@LUA_MENU_CUSTOMIZATION_FIELD_" .. f63_arg1.LocName .. "_CAPS" ), elements = Cac.Customization.GetElementRefsForField( f63_arg0, f63_arg1, f63_arg2 ) } } local f63_local2 = function ( f64_arg0, f64_arg1 ) local f64_local0 = tonumber( f64_arg0 ) local f64_local1 = tonumber( f64_arg1 ) local f64_local2 = Cac.IsCustomizationItemDLC( f63_arg1, f64_local0 ) local f64_local3 = Cac.IsCustomizationItemDLC( f63_arg1, f64_local1 ) if f64_local2 ~= f64_local3 then return f64_local3 elseif f64_local2 then return f64_local1 < f64_local0 else return f64_local0 < f64_local1 end end for f63_local6, f63_local7 in ipairs( f63_local0 ) do table.sort( f63_local7.elements, f63_local2 ) end end return f63_local0 end Cac.GetDefaultBodyModel = function ( f65_arg0, f65_arg1 ) local f65_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body] return f65_local0.MakeModelName( f65_local0.GetDefaultRef( f65_arg0, f65_arg1 ) ) end Cac.GetDefaultHeadModel = function ( f66_arg0, f66_arg1 ) local f66_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head] return f66_local0.MakeModelName( f66_local0.GetDefaultRef( f66_arg0, f66_arg1 ) ) end Cac.GetDefaultBodyCamoRef = function () return Engine.TableLookupByRow( Cac.Customization.Camos.File, 4, Cac.Customization.Camos.Cols.Ref ) end Cac.GetCamoRefs = function () local f68_local0 = {} local f68_local1 = 0 local f68_local2 = 1000 for f68_local3 = f68_local1, f68_local2, 1 do if Engine.TableLookup( Cac.Customization.Camos.File, Cac.Customization.Camos.Cols.Ref, tostring( f68_local3 ), Cac.Customization.Camos.Cols.Suffix ) == "" then break end table.insert( f68_local0, tostring( f68_local3 ) ) end return f68_local0 end Cac.GetBodyCamoSuffix = function ( f69_arg0 ) return Engine.TableLookup( Cac.Customization.Camos.File, Cac.Customization.Camos.Cols.Ref, f69_arg0, Cac.Customization.Camos.Cols.Suffix ) end Cac.GetHeadCamoSuffix = function ( f70_arg0 ) return Engine.TableLookup( Cac.Customization.Camos.File, Cac.Customization.Camos.Cols.Ref, f70_arg0, Cac.Customization.Camos.Cols.HeadSuffix ) end Cac.GetBodyCamoName = function ( f71_arg0 ) return Engine.Localize( Engine.TableLookup( Cac.Customization.Camos.File, Cac.Customization.Camos.Cols.Ref, f71_arg0, Cac.Customization.Camos.Cols.Name ) ) end Cac.GetHeadIndex = function ( f72_arg0, f72_arg1, f72_arg2 ) return Cac.GetCacConfig( f72_arg0, f72_arg1, f72_arg2, "head" ) end Cac.SetHeadIndex = function ( f73_arg0, f73_arg1, f73_arg2, f73_arg3 ) Cac.SetCacConfig( f73_arg0, f73_arg1, f73_arg2, "head", f73_arg3 ) end Cac.GetHelmetIndex = function ( f74_arg0, f74_arg1, f74_arg2 ) return Cac.GetCacConfig( f74_arg0, f74_arg1, f74_arg2, "helmet" ) end Cac.SetHelmetIndex = function ( f75_arg0, f75_arg1, f75_arg2, f75_arg3 ) Cac.SetCacConfig( f75_arg0, f75_arg1, f75_arg2, "helmet", f75_arg3 ) end Cac.GetBodyIndex = function ( f76_arg0, f76_arg1, f76_arg2 ) return Cac.GetCacConfig( f76_arg0, f76_arg1, f76_arg2, "body" ) end Cac.SetBodyIndex = function ( f77_arg0, f77_arg1, f77_arg2, f77_arg3 ) Cac.SetCacConfig( f77_arg0, f77_arg1, f77_arg2, "body", f77_arg3 ) end Cac.GetPatchIndex = function ( f78_arg0, f78_arg1, f78_arg2 ) return Cac.GetCacConfig( f78_arg0, f78_arg1, f78_arg2, "patch" ) end Cac.SetPatchIndex = function ( f79_arg0, f79_arg1, f79_arg2, f79_arg3 ) Cac.SetCacConfig( f79_arg0, f79_arg1, f79_arg2, "patch", f79_arg3 ) end Cac.GetPatchbackingIndex = function ( f80_arg0, f80_arg1, f80_arg2 ) return Cac.GetCacConfig( f80_arg0, f80_arg1, f80_arg2, "patchbacking" ) end Cac.SetPatchbackingIndex = function ( f81_arg0, f81_arg1, f81_arg2, f81_arg3 ) Cac.SetCacConfig( f81_arg0, f81_arg1, f81_arg2, "patchbacking", f81_arg3 ) end Cac.GetBackgroundIndex = function ( f82_arg0, f82_arg1, f82_arg2 ) return Cac.GetCacConfig( f82_arg0, f82_arg1, f82_arg2, "background" ) end Cac.SetBackgroundIndex = function ( f83_arg0, f83_arg1, f83_arg2, f83_arg3 ) Cac.SetCacConfig( f83_arg0, f83_arg1, f83_arg2, "background", f83_arg3 ) end Cac.SetDogIndex = function ( f84_arg0, f84_arg1 ) Engine.SetPlayerDataEx( f84_arg0, CoD.StatsGroup.Ranked, "dogType", f84_arg1 ) end Cac.GetGenderFromHeadRef = function ( f85_arg0 ) local f85_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head] return Engine.TableLookup( f85_local0.csv, 0, f85_arg0, f85_local0.GenderColumn ) end Cac.GetGenderFromBodyRef = function ( f86_arg0 ) local f86_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body] return Engine.TableLookup( f86_local0.csv, 0, f86_arg0, f86_local0.GenderColumn ) end Cac.GetCurrentGender = function ( f87_arg0, f87_arg1, f87_arg2 ) return Cac.GetGenderFromBodyRef( Cac.Customization.Fields[Cac.Customization.FieldIndexes.Body].GetSavedRef( f87_arg0, f87_arg1, f87_arg2 ) ) end Cac.IsCommonGender = function ( f88_arg0 ) local f88_local0 if f88_arg0 ~= Cac.Customization.Gender.Male and f88_arg0 ~= Cac.Customization.Gender.Female then f88_local0 = false else f88_local0 = true end return f88_local0 end Cac.ResetGenderDependantFields = function ( f89_arg0, f89_arg1, f89_arg2, f89_arg3 ) assert( f89_arg3 ) for f89_local7, f89_local8 in ipairs( Cac.Customization.Fields ) do if f89_local8.GenderColumn then for f89_local3 = 0, 1000, 1 do local f89_local6 = tostring( f89_local3 ) if Engine.TableLookup( f89_local8.csv, 0, f89_local6, 1 ) == "" then DebugPrint( "WARNING: did not find a suitable value when resetting field " .. f89_local8.LocName .. " with gender restriction " .. f89_arg3 ) end if f89_arg3 == Engine.TableLookup( f89_local8.csv, 0, tostring( f89_local3 ), f89_local8.GenderColumn ) then f89_local8.SaveRef( f89_arg0, f89_arg1, f89_arg2, f89_local6 ) end end end end end Cac.IsCustomizationItemUnlocked = function ( f90_arg0, f90_arg1, f90_arg2, f90_arg3 ) return Cac.IsLoadOutItemUnlocked( f90_arg0, f90_arg1, f90_arg2, f90_arg3 ) end Cac.IsCamoReticleItemUnlocked = function ( f91_arg0, f91_arg1, f91_arg2, f91_arg3 ) return Cac.IsLoadOutItemUnlocked( f91_arg0, f91_arg1, f91_arg2, f91_arg3 ) end Cac.IsWeaponItemUnlocked = function ( f92_arg0, f92_arg1, f92_arg2, f92_arg3 ) return Cac.IsLoadOutItemUnlocked( f92_arg0, f92_arg1, f92_arg2, f92_arg3 ) end Cac.IsLoadOutItemUnlocked = function ( f93_arg0, f93_arg1, f93_arg2, f93_arg3 ) if Engine.IsUserAGuest( f93_arg0 ) or not Engine.IsUserSignedInToLive( f93_arg0 ) then f93_arg0 = Engine.GetFirstActiveController() end if f93_arg1.IsUnlocked then return f93_arg1.IsUnlocked( f93_arg0, f93_arg2 ) elseif IsPublicMatch() or f93_arg3 or IsOnlineAliens() then return Lobby.IsItemOfTypeUnlocked( f93_arg0, f93_arg2, f93_arg1.UnlockType ) else return true end end Cac.IsCustomizationItemDLC = function ( f94_arg0, f94_arg1 ) assert( f94_arg0.csv ) if f94_arg0.DLCOffer and Engine.TableLookup( f94_arg0.csv, 0, f94_arg1, f94_arg0.DLCOffer ) ~= "" then return true elseif f94_arg0.IsEntitlementColumn and Engine.TableLookup( f94_arg0.csv, 0, f94_arg1, f94_arg0.IsEntitlementColumn ) == "2" then return true elseif f94_arg0.SecondaryEntitlementColumn and Engine.TableLookup( f94_arg0.csv, 0, f94_arg1, f94_arg0.SecondaryEntitlementColumn ) == "2" then return true else return false end end Cac.ShouldConcealCacItem = function ( f95_arg0, f95_arg1, f95_arg2 ) if f95_arg1.HideIfItemColumn then local f95_local0 = Engine.TableLookup( f95_arg1.csv, 0, f95_arg2, f95_arg1.HideIfItemColumn ) if f95_local0 ~= "" and Cac.IsLoadOutItemUnlocked( f95_arg0, f95_arg1, f95_local0 ) then return true end end if f95_arg1.IsReleased and not f95_arg1.IsReleased( f95_arg2 ) then return true end local f95_local0 = f95_arg1.IsEntitlementColumn and Engine.TableLookup( f95_arg1.csv, 0, f95_arg2, f95_arg1.IsEntitlementColumn ) or nil local f95_local1 = f95_arg1.SecondaryEntitlementColumn and Engine.TableLookup( f95_arg1.csv, 0, f95_arg2, f95_arg1.SecondaryEntitlementColumn ) or nil local f95_local2 if f95_local0 ~= "2" and f95_local1 ~= "2" then f95_local2 = false else f95_local2 = true end local f95_local3 if f95_local0 ~= "3" and f95_local1 ~= "3" then f95_local3 = false else f95_local3 = true end if ((f95_arg1.HideUnlessUnlockedColumn and Engine.TableLookup( f95_arg1.csv, 0, f95_arg2, f95_arg1.HideUnlessUnlockedColumn ) or false) == "1" or (f95_local2 or f95_local3) and not IsPublicMatch() and not IsOnlineAliens()) and not Cac.IsLoadOutItemUnlocked( f95_arg0, f95_arg1, f95_arg2, true ) then return true elseif f95_arg1.ReleaseKillswitch and (f95_local0 ~= "1" or not Cac.IsLoadOutItemUnlocked( f95_arg0, f95_arg1, f95_arg2, true )) then local f95_local4 = Engine.TableLookup( f95_arg1.csv, 0, f95_arg2, f95_arg1.ReleaseKillswitch ) local f95_local5 if f95_local4 ~= "" and Engine.GetDvarInt( f95_local4 ) ~= 1 then f95_local5 = false else f95_local5 = true end if not f95_local5 then return true end end return false end Cac.DoesHeadUseHelmet = function ( f96_arg0 ) local f96_local0 = Cac.Customization.Fields[Cac.Customization.FieldIndexes.Head] return Engine.TableLookup( f96_local0.csv, 0, f96_arg0, f96_local0.UseHelmetColumn ) == "1" end Cac.GetRandomIdleAnim = function ( f97_arg0, f97_arg1 ) local f97_local0 = Cac.Customization.Animations.idles.normal if Engine.IsAliensMode() then f97_local0 = Cac.Customization.Animations.idles.pistol elseif string.find( f97_arg0, "riotshield" ) then f97_local0 = Cac.Customization.Animations.idles.riotshield elseif string.find( f97_arg0, "knifeonly" ) then f97_local0 = Cac.Customization.Animations.idles.knifeonly end local f97_local1 = math.random( 1, #f97_local0 ) if f97_arg1 and f97_local0[f97_local1] == f97_arg1 and #f97_local0 > 1 then if #f97_local0 < f97_local1 + 1 then f97_local1 = f97_local1 - 1 else f97_local1 = f97_local1 + 1 end end return f97_local0[f97_local1] end NewIconsTable = { File = "mp/mDLCNewIcons.csv", Cols = { Idx = 0, Item = 1, Type = 2, ReleaseKillswitch = 3 }, Size = 600, CACItemTypes = { "Weapon_Primary", "Weapon_Secondary", "Camo", "Patch", "Background", "Head", "Helmet", "Body", "Special", "LoadoutSlot", "Announcer" } } Cac.TryGetFieldFromType = function ( f98_arg0 ) for f98_local3, f98_local4 in ipairs( Cac.Customization.Fields ) do if f98_local4.UnlockType then if f98_local4.UnlockType == f98_arg0 then return f98_local4 elseif f98_arg0 == "Special" and f98_local4.UnlockType == "Body" then return f98_local4 end end end end Cac.AnyUnseenMDLCItems = function ( f99_arg0, f99_arg1, f99_arg2 ) if not Engine.InFrontend() or not IsPublicMatch() then return false elseif f99_arg2 then f99_arg2 = makeGenderFilter( f99_arg2 ) end local f99_local0 = {} local f99_local1 = 0 local f99_local2 = 0 repeat local f99_local3 = Engine.TableLookupByRow( NewIconsTable.File, f99_local2, NewIconsTable.Cols.Item ) local f99_local4 = Engine.TableLookupByRow( NewIconsTable.File, f99_local2, NewIconsTable.Cols.Type ) local f99_local5 = Engine.TableLookupByRow( NewIconsTable.File, f99_local2, NewIconsTable.Cols.ReleaseKillswitch ) if f99_local3 == "" then break else if f99_local5 ~= "" and Engine.GetDvarInt( f99_local5 ) ~= 1 then local f99_local6 = false else local f99_local6 = true end if f99_local5 == "AnnouncerCheck" then local f99_local6 = Engine.IsAnnouncerReleased( f99_local3 ) end if f99_local6 and not Engine.GetPlayerDataEx( f99_arg0, CoD.StatsGroup.Common, "iconNew", f99_local2 ) then local f99_local7 = false if f99_local4 == "Camo" then f99_local7 = Cac.ShouldHideCamoOrReticleEntitlement( f99_arg0, f99_local3 ) else local f99_local8 = Cac.TryGetFieldFromType( f99_local4 ) if f99_local8 then if Cac.ShouldConcealCacItem( f99_arg0, f99_local8, f99_local3 ) then f99_local7 = true elseif f99_arg2 and f99_local8.GenderColumn and not f99_arg2( Engine.TableLookup( f99_local8.csv, 0, tostring( f99_local3 ), f99_local8.GenderColumn ) ) then f99_local7 = true end end end if not f99_local7 then if not f99_local0[f99_local4] then f99_local0[f99_local4] = {} end table.insert( f99_local0[f99_local4], f99_local3 ) f99_local1 = f99_local1 + 1 end end f99_local2 = f99_local2 + 1 end until f99_local2 >= NewIconsTable.Size if f99_arg1 then for f99_local6, f99_local7 in pairs( f99_arg1 ) do if f99_local0[f99_local7] then return true end end return false else return f99_local1 > 0 end end Cac.GetRowForNewIconItem = function ( f100_arg0, f100_arg1 ) local f100_local0 = 0 repeat local f100_local1 = Engine.TableLookupByRow( NewIconsTable.File, f100_local0, NewIconsTable.Cols.Item ) local f100_local2 = Engine.TableLookupByRow( NewIconsTable.File, f100_local0, NewIconsTable.Cols.Type ) if f100_local1 == "" then return nil elseif f100_local1 == f100_arg0 and f100_local2 == f100_arg1 then return f100_local0 end f100_local0 = f100_local0 + 1 until f100_local0 >= NewIconsTable.Size end Cac.ItemHasNewIcon = function ( f101_arg0, f101_arg1, f101_arg2, f101_arg3 ) local f101_local0 = false if Engine.InFrontend() and IsPublicMatch() then if f101_arg3 then if not Cac.ShouldConcealCacItem( f101_arg0, f101_arg3, f101_arg1 ) then local f101_local1 = Cac.GetRowForNewIconItem( f101_arg1, f101_arg2 or f101_arg3.UnlockType ) if f101_local1 and not Engine.GetPlayerDataEx( f101_arg0, CoD.StatsGroup.Common, "iconNew", f101_local1 ) then f101_local0 = true end end else local f101_local1 = Cac.GetRowForNewIconItem( f101_arg1, f101_arg2 ) if f101_local1 and not Engine.GetPlayerDataEx( f101_arg0, CoD.StatsGroup.Common, "iconNew", f101_local1 ) then f101_local0 = true end end end return f101_local0 end Cac.MarkItemNoMoreNewIcon = function ( f102_arg0, f102_arg1, f102_arg2 ) local f102_local0 = Cac.GetRowForNewIconItem( f102_arg1, f102_arg2 ) if f102_local0 then Engine.SetPlayerDataEx( f102_arg0, CoD.StatsGroup.Common, "iconNew", f102_local0, true ) end end Cac.ClearAllNewIconsForType = function ( f103_arg0, f103_arg1 ) local f103_local0 = 0 repeat local f103_local1 = Engine.TableLookupByRow( NewIconsTable.File, f103_local0, NewIconsTable.Cols.Item ) local f103_local2 = Engine.TableLookupByRow( NewIconsTable.File, f103_local0, NewIconsTable.Cols.Type ) if f103_local1 == "" then break else if f103_local2 == f103_arg1 then Engine.SetPlayerDataEx( f103_arg0, CoD.StatsGroup.Common, "iconNew", f103_local0, true ) end f103_local0 = f103_local0 + 1 end until f103_local0 >= NewIconsTable.Size end Cac.AnyNewIconsForWeaponsOfClass = function ( f104_arg0, f104_arg1 ) if not Engine.InFrontend() or not IsPublicMatch() then return false end local f104_local0 = 0 repeat local f104_local1 = Engine.TableLookupByRow( NewIconsTable.File, f104_local0, NewIconsTable.Cols.Item ) local f104_local2 = Engine.TableLookupByRow( NewIconsTable.File, f104_local0, NewIconsTable.Cols.Type ) if f104_local1 == "" then break else if f104_local2 == "Weapon_Primary" or f104_local2 == "Weapon_Secondary" then local f104_local3 = Engine.TableLookupByRow( NewIconsTable.File, f104_local0, NewIconsTable.Cols.ReleaseKillswitch ) local f104_local4 if f104_local3 ~= "" and Engine.GetDvarInt( f104_local3 ) ~= 1 then f104_local4 = false else f104_local4 = true end if f104_local4 and Cac.GetWeaponClass( f104_local1 ) == f104_arg1 and not Engine.GetPlayerDataEx( f104_arg0, CoD.StatsGroup.Common, "iconNew", f104_local0 ) then return true end end f104_local0 = f104_local0 + 1 end until f104_local0 >= NewIconsTable.Size return false end Cac.ValidateCustomizationItems = function ( f105_arg0, f105_arg1, f105_arg2 ) for f105_local6, f105_local7 in ipairs( Cac.Customization.Fields ) do if f105_local7.GetSavedRef and f105_local7.GetDefaultRef and f105_local7.SaveRef then local f105_local3 = f105_local7.GetSavedRef( f105_arg0, f105_arg1, f105_arg2 ) local f105_local4 = true if f105_arg1 == "privateMatchSquadMembers" and Cac.IsCustomizationItemDLC( f105_local7, f105_local3 ) then f105_local4 = Cac.IsCustomizationItemUnlocked( f105_arg0, f105_local7, f105_local3, true ) else f105_local4 = Cac.IsCustomizationItemUnlocked( f105_arg0, f105_local7, f105_local3, false ) end if f105_local3 and not f105_local4 then local f105_local5 = Cac.GetCurrentGender( f105_arg0, f105_arg1, f105_arg2 ) if f105_local7.GenderColumn and not Cac.IsCommonGender( f105_local5 ) then Cac.ResetGenderDependantFields( f105_arg0, f105_arg1, f105_arg2, Cac.Customization.Gender.Male ) else f105_local7.SaveRef( f105_arg0, f105_arg1, f105_arg2, f105_local7.GetDefaultRef( f105_arg0, f105_local5 ) ) end end end end end