mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-11-15 16:56:00 -05:00
30b6f0cb4e
Bugs: 1. In D2 when Stamina is drained it does not regenerate until you completely stop 2. Stamina Bar does not get red when near the end
65 lines
2.0 KiB
Go
65 lines
2.0 KiB
Go
package d2hero
|
|
|
|
import (
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2records"
|
|
)
|
|
|
|
// HeroStatsState is a serializable state of hero stats.
|
|
type HeroStatsState struct {
|
|
Level int `json:"level"`
|
|
Experience int `json:"experience"`
|
|
|
|
Vitality int `json:"vitality"`
|
|
Energy int `json:"energy"`
|
|
Strength int `json:"strength"`
|
|
Dexterity int `json:"dexterity"`
|
|
|
|
AttackRating int `json:"attackRating"`
|
|
DefenseRating int `json:"defenseRating"`
|
|
|
|
MaxStamina int `json:"maxStamina"`
|
|
Health int `json:"health"`
|
|
MaxHealth int `json:"maxHealth"`
|
|
Mana int `json:"mana"`
|
|
MaxMana int `json:"maxMana"`
|
|
|
|
FireResistance int `json:"fireResistance"`
|
|
ColdResistance int `json:"coldResistance"`
|
|
LightningResistance int `json:"lightningResistance"`
|
|
PoisonResistance int `json:"poisonResistance"`
|
|
|
|
// values which are not saved/loaded(computed)
|
|
Stamina float64 `json:"-"` // only MaxStamina is saved, Stamina gets reset on entering world
|
|
NextLevelExp int `json:"-"`
|
|
}
|
|
|
|
// CreateHeroStatsState generates a running state from a hero stats.
|
|
func (f *HeroStateFactory) CreateHeroStatsState(heroClass d2enum.Hero, classStats *d2records.CharStatsRecord) *HeroStatsState {
|
|
result := HeroStatsState{
|
|
Level: 1,
|
|
Experience: 0,
|
|
NextLevelExp: f.asset.Records.GetExperienceBreakpoint(heroClass, 1),
|
|
Strength: classStats.InitStr,
|
|
Dexterity: classStats.InitDex,
|
|
Vitality: classStats.InitVit,
|
|
Energy: classStats.InitEne,
|
|
|
|
MaxHealth: classStats.InitVit * classStats.LifePerVit,
|
|
MaxMana: classStats.InitEne * classStats.ManaPerEne,
|
|
MaxStamina: classStats.InitStamina,
|
|
// TODO: chance to hit, defense rating
|
|
}
|
|
|
|
result.Mana = result.MaxMana
|
|
result.Health = result.MaxHealth
|
|
result.Stamina = float64(result.MaxStamina)
|
|
|
|
// TODO: For demonstration purposes (hp, mana, exp, & character stats panel gets updated depending on stats)
|
|
result.Health = 50
|
|
result.Mana = 30
|
|
result.Experience = 166
|
|
|
|
return &result
|
|
}
|