Compare commits
10
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
340a2a0516 | ||
|
|
3120fae436 | ||
|
|
4b779d2730 | ||
|
|
559be46b38 | ||
|
|
e82a29e317 | ||
|
|
223299024b | ||
|
|
6c720ed8d1 | ||
|
|
9d5c9956ad | ||
|
|
d20ec3a1ac | ||
|
|
2e771bfe17 |
@@ -1,80 +1,15 @@
|
|||||||
# Pulse
|
# Pulse
|
||||||
|
|
||||||
Pulse is a clientside mod for [TF|2 + Northstar](https://github.com/R2Northstar/Northstar) letting you view killstats collected by [the Tone API](https://toneapi.github.io/ToneAPI_webclient/) using the otherwise non-functional `Stats` tab.
|
Pulse is a clientside mod for Titanfall 2 letting you view killstats collected by [the Tone API](https://toneapi.github.io/ToneAPI_webclient/) using the otherwise non-functional `Stats` tab.
|
||||||
|
|
||||||
## Currently, features include:
|
Currently, features include:
|
||||||
- mostly functional `Overview` tab,
|
- displaying kills in `Pilot Weapons`
|
||||||
- functional `Time` tab,
|
- displaying kills and most used weapon (by kills) in `Overview`
|
||||||
- Pilot weapon data displayed in `Pilot Weapons` tab,
|
|
||||||
- Titan kills displayed in `Titans` tab,
|
|
||||||
- functional `Maps` tab,
|
|
||||||
- real-time updates.
|
|
||||||
|
|
||||||
Want to know what we have planned for future updates? See [here.](https://github.com/ToneAPI/pulse/projects?query=is%3Aopen)
|
Want to know what we have planned for future updates? See [here.](https://github.com/ToneAPI/pulse/projects?query=is%3Aopen)
|
||||||
|
|
||||||
Found a bug? Make an issue on GitHub [here.](https://github.com/ToneAPI/pulse/issues/new)
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Features, more in-depth:</summary>
|
|
||||||
|
|
||||||
### `Overview`
|
|
||||||
- Most Kills - shows the weapon with most accumulated kills.
|
|
||||||
- Nemesis Weapon - shows the weapon that has killed you the most.
|
|
||||||
- Most Effective - shows weapon with the highest K/D ratio.
|
|
||||||
- Kill/Death Ratio - shows the overall K/D ratio of player. (the two line graphs "Lifetime Avg." and "Lifetime Avg. vs. Players" don't work.)
|
|
||||||
- Kills as Pilot - shows general kill data for player as Pilot, visualised in the table below:
|
|
||||||
|
|
||||||
| Name | Description |
|
|
||||||
|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
||||||
| Pilots |Shows **ALL KILLS** accumulated by player as Pilot. Differentiating Pilot and Titan kills will come in a later Tone API update.|
|
|
||||||
| Titans |Non-functional, see line above.|
|
|
||||||
| AI kills |Non-functional, Tone API does not collect AI kill data.|
|
|
||||||
| Pilot melee kills |Shows only melee kills accumulated by player as Pilot.|
|
|
||||||
| Pilot executions |Shows only executions accumulated by player as Pilot.|
|
|
||||||
|
|
||||||
- Kills as Titan - shows general kill data for player as Titan, visualised in the table below:
|
|
||||||
|
|
||||||
| Name | Description |
|
|
||||||
|--------------------|------------------------------------------------------|
|
|
||||||
| Pilots |Shows **ALL KILLS** accumulated by player as Titan. Differentiating Pilot and Titan kills will come in a later Tone API update.|
|
|
||||||
| Titans |Non-functional, see line above.|
|
|
||||||
| Titan executions |Shows only executions accumulated by player as Titan.|
|
|
||||||
| Pilots meleed |Shows only melee kills accumulated by player as Titan.|
|
|
||||||
| Pilot roadkills |Shows only roadkills accumulated by player as Titan.|
|
|
||||||
|
|
||||||
- Upper statbox values have been zeroed out, these don't yet work and are set to 0 to avoid confusion.
|
|
||||||
|
|
||||||
### `Time`
|
|
||||||
|
|
||||||
- Kills by Class shows kills by Pilot and Titan on a piechart.
|
|
||||||
- Kills by Titan shows kills by all Titan classes on a piechart.
|
|
||||||
- Kills by Gamemode shows kills on each gamemode played on a piechart.
|
|
||||||
|
|
||||||
### `Pilot Weapons`
|
|
||||||
|
|
||||||
- shows total accumulated kills per weapon under Total Kills.
|
|
||||||
- shows deaths with given weapon equipped under Deaths with Weapon.
|
|
||||||
|
|
||||||
### `Titans`
|
|
||||||
|
|
||||||
- shows total accumulated kills per Titan under Total Kills.
|
|
||||||
|
|
||||||
### `Maps`
|
|
||||||
|
|
||||||
- Player Map Stats - shows general data for player on chosen map, visualised in the table below:
|
|
||||||
|
|
||||||
| Name | Description |
|
|
||||||
|-----------------------|------------------------------------------------------- |
|
|
||||||
| Kills on Map |Shows all kills accumulated by player on chosen map.|
|
|
||||||
| Deaths on Map |Shows all deaths accumulated by player on chosen map.|
|
|
||||||
| Total Shot Distance |Shows total distance of kills accumulated by player on chosen map.|
|
|
||||||
| Maximum Shot Distance |Shows highest distance kill by player on chosen map.|
|
|
||||||
|
|
||||||
- Kills by Gamemode - piechart showing all kills (in percent) on chosen map by gamemode.
|
|
||||||
</details>
|
|
||||||
|
|
||||||
## DISCLAIMER
|
## DISCLAIMER
|
||||||
|
|
||||||
The Tone API is NOT used by every server, view a list of supported servers [here.](https://tone.sleepycat.date/v2/client/servers)
|
The Tone API is NOT used by every server, view a list supported servers on [the webclient.](https://toneapi.github.io/ToneAPI_webclient/)
|
||||||
|
|
||||||
Pulse is very much a W.I.P as of right now, features may be missing/nonfunctional.
|
Pulse is very much a W.I.P as of right now, features may be missing/nonfunctional.
|
||||||
|
|||||||
@@ -1,37 +1,15 @@
|
|||||||
{
|
{
|
||||||
"Name": "ToneAPI.pulse",
|
"Name": "ToneAPI.pulse",
|
||||||
"Description": "Displays Tone API kill data in the Stats tab.",
|
"Description": "placeholder text",
|
||||||
"Version": "1.2.1",
|
"Version": "0.0.1",
|
||||||
"LoadPriority": 1,
|
"LoadPriority": 1,
|
||||||
"ConVars": [
|
|
||||||
{
|
|
||||||
"Name": "ToneURL",
|
|
||||||
"DefaultValue": "https://tone.sleepycat.date/v2/client"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "VersionURL",
|
|
||||||
"DefaultValue": "https://raw.githubusercontent.com/ToneAPI/pulse/main/version.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "MajorVersion",
|
|
||||||
"DefaultValue": "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "MinorVersion",
|
|
||||||
"DefaultValue": "2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "PatchVersion",
|
|
||||||
"DefaultValue": "1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"Scripts": [
|
"Scripts": [
|
||||||
{
|
{
|
||||||
"Path": "pulse.gnut",
|
"Path": "pulse.gnut",
|
||||||
"RunOn": "UI",
|
"RunOn": "UI",
|
||||||
"UICallback": {
|
"UICallback": {
|
||||||
"After": "pulseInit"
|
"After": "GetStatsFromToneAPI"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,508 +0,0 @@
|
|||||||
resource/ui/menus/viewstats_weapons.menu
|
|
||||||
{
|
|
||||||
menu
|
|
||||||
{
|
|
||||||
ControlName Frame
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
zpos 3
|
|
||||||
wide f0
|
|
||||||
tall f0
|
|
||||||
autoResize 0
|
|
||||||
pinCorner 0
|
|
||||||
visible 1
|
|
||||||
enabled 1
|
|
||||||
PaintBackgroundType 0
|
|
||||||
infocus_bgcolor_overridep "0 0 0 0"
|
|
||||||
outoffocus_bgcolor_override "0 0 0 0"
|
|
||||||
|
|
||||||
Vignette
|
|
||||||
{
|
|
||||||
ControlName ImagePanel
|
|
||||||
InheritProperties MenuVignette
|
|
||||||
}
|
|
||||||
|
|
||||||
MenuTitle
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
InheritProperties MenuTitle
|
|
||||||
labelText "#STATS_PILOT_WEAPONS"
|
|
||||||
}
|
|
||||||
|
|
||||||
MenuCommon
|
|
||||||
{
|
|
||||||
ControlName CNestedPanel
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
wide f0
|
|
||||||
tall f0
|
|
||||||
visible 1
|
|
||||||
controlSettingsFile "resource/ui/menus/panels/menu_common.res"
|
|
||||||
}
|
|
||||||
|
|
||||||
MatchmakingStatus
|
|
||||||
{
|
|
||||||
ControlName CNestedPanel
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
wide f0
|
|
||||||
tall f0
|
|
||||||
visible 1
|
|
||||||
controlSettingsFile "resource/ui/menus/panels/matchmaking_status.res"
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
GridPanel
|
|
||||||
{
|
|
||||||
ControlName CNestedPanel
|
|
||||||
xpos 96
|
|
||||||
ypos 193
|
|
||||||
zpos 99
|
|
||||||
wide 224
|
|
||||||
tall 702
|
|
||||||
visible 1
|
|
||||||
tabPosition 1
|
|
||||||
controlSettingsFile "Resource/UI/menus/panels/weapon_stats_grid.res"
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
Screen
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
wide f0
|
|
||||||
tall f0
|
|
||||||
labelText ""
|
|
||||||
//bgcolor_override "100 100 100 100"
|
|
||||||
//paintbackground 1
|
|
||||||
//visible 1
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
WeaponName
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos -516
|
|
||||||
ypos -366
|
|
||||||
zpos 101
|
|
||||||
auto_wide_tocontents 1
|
|
||||||
auto_tall_tocontents 1
|
|
||||||
visible 1
|
|
||||||
font DefaultBold_44
|
|
||||||
labelText "WEAPON NAME"
|
|
||||||
allcaps 1
|
|
||||||
fgcolor_override "255 255 255 255"
|
|
||||||
//bgcolor_override "0 255 0 100"
|
|
||||||
|
|
||||||
pin_to_sibling Screen
|
|
||||||
pin_corner_to_sibling TOP_LEFT
|
|
||||||
pin_to_sibling_corner BOTTOM
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
KillsHeader
|
|
||||||
{
|
|
||||||
ControlName RuiPanel
|
|
||||||
rui "ui/stats_background.rpak"
|
|
||||||
zpos 101
|
|
||||||
wide 500
|
|
||||||
tall 194
|
|
||||||
visible 1
|
|
||||||
scaleImage 1
|
|
||||||
|
|
||||||
pin_to_sibling WeaponName
|
|
||||||
pin_corner_to_sibling TOP_LEFT
|
|
||||||
pin_to_sibling_corner BOTTOM_LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsHeaderLabel
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos -18
|
|
||||||
ypos -6
|
|
||||||
zpos 102
|
|
||||||
wide 400
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
font Default_31
|
|
||||||
labelText "#STATS_HEADER_KILL_HISTORY"
|
|
||||||
allcaps 1
|
|
||||||
textAlignment west
|
|
||||||
fgcolor_override "255 255 255 255"
|
|
||||||
//bgcolor_override "255 255 0 100"
|
|
||||||
|
|
||||||
pin_to_sibling KillsHeader
|
|
||||||
pin_corner_to_sibling TOP_LEFT
|
|
||||||
pin_to_sibling_corner TOP_LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsLineBackground0
|
|
||||||
{
|
|
||||||
ControlName RuiPanel
|
|
||||||
rui "ui/stats_line_background.rpak"
|
|
||||||
xpos 0
|
|
||||||
ypos -48
|
|
||||||
zpos 101
|
|
||||||
wide 500
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
scaleImage 1
|
|
||||||
|
|
||||||
pin_to_sibling KillsHeader
|
|
||||||
pin_corner_to_sibling TOP_LEFT
|
|
||||||
pin_to_sibling_corner TOP_LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsLabel0
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos -18
|
|
||||||
ypos 0
|
|
||||||
zpos 102
|
|
||||||
wide 308
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
font Default_23
|
|
||||||
labelText "#STATS_HEADER_TOTAL_KILLS"
|
|
||||||
allcaps 1
|
|
||||||
textAlignment west
|
|
||||||
fgcolor_override "255 255 255 255"
|
|
||||||
//bgcolor_override "255 255 0 100"
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground0
|
|
||||||
pin_corner_to_sibling LEFT
|
|
||||||
pin_to_sibling_corner LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsValue0
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
zpos 102
|
|
||||||
wide 94
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
font Default_23
|
|
||||||
labelText "--"
|
|
||||||
allcaps 1
|
|
||||||
textAlignment center
|
|
||||||
fgcolor_override "255 255 255 255"
|
|
||||||
//bgcolor_override "0 255 0 100"
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground0
|
|
||||||
pin_corner_to_sibling RIGHT
|
|
||||||
pin_to_sibling_corner RIGHT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsLineBackground1
|
|
||||||
{
|
|
||||||
ControlName RuiPanel
|
|
||||||
rui "ui/stats_line_background.rpak"
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
zpos 101
|
|
||||||
wide 500
|
|
||||||
tall 36
|
|
||||||
visible 0
|
|
||||||
scaleImage 1
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground0
|
|
||||||
pin_corner_to_sibling TOP_LEFT
|
|
||||||
pin_to_sibling_corner BOTTOM_LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsLabel1
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos -18
|
|
||||||
ypos 0
|
|
||||||
zpos 102
|
|
||||||
wide 308
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
font Default_23
|
|
||||||
labelText "#STATS_KILLS_PILOTS"
|
|
||||||
allcaps 1
|
|
||||||
textAlignment west
|
|
||||||
fgcolor_override "255 255 255 255"
|
|
||||||
//bgcolor_override "255 255 0 100"
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground1
|
|
||||||
pin_corner_to_sibling LEFT
|
|
||||||
pin_to_sibling_corner LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsValue1
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
zpos 102
|
|
||||||
wide 94
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
font Default_23
|
|
||||||
labelText "--"
|
|
||||||
allcaps 1
|
|
||||||
textAlignment center
|
|
||||||
fgcolor_override "255 255 255 255"
|
|
||||||
//bgcolor_override "0 255 0 100"
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground1
|
|
||||||
pin_corner_to_sibling RIGHT
|
|
||||||
pin_to_sibling_corner RIGHT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsLineBackground2
|
|
||||||
{
|
|
||||||
ControlName RuiPanel
|
|
||||||
rui "ui/stats_line_background.rpak"
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
zpos 101
|
|
||||||
wide 500
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
scaleImage 1
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground1
|
|
||||||
pin_corner_to_sibling TOP_LEFT
|
|
||||||
pin_to_sibling_corner BOTTOM_LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsLabel2
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos -18
|
|
||||||
ypos 0
|
|
||||||
zpos 102
|
|
||||||
wide 308
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
font Default_23
|
|
||||||
labelText "#STATS_KILLS_TITANS"
|
|
||||||
allcaps 1
|
|
||||||
textAlignment west
|
|
||||||
fgcolor_override "255 255 255 255"
|
|
||||||
//bgcolor_override "255 255 0 100"
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground2
|
|
||||||
pin_corner_to_sibling LEFT
|
|
||||||
pin_to_sibling_corner LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsValue2
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
zpos 102
|
|
||||||
wide 94
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
font Default_23
|
|
||||||
labelText "--"
|
|
||||||
allcaps 1
|
|
||||||
textAlignment center
|
|
||||||
fgcolor_override "255 255 255 255"
|
|
||||||
//bgcolor_override "0 255 0 100"
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground2
|
|
||||||
pin_corner_to_sibling RIGHT
|
|
||||||
pin_to_sibling_corner RIGHT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsLineBackground3
|
|
||||||
{
|
|
||||||
ControlName RuiPanel
|
|
||||||
rui "ui/stats_line_background.rpak"
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
zpos 101
|
|
||||||
wide 500
|
|
||||||
tall 36
|
|
||||||
visible 0
|
|
||||||
scaleImage 1
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground2
|
|
||||||
pin_corner_to_sibling TOP_LEFT
|
|
||||||
pin_to_sibling_corner BOTTOM_LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsLabel3
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos -18
|
|
||||||
ypos 0
|
|
||||||
zpos 102
|
|
||||||
wide 308
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
font Default_23
|
|
||||||
labelText "DEATHS WITH WEAPON"
|
|
||||||
allcaps 1
|
|
||||||
textAlignment west
|
|
||||||
fgcolor_override "255 255 255 255"
|
|
||||||
//bgcolor_override "255 255 0 100"
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground3
|
|
||||||
pin_corner_to_sibling LEFT
|
|
||||||
pin_to_sibling_corner LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
KillsValue3
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
xpos 0
|
|
||||||
ypos 0
|
|
||||||
zpos 102
|
|
||||||
wide 94
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
font Default_23
|
|
||||||
labelText "--"
|
|
||||||
allcaps 1
|
|
||||||
textAlignment center
|
|
||||||
fgcolor_override "255 255 255 255"
|
|
||||||
//bgcolor_override "0 255 0 100"
|
|
||||||
|
|
||||||
pin_to_sibling KillsLineBackground3
|
|
||||||
pin_corner_to_sibling RIGHT
|
|
||||||
pin_to_sibling_corner RIGHT
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
Stat0
|
|
||||||
{
|
|
||||||
ControlName RuiPanel
|
|
||||||
rui "ui/stat_box_e.rpak"
|
|
||||||
xpos 8
|
|
||||||
zpos 100
|
|
||||||
wide 210
|
|
||||||
tall 93
|
|
||||||
visible 1
|
|
||||||
|
|
||||||
pin_to_sibling KillsHeader
|
|
||||||
pin_corner_to_sibling TOP_LEFT
|
|
||||||
pin_to_sibling_corner TOP_RIGHT
|
|
||||||
}
|
|
||||||
|
|
||||||
Stat1
|
|
||||||
{
|
|
||||||
ControlName RuiPanel
|
|
||||||
rui "ui/stat_box_e.rpak"
|
|
||||||
xpos 8
|
|
||||||
zpos 100
|
|
||||||
wide 210
|
|
||||||
tall 93
|
|
||||||
visible 1
|
|
||||||
|
|
||||||
pin_to_sibling Stat0
|
|
||||||
pin_corner_to_sibling LEFT
|
|
||||||
pin_to_sibling_corner RIGHT
|
|
||||||
}
|
|
||||||
|
|
||||||
Stat2
|
|
||||||
{
|
|
||||||
ControlName RuiPanel
|
|
||||||
rui "ui/stat_box_e.rpak"
|
|
||||||
ypos 8
|
|
||||||
zpos 100
|
|
||||||
wide 210
|
|
||||||
tall 93
|
|
||||||
visible 1
|
|
||||||
|
|
||||||
pin_to_sibling Stat0
|
|
||||||
pin_corner_to_sibling TOP_LEFT
|
|
||||||
pin_to_sibling_corner BOTTOM_LEFT
|
|
||||||
}
|
|
||||||
|
|
||||||
Stat3
|
|
||||||
{
|
|
||||||
ControlName RuiPanel
|
|
||||||
rui "ui/stat_box_e.rpak"
|
|
||||||
xpos 8
|
|
||||||
zpos 100
|
|
||||||
wide 210
|
|
||||||
tall 93
|
|
||||||
visible 1
|
|
||||||
|
|
||||||
pin_to_sibling Stat2
|
|
||||||
pin_corner_to_sibling LEFT
|
|
||||||
pin_to_sibling_corner RIGHT
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
NextUnlock
|
|
||||||
{
|
|
||||||
ControlName RuiPanel
|
|
||||||
rui "ui/stats_next_unlock.rpak"
|
|
||||||
xpos 8
|
|
||||||
zpos 90
|
|
||||||
wide 356
|
|
||||||
tall 194
|
|
||||||
visible 1
|
|
||||||
scaleImage 1
|
|
||||||
|
|
||||||
pin_to_sibling Stat1
|
|
||||||
pin_corner_to_sibling TOP_LEFT
|
|
||||||
pin_to_sibling_corner TOP_RIGHT
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
ModelRotateMouseCapture
|
|
||||||
{
|
|
||||||
ControlName CMouseMovementCapturePanel
|
|
||||||
xpos 580
|
|
||||||
zpos 12
|
|
||||||
wide 1340
|
|
||||||
tall %100
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
LblWeaponLocked
|
|
||||||
{
|
|
||||||
ControlName Label
|
|
||||||
classname LblWeaponLocked
|
|
||||||
xpos -650
|
|
||||||
ypos 142
|
|
||||||
zpos 102
|
|
||||||
wide 474
|
|
||||||
auto_tall_tocontents 1
|
|
||||||
visible 1
|
|
||||||
font Default_27_DropShadow
|
|
||||||
allcaps 1
|
|
||||||
textAlignment center
|
|
||||||
labelText "UNLOCK INFO"
|
|
||||||
fgcolor_override "153 61 61 255"
|
|
||||||
bgcolor_override "51 20 20 240"
|
|
||||||
pin_to_sibling KillsHeader
|
|
||||||
pin_corner_to_sibling BOTTOM
|
|
||||||
pin_to_sibling_corner TOP_LEFT
|
|
||||||
paintbackground 1
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
FooterButtons
|
|
||||||
{
|
|
||||||
ControlName CNestedPanel
|
|
||||||
xpos 0
|
|
||||||
ypos r119
|
|
||||||
wide f0
|
|
||||||
tall 36
|
|
||||||
visible 1
|
|
||||||
controlSettingsFile "resource/ui/menus/panels/footer_buttons.res"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+32
-244
@@ -1,267 +1,55 @@
|
|||||||
global function pulseInit
|
global function GetStatsFromToneAPI
|
||||||
global function GetWeaponStatsFromToneAPI
|
global function getWeaponKillsFromToneApi
|
||||||
global function GetGlobalDataFromToneAPI
|
|
||||||
global function GetMapStatsFromToneAPI
|
|
||||||
global function GetGamemodeStatsFromToneAPI
|
|
||||||
global function getWeaponKillsFromToneAPI
|
|
||||||
global function getNemesisWeaponFromToneAPI
|
|
||||||
global function getDWEFromToneAPI
|
|
||||||
global function getMapKillFromToneAPI
|
|
||||||
global function getMapDeathFromToneAPI
|
|
||||||
global function getMapDistFromToneAPI
|
|
||||||
global function getMapMDistFromToneAPI
|
|
||||||
global function fetchGamemodeStatsFromToneAPI
|
|
||||||
|
|
||||||
global table globalToneAPIKillData = {}
|
global table globalToneAPIKillData = {}
|
||||||
global table globalToneAPIDeathData = {}
|
|
||||||
global table globalToneAPIDWEData = {}
|
|
||||||
global table globalToneAPIMapDeathData = {}
|
|
||||||
global table globalToneAPIMapDistData = {}
|
|
||||||
global table globalToneAPIMapKillData = {}
|
|
||||||
global table globalToneAPIMapMDistData = {}
|
|
||||||
global table globalToneAPIGamemodeData = {}
|
|
||||||
global table globalToneAPIAllPlayerKillData = {}
|
|
||||||
global table globalToneAPIAllPlayerDeathData = {}
|
|
||||||
global table< table > globalToneAPIGamemodeMapData = {}
|
|
||||||
|
|
||||||
string prefix = "default"
|
void function GetStatsFromToneAPI()
|
||||||
string HTTPrequestURL = "default"
|
|
||||||
string currentVersion = "default"
|
|
||||||
int weaponEntries = 0
|
|
||||||
int mapEntries = 0
|
|
||||||
int gamemodeEntries = 0
|
|
||||||
int mapGamemodeEntries = 0
|
|
||||||
|
|
||||||
void function pulseInit()
|
|
||||||
{
|
{
|
||||||
prefix = "\x1b[38;2;255;178;102m[PULSE]\x1b[0m "
|
//SetConVarString("ToneURL", "https://toneapi.sleepycat.date/v1")
|
||||||
HTTPrequestURL = GetConVarString("ToneURL")
|
print("[PULSE] Loaded, getting data...")
|
||||||
currentVersion = "v" + GetConVarString("MajorVersion") + "." + GetConVarString("MinorVersion") + "." + GetConVarString("PatchVersion")
|
HttpRequest getStats
|
||||||
HttpRequest getVersion
|
getStats.method = HttpRequestMethod.GET
|
||||||
getVersion.method = HttpRequestMethod.GET
|
getStats.url = "https://tone.sleepycat.date/v1/client/weapons"
|
||||||
getVersion.url = GetConVarString("VersionURL")
|
getStats.queryParameters["player"] <- [NSGetLocalPlayerUID().tostring()]
|
||||||
void functionref(HttpRequestResponse) onSuccess = void function(HttpRequestResponse response)
|
void functionref(HttpRequestResponse) onSuccess = void function(HttpRequestResponse response)
|
||||||
{
|
{
|
||||||
table JSONDecoded = DecodeJSON(response.body)
|
print("[PULSE] Kill data received, processing...")
|
||||||
if (JSONDecoded["Major"] == GetConVarString("MajorVersion") && JSONDecoded["Minor"] == GetConVarString("MinorVersion") && JSONDecoded["Patch"] == GetConVarString("PatchVersion")) {
|
|
||||||
print(prefix + currentVersion + " has been loaded and is up to date.")
|
|
||||||
} else {
|
|
||||||
print(prefix + currentVersion + " has been loaded. Recommend updating to latest version: v" + JSONDecoded["Major"] + "." + JSONDecoded["Minor"] + "." + JSONDecoded["Patch"] + ".")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void functionref(HttpRequestFailure) onFailure = void function(HttpRequestFailure failure)
|
|
||||||
{
|
|
||||||
print(prefix + currentVersion + " has been loaded and has encountered an error getting latest version data.")
|
|
||||||
}
|
|
||||||
NSHttpRequest(getVersion, onSuccess, onFailure)
|
|
||||||
}
|
|
||||||
|
|
||||||
void function GetWeaponStatsFromToneAPI()
|
|
||||||
{
|
|
||||||
print(prefix + "Getting kill data...")
|
|
||||||
weaponEntries = 0
|
|
||||||
HttpRequest getWeaponStats
|
|
||||||
getWeaponStats.method = HttpRequestMethod.GET
|
|
||||||
getWeaponStats.url = HTTPrequestURL + "/weapons"
|
|
||||||
getWeaponStats.queryParameters["player"] <- [NSGetLocalPlayerUID()]
|
|
||||||
void functionref(HttpRequestResponse) onSuccess = void function(HttpRequestResponse response)
|
|
||||||
{
|
|
||||||
print(prefix + "Kill data received, processing...")
|
|
||||||
table JSONForConversion = DecodeJSON(response.body)
|
table JSONForConversion = DecodeJSON(response.body)
|
||||||
foreach (var key, var value in JSONForConversion) {
|
foreach (var key, var value in JSONForConversion) {
|
||||||
table test = expect table(value)
|
table test = expect table(value)
|
||||||
globalToneAPIKillData[string(key)] <- test.kills
|
//this won't work on v2 since kills will be an integer already
|
||||||
globalToneAPIDeathData[string(key)] <- test.deaths
|
string kills = expect string(test.kills)
|
||||||
globalToneAPIDWEData[string(key)] <- test.deaths_while_equipped
|
globalToneAPIKillData[string(key)] <- kills.tointeger()
|
||||||
weaponEntries += 1
|
print("[PULSE] " + key + " has been added.")
|
||||||
}
|
}
|
||||||
print(prefix + "Kill data has been processed with a total of " + string(weaponEntries) + " entries.")
|
print("[PULSE] Kill data has been processed.")
|
||||||
}
|
}
|
||||||
|
|
||||||
void functionref(HttpRequestFailure) onFailure = void function(HttpRequestFailure failure)
|
void functionref(HttpRequestFailure) onFailure = void function(HttpRequestFailure failure)
|
||||||
{
|
{
|
||||||
print(prefix + "Encountered an error getting kill data...")
|
print("[PULSE] Encountered an error getting kill data...")
|
||||||
}
|
}
|
||||||
|
|
||||||
NSHttpRequest(getWeaponStats, onSuccess, onFailure)
|
bool result = NSHttpRequest(getStats, onSuccess, onFailure)
|
||||||
|
print("[PULSE] result is " + result)
|
||||||
}
|
}
|
||||||
|
|
||||||
void function GetGlobalDataFromToneAPI()
|
int function getWeaponKillsFromToneApi(string weaponRef){
|
||||||
{
|
|
||||||
print(prefix + "Getting global data...")
|
//Sliced names are to be removed afterwards
|
||||||
weaponEntries = 0
|
print("[PULSE]" + weaponRef)
|
||||||
HttpRequest getGlobalStats
|
if(weaponRef.find("mp_weapon") != null){
|
||||||
getGlobalStats.method = HttpRequestMethod.GET
|
weaponRef = weaponRef.slice(10)
|
||||||
getGlobalStats.url = HTTPrequestURL + "/weapons"
|
}
|
||||||
getGlobalStats.queryParameters["player"] <- ["!" + NSGetLocalPlayerUID()]
|
|
||||||
void functionref(HttpRequestResponse) onSuccess = void function(HttpRequestResponse response)
|
foreach (var key, var value in globalToneAPIKillData) {
|
||||||
{
|
print(key)
|
||||||
print(prefix + "Global data received, processing...")
|
print(value)
|
||||||
table JSONForConversion = DecodeJSON(response.body)
|
|
||||||
foreach (var key, var value in JSONForConversion) {
|
|
||||||
table test = expect table(value)
|
|
||||||
globalToneAPIAllPlayerKillData[string(key)] <- test.kills
|
|
||||||
globalToneAPIAllPlayerDeathData[string(key)] <- test.deaths
|
|
||||||
weaponEntries += 1
|
|
||||||
}
|
|
||||||
print(prefix + "Global data has been processed with a total of " + string(weaponEntries) + " entries.")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void functionref(HttpRequestFailure) onFailure = void function(HttpRequestFailure failure)
|
|
||||||
{
|
|
||||||
print(prefix + "Encountered an error getting global data...")
|
|
||||||
}
|
|
||||||
|
|
||||||
NSHttpRequest(getGlobalStats, onSuccess, onFailure)
|
|
||||||
}
|
|
||||||
|
|
||||||
void function GetMapStatsFromToneAPI()
|
|
||||||
{
|
|
||||||
print(prefix + "Getting map data...")
|
|
||||||
mapEntries = 0
|
|
||||||
HttpRequest getMapStats
|
|
||||||
getMapStats.method = HttpRequestMethod.GET
|
|
||||||
getMapStats.url = HTTPrequestURL + "/maps"
|
|
||||||
getMapStats.queryParameters["player"] <- [NSGetLocalPlayerUID()]
|
|
||||||
void functionref(HttpRequestResponse) onSuccess = void function(HttpRequestResponse response)
|
|
||||||
{
|
|
||||||
print(prefix + "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
|
|
||||||
mapEntries += 1
|
|
||||||
}
|
|
||||||
print(prefix + "Map data has been processed with a total of " + string(mapEntries) + " entries.")
|
|
||||||
}
|
|
||||||
|
|
||||||
void functionref(HttpRequestFailure) onFailure = void function(HttpRequestFailure failure)
|
|
||||||
{
|
|
||||||
print(prefix + "Encountered an error getting map data...")
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
string mapNameSliced = mapName.slice(3)
|
|
||||||
HttpRequest getMapGamemodeStats
|
|
||||||
getMapGamemodeStats.method = HttpRequestMethod.GET
|
|
||||||
getMapGamemodeStats.url = HTTPrequestURL + "/gamemodes"
|
|
||||||
getMapGamemodeStats.queryParameters["map"] <- [mapNameSliced]
|
|
||||||
getMapGamemodeStats.queryParameters["player"] <- [NSGetLocalPlayerUID()]
|
|
||||||
void functionref(HttpRequestResponse) onSuccess = void function(HttpRequestResponse response):(mapName)
|
|
||||||
{
|
|
||||||
table JSONForConversion = DecodeJSON(response.body)
|
|
||||||
table mapData = {}
|
|
||||||
foreach (var gamemode, var value in JSONForConversion) {
|
|
||||||
table test = expect table(value)
|
|
||||||
mapData[string(gamemode)] <- test.kills
|
|
||||||
mapGamemodeEntries += 1
|
|
||||||
}
|
|
||||||
|
|
||||||
globalToneAPIGamemodeMapData[mapName] <- mapData
|
|
||||||
|
|
||||||
print(prefix + "Map gamemode data has been processed with a total of " + string(mapGamemodeEntries) + " entries.")
|
|
||||||
}
|
|
||||||
|
|
||||||
void functionref(HttpRequestFailure) onFailure = void function(HttpRequestFailure failure)
|
|
||||||
{
|
|
||||||
print(prefix + "Encountered an error getting map gamemode data...")
|
|
||||||
}
|
|
||||||
|
|
||||||
NSHttpRequest(getMapGamemodeStats, onSuccess, onFailure)
|
|
||||||
}
|
|
||||||
|
|
||||||
int function getWeaponKillsFromToneAPI(string weaponRef){
|
|
||||||
|
|
||||||
if(weaponRef in globalToneAPIKillData){
|
if(weaponRef in globalToneAPIKillData){
|
||||||
|
print("found!")
|
||||||
|
print(globalToneAPIKillData[weaponRef])
|
||||||
return expect int(globalToneAPIKillData[weaponRef])
|
return expect int(globalToneAPIKillData[weaponRef])
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
int function getNemesisWeaponFromToneAPI(string weaponRef){
|
|
||||||
|
|
||||||
if(weaponRef in globalToneAPIDeathData){
|
|
||||||
return expect int(globalToneAPIDeathData[weaponRef])
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
int function getDWEFromToneAPI(string weaponRef){
|
|
||||||
|
|
||||||
if(weaponRef in globalToneAPIDWEData){
|
|
||||||
return expect int(globalToneAPIDWEData[weaponRef])
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
int function getMapKillFromToneAPI(string mapName){
|
|
||||||
|
|
||||||
mapName = mapName.slice(3)
|
|
||||||
if(mapName in globalToneAPIMapKillData){
|
|
||||||
return expect int(globalToneAPIMapKillData[mapName])
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
int function getMapDeathFromToneAPI(string mapName){
|
|
||||||
|
|
||||||
mapName = mapName.slice(3)
|
|
||||||
if(mapName in globalToneAPIMapDeathData){
|
|
||||||
return expect int(globalToneAPIMapDeathData[mapName])
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
int function getMapMDistFromToneAPI(string mapName){
|
|
||||||
|
|
||||||
mapName = mapName.slice(3)
|
|
||||||
if(mapName in globalToneAPIMapMDistData){
|
|
||||||
return expect int(globalToneAPIMapMDistData[mapName])
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
int function getMapDistFromToneAPI(string mapName){
|
|
||||||
|
|
||||||
mapName = mapName.slice(3)
|
|
||||||
if(mapName in globalToneAPIMapDistData){
|
|
||||||
return expect int(globalToneAPIMapDistData[mapName])
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
|
|
||||||
global function InitViewStatsMenu
|
|
||||||
|
|
||||||
struct{
|
|
||||||
array<string> allMaps
|
|
||||||
} file
|
|
||||||
|
|
||||||
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()
|
|
||||||
{
|
|
||||||
foreach(elemNum in file.allMaps){
|
|
||||||
string mapName = expect string(file.allMaps[ elemNum ])
|
|
||||||
fetchGamemodeStatsFromToneAPI(mapName)
|
|
||||||
}
|
|
||||||
GetWeaponStatsFromToneAPI()
|
|
||||||
GetGlobalDataFromToneAPI()
|
|
||||||
GetMapStatsFromToneAPI()
|
|
||||||
GetGamemodeStatsFromToneAPI()
|
|
||||||
UI_SetPresentationType( ePresentationType.DEFAULT )
|
|
||||||
|
|
||||||
//UpdateViewStatsKillsMenu()
|
|
||||||
//UpdateViewStatsDistanceMenu()
|
|
||||||
}
|
|
||||||
@@ -1,315 +0,0 @@
|
|||||||
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 ) )
|
|
||||||
}
|
|
||||||
|
|
||||||
bool function MapButton_Init( var button, int elemNum )
|
|
||||||
{
|
|
||||||
string mapName = file.allMaps[ elemNum ]
|
|
||||||
UpdateStatsForMap( mapName )
|
|
||||||
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 ) )
|
|
||||||
|
|
||||||
fetchGamemodeStatsFromToneAPI(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<string> gameModesArray = GetPersistenceEnumAsArray( "gameModes" )
|
|
||||||
|
|
||||||
array<PieChartEntry> modes
|
|
||||||
int enumCount = PersistenceGetEnumCount( "gameModes" )
|
|
||||||
table< string, array<int> > customGamemodeList = {
|
|
||||||
sns = [255, 178, 102, 255],
|
|
||||||
fw = [147, 204, 57, 255],
|
|
||||||
gg = [14, 87, 132, 255]
|
|
||||||
}
|
|
||||||
for ( int modeId = 0; modeId < enumCount; modeId++ )
|
|
||||||
{
|
|
||||||
string modeName = PersistenceGetEnumItemNameForIndex( "gameModes", modeId )
|
|
||||||
if ( mapName in globalToneAPIGamemodeMapData && modeName in globalToneAPIGamemodeMapData[mapName] )
|
|
||||||
{
|
|
||||||
float modePlayedTime = 0
|
|
||||||
modePlayedTime = float(globalToneAPIGamemodeMapData[mapName][modeName])
|
|
||||||
if ( modePlayedTime > 0 ) {
|
|
||||||
AddPieChartEntry( modes, GameMode_GetName( modeName ), modePlayedTime, GetGameModeDisplayColor( modeName ) )
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach (string key, array<int> value in customGamemodeList)
|
|
||||||
{
|
|
||||||
if ( mapName in globalToneAPIGamemodeMapData && key in globalToneAPIGamemodeMapData[mapName])
|
|
||||||
{
|
|
||||||
float modePlayedTime = 0
|
|
||||||
modePlayedTime = float(globalToneAPIGamemodeMapData[mapName][key])
|
|
||||||
if ( modePlayedTime > 0 ) {
|
|
||||||
AddPieChartEntry( modes, key, modePlayedTime, value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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", "KILLS BY GAMEMODE", modesPlayedData )
|
|
||||||
|
|
||||||
array<string> fdMaps = GetPlaylistMaps( "fd" )
|
|
||||||
|
|
||||||
if ( 0 == 1 ) // maybe work later on some FD servers
|
|
||||||
{
|
|
||||||
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 )
|
|
||||||
}
|
|
||||||
@@ -5,12 +5,9 @@ global function InitViewStatsOverviewMenu
|
|||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
var menu
|
var menu
|
||||||
array<ItemDisplayData> allTitans
|
|
||||||
table<string, array<string> > titanStatLoadout
|
|
||||||
} file
|
} file
|
||||||
|
|
||||||
const MAX_DOTS_ON_GRAPH = 10
|
const MAX_DOTS_ON_GRAPH = 10
|
||||||
table <string, int> titanKillData = {}
|
|
||||||
|
|
||||||
const IMAGE_TITAN_STRYDER = $"ui/menu/personal_stats/ps_titan_icon_stryder"
|
const IMAGE_TITAN_STRYDER = $"ui/menu/personal_stats/ps_titan_icon_stryder"
|
||||||
const IMAGE_TITAN_ATLAS = $"ui/menu/personal_stats/ps_titan_icon_atlas"
|
const IMAGE_TITAN_ATLAS = $"ui/menu/personal_stats/ps_titan_icon_atlas"
|
||||||
@@ -30,42 +27,10 @@ void function InitViewStatsOverviewMenu()
|
|||||||
AddMenuFooterOption( menu, BUTTON_B, "#B_BUTTON_BACK", "#BACK" )
|
AddMenuFooterOption( menu, BUTTON_B, "#B_BUTTON_BACK", "#BACK" )
|
||||||
}
|
}
|
||||||
|
|
||||||
void function GetTitanKills( string titanName )
|
|
||||||
{
|
|
||||||
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" ) ) )
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ( weaponRef in file.titanStatLoadout[ titanName ])
|
|
||||||
{
|
|
||||||
titanKillData[weaponRef] <- getWeaponKillsFromToneAPI(weaponRef)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void function OnStatsOverview_Open()
|
void function OnStatsOverview_Open()
|
||||||
{
|
{
|
||||||
UI_SetPresentationType( ePresentationType.NO_MODELS )
|
UI_SetPresentationType( ePresentationType.NO_MODELS )
|
||||||
|
|
||||||
GetTitanKills("ion")
|
|
||||||
GetTitanKills("scorch")
|
|
||||||
GetTitanKills("northstar")
|
|
||||||
GetTitanKills("ronin")
|
|
||||||
GetTitanKills("tone")
|
|
||||||
GetTitanKills("legion")
|
|
||||||
GetTitanKills("vanguard")
|
|
||||||
|
|
||||||
UpdateViewStatsOverviewMenu()
|
UpdateViewStatsOverviewMenu()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,19 +51,12 @@ function UpdateViewStatsOverviewMenu()
|
|||||||
int timesMVP = GetPlayerStatInt( player, "game_stats", "mvp_total" )
|
int timesMVP = GetPlayerStatInt( player, "game_stats", "mvp_total" )
|
||||||
int timesTop3 = GetPlayerStat_AllCompetitiveModesAndMapsInt( player, "game_stats", "top3OnTeam" )
|
int timesTop3 = GetPlayerStat_AllCompetitiveModesAndMapsInt( player, "game_stats", "top3OnTeam" )
|
||||||
|
|
||||||
//SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat0" ), Localize( "#STATS_HEADER_TIME_PLAYED" ), timePlayed )
|
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat0" ), Localize( "#STATS_HEADER_TIME_PLAYED" ), timePlayed )
|
||||||
//SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat1" ), Localize( "#STATS_GAMES_PLAYED" ), string( gamesPlayed ) )
|
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat1" ), Localize( "#STATS_GAMES_PLAYED" ), string( gamesPlayed ) )
|
||||||
//SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat2" ), Localize( "#STATS_GAMES_WON" ), string( gamesWon ) )
|
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat2" ), Localize( "#STATS_GAMES_WON" ), string( gamesWon ) )
|
||||||
//SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat3" ), Localize( "#STATS_GAMES_WIN_PERCENT" ), Localize( "#STATS_PERCENTAGE", winPercent ) )
|
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat3" ), Localize( "#STATS_GAMES_WIN_PERCENT" ), Localize( "#STATS_PERCENTAGE", winPercent ) )
|
||||||
//SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat4" ), Localize( "#STATS_GAMES_MVP" ), string( timesMVP ) )
|
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat4" ), Localize( "#STATS_GAMES_MVP" ), string( timesMVP ) )
|
||||||
//SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat5" ), Localize( "#STATS_GAMES_TOP3" ), string( timesTop3 ) )
|
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat5" ), Localize( "#STATS_GAMES_TOP3" ), string( timesTop3 ) )
|
||||||
|
|
||||||
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat0" ), Localize( "#STATS_HEADER_TIME_PLAYED" ), string( 0 ))
|
|
||||||
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat1" ), Localize( "#STATS_GAMES_PLAYED" ), string( 0 ) )
|
|
||||||
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat2" ), Localize( "#STATS_GAMES_WON" ), string( 0 ) )
|
|
||||||
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat3" ), Localize( "#STATS_GAMES_WIN_PERCENT" ), string( 0 ) )
|
|
||||||
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat4" ), Localize( "#STATS_GAMES_MVP" ), string( 0 ) )
|
|
||||||
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat5" ), Localize( "#STATS_GAMES_TOP3" ), string( 0 ) )
|
|
||||||
|
|
||||||
//#########################
|
//#########################
|
||||||
// Modes
|
// Modes
|
||||||
@@ -160,7 +118,7 @@ function UpdateViewStatsOverviewMenu()
|
|||||||
|
|
||||||
table<string, table> weaponData = GetOverviewWeaponData()
|
table<string, table> weaponData = GetOverviewWeaponData()
|
||||||
table mostKillsData = weaponData[ "most_kills" ]
|
table mostKillsData = weaponData[ "most_kills" ]
|
||||||
table nemesisWeapon = weaponData[ "nemesis_weapon" ]
|
table mostUsedData = weaponData[ "most_used" ]
|
||||||
table highestKPMData = weaponData[ "highest_kpm" ]
|
table highestKPMData = weaponData[ "highest_kpm" ]
|
||||||
|
|
||||||
var weaponImageElem
|
var weaponImageElem
|
||||||
@@ -200,14 +158,14 @@ function UpdateViewStatsOverviewMenu()
|
|||||||
weaponNameElem = Hud_GetChild( file.menu, "WeaponName1" )
|
weaponNameElem = Hud_GetChild( file.menu, "WeaponName1" )
|
||||||
weaponDescElem = Hud_GetChild( file.menu, "WeaponDesc1" )
|
weaponDescElem = Hud_GetChild( file.menu, "WeaponDesc1" )
|
||||||
noDataElem = Hud_GetChild( file.menu, "WeaponImageTextOverlay1" )
|
noDataElem = Hud_GetChild( file.menu, "WeaponImageTextOverlay1" )
|
||||||
if ( nemesisWeapon.ref != "" )
|
if ( mostUsedData.ref != "" )
|
||||||
{
|
{
|
||||||
SetItemImageWidth( weaponImageElem, expect string( nemesisWeapon.ref ) )
|
SetItemImageWidth( weaponImageElem, expect string( mostUsedData.ref ) )
|
||||||
RuiSetImage( weaponRui, "buttonImage", GetItemImage( expect string( nemesisWeapon.ref ) ) )
|
RuiSetImage( weaponRui, "buttonImage", GetItemImage( expect string( mostUsedData.ref ) ) )
|
||||||
Hud_Show( weaponImageElem )
|
Hud_Show( weaponImageElem )
|
||||||
Hud_SetText( weaponNameElem, nemesisWeapon.printName )
|
Hud_SetText( weaponNameElem, mostUsedData.printName )
|
||||||
Hud_Show( weaponNameElem )
|
Hud_Show( weaponNameElem )
|
||||||
Hud_SetText( weaponDescElem, nemesisWeapon.val + " DEATHS BY WEAPON" )
|
SetStatsLabelValue( file.menu, "WeaponDesc1", HoursToTimeString( expect float( mostUsedData.val ) ) )
|
||||||
Hud_Show( weaponDescElem )
|
Hud_Show( weaponDescElem )
|
||||||
Hud_Hide( noDataElem )
|
Hud_Hide( noDataElem )
|
||||||
}
|
}
|
||||||
@@ -232,7 +190,7 @@ function UpdateViewStatsOverviewMenu()
|
|||||||
Hud_Show( weaponImageElem )
|
Hud_Show( weaponImageElem )
|
||||||
Hud_SetText( weaponNameElem, highestKPMData.printName )
|
Hud_SetText( weaponNameElem, highestKPMData.printName )
|
||||||
Hud_Show( weaponNameElem )
|
Hud_Show( weaponNameElem )
|
||||||
Hud_SetText( weaponDescElem, highestKPMData.val + " K/D")
|
Hud_SetText( weaponDescElem, "#STATS_MOST_EFFICIENT_VALUE", highestKPMData.val )
|
||||||
Hud_Show( weaponDescElem )
|
Hud_Show( weaponDescElem )
|
||||||
Hud_Hide( noDataElem )
|
Hud_Hide( noDataElem )
|
||||||
}
|
}
|
||||||
@@ -288,56 +246,22 @@ function UpdateViewStatsOverviewMenu()
|
|||||||
//#########################
|
//#########################
|
||||||
|
|
||||||
// Lifetime
|
// Lifetime
|
||||||
|
local lifetimeAverage = player.GetPersistentVar( "kdratio_lifetime" ).tofloat()
|
||||||
|
local formattedLifetimeAverage
|
||||||
|
if ( lifetimeAverage % 1 == 0 )
|
||||||
|
formattedLifetimeAverage = format( "%.0f", lifetimeAverage )
|
||||||
|
else
|
||||||
|
formattedLifetimeAverage = format( "%.1f", lifetimeAverage )
|
||||||
|
SetStatsLabelValue( file.menu, "LifetimeAverageValue", [ "#STATS_KD_VALUE", formattedLifetimeAverage ] )
|
||||||
|
|
||||||
var totalPilotKills = 0
|
// Lifetime (PVP)
|
||||||
|
local lifetimeAveragePVP = player.GetPersistentVar( "kdratio_lifetime_pvp" ).tofloat()
|
||||||
foreach (var key, var value in globalToneAPIKillData) {
|
local formattedLifetimeAveragePVP
|
||||||
totalPilotKills += value
|
if ( lifetimeAveragePVP % 1 == 0 )
|
||||||
}
|
formattedLifetimeAveragePVP = format( "%.0f", lifetimeAveragePVP )
|
||||||
|
else
|
||||||
var totalGlobalKills = 0
|
formattedLifetimeAveragePVP = format( "%.1f", lifetimeAveragePVP )
|
||||||
foreach (var key, var value in globalToneAPIAllPlayerKillData) {
|
SetStatsLabelValue( file.menu, "LifetimePVPAverageValue", [ "#STATS_KD_VALUE", formattedLifetimeAveragePVP ] )
|
||||||
totalGlobalKills += value
|
|
||||||
}
|
|
||||||
|
|
||||||
var totalGlobalDeaths = 0
|
|
||||||
foreach (var key, var value in globalToneAPIAllPlayerDeathData) {
|
|
||||||
totalGlobalDeaths += value
|
|
||||||
}
|
|
||||||
|
|
||||||
var totalPilotDeaths = 0
|
|
||||||
|
|
||||||
foreach (var key, var value in globalToneAPIDeathData) {
|
|
||||||
totalPilotDeaths += value
|
|
||||||
}
|
|
||||||
|
|
||||||
var killsAsPilot = 0
|
|
||||||
foreach (var key, var value in globalToneAPIKillData) {
|
|
||||||
if (key in titanKillData) {
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
killsAsPilot += getWeaponKillsFromToneAPI(string(key))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var killsAsTitan = 0
|
|
||||||
foreach (var key, var value in globalToneAPIKillData) {
|
|
||||||
if (key in titanKillData) {
|
|
||||||
killsAsTitan += titanKillData[string(key)]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
float kval = float(totalPilotKills)
|
|
||||||
float dval = float(totalPilotDeaths)
|
|
||||||
float kdval = float(int((kval / dval)*100))/100
|
|
||||||
|
|
||||||
float gkval = float(totalGlobalKills)
|
|
||||||
float gdval = float(totalGlobalDeaths)
|
|
||||||
float gkdval = float(int((gkval / gdval)*100))/100
|
|
||||||
|
|
||||||
SetStatsLabelValue( file.menu, "LifetimeAverageValue", [ "#STATS_KD_VALUE", kdval ] )
|
|
||||||
|
|
||||||
SetStatsLabelValue( file.menu, "LifetimePVPAverageValue", [ "#STATS_KD_VALUE", gkdval ] )
|
|
||||||
|
|
||||||
bool last10GamesStatsVisible = gamesPlayed >= NUM_GAMES_TRACK_KDRATIO ? true : false
|
bool last10GamesStatsVisible = gamesPlayed >= NUM_GAMES_TRACK_KDRATIO ? true : false
|
||||||
SetLast10GamesStatVisibility( file.menu, last10GamesStatsVisible )
|
SetLast10GamesStatVisibility( file.menu, last10GamesStatsVisible )
|
||||||
@@ -367,7 +291,7 @@ function UpdateViewStatsOverviewMenu()
|
|||||||
else
|
else
|
||||||
kdratio_match_average = format( "%.1f", kdratio_match_average )
|
kdratio_match_average = format( "%.1f", kdratio_match_average )
|
||||||
SetStatsLabelValue( file.menu, "Last10GamesValue", [ "#STATS_KD_VALUE", kdratio_match_average ] )
|
SetStatsLabelValue( file.menu, "Last10GamesValue", [ "#STATS_KD_VALUE", kdratio_match_average ] )
|
||||||
PlotKDPointsOnGraph( file.menu, 0, kdratio_match, kdval )
|
PlotKDPointsOnGraph( file.menu, 0, kdratio_match, lifetimeAverage )
|
||||||
|
|
||||||
// Last 10 (PVP)
|
// Last 10 (PVP)
|
||||||
local kdratiopvp_match_sum = 0
|
local kdratiopvp_match_sum = 0
|
||||||
@@ -385,33 +309,38 @@ function UpdateViewStatsOverviewMenu()
|
|||||||
else
|
else
|
||||||
kdratiopvp_match_average = format( "%.1f", kdratiopvp_match_average )
|
kdratiopvp_match_average = format( "%.1f", kdratiopvp_match_average )
|
||||||
SetStatsLabelValue( file.menu, "Last10GamesPVPValue", [ "#STATS_KD_VALUE", kdratiopvp_match_average ] )
|
SetStatsLabelValue( file.menu, "Last10GamesPVPValue", [ "#STATS_KD_VALUE", kdratiopvp_match_average ] )
|
||||||
PlotKDPointsOnGraph( file.menu, 1, kdratiopvp_match, gkdval )
|
PlotKDPointsOnGraph( file.menu, 1, kdratiopvp_match, lifetimeAveragePVP )
|
||||||
|
|
||||||
|
var totalPilotKills = 0
|
||||||
|
|
||||||
|
foreach (var key, var value in globalToneAPIKillData) {
|
||||||
|
totalPilotKills += value
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
Hud_SetText( GetElem( file.menu, "KillsAsPilotValue0" ), string( killsAsPilot ) )
|
Hud_SetText( GetElem( file.menu, "KillsAsPilotValue0" ), string( totalPilotKills ) )
|
||||||
Hud_SetText( GetElem( file.menu, "KillsAsPilotValue1" ), string( GetPlayerStatInt( player, "kills_stats", "titanKillsAsPilot" ) ) )
|
Hud_SetText( GetElem( file.menu, "KillsAsPilotValue1" ), string( GetPlayerStatInt( player, "kills_stats", "titanKillsAsPilot" ) ) )
|
||||||
Hud_SetText( GetElem( file.menu, "KillsAsPilotValue2" ), string( GetPlayerStatInt( player, "kills_stats", "totalNPC" ) ) )
|
Hud_SetText( GetElem( file.menu, "KillsAsPilotValue2" ), string( GetPlayerStatInt( player, "kills_stats", "totalNPC" ) ) )
|
||||||
Hud_SetText( GetElem( file.menu, "KillsAsPilotValue3" ), string( getWeaponKillsFromToneAPI("pilot_emptyhanded") ) )
|
Hud_SetText( GetElem( file.menu, "KillsAsPilotValue3" ), string( GetPlayerStatInt( player, "kills_stats", "pilotKickMeleePilot" ) ) )
|
||||||
Hud_SetText( GetElem( file.menu, "KillsAsPilotValue4" ), string( getWeaponKillsFromToneAPI("human_execution") ) )
|
Hud_SetText( GetElem( file.menu, "KillsAsPilotValue4" ), string( GetPlayerStatInt( player, "kills_stats", "pilotExecutePilot" ) ) )
|
||||||
// Hud_SetText( GetElem( file.menu, "KillsAsPilotValue5" ), string( GetPlayerStatInt( player, "kills_stats", "titanFallKill" ) ) )
|
// Hud_SetText( GetElem( file.menu, "KillsAsPilotValue5" ), string( GetPlayerStatInt( player, "kills_stats", "titanFallKill" ) ) )
|
||||||
|
|
||||||
var titanMeleeKills = 0
|
|
||||||
titanMeleeKills += getWeaponKillsFromToneAPI("titan_punch_ion")
|
|
||||||
titanMeleeKills += getWeaponKillsFromToneAPI("titan_punch_scorch")
|
|
||||||
titanMeleeKills += getWeaponKillsFromToneAPI("titan_punch_northstar")
|
|
||||||
titanMeleeKills += getWeaponKillsFromToneAPI("titan_sword")
|
|
||||||
titanMeleeKills += getWeaponKillsFromToneAPI("titan_punch_tone")
|
|
||||||
titanMeleeKills += getWeaponKillsFromToneAPI("titan_punch_legion")
|
|
||||||
titanMeleeKills += getWeaponKillsFromToneAPI("titan_punch_vanguard")
|
|
||||||
titanMeleeKills += getWeaponKillsFromToneAPI("auto_titan_melee")
|
|
||||||
|
|
||||||
var titanExecutions = getWeaponKillsFromToneAPI("titan_execution")
|
int totalTitanExecutions = 0
|
||||||
|
totalTitanExecutions += GetPlayerStatInt( player, "kills_stats", "titanExocutionIon" )
|
||||||
|
totalTitanExecutions += GetPlayerStatInt( player, "kills_stats", "titanExocutionScorch" )
|
||||||
|
totalTitanExecutions += GetPlayerStatInt( player, "kills_stats", "titanExocutionNorthstar" )
|
||||||
|
totalTitanExecutions += GetPlayerStatInt( player, "kills_stats", "titanExocutionRonin" )
|
||||||
|
totalTitanExecutions += GetPlayerStatInt( player, "kills_stats", "titanExocutionTone" )
|
||||||
|
totalTitanExecutions += GetPlayerStatInt( player, "kills_stats", "titanExocutionLegion" )
|
||||||
|
totalTitanExecutions += GetPlayerStatInt( player, "kills_stats", "titanExocutionVanguard" )
|
||||||
|
|
||||||
Hud_SetText( GetElem( file.menu, "KillsAsTitanValue0" ), string( killsAsTitan ) )
|
Hud_SetText( GetElem( file.menu, "KillsAsTitanValue0" ), string( GetPlayerStatInt( player, "kills_stats", "pilotKillsAsTitan" ) ) )
|
||||||
Hud_SetText( GetElem( file.menu, "KillsAsTitanValue1" ), string( GetPlayerStatInt( player, "kills_stats", "titanKillsAsTitan" ) ) )
|
Hud_SetText( GetElem( file.menu, "KillsAsTitanValue1" ), string( GetPlayerStatInt( player, "kills_stats", "titanKillsAsTitan" ) ) )
|
||||||
Hud_SetText( GetElem( file.menu, "KillsAsTitanValue2" ), string( titanExecutions ) )
|
Hud_SetText( GetElem( file.menu, "KillsAsTitanValue2" ), string( totalTitanExecutions ) )
|
||||||
Hud_SetText( GetElem( file.menu, "KillsAsTitanValue3" ), string( titanMeleeKills ) )
|
Hud_SetText( GetElem( file.menu, "KillsAsTitanValue3" ), string( GetPlayerStatInt( player, "kills_stats", "titanMeleePilot" ) ) )
|
||||||
Hud_SetText( GetElem( file.menu, "KillsAsTitanValue4" ), string( getWeaponKillsFromToneAPI("damagedef_titan_step") ) )
|
Hud_SetText( GetElem( file.menu, "KillsAsTitanValue4" ), string( GetPlayerStatInt( player, "kills_stats", "titanStepCrushPilot" ) ) )
|
||||||
}
|
}
|
||||||
|
|
||||||
function PlotKDPointsOnGraph( menu, graphIndex, values, dottedAverage )
|
function PlotKDPointsOnGraph( menu, graphIndex, values, dottedAverage )
|
||||||
|
|||||||
@@ -1,199 +0,0 @@
|
|||||||
|
|
||||||
global function InitViewStatsTimeMenu
|
|
||||||
global function AddPieChartEntry
|
|
||||||
|
|
||||||
const MAX_MODE_ROWS = 8
|
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
var menu
|
|
||||||
array<ItemDisplayData> allTitans
|
|
||||||
table<string, array<string> > titanStatLoadout
|
|
||||||
} file
|
|
||||||
|
|
||||||
void function InitViewStatsTimeMenu()
|
|
||||||
{
|
|
||||||
var menu = GetMenu( "ViewStats_Time_Menu" )
|
|
||||||
file.menu = menu
|
|
||||||
|
|
||||||
AddMenuEventHandler( menu, eUIEvent.MENU_OPEN, OnStatsTime_Open )
|
|
||||||
|
|
||||||
AddMenuFooterOption( menu, BUTTON_B, "#B_BUTTON_BACK", "#BACK" )
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
//#########################################
|
|
||||||
|
|
||||||
var totalPilotKills = 0
|
|
||||||
|
|
||||||
foreach (var key, var value in globalToneAPIKillData) {
|
|
||||||
totalPilotKills += value
|
|
||||||
}
|
|
||||||
float hoursAsPilot = float(totalPilotKills)
|
|
||||||
float hoursAsTitan = killsAsTitan
|
|
||||||
|
|
||||||
array<PieChartEntry> classes
|
|
||||||
|
|
||||||
if ( hoursAsPilot > 0 )
|
|
||||||
AddPieChartEntry( classes, "#STATS_HEADER_PILOT", hoursAsPilot, [61, 117, 193, 255] )
|
|
||||||
|
|
||||||
if ( hoursAsTitan > 0 )
|
|
||||||
AddPieChartEntry( classes, "#STATS_HEADER_TITAN", hoursAsTitan, [223, 94, 0, 255] )
|
|
||||||
|
|
||||||
classes.sort( ComparePieChartEntryValues )
|
|
||||||
|
|
||||||
PieChartData classTimeData
|
|
||||||
classTimeData.entries = classes
|
|
||||||
classTimeData.labelColor = [ 255, 255, 255, 255 ]
|
|
||||||
SetPieChartData( file.menu, "ClassPieChart", "KILLS BY CLASS", classTimeData )
|
|
||||||
|
|
||||||
//#########################################
|
|
||||||
// Time By Chassis Pie Chart
|
|
||||||
//#########################################
|
|
||||||
|
|
||||||
array<PieChartEntry> titans
|
|
||||||
|
|
||||||
if ( killsAsIon > 0 )
|
|
||||||
AddPieChartEntry( titans, "#TITAN_ION", killsAsIon, [200, 40, 40, 255] )
|
|
||||||
|
|
||||||
if ( killsAsScorch > 0 )
|
|
||||||
AddPieChartEntry( titans, "#TITAN_SCORCH", killsAsScorch, [223, 94, 0, 255] )
|
|
||||||
|
|
||||||
if ( killsAsNorthstar > 0 )
|
|
||||||
AddPieChartEntry( titans, "#TITAN_NORTHSTAR", killsAsNorthstar, [61, 117, 193, 255] )
|
|
||||||
|
|
||||||
if ( killsAsRonin > 0 )
|
|
||||||
AddPieChartEntry( titans, "#TITAN_RONIN", killsAsRonin, [207, 191, 59, 255] )
|
|
||||||
|
|
||||||
if ( killsAsTone > 0 )
|
|
||||||
AddPieChartEntry( titans, "#TITAN_TONE", killsAsTone, [88, 172, 67, 255] )
|
|
||||||
|
|
||||||
if ( killsAsLegion > 0 )
|
|
||||||
AddPieChartEntry( titans, "#TITAN_LEGION", killsAsLegion, [46, 188, 180, 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 ]
|
|
||||||
SetPieChartData( file.menu, "ChassisPieChart", "KILLS BY TITAN", chassisTimeData )
|
|
||||||
|
|
||||||
//#########################################
|
|
||||||
// Time By Mode Pie Chart
|
|
||||||
//#########################################
|
|
||||||
|
|
||||||
array<string> gameModesArray = GetPersistenceEnumAsArray( "gameModes" )
|
|
||||||
|
|
||||||
array<PieChartEntry> modes
|
|
||||||
int enumCount = PersistenceGetEnumCount( "gameModes" )
|
|
||||||
table< string, array<int> > customGamemodeList = {
|
|
||||||
sns = [255, 178, 102, 255],
|
|
||||||
fw = [147, 204, 57, 255],
|
|
||||||
gg = [14, 87, 132, 255]
|
|
||||||
}
|
|
||||||
for ( int modeId = 0; modeId < enumCount; modeId++ )
|
|
||||||
{
|
|
||||||
string modeName = PersistenceGetEnumItemNameForIndex( "gameModes", modeId )
|
|
||||||
if ( modeName in globalToneAPIGamemodeData )
|
|
||||||
{
|
|
||||||
float modePlayedTime = 0
|
|
||||||
modePlayedTime = float(globalToneAPIGamemodeData[modeName])
|
|
||||||
if ( modePlayedTime > 0 ) {
|
|
||||||
AddPieChartEntry( modes, GameMode_GetName( modeName ), modePlayedTime, GetGameModeDisplayColor( modeName ) )
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach (string key, array<int> 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", "KILLS BY GAMEMODE", modesPlayedData )
|
|
||||||
|
|
||||||
//#########################################
|
|
||||||
// Time Stats
|
|
||||||
//#########################################
|
|
||||||
|
|
||||||
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat0" ), Localize( "#STATS_HEADER_TIME_PLAYED" ), StatToTimeString( "time_stats", "hours_total" ) )
|
|
||||||
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat1" ), Localize( "#STATS_HEADER_TIME_IN_AIR" ), StatToTimeString( "time_stats", "hours_inAir" ) )
|
|
||||||
SetStatBoxDisplay( Hud_GetChild( file.menu, "Stat2" ), Localize( "#STATS_HEADER_TIME_WALLRUNNING" ), StatToTimeString( "time_stats", "hours_wallrunning" ) )
|
|
||||||
}
|
|
||||||
|
|
||||||
void function AddPieChartEntry( array<PieChartEntry> entries, string displayName, float numValue, array<int> color )
|
|
||||||
{
|
|
||||||
PieChartEntry newEntry
|
|
||||||
newEntry.displayName = displayName
|
|
||||||
newEntry.numValue = numValue
|
|
||||||
newEntry.color = color
|
|
||||||
|
|
||||||
entries.append( newEntry )
|
|
||||||
}
|
|
||||||
@@ -1,227 +0,0 @@
|
|||||||
//TODO: Kills Per Minute stat
|
|
||||||
|
|
||||||
global function InitViewStatsTitansMenu
|
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
var menu
|
|
||||||
var[NUM_PERSISTENT_TITAN_LOADOUTS] buttons
|
|
||||||
array<ItemDisplayData> allTitans
|
|
||||||
table<string, array<string> > 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
|
|
||||||
}
|
|
||||||
@@ -306,10 +306,10 @@ table<string, table> function GetOverviewWeaponData()
|
|||||||
Table[ "most_kills" ].ref <- ""
|
Table[ "most_kills" ].ref <- ""
|
||||||
Table[ "most_kills" ].printName <- ""
|
Table[ "most_kills" ].printName <- ""
|
||||||
Table[ "most_kills" ].val <- 0
|
Table[ "most_kills" ].val <- 0
|
||||||
Table[ "nemesis_weapon" ] <- {}
|
Table[ "most_used" ] <- {}
|
||||||
Table[ "nemesis_weapon" ].ref <- ""
|
Table[ "most_used" ].ref <- ""
|
||||||
Table[ "nemesis_weapon" ].printName <- ""
|
Table[ "most_used" ].printName <- ""
|
||||||
Table[ "nemesis_weapon" ].val <- 0
|
Table[ "most_used" ].val <- 0
|
||||||
Table[ "highest_kpm" ] <- {}
|
Table[ "highest_kpm" ] <- {}
|
||||||
Table[ "highest_kpm" ].ref <- ""
|
Table[ "highest_kpm" ].ref <- ""
|
||||||
Table[ "highest_kpm" ].printName <- ""
|
Table[ "highest_kpm" ].printName <- ""
|
||||||
@@ -338,7 +338,7 @@ table<string, table> function GetOverviewWeaponData()
|
|||||||
if ( !PersistenceEnumValueIsValid( "loadoutWeaponsAndAbilities", weaponName ) )
|
if ( !PersistenceEnumValueIsValid( "loadoutWeaponsAndAbilities", weaponName ) )
|
||||||
continue
|
continue
|
||||||
|
|
||||||
int val = getWeaponKillsFromToneAPI(weaponName)
|
int val = getWeaponKillsFromToneApi(weaponName)
|
||||||
if ( val > Table[ "most_kills" ].val )
|
if ( val > Table[ "most_kills" ].val )
|
||||||
{
|
{
|
||||||
Table[ "most_kills" ].ref = weaponName
|
Table[ "most_kills" ].ref = weaponName
|
||||||
@@ -346,31 +346,24 @@ table<string, table> function GetOverviewWeaponData()
|
|||||||
Table[ "most_kills" ].val = val
|
Table[ "most_kills" ].val = val
|
||||||
}
|
}
|
||||||
|
|
||||||
int nval = getNemesisWeaponFromToneAPI(weaponName)
|
float fVal = GetPlayerStatFloat( player, "weapon_stats", "hoursUsed", weaponName )
|
||||||
if ( nval > Table[ "nemesis_weapon" ].val )
|
if ( fVal > Table[ "most_used" ].val )
|
||||||
{
|
{
|
||||||
Table[ "nemesis_weapon" ].ref = weaponName
|
Table[ "most_used" ].ref = weaponName
|
||||||
Table[ "nemesis_weapon" ].printName = weaponDisplayName
|
Table[ "most_used" ].printName = weaponDisplayName
|
||||||
Table[ "nemesis_weapon" ].val = nval
|
Table[ "most_used" ].val = fVal
|
||||||
}
|
}
|
||||||
|
|
||||||
float kdval = 0
|
local killsPerMinute = 0
|
||||||
float kval = 0
|
local hoursEquipped = GetPlayerStatFloat( player, "weapon_stats", "hoursEquipped", weaponName )
|
||||||
float dval = 0
|
local killCount = GetPlayerStatInt( player, "weapon_kill_stats", "total", weaponName )
|
||||||
if( getWeaponKillsFromToneAPI(weaponName) != 0 && getDWEFromToneAPI(weaponName) != 0){
|
if ( hoursEquipped > 0 )
|
||||||
kval = float(getWeaponKillsFromToneAPI(weaponName))
|
killsPerMinute = format( "%.2f", ( killCount / ( hoursEquipped * 60.0 ) ).tofloat() )
|
||||||
dval = float(getDWEFromToneAPI(weaponName))
|
if ( killsPerMinute.tofloat() > Table[ "highest_kpm" ].val.tofloat() )
|
||||||
if (kval / dval > kdval){
|
|
||||||
kdval = kval / dval
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int rnd= int(kdval*100)
|
|
||||||
kdval = float(rnd)/100
|
|
||||||
if ( kdval > Table[ "highest_kpm" ].val.tofloat() )
|
|
||||||
{
|
{
|
||||||
Table[ "highest_kpm" ].ref = weaponName
|
Table[ "highest_kpm" ].ref = weaponName
|
||||||
Table[ "highest_kpm" ].printName = weaponDisplayName
|
Table[ "highest_kpm" ].printName = weaponDisplayName
|
||||||
Table[ "highest_kpm" ].val = kdval
|
Table[ "highest_kpm" ].val = killsPerMinute
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -180,8 +180,8 @@ void function UpdateStatsForWeapon( string weaponRef )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Total Kills Stats
|
// Total Kills Stats
|
||||||
SetStatsLabelValue( file.menu, "KillsValue0", getWeaponKillsFromToneAPI(weaponRef) )
|
SetStatsLabelValue( file.menu, "KillsValue0", getWeaponKillsFromToneApi(weaponRef) )
|
||||||
SetStatsLabelValue( file.menu, "KillsValue1", getWeaponKillsFromToneAPI(weaponRef) )
|
SetStatsLabelValue( file.menu, "KillsValue1", getWeaponKillsFromToneApi(weaponRef) )
|
||||||
SetStatsLabelValue( file.menu, "KillsValue2", GetPlayerStatInt( player, "weapon_kill_stats", "titansTotal", weaponRef ) )
|
SetStatsLabelValue( file.menu, "KillsValue2", GetPlayerStatInt( player, "weapon_kill_stats", "titansTotal", weaponRef ) )
|
||||||
SetStatsLabelValue( file.menu, "KillsValue3", getDWEFromToneAPI(weaponRef))
|
SetStatsLabelValue( file.menu, "KillsValue3", GetPlayerStatInt( player, "weapon_kill_stats", "ai", weaponRef ) )
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"Major": "1",
|
|
||||||
"Minor": "2",
|
|
||||||
"Patch": "1"
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user