diff --git a/scripts/charstat/generate.go b/scripts/charstat/generate.go index 2bda057a..6b5b13e5 100644 --- a/scripts/charstat/generate.go +++ b/scripts/charstat/generate.go @@ -41,44 +41,78 @@ func main() { return } - var avatars map[string]AvatarInfo - var skills map[string]SkillTreeConfig - var promotions map[string]PromotionConfig + var avatars []AvatarInfo + var skills map[string]SkillTreeConfig = make(map[string]SkillTreeConfig) + var skilllist []TraceConfig + var promotions map[string]PromotionConfig = make(map[string]PromotionConfig) + var promotionlist []PromotionDataConfig var textMap map[string]string - var avatarSkills map[string]SkillConfig + var avatarSkills map[string]SkillConfig = make(map[string]SkillConfig) + var avatarSkillList []AvatarSkillConfig err := OpenConfig(&avatars, dmPath, "ExcelOutput", "AvatarConfig.json") if err != nil { fmt.Println(err) return } - err = OpenConfig(&skills, dmPath, "ExcelOutput", "AvatarSkillTreeConfig.json") + err = OpenConfig(&skilllist, dmPath, "ExcelOutput", "AvatarSkillTreeConfig.json") if err != nil { fmt.Println(err) return } - err = OpenConfig(&promotions, dmPath, "ExcelOutput", "AvatarPromotionConfig.json") + // take every trace in trace list and convert it into old format kyle used + for _, skill := range skilllist { + strid := strconv.Itoa(skill.PointID) + val, ok := skills[strid] + if ok { + val[strconv.Itoa(skill.Level)] = skill + } else { + skills[strid] = make(SkillTreeConfig) + skills[strid][strconv.Itoa(skill.Level)] = skill + } + } + + err = OpenConfig(&promotionlist, dmPath, "ExcelOutput", "AvatarPromotionConfig.json") if err != nil { fmt.Println(err) return } + for _, promotion := range promotionlist { + strid := strconv.Itoa(promotion.AvatarID) + val, ok := promotions[strid] + if ok { + val[strconv.Itoa(promotion.Promotion)] = promotion + } else { + promotions[strid] = make(PromotionConfig) + promotions[strid][strconv.Itoa(promotion.Promotion)] = promotion + } + } + err = OpenConfig(&textMap, dmPath, "TextMap", "TextMapEN.json") if err != nil { fmt.Println(err) return } - err = OpenConfig(&avatarSkills, dmPath, "ExcelOutput", "AvatarSkillConfig.json") + err = OpenConfig(&avatarSkillList, dmPath, "ExcelOutput", "AvatarSkillConfig.json") if err != nil { fmt.Println(err) return } - for key, value := range avatars { - id, err := strconv.Atoi(key) - if err != nil { - fmt.Println(err) - return + for _, skill := range avatarSkillList { + strid := strconv.Itoa(skill.SkillID) + val, ok := avatarSkills[strid] + if ok { + val[strconv.Itoa(skill.Level)] = skill + } else { + avatarSkills[strid] = make(SkillConfig) + avatarSkills[strid][strconv.Itoa(skill.Level)] = skill } + } + + for _, value := range avatars { + id := value.AvatarID + charName := GetCharacterName(textMap, value.AvatarName.Hash) switch charName { case "": @@ -86,16 +120,14 @@ func main() { case "{NICKNAME}": charName = "Trailblazer" + value.DamageType } - var avatarConfig AvatarConfig err = OpenConfig(&avatarConfig, dmPath, value.JSONPath) if err != nil { fmt.Println(err) continue } - - info := FindSkillInfo(avatarSkills, avatarConfig, key) - ProcessCharacter(charName, value, FindCharSkills(skills, id), info, promotions[key]) + info := FindSkillInfo(avatarSkills, avatarConfig, strconv.Itoa(value.AvatarID)) + ProcessCharacter(charName, value, FindCharSkills(skills, id), info, promotions[strconv.Itoa(value.AvatarID)]) } } diff --git a/scripts/charstat/types.go b/scripts/charstat/types.go index 0dd35c2e..d98e6bee 100644 --- a/scripts/charstat/types.go +++ b/scripts/charstat/types.go @@ -38,6 +38,7 @@ type TargetInfo struct { //nolint:tagliatelle // need to match datamine type AvatarInfo struct { + AvatarID int `json:"AvatarID"` AvatarName HashInfo `json:"AvatarName"` Rarity string `json:"Rarity"` UIAvatarModelPath string `json:"UIAvatarModelPath"` @@ -65,6 +66,7 @@ type AvatarSkillMetadata struct { //nolint:tagliatelle // need to match datamine type TraceConfig struct { + Level int `json:"Level"` PointID int `json:"PointID"` PointType SkillConfigType `json:"PointType"` AvatarID int `json:"AvatarID"` @@ -76,6 +78,7 @@ type TraceConfig struct { //nolint:tagliatelle // need to match datamine type PromotionDataConfig struct { + Promotion int `json:"Promotion"` AvatarID int `json:"AvatarID"` MaxLevel int `json:"MaxLevel"` AttackBase ValueInfo `json:"AttackBase"` @@ -93,6 +96,8 @@ type PromotionDataConfig struct { //nolint:tagliatelle // need to match datamine type AvatarSkillConfig struct { + Level int `json:"Level"` + SkillID int `json:"SkillID"` BPNeed ValueInfo `json:"BPNeed"` BPAdd ValueInfo `json:"BPAdd"` SkillEffect string `json:"SkillEffect"`