@@ -514,9 +514,32 @@ func (p *parser) getOrCreatePlayerFromControllerEntity(controllerEntity st.Entit
514
514
func (p * parser ) bindNewPlayerControllerS2 (controllerEntity st.Entity ) {
515
515
pl := p .getOrCreatePlayerFromControllerEntity (controllerEntity )
516
516
517
- controllerEntity .Property ("m_hPawn" ).OnUpdate (func (val st.PropertyValue ) {
518
- if val .Handle () == constants .InvalidEntityHandleSource2 {
519
- pl .IsConnected = false
517
+ controllerEntity .Property ("m_iConnected" ).OnUpdate (func (val st.PropertyValue ) {
518
+ state := val .S2UInt32 ()
519
+ wasConnected := pl .IsConnected
520
+ pl .IsConnected = state == 0
521
+
522
+ isDisconnection := state == 8
523
+ if isDisconnection {
524
+ for k , v := range p .rawPlayers {
525
+ if v .XUID == pl .SteamID64 {
526
+ delete (p .rawPlayers , k )
527
+ }
528
+ }
529
+ p .gameEventHandler .dispatch (events.PlayerDisconnected {
530
+ Player : pl ,
531
+ })
532
+
533
+ return
534
+ }
535
+
536
+ isConnection := ! wasConnected && pl .IsConnected
537
+ if isConnection {
538
+ if pl .SteamID64 != 0 {
539
+ p .eventDispatcher .Dispatch (events.PlayerConnect {Player : pl })
540
+ } else {
541
+ p .eventDispatcher .Dispatch (events.BotConnect {Player : pl })
542
+ }
520
543
}
521
544
})
522
545
@@ -557,15 +580,6 @@ func (p *parser) bindNewPlayerPawnS2(pawnEntity st.Entity) {
557
580
pl := p .getOrCreatePlayerFromControllerEntity (controllerEntity )
558
581
559
582
p .bindPlayerWeaponsS2 (pawnEntity , pl )
560
-
561
- if ! pl .IsConnected {
562
- pl .IsConnected = true
563
- if pl .SteamID64 != 0 {
564
- p .eventDispatcher .Dispatch (events.PlayerConnect {Player : pl })
565
- } else {
566
- p .eventDispatcher .Dispatch (events.BotConnect {Player : pl })
567
- }
568
- }
569
583
})
570
584
571
585
// Position
@@ -632,14 +646,6 @@ func (p *parser) bindNewPlayerPawnS2(pawnEntity st.Entity) {
632
646
spottedByMaskProp .OnUpdate (spottersChanged )
633
647
pawnEntity .Property ("m_bSpottedByMask.0001" ).OnUpdate (spottersChanged )
634
648
}
635
-
636
- pawnEntity .OnDestroy (func () {
637
- pl := getPlayerFromPawnEntity (pawnEntity )
638
- if pl == nil {
639
- return
640
- }
641
- pl .IsConnected = false
642
- })
643
649
}
644
650
645
651
const maxWeapons = 64
0 commit comments