added roundstats with eco info, switched to avatar hash
This commit is contained in:
@@ -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))
|
||||
|
Reference in New Issue
Block a user