Files
Ilya Groshev 15beefb5b8
Build and Push Docker images to Docker Hub / build-and-push (push) Has been cancelled
Implement Memoirs Protect/Unprotect and ConsumableItemService.UseEffectItem
2026-05-14 21:00:28 +03:00

57 lines
1.8 KiB
Go

package store
import (
"log"
"lunar-tear/server/internal/model"
)
const StaminaRecoveryDivisor int64 = 180
func SettleStamina(user *UserState, maxStaminaMillis int32, nowMillis int64) {
stored := int64(user.Status.StaminaMilliValue)
maxMilli := int64(maxStaminaMillis)
if stored >= maxMilli {
return
}
elapsed := nowMillis - user.Status.StaminaUpdateDatetime
if elapsed <= 0 {
return
}
regen := elapsed / StaminaRecoveryDivisor
settled := min(stored+regen, maxMilli)
user.Status.StaminaMilliValue = int32(settled)
user.Status.StaminaUpdateDatetime = nowMillis
}
func ConsumeStamina(user *UserState, costUnits int32, maxStaminaMillis int32, nowMillis int64) {
SettleStamina(user, maxStaminaMillis, nowMillis)
user.Status.StaminaMilliValue = max(user.Status.StaminaMilliValue-costUnits*1000, 0)
user.Status.StaminaUpdateDatetime = nowMillis
log.Printf("[ConsumeStamina] cost=%d -> remaining=%d", costUnits, user.Status.StaminaMilliValue)
}
func RecoverStamina(user *UserState, millis int32, maxStaminaMillis int32, nowMillis int64) {
SettleStamina(user, maxStaminaMillis, nowMillis)
user.Status.StaminaMilliValue += millis
user.Status.StaminaUpdateDatetime = nowMillis
log.Printf("[RecoverStamina] +%d -> total=%d", millis, user.Status.StaminaMilliValue)
}
func ReplenishStamina(user *UserState, maxStaminaMillis int32, nowMillis int64) {
user.Status.StaminaMilliValue = maxStaminaMillis
user.Status.StaminaUpdateDatetime = nowMillis
log.Printf("[ReplenishStamina] set to %d", maxStaminaMillis)
}
func ResolveStaminaEffectMillis(effectValueType, effectValue, maxStaminaMillis int32) int32 {
switch effectValueType {
case model.EffectValueFixed:
return effectValue * 1000
case model.EffectValuePermil:
return effectValue * maxStaminaMillis / 1000
default:
return 0
}
}