diff --git a/gdconf/avatar_data.go b/gdconf/avatar_data.go index 89d02e02..bc40b974 100644 --- a/gdconf/avatar_data.go +++ b/gdconf/avatar_data.go @@ -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 } diff --git a/gdconf/game_data_config.go b/gdconf/game_data_config.go index c9427707..dd54c1c7 100644 --- a/gdconf/game_data_config.go +++ b/gdconf/game_data_config.go @@ -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 { diff --git a/gdconf/reward_data.go b/gdconf/reward_data.go new file mode 100644 index 00000000..7a3272c4 --- /dev/null +++ b/gdconf/reward_data.go @@ -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)) +} diff --git a/gdconf/table_struct_mapping.json b/gdconf/table_struct_mapping.json index 8d586fb5..30438270 100644 --- a/gdconf/table_struct_mapping.json +++ b/gdconf/table_struct_mapping.json @@ -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数量" + } + ] } ] diff --git a/gs/game/player_avatar.go b/gs/game/player_avatar.go index 804faca5..2dfba1db 100644 --- a/gs/game/player_avatar.go +++ b/gs/game/player_avatar.go @@ -68,6 +68,57 @@ func (g *GameManager) AddUserAvatar(userId uint32, avatarId uint32) { g.SendMsg(cmd.AvatarAddNotify, userId, player.ClientSeq, avatarAddNotify) } +// AvatarPromoteGetRewardReq 角色突破获取奖励请求 +func (g *GameManager) AvatarPromoteGetRewardReq(player *model.Player, payloadMsg pb.Message) { + logger.Debug("user promote get reward, uid: %v", player.PlayerID) + req := payloadMsg.(*proto.AvatarPromoteGetRewardReq) + // 是否拥有角色 + avatar, ok := player.AvatarMap[player.GetAvatarIdByGuid(req.AvatarGuid)] + if !ok { + logger.Error("avatar error, avatarGuid: %v", req.AvatarGuid) + g.CommonRetError(cmd.AvatarPromoteGetRewardRsp, player, &proto.AvatarPromoteGetRewardRsp{}, proto.Retcode_RET_CAN_NOT_FIND_AVATAR) + return + } + // 获取角色配置表 + avatarDataConfig, ok := gdconf.CONF.AvatarDataMap[int32(avatar.AvatarId)] + if !ok { + logger.Error("avatar config error, avatarId: %v", avatar.AvatarId) + g.CommonRetError(cmd.AvatarPromoteGetRewardRsp, player, &proto.AvatarPromoteGetRewardRsp{}) + return + } + // 角色是否获取过该突破等级的奖励 + if avatar.PromoteRewardMap[req.PromoteLevel] { + logger.Error("avatar config error, avatarId: %v", avatar.AvatarId) + g.CommonRetError(cmd.AvatarPromoteGetRewardRsp, player, &proto.AvatarPromoteGetRewardRsp{}, proto.Retcode_RET_REWARD_HAS_TAKEN) + return + } + // 获取奖励配置表 + rewardConfig, ok := gdconf.CONF.RewardDataMap[int32(avatarDataConfig.PromoteRewardMap[req.PromoteLevel])] + if !ok { + logger.Error("reward config error, rewardId: %v", avatarDataConfig.PromoteRewardMap[req.PromoteLevel]) + g.CommonRetError(cmd.AvatarPromoteGetRewardRsp, player, &proto.AvatarPromoteGetRewardRsp{}) + return + } + // 设置该奖励为已被获取状态 + avatar.PromoteRewardMap[req.PromoteLevel] = true + // 给予突破奖励 + rewardItemList := make([]*UserItem, 0, len(rewardConfig.RewardItemMap)) + for itemId, count := range rewardConfig.RewardItemMap { + rewardItemList = append(rewardItemList, &UserItem{ + ItemId: itemId, + ChangeCount: count, + }) + } + g.AddUserItem(player.PlayerID, rewardItemList, false, 0) + + avatarPromoteGetRewardRsp := &proto.AvatarPromoteGetRewardRsp{ + RewardId: uint32(rewardConfig.RewardID), + AvatarGuid: req.AvatarGuid, + PromoteLevel: req.PromoteLevel, + } + g.SendMsg(cmd.AvatarPromoteGetRewardRsp, player.PlayerID, player.ClientSeq, avatarPromoteGetRewardRsp) +} + // AvatarPromoteReq 角色突破请求 func (g *GameManager) AvatarPromoteReq(player *model.Player, payloadMsg pb.Message) { logger.Debug("user promote, uid: %v", player.PlayerID) @@ -151,7 +202,7 @@ func (g *GameManager) AvatarPromoteReq(player *model.Player, payloadMsg pb.Messa // 角色突破等级+1 avatar.Promote++ // 角色更新面板 - player.InitAvatarFightProp(avatar) + g.UpdateUserAvatarFightProp(player.PlayerID, avatar.AvatarId) // 角色属性表更新通知 g.SendMsg(cmd.AvatarPropNotify, player.PlayerID, player.ClientSeq, g.PacketAvatarPropNotify(avatar)) @@ -303,7 +354,7 @@ func (g *GameManager) UpgradePlayerAvatar(player *model.Player, avatar *model.Av avatar.Level++ } // 角色更新面板 - player.InitAvatarFightProp(avatar) + g.UpdateUserAvatarFightProp(player.PlayerID, avatar.AvatarId) // 角色属性表更新通知 g.SendMsg(cmd.AvatarPropNotify, player.PlayerID, player.ClientSeq, g.PacketAvatarPropNotify(avatar)) } @@ -534,6 +585,9 @@ func (g *GameManager) UpdateUserAvatarFightProp(userId uint32, avatarId uint32) logger.Error("avatar is nil, avatarId: %v", avatar) return } + // 角色初始化面板 + player.InitAvatarFightProp(avatar) + avatarFightPropNotify := &proto.AvatarFightPropNotify{ AvatarGuid: avatar.Guid, FightPropMap: avatar.FightPropMap, @@ -578,8 +632,8 @@ func (g *GameManager) PacketAvatarInfo(avatar *model.Avatar) *proto.AvatarInfo { }, }, LifeState: uint32(avatar.LifeState), - EquipGuidList: object.ConvMapToList(avatar.EquipGuidList), - FightPropMap: nil, + EquipGuidList: object.ConvMapToList(avatar.EquipGuidMap), + FightPropMap: avatar.FightPropMap, SkillDepotId: avatar.SkillDepotId, FetterInfo: &proto.AvatarFetterInfo{ ExpLevel: uint32(avatar.FetterLevel), @@ -587,13 +641,13 @@ func (g *GameManager) PacketAvatarInfo(avatar *model.Avatar) *proto.AvatarInfo { FetterList: nil, RewardedFetterLevelList: []uint32{10}, }, - SkillLevelMap: nil, - AvatarType: 1, - WearingFlycloakId: avatar.FlyCloak, - CostumeId: avatar.Costume, - BornTime: uint32(avatar.BornTime), + SkillLevelMap: avatar.SkillLevelMap, + AvatarType: 1, + WearingFlycloakId: avatar.FlyCloak, + CostumeId: avatar.Costume, + BornTime: uint32(avatar.BornTime), + PendingPromoteRewardList: make([]uint32, 0, len(avatar.PromoteRewardMap)), } - pbAvatar.FightPropMap = avatar.FightPropMap for _, v := range avatar.FetterList { pbAvatar.FetterInfo.FetterList = append(pbAvatar.FetterInfo.FetterList, &proto.FetterData{ FetterId: v, @@ -607,9 +661,11 @@ func (g *GameManager) PacketAvatarInfo(avatar *model.Avatar) *proto.AvatarInfo { FetterState: uint32(constant.FetterStateConst.FINISH), }) } - pbAvatar.SkillLevelMap = make(map[uint32]uint32) - for k, v := range avatar.SkillLevelMap { - pbAvatar.SkillLevelMap[k] = v + // 突破等级奖励 + for promoteLevel, isTaken := range avatar.PromoteRewardMap { + if !isTaken { + pbAvatar.PendingPromoteRewardList = append(pbAvatar.PendingPromoteRewardList, promoteLevel) + } } return pbAvatar } diff --git a/gs/game/player_weapon.go b/gs/game/player_weapon.go index a20a11d8..945cb431 100644 --- a/gs/game/player_weapon.go +++ b/gs/game/player_weapon.go @@ -233,7 +233,7 @@ func (g *GameManager) WeaponAwakenReq(player *model.Player, payloadMsg pb.Messag if ok { weaponAwakenRsp.AvatarGuid = avatar.Guid // 角色更新面板 - player.InitAvatarFightProp(avatar) + g.UpdateUserAvatarFightProp(player.PlayerID, avatar.AvatarId) } // 武器精炼后的信息 @@ -336,7 +336,7 @@ func (g *GameManager) WeaponPromoteReq(player *model.Player, payloadMsg pb.Messa // 武器可能没被任何角色装备 仅在被装备时更新面板 if ok { // 角色更新面板 - player.InitAvatarFightProp(avatar) + g.UpdateUserAvatarFightProp(player.PlayerID, avatar.AvatarId) } weaponPromoteRsp := &proto.WeaponPromoteRsp{ @@ -632,7 +632,7 @@ func (g *GameManager) WeaponUpgradeReq(player *model.Player, payloadMsg pb.Messa // 武器可能没被任何角色装备 仅在被装备时更新面板 if ok { // 角色更新面板 - player.InitAvatarFightProp(avatar) + g.UpdateUserAvatarFightProp(player.PlayerID, avatar.AvatarId) } // 将给予的材料列表 diff --git a/gs/game/route_manager.go b/gs/game/route_manager.go index 0c76d41d..136f82b4 100644 --- a/gs/game/route_manager.go +++ b/gs/game/route_manager.go @@ -135,6 +135,7 @@ func (r *RouteManager) initRoute() { r.registerRouter(cmd.WeaponUpgradeReq, GAME_MANAGER.WeaponUpgradeReq) r.registerRouter(cmd.WeaponPromoteReq, GAME_MANAGER.WeaponPromoteReq) r.registerRouter(cmd.WeaponAwakenReq, GAME_MANAGER.WeaponAwakenReq) + r.registerRouter(cmd.AvatarPromoteGetRewardReq, GAME_MANAGER.AvatarPromoteGetRewardReq) } func (r *RouteManager) RouteHandle(netMsg *mq.NetMsg) { diff --git a/gs/model/avatar.go b/gs/model/avatar.go index fc719230..7c2f5daf 100644 --- a/gs/model/avatar.go +++ b/gs/model/avatar.go @@ -26,8 +26,9 @@ type Avatar struct { BornTime int64 `bson:"bornTime"` // 获得时间 FetterLevel uint8 `bson:"fetterLevel"` // 好感度等级 FetterExp uint32 `bson:"fetterExp"` // 好感度经验 + PromoteRewardMap map[uint32]bool `bson:"promoteRewardMap"` // 突破奖励 map[突破等级]是否已被领取 Guid uint64 `bson:"-"` - EquipGuidList map[uint64]uint64 `bson:"-"` + EquipGuidMap map[uint64]uint64 `bson:"-"` EquipWeapon *Weapon `bson:"-"` EquipReliquaryList []*Reliquary `bson:"-"` FightPropMap map[uint32]float32 `bson:"-"` @@ -46,7 +47,7 @@ func (p *Player) InitAvatar(avatar *Avatar) { // guid avatar.Guid = p.GetNextGameObjectGuid() p.GameObjectGuidMap[avatar.Guid] = GameObject(avatar) - avatar.EquipGuidList = make(map[uint64]uint64) + avatar.EquipGuidMap = make(map[uint64]uint64) p.AvatarMap[avatar.AvatarId] = avatar return } @@ -126,11 +127,12 @@ func (p *Player) AddAvatar(avatarId uint32) { FetterLevel: 1, FetterExp: 0, Guid: 0, - EquipGuidList: nil, + EquipGuidMap: nil, EquipWeapon: nil, EquipReliquaryList: nil, FightPropMap: nil, ExtraAbilityEmbryos: make(map[string]bool), + PromoteRewardMap: make(map[uint32]bool, len(avatarDataConfig.PromoteRewardMap)), } // 元素爆发1级 @@ -141,6 +143,11 @@ func (p *Player) AddAvatar(avatarId uint32) { } avatar.CurrHP = avatarDataConfig.GetBaseHpByLevel(avatar.Level) + // 角色突破奖励领取状态 + for promoteLevel := range avatarDataConfig.PromoteRewardMap { + avatar.PromoteRewardMap[promoteLevel] = false + } + p.InitAvatar(avatar) p.AvatarMap[avatarId] = avatar } @@ -181,7 +188,7 @@ func (p *Player) WearWeapon(avatarId uint32, weaponId uint64) { weapon := p.WeaponMap[weaponId] avatar.EquipWeapon = weapon weapon.AvatarId = avatarId - avatar.EquipGuidList[weapon.Guid] = weapon.Guid + avatar.EquipGuidMap[weapon.Guid] = weapon.Guid } func (p *Player) TakeOffWeapon(avatarId uint32, weaponId uint64) { @@ -189,5 +196,5 @@ func (p *Player) TakeOffWeapon(avatarId uint32, weaponId uint64) { weapon := p.WeaponMap[weaponId] avatar.EquipWeapon = nil weapon.AvatarId = 0 - delete(avatar.EquipGuidList, weapon.Guid) + delete(avatar.EquipGuidMap, weapon.Guid) } diff --git a/gs/model/reliquary.go b/gs/model/reliquary.go index c9472606..be44b077 100644 --- a/gs/model/reliquary.go +++ b/gs/model/reliquary.go @@ -24,7 +24,7 @@ func (p *Player) InitReliquary(reliquary *Reliquary) { p.ReliquaryMap[reliquary.ReliquaryId] = reliquary if reliquary.AvatarId != 0 { avatar := p.AvatarMap[reliquary.AvatarId] - avatar.EquipGuidList[reliquary.Guid] = reliquary.Guid + avatar.EquipGuidMap[reliquary.Guid] = reliquary.Guid avatar.EquipReliquaryList = append(avatar.EquipReliquaryList, reliquary) } } diff --git a/gs/model/weapon.go b/gs/model/weapon.go index 510bdc27..c2a21f3e 100644 --- a/gs/model/weapon.go +++ b/gs/model/weapon.go @@ -24,7 +24,7 @@ func (p *Player) InitWeapon(weapon *Weapon) { p.WeaponMap[weapon.WeaponId] = weapon if weapon.AvatarId != 0 { avatar := p.AvatarMap[weapon.AvatarId] - avatar.EquipGuidList[weapon.Guid] = weapon.Guid + avatar.EquipGuidMap[weapon.Guid] = weapon.Guid avatar.EquipWeapon = weapon } } diff --git a/protocol/cmd/cmd_id_proto_obj_map.go b/protocol/cmd/cmd_id_proto_obj_map.go index 25d6dc53..763718fb 100644 --- a/protocol/cmd/cmd_id_proto_obj_map.go +++ b/protocol/cmd/cmd_id_proto_obj_map.go @@ -226,6 +226,8 @@ func (c *CmdProtoMap) registerAllMessage() { c.registerMessage(AvatarPropNotify, &proto.AvatarPropNotify{}) // 角色属性表更新通知 c.registerMessage(AvatarPromoteReq, &proto.AvatarPromoteReq{}) // 角色突破请求 c.registerMessage(AvatarPromoteRsp, &proto.AvatarPromoteRsp{}) // 角色突破响应 + c.registerMessage(AvatarPromoteGetRewardReq, &proto.AvatarPromoteGetRewardReq{}) // 角色突破获取奖励请求 + c.registerMessage(AvatarPromoteGetRewardRsp, &proto.AvatarPromoteGetRewardRsp{}) // 角色突破获取奖励响应 // 背包与道具 c.registerMessage(PlayerStoreNotify, &proto.PlayerStoreNotify{}) // 玩家背包数据通知