|
|
@ -5867,6 +5867,10 @@ public class PlayerCharacter extends AbstractCharacter { |
|
|
|
public void doRegen(){ |
|
|
|
public void doRegen(){ |
|
|
|
if (this.updateLock.writeLock().tryLock()) { |
|
|
|
if (this.updateLock.writeLock().tryLock()) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
|
|
|
|
if(!this.isAlive() || !this.enteredWorld || !this.isActive) { |
|
|
|
|
|
|
|
this.resetRegenUpdateTime(); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
regenerateHealth(); |
|
|
|
regenerateHealth(); |
|
|
|
regenerateMana(); |
|
|
|
regenerateMana(); |
|
|
|
regenerateStamina(); |
|
|
|
regenerateStamina(); |
|
|
@ -5877,6 +5881,7 @@ public class PlayerCharacter extends AbstractCharacter { |
|
|
|
this.updateLock.writeLock().unlock(); |
|
|
|
this.updateLock.writeLock().unlock(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//ChatManager.chatSystemInfo(this,"HEALTH: " + this.health.get() + " MANA: " + this.mana.get() + " STAM: " + this.stamina.get());
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void regenerateHealth(){ |
|
|
|
public void regenerateHealth(){ |
|
|
@ -5885,11 +5890,14 @@ public class PlayerCharacter extends AbstractCharacter { |
|
|
|
regenTime = this.timestamps.getOrDefault("LastRegenHealth", currentTime); |
|
|
|
regenTime = this.timestamps.getOrDefault("LastRegenHealth", currentTime); |
|
|
|
float secondsPassed = (currentTime - regenTime) / 1000f; |
|
|
|
float secondsPassed = (currentTime - regenTime) / 1000f; |
|
|
|
float onePercent = this.healthMax * 0.01f; |
|
|
|
float onePercent = this.healthMax * 0.01f; |
|
|
|
float rate = RecoveryType.getRecoveryType(this).healthRate; |
|
|
|
float rate = 1.0f / RecoveryType.getRecoveryType(this).healthRate; |
|
|
|
rate *= this.getRegenModifier(ModType.HealthRecoverRate); |
|
|
|
rate *= this.getRegenModifier(ModType.HealthRecoverRate); |
|
|
|
|
|
|
|
|
|
|
|
float healthRegenerated = onePercent * secondsPassed * rate; |
|
|
|
if(this.isMoving() && !this.walkMode) |
|
|
|
|
|
|
|
rate = 0.0f; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
float healthRegenerated = onePercent * rate * secondsPassed; |
|
|
|
|
|
|
|
//ChatManager.chatSystemInfo(this,"HEALTH REGENERATED: " + healthRegenerated + " SECONDS PASSED: " + secondsPassed);
|
|
|
|
boolean workedHealth = false; |
|
|
|
boolean workedHealth = false; |
|
|
|
float old,mod; |
|
|
|
float old,mod; |
|
|
|
while(!workedHealth) { |
|
|
|
while(!workedHealth) { |
|
|
@ -5913,9 +5921,12 @@ public class PlayerCharacter extends AbstractCharacter { |
|
|
|
regenTime = this.timestamps.getOrDefault("LastRegenMana", currentTime); |
|
|
|
regenTime = this.timestamps.getOrDefault("LastRegenMana", currentTime); |
|
|
|
float secondsPassed = (currentTime - regenTime) / 1000f; |
|
|
|
float secondsPassed = (currentTime - regenTime) / 1000f; |
|
|
|
float onePercent = this.manaMax * 0.01f; |
|
|
|
float onePercent = this.manaMax * 0.01f; |
|
|
|
float rate = RecoveryType.getRecoveryType(this).manaRate; |
|
|
|
float rate = 1.0f / RecoveryType.getRecoveryType(this).manaRate; |
|
|
|
rate *= this.getRegenModifier(ModType.ManaRecoverRate); |
|
|
|
rate *= this.getRegenModifier(ModType.ManaRecoverRate); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(this.isMoving() && !this.walkMode) |
|
|
|
|
|
|
|
rate = 0.0f; |
|
|
|
|
|
|
|
|
|
|
|
float manaRegenerated = onePercent * secondsPassed * rate; |
|
|
|
float manaRegenerated = onePercent * secondsPassed * rate; |
|
|
|
|
|
|
|
|
|
|
|
boolean workedMana = false; |
|
|
|
boolean workedMana = false; |
|
|
@ -5933,6 +5944,8 @@ public class PlayerCharacter extends AbstractCharacter { |
|
|
|
this.timestamps.put("LastRegenMana",currentTime); |
|
|
|
this.timestamps.put("LastRegenMana",currentTime); |
|
|
|
} |
|
|
|
} |
|
|
|
public void regenerateStamina(){ |
|
|
|
public void regenerateStamina(){ |
|
|
|
|
|
|
|
if(this.isMoving()) |
|
|
|
|
|
|
|
return; |
|
|
|
Long regenTime; |
|
|
|
Long regenTime; |
|
|
|
Long currentTime = System.currentTimeMillis(); |
|
|
|
Long currentTime = System.currentTimeMillis(); |
|
|
|
regenTime = this.timestamps.getOrDefault("LastRegenStamina", currentTime); |
|
|
|
regenTime = this.timestamps.getOrDefault("LastRegenStamina", currentTime); |
|
|
@ -5954,7 +5967,7 @@ public class PlayerCharacter extends AbstractCharacter { |
|
|
|
mod = 0; |
|
|
|
mod = 0; |
|
|
|
workedStamina = this.stamina.compareAndSet(old, mod); |
|
|
|
workedStamina = this.stamina.compareAndSet(old, mod); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//ChatManager.chatSystemInfo(this, "STAM: " + this.stamina.get() + " / " + this.staminaMax);
|
|
|
|
this.timestamps.put("LastRegenStamina", currentTime); |
|
|
|
this.timestamps.put("LastRegenStamina", currentTime); |
|
|
|
} |
|
|
|
} |
|
|
|
public void consumeStamina(){ |
|
|
|
public void consumeStamina(){ |
|
|
@ -5964,9 +5977,10 @@ public class PlayerCharacter extends AbstractCharacter { |
|
|
|
float secondsPassed = (currentTime - regenTime) / 1000f; |
|
|
|
float secondsPassed = (currentTime - regenTime) / 1000f; |
|
|
|
|
|
|
|
|
|
|
|
float consumption; |
|
|
|
float consumption; |
|
|
|
if(!this.isMoving() && !this.isFlying()) |
|
|
|
if(!this.isMoving() && !this.isFlying()) { |
|
|
|
|
|
|
|
this.timestamps.put("LastConsumeStamina",currentTime); |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
if(!this.combat){ |
|
|
|
if(!this.combat){ |
|
|
|
consumption = 0.4f * secondsPassed; |
|
|
|
consumption = 0.4f * secondsPassed; |
|
|
|
}else{ |
|
|
|
}else{ |
|
|
@ -5984,6 +5998,8 @@ public class PlayerCharacter extends AbstractCharacter { |
|
|
|
mod = 0; |
|
|
|
mod = 0; |
|
|
|
workedStamina = this.stamina.compareAndSet(old, mod); |
|
|
|
workedStamina = this.stamina.compareAndSet(old, mod); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//ChatManager.chatSystemInfo(this, "CONSUMED STAM: " + consumption);
|
|
|
|
|
|
|
|
this.timestamps.put("LastConsumeStamina",currentTime); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
enum RecoveryType{ |
|
|
|
enum RecoveryType{ |
|
|
|