update
This commit is contained in:
parent
b316d1f7a6
commit
2cadb34efd
82
main.go
82
main.go
@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
|
||||||
|
|
||||||
demoinfocs "github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs"
|
demoinfocs "github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs"
|
||||||
"github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs/common"
|
"github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs/common"
|
||||||
@ -16,10 +15,13 @@ import (
|
|||||||
type PlayerStats struct {
|
type PlayerStats struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
SteamID string `json:"steamId"`
|
SteamID string `json:"steamId"`
|
||||||
|
Team string `json:"team"`
|
||||||
Kills int `json:"kills"`
|
Kills int `json:"kills"`
|
||||||
Deaths int `json:"deaths"`
|
Deaths int `json:"deaths"`
|
||||||
Assists int `json:"assists"`
|
Assists int `json:"assists"`
|
||||||
FlashAssists int `json:"flashAssists"`
|
FlashAssists int `json:"flashAssists"`
|
||||||
|
TotalDamage int `json:"totalDamage"`
|
||||||
|
UtilityDamage int `json:"utilityDamage"`
|
||||||
MVPs int `json:"mvps"`
|
MVPs int `json:"mvps"`
|
||||||
MVPReason1 int `json:"mvpEliminations"`
|
MVPReason1 int `json:"mvpEliminations"`
|
||||||
MVPReason2 int `json:"mvpDefuse"`
|
MVPReason2 int `json:"mvpDefuse"`
|
||||||
@ -56,7 +58,6 @@ type DemoMeta struct {
|
|||||||
WinnerTeam string `json:"winnerTeam"`
|
WinnerTeam string `json:"winnerTeam"`
|
||||||
RoundCount int `json:"roundCount"`
|
RoundCount int `json:"roundCount"`
|
||||||
RoundHistory []RoundResult `json:"roundHistory"`
|
RoundHistory []RoundResult `json:"roundHistory"`
|
||||||
DemoDate string `json:"demoDate"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func sanitizeFloat(value float64) float64 {
|
func sanitizeFloat(value float64) float64 {
|
||||||
@ -66,14 +67,6 @@ func sanitizeFloat(value float64) float64 {
|
|||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDemoTimestamp(path string) string {
|
|
||||||
info, err := os.Stat(path)
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return info.ModTime().UTC().Format("2006-01-02T15:04:05Z")
|
|
||||||
}
|
|
||||||
|
|
||||||
func reasonToString(reason events.RoundEndReason) string {
|
func reasonToString(reason events.RoundEndReason) string {
|
||||||
switch reason {
|
switch reason {
|
||||||
case events.RoundEndReasonTargetBombed:
|
case events.RoundEndReasonTargetBombed:
|
||||||
@ -146,22 +139,37 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
playerStats := make(map[uint64]*PlayerStats)
|
playerStats := make(map[uint64]*PlayerStats)
|
||||||
|
playerInitialTeams := make(map[uint64]string)
|
||||||
|
|
||||||
getOrCreate := func(sid uint64, name string) *PlayerStats {
|
getOrCreate := func(player common.Player) *PlayerStats {
|
||||||
|
sid := player.SteamID64
|
||||||
stat := playerStats[sid]
|
stat := playerStats[sid]
|
||||||
if stat == nil {
|
if stat == nil {
|
||||||
stat = &PlayerStats{
|
stat = &PlayerStats{
|
||||||
Name: name,
|
Name: player.Name,
|
||||||
SteamID: fmt.Sprintf("%d", sid),
|
SteamID: fmt.Sprintf("%d", sid),
|
||||||
|
Team: "", // später gesetzt
|
||||||
}
|
}
|
||||||
playerStats[sid] = stat
|
playerStats[sid] = stat
|
||||||
}
|
}
|
||||||
return stat
|
return stat
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p.RegisterEventHandler(func(e events.MatchStart) {
|
||||||
|
for _, player := range p.GameState().Participants().Playing() {
|
||||||
|
switch player.Team {
|
||||||
|
case common.TeamTerrorists:
|
||||||
|
playerInitialTeams[player.SteamID64] = "T"
|
||||||
|
case common.TeamCounterTerrorists:
|
||||||
|
playerInitialTeams[player.SteamID64] = "CT"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Eventhandler (Kill, Hurt, etc.)
|
||||||
p.RegisterEventHandler(func(e events.Kill) {
|
p.RegisterEventHandler(func(e events.Kill) {
|
||||||
if e.Killer != nil && e.Killer.SteamID64 != e.Victim.SteamID64 {
|
if e.Killer != nil && e.Killer.SteamID64 != e.Victim.SteamID64 {
|
||||||
stat := getOrCreate(e.Killer.SteamID64, e.Killer.Name)
|
stat := getOrCreate(*e.Killer)
|
||||||
stat.Kills++
|
stat.Kills++
|
||||||
if e.IsHeadshot {
|
if e.IsHeadshot {
|
||||||
stat.Headshots++
|
stat.Headshots++
|
||||||
@ -188,25 +196,38 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if e.Victim != nil {
|
if e.Victim != nil {
|
||||||
stat := getOrCreate(e.Victim.SteamID64, e.Victim.Name)
|
stat := getOrCreate(*e.Victim)
|
||||||
stat.Deaths++
|
stat.Deaths++
|
||||||
}
|
}
|
||||||
if e.Assister != nil {
|
if e.Assister != nil {
|
||||||
stat := getOrCreate(e.Assister.SteamID64, e.Assister.Name)
|
stat := getOrCreate(*e.Assister)
|
||||||
stat.Assists++
|
stat.Assists++
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
p.RegisterEventHandler(func(e events.PlayerFlashed) {
|
p.RegisterEventHandler(func(e events.PlayerFlashed) {
|
||||||
if e.Attacker != nil && e.Attacker.SteamID64 != e.Player.SteamID64 {
|
if e.Attacker != nil && e.Attacker.SteamID64 != e.Player.SteamID64 {
|
||||||
stat := getOrCreate(e.Attacker.SteamID64, e.Attacker.Name)
|
stat := getOrCreate(*e.Attacker)
|
||||||
stat.FlashAssists++
|
stat.FlashAssists++
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
p.RegisterEventHandler(func(e events.PlayerHurt) {
|
||||||
|
if e.Attacker != nil && e.Attacker != e.Player {
|
||||||
|
stat := getOrCreate(*e.Attacker)
|
||||||
|
stat.TotalDamage += e.HealthDamage
|
||||||
|
if e.Weapon != nil {
|
||||||
|
switch e.Weapon.Type {
|
||||||
|
case common.EqHE, common.EqIncendiary, common.EqMolotov:
|
||||||
|
stat.UtilityDamage += e.HealthDamage
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
p.RegisterEventHandler(func(e events.RoundMVPAnnouncement) {
|
p.RegisterEventHandler(func(e events.RoundMVPAnnouncement) {
|
||||||
if e.Player != nil {
|
if e.Player != nil {
|
||||||
stat := getOrCreate(e.Player.SteamID64, e.Player.Name)
|
stat := getOrCreate(*e.Player)
|
||||||
stat.MVPs++
|
stat.MVPs++
|
||||||
switch e.Reason {
|
switch e.Reason {
|
||||||
case events.MVPReasonMostEliminations:
|
case events.MVPReasonMostEliminations:
|
||||||
@ -243,7 +264,7 @@ func main() {
|
|||||||
|
|
||||||
p.RegisterEventHandler(func(e events.RankUpdate) {
|
p.RegisterEventHandler(func(e events.RankUpdate) {
|
||||||
if e.Player != nil {
|
if e.Player != nil {
|
||||||
stat := getOrCreate(e.Player.SteamID64, e.Player.Name)
|
stat := getOrCreate(*e.Player)
|
||||||
stat.RankOld = e.RankOld
|
stat.RankOld = e.RankOld
|
||||||
stat.RankNew = e.RankNew
|
stat.RankNew = e.RankNew
|
||||||
stat.RankChange = int(e.RankChange)
|
stat.RankChange = int(e.RankChange)
|
||||||
@ -258,9 +279,13 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
teamCT := p.GameState().TeamCounterTerrorists().ClanName()
|
teamCT := p.GameState().TeamCounterTerrorists().ClanName()
|
||||||
|
if teamCT == "" {
|
||||||
|
teamCT = "CT"
|
||||||
|
}
|
||||||
teamT := p.GameState().TeamTerrorists().ClanName()
|
teamT := p.GameState().TeamTerrorists().ClanName()
|
||||||
scoreCT = p.GameState().TeamCounterTerrorists().Score()
|
if teamT == "" {
|
||||||
scoreT = p.GameState().TeamTerrorists().Score()
|
teamT = "T"
|
||||||
|
}
|
||||||
|
|
||||||
winnerTeam := "Draw"
|
winnerTeam := "Draw"
|
||||||
if scoreCT > scoreT {
|
if scoreCT > scoreT {
|
||||||
@ -269,11 +294,6 @@ func main() {
|
|||||||
winnerTeam = teamT
|
winnerTeam = teamT
|
||||||
}
|
}
|
||||||
|
|
||||||
demoDate := getDemoTimestamp(filePath)
|
|
||||||
if demoDate == "" {
|
|
||||||
demoDate = time.Now().UTC().Format("2006-01-02T15:04:05Z")
|
|
||||||
}
|
|
||||||
|
|
||||||
duration := sanitizeFloat(header.PlaybackTime.Seconds())
|
duration := sanitizeFloat(header.PlaybackTime.Seconds())
|
||||||
tickRate := 0.0
|
tickRate := 0.0
|
||||||
if duration > 0 {
|
if duration > 0 {
|
||||||
@ -296,17 +316,23 @@ func main() {
|
|||||||
WinnerTeam: winnerTeam,
|
WinnerTeam: winnerTeam,
|
||||||
RoundCount: roundCount,
|
RoundCount: roundCount,
|
||||||
RoundHistory: roundHistory,
|
RoundHistory: roundHistory,
|
||||||
DemoDate: demoDate,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, stat := range playerStats {
|
// Final: Teamzuweisung korrekt, keine Überschreibung
|
||||||
|
for sid, stat := range playerStats {
|
||||||
|
if stat.Team == "" || stat.Team == "Unknown" {
|
||||||
|
if team, ok := playerInitialTeams[sid]; ok {
|
||||||
|
stat.Team = team
|
||||||
|
} else {
|
||||||
|
stat.Team = "Unknown"
|
||||||
|
}
|
||||||
|
}
|
||||||
result.Players = append(result.Players, *stat)
|
result.Players = append(result.Players, *stat)
|
||||||
}
|
}
|
||||||
|
|
||||||
jsonData, err := json.Marshal(result)
|
jsonData, err := json.Marshal(result)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("❌ Fehler beim JSON-Export: %v\n", err)
|
fmt.Printf("❌ Fehler beim JSON-Export: %v\n", err)
|
||||||
fmt.Printf("⛔ Dump vor Fehler: %+v\n", result)
|
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
parser_cs2-linux
BIN
parser_cs2-linux
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user