角色突破功能

This commit is contained in:
UnKownOwO
2023-02-03 22:02:38 +08:00
parent 34b87fadfc
commit 849fcdf93d
12 changed files with 436 additions and 155 deletions

View File

@@ -25,6 +25,7 @@ type AvatarData struct {
InitialWeapon int32 `csv:"InitialWeapon,omitempty"` // 初始武器
WeaponType int32 `csv:"WeaponType,omitempty"` // 武器种类
SkillDepotId int32 `csv:"SkillDepotId,omitempty"` // 技能库ID
PromoteId int32 `csv:"PromoteId,omitempty"` // 角色突破ID
AbilityHashCodeList []int32
}

View File

@@ -10,13 +10,23 @@ import (
// 角色突破配置表
type AvatarPromoteData struct {
PromoteId int32 `csv:"PromoteId"` // 角色突破ID
PromoteLevel int32 `csv:"PromoteLevel,omitempty"` // 突破等级
LevelLimit int32 `csv:"LevelLimit,omitempty"` // 解锁等级上限
PromoteId int32 `csv:"PromoteId"` // 角色突破ID
PromoteLevel int32 `csv:"PromoteLevel,omitempty"` // 突破等级
CostCoin int32 `csv:"CostCoin,omitempty"` // 消耗金币
CostItemId1 int32 `csv:"CostItemId1,omitempty"` // [消耗物品]1ID
CostItemCount1 int32 `csv:"CostItemCount1,omitempty"` // [消耗物品]1数量
CostItemId2 int32 `csv:"CostItemId2,omitempty"` // [消耗物品]2ID
CostItemCount2 int32 `csv:"CostItemCount2,omitempty"` // [消耗物品]2数量
CostItemId3 int32 `csv:"CostItemId3,omitempty"` // [消耗物品]3ID
CostItemCount3 int32 `csv:"CostItemCount3,omitempty"` // [消耗物品]3数量
LevelLimit int32 `csv:"LevelLimit,omitempty"` // 解锁等级上限
MinPlayerLevel int32 `csv:"MinPlayerLevel,omitempty"` // 冒险等级要求
CostItemMap map[uint32]uint32 // 消耗物品列表
}
func (g *GameDataConfig) loadAvatarPromoteData() {
g.AvatarPromoteDataMap = make(map[int32]*AvatarPromoteData)
g.AvatarPromoteDataMap = make(map[int32]map[int32]*AvatarPromoteData)
data := g.readCsvFileData("AvatarPromoteData.csv")
var avatarPromoteDataList []*AvatarPromoteData
err := csvutil.Unmarshal(data, &avatarPromoteDataList)
@@ -26,7 +36,22 @@ func (g *GameDataConfig) loadAvatarPromoteData() {
}
for _, avatarPromoteData := range avatarPromoteDataList {
// list -> map
g.AvatarPromoteDataMap[avatarPromoteData.PromoteLevel] = avatarPromoteData
_, ok := g.AvatarPromoteDataMap[avatarPromoteData.PromoteId]
if !ok {
g.AvatarPromoteDataMap[avatarPromoteData.PromoteId] = make(map[int32]*AvatarPromoteData)
}
avatarPromoteData.CostItemMap = make(map[uint32]uint32, 3)
avatarPromoteData.CostItemMap[uint32(avatarPromoteData.CostItemId1)] = uint32(avatarPromoteData.CostItemCount1)
avatarPromoteData.CostItemMap[uint32(avatarPromoteData.CostItemId2)] = uint32(avatarPromoteData.CostItemCount2)
avatarPromoteData.CostItemMap[uint32(avatarPromoteData.CostItemId3)] = uint32(avatarPromoteData.CostItemCount3)
for itemId, count := range avatarPromoteData.CostItemMap {
// 两个值都不能为0
if itemId == 0 || count == 0 {
delete(avatarPromoteData.CostItemMap, itemId)
}
}
// 通过突破等级找到突破数据
g.AvatarPromoteDataMap[avatarPromoteData.PromoteId][avatarPromoteData.PromoteLevel] = avatarPromoteData
}
logger.Info("AvatarPromoteData count: %v", len(g.AvatarPromoteDataMap))
}

View File

@@ -24,24 +24,25 @@ type GameDataConfig struct {
jsonPrefix string
luaPrefix string
// 配置表数据
AvatarDataMap map[int32]*AvatarData // 角色
AvatarSkillDataMap map[int32]*AvatarSkillData // 角色技能
AvatarSkillDepotDataMap map[int32]*AvatarSkillDepotData // 角色技能库
DropGroupDataMap map[int32]*DropGroupData // 掉落组
GCGCharDataMap map[int32]*GCGCharData // 角色卡牌
GCGSkillDataMap map[int32]*GCGSkillData // 卡牌技能
SceneDataMap map[int32]*SceneData // 场景
ScenePointMap map[int32]*ScenePoint // 场景传送点
SceneTagDataMap map[int32]*SceneTagData // 场景地图图标
SceneMap map[int32]*Scene // 场景详情
WorldAreaDataMap map[int32]*WorldAreaData // 世界区域
GatherDataMap map[int32]*GatherData // 采集物
GatherDataPointTypeMap map[int32]*GatherData // 采集物场景节点索引
FetterDataMap map[int32]*FetterData // 角色资料解锁
FetterDataAvatarIdMap map[int32][]int32 // 角色资料解锁角色id索引
ItemDataMap map[int32]*ItemData // 统一道具
AvatarLevelDataMap map[int32]*AvatarLevelData // 角色等级
AvatarPromoteDataMap map[int32]*AvatarPromoteData // 角色突破
AvatarDataMap map[int32]*AvatarData // 角色
AvatarSkillDataMap map[int32]*AvatarSkillData // 角色技能
AvatarSkillDepotDataMap map[int32]*AvatarSkillDepotData // 角色技能库
DropGroupDataMap map[int32]*DropGroupData // 掉落组
GCGCharDataMap map[int32]*GCGCharData // 角色卡牌
GCGSkillDataMap map[int32]*GCGSkillData // 卡牌技能
SceneDataMap map[int32]*SceneData // 场景
ScenePointMap map[int32]*ScenePoint // 场景传送点
SceneTagDataMap map[int32]*SceneTagData // 场景地图图标
SceneMap map[int32]*Scene // 场景详情
WorldAreaDataMap map[int32]*WorldAreaData // 世界区域
GatherDataMap map[int32]*GatherData // 采集物
GatherDataPointTypeMap map[int32]*GatherData // 采集物场景节点索引
FetterDataMap map[int32]*FetterData // 角色资料解锁
FetterDataAvatarIdMap map[int32][]int32 // 角色资料解锁角色id索引
ItemDataMap map[int32]*ItemData // 统一道具
AvatarLevelDataMap map[int32]*AvatarLevelData // 角色等级
AvatarPromoteDataMap map[int32]map[int32]*AvatarPromoteData // 角色突破
PlayerLevelDataMap map[int32]*PlayerLevelData // 玩家等级
}
func InitGameDataConfig() {
@@ -117,6 +118,7 @@ func (g *GameDataConfig) load() {
g.loadItemData() // 统一道具
g.loadAvatarLevelData() // 角色等级
g.loadAvatarPromoteData() // 角色突破
g.loadPlayerLevelData() // 玩家等级
}
func (g *GameDataConfig) readCsvFileData(fileName string) []byte {

View File

@@ -0,0 +1,31 @@
package gdconf
import (
"fmt"
"hk4e/pkg/logger"
"github.com/jszwec/csvutil"
)
// 玩家等级配置表
type PlayerLevelData struct {
Level int32 `csv:"Level"` // 等级
Exp int32 `csv:"Exp,omitempty"` // 升到下一级所需经验
}
func (g *GameDataConfig) loadPlayerLevelData() {
g.PlayerLevelDataMap = make(map[int32]*PlayerLevelData)
data := g.readCsvFileData("PlayerLevelData.csv")
var playerLevelDataList []*PlayerLevelData
err := csvutil.Unmarshal(data, &playerLevelDataList)
if err != nil {
info := fmt.Sprintf("parse file error: %v", err)
panic(info)
}
for _, playerLevelData := range playerLevelDataList {
// list -> map
g.PlayerLevelDataMap[playerLevelData.Level] = playerLevelData
}
logger.Info("PlayerLevelData count: %v", len(g.PlayerLevelDataMap))
}

View File

@@ -56,6 +56,11 @@
"field_name": "SkillDepotId",
"field_type": "int32",
"origin_name": "技能库ID"
},
{
"field_name": "PromoteId",
"field_type": "int32",
"origin_name": "角色突破ID"
}
]
},
@@ -622,10 +627,75 @@
"field_type": "int32",
"origin_name": "突破等级"
},
{
"field_name": "CostCoin",
"field_type": "int32",
"origin_name": "消耗金币"
},
{
"field_name": "CostItemId1",
"field_type": "int32",
"origin_name": "[消耗物品]1ID"
},
{
"field_name": "CostItemCount1",
"field_type": "int32",
"origin_name": "[消耗物品]1数量"
},
{
"field_name": "CostItemId2",
"field_type": "int32",
"origin_name": "[消耗物品]2ID"
},
{
"field_name": "CostItemCount2",
"field_type": "int32",
"origin_name": "[消耗物品]2数量"
},
{
"field_name": "CostItemId3",
"field_type": "int32",
"origin_name": "[消耗物品]3ID"
},
{
"field_name": "CostItemCount3",
"field_type": "int32",
"origin_name": "[消耗物品]3数量"
},
{
"field_name": "CostItemId4",
"field_type": "int32",
"origin_name": "[消耗物品]4ID"
},
{
"field_name": "CostItemCount4",
"field_type": "int32",
"origin_name": "[消耗物品]4数量"
},
{
"field_name": "LevelLimit",
"field_type": "int32",
"origin_name": "解锁等级上限"
},
{
"field_name": "MinPlayerLevel",
"field_type": "int32",
"origin_name": "冒险等级要求"
}
]
},
{
"table_name": "PlayerLevelData",
"field_list": [
{
"field_name": "Level",
"field_type": "int32",
"origin_name": "等级"
},
{
"field_name": "Exp",
"field_type": "int32",
"origin_name": "升到下一级所需经验"
}
]
}