added roundstats with eco info, switched to avatar hash

This commit is contained in:
2021-10-17 03:52:20 +02:00
parent 7f5a2f8956
commit fd8c026a8e
35 changed files with 4187 additions and 160 deletions

View File

@@ -150,12 +150,17 @@ func (p *DemoParser) parseWorker() {
Dmg uint
To uint64
})
gameStarted := false
ecoMap := make(map[uint64][]*struct {
Round int
EqV int
Bank int
Spent int
}, 0)
demoParser := demoinfocs.NewParser(fDemo)
// onPlayerHurt
demoParser.RegisterEventHandler(func(e events.PlayerHurt) {
if e.Attacker == nil || e.Player == nil || e.Weapon == nil || !gameStarted {
if e.Attacker == nil || e.Player == nil || e.Weapon == nil || !demoParser.GameState().IsMatchStarted() {
return
}
@@ -193,19 +198,26 @@ func (p *DemoParser) parseWorker() {
}
})
// onKill
demoParser.RegisterEventHandler(func(e events.Kill) {
})
// onFreezeTimeEnd
demoParser.RegisterEventHandler(func(e events.RoundFreezetimeEnd) {
demoParser.RegisterEventHandler(func(e events.RoundEnd) {
gs := demoParser.GameState()
if !gs.IsMatchStarted() {
return
}
for _, p := range gs.Participants().Playing() {
ecoMap[p.SteamID64] = append(ecoMap[p.SteamID64], &struct {
Round int
EqV int
Bank int
Spent int
}{Round: gs.TotalRoundsPlayed(), EqV: p.EquipmentValueCurrent(), Bank: p.Money(), Spent: p.MoneySpentThisRound()})
}
})
// onRoundEnd
demoParser.RegisterEventHandler(func(e events.RoundEnd) {
if gameStarted {
if demoParser.GameState().IsMatchStarted() {
for _, IGP := range demoParser.GameState().Participants().Playing() {
if IGP != nil && IGP.SteamID64 != 0 {
killDiff := IGP.Kills() - killMap[IGP.SteamID64]
@@ -229,7 +241,7 @@ func (p *DemoParser) parseWorker() {
// onPlayerFlashed
demoParser.RegisterEventHandler(func(e events.PlayerFlashed) {
if e.Attacker == nil || e.Player == nil || !gameStarted {
if e.Attacker == nil || e.Player == nil || !demoParser.GameState().IsMatchStarted() {
return
}
@@ -257,7 +269,6 @@ func (p *DemoParser) parseWorker() {
// onMatchStart
demoParser.RegisterEventHandler(func(e events.MatchStart) {
gs := demoParser.GameState()
gameStarted = true
for _, demoPlayer := range gs.Participants().Playing() {
if demoPlayer != nil && demoPlayer.SteamID64 != 0 {
@@ -360,6 +371,15 @@ func (p *DemoParser) parseWorker() {
log.Errorf("[DP] Unable to create WeaponStat: %v", err)
}
}
for _, eco := range ecoMap[tMatchPlayer.PlayerStats] {
p.lock.Lock()
err := p.db.RoundStats.Create().SetStat(nMatchPLayer).SetRound(uint(eco.Round)).SetBank(uint(eco.Bank)).SetEquipment(uint(eco.EqV)).Exec(context.Background())
p.lock.Unlock()
if err != nil {
log.Errorf("[DP] Unable to create WeaponStat: %v", err)
}
}
}
log.Infof("[DP] Parsed %d (took %s/%s)", demo.MatchId, downloadTime, time.Now().Sub(startTime))