local f0_local0 = module local f0_local1, f0_local2 = ... f0_local0( f0_local1, package.seeall ) CoD.PrintModuleLoad( _NAME ) f0_local0 = { white = { 1, 1, 1, 1 }, gray = { 0.5, 0.5, 0.5, 1 }, black = { 0, 0, 0, 1 } } f0_local1 = function ( f1_arg0 ) local f1_local0 = GameX.gameModeIsFFA( f1_arg0 ) local f1_local1 = { default = { "score", "kills", "deaths", "assists" }, war = { "score", "kills", "deaths", "assists" }, dom = { "score", "kills", "deaths", "captures" }, sd = { "score", "kills", "deaths", "plants" }, conf = { "score", "kills", "deaths", "tags" }, dm = { "dm_score", "kills", "deaths", "dm_streak" }, sr = { "score", "kills", "deaths", "rescues" }, blitz = { "score", "kills", "deaths", "captures" }, cranked = { "score", "kills", "deaths", "assists" }, cranked_ffa = { "cranked_ffa_score", "kills", "deaths", "assists" }, sotf = { "score", "kills", "deaths", "assists" }, sotf_ffa = { "sotf_ffa_score", "kills", "deaths", "dm_streak" }, infect = { "score", "kills", "deaths", "time" }, grind = { "score", "kills", "deaths", "scores" }, horde = { "kills", "revives", "crates" }, gun = { "score", "kills", "deaths", "gun_knives" }, siege = { "score", "kills", "deaths", "captures" } } local f1_local2 = { score = { "LUA_MENU_SCORE", "score" }, kills = { "LUA_MENU_KILLS", "kills" }, deaths = { "LUA_MENU_DEATHS", "deaths" }, assists = { "LUA_MENU_ASSISTS", "assists" }, cranked_ffa_score = { "LUA_MENU_SCORE", "extrascore0" }, sotf_ffa_score = { "LUA_MENU_SCORE", "extrascore0" }, dm_score = { "LUA_MENU_SCORE", "extrascore0" }, rescues = { "LUA_MENU_RESCUES", "extrascore0" }, captures = { "LUA_MENU_CAPTURES", "extrascore0" }, tags = { "LUA_MENU_TAGS", "extrascore0" }, time = { "LUA_MENU_TIME", "extrascore0" }, scores = { "LUA_MENU_SCORES", "extrascore0" }, plants = { "LUA_MENU_PLANTS", "extrascore0" }, revives = { "LUA_MENU_REVIVES", "assists" }, crates = { "LUA_MENU_CRATES", "extrascore0" }, dm_streak = { "MENU_STREAK", "assists" }, gun_knives = { "PATCH_MENU_STABS", "assists" } } local f1_local3 if f1_local0 then f1_local3 = f1_local1[f1_arg0 .. "_ffa"] if not f1_local3 then else local f1_local4 = {} for f1_local8, f1_local9 in ipairs( f1_local3 ) do f1_local4[f1_local8] = { Engine.Localize( f1_local2[f1_local9][1] ), f1_local2[f1_local9][2] } end return f1_local4 end end f1_local3 = f1_local1[f1_arg0] or f1_local1.default end f0_local2 = function () return { blueBacking = RegisterMaterial( "scoreboard_team_blue" ), orngBacking = RegisterMaterial( "scoreboard_team_orng" ), emptyBacking = RegisterMaterial( "scoreboard_team_empty" ), talkingIcon = RegisterMaterial( "scoreboard_mic_talk_wht" ), mutedIcon = RegisterMaterial( "scoreboard_mic_mute_wht" ) } end local f0_local3 = function ( f3_arg0, f3_arg1, f3_arg2, f3_arg3 ) local f3_local0 = LUI.UIImage.new local f3_local1 = { topAnchor = true, leftAnchor = true, bottomAnchor = false, rightAnchor = false, top = 0, left = 0, width = f3_arg0, height = f3_arg1, material = f3_arg2 } local f3_local2 if f3_arg3 then f3_local2 = f3_arg3[1] if not f3_local2 then else f3_local1.red = f3_local2 if f3_arg3 then f3_local2 = f3_arg3[2] if not f3_local2 then else f3_local1.green = f3_local2 if f3_arg3 then f3_local2 = f3_arg3[3] if not f3_local2 then else f3_local1.blue = f3_local2 if f3_arg3 then f3_local2 = f3_arg3[4] if not f3_local2 then else f3_local1.alpha = f3_local2 f3_local1.alpha = 1 f3_local0 = f3_local0( f3_local1 ) f3_local0:animateToState( "default", 0 ) return f3_local0 end end f3_local2 = 1 end end f3_local2 = 1 end end f3_local2 = 1 end end f3_local2 = 1 end local f0_local4 = function ( f4_arg0, f4_arg1, f4_arg2 ) local self = LUI.UIImage.new( { topAnchor = false, leftAnchor = true, bottomAnchor = false, rightAnchor = false, left = 8, width = 28, height = 28, bottom = 10, material = f4_arg1, alpha = 0 } ) self:registerAnimationState( "talking", { material = f4_arg1, alpha = 1 } ) self:registerAnimationState( "muted", { material = f4_arg2, alpha = 1 } ) self:animateToState( "default", 0 ) local f4_local1 = LUI.UIElement.new() f4_local1:setupUIIntWatch( "ClientVoiceStatus", f4_arg0 ) f4_local1:registerEventHandler( "int_watch_alert", function ( element, event ) if event.newValue == 2 then local f5_local0 = element:getParent() f5_local0:animateToState( "muted", 0 ) elseif event.newValue == 1 then local f5_local0 = element:getParent() f5_local0:animateToState( "talking", 0 ) else local f5_local0 = element:getParent() f5_local0:animateToState( "default", 0 ) end end ) self:addElement( f4_local1 ) return self end local f0_local5 = function ( f6_arg0, f6_arg1, f6_arg2, f6_arg3 ) local f6_local0 = LUI.UIImage.new local f6_local1 = { topAnchor = false, leftAnchor = true, bottomAnchor = true, rightAnchor = false, bottom = 0, left = 0, width = f6_arg0, height = f6_arg1, material = f6_arg2 } local f6_local2 if f6_arg3 then f6_local2 = f6_arg3[1] if not f6_local2 then else f6_local1.red = f6_local2 if f6_arg3 then f6_local2 = f6_arg3[2] if not f6_local2 then else f6_local1.green = f6_local2 if f6_arg3 then f6_local2 = f6_arg3[3] if not f6_local2 then else f6_local1.blue = f6_local2 if f6_arg3 then f6_local2 = f6_arg3[4] if not f6_local2 then else f6_local1.alpha = f6_local2 f6_local1.alpha = 1 f6_local0 = f6_local0( f6_local1 ) f6_local0:animateToState( "default", 0 ) return f6_local0 end end f6_local2 = 1 end end f6_local2 = 1 end end f6_local2 = 1 end end f6_local2 = 1 end local f0_local6 = function ( menu, controller ) local self = LUI.UIImage.new( { topAnchor = false, bottomAnchor = true, leftAnchor = true, rightAnchor = false, bottom = 0, left = -37, width = 78, height = 78, material = menu, alpha = 1 } ) self:animateToState( "default", 0 ) local f7_local1 = LUI.UIImage.new( { topAnchor = true, bottomAnchor = true, leftAnchor = true, rightAnchor = true, material = controller, alpha = 1 } ) f7_local1:animateToState( "default", 0 ) self:addElement( f7_local1 ) return self end local f0_local7 = function () local f8_local0 = 5 if Engine.GetDvarString( "ui_mapname" ) == "mp_shipment_ns" then f8_local0 = 0 end local self = LUI.UIElement.new( { worldBlur = f8_local0 } ) self:setupWorldBlur() return self end local f0_local8 = function ( f9_arg0, f9_arg1, f9_arg2 ) local f9_local0 = { topAnchor = false, leftAnchor = true, bottomAnchor = true, rightAnchor = false, left = 0, width = f9_arg2, bottom = 0, height = CoD.TextSettings.HudEuroNormalFont.Height, font = CoD.TextSettings.HudEuroNormalFont.Font } local f9_local1 if f9_arg1 then f9_local1 = f9_arg1[1] if not f9_local1 then else f9_local0.red = f9_local1 if f9_arg1 then f9_local1 = f9_arg1[2] if not f9_local1 then else f9_local0.green = f9_local1 if f9_arg1 then f9_local1 = f9_arg1[3] if not f9_local1 then else f9_local0.blue = f9_local1 if f9_arg1 then f9_local1 = f9_arg1[4] if not f9_local1 then else f9_local0.alpha = f9_local1 f9_arg0:registerAnimationState( "default", f9_local0 ) f9_arg0:animateToState( "default" ) end end f9_local1 = 1 end end f9_local1 = 1 end end f9_local1 = 1 end end f9_local1 = 1 end local f0_local9 = function ( f10_arg0, f10_arg1, f10_arg2 ) local f10_local0, f10_local1, f10_local2, f10_local3 = GetTextDimensions( f10_arg0, f10_arg1.Font, f10_arg1.Height ) local f10_local4 = f10_local2 - f10_local0 local f10_local5 = LUI.UIText.new local f10_local6 = { topAnchor = true, leftAnchor = false, bottomAnchor = false, rightAnchor = false, top = 0, width = f10_local4, height = f10_arg1.Height, font = f10_arg1.Font } local f10_local7 if f10_arg2 then f10_local7 = f10_arg2[1] if not f10_local7 then else f10_local6.red = f10_local7 if f10_arg2 then f10_local7 = f10_arg2[2] if not f10_local7 then else f10_local6.green = f10_local7 if f10_arg2 then f10_local7 = f10_arg2[3] if not f10_local7 then else f10_local6.blue = f10_local7 if f10_arg2 then f10_local7 = f10_arg2[4] if not f10_local7 then else f10_local6.alpha = f10_local7 f10_local6.alignment = LUI.Alignment.None f10_local5 = f10_local5( f10_local6 ) f10_local5.m_textStyle = CoD.TextStyle.ShadowedMore f10_local5:setText( f10_arg0 ) return f10_local5 end end f10_local7 = 1 end end f10_local7 = 1 end end f10_local7 = 1 end end f10_local7 = 1 end local f0_local10 = function ( f11_arg0, f11_arg1, f11_arg2, f11_arg3 ) if not f11_arg3 then f11_arg3 = {} end local f11_local0 = f11_arg3 and f11_arg3.width if not f11_local0 then local f11_local1, f11_local2, f11_local3, f11_local4 = GetTextDimensions( f11_arg0, f11_arg1.Font, f11_arg1.Height ) f11_local0 = f11_local3 - f11_local1 end local f11_local1 = nil if f11_arg3.marquee then f11_local1 = LUI.UIMarqueeText.new else f11_local1 = LUI.UIText.new end local f11_local2 = f11_local1 local f11_local3 = { topAnchor = false, leftAnchor = true, bottomAnchor = true, rightAnchor = false } local f11_local4 if f11_arg3 then f11_local4 = f11_arg3.x if not f11_local4 then else f11_local3.left = f11_local4 f11_local3.width = f11_local0 if f11_arg3 then f11_local4 = f11_arg3.y if not f11_local4 then else f11_local3.bottom = f11_local4 f11_local3.height = f11_arg1.Height f11_local3.font = f11_arg1.Font if f11_arg2 then f11_local4 = f11_arg2[1] if not f11_local4 then else f11_local3.red = f11_local4 if f11_arg2 then f11_local4 = f11_arg2[2] if not f11_local4 then else f11_local3.green = f11_local4 if f11_arg2 then f11_local4 = f11_arg2[3] if not f11_local4 then else f11_local3.blue = f11_local4 if f11_arg2 then f11_local4 = f11_arg2[4] if not f11_local4 then else f11_local3.alpha = f11_local4 if f11_arg3 then f11_local4 = f11_arg3.alignment if not f11_local4 then else f11_local3.alignment = f11_local4 f11_local2 = f11_local2( f11_local3 ) f11_local2:setText( f11_arg0 ) f11_local2:animateToState( "default", 0 ) return f11_local2 end end f11_local4 = LUI.Alignment.None end end f11_local4 = 1 end end f11_local4 = 1 end end f11_local4 = 1 end end f11_local4 = 1 end end f11_local4 = -3 end end f11_local4 = 0 end local f0_local11 = function ( f12_arg0, f12_arg1, f12_arg2, f12_arg3 ) local self = LUI.UIHorizontalList.new( { topAnchor = false, leftAnchor = true, bottomAnchor = true, rightAnchor = false, left = 0, width = f12_arg2, bottom = 0, height = CoD.TextSettings.HudEuroNormalFont.Height + 3, spacing = 32 } ) self:animateToState( "default", 0 ) local f12_local1 = LUI.UIElement.new() f0_local8( f12_local1, nil, 15 ) self:addElement( f12_local1 ) if f12_arg3 == "horde" then self:addElement( f0_local10( Engine.Localize( "@LUA_MENU_SAFEGUARD_SCOREBOARD_HEADER", Game.GetOmnvar( "ui_horde_round_number" ) ), CoD.TextSettings.HudEuroNormalFont, f0_local0.white ) ) else if f12_arg0 then self:addElement( f0_local10( f12_arg0, CoD.TextSettings.HudEuroNormalFont, f0_local0.white ) ) else self:addElement( LUI.UIElement.new( { bottomAnchor = true, leftAnchor = true, bottom = 0, left = 0, width = 32 } ) ) end self:addElement( f0_local10( "[" .. f12_arg1 .. "]", CoD.TextSettings.HudEuroNormalFont, f0_local0.gray ) ) end return self end local f0_local12 = function ( f13_arg0, f13_arg1, f13_arg2, f13_arg3, f13_arg4 ) local f13_local0 = nil if f13_arg0 == Teams.allies then f13_local0 = { iconMat = RegisterMaterial( "scoreboard_heading_icons_ghost" ), name = GameX.GetLocalizedTeamName( Teams.allies ) } elseif f13_arg0 == Teams.axis then f13_local0 = { iconMat = RegisterMaterial( "scoreboard_heading_icons_fed" ), name = GameX.GetLocalizedTeamName( Teams.axis ) } else assert( f13_arg0 == Teams.free ) f13_local0 = { iconMat = nil, name = nil } end if f13_arg4 then if f13_arg4 == f13_arg0 then f13_local0.name = Engine.Localize( "LUA_MENU_TEAM_WON", f13_local0.name ) else f13_local0.name = Engine.Localize( "LUA_MENU_TEAM_LOST", f13_local0.name ) end end if f13_arg0 == f13_arg1 then f13_local0.highlightMat = RegisterMaterial( "scoreboard_heading_icons_blue_hlt" ) else f13_local0.highlightMat = RegisterMaterial( "scoreboard_heading_icons_orng_hlt" ) end local f13_local1 = Game.GetNumPlayersOnTeam( f13_arg0 ) local self = LUI.UIElement.new( { topAnchor = true, leftAnchor = true, rightAnchor = false, top = 0, left = 0, width = 891, height = 78, alpha = 1 } ) self:addElement( f0_local5( 891, 38, RegisterMaterial( "scoreboard_heading" ) ) ) if f13_local0.iconMat then self:addElement( f0_local6( f13_local0.iconMat, f13_local0.highlightMat ) ) end local f13_local3 = LUI.UIHorizontalList.new( { topAnchor = true, leftAnchor = true, bottomAnchor = true, rightAnchor = false, top = 0, bottom = 0, left = 0, width = 891, spacing = 0, alpha = 1 } ) f13_local3:animateToState( "default", 0 ) self:addElement( f13_local3 ) f13_local3:addElement( f0_local11( f13_local0.name, f13_local1, 445.5, f13_arg2 ) ) local f13_local4 = { width = 445.5 / #f13_arg3, alignment = LUI.Alignment.Center } for f13_local8, f13_local9 in ipairs( f13_arg3 ) do f13_local3:addElement( f0_local10( f13_local9[1] or "FAIL", CoD.TextSettings.HudEuroNormalFont, f0_local0.gray, f13_local4 ) ) end return self end local f0_local13 = function ( f14_arg0, f14_arg1, f14_arg2, f14_arg3, f14_arg4, f14_arg5, f14_arg6 ) local f14_local0, f14_local1, f14_local2 = nil local f14_local3 = GameX.GetPlayerScoreInfoAtRankForGameMode( f14_arg0, f14_arg2, f14_arg6, true ) if not f14_local3 then f14_local0 = f0_local3( 891, 34, f14_arg5.emptyBacking ) else local f14_local4, f14_local5 = nil f14_local0 = f0_local3( 891, 34, f14_arg4 ) if f14_arg3 == f14_arg2 then f14_local0:addElement( f0_local3( 891, 34, RegisterMaterial( "scoreboard_team_player" ) ) ) f14_local1 = RegisterMaterial( "scoreboard_mic_talk_blk" ) f14_local2 = RegisterMaterial( "scoreboard_mic_mute_blk" ) f14_local4 = f0_local0.black f14_local5 = f0_local0.black if f14_local3.prestige and f14_local3.prestige > 0 then f14_local5 = f0_local0.white end else f14_local1 = f14_arg5.talkingIcon f14_local2 = f14_arg5.mutedIcon f14_local4 = f0_local0.white f14_local5 = f0_local0.white end local self = LUI.UIHorizontalList.new( { topAnchor = true, leftAnchor = false, bottomAnchor = true, rightAnchor = false, top = 0, bottom = 0, width = 891, spacing = 0, alpha = 1 } ) self:animateToState( "default", 0 ) f14_local0:addElement( self ) local f14_local7 = 445.5 local f14_local8 = { 45, 65, f14_local7, [3] = f14_local8[3] - f14_local8[1] - f14_local8[2] } local f14_local9 = LUI.UIElement.new() f0_local8( f14_local9, nil, f14_local8[1] ) f14_local9:addElement( f0_local4( f14_local3.client, f14_local1, f14_local2 ) ) self:addElement( f14_local9 ) local f14_local10 = LUI.UIElement.new() f0_local8( f14_local10, nil, f14_local8[2] ) local f14_local11 = f14_local3.rankIcon if f14_local3.rank and f14_local3.prestige and f14_local3.prestige > 0 then f14_local11 = RegisterMaterial( Rank.GetRankIcon( f14_local3.rank, f14_local3.prestige or 0 ) ) end f14_local10:addElement( LUI.UIImage.new( { leftAnchor = true, bottomAnchor = true, topAnchor = false, rightAnchor = false, left = 0, bottom = -3, width = 25, height = 25, material = f14_local11, red = f14_local5[1], green = f14_local5[2], blue = f14_local5[3], alpha = f14_local5[4] } ) ) f14_local10:addElement( f0_local10( f14_local3.rank + 1, CoD.TextSettings.HudEuroMedSmallFont, f14_local4, { x = 28, y = -1 } ) ) self:addElement( f14_local10 ) self:addElement( f0_local10( f14_local3.name, CoD.TextSettings.HudEuroNormalFont, f14_local4, { width = f14_local8[3], marquee = true, alignment = LUI.Alignment.Left } ) ) local f14_local12 = { width = f14_local7 / #f14_arg1, alignment = LUI.Alignment.Center } for f14_local17, f14_local18 in ipairs( f14_arg1 ) do local f14_local16 = f14_local3[f14_local18[2]] if f14_arg6 == "infect" and f14_local18[2] == "extrascore0" then f14_local16 = CoD.FormatInfectedTime( f14_local16, true ) end self:addElement( f0_local10( f14_local16 or "FAIL", CoD.TextSettings.HudEuroNormalFont, f14_local4, f14_local12 ) ) end end return f14_local0 end local f0_local14 = function () local f15_local0 = MBh.AnimateLoop( { { "shifted", 500, true, true }, { "default", 500, true, true } } ) return function ( f16_arg0, f16_arg1 ) if f16_arg0.animstate ~= "show" then f15_local0( f16_arg0, f16_arg1 ) f16_arg0.animstate = "show" end end end local f0_local15 = function () local f17_local0 = MBh.AnimateToState( "hidden", 100 ) return function ( f18_arg0, f18_arg1 ) if f18_arg0.animstate ~= "hide" then f17_local0( f18_arg0, f18_arg1 ) f18_arg0.animstate = "hide" end end end local f0_local16 = function ( f19_arg0 ) local f19_local0 = { material = RegisterMaterial( "widg_margin_arrow_top" ), topAnchor = true, top = f19_arg0, width = 64, height = 32, alpha = 1 } local self = LUI.UIImage.new() self:registerAnimationState( "default", f19_local0 ) self:registerAnimationState( "shifted", LUI.MenuBuilder.AnimStateBasedOn( f19_local0, { topAnchor = true, top = f19_local0.top + 5 } ) ) self:registerAnimationState( "hidden", LUI.MenuBuilder.AnimStateBasedOn( f19_local0, { alpha = 0 } ) ) self:animateToState( "hidden", 0 ) self:registerEventHandler( "show_up_scroll_arrow", f0_local14() ) self:registerEventHandler( "hide_up_scroll_arrow", f0_local15() ) self:setPriority( 10 ) self.id = "arrow_up" return self end local f0_local17 = function ( f20_arg0 ) local f20_local0 = { material = RegisterMaterial( "widg_margin_arrow_bot" ), bottomAnchor = true, bottom = f20_arg0 + 4, width = 64, height = 32, alpha = 1 } local self = LUI.UIImage.new() self:registerAnimationState( "default", f20_local0 ) self:registerAnimationState( "shifted", LUI.MenuBuilder.AnimStateBasedOn( f20_local0, { bottomAnchor = true, bottom = f20_local0.bottom - 5 } ) ) self:registerAnimationState( "hidden", LUI.MenuBuilder.AnimStateBasedOn( f20_local0, { alpha = 0 } ) ) self:animateToState( "hidden", 0 ) self:registerEventHandler( "show_down_scroll_arrow", f0_local14() ) self:registerEventHandler( "hide_down_scroll_arrow", f0_local15() ) self:setPriority( 10 ) self.id = "arrow_down" return self end local f0_local18 = function ( f21_arg0, f21_arg1 ) local f21_local0 = { name = "gamepad_button", button = f21_arg0, down = f21_arg1 } return function ( f22_arg0, f22_arg1 ) if f21_arg1 ~= f22_arg0.down then local f22_local0 = f22_arg0:getParent() f22_local0:dispatchEventToRoot( f21_local0 ) f22_arg0.down = f21_arg1 end end end local f0_local19 = function ( f23_arg0, f23_arg1 ) if not f23_arg1.interrupted then local f23_local0 = f23_arg0:getParent() f23_local0 = f23_local0:getChildById( "main_vlist_wrapper" ) if f23_local0.isWaitingOnDelayedStop then f23_local0:cancelAnimateToState() end end f23_arg0.isAnimating = false end local f0_local20 = function ( f24_arg0, f24_arg1 ) if not f24_arg0.scrollEnabled then return elseif f24_arg1.button ~= "down" and f24_arg1.button ~= "up" then return end local f24_local0 = f24_arg0:getChildById( "main_vlist_wrapper" ) local f24_local1 = f24_arg0:getChildById( "pc_delayed_stop" ) if not f24_arg1.down then if f24_local1.isAnimating then f24_local0.isWaitingOnDelayedStop = true else f24_local0:cancelAnimateToState() end else if f24_local1.isAnimating then f24_local1:cancelAnimateToState() f24_local1:animateToState( "delay", 100 ) f24_local1.isAnimating = true f24_local0.isWaitingOnDelayedStop = false return end local f24_local2, f24_local3, f24_local4, f24_local5 = f24_local0:getCurrentGlobalRect() local f24_local6, f24_local7, f24_local8, f24_local9 = f24_arg0:getCurrentGlobalRect() local f24_local10 = f24_arg1.button and -1 or 1 local f24_local11 = 1 f24_local0:cancelAnimateToState() if f24_local11 > 0 then local f24_local12, f24_local13 = nil if f24_local10 > 0 then f24_local12 = f24_arg0.properties.upperY + f24_local7 - f24_local3 f24_local13 = "top" f24_arg0:dispatchEventToChildren( { name = "show_down_scroll_arrow" } ) if f24_local12 == 0 then f24_arg0:dispatchEventToChildren( { name = "hide_up_scroll_arrow" } ) return end else f24_local12 = f24_arg0.properties.lowerY + f24_local7 - f24_local3 f24_local13 = "bottom" f24_arg0:dispatchEventToChildren( { name = "show_up_scroll_arrow" } ) if f24_local12 == 0 then f24_arg0:dispatchEventToChildren( { name = "hide_down_scroll_arrow" } ) return end end f24_local0:animateToState( f24_local13, math.abs( f24_local12 ) * 1000 / 600 * f24_local11 ) f24_local1:cancelAnimateToState() f24_local1:animateToState( "delay", 50 ) f24_local1.isAnimating = true f24_local0.isWaitingOnDelayedStop = false end end end local f0_local21 = function ( f25_arg0, f25_arg1 ) if not f25_arg0.scrollEnabled then return end local f25_local0 = f25_arg0:getChildById( "main_vlist_wrapper" ) local f25_local1, f25_local2, f25_local3, f25_local4 = f25_local0:getCurrentGlobalRect() local f25_local5, f25_local6, f25_local7, f25_local8 = f25_arg0:getCurrentGlobalRect() local f25_local9 = math.sin( math.rad( f25_arg1.leftStickDirection ) ) * f25_arg1.leftStickMagnitude + math.sin( math.rad( f25_arg1.rightStickDirection ) ) * f25_arg1.rightStickMagnitude local f25_local10 = LUI.clamp( (math.abs( f25_local9 ) - 0.3) / 0.7, 0, 1 ) f25_local0:cancelAnimateToState() if f25_local10 > 0 then local f25_local11, f25_local12 = nil if f25_local9 > 0 then f25_local11 = f25_arg0.properties.upperY + f25_local6 - f25_local2 f25_local12 = "top" f25_arg0:dispatchEventToChildren( { name = "show_down_scroll_arrow" } ) if f25_local11 == 0 then f25_arg0:dispatchEventToChildren( { name = "hide_up_scroll_arrow" } ) return end else f25_local11 = f25_arg0.properties.lowerY + f25_local6 - f25_local2 f25_local12 = "bottom" f25_arg0:dispatchEventToChildren( { name = "show_up_scroll_arrow" } ) if f25_local11 == 0 then f25_arg0:dispatchEventToChildren( { name = "hide_down_scroll_arrow" } ) return end end f25_local0:animateToState( f25_local12, math.abs( f25_local11 ) * 1000 / 600 * f25_local10 ) end end local f0_local22 = function ( f26_arg0, f26_arg1 ) local f26_local0 = f26_arg0:getChildById( "main_vlist_wrapper" ) local f26_local1, f26_local2, f26_local3, f26_local4 = f26_local0:getCurrentGlobalRect() local f26_local5, f26_local6, f26_local7, f26_local8 = f26_arg0:getCurrentGlobalRect() local f26_local9 = f26_local8 - f26_local6 local f26_local10 = f26_local4 - f26_local2 if f26_local10 <= f26_local9 then return else f26_arg0:dispatchEventToChildren( { name = "show_down_scroll_arrow" } ) local f26_local11 = { topAnchor = true, leftAnchor = false, rightAnchor = false, bottomAnchor = false, width = f26_local3 - f26_local1, height = f26_local10 } f26_arg0.properties = f26_arg0.properties or {} f26_arg0.properties.upperY = 0 f26_arg0.properties.lowerY = f26_local9 - f26_local10 f26_local0:registerAnimationState( "top", LUI.MenuBuilder.AnimStateBasedOn( f26_local11, { top = f26_arg0.properties.upperY } ) ) f26_local0:registerAnimationState( "bottom", LUI.MenuBuilder.AnimStateBasedOn( f26_local11, { top = f26_arg0.properties.lowerY } ) ) f26_local0:registerEventHandler( "transition_complete_top", function ( element, event ) if not event.interrupted then f26_arg0:dispatchEventToChildren( { name = "hide_up_scroll_arrow" } ) end end ) f26_local0:registerEventHandler( "transition_complete_bottom", function ( element, event ) if not event.interrupted then f26_arg0:dispatchEventToChildren( { name = "hide_down_scroll_arrow" } ) end end ) f26_arg0.scrollEnabled = true end end local f0_local23 = function ( f29_arg0, f29_arg1 ) local f29_local0, f29_local1, f29_local2, f29_local3 = f29_arg0:getCurrentGlobalRect() if f29_local0 then local f29_local4 = f29_arg0:getParent() f29_local4:animateToState( "visible", 200 ) else f29_arg0:animateToState( "resized", 1 ) end end local f0_local24 = function ( f30_arg0, f30_arg1 ) local f30_local0, f30_local1, f30_local2, f30_local3 = f30_arg0:getCurrentGlobalRect() if f30_local0 then local f30_local4 = f30_arg0:getParent() f30_local4:registerAnimationState( "resized", { topAnchor = true, leftAnchor = false, bottomAnchor = false, rightAnchor = false, top = 0, width = (f30_local2 - f30_local0) * f30_arg0.scaleRatio, height = (f30_local3 - f30_local1) * f30_arg0.scaleRatio } ) f30_local4:animateToState( "resized", 0 ) f30_local4:animateToState( "resized", 1 ) f30_local4:registerEventHandler( "transition_complete_resized", f0_local23 ) else f30_arg0:animateToState( "resized", 1 ) end end local f0_local25 = function ( f31_arg0, f31_arg1 ) local f31_local0, f31_local1, f31_local2, f31_local3 = f31_arg0:getCurrentGlobalRect() if f31_local0 then local f31_local4 = LUI.UIVerticalList.getHeightOfChildren( f31_arg0, 1 ) local f31_local5 = 1033 local f31_local6 = GameX.GetScreenWidth() * SliderBounds.HorzMargin.Min if f31_local6 < f31_local5 then f31_arg0.scaleRatio = f31_local6 / f31_local5 else f31_arg0.scaleRatio = 1 end f31_arg0:registerAnimationState( "resized", { topAnchor = false, leftAnchor = false, bottomAnchor = false, rightAnchor = false, width = 891, height = f31_local4, scale = f31_arg0.scaleRatio - 1, spacing = 1 } ) f31_arg0:animateToState( "resized", 0 ) f31_arg0:animateToState( "resized", 1 ) f31_arg0:registerEventHandler( "transition_complete_resized", f0_local24 ) else f31_arg0:animateToState( "start", 1 ) end end LUI.MenuBuilder.registerType( "scoreboard", function () Engine.SetLuiInUse( true ) local self = LUI.UIElement.new() self.id = "scoreboard_id" local f32_local1 = {} f32_local1 = GameX.GetSafeZoneSize() local f32_local2 = {} f32_local2 = GameX.GetAdjustedSafeZoneSize() self:registerAnimationState( "default", { topAnchor = true, leftAnchor = true, bottomAnchor = true, rightAnchor = true, left = f32_local1[1], top = f32_local1[2], right = f32_local1[3], bottom = f32_local1[4], alpha = 0 } ) self:animateToState( "default", 0 ) self:registerAnimationState( "visible", { alpha = 1 } ) self:registerEventHandler( "transition_complete_visible", f0_local22 ) if Engine.IsConsoleGame() then self:registerEventHandler( "gamepad_sticks", f0_local21 ) else LUI.FlowManager.tryAddMouseCursor( Engine.GetLuiRoot() ) self:registerEventHandler( "gamepad_button", f0_local20 ) local f32_local3 = LUI.UIElement.new() f32_local3.id = "pc_delayed_stop" f32_local3:registerAnimationState( "delay", {} ) f32_local3:registerEventHandler( "transition_complete_delay", f0_local19 ) self:addElement( f32_local3 ) local f32_local4 = LUI.UIElement.new( { topAnchor = true, leftAnchor = true, rightAnchor = true, left = -f32_local1[1], top = -f32_local1[2], right = -f32_local1[3], height = 75 } ) f32_local4.handleMouseMove = true f32_local4:registerEventHandler( "mouseenter", f0_local18( "up", true ) ) f32_local4:registerEventHandler( "mouseleave", f0_local18( "up", false ) ) self:addElement( f32_local4 ) local f32_local5 = LUI.UIElement.new( { bottomAnchor = true, leftAnchor = true, rightAnchor = true, left = -f32_local1[1], right = -f32_local1[3], bottom = -f32_local1[4], height = 75 } ) f32_local5.handleMouseMove = true f32_local5:registerEventHandler( "mouseenter", f0_local18( "down", true ) ) f32_local5:registerEventHandler( "mouseleave", f0_local18( "down", false ) ) self:addElement( f32_local5 ) end self:addElement( f0_local7() ) self:addElement( f0_local16( f32_local2[2] - f32_local1[2] ) ) self:addElement( f0_local17( f32_local2[4] - f32_local1[4] ) ) local f32_local6 = LUI.UIElement.new( { topAnchor = true, top = 0 } ) f32_local6.id = "main_vlist_wrapper" self:addElement( f32_local6 ) local f32_local3 = { topAnchor = false, leftAnchor = false, bottomAnchor = false, rightAnchor = false, width = 891, height = 1000, spacing = 1 } local f32_local4 = LUI.UIVerticalList.new( f32_local3 ) f32_local4:registerAnimationState( "start", f32_local3 ) f32_local4:registerEventHandler( "transition_complete_start", f0_local25 ) f32_local4:animateToState( "start", 1 ) f32_local4.id = "main_vlist" f32_local6:addElement( f32_local4 ) local f32_local5 = GameX.GetGameMode() local f32_local7 = f0_local1( f32_local5 ) local f32_local8 = GameX.gameModeIsFFA( f32_local5 ) local f32_local9 = Game.GetPlayerTeam() local f32_local10 = Game.GetPlayerScoreRanking() local f32_local11 = f0_local2() local f32_local12 = LUI.UIElement.new( { topAnchor = true, leftAnchor = true, rightAnchor = true, top = 0, height = 10 } ) f32_local4:addElement( f32_local12 ) f32_local12:addElement( f0_local9( Engine.Localize( "@" .. Engine.TableLookup( GameTypesTable.File, GameTypesTable.Cols.Ref, f32_local5, GameTypesTable.Cols.Name ) ), CoD.TextSettings.ExtraBigFont, f0_local0.white ) ) if f32_local5 == "infect" then if f32_local9 ~= Teams.axis and f32_local9 ~= Teams.allies then f32_local9 = Teams.allies f32_local10 = nil end local f32_local13 = GameX.GetPlayerOpposingTeam( f32_local9 ) f32_local4:addElement( f0_local12( Teams.free, nil, f32_local5, f32_local7 ) ) local f32_local14 = {} if f32_local9 == Teams.allies then f32_local14.allies = { backing = f32_local11.blueBacking, rank = f32_local10 } f32_local14.axis = { backing = f32_local11.orngBacking } else f32_local14.allies = { backing = f32_local11.orngBacking } f32_local14.axis = { backing = f32_local11.blueBacking, rank = f32_local10 } end local f32_local15 = GameX.GetNumPlayerSlotsForFinalScoreboard( Teams.allies, f32_local5 ) if f32_local15 > 0 then for f32_local16 = 1, f32_local15, 1 do f32_local4:addElement( f0_local13( Teams.allies, f32_local7, f32_local16, f32_local14.allies.rank, f32_local14.allies.backing, f32_local11, f32_local5 ) ) end end local f32_local16 = GameX.GetNumPlayerSlotsForFinalScoreboard( Teams.axis, f32_local5 ) if f32_local16 > 0 then for f32_local17 = 1, f32_local16, 1 do f32_local4:addElement( f0_local13( Teams.axis, f32_local7, f32_local17, f32_local14.axis.rank, f32_local14.axis.backing, f32_local11, f32_local5 ) ) end end elseif not f32_local8 then if f32_local9 ~= Teams.axis and f32_local9 ~= Teams.allies then f32_local9 = Teams.allies f32_local10 = nil end local f32_local13 = Game.GetTeamScore( Teams.allies ) or 0 local f32_local20 = Game.GetTeamScore( Teams.axis ) or 0 local f32_local14 = nil if f32_local20 < f32_local13 then f32_local14 = Teams.allies elseif f32_local13 < f32_local20 then f32_local14 = Teams.axis end local f32_local15 = GameX.GetPlayerOpposingTeam( f32_local9 ) local f32_local16 = GameX.GetNumPlayerSlotsForFinalScoreboard( f32_local9, f32_local5 ) if f32_local16 > 0 then f32_local4:addElement( f0_local12( f32_local9, f32_local9, f32_local5, f32_local7, f32_local14 ) ) for f32_local18 = 1, f32_local16, 1 do f32_local4:addElement( f0_local13( f32_local9, f32_local7, f32_local18, f32_local10, f32_local11.blueBacking, f32_local11, f32_local5 ) ) end end local f32_local17 = GameX.GetNumPlayerSlotsForFinalScoreboard( f32_local15, f32_local5 ) if f32_local16 > 0 and f32_local17 > 0 then f32_local4:addElement( LUI.UIElement.new( { topAnchor = true, leftAnchor = true, rightAnchor = true, top = 0, height = 5 } ) ) end if f32_local17 > 0 then f32_local4:addElement( f0_local12( f32_local15, f32_local9, f32_local5, f32_local7, f32_local14 ) ) for f32_local19 = 1, f32_local17, 1 do f32_local4:addElement( f0_local13( f32_local15, f32_local7, f32_local19, nil, f32_local11.orngBacking, f32_local11, f32_local5 ) ) end end else if f32_local9 ~= Teams.free then f32_local10 = nil end f32_local4:addElement( f0_local12( Teams.free, nil, f32_local5, f32_local7 ) ) local f32_local20 = GameX.GetNumPlayerSlotsForFinalScoreboard( Teams.free, f32_local5 ) for f32_local14 = 1, f32_local20, 1 do local f32_local18 if f32_local14 == f32_local10 then f32_local18 = f32_local11.blueBacking if not f32_local18 then else f32_local4:addElement( f0_local13( Teams.free, f32_local7, f32_local14, f32_local10, f32_local18, f32_local11, f32_local5 ) ) end end f32_local18 = f32_local11.orngBacking end end return self end ) LockTable( _M )