|  |  | @ -901,16 +901,14 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(!pc.timestamps.containsKey("LASTHEALTHREGEN")) |  |  |  |         if(!pc.timestamps.containsKey("LASTHEALTHREGEN")) | 
			
		
	
		
		
			
				
					
					|  |  |  |             pc.timestamps.put("LASTHEALTHREGEN",System.currentTimeMillis()); |  |  |  |             pc.timestamps.put("LASTHEALTHREGEN",System.currentTimeMillis()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         float stateMultiplier = 1.0f; |  |  |  |         double current = pc.health.get(); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.isSit()) |  |  |  |         if (Double.isNaN(current)) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             stateMultiplier = 2.0f; |  |  |  |             current = 0.0; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         long deltaTime = System.currentTimeMillis() - pc.timestamps.get("LASTHEALTHREGEN"); |  |  |  |         double recovered = pc.healthMax * (0.01f / getRecoveryType(pc).health); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         float current = pc.health.get(); |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         float onePercent = pc.healthMax * 0.01f; |  |  |  |         double mod = current + recovered; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         float properDelay = (deltaTime  / getRecoveryType(pc).health) * 0.001f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         float mod = current + (properDelay * onePercent * stateMultiplier); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.bonuses != null) |  |  |  |         if(pc.bonuses != null) | 
			
		
	
		
		
			
				
					
					|  |  |  |             mod *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.HealthRecoverRate, Enum.SourceType.None); |  |  |  |             mod *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.HealthRecoverRate, Enum.SourceType.None); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -919,7 +917,7 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |             mod =  pc.healthMax; |  |  |  |             mod =  pc.healthMax; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         while (!worked) { |  |  |  |         while (!worked) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             worked = pc.health.compareAndSet(current, mod); |  |  |  |             worked = pc.health.compareAndSet((float) current, (float) mod); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         pc.timestamps.put("LASTHEALTHREGEN",System.currentTimeMillis()); |  |  |  |         pc.timestamps.put("LASTHEALTHREGEN",System.currentTimeMillis()); | 
			
		
	
	
		
		
			
				
					|  |  | @ -929,15 +927,19 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(!pc.timestamps.containsKey("LASTMANAREGEN")) |  |  |  |         if(!pc.timestamps.containsKey("LASTMANAREGEN")) | 
			
		
	
		
		
			
				
					
					|  |  |  |             pc.timestamps.put("LASTMANAREGEN",System.currentTimeMillis()); |  |  |  |             pc.timestamps.put("LASTMANAREGEN",System.currentTimeMillis()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         float stateMultiplier = 1.0f; |  |  |  |         if(pc.isCasting){ | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.isSit()) |  |  |  |             pc.timestamps.put("LASTMANAREGEN",System.currentTimeMillis()); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             stateMultiplier = 2.0f; |  |  |  |             return; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         long deltaTime = System.currentTimeMillis() - pc.timestamps.get("LASTMANAREGEN"); |  |  |  |         double current = pc.mana.get(); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         float current = pc.mana.get(); |  |  |  |         if (Double.isNaN(current)) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         float onePercent = pc.manaMax * 0.01f; |  |  |  |             current = 0.0; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         float properDelay = (deltaTime  / getRecoveryType(pc).mana) * 0.001f; |  |  |  |         } | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         float mod = current + (properDelay * onePercent * stateMultiplier); |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double recovered = pc.manaMax * (0.01f / getRecoveryType(pc).mana); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double mod = current + recovered; | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.bonuses != null) |  |  |  |         if(pc.bonuses != null) | 
			
		
	
		
		
			
				
					
					|  |  |  |             mod *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.ManaRecoverRate, Enum.SourceType.None); |  |  |  |             mod *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.ManaRecoverRate, Enum.SourceType.None); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -946,7 +948,7 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |             mod =  pc.manaMax; |  |  |  |             mod =  pc.manaMax; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         while (!worked) { |  |  |  |         while (!worked) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             worked = pc.mana.compareAndSet(current, mod); |  |  |  |             worked = pc.mana.compareAndSet((float) current, (float) mod); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         pc.timestamps.put("LASTMANAREGEN",System.currentTimeMillis()); |  |  |  |         pc.timestamps.put("LASTMANAREGEN",System.currentTimeMillis()); | 
			
		
	
	
		
		
			
				
					|  |  | @ -970,6 +972,7 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |         float current = pc.stamina.get(); |  |  |  |         float current = pc.stamina.get(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         float properDelay = (deltaTime  / getRecoveryType(pc).stamina) * 0.001f; |  |  |  |         float properDelay = (deltaTime  / getRecoveryType(pc).stamina) * 0.001f; | 
			
		
	
		
		
			
				
					
					|  |  |  |         float mod = current + (properDelay * stateMultiplier); |  |  |  |         float mod = current + (properDelay * stateMultiplier); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.bonuses != null) |  |  |  |         if(pc.bonuses != null) | 
			
		
	
		
		
			
				
					
					|  |  |  |             mod *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.StaminaRecoverRate, Enum.SourceType.None); |  |  |  |             mod *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.StaminaRecoverRate, Enum.SourceType.None); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -1053,7 +1056,7 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static recoveryType getRecoveryType(PlayerCharacter pc){ |  |  |  |     public static recoveryType getRecoveryType(PlayerCharacter pc){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.sit) |  |  |  |         if(pc.sit) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return recoveryType.RESTING; |  |  |  |             return recoveryType.RESTING; | 
			
		
	
		
		
			
				
					
					|  |  |  |         else if(!pc.isMoving()) |  |  |  |         else if(!pc.isMoving() && !pc.isFlying()) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             return recoveryType.IDLING; |  |  |  |             return recoveryType.IDLING; | 
			
		
	
		
		
			
				
					
					|  |  |  |         else |  |  |  |         else | 
			
		
	
		
		
			
				
					
					|  |  |  |             if(pc.walkMode) |  |  |  |             if(pc.walkMode) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |