mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-15 21:22:26 +08:00
角色突破奖励获取功能
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
// 将给予的材料列表
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user