diff --git a/src/engine/objects/PlayerCharacter.java b/src/engine/objects/PlayerCharacter.java index f42fc281..75caec48 100644 --- a/src/engine/objects/PlayerCharacter.java +++ b/src/engine/objects/PlayerCharacter.java @@ -5916,202 +5916,11 @@ public class PlayerCharacter extends AbstractCharacter { // Reset this char's frame time. this.lastUpdateTime = System.currentTimeMillis(); this.lastStamUpdateTime = System.currentTimeMillis(); - //this.updateMovementState(); - ///boolean updateHealth = this.regenerateHealth(); - //boolean updateMana = this.regenerateMana(); - //boolean updateStamina = this.regenerateStamina(); - //boolean consumeStamina = this.consumeStamina(); + if (this.timestamps.get("SyncClient") + 5000L < System.currentTimeMillis()) { - //if (updateHealth || updateMana || updateStamina || consumeStamina) { this.syncClient(); this.timestamps.put("SyncClient", System.currentTimeMillis()); - //} - } - } - - public boolean regenerateHealth(){ - Long regenTime; - Long currentTime = System.currentTimeMillis(); - regenTime = this.timestamps.getOrDefault("LastRegenHealth", currentTime); - float secondsPassed = (currentTime - regenTime) / 1000f; - float onePercent = this.healthMax * 0.01f; - float rate = 1.0f / RecoveryType.getRecoveryType(this).healthRate; - rate *= this.getRegenModifier(ModType.HealthRecoverRate); - rate *= this.combatStats.healthRegen; - - if(this.isMoving() && !this.walkMode) - rate = 0.0f; - - float healthRegenerated = onePercent * rate * secondsPassed; - //ChatManager.chatSystemInfo(this,"HEALTH REGENERATED: " + healthRegenerated + " SECONDS PASSED: " + secondsPassed); - ChatManager.chatSystemInfo(this,"HEALTH : " + Math.round(this.health.get()) + " / " + this.healthMax); - boolean workedHealth = false; - float old = this.health.get(); - float mod = old + healthRegenerated; - while(!workedHealth) { - if (mod > this.healthMax) - mod = healthMax; - else if (mod <= 0) { - if (this.isAlive.compareAndSet(true, false)) - killCharacter("Water"); - return false; - } - workedHealth = this.health.compareAndSet(old, mod); - } - - this.timestamps.put("LastRegenHealth",currentTime); - return mod > old; - } - public boolean regenerateMana(){ - Long regenTime; - Long currentTime = System.currentTimeMillis(); - regenTime = this.timestamps.getOrDefault("LastRegenMana", currentTime); - float secondsPassed = (currentTime - regenTime) / 1000f; - float onePercent = this.manaMax * 0.01f; - float rate = 1.0f / RecoveryType.getRecoveryType(this).manaRate; - rate *= this.combatStats.manaRegen; - - if(this.isMoving() && !this.walkMode) - rate = 0.0f; - - float manaRegenerated = onePercent * secondsPassed * rate; - - boolean workedMana = false; - float old = this.mana.get(); - float mod = old + manaRegenerated; - while(!workedMana) { - - if (mod > this.manaMax) - mod = manaMax; - else if (mod < 0) - mod = 0; - workedMana = this.mana.compareAndSet(old, mod); - } - - this.timestamps.put("LastRegenMana",currentTime); - return mod > old; - } - public boolean regenerateStamina(){ - - Long currentTime = System.currentTimeMillis(); - - if(this.isMoving() || this.isFlying() || !this.canBreathe) { - this.timestamps.put("LastRegenStamina",currentTime); - return false; - } - - Long regenTime; - - regenTime = this.timestamps.getOrDefault("LastRegenStamina", currentTime); - float secondsPassed = (currentTime - regenTime) / 1000f; - - float secondsToRecover1 = RecoveryType.getRecoveryType(this).staminaRate; - secondsToRecover1 *= this.combatStats.staminaRegen; - - float ratio = secondsPassed / secondsToRecover1; - //rate *= this.getRegenModifier(ModType.StaminaRecoverRate); // Adjust rate with modifiers - - //float staminaRegenerated = secondsPassed / rate; // Stamina regenerates 1 point per `rate` seconds - float staminaRegenerated = secondsPassed * ratio; // Stamina regenerates 1 point per `rate` seconds - - boolean workedStamina = false; - float old = this.stamina.get(); - float mod = old + staminaRegenerated; - while (!workedStamina) { - if (mod > this.staminaMax) - mod = staminaMax; - else if (mod < 0) - mod = 0; - workedStamina = this.stamina.compareAndSet(old, mod); - } - //ChatManager.chatSystemInfo(this, "STAM: " + this.stamina.get() + " / " + this.staminaMax); - this.timestamps.put("LastRegenStamina", currentTime); - return mod > old; - } - public boolean consumeStamina(){ - Long regenTime; - Long currentTime = System.currentTimeMillis(); - regenTime = this.timestamps.getOrDefault("LastConsumeStamina", currentTime); - float secondsPassed = (currentTime - regenTime) / 1000f; - - float consumption; - - if(!this.isMoving() && !this.isFlying() && this.canBreathe) { - this.timestamps.put("LastConsumeStamina",currentTime); - return false; - } - if(!this.combat){ - consumption = 0.4f * secondsPassed; - }else{ - consumption = 0.65f * secondsPassed; - } - if(!this.canBreathe) - consumption = 1.5f * secondsPassed; - else if(this.isFlying()) - consumption = 2.0f * secondsPassed; - - boolean workedStamina = false; - float old = this.stamina.get(); - float mod = old - consumption; - while (!workedStamina) { - if (mod <= 0) - mod = 0; - workedStamina = this.stamina.compareAndSet(old, mod); - } - //ChatManager.chatSystemInfo(this, "STAM: " + this.stamina.get() + " / " + this.staminaMax); - this.timestamps.put("LastConsumeStamina",currentTime); - if(this.stamina.get() == 0){ - return this.consumeHealth(secondsPassed); - } - return mod < old; - } - - public boolean consumeHealth(float secondsPassed){ - float consumption = 2.0f * secondsPassed; - boolean workedHealth = false; - float old = this.health.get(); - float mod = old - consumption; - while(!workedHealth) { - - if (mod > this.healthMax) - mod = healthMax; - else if (mod <= 0) { - if (this.isAlive.compareAndSet(true, false)) - killCharacter("Water"); - return true; - } - workedHealth = this.health.compareAndSet(old, mod); - } - return mod < old; - } - - enum RecoveryType{ - //Values for health and mana are in terms of the number of seconds it takes to recover 1% of max pool - //Values for stamina are in terms of the number of seconds it takes to recover 1 point - RESTING(3.0f,1.2f,0.5f), //sitting - IDLING(15.0f,6.0f,5.0f), //standing not moving - WALKING(20.0f,8.0f,0.0f), // moving in walk mode - RUNNING(0.0f,0.0f,0.0f); // moving in run mode - public float healthRate; - public float manaRate; - public float staminaRate; - RecoveryType(float health, float mana, float stamina) { - this.healthRate = health; - this.manaRate = mana; - this.staminaRate = stamina; - } - public static RecoveryType getRecoveryType(PlayerCharacter pc){ - if (pc.isMoving()) { - if(pc.walkMode){ - return RecoveryType.WALKING; - }else{ - return RecoveryType.RUNNING; - } - }else if(pc.isSit()){ - return RecoveryType.RESTING; - }else{ - return RecoveryType.IDLING; - } + InterestManager.setObjectDirty(this); } } }