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

163 lines
5.1 KiB
Go

package config
import (
"encoding/json"
"os"
"hk4e/gs/constant"
"hk4e/pkg/logger"
)
type ItemUseData struct {
UseOp string `json:"useOp"`
UseParam []string `json:"useParam"`
}
type WeaponProperty struct {
PropType string `json:"propType"`
InitValue float64 `json:"initValue"`
Type string `json:"type"`
FightProp uint16 `json:"-"`
}
type ItemData struct {
Id int32 `json:"id"`
StackLimit int32 `json:"stackLimit"`
MaxUseCount int32 `json:"maxUseCount"`
RankLevel int32 `json:"rankLevel"`
EffectName string `json:"effectName"`
SatiationParams []int32 `json:"satiationParams"`
Rank int32 `json:"rank"`
Weight int32 `json:"weight"`
GadgetId int32 `json:"gadgetId"`
DestroyReturnMaterial []int32 `json:"destroyReturnMaterial"`
DestroyReturnMaterialCount []int32 `json:"destroyReturnMaterialCount"`
ItemUse []*ItemUseData `json:"itemUse"`
// food
FoodQuality string `json:"foodQuality"`
UseTarget string `json:"useTarget"`
IseParam []string `json:"iseParam"`
// string enums
ItemType string `json:"itemType"`
MaterialType string `json:"materialType"`
EquipType string `json:"equipType"`
EffectType string `json:"effectType"`
DestroyRule string `json:"destroyRule"`
// post load enum forms of above
MaterialEnumType uint16 `json:"-"`
ItemEnumType uint16 `json:"-"`
EquipEnumType uint16 `json:"-"`
// relic
MainPropDepotId int32 `json:"mainPropDepotId"`
AppendPropDepotId int32 `json:"appendPropDepotId"`
AppendPropNum int32 `json:"appendPropNum"`
SetId int32 `json:"setId"`
AddPropLevels []int32 `json:"addPropLevels"`
BaseConvExp int32 `json:"baseConvExp"`
MaxLevel int32 `json:"maxLevel"`
// weapon
WeaponPromoteId int32 `json:"weaponPromoteId"`
WeaponBaseExp int32 `json:"weaponBaseExp"`
StoryId int32 `json:"storyId"`
AvatarPromoteId int32 `json:"avatarPromoteId"`
AwakenMaterial int32 `json:"awakenMaterial"`
AwakenCosts []int32 `json:"awakenCosts"`
SkillAffix []int32 `json:"skillAffix"`
WeaponProp []*WeaponProperty `json:"weaponProp"`
// hash
Icon string `json:"icon"`
NameTextMapHash int64 `json:"nameTextMapHash"`
AddPropLevelSet map[int32]bool `json:"-"`
// furniture
Comfort int32 `json:"comfort"`
FurnType []int32 `json:"furnType"`
FurnitureGadgetID []int32 `json:"furnitureGadgetID"`
RoomSceneId int32 `json:"roomSceneId"`
}
func (g *GameDataConfig) loadItemData() {
g.ItemDataMap = make(map[int32]*ItemData)
fileNameList := []string{"MaterialExcelConfigData.json", "WeaponExcelConfigData.json", "ReliquaryExcelConfigData.json", "HomeWorldFurnitureExcelConfigData.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
}
itemData := new(ItemData)
err = json.Unmarshal(i, itemData)
if err != nil {
logger.Error("parse file error: %v", err)
continue
}
g.ItemDataMap[itemData.Id] = itemData
}
}
logger.Info("load %v ItemData", len(g.ItemDataMap))
for _, itemData := range g.ItemDataMap {
itemData.ItemEnumType = constant.ItemTypeConst.STRING_MAP[itemData.ItemType]
itemData.MaterialEnumType = constant.MaterialTypeConst.STRING_MAP[itemData.MaterialType]
if itemData.ItemEnumType == constant.ItemTypeConst.ITEM_RELIQUARY {
itemData.EquipEnumType = constant.EquipTypeConst.STRING_MAP[itemData.EquipType]
if itemData.AddPropLevels != nil || len(itemData.AddPropLevels) > 0 {
itemData.AddPropLevelSet = make(map[int32]bool)
for _, v := range itemData.AddPropLevels {
itemData.AddPropLevelSet[v] = true
}
}
} else if itemData.ItemEnumType == constant.ItemTypeConst.ITEM_WEAPON {
itemData.EquipEnumType = constant.EquipTypeConst.EQUIP_WEAPON
} else {
itemData.EquipEnumType = constant.EquipTypeConst.EQUIP_NONE
}
if itemData.WeaponProp != nil {
for i, v := range itemData.WeaponProp {
v.FightProp = constant.FightPropertyConst.STRING_MAP[v.PropType]
itemData.WeaponProp[i] = v
}
}
if itemData.FurnType != nil {
furnType := make([]int32, 0)
for _, v := range itemData.FurnType {
if v > 0 {
furnType = append(furnType, v)
}
}
itemData.FurnType = furnType
}
if itemData.FurnitureGadgetID != nil {
furnitureGadgetID := make([]int32, 0)
for _, v := range itemData.FurnitureGadgetID {
if v > 0 {
furnitureGadgetID = append(furnitureGadgetID, v)
}
}
itemData.FurnitureGadgetID = furnitureGadgetID
}
}
}