From 734b67be6d5eaf9a705321693a37111ab4a22033 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Sun, 16 Feb 2025 09:09:08 -0600 Subject: [PATCH] recovering rates --- src/engine/objects/PlayerCombatStats.java | 39 +++++++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/engine/objects/PlayerCombatStats.java b/src/engine/objects/PlayerCombatStats.java index be5267db..759180f2 100644 --- a/src/engine/objects/PlayerCombatStats.java +++ b/src/engine/objects/PlayerCombatStats.java @@ -908,7 +908,9 @@ public class PlayerCombatStats { long deltaTime = System.currentTimeMillis() - pc.timestamps.get("LASTHEALTHREGEN"); float current = pc.health.get(); float onePercent = pc.healthMax * 0.01f; - float mod = current + ((deltaTime * 0.001f) * onePercent * stateMultiplier); + + float properDelay = (deltaTime / getRecoveryType(pc).health) * 0.001f; + float mod = current + (properDelay * onePercent * stateMultiplier); if(pc.bonuses != null) mod *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.HealthRecoverRate, Enum.SourceType.None); @@ -934,7 +936,8 @@ public class PlayerCombatStats { long deltaTime = System.currentTimeMillis() - pc.timestamps.get("LASTMANAREGEN"); float current = pc.mana.get(); float onePercent = pc.manaMax * 0.01f; - float mod = current + ((deltaTime * 0.001f) * onePercent * stateMultiplier); + float properDelay = (deltaTime / getRecoveryType(pc).mana) * 0.001f; + float mod = current + (properDelay * onePercent * stateMultiplier); if(pc.bonuses != null) mod *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.ManaRecoverRate, Enum.SourceType.None); @@ -965,7 +968,8 @@ public class PlayerCombatStats { long deltaTime = System.currentTimeMillis() - pc.timestamps.get("LASTSTAMINAREGEN"); float current = pc.stamina.get(); - float mod = current + ((deltaTime * 0.001f) * stateMultiplier); + float properDelay = (deltaTime / getRecoveryType(pc).stamina) * 0.001f; + float mod = current + (properDelay * stateMultiplier); if(pc.bonuses != null) mod *= 1 + pc.bonuses.getFloatPercentAll(Enum.ModType.StaminaRecoverRate, Enum.SourceType.None); @@ -1029,4 +1033,33 @@ public class PlayerCombatStats { } } + private enum recoveryType{ + RESTING(3.0f,1.25f,0.5f), + IDLING(15.0f,6.0f,5.0f), + WALKING(20.0f,8.0f,0.0f), + RUNNING(0.0f,0.0f,0.0f); + public float health; + public float mana; + public float stamina; + + + recoveryType(float health,float mana, float stamina){ + this.health = health; + this.mana = mana; + this.stamina = stamina; + } + } + + public static recoveryType getRecoveryType(PlayerCharacter pc){ + if(pc.sit) + return recoveryType.RESTING; + else if(!pc.isMoving()) + return recoveryType.IDLING; + else + if(pc.walkMode) + return recoveryType.WALKING; + else + return recoveryType.RUNNING; + } + }