Skip to content

Commit 6cc0459

Browse files
committed
feat: add support for Renown demos
ref akiver/cs-demo-manager#1065
1 parent 3d27306 commit 6cc0459

File tree

11 files changed

+1434
-24
lines changed

11 files changed

+1434
-24
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ require (
1919
github.com/oklog/ulid/v2 v2.1.0 // indirect
2020
)
2121

22-
replace github.com/markus-wa/demoinfocs-golang/v4 v4.3.2 => github.com/markus-wa/demoinfocs-golang/v4 v4.3.2
22+
replace github.com/markus-wa/demoinfocs-golang/v4 v4.3.2 => github.com/markus-wa/demoinfocs-golang/v4 v4.3.4-0.20250307001803-e62b9d156a7c

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
88
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
99
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
1010
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
11-
github.com/markus-wa/demoinfocs-golang/v4 v4.3.2 h1:oHa7LRWRecQBPs1w5GIdDIFyYj2toGSZxcNUkO5fBVI=
12-
github.com/markus-wa/demoinfocs-golang/v4 v4.3.2/go.mod h1:SfgbMznZREy98M7EjzkIPxEpZPVpbX/f9tVGSTJF3WU=
11+
github.com/markus-wa/demoinfocs-golang/v4 v4.3.4-0.20250307001803-e62b9d156a7c h1:nAHYTR1Waz1qFivggBUHz/j3XB1YMTg+TI0+k9epd2g=
12+
github.com/markus-wa/demoinfocs-golang/v4 v4.3.4-0.20250307001803-e62b9d156a7c/go.mod h1:SfgbMznZREy98M7EjzkIPxEpZPVpbX/f9tVGSTJF3WU=
1313
github.com/markus-wa/go-unassert v0.1.3 h1:4N2fPLUS3929Rmkv94jbWskjsLiyNT2yQpCulTFFWfM=
1414
github.com/markus-wa/go-unassert v0.1.3/go.mod h1:/pqt7a0LRmdsRNYQ2nU3SGrXfw3bLXrvIkakY/6jpPY=
1515
github.com/markus-wa/gobitread v0.2.4 h1:BDr3dZnsqntDD4D8E7DzhkQlASIkQdfxCXLhWcI2K5A=

internal/demo/demo.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,10 @@ func GetDemoSource(demo *Demo) constants.DemoSource {
299299
return constants.DemoSourceGamersclub
300300
}
301301

302+
if strings.Contains(serverName, "renown") || strings.Contains(demoName, "renown") {
303+
return constants.DemoSourceRenown
304+
}
305+
302306
if strings.Contains(serverName, "matchzy") || matchZyDemoNameRegex.MatchString(demoName) {
303307
return constants.DemoSourceMatchZy
304308
}

js/package-lock.json

Lines changed: 21 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@
3434
"replays"
3535
],
3636
"devDependencies": {
37-
"@types/node": "22.5.5",
38-
"prettier": "3.3.3",
39-
"typescript": "5.6.2"
37+
"@types/node": "22.13.9",
38+
"prettier": "3.5.3",
39+
"typescript": "5.8.2"
4040
}
4141
}

js/src/constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export const DemoSource = {
1919
MatchZy: 'matchzy',
2020
PerfectWorld: 'perfectworld',
2121
Popflash: 'popflash',
22+
Renown: 'renown',
2223
Unknown: 'unknown',
2324
Valve: 'valve',
2425
} as const;
@@ -35,6 +36,7 @@ export const SupportedDemoSources: DemoSource[] = [
3536
DemoSource.Fastcup,
3637
DemoSource.PerfectWorld,
3738
DemoSource.Popflash,
39+
DemoSource.Renown,
3840
DemoSource.Valve,
3941
];
4042

pkg/api/analyzer.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ func analyzeDemo(demoPath string, options AnalyzeDemoOptions) (*Match, error) {
149149
createEbotAnalyzer(analyzer)
150150
case constants.DemoSourceChallengermode:
151151
createChallengermodeAnalyzer(analyzer)
152+
case constants.DemoSourceRenown:
153+
createRenownAnalyzer(analyzer)
152154
case constants.DemoSourceEsportal:
153155
createEsportalAnalyzer(analyzer)
154156
case constants.DemoSourceCEVO:
@@ -527,6 +529,17 @@ func (analyzer *Analyzer) computePlayersEconomies() {
527529
}
528530
}
529531

