global function InitViewStatsMapsMenu global function setit struct { var menu GridMenuData gridData bool isGridInitialized = false array allMaps } file void function InitViewStatsMapsMenu() { var menu = GetMenu( "ViewStats_Maps_Menu" ) file.menu = menu Hud_SetText( Hud_GetChild( file.menu, "MenuTitle" ), "#STATS_MAPS" ) file.gridData.rows = 5 file.gridData.columns = 1 //file.gridData.numElements // Set in OnViewStatsWeapons_Open after itemdata exists file.gridData.pageType = eGridPageType.VERTICAL file.gridData.tileWidth = 224 file.gridData.tileHeight = 112 file.gridData.paddingVert = 6 file.gridData.paddingHorz = 6 Grid_AutoAspectSettings( menu, file.gridData ) file.gridData.initCallback = MapButton_Init file.gridData.getFocusCallback = MapButton_GetFocus file.gridData.clickCallback = MapButton_Activate AddMenuEventHandler( file.menu, eUIEvent.MENU_OPEN, OnViewStatsWeapons_Open ) AddMenuFooterOption( file.menu, BUTTON_B, "#B_BUTTON_BACK", "#BACK" ) } void function OnViewStatsWeapons_Open() { UI_SetPresentationType( ePresentationType.NO_MODELS ) file.allMaps = GetPrivateMatchMaps() file.gridData.numElements = file.allMaps.len() if ( !file.isGridInitialized ) { GridMenuInit( file.menu, file.gridData ) file.isGridInitialized = true } file.gridData.currentPage = 0 Grid_InitPage( file.menu, file.gridData ) Hud_SetFocused( Grid_GetButtonForElementNumber( file.menu, 0 ) ) UpdateStatsForMap( file.allMaps[ 0 ] ) } bool function MapButton_Init( var button, int elemNum ) { string mapName = file.allMaps[ elemNum ] asset mapImage = GetMapImageForMapName( mapName ) var rui = Hud_GetRui( button ) RuiSetImage( rui, "buttonImage", mapImage ) Hud_SetEnabled( button, true ) Hud_SetVisible( button, true ) return true } void function MapButton_GetFocus( var button, int elemNum ) { if ( IsControllerModeActive() ) UpdateStatsForMap( file.allMaps[ elemNum ] ) } void function MapButton_Activate( var button, int elemNum ) { if ( !IsControllerModeActive() ) UpdateStatsForMap( file.allMaps[ elemNum ] ) } int function GetGameStatForMapInt( string gameStat, string mapName ) { array privateMatchModes = GetPrivateMatchModes() int totalStat = 0 int enumCount = PersistenceGetEnumCount( "gameModes" ) for ( int modeId = 0; modeId < enumCount; modeId++ ) { string modeName = PersistenceGetEnumItemNameForIndex( "gameModes", modeId ) totalStat += GetGameStatForMapAndModeInt( gameStat, mapName, modeName ) } return totalStat } int function GetGameStatForMapAndModeInt( string gameStat, string mapName, string modeName, string difficulty = "1" ) { string statString = GetStatVar( "game_stats", gameStat, "" ) string persistentVar = Stats_GetFixedSaveVar( statString, mapName, modeName, difficulty ) return GetUIPlayer().GetPersistentVarAsInt( persistentVar ) } float function GetGameStatForMapFloat( string gameStat, string mapName ) { array privateMatchModes = GetPrivateMatchModes() float totalStat = 0 int enumCount = PersistenceGetEnumCount( "gameModes" ) for ( int modeId = 0; modeId < enumCount; modeId++ ) { string modeName = PersistenceGetEnumItemNameForIndex( "gameModes", modeId ) totalStat += GetGameStatForMapAndModeFloat( gameStat, mapName, modeName ) } return totalStat } float function GetGameStatForMapAndModeFloat( string gameStat, string mapName, string modeName ) { string statString = GetStatVar( "game_stats", gameStat, "" ) string persistentVar = Stats_GetFixedSaveVar( statString, mapName, modeName, "1" ) return expect float( GetUIPlayer().GetPersistentVar( persistentVar ) ) } void function UpdateStatsForMap( string mapName ) { entity player = GetUIPlayer() if ( player == null ) return Hud_SetText( Hud_GetChild( file.menu, "WeaponName" ), GetMapDisplayName( mapName ) ) // Image var imageElem = Hud_GetRui( Hud_GetChild( file.menu, "WeaponImageLarge" ) ) RuiSetImage( imageElem, "basicImage", GetMapImageForMapName( mapName ) ) string timePlayed = "null" string gamesPlayed = "null" SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat0" ), Localize( "#STATS_HEADER_TIME_PLAYED" ), timePlayed ) SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat1" ), Localize( "#STATS_GAMES_PLAYED" ), gamesPlayed ) //SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat2" ), Localize( "#STATS_GAMES_PLAYED" ), gamesPlayed ) //SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat3" ), Localize( "#STATS_GAMES_PLAYED" ), gamesPlayed ) SetStatsLabelValue( file.menu, "KillsLabel0", "KILLS ON MAP" ) SetStatsLabelValue( file.menu, "KillsValue0", getMapKillFromToneAPI(mapName) ) SetStatsLabelValue( file.menu, "KillsLabel1", "DEATHS ON MAP" ) SetStatsLabelValue( file.menu, "KillsValue1", getMapDeathFromToneAPI(mapName) ) SetStatsLabelValue( file.menu, "KillsLabel2", "TOTAL SHOT DISTANCE" ) SetStatsLabelValue( file.menu, "KillsValue2", string(int((1.905 * float(getMapDistFromToneAPI(mapName) ) ) )/100) + "m" ) SetStatsLabelValue( file.menu, "KillsLabel3", "MAXIMUM SHOT DISTANCE" ) SetStatsLabelValue( file.menu, "KillsValue3", string(int((1.905 * float(getMapMDistFromToneAPI(mapName) ) ) )/100) + "m" ) SetStatsLabelValue( file.menu, "KillsLabel4", "--" ) SetStatsLabelValue( file.menu, "KillsValue4", "--" ) //var anchorElem = Hud_GetChild( file.menu, "WeaponStatsBackground" ) //printt( Hud_GetX( anchorElem ) ) //printt( Hud_GetX( anchorElem ) ) //printt( Hud_GetX( anchorElem ) ) //printt( Hud_GetX( anchorElem ) ) //Hud_SetX( anchorElem, 0 ) // array gameModesArray = GetPersistenceEnumAsArray( "gameModes" ) array modes foreach ( modeName in gameModesArray ) { float modePlayedTime = GetGameStatForMapAndModeFloat( "hoursPlayed", mapName, modeName ) if ( modePlayedTime > 0 ) AddPieChartEntry( modes, GameMode_GetName( modeName ), modePlayedTime, GetGameModeDisplayColor( modeName ) ) } const MAX_MODE_ROWS = 8 if ( modes.len() > 0 ) { modes.sort( ComparePieChartEntryValues ) if ( modes.len() > MAX_MODE_ROWS ) { float otherValue for ( int i = MAX_MODE_ROWS-1; i < modes.len() ; i++ ) otherValue += modes[i].numValue modes.resize( MAX_MODE_ROWS-1 ) AddPieChartEntry( modes, "#GAMEMODE_OTHER", otherValue, [127, 127, 127, 255] ) } } PieChartData modesPlayedData modesPlayedData.entries = modes modesPlayedData.labelColor = [ 255, 255, 255, 255 ] SetPieChartData( file.menu, "ModesPieChart", "#GAME_MODES_PLAYED", modesPlayedData ) array fdMaps = GetPlaylistMaps( "fd" ) if ( 0 == 1 ) // maybe work later on some FD servers { array pveElems = GetElementsByClassname( file.menu, "PvEGroup" ) foreach ( elem in pveElems ) { Hud_Show( elem ) } vector perfectColor = TEAM_COLOR_FRIENDLY / 219.0 var iconLegendRui = Hud_GetRui( Hud_GetChild( file.menu, "PvEIconLegend" ) ) RuiSetImage( iconLegendRui, "basicImage", $"rui/menu/gametype_select/playlist_fd_normal" ) RuiSetFloat3( iconLegendRui, "basicImageColor", perfectColor ) var icon0Rui = Hud_GetRui( Hud_GetChild( file.menu, "PvEIcon0" ) ) RuiSetImage( icon0Rui, "basicImage", $"rui/menu/gametype_select/playlist_fd_easy" ) int easyWins = GetGameStatForMapAndModeInt( "games_completed_fd", mapName, "fd", "0" ) SetStatsLabelValue( file.menu, "PvELabel0", "#FD_DIFFICULTY_EASY" ) SetStatsLabelValue( file.menu, "PvEValueA0", easyWins ) if ( GetGameStatForMapAndModeInt( "perfectMatches", mapName, "fd", "0" ) ) RuiSetFloat3( icon0Rui, "basicImageColor", perfectColor ) else RuiSetFloat3( icon0Rui, "basicImageColor", easyWins > 0 ? <1, 1, 1> : <0.15, 0.15, 0.15> ) var icon1Rui = Hud_GetRui( Hud_GetChild( file.menu, "PvEIcon1" ) ) RuiSetImage( icon1Rui, "basicImage", $"rui/menu/gametype_select/playlist_fd_normal" ) int normalWins = GetGameStatForMapAndModeInt( "games_completed_fd", mapName, "fd", "1" ) SetStatsLabelValue( file.menu, "PvELabel1", "#FD_DIFFICULTY_NORMAL" ) SetStatsLabelValue( file.menu, "PvEValueA1", normalWins ) if ( GetGameStatForMapAndModeInt( "perfectMatches", mapName, "fd", "1" ) ) RuiSetFloat3( icon1Rui, "basicImageColor", perfectColor ) else RuiSetFloat3( icon1Rui, "basicImageColor", normalWins > 0 ? <1, 1, 1> : <0.15, 0.15, 0.15> ) var icon2Rui = Hud_GetRui( Hud_GetChild( file.menu, "PvEIcon2" ) ) RuiSetImage( icon2Rui, "basicImage", $"rui/menu/gametype_select/playlist_fd_hard" ) int hardWins = GetGameStatForMapAndModeInt( "games_completed_fd", mapName, "fd", "2" ) SetStatsLabelValue( file.menu, "PvELabel2", "#FD_DIFFICULTY_HARD" ) SetStatsLabelValue( file.menu, "PvEValueA2", hardWins ) if ( GetGameStatForMapAndModeInt( "perfectMatches", mapName, "fd", "2" ) ) RuiSetFloat3( icon2Rui, "basicImageColor", perfectColor ) else RuiSetFloat3( icon2Rui, "basicImageColor", hardWins > 0 ? <1, 1, 1> : <0.15, 0.15, 0.15> ) var icon3Rui = Hud_GetRui( Hud_GetChild( file.menu, "PvEIcon3" ) ) RuiSetImage( icon3Rui, "basicImage", $"rui/menu/gametype_select/playlist_fd_master" ) int masterWins = GetGameStatForMapAndModeInt( "games_completed_fd", mapName, "fd", "3" ) SetStatsLabelValue( file.menu, "PvELabel3", "#FD_DIFFICULTY_MASTER" ) SetStatsLabelValue( file.menu, "PvEValueA3", masterWins ) if ( GetGameStatForMapAndModeInt( "perfectMatches", mapName, "fd", "3" ) ) RuiSetFloat3( icon3Rui, "basicImageColor", perfectColor ) else RuiSetFloat3( icon3Rui, "basicImageColor", masterWins > 0 ? <1, 1, 1> : <0.15, 0.15, 0.15> ) var icon4Rui = Hud_GetRui( Hud_GetChild( file.menu, "PvEIcon4" ) ) RuiSetImage( icon4Rui, "basicImage", $"rui/menu/gametype_select/playlist_fd_insane" ) int insaneWins = GetGameStatForMapAndModeInt( "games_completed_fd", mapName, "fd", "4" ) SetStatsLabelValue( file.menu, "PvELabel4", "#FD_DIFFICULTY_INSANE" ) SetStatsLabelValue( file.menu, "PvEValueA4", insaneWins ) if ( GetGameStatForMapAndModeInt( "perfectMatches", mapName, "fd", "4" ) ) RuiSetFloat3( icon4Rui, "basicImageColor", perfectColor ) else RuiSetFloat3( icon4Rui, "basicImageColor", insaneWins > 0 ? <1, 1, 1> : <0.15, 0.15, 0.15> ) } else { array pveElems = GetElementsByClassname( file.menu, "PvEGroup" ) foreach ( elem in pveElems ) { Hud_Hide( elem ) } } } var function setit( vector color ) { var iconLegendRui = Hud_GetRui( Hud_GetChild( file.menu, "PvEIconLegend" ) ) RuiSetImage( iconLegendRui, "basicImage", $"rui/menu/gametype_select/playlist_fd_normal" ) RuiSetFloat3( iconLegendRui, "basicImageColor", color ) }