@@ -34,6 +34,11 @@ private void OnTick()
3434
3535 foreach ( var controller in Utilities . GetPlayers ( ) . Where ( c => c . IsValid ( ) && c . PawnIsAlive ) )
3636 {
37+ if ( controller . PlayerPawn . Value == null )
38+ continue ;
39+
40+ var doAction = false ;
41+
3742 foreach ( var zone in _zones )
3843 {
3944 if ( ( ( Config . NoRushTime != 0 && Config . NoRushTime + _roundStart < Server . CurrentTime ) || _bombPlanted ) && Config . RushZones . Contains ( ( int ) zone . Type ) )
@@ -42,53 +47,52 @@ private void OnTick()
4247 if ( Config . NoCampTime != 0 && Config . NoCampTime + _roundStart > Server . CurrentTime && Config . CampZones . Contains ( ( int ) zone . Type ) )
4348 continue ;
4449
45- var isInZone = zone . IsInZone ( controller . PlayerPawn . Value ! . AbsOrigin ! ) ;
50+ var isInZone = zone . IsInZone ( controller . PlayerPawn . Value . AbsOrigin ! ) ;
4651
4752 if ( ! zone . Data . TryGetValue ( controller , out _ ) )
4853 zone . Data [ controller ] = new ZoneData ( ) ;
4954
55+ if ( ! zone . Teams . Contains ( controller . Team ) )
56+ continue ;
57+
5058 if ( ! isInZone )
5159 {
52- if ( zone . Data [ controller ] . Entry != 0 )
53- {
54- zone . Data [ controller ] . Entry = 0 ;
55- zone . Data [ controller ] . Exit = Server . CurrentTime ;
56- }
57-
60+ zone . Data [ controller ] . Entry = 0 ;
5861 continue ;
5962 }
6063
61- if ( zone . Data [ controller ] . Entry == 0 )
64+ if ( zone . Delay == 0 )
6265 {
63- zone . Data [ controller ] . Entry = Server . CurrentTime ;
64- zone . Data [ controller ] . Exit = 0 ;
66+ doAction = true ;
67+ DoAction ( controller , zone ) ;
68+ continue ;
6569 }
6670
67- if ( ! zone . Teams . Contains ( controller . Team ) )
68- continue ;
71+ if ( zone . Data [ controller ] . Entry == 0 )
72+ zone . Data [ controller ] . Entry = Server . CurrentTime ;
73+
74+ var diff = ( zone . Data [ controller ] . Entry + zone . Delay ) - Server . CurrentTime ;
6975
70- if ( zone . Delay != 0 )
76+ if ( diff > 0 )
7177 {
72- var diff = ( zone . Data [ controller ] . Entry + zone . Delay ) - Server . CurrentTime ;
78+ var diffString = diff % 1 ;
7379
74- if ( diff > 0 )
75- {
76- var diffString = diff % 1 ;
77-
78- if ( diffString . ToString ( "0.00" ) is ( "0.00" or "0.01" ) && diff >= 1 )
79- controller . PrintToChat ( $ "{ Prefix } { Localizer [ "delayRemaining" , zone . ToString ( Localizer ) , diff . ToString ( "0" ) ] } ") ;
80- }
81- else
82- DoAction ( controller , zone ) ;
80+ if ( diffString . ToString ( "0.00" ) is ( "0.00" or "0.01" ) && diff >= 1 )
81+ controller . PrintToChat ( $ "{ Prefix } { Localizer [ "delayRemaining" , zone . ToString ( Localizer ) , diff . ToString ( "0" ) ] } ") ;
8382
8483 continue ;
8584 }
8685
86+ doAction = true ;
8787 DoAction ( controller , zone ) ;
8888 }
89- }
9089
91- return ;
90+ if ( doAction )
91+ continue ;
92+
93+ _playerData [ controller ] . LastPos = [ controller . PlayerPawn . Value . AbsOrigin ! . X , controller . PlayerPawn . Value . AbsOrigin . Y , controller . PlayerPawn . Value . AbsOrigin . Z ] ;
94+ _playerData [ controller ] . LastVel = [ controller . PlayerPawn . Value . AbsVelocity . X , controller . PlayerPawn . Value . AbsVelocity . Y , controller . PlayerPawn . Value . AbsVelocity . Z ] ;
95+ }
9296 }
9397
9498 private void OnMapStart ( string mapName )
0 commit comments