Skip to content

Commit f837a41

Browse files
committed
Merge branch 'fix-bot-takeover' into csdm
2 parents 5245396 + 60a3075 commit f837a41

File tree

9 files changed

+43
-14
lines changed

9 files changed

+43
-14
lines changed

pkg/demoinfocs/common/common_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ type fakeProp struct {
212212
type demoInfoProviderMock struct {
213213
tickRate float64
214214
ingameTick int
215-
playersByHandle map[int]*Player
215+
playersByHandle map[uint64]*Player
216216
entitiesByHandle map[uint64]st.Entity
217217
playerResourceEntity st.Entity
218218
equipment *Equipment
@@ -235,12 +235,12 @@ func (p demoInfoProviderMock) IngameTick() int {
235235
return p.ingameTick
236236
}
237237

238-
func (p demoInfoProviderMock) FindPlayerByHandle(handle int) *Player {
238+
func (p demoInfoProviderMock) FindPlayerByHandle(handle uint64) *Player {
239239
return p.playersByHandle[handle]
240240
}
241241

242242
func (p demoInfoProviderMock) FindPlayerByPawnHandle(handle uint64) *Player {
243-
return p.playersByHandle[int(handle)]
243+
return p.playersByHandle[handle]
244244
}
245245

246246
func (p demoInfoProviderMock) PlayerResourceEntity() st.Entity {

pkg/demoinfocs/common/hostage.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (hostage *Hostage) Leader() *Player {
5757
return hostage.demoInfoProvider.FindPlayerByPawnHandle(getUInt64(hostage.Entity, "m_leader"))
5858
}
5959

60-
return hostage.demoInfoProvider.FindPlayerByHandle(getInt(hostage.Entity, "m_leader"))
60+
return hostage.demoInfoProvider.FindPlayerByHandle(uint64(getInt(hostage.Entity, "m_leader")))
6161
}
6262

6363
// NewHostage creates a hostage.

pkg/demoinfocs/common/hostage_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ func TestHostage_Leader(t *testing.T) {
1212
player := new(Player)
1313
player.EntityID = 10
1414
provider := demoInfoProviderMock{
15-
playersByHandle: map[int]*Player{10: player},
15+
playersByHandle: map[uint64]*Player{10: player},
1616
}
1717
hostage := hostageWithProperty("m_leader", st.PropertyValue{IntVal: 10}, provider)
1818

pkg/demoinfocs/common/inferno.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (inf *Inferno) Thrower() *Player {
5757
return inf.demoInfoProvider.FindPlayerByPawnHandle(handleProp.Handle())
5858
}
5959

60-
return inf.demoInfoProvider.FindPlayerByHandle(handleProp.Int())
60+
return inf.demoInfoProvider.FindPlayerByHandle(uint64(handleProp.Int()))
6161
}
6262

6363
// Fires returns all fires (past + present).

pkg/demoinfocs/common/inferno_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func TestInferno_Thrower(t *testing.T) {
116116

117117
player := new(Player)
118118
provider := demoInfoProviderMock{
119-
playersByHandle: map[int]*Player{1: player},
119+
playersByHandle: map[uint64]*Player{1: player},
120120
}
121121

122122
assert.Equal(t, player, NewInferno(provider, entity, nil).Thrower())

pkg/demoinfocs/common/player.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -356,9 +356,15 @@ func (p *Player) ControlledBot() *Player {
356356
return nil
357357
}
358358

359-
botHandle := p.Entity.Property("m_iControlledBotEntIndex").Value().IntVal
359+
if p.demoInfoProvider.IsSource2() {
360+
controllerHandler := p.Entity.Property("m_hOriginalControllerOfCurrentPawn").Value().S2UInt64()
361+
362+
return p.demoInfoProvider.FindPlayerByHandle(controllerHandler)
363+
}
364+
365+
botHandle := p.Entity.Property("m_iControlledBotEntIndex").Value().Int()
360366

361-
return p.demoInfoProvider.FindPlayerByHandle(botHandle)
367+
return p.demoInfoProvider.FindPlayerByHandle(uint64(botHandle))
362368
}
363369

364370
// Health returns the player's health points, normally 0-100.
@@ -805,7 +811,7 @@ func (p *Player) IsGrabbingHostage() bool {
805811
type demoInfoProvider interface {
806812
IngameTick() int // current in-game tick, used for IsBlinded()
807813
TickRate() float64 // in-game tick rate, used for Player.IsBlinded()
808-
FindPlayerByHandle(handle int) *Player
814+
FindPlayerByHandle(handle uint64) *Player
809815
FindPlayerByPawnHandle(handle uint64) *Player
810816
PlayerResourceEntity() st.Entity
811817
FindWeaponByEntityID(id int) *Equipment

pkg/demoinfocs/common/player_test.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ func TestPlayer_ControlledBot(t *testing.T) {
331331
IsBot: true,
332332
}
333333
demoInfoProvider := &demoInfoProviderMock{
334-
playersByHandle: map[int]*Player{
334+
playersByHandle: map[uint64]*Player{
335335
12: dave,
336336
},
337337
}
@@ -347,6 +347,29 @@ func TestPlayer_ControlledBot(t *testing.T) {
347347
assert.Same(t, dave, pl.ControlledBot())
348348
}
349349

350+
func TestPlayer_ControlledBotS2(t *testing.T) {
351+
dave := &Player{
352+
Name: "Dave",
353+
IsBot: true,
354+
}
355+
demoInfoProvider := &demoInfoProviderMock{
356+
playersByHandle: map[uint64]*Player{
357+
12: dave,
358+
},
359+
isSource2: true,
360+
}
361+
362+
pl := playerWithProperty("m_hOriginalControllerOfCurrentPawn", st.PropertyValue{Any: uint64(0)})
363+
pl.demoInfoProvider = demoInfoProvider
364+
365+
assert.Nil(t, pl.ControlledBot())
366+
367+
pl = playerWithProperty("m_hOriginalControllerOfCurrentPawn", st.PropertyValue{Any: uint64(12)})
368+
pl.demoInfoProvider = demoInfoProvider
369+
370+
assert.Same(t, dave, pl.ControlledBot())
371+
}
372+
350373
/*
351374
TODO: fix for CS2
352375
func TestPlayer_Armor(t *testing.T) {

pkg/demoinfocs/events/events_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func (p demoInfoProviderMock) TickRate() float64 {
7575
return 128
7676
}
7777

78-
func (p demoInfoProviderMock) FindPlayerByHandle(int) *common.Player {
78+
func (p demoInfoProviderMock) FindPlayerByHandle(uint64) *common.Player {
7979
return nil
8080
}
8181

pkg/demoinfocs/parser.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -447,8 +447,8 @@ func (p demoInfoProvider) TickRate() float64 {
447447
return p.parser.TickRate()
448448
}
449449

450-
func (p demoInfoProvider) FindPlayerByHandle(handle int) *common.Player {
451-
return p.parser.gameState.Participants().FindByHandle(handle)
450+
func (p demoInfoProvider) FindPlayerByHandle(handle uint64) *common.Player {
451+
return p.parser.gameState.Participants().FindByHandle64(handle)
452452
}
453453

454454
func (p demoInfoProvider) FindPlayerByPawnHandle(handle uint64) *common.Player {

0 commit comments

Comments
 (0)