mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-03-01 00:35:36 +08:00
GCG技能初步 但有很多问题
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
package gdconf
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/hjson/hjson-go/v4"
|
||||
"hk4e/pkg/logger"
|
||||
"os"
|
||||
|
||||
"github.com/jszwec/csvutil"
|
||||
)
|
||||
|
||||
// 卡牌技能配置表
|
||||
|
||||
type GCGSkillData struct {
|
||||
SkillId int32 `csv:"SkillId"` // ID
|
||||
ConfigJson string `csv:"ConfigJson,omitempty"` // 效果config
|
||||
CostType1 int32 `csv:"CostType1,omitempty"` // 消耗的元素骰子类型1
|
||||
CostValue1 int32 `csv:"CostValue1,omitempty"` // 消耗的元素骰子数量1
|
||||
CostType2 int32 `csv:"CostType2,omitempty"` // 消耗的元素骰子类型2
|
||||
CostValue2 int32 `csv:"CostValue2,omitempty"` // 消耗的元素骰子数量2
|
||||
|
||||
CostMap map[uint32]uint32 // 技能骰子消耗列表
|
||||
SkillDamage uint32 // 技能伤害
|
||||
}
|
||||
|
||||
type ConfigSkillEffect struct {
|
||||
DeclaredValueMap map[string]*ConfigSkillEffectValue `json:"declaredValueMap"`
|
||||
}
|
||||
|
||||
type ConfigSkillEffectValue struct {
|
||||
Type string `json:"type"`
|
||||
Value any `json:"value"`
|
||||
}
|
||||
|
||||
func (g *GameDataConfig) loadGCGSkillData() {
|
||||
g.GCGSkillDataMap = make(map[int32]*GCGSkillData)
|
||||
data := g.readCsvFileData("GCGSkillData.csv")
|
||||
var gcgSkillDataList []*GCGSkillData
|
||||
err := csvutil.Unmarshal(data, &gcgSkillDataList)
|
||||
if err != nil {
|
||||
info := fmt.Sprintf("parse file error: %v", err)
|
||||
panic(info)
|
||||
}
|
||||
for _, gcgSkillData := range gcgSkillDataList {
|
||||
// 技能消耗整合进CostMap
|
||||
gcgSkillData.CostMap = make(map[uint32]uint32, 2)
|
||||
gcgSkillData.CostMap[uint32(gcgSkillData.CostType1)] = uint32(gcgSkillData.CostValue1)
|
||||
gcgSkillData.CostMap[uint32(gcgSkillData.CostType2)] = uint32(gcgSkillData.CostValue2)
|
||||
for costType, costValue := range gcgSkillData.CostMap {
|
||||
// 两个值都不能为0
|
||||
if costType == 0 || costValue == 0 {
|
||||
delete(gcgSkillData.CostMap, costType)
|
||||
}
|
||||
}
|
||||
// 技能效果Config
|
||||
fileData, err := os.ReadFile(g.jsonPrefix + "gcg_card_skill/" + gcgSkillData.ConfigJson + ".json")
|
||||
if err != nil {
|
||||
info := fmt.Sprintf("open file error: %v, SkillId: %v", err, gcgSkillData.SkillId)
|
||||
panic(info)
|
||||
}
|
||||
configSkillEffect := new(ConfigSkillEffect)
|
||||
err = hjson.Unmarshal(fileData, configSkillEffect)
|
||||
if err != nil {
|
||||
info := fmt.Sprintf("parse file error: %v, SkillId: %v", err, gcgSkillData.SkillId)
|
||||
panic(info)
|
||||
}
|
||||
// 技能伤害
|
||||
for key, value := range configSkillEffect.DeclaredValueMap {
|
||||
if key != "__KEY__DAMAGE" {
|
||||
continue
|
||||
}
|
||||
if value.Type == "Damage" {
|
||||
gcgSkillData.SkillDamage = uint32(value.Value.(float64))
|
||||
}
|
||||
}
|
||||
// list -> map
|
||||
g.GCGSkillDataMap[gcgSkillData.SkillId] = gcgSkillData
|
||||
}
|
||||
logger.Info("GCGSkillData count: %v", len(g.GCGSkillDataMap))
|
||||
}
|
||||
Reference in New Issue
Block a user