-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathstats.go
More file actions
100 lines (84 loc) · 3.12 KB
/
stats.go
File metadata and controls
100 lines (84 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package rlapi
import "context"
// StatPlatformLeaderboard represents leaderboard data for a given platform
type StatPlatformLeaderboard struct {
Platform string `json:"Platform"`
Players []StatLeaderboardPlayer `json:"Players"`
}
// StatLeaderboardPlayer represents a player entry in a stat leaderboard
type StatLeaderboardPlayer struct {
PlayerID PlayerID `json:"PlayerID"`
PlayerName string `json:"PlayerName"`
Value float64 `json:"Value"`
Rank int `json:"Rank"`
}
type StatLeaderboardRankPlayer struct {
PlayerID PlayerID `json:"PlayerID"`
PlayerName string `json:"PlayerName"`
Value float64 `json:"Value"`
Rank int `json:"Rank"`
}
type GetStatLeaderboardRequest struct {
Stat string `json:"Stat"`
DisableCrossplay bool `json:"bDisableCrossplay"`
}
type GetStatLeaderboardResponse struct {
LeaderboardID string `json:"LeaderboardID"`
Platforms []StatPlatformLeaderboard `json:"Platforms"`
}
type GetStatLeaderboardValueForUserRequest struct {
Stat string `json:"Stat"`
PlayerID PlayerID `json:"PlayerID"`
}
type GetStatLeaderboardValueForUserResponse struct {
LeaderboardID string `json:"LeaderboardID"`
HasStat bool `json:"bHasStat"`
Value string `json:"Value"`
Rank int `json:"Rank"`
}
type GetStatLeaderboardRankForUsersRequest struct {
Stat string `json:"Stat"`
PlayerIDs []PlayerID `json:"PlayerIDs"`
}
type GetStatLeaderboardRankForUsersResponse struct {
LeaderboardID string `json:"LeaderboardID"`
Players []StatLeaderboardRankPlayer `json:"Players"`
}
// GetStatLeaderboard retrieves the stats leaderboard for a given stat.
func (p *PsyNetRPC) GetStatLeaderboard(ctx context.Context, statName string, disableCrossplay bool) (*GetStatLeaderboardResponse, error) {
request := GetStatLeaderboardRequest{
Stat: statName,
DisableCrossplay: disableCrossplay,
}
var result GetStatLeaderboardResponse
err := p.sendRequestSync(ctx, "Stats/GetStatLeaderboard v1", request, &result)
if err != nil {
return nil, err
}
return &result, nil
}
// GetStatLeaderboardValueForUser retrieves a player's position and data on a stat leaderboard.
func (p *PsyNetRPC) GetStatLeaderboardValueForUser(ctx context.Context, statName string, playerID PlayerID) (*GetStatLeaderboardValueForUserResponse, error) {
request := GetStatLeaderboardValueForUserRequest{
Stat: statName,
PlayerID: playerID,
}
var result GetStatLeaderboardValueForUserResponse
err := p.sendRequestSync(ctx, "Stats/GetStatLeaderboardValueForUser v1", request, &result)
if err != nil {
return nil, err
}
return &result, nil
}
func (p *PsyNetRPC) GetStatLeaderboardRankForUsers(ctx context.Context, statName string, playerIDs []PlayerID) (*GetStatLeaderboardRankForUsersResponse, error) {
request := GetStatLeaderboardRankForUsersRequest{
Stat: statName,
PlayerIDs: playerIDs,
}
var result GetStatLeaderboardRankForUsersResponse
err := p.sendRequestSync(ctx, "Stats/GetStatLeaderboardRankForUsers v1", request, &result)
if err != nil {
return nil, err
}
return &result, nil
}