mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-04 14:22:26 +08:00
武器强化以及返还材料功能
This commit is contained in:
@@ -19,6 +19,8 @@ type AvatarPromoteData struct {
|
||||
CostItemCount2 int32 `csv:"CostItemCount2,omitempty"` // [消耗物品]2数量
|
||||
CostItemId3 int32 `csv:"CostItemId3,omitempty"` // [消耗物品]3ID
|
||||
CostItemCount3 int32 `csv:"CostItemCount3,omitempty"` // [消耗物品]3数量
|
||||
CostItemId4 int32 `csv:"CostItemId4,omitempty"` // [消耗物品]4ID
|
||||
CostItemCount4 int32 `csv:"CostItemCount4,omitempty"` // [消耗物品]4数量
|
||||
LevelLimit int32 `csv:"LevelLimit,omitempty"` // 解锁等级上限
|
||||
MinPlayerLevel int32 `csv:"MinPlayerLevel,omitempty"` // 冒险等级要求
|
||||
|
||||
@@ -40,10 +42,12 @@ func (g *GameDataConfig) loadAvatarPromoteData() {
|
||||
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)
|
||||
avatarPromoteData.CostItemMap = map[uint32]uint32{
|
||||
uint32(avatarPromoteData.CostItemId1): uint32(avatarPromoteData.CostItemCount1),
|
||||
uint32(avatarPromoteData.CostItemId2): uint32(avatarPromoteData.CostItemCount2),
|
||||
uint32(avatarPromoteData.CostItemId3): uint32(avatarPromoteData.CostItemCount3),
|
||||
uint32(avatarPromoteData.CostItemId4): uint32(avatarPromoteData.CostItemCount4),
|
||||
}
|
||||
for itemId, count := range avatarPromoteData.CostItemMap {
|
||||
// 两个值都不能为0
|
||||
if itemId == 0 || count == 0 {
|
||||
|
||||
@@ -43,6 +43,8 @@ type GameDataConfig struct {
|
||||
AvatarLevelDataMap map[int32]*AvatarLevelData // 角色等级
|
||||
AvatarPromoteDataMap map[int32]map[int32]*AvatarPromoteData // 角色突破
|
||||
PlayerLevelDataMap map[int32]*PlayerLevelData // 玩家等级
|
||||
WeaponLevelDataMap map[int32]*WeaponLevelData // 武器等级
|
||||
WeaponPromoteDataMap map[int32]map[int32]*WeaponPromoteData // 角色突破
|
||||
}
|
||||
|
||||
func InitGameDataConfig() {
|
||||
@@ -119,6 +121,8 @@ func (g *GameDataConfig) load() {
|
||||
g.loadAvatarLevelData() // 角色等级
|
||||
g.loadAvatarPromoteData() // 角色突破
|
||||
g.loadPlayerLevelData() // 玩家等级
|
||||
g.loadWeaponLevelData() // 武器等级
|
||||
g.loadWeaponPromoteData() // 武器突破
|
||||
}
|
||||
|
||||
func (g *GameDataConfig) readCsvFileData(fileName string) []byte {
|
||||
|
||||
@@ -2,10 +2,11 @@ package gdconf
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/hjson/hjson-go/v4"
|
||||
"hk4e/pkg/logger"
|
||||
"os"
|
||||
|
||||
"github.com/hjson/hjson-go/v4"
|
||||
|
||||
"github.com/jszwec/csvutil"
|
||||
)
|
||||
|
||||
@@ -44,9 +45,10 @@ func (g *GameDataConfig) loadGCGSkillData() {
|
||||
}
|
||||
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)
|
||||
gcgSkillData.CostMap = map[uint32]uint32{
|
||||
uint32(gcgSkillData.CostType1): uint32(gcgSkillData.CostValue1),
|
||||
uint32(gcgSkillData.CostType2): uint32(gcgSkillData.CostValue2),
|
||||
}
|
||||
for costType, costValue := range gcgSkillData.CostMap {
|
||||
// 两个值都不能为0
|
||||
if costType == 0 || costValue == 0 {
|
||||
|
||||
@@ -20,11 +20,13 @@ type ItemData struct {
|
||||
MaterialType int32 `csv:"MaterialType,omitempty"` // 材料类型
|
||||
Use1Param1 string `csv:"Use1Param1,omitempty"` // [使用]1参数1
|
||||
// 武器
|
||||
EquipType int32 `csv:"EquipType,omitempty"` // 武器种类
|
||||
EquipLevel int32 `csv:"EquipLevel,omitempty"` // 武器阶数
|
||||
SkillAffix1 int32 `csv:"SkillAffix1,omitempty"` // 初始技能词缀1
|
||||
SkillAffix2 int32 `csv:"SkillAffix2,omitempty"` // 初始技能词缀2
|
||||
SkillAffix []int32
|
||||
EquipType int32 `csv:"EquipType,omitempty"` // 武器种类
|
||||
EquipLevel int32 `csv:"EquipLevel,omitempty"` // 武器阶数
|
||||
SkillAffix1 int32 `csv:"SkillAffix1,omitempty"` // 初始技能词缀1
|
||||
SkillAffix2 int32 `csv:"SkillAffix2,omitempty"` // 初始技能词缀2
|
||||
PromoteId int32 `csv:"PromoteId,omitempty"` // 武器突破ID
|
||||
EquipBaseExp int32 `csv:"EquipBaseExp,omitempty"` // 武器初始经验
|
||||
SkillAffix []int32
|
||||
// 圣遗物
|
||||
ReliquaryType int32 `csv:"ReliquaryType,omitempty"` // 圣遗物类别
|
||||
}
|
||||
|
||||
@@ -521,6 +521,16 @@
|
||||
"field_name": "SkillAffix2",
|
||||
"field_type": "int32",
|
||||
"origin_name": "初始技能词缀2"
|
||||
},
|
||||
{
|
||||
"field_name": "PromoteId",
|
||||
"field_type": "int32",
|
||||
"origin_name": "武器突破ID"
|
||||
},
|
||||
{
|
||||
"field_name": "EquipBaseExp",
|
||||
"field_type": "int32",
|
||||
"origin_name": "武器初始经验"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -698,5 +708,100 @@
|
||||
"origin_name": "升到下一级所需经验"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"table_name": "WeaponLevelData",
|
||||
"field_list": [
|
||||
{
|
||||
"field_name": "Level",
|
||||
"field_type": "int32",
|
||||
"origin_name": "等级"
|
||||
},
|
||||
{
|
||||
"field_name": "ExpByStar1",
|
||||
"field_type": "int32",
|
||||
"origin_name": "武器升级经验1"
|
||||
},
|
||||
{
|
||||
"field_name": "ExpByStar2",
|
||||
"field_type": "int32",
|
||||
"origin_name": "武器升级经验2"
|
||||
},
|
||||
{
|
||||
"field_name": "ExpByStar3",
|
||||
"field_type": "int32",
|
||||
"origin_name": "武器升级经验3"
|
||||
},
|
||||
{
|
||||
"field_name": "ExpByStar4",
|
||||
"field_type": "int32",
|
||||
"origin_name": "武器升级经验4"
|
||||
},
|
||||
{
|
||||
"field_name": "ExpByStar5",
|
||||
"field_type": "int32",
|
||||
"origin_name": "武器升级经验5"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"table_name": "WeaponPromoteData",
|
||||
"field_list": [
|
||||
{
|
||||
"field_name": "PromoteId",
|
||||
"field_type": "int32",
|
||||
"origin_name": "武器突破ID"
|
||||
},
|
||||
{
|
||||
"field_name": "PromoteLevel",
|
||||
"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": "CostCoin",
|
||||
"field_type": "int32",
|
||||
"origin_name": "突破消耗金币"
|
||||
},
|
||||
{
|
||||
"field_name": "LevelLimit",
|
||||
"field_type": "int32",
|
||||
"origin_name": "突破后解锁等级上限"
|
||||
},
|
||||
{
|
||||
"field_name": "MinPlayerLevel",
|
||||
"field_type": "int32",
|
||||
"origin_name": "冒险等级要求"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
44
gdconf/weapon_level_data.go
Normal file
44
gdconf/weapon_level_data.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package gdconf
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hk4e/pkg/logger"
|
||||
|
||||
"github.com/jszwec/csvutil"
|
||||
)
|
||||
|
||||
// 武器等级配置表
|
||||
|
||||
type WeaponLevelData struct {
|
||||
Level int32 `csv:"Level"` // 等级
|
||||
ExpByStar1 int32 `csv:"ExpByStar1,omitempty"` // 武器升级经验1
|
||||
ExpByStar2 int32 `csv:"ExpByStar2,omitempty"` // 武器升级经验2
|
||||
ExpByStar3 int32 `csv:"ExpByStar3,omitempty"` // 武器升级经验3
|
||||
ExpByStar4 int32 `csv:"ExpByStar4,omitempty"` // 武器升级经验4
|
||||
ExpByStar5 int32 `csv:"ExpByStar5,omitempty"` // 武器升级经验5
|
||||
|
||||
ExpByStarMap map[uint32]uint32 // 星级对应武器升级经验
|
||||
}
|
||||
|
||||
func (g *GameDataConfig) loadWeaponLevelData() {
|
||||
g.WeaponLevelDataMap = make(map[int32]*WeaponLevelData)
|
||||
data := g.readCsvFileData("WeaponLevelData.csv")
|
||||
var weaponLevelDataList []*WeaponLevelData
|
||||
err := csvutil.Unmarshal(data, &weaponLevelDataList)
|
||||
if err != nil {
|
||||
info := fmt.Sprintf("parse file error: %v", err)
|
||||
panic(info)
|
||||
}
|
||||
for _, weaponLevelData := range weaponLevelDataList {
|
||||
// list -> map
|
||||
weaponLevelData.ExpByStarMap = map[uint32]uint32{
|
||||
1: uint32(weaponLevelData.ExpByStar1),
|
||||
2: uint32(weaponLevelData.ExpByStar2),
|
||||
3: uint32(weaponLevelData.ExpByStar3),
|
||||
4: uint32(weaponLevelData.ExpByStar4),
|
||||
5: uint32(weaponLevelData.ExpByStar5),
|
||||
}
|
||||
g.WeaponLevelDataMap[weaponLevelData.Level] = weaponLevelData
|
||||
}
|
||||
logger.Info("WeaponLevelData count: %v", len(g.WeaponLevelDataMap))
|
||||
}
|
||||
58
gdconf/weapon_promote_data.go
Normal file
58
gdconf/weapon_promote_data.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package gdconf
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hk4e/pkg/logger"
|
||||
|
||||
"github.com/jszwec/csvutil"
|
||||
)
|
||||
|
||||
// 武器突破配置表
|
||||
|
||||
type WeaponPromoteData struct {
|
||||
PromoteId int32 `csv:"PromoteId"` // 武器突破ID
|
||||
PromoteLevel int32 `csv:"PromoteLevel,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数量
|
||||
CostCoin int32 `csv:"CostCoin,omitempty"` // 突破消耗金币
|
||||
LevelLimit int32 `csv:"LevelLimit,omitempty"` // 突破后解锁等级上限
|
||||
MinPlayerLevel int32 `csv:"MinPlayerLevel,omitempty"` // 冒险等级要求
|
||||
|
||||
CostItemMap map[uint32]uint32 // 消耗物品列表
|
||||
}
|
||||
|
||||
func (g *GameDataConfig) loadWeaponPromoteData() {
|
||||
g.WeaponPromoteDataMap = make(map[int32]map[int32]*WeaponPromoteData)
|
||||
data := g.readCsvFileData("WeaponPromoteData.csv")
|
||||
var weaponPromoteDataList []*WeaponPromoteData
|
||||
err := csvutil.Unmarshal(data, &weaponPromoteDataList)
|
||||
if err != nil {
|
||||
info := fmt.Sprintf("parse file error: %v", err)
|
||||
panic(info)
|
||||
}
|
||||
for _, weaponPromoteData := range weaponPromoteDataList {
|
||||
// list -> map
|
||||
_, ok := g.WeaponPromoteDataMap[weaponPromoteData.PromoteId]
|
||||
if !ok {
|
||||
g.WeaponPromoteDataMap[weaponPromoteData.PromoteId] = make(map[int32]*WeaponPromoteData)
|
||||
}
|
||||
weaponPromoteData.CostItemMap = map[uint32]uint32{
|
||||
uint32(weaponPromoteData.CostItemId1): uint32(weaponPromoteData.CostItemCount1),
|
||||
uint32(weaponPromoteData.CostItemId2): uint32(weaponPromoteData.CostItemCount2),
|
||||
uint32(weaponPromoteData.CostItemId3): uint32(weaponPromoteData.CostItemCount3),
|
||||
}
|
||||
for itemId, count := range weaponPromoteData.CostItemMap {
|
||||
// 两个值都不能为0
|
||||
if itemId == 0 || count == 0 {
|
||||
delete(weaponPromoteData.CostItemMap, itemId)
|
||||
}
|
||||
}
|
||||
// 通过突破等级找到突破数据
|
||||
g.WeaponPromoteDataMap[weaponPromoteData.PromoteId][weaponPromoteData.PromoteLevel] = weaponPromoteData
|
||||
}
|
||||
logger.Info("WeaponPromoteData count: %v", len(g.WeaponPromoteDataMap))
|
||||
}
|
||||
Reference in New Issue
Block a user