@@ -514,9 +514,32 @@ func (p *parser) getOrCreatePlayerFromControllerEntity(controllerEntity st.Entit
514514func (p * parser ) bindNewPlayerControllerS2 (controllerEntity st.Entity ) {
515515 pl := p .getOrCreatePlayerFromControllerEntity (controllerEntity )
516516
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+ }
520543 }
521544 })
522545
@@ -557,15 +580,6 @@ func (p *parser) bindNewPlayerPawnS2(pawnEntity st.Entity) {
557580 pl := p .getOrCreatePlayerFromControllerEntity (controllerEntity )
558581
559582 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- }
569583 })
570584
571585 // Position
@@ -632,14 +646,6 @@ func (p *parser) bindNewPlayerPawnS2(pawnEntity st.Entity) {
632646 spottedByMaskProp .OnUpdate (spottersChanged )
633647 pawnEntity .Property ("m_bSpottedByMask.0001" ).OnUpdate (spottersChanged )
634648 }
635-
636- pawnEntity .OnDestroy (func () {
637- pl := getPlayerFromPawnEntity (pawnEntity )
638- if pl == nil {
639- return
640- }
641- pl .IsConnected = false
642- })
643649}
644650
645651const maxWeapons = 64
0 commit comments