You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
5.6 KiB
Go

package steam
import (
"bytes"
"fmt"
"io"
"strings"
)
type DotaMatch struct {
Id uint64 `json:"match_id"`
SeqNum uint64 `json:"match_seq_num"`
StartTime uint64 `json:"start_time"`
LobbyType int `json:"lobby_type"`
RadiantTeamId int `json:"radiant_team_id"`
DireTeamId int `json:"dire_team_id"`
Players []DotaMatchPlayer `json:"players"`
}
func (d DotaMatch) Oneline() string {
var buf bytes.Buffer
fmt.Fprintf(&buf, "%d\t%d\t%d\t%d\t%d\t%d\n", d.Id, d.SeqNum, d.StartTime, d.LobbyType, d.RadiantTeamId, d.DireTeamId)
for _, player := range d.Players {
fmt.Fprintf(&buf, "-\t-\t-\t%d\t%d\t%d\n", player.AccountId, player.PlayerSlot, player.HeroId)
}
return strings.TrimSpace(buf.String())
}
type DotaMatchPlayer struct {
AccountId uint64 `json:"account_id"`
PlayerSlot int `json:"player_slot"`
HeroId int `json:"hero_id"`
}
type DotaMatchDetails struct {
RadiantWin bool `json:"radian_win"`
Duration int `json:"duration"`
StartTime int `json:"start_time"`
Id uint64 `json:"match_id"`
SeqNum uint64 `json:"match_seq_num"`
TowerStatusRadiant int `json:"tower_status_radiant"`
TowerStatusDire int `json:"tower_status_dire"`
Cluster int `json:"cluster"`
FirstBloodTime int `json:"first_blood_time"`
LobbyTime int `json:"lobby_time"`
HumanPlayers int `json:"human_players"`
LeagueId int `json:"leagueid"`
PositiveVotes int `json:"positive_votes"`
NegativeVotes int `json:"negative_votes"`
GameMode int `json:"game_mode"`
Engine int `json:"engine"`
Players []DotaMatchPlayerDetails `json:"players"`
}
func (d DotaMatchDetails) Display(w io.Writer) {
if d.RadiantWin {
fmt.Fprintln(w, "Radiant Victory")
} else {
fmt.Fprintln(w, "Dire Victory")
}
fmt.Fprintf(w, "Duration: %d\n", d.Duration)
fmt.Fprintf(w, "StartTime: %d\n", d.StartTime)
fmt.Fprintf(w, "Id: %d\n", d.Id)
fmt.Fprintf(w, "SeqNum: %d\n", d.SeqNum)
fmt.Fprintf(w, "TowerStatusRadiant: %d\n", d.TowerStatusRadiant)
fmt.Fprintf(w, "TowerStatusDire: %d\n", d.TowerStatusDire)
fmt.Fprintf(w, "Cluster: %d\n", d.Cluster)
fmt.Fprintf(w, "FirstBloodTime: %d\n", d.FirstBloodTime)
fmt.Fprintf(w, "LobbyTime: %d\n", d.LobbyTime)
fmt.Fprintf(w, "HumanPlayers: %d\n", d.HumanPlayers)
fmt.Fprintf(w, "LeagueId: %d\n", d.LeagueId)
fmt.Fprintf(w, "PositiveVotes: %d\n", d.PositiveVotes)
fmt.Fprintf(w, "NegativeVotes: %d\n", d.NegativeVotes)
fmt.Fprintf(w, "GameMode: %d\n", d.GameMode)
fmt.Fprintf(w, "Engine: %d\n", d.Engine)
for _, player := range d.Players {
player.Display(w)
}
}
type DotaMatchPlayerDetails struct {
AccountId uint64 `json:"account_id"`
PlayerSlot int `json:"player_slot"`
HeroId int `json:"hero_id"`
Item0 int `json:"item_0"`
Item1 int `json:"item_1"`
Item2 int `json:"item_2"`
Item3 int `json:"item_3"`
Item4 int `json:"item_4"`
Item5 int `json:"item_5"`
Kills int `json:"kills"`
Deaths int `json:"deaths"`
Assists int `json:"assists"`
LeaverStatus int `json:"leaver_status"`
Gold int `json:"gold"`
LastHits int `json:"last_hits"`
Denies int `json:"denies"`
GoldPerMinute int `json:"gold_per_min"`
XPPerMinute int `json:"xp_per_min"`
GoldSpent int `json:"gold_spent"`
HeroDamage int `json:"hero_damage"`
TowerDamage int `json:"tower_damage"`
HeroHealing int `json:"hero_healing"`
Level int `json:"level"`
AbilityUpgrades []DotaAbilityUpgrades `json:"ability_upgrades"`
}
func (p DotaMatchPlayerDetails) Display(w io.Writer) {
fmt.Fprintf(w, "AccountId: %d\n", p.AccountId)
fmt.Fprintf(w, "PlayerSlot: %d\n", p.PlayerSlot)
fmt.Fprintf(w, "HeroId: %d\n", p.HeroId)
fmt.Fprintf(w, "Item0: %d\n", p.Item0)
fmt.Fprintf(w, "Item1: %d\n", p.Item1)
fmt.Fprintf(w, "Item2: %d\n", p.Item2)
fmt.Fprintf(w, "Item3: %d\n", p.Item3)
fmt.Fprintf(w, "Item4: %d\n", p.Item4)
fmt.Fprintf(w, "Item5: %d\n", p.Item5)
fmt.Fprintf(w, "Kills: %d\n", p.Kills)
fmt.Fprintf(w, "Deaths: %d\n", p.Deaths)
fmt.Fprintf(w, "Assists: %d\n", p.Assists)
fmt.Fprintf(w, "LeaverStatus: %d\n", p.LeaverStatus)
fmt.Fprintf(w, "Gold: %d\n", p.Gold)
fmt.Fprintf(w, "LastHits: %d\n", p.LastHits)
fmt.Fprintf(w, "Denies: %d\n", p.Denies)
fmt.Fprintf(w, "GoldPerMinute: %d\n", p.GoldPerMinute)
fmt.Fprintf(w, "XPPerMinute: %d\n", p.XPPerMinute)
fmt.Fprintf(w, "GoldSpent: %d\n", p.GoldSpent)
fmt.Fprintf(w, "HeroDamage: %d\n", p.HeroDamage)
fmt.Fprintf(w, "TowerDamage: %d\n", p.TowerDamage)
fmt.Fprintf(w, "HeroHealing: %d\n", p.HeroHealing)
fmt.Fprintf(w, "Level: %d\n", p.Level)
}
type DotaAbilityUpgrades struct {
Ability int `json:"ability"`
Time int `json:"time"`
Level int `json:"level"`
}