1238 lines
37 KiB
Lua
1238 lines
37 KiB
Lua
local f0_local0 = module
|
|
local f0_local1, f0_local2 = ...
|
|
f0_local0( f0_local1, package.seeall )
|
|
DebugPrint( "Registering " .. _NAME )
|
|
function InitGameTypeToAliens()
|
|
MatchRules.SetData( "gametype", "aliens" )
|
|
MatchRules.LoadMatchRulesDataDefault()
|
|
end
|
|
|
|
function AliensRunConfig( f2_arg0 )
|
|
assert( Engine.IsAliensMode(), "Running Aliens Config when not in aliens mode\n" )
|
|
if Engine.IsAliensMode() then
|
|
Engine.Exec( MPConfig.default_aliens, f2_arg0 )
|
|
end
|
|
end
|
|
|
|
function IsChaosMode()
|
|
assert( not Engine.InFrontend() )
|
|
return Game.GetOmnvar( "ui_alien_chaos" )
|
|
end
|
|
|
|
function FixGameModeTextForChaos( f4_arg0 )
|
|
if Engine.IsAliensMode() and LUI.mp_menus.Aliens.IsChaosEnabled() then
|
|
f4_arg0 = Engine.Localize( "@ALIENS_CHAOS_MODE" )
|
|
end
|
|
return f4_arg0
|
|
end
|
|
|
|
AliensMemberListSpacing = 34
|
|
AlienPerks = {
|
|
File = "mp/alien/perks_tree.csv",
|
|
Cols = {
|
|
Idx = 0,
|
|
Ref = 1,
|
|
UnlockedAtRank = 2,
|
|
PointCost = 3,
|
|
Name = 4,
|
|
Desc = 5,
|
|
Icon = 6,
|
|
IsUpgrade = 7,
|
|
Category = 8,
|
|
TokenUpgradeName = 9
|
|
},
|
|
MaxPerks = 100
|
|
}
|
|
AlienNerfs = {
|
|
File = "mp/alien/prestige_nerf.csv",
|
|
Cols = {
|
|
Idx = 0,
|
|
Ref = 1,
|
|
UnlockedAtRank = 2,
|
|
Name = 3,
|
|
Desc = 4,
|
|
Icon = 5,
|
|
IsUpgrade = 6
|
|
},
|
|
MaxNerfs = 100,
|
|
AlienNerfSlots = 5
|
|
}
|
|
AlienAbilities = {
|
|
File = "mp/alien/dpad_tree.csv",
|
|
FileAlt = "mp/alien/dpad_tree_beacon.csv",
|
|
Cols = {
|
|
Idx = 0,
|
|
Ref = 1,
|
|
UnlockedAtRank = 2,
|
|
PointCost = 3,
|
|
CurrencyCost = 4,
|
|
Name = 5,
|
|
Desc = 6,
|
|
Icon = 7,
|
|
DpadIcon = 8,
|
|
IsUpgrade = 9,
|
|
Category = 10
|
|
},
|
|
MaxAbilities = 100,
|
|
Up = 0,
|
|
Down = 100,
|
|
Left = 200,
|
|
Right = 300,
|
|
Types = {
|
|
"munition",
|
|
"support",
|
|
"offense",
|
|
"defense"
|
|
}
|
|
}
|
|
AlienCraftingItems = {
|
|
File = "mp/alien/crafting_items.csv",
|
|
Cols = {
|
|
Idx = 0,
|
|
Ref = 1,
|
|
Name = 2,
|
|
Icon = 3
|
|
},
|
|
MaxItems = 100
|
|
}
|
|
AlienCraftingRecipes = {
|
|
File = "mp/alien/crafting_items.csv",
|
|
Cols = {
|
|
Idx = 0,
|
|
Ref = 1,
|
|
Slot1Material = 2,
|
|
Slot2Material = 3,
|
|
Slot3Material = 4,
|
|
Slot4Material = 5
|
|
},
|
|
MaxItems = 100
|
|
}
|
|
AlienRanks = {
|
|
File = "mp/alien/rankTable.csv",
|
|
Cols = {
|
|
Idx = 0,
|
|
Rank = 1,
|
|
MinXP = 2,
|
|
XPToNext = 3,
|
|
ShortRank = 4,
|
|
FullRank = 5,
|
|
Icon = 6,
|
|
MaxXP = 7,
|
|
WeaponUnlock = 8,
|
|
PerkUnlock = 9,
|
|
Challenge = 10,
|
|
Camo = 11,
|
|
Attachment = 12,
|
|
Level = 13,
|
|
DisplayLevel = 14,
|
|
FeatureUnlock = 15,
|
|
IngameRank = 16,
|
|
UnlockString = 17
|
|
},
|
|
MaxLevel = 29,
|
|
MaxPrestige = 25,
|
|
SuperMaxLevel = 30
|
|
}
|
|
AlienRankIcons = {
|
|
File = "mp/alien/rankIconTable.csv",
|
|
Cols = {
|
|
PrestigeItems = 0,
|
|
PrestigeValues = 1
|
|
},
|
|
Rows = {
|
|
MaxPrestige = "maxprestige",
|
|
PrestigeDiscount = "prestigediscount"
|
|
}
|
|
}
|
|
function GetDataLabelForSlot( f5_arg0 )
|
|
if f5_arg0 == AlienAbilities.Up then
|
|
return "munition"
|
|
elseif f5_arg0 == AlienAbilities.Down then
|
|
return "support"
|
|
elseif f5_arg0 == AlienAbilities.Left then
|
|
return "defense"
|
|
elseif f5_arg0 == AlienAbilities.Right then
|
|
return "offense"
|
|
else
|
|
assert( false, "Invalid Action Slot: Valid options are AlienAbilities.Up, AlienAbilities.Down, AlienAbilities.Left, AlienAbilities.Right" )
|
|
end
|
|
end
|
|
|
|
function GetDataLabelForPerk( f6_arg0 )
|
|
return "perk_" .. f6_arg0
|
|
end
|
|
|
|
function GetBasePerkList( f7_arg0 )
|
|
local f7_local0 = assert
|
|
local f7_local1
|
|
if f7_arg0 ~= 0 and f7_arg0 ~= 1 then
|
|
f7_local1 = false
|
|
else
|
|
f7_local1 = true
|
|
end
|
|
f7_local0( f7_local1, "Invalid Perk Slot" )
|
|
if f7_arg0 == 0 then
|
|
f7_local0 = 0
|
|
if not f7_local0 then
|
|
|
|
else
|
|
f7_local1 = f7_local0 + AlienPerks.MaxPerks - 1
|
|
local f7_local2 = {}
|
|
for f7_local3 = f7_local0, f7_local1, 1 do
|
|
local f7_local6 = Engine.TableLookup( AlienPerks.File, AlienPerks.Cols.Idx, tostring( f7_local3 ), AlienPerks.Cols.Ref )
|
|
if f7_local6 == "" then
|
|
break
|
|
elseif GetFieldForPerk( f7_local6, AlienPerks.Cols.IsUpgrade ) == "0" then
|
|
f7_local2[#f7_local2 + 1] = f7_local6
|
|
end
|
|
end
|
|
return f7_local2
|
|
end
|
|
end
|
|
f7_local0 = 100
|
|
end
|
|
|
|
function GetBaseNerfList()
|
|
local f8_local0 = 0
|
|
local f8_local1 = 50
|
|
local f8_local2 = {}
|
|
for f8_local3 = f8_local0, f8_local1, 1 do
|
|
local f8_local6 = Engine.TableLookup( AlienNerfs.File, AlienNerfs.Cols.Idx, tostring( f8_local3 ), AlienNerfs.Cols.Ref )
|
|
if f8_local6 == "" then
|
|
break
|
|
end
|
|
f8_local2[#f8_local2 + 1] = f8_local6
|
|
end
|
|
return f8_local2
|
|
end
|
|
|
|
function GetBaseAbilityListForActionSlot( f9_arg0 )
|
|
local f9_local0 = assert
|
|
local f9_local1
|
|
if f9_arg0 ~= AlienAbilities.Up and f9_arg0 ~= AlienAbilities.Down and f9_arg0 ~= AlienAbilities.Left and f9_arg0 ~= AlienAbilities.Right then
|
|
f9_local1 = false
|
|
else
|
|
f9_local1 = true
|
|
end
|
|
f9_local0( f9_local1, "Invalid Action Slot: Valid options are AlienAbilities.Up, AlienAbilities.Down, AlienAbilities.Left, AlienAbilities.Right" )
|
|
f9_local0 = {}
|
|
f9_local1 = f9_arg0
|
|
local f9_local2 = f9_arg0 + AlienAbilities.MaxAbilities - 1
|
|
local f9_local3 = Engine.GetDvarString( "ui_mapname" )
|
|
for f9_local4 = f9_local1, f9_local2, 1 do
|
|
local f9_local7 = ""
|
|
if f9_local3 == "mp_alien_beacon" or f9_local3 == "mp_alien_dlc3" or f9_local3 == "mp_alien_last" then
|
|
f9_local7 = Engine.TableLookup( AlienAbilities.FileAlt, AlienAbilities.Cols.Idx, tostring( f9_local4 ), AlienAbilities.Cols.Ref )
|
|
else
|
|
f9_local7 = Engine.TableLookup( AlienAbilities.File, AlienAbilities.Cols.Idx, tostring( f9_local4 ), AlienAbilities.Cols.Ref )
|
|
end
|
|
if f9_local7 == "" then
|
|
break
|
|
elseif GetFieldForAbility( f9_local7, AlienAbilities.Cols.IsUpgrade ) == "0" then
|
|
f9_local0[#f9_local0 + 1] = f9_local7
|
|
end
|
|
end
|
|
return f9_local0
|
|
end
|
|
|
|
function GetFieldForPerk( f10_arg0, f10_arg1 )
|
|
local f10_local0 = assert
|
|
local f10_local1
|
|
if f10_arg1 < AlienPerks.Cols.Idx or f10_arg1 > AlienPerks.Cols.TokenUpgradeName then
|
|
f10_local1 = false
|
|
else
|
|
f10_local1 = true
|
|
end
|
|
f10_local0( f10_local1, "Invalid field_ref in GetFieldForPerk( perk_ref, field_ref )" )
|
|
return Engine.TableLookup( AlienPerks.File, AlienPerks.Cols.Ref, f10_arg0, f10_arg1 )
|
|
end
|
|
|
|
function GetFieldForNerf( f11_arg0, f11_arg1 )
|
|
local f11_local0 = assert
|
|
local f11_local1
|
|
if f11_arg1 < AlienNerfs.Cols.Idx or f11_arg1 > AlienNerfs.Cols.IsUpgrade then
|
|
f11_local1 = false
|
|
else
|
|
f11_local1 = true
|
|
end
|
|
f11_local0( f11_local1, "Invalid field_ref in GetFieldForNerf( nerf_ref, field_ref )" )
|
|
return Engine.TableLookup( AlienNerfs.File, AlienNerfs.Cols.Ref, f11_arg0, f11_arg1 )
|
|
end
|
|
|
|
function GetFieldForNerfFromIndex( f12_arg0, f12_arg1 )
|
|
local f12_local0 = assert
|
|
local f12_local1
|
|
if f12_arg1 < AlienNerfs.Cols.Idx or f12_arg1 > AlienNerfs.Cols.IsUpgrade then
|
|
f12_local1 = false
|
|
else
|
|
f12_local1 = true
|
|
end
|
|
f12_local0( f12_local1, "Invalid field_ref in GetFieldForNerf( nerf_ref, field_ref )" )
|
|
return Engine.TableLookup( AlienNerfs.File, AlienNerfs.Cols.Idx, f12_arg0, f12_arg1 )
|
|
end
|
|
|
|
function GetFieldForAbility( f13_arg0, f13_arg1 )
|
|
local f13_local0 = assert
|
|
local f13_local1
|
|
if f13_arg1 < AlienAbilities.Cols.Idx or f13_arg1 > AlienAbilities.Cols.Category then
|
|
f13_local1 = false
|
|
else
|
|
f13_local1 = true
|
|
end
|
|
f13_local0( f13_local1, "Invalid field_ref in GetFieldForAbility( ability_ref, field_ref )" )
|
|
f13_local0 = Engine.GetDvarString( "ui_mapname" )
|
|
if f13_local0 == "mp_alien_beacon" or f13_local0 == "mp_alien_dlc3" or f13_local0 == "mp_alien_last" then
|
|
return Engine.TableLookup( AlienAbilities.FileAlt, AlienAbilities.Cols.Ref, f13_arg0, f13_arg1 )
|
|
else
|
|
return Engine.TableLookup( AlienAbilities.File, AlienAbilities.Cols.Ref, f13_arg0, f13_arg1 )
|
|
end
|
|
end
|
|
|
|
function GetFieldForCraftingItemFromIndex( f14_arg0, f14_arg1 )
|
|
return Engine.TableLookup( AlienCraftingItems.File, AlienCraftingItems.Cols.Idx, f14_arg0, f14_arg1 )
|
|
end
|
|
|
|
function GetPerkRefFromBaseAndLevel( f15_arg0, f15_arg1 )
|
|
local f15_local0 = f15_arg0
|
|
local f15_local1
|
|
if 0 < f15_arg1 then
|
|
f15_local1 = "_" .. f15_arg1
|
|
if not f15_local1 then
|
|
|
|
else
|
|
return f15_local0 .. f15_local1
|
|
end
|
|
end
|
|
f15_local1 = ""
|
|
end
|
|
|
|
function GetAbilityRefFromBaseAndLevel( f16_arg0, f16_arg1 )
|
|
local f16_local0 = f16_arg0
|
|
local f16_local1
|
|
if 0 < f16_arg1 then
|
|
f16_local1 = "_" .. f16_arg1
|
|
if not f16_local1 then
|
|
|
|
else
|
|
return f16_local0 .. f16_local1
|
|
end
|
|
end
|
|
f16_local1 = ""
|
|
end
|
|
|
|
function SetRelicEnabled( f17_arg0, f17_arg1, f17_arg2 )
|
|
Engine.AliensSetIsRelicEnabled( f17_arg0, f17_arg1, f17_arg2 )
|
|
if f17_arg1 == "nerf_no_class" then
|
|
if f17_arg2 then
|
|
Engine.SetPlayerDataEx( f17_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "perks", 0, "perk_none" )
|
|
else
|
|
Engine.SetPlayerDataEx( f17_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "perks", 0, "perk_bullet_damage" )
|
|
end
|
|
setDefaultSecondaryClass( f17_arg0 )
|
|
end
|
|
if f17_arg1 == "nerf_no_abilities" then
|
|
if f17_arg2 then
|
|
Engine.SetPlayerDataEx( f17_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "defense", "dpad_placeholder_def_1" )
|
|
Engine.SetPlayerDataEx( f17_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "offense", "dpad_placeholder_off_1" )
|
|
else
|
|
Engine.SetPlayerDataEx( f17_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "defense", "dpad_minigun_turret" )
|
|
Engine.SetPlayerDataEx( f17_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "offense", "dpad_ims" )
|
|
end
|
|
end
|
|
if f17_arg1 == "nerf_no_deployables" then
|
|
if f17_arg2 then
|
|
Engine.SetPlayerDataEx( f17_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "munition", "dpad_placeholder_ammo_1" )
|
|
Engine.SetPlayerDataEx( f17_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "support", "dpad_placeholder_sup_1" )
|
|
else
|
|
Engine.SetPlayerDataEx( f17_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "munition", "dpad_team_ammo_reg" )
|
|
Engine.SetPlayerDataEx( f17_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "support", "dpad_team_explosives" )
|
|
end
|
|
end
|
|
end
|
|
|
|
function GetAlienPerk( f18_arg0, f18_arg1 )
|
|
local f18_local0 = assert
|
|
local f18_local1
|
|
if f18_arg1 < 0 or f18_arg1 > 1 then
|
|
f18_local1 = false
|
|
else
|
|
f18_local1 = true
|
|
end
|
|
f18_local0( f18_local1, "Invalid Perk Slot" )
|
|
return Engine.GetPlayerDataEx( f18_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "perks", f18_arg1 )
|
|
end
|
|
|
|
function SetAlienPerk( f19_arg0, f19_arg1, f19_arg2 )
|
|
local f19_local0 = assert
|
|
local f19_local1
|
|
if f19_arg1 < 0 or f19_arg1 > 1 then
|
|
f19_local1 = false
|
|
else
|
|
f19_local1 = true
|
|
end
|
|
f19_local0( f19_local1, "Invalid Perk Slot" )
|
|
if f19_arg1 == 0 and Engine.AliensCheckIsRelicEnabled( f19_arg0, "nerf_no_class" ) then
|
|
SetRelicEnabled( f19_arg0, "nerf_no_class", false )
|
|
setDefaultSecondaryClass( f19_arg0 )
|
|
end
|
|
return Engine.SetPlayerDataEx( f19_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", "perks", f19_arg1, f19_arg2 )
|
|
end
|
|
|
|
function GetAlienPerkLevel( f20_arg0, f20_arg1 )
|
|
local f20_local0 = assert
|
|
local f20_local1
|
|
if f20_arg1 < 0 or f20_arg1 > 1 then
|
|
f20_local1 = false
|
|
else
|
|
f20_local1 = true
|
|
end
|
|
f20_local0( f20_local1, "Invalid Perk Slot" )
|
|
return Engine.GetPlayerDataEx( f20_arg0, CoD.StatsGroup.Coop, "alienSession", "perk_" .. f20_arg1 .. "_level" )
|
|
end
|
|
|
|
function ClearSecondaryClass( f21_arg0 )
|
|
SetSecondaryClass( f21_arg0, "perk_none" )
|
|
end
|
|
|
|
function setDefaultSecondaryClass( f22_arg0 )
|
|
if Engine.AliensCheckIsUpgradeEnabled( f22_arg0, "multi_class" ) then
|
|
local f22_local0 = GetAlienPerk( f22_arg0, 0 )
|
|
if f22_local0 == "perk_none" then
|
|
SetSecondaryClass( f22_arg0, "perk_none" )
|
|
elseif f22_local0 == "perk_bullet_damage" then
|
|
SetSecondaryClass( f22_arg0, "perk_health" )
|
|
else
|
|
SetSecondaryClass( f22_arg0, "perk_bullet_damage" )
|
|
end
|
|
else
|
|
SetSecondaryClass( f22_arg0, "perk_none" )
|
|
end
|
|
end
|
|
|
|
function SetSecondaryClass( f23_arg0, f23_arg1 )
|
|
DebugPrint( "Setting Secondary Class to " .. f23_arg1 )
|
|
Engine.SetPlayerDataReservedInt( f23_arg0, CoD.StatsGroup.Coop, "secondary_class", GetFieldForPerk( f23_arg1, AlienPerks.Cols.Idx ) )
|
|
end
|
|
|
|
function GetSecondaryClassRef( f24_arg0 )
|
|
return Engine.TableLookup( AlienPerks.File, AlienPerks.Cols.Idx, Engine.GetPlayerDataReservedInt( f24_arg0, CoD.StatsGroup.Coop, "secondary_class" ), AlienPerks.Cols.Ref )
|
|
end
|
|
|
|
function GetAlienSessionAbility( f25_arg0, f25_arg1 )
|
|
return GetAbilityRefFromBaseAndLevel( GetAlienAbility( f25_arg0, f25_arg1 ), GetAlienAbilityLevel( f25_arg0, f25_arg1 ) )
|
|
end
|
|
|
|
function GetAlienAbility( f26_arg0, f26_arg1 )
|
|
local f26_local0 = assert
|
|
local f26_local1
|
|
if f26_arg1 ~= "munition" and f26_arg1 ~= "support" and f26_arg1 ~= "offense" and f26_arg1 ~= "defense" then
|
|
f26_local1 = false
|
|
else
|
|
f26_local1 = true
|
|
end
|
|
f26_local0( f26_local1, "ability_type must be munition, support, offense, or, defense" )
|
|
return Engine.GetPlayerDataEx( f26_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", f26_arg1 )
|
|
end
|
|
|
|
function SetAlienAbility( f27_arg0, f27_arg1, f27_arg2 )
|
|
local f27_local0 = assert
|
|
local f27_local1
|
|
if f27_arg1 ~= "munition" and f27_arg1 ~= "support" and f27_arg1 ~= "offense" and f27_arg1 ~= "defense" then
|
|
f27_local1 = false
|
|
else
|
|
f27_local1 = true
|
|
end
|
|
f27_local0( f27_local1, "ability_type must be munition, support, offense, or, defense" )
|
|
if (f27_arg1 == "offense" or f27_arg1 == "defense") and Engine.AliensCheckIsRelicEnabled( f27_arg0, "nerf_no_abilities" ) then
|
|
SetRelicEnabled( f27_arg0, "nerf_no_abilities", false )
|
|
end
|
|
if (f27_arg1 == "munition" or f27_arg1 == "support") and Engine.AliensCheckIsRelicEnabled( f27_arg0, "nerf_no_deployables" ) then
|
|
SetRelicEnabled( f27_arg0, "nerf_no_deployables", false )
|
|
end
|
|
if f27_arg1 == "munition" and f27_arg2 ~= "dpad_placeholder_ammo_2" and Engine.AliensCheckIsUpgradeEnabled( f27_arg0, "combined_ammo_upgrade" ) then
|
|
LUI.mp_menus.AliensPurchasables.AliensSetIsUpgradeEnabledWrapper( f27_arg0, "combined_ammo_upgrade", false )
|
|
end
|
|
Engine.SetPlayerDataEx( f27_arg0, CoD.StatsGroup.Coop, "alienPlayerLoadout", f27_arg1, f27_arg2 )
|
|
end
|
|
|
|
function GetAlienAbilityLevel( f28_arg0, f28_arg1 )
|
|
local f28_local0 = assert
|
|
local f28_local1
|
|
if f28_arg1 ~= "munition" and f28_arg1 ~= "support" and f28_arg1 ~= "offense" and f28_arg1 ~= "defense" then
|
|
f28_local1 = false
|
|
else
|
|
f28_local1 = true
|
|
end
|
|
f28_local0( f28_local1, "ability_type must be munition, support, offense, or, defense" )
|
|
return Engine.GetPlayerDataEx( f28_arg0, CoD.StatsGroup.Coop, "alienSession", f28_arg1 .. "_level" )
|
|
end
|
|
|
|
function GetAliensRankMaxXP( f29_arg0 )
|
|
return tonumber( Engine.TableLookup( AlienRanks.File, AlienRanks.Cols.Idx, f29_arg0, AlienRanks.Cols.MaxXP ) )
|
|
end
|
|
|
|
function GetAliensMaxRank()
|
|
return tonumber( Engine.TableLookup( AlienRanks.File, 0, "maxrank", 1 ) )
|
|
end
|
|
|
|
function getAliensNextRank( f31_arg0, f31_arg1 )
|
|
if AlienRanks.SuperMaxLevel <= f31_arg0 or f31_arg0 == AlienRanks.MaxLevel and AlienRanks.MaxPrestige <= f31_arg1 then
|
|
return AlienRanks.SuperMaxLevel
|
|
elseif f31_arg0 == AlienRanks.MaxLevel then
|
|
return 0
|
|
else
|
|
return f31_arg0 + 1
|
|
end
|
|
end
|
|
|
|
function getAliensRankData( f32_arg0 )
|
|
local f32_local0 = getAliensExperience( f32_arg0 )
|
|
local f32_local1 = Lobby.GetAlienRankForXP( f32_local0 )
|
|
local f32_local2 = getAliensPrestigeLevel( f32_arg0 )
|
|
local f32_local3
|
|
if f32_local1 < AlienRanks.SuperMaxLevel or f32_local2 < AlienRanks.MaxPrestige then
|
|
f32_local3 = false
|
|
else
|
|
f32_local3 = true
|
|
end
|
|
local f32_local4 = getAliensNextRank( f32_local1, f32_local2 )
|
|
local f32_local5 = f32_local0 - Engine.TableLookup( AlienRanks.File, AlienRanks.Cols.Idx, f32_local1, AlienRanks.Cols.MinXP )
|
|
local f32_local6 = Engine.TableLookup( AlienRanks.File, AlienRanks.Cols.Idx, f32_local1, AlienRanks.Cols.XPToNext )
|
|
local f32_local7
|
|
if f32_local3 then
|
|
f32_local7 = 1
|
|
if not f32_local7 then
|
|
|
|
else
|
|
local f32_local8 = Rank.GetRankDisplay( f32_local1, CoD.PlayMode.Aliens )
|
|
local f32_local9 = Rank.GetRankDisplay( f32_local4, CoD.PlayMode.Aliens )
|
|
local f32_local10
|
|
if f32_local2 >= AlienRanks.MaxPrestige or f32_local1 ~= AlienRanks.MaxLevel then
|
|
f32_local10 = false
|
|
else
|
|
f32_local10 = true
|
|
end
|
|
local f32_local11 = RegisterMaterial( Rank.GetRankIcon( f32_local1, f32_local2, Engine.GetCurrentCoDPlayMode() ) )
|
|
local f32_local12 = RegisterMaterial
|
|
local f32_local13 = Rank.GetRankIcon
|
|
local f32_local14 = f32_local4
|
|
local f32_local15
|
|
if f32_local10 then
|
|
f32_local15 = f32_local2 + 1
|
|
if not f32_local15 then
|
|
|
|
else
|
|
return f32_local8, f32_local11, f32_local9, f32_local12( f32_local13( f32_local14, f32_local15, Engine.GetCurrentCoDPlayMode() ) ), f32_local7, f32_local3
|
|
end
|
|
end
|
|
f32_local15 = f32_local2
|
|
end
|
|
end
|
|
f32_local7 = f32_local5 / f32_local6
|
|
end
|
|
|
|
function getAliensRank( f33_arg0 )
|
|
return Engine.GetPlayerDataEx( f33_arg0, CoD.StatsGroup.Coop, "alienPlayerStats", "rank" )
|
|
end
|
|
|
|
function getAliensCareerWeaponKills( f34_arg0 )
|
|
return Engine.GetPlayerDataEx( f34_arg0, CoD.StatsGroup.Coop, "alienPlayerStats", "kills" )
|
|
end
|
|
|
|
function getAliensCareerEscapes( f35_arg0 )
|
|
return Engine.GetPlayerDataEx( f35_arg0, CoD.StatsGroup.Coop, "alienPlayerStats", "escaped" )
|
|
end
|
|
|
|
function getAliensCareerRevives( f36_arg0 )
|
|
return Engine.GetPlayerDataEx( f36_arg0, CoD.StatsGroup.Coop, "alienPlayerStats", "revives" )
|
|
end
|
|
|
|
function getAliensExperience( f37_arg0 )
|
|
return Engine.GetPlayerDataEx( f37_arg0, CoD.StatsGroup.Coop, "alienPlayerStats", "experience" )
|
|
end
|
|
|
|
function getAliensPrestigeLevel( f38_arg0 )
|
|
return Engine.GetPlayerDataEx( f38_arg0, CoD.StatsGroup.Coop, "alienPlayerStats", "prestige" )
|
|
end
|
|
|
|
function getAliensDiscount()
|
|
return 1 - 0.01 * Engine.TableLookup( AlienRankIcons.File, AlienRankIcons.Cols.PrestigeItems, AlienRankIcons.Rows.PrestigeDiscount, AlienRankIcons.Cols.PrestigeValues )
|
|
end
|
|
|
|
function getAliensHasPlayerPrestiged( f40_arg0 )
|
|
if Engine.GetPlayerDataEx( f40_arg0, CoD.StatsGroup.Coop, "alienPlayerStats", "prestige" ) >= 1 then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function getAliensPrestigeLevel( f41_arg0 )
|
|
return Engine.GetPlayerDataEx( f41_arg0, CoD.StatsGroup.Coop, "alienPlayerStats", "prestige" )
|
|
end
|
|
|
|
function getNumEnabledNerfs( f42_arg0 )
|
|
local f42_local0 = 0
|
|
for f42_local4, f42_local5 in ipairs( GetBaseNerfList() ) do
|
|
if Engine.AliensCheckIsRelicEnabled( f42_arg0, f42_local5 ) then
|
|
f42_local0 = f42_local0 + 1
|
|
end
|
|
end
|
|
return f42_local0
|
|
end
|
|
|
|
function syncEggXP()
|
|
for f43_local0 = 0, Engine.GetMaxControllerCount() - 1, 1 do
|
|
if Engine.HasActiveLocalClient( f43_local0 ) then
|
|
local f43_local3 = Engine.GetPlayerDataReservedInt( f43_local0, CoD.StatsGroup.Ranked, "dlcEggStatus" )
|
|
if f43_local3 then
|
|
Engine.SetPlayerDataReservedInt( f43_local0, CoD.StatsGroup.Coop, "eggstra_state_flags", f43_local3 )
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function GetSessionXP( f44_arg0 )
|
|
return Engine.GetPlayerDataEx( f44_arg0, CoD.StatsGroup.Coop, "alienSession", "experience" )
|
|
end
|
|
|
|
function GetSessionTokens( f45_arg0 )
|
|
return Engine.GetPlayerDataEx( f45_arg0, CoD.StatsGroup.Coop, "alienSession", "shots" )
|
|
end
|
|
|
|
function GetPlayerCash( f46_arg0 )
|
|
local f46_local0 = assert
|
|
local f46_local1
|
|
if f46_arg0 < 0 or f46_arg0 >= 4 then
|
|
f46_local1 = false
|
|
else
|
|
f46_local1 = true
|
|
end
|
|
f46_local0( f46_local1, "Invalid player num" )
|
|
return Engine.GetPlayerDataEx( -1, CoD.StatsGroup.Coop, "EoGPlayer" .. f46_arg0, "currency" )
|
|
end
|
|
|
|
function GetAbilityFromClient( f47_arg0, f47_arg1 )
|
|
local f47_local0 = assert
|
|
local f47_local1
|
|
if f47_arg0 < 0 or f47_arg0 >= 4 then
|
|
f47_local1 = false
|
|
else
|
|
f47_local1 = true
|
|
end
|
|
f47_local0( f47_local1, "Invalid player num" )
|
|
f47_local0 = assert
|
|
if f47_arg1 ~= "munition" and f47_arg1 ~= "support" and f47_arg1 ~= "offense" and f47_arg1 ~= "defense" then
|
|
f47_local1 = false
|
|
else
|
|
f47_local1 = true
|
|
end
|
|
f47_local0( f47_local1, "ability_type must be munition, support, offense, or, defense" )
|
|
return Engine.GetPlayerDataEx( -1, CoD.StatsGroup.Coop, "LoadoutPlayer" .. f47_arg0, f47_arg1 )
|
|
end
|
|
|
|
function GetPerkFromClient( f48_arg0, f48_arg1 )
|
|
local f48_local0 = assert
|
|
local f48_local1
|
|
if f48_arg0 < 0 or f48_arg0 >= 4 then
|
|
f48_local1 = false
|
|
else
|
|
f48_local1 = true
|
|
end
|
|
f48_local0( f48_local1, "Invalid player num" )
|
|
f48_local0 = assert
|
|
if f48_arg1 < 0 or f48_arg1 > 1 then
|
|
f48_local1 = false
|
|
else
|
|
f48_local1 = true
|
|
end
|
|
f48_local0( f48_local1, "Invalid Perk Slot" )
|
|
return Engine.GetPlayerDataEx( -1, CoD.StatsGroup.Coop, "LoadoutPlayer" .. f48_arg0, "perks", f48_arg1 )
|
|
end
|
|
|
|
function GetEoGDataFromClient( f49_arg0, f49_arg1 )
|
|
local f49_local0 = assert
|
|
local f49_local1
|
|
if f49_arg0 < 0 or f49_arg0 >= 4 then
|
|
f49_local1 = false
|
|
else
|
|
f49_local1 = true
|
|
end
|
|
f49_local0( f49_local1, "Invalid player num" )
|
|
return Engine.GetPlayerDataEx( -1, CoD.StatsGroup.Coop, "EoGPlayer" .. f49_arg0, f49_arg1 )
|
|
end
|
|
|
|
function GetGamerTagFromClient( f50_arg0 )
|
|
return GetEoGDataFromClient( f50_arg0, "name" )
|
|
end
|
|
|
|
function GetScoreFromClient( f51_arg0 )
|
|
return string.format( "%.0f", GetEoGDataFromClient( f51_arg0, "score" ) )
|
|
end
|
|
|
|
function GetKillsFromClient( f52_arg0 )
|
|
return GetEoGDataFromClient( f52_arg0, "kills" )
|
|
end
|
|
|
|
function GetAssistsFromClient( f53_arg0 )
|
|
return GetEoGDataFromClient( f53_arg0, "assists" )
|
|
end
|
|
|
|
function GetRevivesFromClient( f54_arg0 )
|
|
return GetEoGDataFromClient( f54_arg0, "revives" )
|
|
end
|
|
|
|
function GetDrillRestartsFromClient( f55_arg0 )
|
|
return GetEoGDataFromClient( f55_arg0, "drillrestarts" )
|
|
end
|
|
|
|
function GetDeathsFromClient( f56_arg0 )
|
|
return GetEoGDataFromClient( f56_arg0, "deaths" )
|
|
end
|
|
|
|
function GetDownsFromClient( f57_arg0 )
|
|
return GetEoGDataFromClient( f57_arg0, "downs" )
|
|
end
|
|
|
|
function ExtinctionHasMapSelection()
|
|
if Engine.GetDvarInt( "extinction_map_selection_enabled" ) == 1 and Engine.IsAliensMode() then
|
|
return true
|
|
elseif Engine.AnyoneHasAliensDLC() and Engine.IsAliensMode() then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function MapSelectionButton()
|
|
return {
|
|
type = "UIGenericButton",
|
|
id = "maps_button_id",
|
|
properties = {
|
|
button_text = Engine.Localize( "@MENU_CHOOSE_MAP_CAP" ),
|
|
button_action_func = function ( f60_arg0, f60_arg1 )
|
|
LUI.FlowManager.RequestAddMenu( f60_arg0, "mapsetup_menu_main", true, f60_arg1.controller, false, {
|
|
rotationAllowed = false
|
|
} )
|
|
end
|
|
,
|
|
desc_text = Engine.Localize( "@MENU_DESC_CHANGE_MAP" )
|
|
}
|
|
}
|
|
end
|
|
|
|
ExtinctionDifficluty = {
|
|
Regular = 0,
|
|
Easy = 1,
|
|
Hard = 2
|
|
}
|
|
function ExtinctionHasDifficultySelection()
|
|
if Engine.GetDvarInt( "extinction_hardcore_enabled" ) == 1 and Engine.IsAliensMode() then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function ExtinctionSetDifficlutyDvars( f62_arg0 )
|
|
if f62_arg0 == ExtinctionDifficluty.Easy then
|
|
Engine.ExecNow( "set scr_aliens_hardcore 0" )
|
|
Engine.ExecNow( "set scr_aliens_ricochet 0" )
|
|
Engine.ExecNow( "set scr_aliens_casual 1" )
|
|
elseif f62_arg0 == ExtinctionDifficluty.Hard then
|
|
Engine.ExecNow( "set scr_aliens_hardcore 1" )
|
|
Engine.ExecNow( "set scr_aliens_ricochet 1" )
|
|
Engine.ExecNow( "set scr_aliens_casual 0" )
|
|
else
|
|
Engine.ExecNow( "set scr_aliens_hardcore 0" )
|
|
Engine.ExecNow( "set scr_aliens_ricochet 0" )
|
|
Engine.ExecNow( "set scr_aliens_casual 0" )
|
|
end
|
|
if IsPrivateMatch() then
|
|
Lobby.SetExtinctionDifficulty( f62_arg0 )
|
|
end
|
|
end
|
|
|
|
function ExtinctionDetermineDifficulty()
|
|
local f63_local0 = ExtinctionDifficluty.Regular
|
|
if IsPrivateMatch() then
|
|
f63_local0 = Lobby.GetExtinctionDifficulty()
|
|
elseif Engine.GetDvarInt( "scr_aliens_hardcore" ) == 1 then
|
|
f63_local0 = ExtinctionDifficluty.Hard
|
|
elseif Engine.GetDvarInt( "scr_aliens_casual" ) == 1 then
|
|
f63_local0 = ExtinctionDifficluty.Easy
|
|
end
|
|
return f63_local0
|
|
end
|
|
|
|
function ExtinctionDifficultyDisplayText( f64_arg0 )
|
|
local f64_local0 = ""
|
|
if f64_arg0 == ExtinctionDifficluty.Easy then
|
|
f64_local0 = Engine.Localize( "LUA_MENU_MP_ALIENS_DIFF_CASUAL" )
|
|
elseif f64_arg0 == ExtinctionDifficluty.Hard then
|
|
f64_local0 = Engine.Localize( "LUA_MENU_MP_ALIENS_DIFF_HARD" )
|
|
else
|
|
f64_local0 = Engine.Localize( "LUA_MENU_MP_ALIENS_DIFF_NORMAL" )
|
|
end
|
|
return f64_local0
|
|
end
|
|
|
|
function extinctionDifficlutyFeeder( f65_arg0 )
|
|
local f65_local0 = {}
|
|
local f65_local1 = ExtinctionDetermineDifficulty()
|
|
local f65_local2 = {
|
|
[#f65_local2 + 1] = {
|
|
difficulty_val = ExtinctionDifficluty.Easy,
|
|
text = ExtinctionDifficultyDisplayText( ExtinctionDifficluty.Easy )
|
|
},
|
|
[#f65_local2 + 1] = {
|
|
difficulty_val = ExtinctionDifficluty.Regular,
|
|
text = ExtinctionDifficultyDisplayText( ExtinctionDifficluty.Regular )
|
|
},
|
|
[#f65_local2 + 1] = {
|
|
difficulty_val = ExtinctionDifficluty.Hard,
|
|
text = ExtinctionDifficultyDisplayText( ExtinctionDifficluty.Hard )
|
|
}
|
|
}
|
|
for f65_local3 = 1, #f65_local2, 1 do
|
|
local f65_local6 = f65_local3
|
|
f65_local0[#f65_local0 + 1] = {
|
|
type = "UIGenericButton",
|
|
listDefaultFocus = f65_local2[f65_local6].difficulty_val == f65_local1,
|
|
id = "difficulty_button_" .. f65_local6,
|
|
properties = {
|
|
style = GenericButtonSettings.Styles.GlassButton,
|
|
substyle = GenericButtonSettings.Styles.GlassButton.SubStyles.Popup,
|
|
text = f65_local2[f65_local6].text,
|
|
button_action_func = function ( f66_arg0, f66_arg1 )
|
|
ExtinctionSetDifficlutyDvars( f65_local2[f65_local6].difficulty_val )
|
|
LUI.FlowManager.RequestLeaveMenu( f66_arg0, true )
|
|
if f65_local2[f65_local6].difficulty_val == ExtinctionDifficluty.Easy and IsOnlineMatch() then
|
|
LUI.FlowManager.RequestPopupMenu( f66_arg0, "extinction_casual_notice", true, f66_arg1.controller )
|
|
end
|
|
end
|
|
}
|
|
}
|
|
end
|
|
return f65_local0
|
|
end
|
|
|
|
function extinction_difficulty_menu()
|
|
return {
|
|
type = "generic_selectionList_popup",
|
|
id = "extinction_difficulty_menu_popup",
|
|
properties = {
|
|
popup_title = Engine.Localize( "@MENU_SELECT_DIFFICULTY" ),
|
|
popup_childfeeder = extinctionDifficlutyFeeder
|
|
}
|
|
}
|
|
end
|
|
|
|
function extinction_casual_notice()
|
|
return {
|
|
type = "generic_confirmation_popup",
|
|
id = "extinciont_casual_notice_id",
|
|
properties = {
|
|
popup_title = Engine.Localize( "@MENU_NOTICE" ),
|
|
message_text = Engine.Localize( "@PLATFORM_EXTINCTION_CASUAL_NOTICE" ),
|
|
button_text = Engine.Localize( "@MENU_OK" )
|
|
}
|
|
}
|
|
end
|
|
|
|
function getDifficultySetupButtonDescText( f69_arg0, f69_arg1 )
|
|
local f69_local0 = ""
|
|
if IsChaosEnabled() then
|
|
f69_local0 = Engine.Localize( "@ALIENS_CHAOS_DIFF_DESC" )
|
|
else
|
|
f69_local0 = Engine.Localize( "@LUA_MENU_MP_DIFFICULTY_DESC" )
|
|
end
|
|
return f69_local0
|
|
end
|
|
|
|
function DifficultySelectionButton()
|
|
local f70_local0 = {
|
|
type = "UIGenericButton",
|
|
id = "difficulty_button_id",
|
|
properties = {
|
|
button_text = Engine.Localize( "@LUA_MENU_MP_DIFFICULTY_CAPS" ),
|
|
button_action_func = function ( f71_arg0, f71_arg1 )
|
|
LUI.FlowManager.RequestPopupMenu( f71_arg0, "extinction_difficulty_menu", true, f71_arg1.controller )
|
|
end,
|
|
desc_text = getDifficultySetupButtonDescText
|
|
}
|
|
}
|
|
if not IsOnlineMatch() then
|
|
local f70_local1 = function ( f72_arg0, f72_arg1 )
|
|
local f72_local0 = IsChaosEnabled()
|
|
if f72_local0 and not f72_arg0.disabled then
|
|
f72_arg0:processEvent( {
|
|
name = "disable"
|
|
} )
|
|
elseif not f72_local0 and f72_arg0.disabled then
|
|
f72_arg0:processEvent( {
|
|
name = "enable"
|
|
} )
|
|
end
|
|
end
|
|
|
|
f70_local0.disabledFunc = function ()
|
|
return IsChaosEnabled()
|
|
end
|
|
|
|
f70_local0.properties.additional_handlers = {
|
|
update_chaos_enabled = f70_local1
|
|
}
|
|
end
|
|
return f70_local0
|
|
end
|
|
|
|
function ExtinctionHasModeSelection()
|
|
return true
|
|
end
|
|
|
|
function IsChaosEnabled()
|
|
local f75_local0 = false
|
|
if IsPrivateMatch() then
|
|
f75_local0 = Lobby.IsChaosEnabled()
|
|
else
|
|
f75_local0 = Engine.GetDvarInt( "scr_chaos_mode" ) == 1
|
|
end
|
|
return f75_local0
|
|
end
|
|
|
|
function SetEnableChaosMode( f76_arg0 )
|
|
if f76_arg0 then
|
|
if IsPrivateMatch() then
|
|
Lobby.SetChaosEnabled( true )
|
|
end
|
|
Engine.SetDvarInt( "scr_chaos_mode", 1 )
|
|
ExtinctionSetDifficlutyDvars( ExtinctionDifficluty.Regular )
|
|
else
|
|
if IsPrivateMatch() then
|
|
Lobby.SetChaosEnabled( false )
|
|
end
|
|
Engine.SetDvarInt( "scr_chaos_mode", 0 )
|
|
end
|
|
end
|
|
|
|
function extinctionModeFeeder( f77_arg0 )
|
|
local f77_local0 = {}
|
|
local f77_local1 = IsChaosEnabled()
|
|
f77_local0[#f77_local0 + 1] = {
|
|
type = "UIGenericButton",
|
|
listDefaultFocus = f77_local1 == false,
|
|
id = "mode_button_standard",
|
|
properties = {
|
|
style = GenericButtonSettings.Styles.GlassButton,
|
|
substyle = GenericButtonSettings.Styles.GlassButton.SubStyles.Popup,
|
|
text = Engine.Localize( "@MPUI_ALIENS" ),
|
|
button_action_func = function ( f78_arg0, f78_arg1 )
|
|
SetEnableChaosMode( false )
|
|
UpdateChaosEnabled( f78_arg0 )
|
|
LUI.FlowManager.RequestLeaveMenu( f78_arg0, true )
|
|
end
|
|
}
|
|
}
|
|
f77_local0[#f77_local0 + 1] = {
|
|
type = "UIGenericButton",
|
|
listDefaultFocus = f77_local1 == true,
|
|
id = "mode_button_chaos",
|
|
properties = {
|
|
style = GenericButtonSettings.Styles.GlassButton,
|
|
substyle = GenericButtonSettings.Styles.GlassButton.SubStyles.Popup,
|
|
text = Engine.Localize( "@ALIENS_CHAOS_MODE" ),
|
|
button_action_func = function ( f79_arg0, f79_arg1 )
|
|
SetEnableChaosMode( true )
|
|
UpdateChaosEnabled( f79_arg0 )
|
|
LUI.FlowManager.RequestLeaveMenu( f79_arg0, true )
|
|
end
|
|
}
|
|
}
|
|
return f77_local0
|
|
end
|
|
|
|
function extinction_mode_menu()
|
|
return {
|
|
type = "generic_selectionList_popup",
|
|
id = "extinction_mode_menu_popup",
|
|
properties = {
|
|
popup_title = Engine.Localize( "@ALIENS_SELECT_MODE" ),
|
|
popup_childfeeder = extinctionModeFeeder
|
|
}
|
|
}
|
|
end
|
|
|
|
function UpdateChaosEnabled( f81_arg0 )
|
|
f81_arg0:dispatchEventToRoot( {
|
|
name = "update_chaos_enabled",
|
|
immediate = true
|
|
} )
|
|
end
|
|
|
|
function ModeSelectionButton()
|
|
return {
|
|
type = "UIGenericButton",
|
|
id = "extinction_mode_button_id",
|
|
properties = {
|
|
button_text = Engine.Localize( "@MPUI_EVENT_PATCH_CATEGORY_NAME2" ),
|
|
button_action_func = function ( f83_arg0, f83_arg1 )
|
|
LUI.FlowManager.RequestPopupMenu( f83_arg0, "extinction_mode_menu", true, f83_arg1.controller )
|
|
end
|
|
,
|
|
desc_text = Engine.Localize( "@ALIENS_GAME_MODE_DESC" )
|
|
}
|
|
}
|
|
end
|
|
|
|
function GetNumIntelsForCurrentMap()
|
|
local f84_local0 = 0
|
|
local f84_local1 = Engine.GetDvarString( "ui_mapname" )
|
|
if f84_local1 == "mp_alien_armory" then
|
|
f84_local0 = 13
|
|
elseif f84_local1 == "mp_alien_beacon" then
|
|
f84_local0 = 9
|
|
elseif f84_local1 == "mp_alien_dlc3" then
|
|
f84_local0 = 6
|
|
elseif f84_local1 == "mp_alien_last" then
|
|
f84_local0 = 8
|
|
end
|
|
return f84_local0
|
|
end
|
|
|
|
function ExtinctionLobbyGetOutroVideo( f85_arg0 )
|
|
if not Engine.IsAliensMode() or IsChaosEnabled() then
|
|
return nil
|
|
elseif Engine.GetPlayerDataEx( f85_arg0, CoD.StatsGroup.Coop, "alienSession", "escapedRank0" ) + Engine.GetPlayerDataEx( f85_arg0, CoD.StatsGroup.Coop, "alienSession", "escapedRank1" ) + Engine.GetPlayerDataEx( f85_arg0, CoD.StatsGroup.Coop, "alienSession", "escapedRank2" ) + Engine.GetPlayerDataEx( f85_arg0, CoD.StatsGroup.Coop, "alienSession", "escapedRank3" ) > 0 then
|
|
local f85_local0 = Engine.GetPlayerDataEx( f85_arg0, CoD.StatsGroup.Common, "round", "map" )
|
|
if f85_local0 == "mp_alien_armory" or f85_local0 == "mp_alien_beacon" or f85_local0 == "mp_alien_dlc3" or f85_local0 == "mp_alien_last" then
|
|
return f85_local0 .. "_outro"
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function LobbyGetIntroVideo()
|
|
local f86_local0 = Engine.GetDvarString( "ui_mapname" )
|
|
if not IsChaosEnabled() and (f86_local0 == "mp_alien_armory" or f86_local0 == "mp_alien_beacon" or f86_local0 == "mp_alien_dlc3" or f86_local0 == "mp_alien_last") then
|
|
return f86_local0 .. "_intro"
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
|
|
function HasSeenVideo( f87_arg0, f87_arg1 )
|
|
if f87_arg1 == "mp_alien_armory_intro" then
|
|
return HasSeenIntroVideo( f87_arg0, 1 )
|
|
elseif f87_arg1 == "mp_alien_armory_outro" then
|
|
return HasSeenOutroVideo( f87_arg0, 1 )
|
|
elseif f87_arg1 == "mp_alien_beacon_intro" then
|
|
return HasSeenIntroVideo( f87_arg0, 2 )
|
|
elseif f87_arg1 == "mp_alien_beacon_outro" then
|
|
return HasSeenOutroVideo( f87_arg0, 2 )
|
|
elseif f87_arg1 == "mp_alien_dlc3_intro" then
|
|
return HasSeenIntroVideo( f87_arg0, 3 )
|
|
elseif f87_arg1 == "mp_alien_dlc3_outro" then
|
|
return HasSeenOutroVideo( f87_arg0, 3 )
|
|
elseif f87_arg1 == "mp_alien_last_intro" then
|
|
return HasSeenIntroVideo( f87_arg0, 4 )
|
|
elseif f87_arg1 == "mp_alien_last_outro" then
|
|
return HasSeenOutroVideo( f87_arg0, 4 )
|
|
else
|
|
return true
|
|
end
|
|
end
|
|
|
|
function SetHasSeenVideo( f88_arg0, f88_arg1 )
|
|
if f88_arg1 == "mp_alien_armory_intro" then
|
|
return SetHasSeenIntroVideo( f88_arg0, 1 )
|
|
elseif f88_arg1 == "mp_alien_armory_outro" then
|
|
return SetHasSeenOutroVideo( f88_arg0, 1 )
|
|
elseif f88_arg1 == "mp_alien_beacon_intro" then
|
|
return SetHasSeenIntroVideo( f88_arg0, 2 )
|
|
elseif f88_arg1 == "mp_alien_beacon_outro" then
|
|
return SetHasSeenOutroVideo( f88_arg0, 2 )
|
|
elseif f88_arg1 == "mp_alien_dlc3_intro" then
|
|
return SetHasSeenIntroVideo( f88_arg0, 3 )
|
|
elseif f88_arg1 == "mp_alien_dlc3_outro" then
|
|
return SetHasSeenOutroVideo( f88_arg0, 3 )
|
|
elseif f88_arg1 == "mp_alien_last_intro" then
|
|
return SetHasSeenIntroVideo( f88_arg0, 4 )
|
|
elseif f88_arg1 == "mp_alien_last_outro" then
|
|
return SetHasSeenOutroVideo( f88_arg0, 4 )
|
|
else
|
|
|
|
end
|
|
end
|
|
|
|
function AliensPlayVideo( f89_arg0, f89_arg1, f89_arg2 )
|
|
LUI.FlowManager.RequestPopupMenu( nil, "AliensVideoOverlay", true, f89_arg0, false, {
|
|
videoRef = f89_arg1,
|
|
endEvent = f89_arg2
|
|
} )
|
|
end
|
|
|
|
function HasSeenIntroVideo( f90_arg0, f90_arg1 )
|
|
return 1 == Engine.GetPlayerDataReservedInt( f90_arg0, CoD.StatsGroup.Coop, "has_seen_episode_" .. f90_arg1 .. "_intro" )
|
|
end
|
|
|
|
function HasSeenOutroVideo( f91_arg0, f91_arg1 )
|
|
return 1 == Engine.GetPlayerDataReservedInt( f91_arg0, CoD.StatsGroup.Coop, "has_seen_episode_" .. f91_arg1 .. "_outro" )
|
|
end
|
|
|
|
function SetHasSeenIntroVideo( f92_arg0, f92_arg1 )
|
|
Engine.SetPlayerDataReservedInt( f92_arg0, CoD.StatsGroup.Coop, "has_seen_episode_" .. f92_arg1 .. "_intro", 1 )
|
|
Engine.ExecNow( "uploadstats", f92_arg0 )
|
|
end
|
|
|
|
function SetHasSeenOutroVideo( f93_arg0, f93_arg1 )
|
|
Engine.SetPlayerDataReservedInt( f93_arg0, CoD.StatsGroup.Coop, "has_seen_episode_" .. f93_arg1 .. "_outro", 1 )
|
|
Engine.ExecNow( "uploadstats", f93_arg0 )
|
|
end
|
|
|
|
function IntroVideoUnlocked( f94_arg0, f94_arg1 )
|
|
return HasSeenIntroVideo( f94_arg0, f94_arg1 )
|
|
end
|
|
|
|
function OutroVideoUnlocked( f95_arg0, f95_arg1 )
|
|
return HasSeenOutroVideo( f95_arg0, f95_arg1 )
|
|
end
|
|
|
|
function CanAccessIntelMenu()
|
|
if Engine.GetDvarBool( "extinction_intel_enabled" ) and Engine.AnyoneHasAliensDLC() then
|
|
return true
|
|
elseif Engine.IsXbox360() and Engine.IsXenonDevTitle() then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function AliensVideoOverlay( f97_arg0, f97_arg1, f97_arg2 )
|
|
local f97_local0 = f97_arg1 or {}
|
|
local f97_local1 = f97_local0.videoRef or "mp_alien_armory_intro"
|
|
local f97_local2 = true
|
|
local f97_local3 = 4000
|
|
local f97_local4 = f97_local0.endEvent or nil
|
|
local self = LUI.UIImage.new()
|
|
self.id = "video_root_id"
|
|
self:registerAnimationState( "default", {
|
|
material = RegisterMaterial( "cinematic" ),
|
|
leftAnchor = true,
|
|
rightAnchor = true,
|
|
topAnchor = true,
|
|
bottomAnchor = true,
|
|
left = 0,
|
|
right = 0,
|
|
top = 0,
|
|
bottom = 0
|
|
} )
|
|
self:animateToState( "default" )
|
|
self:registerEventHandler( "exit_extinction_video", function ( element, event )
|
|
Engine.StopMenuVideo()
|
|
LUI.FlowManager.RequestLeaveMenu( element, true )
|
|
if f97_local4 then
|
|
if f97_local4.target then
|
|
f97_local4.target:processEvent( f97_local4 )
|
|
else
|
|
element:dispatchEventToRoot( f97_local4 )
|
|
end
|
|
end
|
|
end )
|
|
self:registerEventHandler( "check_exit_extinction_video", function ( element, event )
|
|
if Engine.IsVideoFinished() then
|
|
element:processEvent( {
|
|
name = "exit_extinction_video"
|
|
} )
|
|
end
|
|
end )
|
|
self:registerEventHandler( "menu_create", function ( element, event )
|
|
Engine.StopMusic( 200 )
|
|
Engine.PlayMenuVideo( f97_local1, 0, true )
|
|
local self = LUI.UITimer.new( 66, {
|
|
name = "check_exit_extinction_video"
|
|
}, nil, false, self, false )
|
|
self.id = "check_exit_timer_id"
|
|
element:addElement( self )
|
|
if f97_local2 == true then
|
|
local f100_local1 = LUI.UITimer.new( f97_local3, {
|
|
name = "allow_skip",
|
|
dispatchChildren = true
|
|
}, nil, true, self, false )
|
|
f100_local1.id = "add_skip_handler_id"
|
|
element:addElement( f100_local1 )
|
|
end
|
|
end )
|
|
local f97_local6 = LUI.UIButton.new()
|
|
f97_local6.id = "video_continue_button"
|
|
f97_local6.properties = {
|
|
allowSkip = false
|
|
}
|
|
f97_local6:registerAnimationState( "default", {
|
|
leftAnchor = true,
|
|
rightAnchor = true,
|
|
topAnchor = true,
|
|
bottomAnchor = true,
|
|
left = 0,
|
|
right = 0,
|
|
top = 0,
|
|
bottom = 0
|
|
} )
|
|
f97_local6:animateToState( "default", 0 )
|
|
f97_local6:registerEventHandler( "allow_skip", function ( element, event )
|
|
element.properties.allowSkip = true
|
|
end )
|
|
f97_local6:registerEventHandler( "button_action", function ( element, event )
|
|
if element.properties.allowSkip then
|
|
self:processEvent( {
|
|
name = "exit_extinction_video"
|
|
} )
|
|
end
|
|
end )
|
|
self:addElement( f97_local6 )
|
|
return self
|
|
end
|
|
|
|
function AliensVideoOverlayPop()
|
|
Engine.StopMenuVideo()
|
|
LUI.mp_menus.Aliens.SwapExtinctionMapMusic( LUI.mp_menus.Aliens.GetExtinctionMapMusic() )
|
|
end
|
|
|
|
function IsInLobby()
|
|
local f104_local0 = Engine.GetLuiRoot()
|
|
return LUI.FlowManager.IsInStack( f104_local0.flowManager, "menu_gamesetup_systemlink" ) or LUI.FlowManager.IsInStack( f104_local0.flowManager, "menu_xboxlive_privatelobby" ) or LUI.FlowManager.IsInStack( f104_local0.flowManager, "menu_xboxlive_lobby" ) or LUI.FlowManager.IsInStack( f104_local0.flowManager, "menu_gamesetup_splitscreen" )
|
|
end
|
|
|
|
function GetExtinctionMapMusic()
|
|
assert( Engine.IsAliensMode() )
|
|
local f105_local0 = CoD.Music.MainExtinctMusic
|
|
if LUI.mp_menus.Aliens.IsInLobby() then
|
|
local f105_local1 = Engine.GetDvarString( "ui_mapname" )
|
|
if f105_local1 ~= "mp_alien_town" then
|
|
if f105_local1 == "mp_alien_armory" then
|
|
f105_local0 = CoD.Music.MainExtinctMusic_DLC1
|
|
elseif f105_local1 == "mp_alien_beacon" then
|
|
f105_local0 = CoD.Music.MainExtinctMusic_DLC2
|
|
elseif f105_local1 == "mp_alien_dlc3" then
|
|
f105_local0 = CoD.Music.MainExtinctMusic_DLC3
|
|
else
|
|
f105_local0 = CoD.Music.MainExtinctMusic_DLC4
|
|
end
|
|
end
|
|
end
|
|
return f105_local0
|
|
end
|
|
|
|
function SwapExtinctionMapMusic( f106_arg0 )
|
|
assert( Engine.IsAliensMode() )
|
|
Engine.StopMusic( 200 )
|
|
Engine.PlayMusic( f106_arg0 )
|
|
end
|
|
|
|
LUI.MenuBuilder.registerType( "AliensVideoOverlay", AliensVideoOverlay )
|
|
LUI.FlowManager.RegisterStackPopBehaviour( "AliensVideoOverlay", AliensVideoOverlayPop )
|
|
LUI.MenuBuilder.registerDef( "extinction_difficulty_menu", extinction_difficulty_menu )
|
|
LUI.MenuBuilder.registerDef( "extinction_casual_notice", extinction_casual_notice )
|
|
LUI.MenuBuilder.registerDef( "extinction_mode_menu", extinction_mode_menu )
|
|
LockTable( _M )
|