Files
hk4e/gs/config/avatar_data.go
2022-12-19 13:40:04 +08:00

104 lines
3.0 KiB
Go

package config
import (
"encoding/json"
"os"
"strings"
"hk4e/pkg/endec"
"hk4e/pkg/logger"
)
type AvatarData struct {
IconName string `json:"iconName"`
BodyType string `json:"bodyType"`
QualityType string `json:"qualityType"`
ChargeEfficiency int32 `json:"chargeEfficiency"`
InitialWeapon int32 `json:"initialWeapon"`
WeaponType string `json:"weaponType"`
ImageName string `json:"imageName"`
AvatarPromoteId int32 `json:"avatarPromoteId"`
CutsceneShow string `json:"cutsceneShow"`
SkillDepotId int32 `json:"skillDepotId"`
StaminaRecoverSpeed int32 `json:"staminaRecoverSpeed"`
CandSkillDepotIds []int32 `json:"candSkillDepotIds"`
AvatarIdentityType string `json:"avatarIdentityType"`
AvatarPromoteRewardLevelList []int32 `json:"avatarPromoteRewardLevelList"`
AvatarPromoteRewardIdList []int32 `json:"avatarPromoteRewardIdList"`
NameTextMapHash int64 `json:"nameTextMapHash"`
HpBase float64 `json:"hpBase"`
AttackBase float64 `json:"attackBase"`
DefenseBase float64 `json:"defenseBase"`
Critical float64 `json:"critical"`
CriticalHurt float64 `json:"criticalHurt"`
PropGrowCurves []*PropGrowCurve `json:"propGrowCurves"`
Id int32 `json:"id"`
// 计算数据
Name string `json:"-"`
Abilities []int32 `json:"-"`
}
func (g *GameDataConfig) loadAvatarData() {
g.AvatarDataMap = make(map[int32]*AvatarData)
fileNameList := []string{"AvatarExcelConfigData.json"}
for _, fileName := range fileNameList {
fileData, err := os.ReadFile(g.excelBinPrefix + fileName)
if err != nil {
logger.Error("open file error: %v", err)
continue
}
list := make([]map[string]any, 0)
err = json.Unmarshal(fileData, &list)
if err != nil {
logger.Error("parse file error: %v", err)
continue
}
for _, v := range list {
i, err := json.Marshal(v)
if err != nil {
logger.Error("parse file error: %v", err)
continue
}
avatarData := new(AvatarData)
err = json.Unmarshal(i, avatarData)
if err != nil {
logger.Error("parse file error: %v", err)
continue
}
g.AvatarDataMap[avatarData.Id] = avatarData
}
}
logger.Info("load %v AvatarData", len(g.AvatarDataMap))
for _, v := range g.AvatarDataMap {
split := strings.Split(v.IconName, "_")
if len(split) > 0 {
v.Name = split[len(split)-1]
info := g.AbilityEmbryos[v.Name]
if info != nil {
v.Abilities = make([]int32, 0)
for _, ability := range info.Abilities {
v.Abilities = append(v.Abilities, endec.Hk4eAbilityHashCode(ability))
}
}
}
}
}
// TODO 成长属性要读表
func (a *AvatarData) GetBaseHpByLevel(level uint8) float64 {
return a.HpBase * float64(level)
}
func (a *AvatarData) GetBaseAttackByLevel(level uint8) float64 {
return a.AttackBase * float64(level)
}
func (a *AvatarData) GetBaseDefenseByLevel(level uint8) float64 {
return a.DefenseBase * float64(level)
}