From 9701fa555915a1a744098940c123c5e3ba10ed7b Mon Sep 17 00:00:00 2001 From: okvdai <108829133+okvdai@users.noreply.github.com> Date: Mon, 24 Apr 2023 18:37:16 +0200 Subject: [PATCH] Create menu_stats_titans.nut --- mod/scripts/vscripts/ui/menu_stats_titans.nut | 227 ++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 mod/scripts/vscripts/ui/menu_stats_titans.nut diff --git a/mod/scripts/vscripts/ui/menu_stats_titans.nut b/mod/scripts/vscripts/ui/menu_stats_titans.nut new file mode 100644 index 0000000..2ec655f --- /dev/null +++ b/mod/scripts/vscripts/ui/menu_stats_titans.nut @@ -0,0 +1,227 @@ +//TODO: Kills Per Minute stat + +global function InitViewStatsTitansMenu + +struct +{ + var menu + var[NUM_PERSISTENT_TITAN_LOADOUTS] buttons + array allTitans + table > titanStatLoadout +} file + +void function InitViewStatsTitansMenu() +{ + var menu = GetMenu( "ViewStats_Titans_Menu" ) + file.menu = menu + + Hud_SetText( Hud_GetChild( file.menu, "MenuTitle" ), "#STATS_TITANS" ) + + AddMenuEventHandler( file.menu, eUIEvent.MENU_OPEN, OnViewStatsTitans_Open ) + + for ( int i = 0; i < NUM_PERSISTENT_TITAN_LOADOUTS; i++ ) + { + var button = Hud_GetChild( menu, "Button" + i ) + //button.s.rowIndex <- i + //Hud_AddEventHandler( button, UIE_CLICK, OnButton_Activate ) + Hud_AddEventHandler( button, UIE_GET_FOCUS, OnButton_Focused ) + file.buttons[i] = button + } + + AddMenuFooterOption( file.menu, BUTTON_B, "#B_BUTTON_BACK", "#BACK" ) +} + +void function OnViewStatsTitans_Open() +{ + UI_SetPresentationType( ePresentationType.STORE_PRIME_TITANS ) + RunMenuClientFunction( "UpdateTitanModel", 0 ) + + // Get Titan list + 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" ) ) ) + } + + UpdateButtons( 0, file.buttons ) + UpdateStatsForTitan( file.allTitans[ 0 ].ref, 0 ) +} + +void function UpdateButtons( int selectedIndex, var[NUM_PERSISTENT_TITAN_LOADOUTS] buttons ) +{ + foreach ( index, button in buttons ) + { + TitanLoadoutDef loadout = GetCachedTitanLoadout( index ) + RHud_SetText( button, GetTitanLoadoutName( loadout ) ) + + Hud_SetEnabled( button, true ) + Hud_SetVisible( button, true ) + } +} + +//void function OnButton_Activate( var button ) +//{ +// int id = int( Hud_GetScriptID( button ) ) +// if ( !IsControllerModeActive() ) +// UpdateStatsForTitan( file.allTitans[ id ].ref, id ) +//} + +void function OnButton_Focused( var button ) +{ + int id = int( Hud_GetScriptID( button ) ) + //if ( IsControllerModeActive() ) + UpdateStatsForTitan( file.allTitans[ id ].ref, id ) +} + +void function UpdateStatsForTitan( string titanRef, int loadoutIndex ) +{ + entity player = GetUIPlayer() + if ( player == null ) + return + + RunMenuClientFunction( "UpdateTitanModel", loadoutIndex ) + RunMenuClientFunction( "UpdateStorePrimeBg", loadoutIndex ) + + // Name + Hud_SetText( Hud_GetChild( file.menu, "TitanName" ), GetItemName( titanRef ) ) + + // Locked info + var lockLabel = GetElementsByClassname( file.menu, "LblTitanLocked" )[0] + + if ( IsItemLocked( player, titanRef ) ) + { + Hud_SetText( lockLabel, "#LOUADOUT_UNLOCK_REQUIREMENT_LEVEL", GetUnlockLevelReq( titanRef ) ) + Hud_Show( lockLabel ) + } + else + { + Hud_Hide( lockLabel ) + } + + string timeUsed = StatToTimeString( "time_stats", "hours_as_titan_" + titanRef ) + int shotsHit + foreach ( weaponRef in file.titanStatLoadout[ titanRef ] ) + shotsHit += GetPlayerStatInt( player, "weapon_stats", "shotsHit", weaponRef ) + int coresEarned = GetPlayerStatInt( player, "titan_stats", "coresEarned", titanRef ) + + int crits + bool critsApplicable = false + foreach ( weaponRef in file.titanStatLoadout[ titanRef ] ) + { + if ( GetWeaponInfoFileKeyField_Global( weaponRef, "critical_hit" ) == true ) + { + critsApplicable = true + crits += GetPlayerStatInt( player, "weapon_stats", "critHits", weaponRef ) + } + } + + string critHitsValue = Localize( "#STATS_NOT_APPLICABLE" ) + if ( critsApplicable ) + critHitsValue = string( crits ) + + SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat0" ), Localize( "#STATS_HEADER_TIME_USED" ), timeUsed ) + SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat1" ), Localize( "#STATS_HEADER_SHOTS_HIT" ), string( shotsHit ) ) + SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat2" ), Localize( "#STATS_HEADER_CORES_EARNED" ), string( coresEarned ) ) + SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat3" ), Localize( "#STATS_HEADER_CRITICAL_HITS" ), critHitsValue ) + + string nextUnlockRef = GetNextUnlockForTitanLevel( player, titanRef, TitanGetRawLevel( player, titanRef ) + 1 ) + if ( nextUnlockRef != "" ) + { + var rui = Hud_GetRui( Hud_GetChild( file.menu, "NextUnlock" ) ) + + if ( nextUnlockRef == "random" ) + { + RuiSetString( rui, "unlockName", "" ) + RuiSetImage( rui, "unlockImage", $"rui/menu/common/unlock_random" ) + } + else + { + ItemDisplayData displayData + if ( IsSubItemType( GetItemType( nextUnlockRef ) ) ) + displayData = GetItemDisplayData( nextUnlockRef, titanRef ) + else + displayData = GetItemDisplayData( nextUnlockRef ) + RuiSetString( rui, "unlockName", displayData.name ) + RuiSetImage( rui, "unlockImage", displayData.image ) + + vector aspect = GetItemImageAspect( nextUnlockRef ) + + float mult = 1.0 + if ( aspect.x > aspect.y ) + mult = 120.0 / aspect.x + else + mult = 120.0 / aspect.y + + aspect.x *= mult + aspect.y *= mult + + RuiSetFloat2( rui, "unlockImageSize", aspect ) + } + } + + int totalKills + int pilotKills + int titanKills + int aiKills + foreach ( weaponRef in file.titanStatLoadout[ titanRef ] ) + { + totalKills += getWeaponKillsFromToneApi(weaponRef) + pilotKills += GetPlayerStatInt( player, "weapon_kill_stats", "pilots", weaponRef ) + titanKills += GetPlayerStatInt( player, "weapon_kill_stats", "titansTotal", weaponRef ) + aiKills += GetPlayerStatInt( player, "weapon_kill_stats", "ai", weaponRef ) + } + + // Total Kills Stats + SetStatsLabelValue( file.menu, "KillsValue0", totalKills ) + SetStatsLabelValue( file.menu, "KillsValue1", pilotKills ) + SetStatsLabelValue( file.menu, "KillsValue2", titanKills ) + SetStatsLabelValue( file.menu, "KillsValue3", aiKills ) +} + +asset function GetTitanStatImage( string titanRef ) +{ + asset image + + switch ( titanRef ) + { + case "ion": + image = $"r2_ui/menus/loadout_icons/titans/ion_icon" + break + + case "scorch": + image = $"r2_ui/menus/loadout_icons/titans/scorch_icon" + break + + case "northstar": + image = $"r2_ui/menus/loadout_icons/titans/northstar_icon" + break + + case "ronin": + image = $"r2_ui/menus/loadout_icons/titans/ronin_icon" + break + + case "tone": + image = $"r2_ui/menus/loadout_icons/titans/tone_icon" + break + + case "legion": + image = $"r2_ui/menus/loadout_icons/titans/legion_icon" + break + + case "vanguard": + image = $"r2_ui/menus/loadout_icons/titans/vanguard_icon" + break + } + + return image +} \ No newline at end of file