Finish #11, initial #7, #8.

This commit is contained in:
okvdai
2023-04-28 18:23:11 +02:00
parent 0b10707830
commit 326e39555d
5 changed files with 446 additions and 13 deletions
+105 -11
View File
@@ -1,29 +1,44 @@
global function GetStatsFromToneAPI
global function pulseInit
global function GetWeaponStatsFromToneAPI
global function GetMapStatsFromToneAPI
global function getWeaponKillsFromToneApi
global function getNemesisWeaponFromToneAPI
global function getDWEFromToneAPI
global function getMapKillFromToneAPI
global function getMapDeathFromToneAPI
global function getMapDistFromToneAPI
global function getMapMDistFromToneAPI
global table globalToneAPIKillData = {}
global table globalToneAPIDeathData = {}
global table globalToneAPIDWEData = {}
global table globalToneAPIMapDeathData = {}
global table globalToneAPIMapDistData = {}
global table globalToneAPIMapKillData = {}
global table globalToneAPIMapMDistData = {}
void function GetStatsFromToneAPI()
void function pulseInit()
{
thread GetStatsFromToneAPI_threaded()
print("[PULSE] v1.2.0 has been loaded.")
}
void function GetStatsFromToneAPI_threaded(){
void function GetWeaponStatsFromToneAPI()
{
thread GetWeaponStatsFromToneAPI_threaded()
}
void function GetWeaponStatsFromToneAPI_threaded(){
while(true){
if(NSIsMasterServerAuthenticated()) break
WaitFrame()
}
//SetConVarString("ToneURL", "https://toneapi.sleepycat.date/v2_test")
print("[PULSE] Loaded, getting data...")
HttpRequest getStats
getStats.method = HttpRequestMethod.GET
getStats.url = "https://tone.sleepycat.date/v2/client/weapons"
getStats.queryParameters["player"] <- [NSGetLocalPlayerUID()]
print("[PULSE] Getting kill data...")
HttpRequest getWeaponStats
getWeaponStats.method = HttpRequestMethod.GET
getWeaponStats.url = "https://tone.sleepycat.date/v2/client/weapons"
getWeaponStats.queryParameters["player"] <- [NSGetLocalPlayerUID()]
void functionref(HttpRequestResponse) onSuccess = void function(HttpRequestResponse response)
{
print("[PULSE] Kill data received, processing...")
@@ -43,8 +58,47 @@ void function GetStatsFromToneAPI_threaded(){
print("[PULSE] Encountered an error getting kill data...")
}
bool result = NSHttpRequest(getStats, onSuccess, onFailure)
print("[PULSE] result is " + result)
NSHttpRequest(getWeaponStats, onSuccess, onFailure)
}
void function GetMapStatsFromToneAPI()
{
thread GetMapStatsFromToneAPI_threaded()
}
void function GetMapStatsFromToneAPI_threaded(){
while(true){
if(NSIsMasterServerAuthenticated()) break
WaitFrame()
}
//SetConVarString("ToneURL", "https://toneapi.sleepycat.date/v2_test")
print("[PULSE] Getting map data...")
HttpRequest getMapStats
getMapStats.method = HttpRequestMethod.GET
getMapStats.url = "https://tone.sleepycat.date/v2/client/maps"
getMapStats.queryParameters["player"] <- [NSGetLocalPlayerUID()]
void functionref(HttpRequestResponse) onSuccess = void function(HttpRequestResponse response)
{
print("[PULSE] Map data received, processing...")
table JSONForConversion = DecodeJSON(response.body)
foreach (var key, var value in JSONForConversion) {
table test = expect table(value)
globalToneAPIMapKillData[string(key)] <- test.kills
globalToneAPIMapDeathData[string(key)] <- test.deaths
globalToneAPIMapDistData[string(key)] <- test.total_distance
globalToneAPIMapMDistData[string(key)] <- test.max_distance
print("[PULSE] " + key + " has been added.")
}
print("[PULSE] Map data has been processed.")
}
void functionref(HttpRequestFailure) onFailure = void function(HttpRequestFailure failure)
{
print("[PULSE] Encountered an error getting map data...")
}
NSHttpRequest(getMapStats, onSuccess, onFailure)
}
int function getWeaponKillsFromToneApi(string weaponRef){
@@ -72,4 +126,44 @@ int function getDWEFromToneAPI(string weaponRef){
return expect int(globalToneAPIDWEData[weaponRef])
}
return 0
}
int function getMapKillFromToneAPI(string mapName){
mapName = mapName.slice(3)
if(mapName in globalToneAPIMapKillData){
print("[PULSE] Found matching map : " + mapName + " with " + globalToneAPIMapKillData[mapName] + " kills")
return expect int(globalToneAPIMapKillData[mapName])
}
return 0
}
int function getMapDeathFromToneAPI(string mapName){
mapName = mapName.slice(3)
if(mapName in globalToneAPIMapDeathData){
print("[PULSE] Found matching map : " + mapName + " with " + globalToneAPIMapDeathData[mapName] + " deaths")
return expect int(globalToneAPIMapDeathData[mapName])
}
return 0
}
int function getMapMDistFromToneAPI(string mapName){
mapName = mapName.slice(3)
if(mapName in globalToneAPIMapMDistData){
print("[PULSE] Found matching map : " + mapName + " with " + globalToneAPIMapMDistData[mapName] + " hammer units")
return expect int(globalToneAPIMapMDistData[mapName])
}
return 0
}
int function getMapDistFromToneAPI(string mapName){
mapName = mapName.slice(3)
if(mapName in globalToneAPIMapDistData){
print("[PULSE] Found matching map : " + mapName + " with " + globalToneAPIMapDistData[mapName] + "hammer units")
return expect int(globalToneAPIMapKillData[mapName])
}
return 0
}
+46
View File
@@ -0,0 +1,46 @@
global function InitViewStatsMenu
void function InitViewStatsMenu()
{
var menu = GetMenu( "ViewStatsMenu" )
AddMenuEventHandler( menu, eUIEvent.MENU_OPEN, OnViewStats_Open )
var button = Hud_GetChild( menu, "BtnOverview" )
SetButtonRuiText( button, Localize( "#STATS_OVERVIEW" ) )
AddButtonEventHandler( button, UIE_CLICK, AdvanceMenuEventHandler( GetMenu( "ViewStats_Overview_Menu" ) ) )
button = Hud_GetChild( menu, "BtnTime" )
SetButtonRuiText( button, Localize( "#STATS_TIME" ) )
AddButtonEventHandler( button, UIE_CLICK, AdvanceMenuEventHandler( GetMenu( "ViewStats_Time_Menu" ) ) )
button = Hud_GetChild( menu, "BtnPilotWeapons" )
SetButtonRuiText( button, Localize( "#STATS_PILOT_WEAPONS" ) )
AddButtonEventHandler( button, UIE_CLICK, AdvanceMenuEventHandler( GetMenu( "ViewStats_Weapons_Menu" ) ) )
button = Hud_GetChild( menu, "BtnTitans" )
SetButtonRuiText( button, Localize( "#STATS_TITANS" ) )
AddButtonEventHandler( button, UIE_CLICK, AdvanceMenuEventHandler( GetMenu( "ViewStats_Titans_Menu" ) ) )
button = Hud_GetChild( menu, "BtnMaps" )
SetButtonRuiText( button, Localize( "#STATS_MAPS" ) )
AddButtonEventHandler( button, UIE_CLICK, AdvanceMenuEventHandler( GetMenu( "ViewStats_Maps_Menu" ) ) )
button = Hud_GetChild( menu, "BtnMisc" )
SetButtonRuiText( button, Localize( "#STATS_MISC" ) )
AddButtonEventHandler( button, UIE_CLICK, AdvanceMenuEventHandler( GetMenu( "ViewStats_Misc_Menu" ) ) )
AddMenuFooterOption( menu, BUTTON_A, "#A_BUTTON_SELECT" )
AddMenuFooterOption( menu, BUTTON_B, "#B_BUTTON_BACK", "#BACK" )
}
void function OnViewStats_Open()
{
GetWeaponStatsFromToneAPI()
GetMapStatsFromToneAPI()
UI_SetPresentationType( ePresentationType.DEFAULT )
//UpdateViewStatsKillsMenu()
//UpdateViewStatsDistanceMenu()
}
+294
View File
@@ -0,0 +1,294 @@
global function InitViewStatsMapsMenu
global function setit
struct
{
var menu
GridMenuData gridData
bool isGridInitialized = false
array<string> 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<string> 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<string> 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 = HoursToTimeString( GetGameStatForMapFloat( "hoursPlayed", mapName ) )
string gamesPlayed = string( GetGameStatForMapInt( "game_completed", mapName ) )
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 )
string winPercent = GetPercent( float( GetGameStatForMapInt( "game_won", mapName ) ), float( GetGameStatForMapInt( "game_completed", mapName ) ), 0 )
print("[PULSE]" + mapName)
SetStatsLabelValue( file.menu, "KillsLabel0", "KILLS ON MAP" )
SetStatsLabelValue( file.menu, "KillsValue0", getMapKillFromToneAPI(mapName) )
SetStatsLabelValue( file.menu, "KillsLabel1", "#STATS_GAMES_WON" )
SetStatsLabelValue( file.menu, "KillsValue1", GetGameStatForMapInt( "game_won", mapName ) )
SetStatsLabelValue( file.menu, "KillsLabel2", "#STATS_GAMES_MVP" )
SetStatsLabelValue( file.menu, "KillsValue2", GetGameStatForMapInt( "mvp", mapName ) )
SetStatsLabelValue( file.menu, "KillsLabel3", "#STATS_GAMES_TOP3" )
SetStatsLabelValue( file.menu, "KillsValue3", GetGameStatForMapInt( "top3OnTeam", mapName ) )
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<string> gameModesArray = GetPersistenceEnumAsArray( "gameModes" )
array<PieChartEntry> 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<string> fdMaps = GetPlaylistMaps( "fd" )
if ( fdMaps.contains( mapName ) )
{
array<var> 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<var> 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 )
}
@@ -36,7 +36,6 @@ void function OnStatsOverview_Open()
function UpdateViewStatsOverviewMenu()
{
GetStatsFromToneAPI()
entity player = GetUIPlayer()
if ( player == null )
return