532+
func (analyzer *Analyzer) createOrUpdatePlayerEconomy(player *common.Player) {
533+
match := analyzer.match
534+
economy := match.GetPlayerEconomyAtRound(player.Name, player.SteamID64, analyzer.currentRound.Number)
535+
if economy == nil {
536+
economy = newPlayerEconomy(analyzer, player)
537+
match.PlayerEconomies = append(match.PlayerEconomies, economy)
538+
} else {
539+
economy.updateValues(analyzer, player)
540+
}
541+
}
542+
530543
func (analyzer *Analyzer) defaultRoundStartHandler(event events.RoundStart) {
531544
if !analyzer.matchStarted() {
532545
return
@@ -749,7 +762,7 @@ func (analyzer *Analyzer) registerCommonHandlers(includePositions bool) {
749762
})
750763

751764
parser.RegisterEventHandler(func(event events.Kill) {
752-
if !analyzer.matchStarted() {
765+
if !analyzer.matchStarted() || parser.GameState().IsFreezetimePeriod() {
753766
return
754767
}
755768

pkg/api/constants/demo_source.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const (
2121
DemoSourceMatchZy DemoSource = "matchzy"
2222
DemoSourcePerfectWorld DemoSource = "perfectworld"
2323
DemoSourcePopFlash DemoSource = "popflash"
24+
DemoSourceRenown DemoSource = "renown"
2425
DemoSourceUnknown DemoSource = "unknown"
2526
DemoSourceValve DemoSource = "valve"
2627
)
@@ -36,6 +37,7 @@ var SupportedDemoSources = []DemoSource{
3637
DemoSourceFiveEPlay,
3738
DemoSourcePerfectWorld,
3839
DemoSourcePopFlash,
40+
DemoSourceRenown,
3941
DemoSourceValve,
4042
DemoSourceMatchZy,
4143
}

pkg/api/renown.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package api
2+
3+
import (
4+
"github.com/akiver/cs-demo-analyzer/pkg/api/constants"
5+
events "github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs/events"
6+
st "github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs/sendtables"
7+
)
8+
9+
func createRenownAnalyzer(analyzer *Analyzer) {
10+
parser := analyzer.parser
11+
match := analyzer.match
12+
match.gameModeStr = constants.GameModeStrCompetitive
13+
matchStarted := false
14+
isGamePaused := false
15+
16+
analyzer.matchStarted = func() bool {
17+
return matchStarted
18+
}
19+
20+
parser.RegisterEventHandler(func(events.DataTablesParsed) {
21+
parser.ServerClasses().FindByName("CCSGameRulesProxy").OnEntityCreated(func(entity st.Entity) {
22+
entity.Property("m_pGameRules.m_bTechnicalTimeOut").OnUpdate(func(val st.PropertyValue) {
23+
isGamePaused = val.BoolVal()
24+
})
25+
})
26+
})
27+
28+
parser.RegisterEventHandler(func(event events.PlayerConnect) {
29+
if isGamePaused {
30+
analyzer.createOrUpdatePlayerEconomy(event.Player)
31+
}
32+
})
33+
34+
parser.RegisterEventHandler(func(event events.MatchStartedChanged) {
35+
matchStarted = event.NewIsStarted
36+
if matchStarted {
37+
analyzer.processMatchStart()
38+
}
39+
})
40+
41+
parser.RegisterEventHandler(analyzer.defaultRoundFreezetimeChangedHandler)
42+
43+
parser.RegisterEventHandler(analyzer.defaultRoundStartHandler)
44+
45+
parser.RegisterEventHandler(analyzer.defaultRoundEndOfficiallyHandler)
46+
47+
parser.RegisterEventHandler(analyzer.defaultAnnouncementWinPanelMatchHandler)
48+
}

0 commit comments

Comments
 (0)