角色突破奖励获取功能

This commit is contained in:
UnKownOwO
2023-02-05 19:00:27 +08:00
parent 482a1f7af4
commit 98c35380b1
11 changed files with 306 additions and 37 deletions

View File

@@ -2,10 +2,11 @@ package gdconf
import (
"fmt"
"os"
"hk4e/pkg/endec"
"hk4e/pkg/logger"
"os"
"strconv"
"strings"
"github.com/hjson/hjson-go/v4"
"github.com/jszwec/csvutil"
@@ -14,20 +15,23 @@ import (
// 角色配置表
type AvatarData struct {
AvatarId int32 `csv:"AvatarId"` // ID
HpBase float64 `csv:"HpBase,omitempty"` // 基础生命值
AttackBase float64 `csv:"AttackBase,omitempty"` // 基础攻击力
DefenseBase float64 `csv:"DefenseBase,omitempty"` // 基础防御力
Critical float64 `csv:"Critical,omitempty"` // 暴击率
CriticalHurt float64 `csv:"CriticalHurt,omitempty"` // 暴击伤害
QualityType int32 `csv:"QualityType,omitempty"` // 角色品质
ConfigJson string `csv:"ConfigJson,omitempty"` // 战斗config
InitialWeapon int32 `csv:"InitialWeapon,omitempty"` // 初始武器
WeaponType int32 `csv:"WeaponType,omitempty"` // 武器种类
SkillDepotId int32 `csv:"SkillDepotId,omitempty"` // 技能库ID
PromoteId int32 `csv:"PromoteId,omitempty"` // 角色突破ID
AvatarId int32 `csv:"AvatarId"` // ID
HpBase float64 `csv:"HpBase,omitempty"` // 基础生命值
AttackBase float64 `csv:"AttackBase,omitempty"` // 基础攻击力
DefenseBase float64 `csv:"DefenseBase,omitempty"` // 基础防御力
Critical float64 `csv:"Critical,omitempty"` // 暴击率
CriticalHurt float64 `csv:"CriticalHurt,omitempty"` // 暴击伤害
QualityType int32 `csv:"QualityType,omitempty"` // 角色品质
ConfigJson string `csv:"ConfigJson,omitempty"` // 战斗config
InitialWeapon int32 `csv:"InitialWeapon,omitempty"` // 初始武器
WeaponType int32 `csv:"WeaponType,omitempty"` // 武器种类
SkillDepotId int32 `csv:"SkillDepotId,omitempty"` // 技能库ID
PromoteId int32 `csv:"PromoteId,omitempty"` // 角色突破ID
PromoteRewardLevelStr string `csv:"PromoteRewardLevelStr,omitempty"` // 角色突破奖励获取等阶
PromoteRewardStr string `csv:"PromoteRewardStr,omitempty"` // 角色突破奖励
AbilityHashCodeList []int32
PromoteRewardMap map[uint32]uint32
}
type ConfigAvatar struct {
@@ -68,6 +72,25 @@ func (g *GameDataConfig) loadAvatarData() {
abilityHashCode := endec.Hk4eAbilityHashCode(configAvatarAbility.AbilityName)
avatarData.AbilityHashCodeList = append(avatarData.AbilityHashCodeList, abilityHashCode)
}
// 突破奖励转换列表
if avatarData.PromoteRewardLevelStr != "" && avatarData.PromoteRewardStr != "" {
tempRewardLevelList := strings.Split(strings.ReplaceAll(avatarData.PromoteRewardLevelStr, " ", ""), "#")
tempRewardList := strings.Split(strings.ReplaceAll(avatarData.PromoteRewardStr, " ", ""), "#")
avatarData.PromoteRewardMap = make(map[uint32]uint32, len(tempRewardList))
for i, s := range tempRewardList {
promoteLevel, err := strconv.Atoi(tempRewardLevelList[i])
if err != nil {
logger.Error("level to i err, %v", err)
return
}
rewardId, err := strconv.Atoi(s)
if err != nil {
logger.Error("reward id to i err, %v", err)
return
}
avatarData.PromoteRewardMap[uint32(promoteLevel)] = uint32(rewardId)
}
}
// list -> map
g.AvatarDataMap[avatarData.AvatarId] = avatarData
}

View File

@@ -45,6 +45,7 @@ type GameDataConfig struct {
PlayerLevelDataMap map[int32]*PlayerLevelData // 玩家等级
WeaponLevelDataMap map[int32]*WeaponLevelData // 武器等级
WeaponPromoteDataMap map[int32]map[int32]*WeaponPromoteData // 角色突破
RewardDataMap map[int32]*RewardData // 奖励
}
func InitGameDataConfig() {
@@ -123,6 +124,7 @@ func (g *GameDataConfig) load() {
g.loadPlayerLevelData() // 玩家等级
g.loadWeaponLevelData() // 武器等级
g.loadWeaponPromoteData() // 武器突破
g.loadRewardData() // 奖励
}
func (g *GameDataConfig) readCsvFileData(fileName string) []byte {

68
gdconf/reward_data.go Normal file
View File

@@ -0,0 +1,68 @@
package gdconf
import (
"fmt"
"hk4e/pkg/logger"
"github.com/jszwec/csvutil"
)
// 奖励配置表
type RewardData struct {
RewardID int32 `csv:"RewardID"` // 奖励ID
RewardItem1ID int32 `csv:"RewardItem1ID,omitempty"` // Reward道具1ID
RewardItem1Count int32 `csv:"RewardItem1Count,omitempty"` // Reward道具1数量
RewardItem2ID int32 `csv:"RewardItem2ID,omitempty"` // Reward道具2ID
RewardItem2Count int32 `csv:"RewardItem2Count,omitempty"` // Reward道具2数量
RewardItem3ID int32 `csv:"RewardItem3ID,omitempty"` // Reward道具3ID
RewardItem3Count int32 `csv:"RewardItem3Count,omitempty"` // Reward道具3数量
RewardItem4ID int32 `csv:"RewardItem4ID,omitempty"` // Reward道具4ID
RewardItem4Count int32 `csv:"RewardItem4Count,omitempty"` // Reward道具4数量
RewardItem5ID int32 `csv:"RewardItem5ID,omitempty"` // Reward道具5ID
RewardItem5Count int32 `csv:"RewardItem5Count,omitempty"` // Reward道具5数量
RewardItem6ID int32 `csv:"RewardItem6ID,omitempty"` // Reward道具6ID
RewardItem6Count int32 `csv:"RewardItem6Count,omitempty"` // Reward道具6数量
RewardItem7ID int32 `csv:"RewardItem7ID,omitempty"` // Reward道具7ID
RewardItem7Count int32 `csv:"RewardItem7Count,omitempty"` // Reward道具7数量
RewardItem8ID int32 `csv:"RewardItem8ID,omitempty"` // Reward道具8ID
RewardItem8Count int32 `csv:"RewardItem8Count,omitempty"` // Reward道具8数量
RewardItem9ID int32 `csv:"RewardItem9ID,omitempty"` // Reward道具9ID
RewardItem9Count int32 `csv:"RewardItem9Count,omitempty"` // Reward道具9数量
RewardItemMap map[uint32]uint32
}
func (g *GameDataConfig) loadRewardData() {
g.RewardDataMap = make(map[int32]*RewardData)
data := g.readCsvFileData("RewardData.csv")
var rewardDataList []*RewardData
err := csvutil.Unmarshal(data, &rewardDataList)
if err != nil {
info := fmt.Sprintf("parse file error: %v", err)
panic(info)
}
for _, rewardData := range rewardDataList {
// list -> map
// 奖励物品整合
rewardData.RewardItemMap = map[uint32]uint32{
uint32(rewardData.RewardItem1ID): uint32(rewardData.RewardItem1Count),
uint32(rewardData.RewardItem2ID): uint32(rewardData.RewardItem2Count),
uint32(rewardData.RewardItem3ID): uint32(rewardData.RewardItem3Count),
uint32(rewardData.RewardItem4ID): uint32(rewardData.RewardItem4Count),
uint32(rewardData.RewardItem5ID): uint32(rewardData.RewardItem5Count),
uint32(rewardData.RewardItem6ID): uint32(rewardData.RewardItem6Count),
uint32(rewardData.RewardItem7ID): uint32(rewardData.RewardItem7Count),
uint32(rewardData.RewardItem8ID): uint32(rewardData.RewardItem8Count),
uint32(rewardData.RewardItem9ID): uint32(rewardData.RewardItem9Count),
}
for itemId, count := range rewardData.RewardItemMap {
// 两个值都不能为0
if itemId == 0 || count == 0 {
delete(rewardData.RewardItemMap, itemId)
}
}
g.RewardDataMap[rewardData.RewardID] = rewardData
}
logger.Info("RewardData count: %v", len(g.RewardDataMap))
}

View File

@@ -61,6 +61,16 @@
"field_name": "PromoteId",
"field_type": "int32",
"origin_name": "角色突破ID"
},
{
"field_name": "PromoteRewardLevelStr",
"field_type": "string",
"origin_name": "角色突破奖励获取等阶"
},
{
"field_name": "PromoteRewardStr",
"field_type": "string",
"origin_name": "角色突破奖励"
}
]
},
@@ -813,5 +823,105 @@
"origin_name": "冒险等级要求"
}
]
},
{
"table_name": "RewardData",
"field_list": [
{
"field_name": "RewardID",
"field_type": "int32",
"origin_name": "RewardID"
},
{
"field_name": "RewardItem1ID",
"field_type": "int32",
"origin_name": "Reward道具1ID"
},
{
"field_name": "RewardItem1Count",
"field_type": "int32",
"origin_name": "Reward道具1数量"
},
{
"field_name": "RewardItem2ID",
"field_type": "int32",
"origin_name": "Reward道具2ID"
},
{
"field_name": "RewardItem2Count",
"field_type": "int32",
"origin_name": "Reward道具2数量"
},
{
"field_name": "RewardItem3ID",
"field_type": "int32",
"origin_name": "Reward道具3ID"
},
{
"field_name": "RewardItem3Count",
"field_type": "int32",
"origin_name": "Reward道具3数量"
},
{
"field_name": "RewardItem4ID",
"field_type": "int32",
"origin_name": "Reward道具4ID"
},
{
"field_name": "RewardItem4Count",
"field_type": "int32",
"origin_name": "Reward道具4数量"
},
{
"field_name": "RewardItem5ID",
"field_type": "int32",
"origin_name": "Reward道具5ID"
},
{
"field_name": "RewardItem5Count",
"field_type": "int32",
"origin_name": "Reward道具5数量"
},
{
"field_name": "RewardItem6ID",
"field_type": "int32",
"origin_name": "Reward道具6ID"
},
{
"field_name": "RewardItem6Count",
"field_type": "int32",
"origin_name": "Reward道具6数量"
},
{
"field_name": "RewardItem7ID",
"field_type": "int32",
"origin_name": "Reward道具7ID"
},
{
"field_name": "RewardItem7Count",
"field_type": "int32",
"origin_name": "Reward道具7数量"
},
{
"field_name": "RewardItem8ID",
"field_type": "int32",
"origin_name": "Reward道具8ID"
},
{
"field_name": "RewardItem8Count",
"field_type": "int32",
"origin_name": "Reward道具8数量"
},
{
"field_name": "RewardItem9ID",
"field_type": "int32",
"origin_name": "Reward道具8ID"
},
{
"field_name": "RewardItem9Count",
"field_type": "int32",
"origin_name": "Reward道具8数量"
}
]
}
]