diff --git a/mod/scripts/vscripts/pulse.gnut b/mod/scripts/vscripts/pulse.gnut index 25ebfba..48efca0 100644 --- a/mod/scripts/vscripts/pulse.gnut +++ b/mod/scripts/vscripts/pulse.gnut @@ -1,6 +1,7 @@ global function pulseInit global function GetWeaponStatsFromToneAPI global function GetMapStatsFromToneAPI +global function GetGamemodeStatsFromToneAPI global function getWeaponKillsFromToneAPI global function getNemesisWeaponFromToneAPI global function getDWEFromToneAPI @@ -17,12 +18,14 @@ global table globalToneAPIMapDeathData = {} global table globalToneAPIMapDistData = {} global table globalToneAPIMapKillData = {} global table globalToneAPIMapMDistData = {} +global table globalToneAPIGamemodeData = {} global table< table > globalToneAPIGamemodeMapData = {} string prefix = "default" string HTTPrequestURL = "default" int weaponEntries = 0 int mapEntries = 0 +int gamemodeEntries = 0 int mapGamemodeEntries = 0 void function pulseInit() @@ -93,6 +96,34 @@ void function GetMapStatsFromToneAPI() NSHttpRequest(getMapStats, onSuccess, onFailure) } +void function GetGamemodeStatsFromToneAPI() +{ + print(prefix + "Getting gamemode data...") + gamemodeEntries = 0 + HttpRequest getGamemodeStats + getGamemodeStats.method = HttpRequestMethod.GET + getGamemodeStats.url = HTTPrequestURL + "/gamemodes" + getGamemodeStats.queryParameters["player"] <- [NSGetLocalPlayerUID()] + void functionref(HttpRequestResponse) onSuccess = void function(HttpRequestResponse response) + { + print(prefix + "Gamemode data received, processing...") + table JSONForConversion = DecodeJSON(response.body) + foreach (var key, var value in JSONForConversion) { + table test = expect table(value) + globalToneAPIGamemodeData[string(key)] <- test.kills + gamemodeEntries += 1 + } + print(prefix + "Gamemode data has been processed with a total of " + string(gamemodeEntries) + " entries.") + } + + void functionref(HttpRequestFailure) onFailure = void function(HttpRequestFailure failure) + { + print(prefix + "Encountered an error getting gamemode data...") + } + + NSHttpRequest(getGamemodeStats, onSuccess, onFailure) +} + void function fetchGamemodeStatsFromToneAPI(string mapName) { mapGamemodeEntries = 0 diff --git a/mod/scripts/vscripts/ui/menu_stats.nut b/mod/scripts/vscripts/ui/menu_stats.nut index 3c03883..4ab5450 100644 --- a/mod/scripts/vscripts/ui/menu_stats.nut +++ b/mod/scripts/vscripts/ui/menu_stats.nut @@ -47,6 +47,7 @@ void function OnViewStats_Open() } GetWeaponStatsFromToneAPI() GetMapStatsFromToneAPI() + GetGamemodeStatsFromToneAPI() UI_SetPresentationType( ePresentationType.DEFAULT ) //UpdateViewStatsKillsMenu() diff --git a/mod/scripts/vscripts/ui/menu_stats_time.nut b/mod/scripts/vscripts/ui/menu_stats_time.nut index 8fdf933..a12aefa 100644 --- a/mod/scripts/vscripts/ui/menu_stats_time.nut +++ b/mod/scripts/vscripts/ui/menu_stats_time.nut @@ -7,6 +7,8 @@ const MAX_MODE_ROWS = 8 struct { var menu + array allTitans + table > titanStatLoadout } file void function InitViewStatsTimeMenu() @@ -23,21 +25,68 @@ void function OnStatsTime_Open() { UI_SetPresentationType( ePresentationType.NO_MODELS ) + file.allTitans = GetVisibleItemsOfType( eItemTypes.TITAN ) + var dataTable = GetDataTable( $"datatable/titan_properties.rpak" ) + + foreach ( titan in file.allTitans ) + { + file.titanStatLoadout[ titan.ref ] <- [] + + int row = GetDataTableRowMatchingStringValue( dataTable, GetDataTableColumnByName( dataTable, "titanRef" ), titan.ref ) + file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "primary" ) ) ) + file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "ordnance" ) ) ) + file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "special" ) ) ) + file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "antirodeo" ) ) ) + file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "coreAbility" ) ) ) + file.titanStatLoadout[ titan.ref ].append( GetDataTableString( dataTable, row, GetDataTableColumnByName( dataTable, "melee" ) ) ) + } + UpdateViewStatsTimeMenu() } +float function GetTitanKills( string titanName) +{ + float weaponKills = 0 + foreach ( weaponRef in file.titanStatLoadout[ titanName ]) + { + weaponKills += float(getWeaponKillsFromToneAPI(weaponRef)) + } + return weaponKills +} + void function UpdateViewStatsTimeMenu() { entity player = GetUIPlayer() if ( player == null ) return + //######################################### + float killsAsTitan = 0 + float killsAsIon = GetTitanKills( "ion" ) + killsAsTitan += killsAsIon + float killsAsScorch = GetTitanKills( "scorch" ) + killsAsTitan += killsAsScorch + float killsAsNorthstar = GetTitanKills( "northstar" ) + killsAsTitan += killsAsNorthstar + float killsAsRonin = GetTitanKills( "ronin" ) + killsAsTitan += killsAsRonin + float killsAsTone = GetTitanKills( "tone" ) + killsAsTitan += killsAsTone + float killsAsLegion = GetTitanKills( "legion" ) + killsAsTitan += killsAsLegion + float killsAsMonarch = GetTitanKills( "vanguard" ) + killsAsTitan += killsAsMonarch //######################################### // Time By Class Pie Chart //######################################### - - float hoursAsPilot = GetPlayerStatFloat( player, "time_stats", "hours_as_pilot" ) - float hoursAsTitan = GetPlayerStatFloat( player, "time_stats", "hours_as_titan" ) + + var totalPilotKills = 0 + + foreach (var key, var value in globalToneAPIKillData) { + totalPilotKills += value + } + float hoursAsPilot = float(totalPilotKills) + float hoursAsTitan = killsAsTitan array classes @@ -52,51 +101,41 @@ void function UpdateViewStatsTimeMenu() PieChartData classTimeData classTimeData.entries = classes classTimeData.labelColor = [ 255, 255, 255, 255 ] - classTimeData.timeBased = true - SetPieChartData( file.menu, "ClassPieChart", "#STATS_HEADER_TIME_BY_CLASS", classTimeData ) + SetPieChartData( file.menu, "ClassPieChart", "KILLS BY CLASS", classTimeData ) //######################################### // Time By Chassis Pie Chart //######################################### - float hoursAsIon = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_ion" ) - float hoursAsScorch = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_scorch" ) - float hoursAsNorthstar = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_northstar" ) - float hoursAsRonin = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_ronin" ) - float hoursAsTone = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_tone" ) - float hoursAsLegion = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_legion" ) - float hoursAsMonarch = GetPlayerStatFloat( player, "time_stats", "hours_as_titan_vanguard" ) - array titans - if ( hoursAsIon > 0 ) - AddPieChartEntry( titans, "#TITAN_ION", hoursAsIon, [200, 40, 40, 255] ) + if ( killsAsIon > 0 ) + AddPieChartEntry( titans, "#TITAN_ION", killsAsIon, [200, 40, 40, 255] ) - if ( hoursAsScorch > 0 ) - AddPieChartEntry( titans, "#TITAN_SCORCH", hoursAsScorch, [223, 94, 0, 255] ) + if ( killsAsScorch > 0 ) + AddPieChartEntry( titans, "#TITAN_SCORCH", killsAsScorch, [223, 94, 0, 255] ) - if ( hoursAsNorthstar > 0 ) - AddPieChartEntry( titans, "#TITAN_NORTHSTAR", hoursAsNorthstar, [61, 117, 193, 255] ) + if ( killsAsNorthstar > 0 ) + AddPieChartEntry( titans, "#TITAN_NORTHSTAR", killsAsNorthstar, [61, 117, 193, 255] ) - if ( hoursAsRonin > 0 ) - AddPieChartEntry( titans, "#TITAN_RONIN", hoursAsRonin, [207, 191, 59, 255] ) + if ( killsAsRonin > 0 ) + AddPieChartEntry( titans, "#TITAN_RONIN", killsAsRonin, [207, 191, 59, 255] ) - if ( hoursAsTone > 0 ) - AddPieChartEntry( titans, "#TITAN_TONE", hoursAsTone, [88, 172, 67, 255] ) + if ( killsAsTone > 0 ) + AddPieChartEntry( titans, "#TITAN_TONE", killsAsTone, [88, 172, 67, 255] ) - if ( hoursAsLegion > 0 ) - AddPieChartEntry( titans, "#TITAN_LEGION", hoursAsLegion, [46, 188, 180, 255] ) + if ( killsAsLegion > 0 ) + AddPieChartEntry( titans, "#TITAN_LEGION", killsAsLegion, [46, 188, 180, 255] ) - if ( hoursAsMonarch > 0 ) - AddPieChartEntry( titans, "#TITAN_VANGUARD", hoursAsMonarch, [151, 71, 175, 255] ) + if ( killsAsMonarch > 0 ) + AddPieChartEntry( titans, "#TITAN_VANGUARD", killsAsMonarch, [151, 71, 175, 255] ) titans.sort( ComparePieChartEntryValues ) PieChartData chassisTimeData chassisTimeData.entries = titans chassisTimeData.labelColor = [ 255, 255, 255, 255 ] - chassisTimeData.timeBased = true - SetPieChartData( file.menu, "ChassisPieChart", "#STATS_HEADER_TIME_BY_CHASSIS", chassisTimeData ) + SetPieChartData( file.menu, "ChassisPieChart", "KILLS BY TITAN", chassisTimeData ) //######################################### // Time By Mode Pie Chart @@ -105,33 +144,40 @@ void function UpdateViewStatsTimeMenu() array gameModesArray = GetPersistenceEnumAsArray( "gameModes" ) array modes - foreach ( modeName in gameModesArray ) - { - string gameModePlaysVar = GetStatVar( "game_stats", "mode_played", modeName ) - int playCount = player.GetPersistentVarAsInt( gameModePlaysVar ) - if ( playCount > 0 ) - AddPieChartEntry( modes, GameMode_GetName( modeName ), float( playCount ), GameMode_GetColor( modeName ) ) + int enumCount = PersistenceGetEnumCount( "gameModes" ) + table< string, array > customGamemodeList = { + sns = [255, 178, 102, 255], + fw = [147, 204, 57, 255], + gg = [14, 87, 132, 255] } - - if ( modes.len() > 0 ) + for ( int modeId = 0; modeId < enumCount; modeId++ ) { - modes.sort( ComparePieChartEntryValues ) - - if ( modes.len() > MAX_MODE_ROWS ) + string modeName = PersistenceGetEnumItemNameForIndex( "gameModes", modeId ) + if ( modeName in globalToneAPIGamemodeData ) { - 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] ) + float modePlayedTime = 0 + modePlayedTime = float(globalToneAPIGamemodeData[modeName]) + if ( modePlayedTime > 0 ) { + AddPieChartEntry( modes, GameMode_GetName( modeName ), modePlayedTime, GetGameModeDisplayColor( modeName ) ) + } + } + } + foreach (string key, array value in customGamemodeList) + { + if ( key in globalToneAPIGamemodeData) + { + float modePlayedTime = 0 + modePlayedTime = float(globalToneAPIGamemodeData[key]) + if ( modePlayedTime > 0 ) { + AddPieChartEntry( modes, key, modePlayedTime, value) + } } } PieChartData modesPlayedData modesPlayedData.entries = modes modesPlayedData.labelColor = [ 255, 255, 255, 255 ] - SetPieChartData( file.menu, "ModesPieChart", "#GAME_MODES_PLAYED", modesPlayedData ) + SetPieChartData( file.menu, "ModesPieChart", "KILLS BY GAMEMODE", modesPlayedData ) //######################################### // Time Stats