@@ -159,9 +159,12 @@ func (p *parser) bindBomb() {
159159 bomb .LastOnGroundPosition = bombEntity .Position ()
160160
161161 if p .isSource2 () {
162- isTicking := true
163162 ownerProp := bombEntity .PropertyValueMust ("m_hOwnerEntity" )
164163 planter := p .gameState .Participants ().FindByPawnHandle (ownerProp .Handle ())
164+ if planter == nil {
165+ return
166+ }
167+ isTicking := true
165168 planter .IsPlanting = false
166169
167170 siteNumber := bombEntity .PropertyValueMust ("m_nBombSite" ).Int ()
@@ -524,6 +527,15 @@ func (p *parser) bindNewPlayerControllerS2(controllerEntity st.Entity) {
524527func (p * parser ) bindNewPlayerPawnS2 (pawnEntity st.Entity ) {
525528 var prevControllerHandle uint64
526529
530+ getPlayerFromPawnEntity := func (pawnEntity st.Entity ) * common.Player {
531+ controllerProp , hasProp := pawnEntity .PropertyValue ("m_hController" )
532+ if ! hasProp {
533+ return nil
534+ }
535+
536+ return p .gameState .Participants ().FindByHandle64 (controllerProp .Handle ())
537+ }
538+
527539 pawnEntity .Property ("m_hController" ).OnUpdate (func (controllerHandleVal st.PropertyValue ) {
528540 controllerHandle := controllerHandleVal .Handle ()
529541 if controllerHandle == constants .InvalidEntityHandleSource2 || controllerHandle == prevControllerHandle {
@@ -537,65 +549,89 @@ func (p *parser) bindNewPlayerPawnS2(pawnEntity st.Entity) {
537549
538550 pl := p .getOrCreatePlayerFromControllerEntity (controllerEntity )
539551
552+ p .bindPlayerWeaponsS2 (pawnEntity , pl )
553+
540554 if ! pl .IsConnected {
541555 pl .IsConnected = true
542-
543556 if pl .SteamID64 != 0 {
544557 p .eventDispatcher .Dispatch (events.PlayerConnect {Player : pl })
545558 } else {
546559 p .eventDispatcher .Dispatch (events.BotConnect {Player : pl })
547560 }
548561 }
562+ })
549563
550- // Position
551- pawnEntity .OnPositionUpdate (func (pos r3.Vector ) {
552- if pl .IsAlive () {
553- pl .LastAlivePosition = pos
554- }
555- })
556-
557- pawnEntity .Property ("m_flFlashDuration" ).OnUpdate (func (val st.PropertyValue ) {
558- if val .Float () == 0 {
559- pl .FlashTick = 0
560- } else {
561- pl .FlashTick = p .gameState .ingameTick
562- }
564+ // Position
565+ pawnEntity .OnPositionUpdate (func (pos r3.Vector ) {
566+ pl := getPlayerFromPawnEntity (pawnEntity )
567+ if pl == nil {
568+ return
569+ }
570+ if pl .IsAlive () {
571+ pl .LastAlivePosition = pos
572+ }
573+ })
563574
564- pl .FlashDuration = val .Float ()
575+ pawnEntity .Property ("m_flFlashDuration" ).OnUpdate (func (val st.PropertyValue ) {
576+ pl := getPlayerFromPawnEntity (pawnEntity )
577+ if pl == nil {
578+ return
579+ }
580+ if val .Float () == 0 {
581+ pl .FlashTick = 0
582+ } else {
583+ pl .FlashTick = p .gameState .ingameTick
584+ }
565585
566- if pl .FlashDuration > 0 {
567- if len (p .gameState .flyingFlashbangs ) == 0 {
568- return
569- }
586+ pl .FlashDuration = val .Float ()
570587
571- flashbang := p .gameState .flyingFlashbangs [0 ]
572- flashbang .flashedEntityIDs = append (flashbang .flashedEntityIDs , pl .EntityID )
588+ if pl .FlashDuration > 0 {
589+ if len (p .gameState .flyingFlashbangs ) == 0 {
590+ return
573591 }
574- })
575592
576- p .bindPlayerWeaponsS2 (pawnEntity , pl )
593+ flashbang := p .gameState .flyingFlashbangs [0 ]
594+ flashbang .flashedEntityIDs = append (flashbang .flashedEntityIDs , pl .EntityID )
595+ }
596+ })
577597
578- pawnEntity .Property ("m_pWeaponServices.m_hActiveWeapon" ).OnUpdate (func (val st.PropertyValue ) {
579- pl .IsReloading = false
580- })
598+ pawnEntity .Property ("m_pWeaponServices.m_hActiveWeapon" ).OnUpdate (func (val st.PropertyValue ) {
599+ pl := getPlayerFromPawnEntity (pawnEntity )
600+ if pl == nil {
601+ return
602+ }
603+ pl .IsReloading = false
604+ })
581605
582- pawnEntity .Property ("m_bIsDefusing" ).OnUpdate (func (val st.PropertyValue ) {
583- pl .IsDefusing = val .BoolVal ()
584- })
606+ pawnEntity .Property ("m_bIsDefusing" ).OnUpdate (func (val st.PropertyValue ) {
607+ pl := getPlayerFromPawnEntity (pawnEntity )
608+ if pl == nil {
609+ return
610+ }
611+ pl .IsDefusing = val .BoolVal ()
612+ })
585613
586- spottedByMaskProp := pawnEntity .Property ("m_bSpottedByMask.0000" )
587- if spottedByMaskProp != nil {
588- spottersChanged := func (val st.PropertyValue ) {
589- p .eventDispatcher .Dispatch (events.PlayerSpottersChanged {Spotted : pl })
614+ spottedByMaskProp := pawnEntity .Property ("m_bSpottedByMask.0000" )
615+ if spottedByMaskProp != nil {
616+ spottersChanged := func (val st.PropertyValue ) {
617+ pl := getPlayerFromPawnEntity (pawnEntity )
618+ if pl == nil {
619+ return
590620 }
591621
592- spottedByMaskProp .OnUpdate (spottersChanged )
593- pawnEntity .Property ("m_bSpottedByMask.0001" ).OnUpdate (spottersChanged )
622+ p .eventDispatcher .Dispatch (events.PlayerSpottersChanged {Spotted : pl })
594623 }
595624
596- pawnEntity .OnDestroy (func () {
597- pl .IsConnected = false
598- })
625+ spottedByMaskProp .OnUpdate (spottersChanged )
626+ pawnEntity .Property ("m_bSpottedByMask.0001" ).OnUpdate (spottersChanged )
627+ }
628+
629+ pawnEntity .OnDestroy (func () {
630+ pl := getPlayerFromPawnEntity (pawnEntity )
631+ if pl == nil {
632+ return
633+ }
634+ pl .IsConnected = false
599635 })
600636}
601637
0 commit comments