mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-03-01 00:35:36 +08:00
圣遗物装备卸下修复
This commit is contained in:
@@ -69,7 +69,10 @@ func (g *GameManager) TakeoffEquipReq(player *model.Player, payloadMsg pb.Messag
|
|||||||
// 卸下圣遗物
|
// 卸下圣遗物
|
||||||
player.TakeOffReliquary(avatar.AvatarId, reliquary.ReliquaryId)
|
player.TakeOffReliquary(avatar.AvatarId, reliquary.ReliquaryId)
|
||||||
// 更新玩家装备
|
// 更新玩家装备
|
||||||
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByReliquary(avatar, reliquary)
|
avatarEquipChangeNotify := &proto.AvatarEquipChangeNotify{
|
||||||
|
AvatarGuid: avatar.Guid,
|
||||||
|
EquipType: req.Slot,
|
||||||
|
}
|
||||||
g.SendMsg(cmd.AvatarEquipChangeNotify, player.PlayerID, player.ClientSeq, avatarEquipChangeNotify)
|
g.SendMsg(cmd.AvatarEquipChangeNotify, player.PlayerID, player.ClientSeq, avatarEquipChangeNotify)
|
||||||
|
|
||||||
takeoffEquipRsp := &proto.TakeoffEquipRsp{
|
takeoffEquipRsp := &proto.TakeoffEquipRsp{
|
||||||
@@ -125,9 +128,16 @@ func (g *GameManager) WearUserAvatarReliquary(userId uint32, avatarId uint32, re
|
|||||||
logger.Error("player is nil, uid: %v", userId)
|
logger.Error("player is nil, uid: %v", userId)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
avatar := player.AvatarMap[avatarId]
|
avatar, ok := player.AvatarMap[avatarId]
|
||||||
reliquary := player.ReliquaryMap[reliquaryId]
|
if !ok {
|
||||||
|
logger.Error("avatar error, avatarId: %v", avatarId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reliquary, ok := player.ReliquaryMap[reliquaryId]
|
||||||
|
if !ok {
|
||||||
|
logger.Error("reliquary error, reliquaryId: %v", reliquaryId)
|
||||||
|
return
|
||||||
|
}
|
||||||
// 获取圣遗物配置表
|
// 获取圣遗物配置表
|
||||||
reliquaryConfig := gdconf.GetItemDataById(int32(reliquary.ItemId))
|
reliquaryConfig := gdconf.GetItemDataById(int32(reliquary.ItemId))
|
||||||
if reliquaryConfig == nil {
|
if reliquaryConfig == nil {
|
||||||
@@ -135,30 +145,35 @@ func (g *GameManager) WearUserAvatarReliquary(userId uint32, avatarId uint32, re
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 角色已装备的圣遗物
|
// 角色已装备的圣遗物
|
||||||
avatarCurReliquary := avatar.EquipReliquaryMap[uint8(reliquaryConfig.ReliquaryType)]
|
avatarCurReliquary, ok := avatar.EquipReliquaryMap[uint8(reliquaryConfig.ReliquaryType)]
|
||||||
|
if ok {
|
||||||
|
if reliquary.AvatarId != 0 {
|
||||||
|
// 圣遗物在别的角色身上
|
||||||
|
targetReliquaryAvatar, ok := player.AvatarMap[reliquary.AvatarId]
|
||||||
|
if !ok {
|
||||||
|
logger.Error("avatar error, avatarId: %v", reliquary.AvatarId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 卸下角色已装备的圣遗物
|
||||||
|
player.TakeOffReliquary(avatarId, avatarCurReliquary.ReliquaryId)
|
||||||
|
|
||||||
if reliquary.AvatarId != 0 {
|
// 将目标圣遗物的角色卸下圣遗物
|
||||||
// 圣遗物在别的角色身上
|
player.TakeOffReliquary(targetReliquaryAvatar.AvatarId, reliquary.ReliquaryId)
|
||||||
weakAvatarId := reliquary.AvatarId
|
// 将目标圣遗物的角色装备当前角色曾装备的圣遗物
|
||||||
weakReliquaryId := reliquaryId
|
player.WearReliquary(targetReliquaryAvatar.AvatarId, avatarCurReliquary.ReliquaryId)
|
||||||
strongAvatarId := avatarId
|
|
||||||
strongReliquaryId := avatarCurReliquary.ReliquaryId
|
|
||||||
player.TakeOffReliquary(weakAvatarId, weakReliquaryId)
|
|
||||||
player.TakeOffReliquary(strongAvatarId, strongReliquaryId)
|
|
||||||
player.WearReliquary(weakAvatarId, strongReliquaryId)
|
|
||||||
player.WearReliquary(strongAvatarId, weakReliquaryId)
|
|
||||||
|
|
||||||
weakAvatar := player.AvatarMap[weakAvatarId]
|
// 更新目标圣遗物角色的装备
|
||||||
weakReliquary := weakAvatar.EquipReliquaryMap[uint8(reliquaryConfig.ReliquaryType)]
|
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByReliquary(targetReliquaryAvatar, avatarCurReliquary)
|
||||||
|
g.SendMsg(cmd.AvatarEquipChangeNotify, userId, player.ClientSeq, avatarEquipChangeNotify)
|
||||||
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByReliquary(weakAvatar, weakReliquary)
|
} else {
|
||||||
g.SendMsg(cmd.AvatarEquipChangeNotify, userId, player.ClientSeq, avatarEquipChangeNotify)
|
// 角色当前有圣遗物则卸下
|
||||||
} else if avatarCurReliquary != nil {
|
player.TakeOffReliquary(avatarId, avatarCurReliquary.ReliquaryId)
|
||||||
// 角色当前有圣遗物
|
}
|
||||||
player.TakeOffReliquary(avatarId, avatarCurReliquary.ReliquaryId)
|
|
||||||
player.WearReliquary(avatarId, reliquaryId)
|
|
||||||
}
|
}
|
||||||
|
// 角色装备圣遗物
|
||||||
|
player.WearReliquary(avatarId, reliquaryId)
|
||||||
|
|
||||||
|
// 更新角色装备
|
||||||
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByReliquary(avatar, reliquary)
|
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByReliquary(avatar, reliquary)
|
||||||
g.SendMsg(cmd.AvatarEquipChangeNotify, userId, player.ClientSeq, avatarEquipChangeNotify)
|
g.SendMsg(cmd.AvatarEquipChangeNotify, userId, player.ClientSeq, avatarEquipChangeNotify)
|
||||||
}
|
}
|
||||||
@@ -170,53 +185,63 @@ func (g *GameManager) WearUserAvatarWeapon(userId uint32, avatarId uint32, weapo
|
|||||||
logger.Error("player is nil, uid: %v", userId)
|
logger.Error("player is nil, uid: %v", userId)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
avatar := player.AvatarMap[avatarId]
|
avatar, ok := player.AvatarMap[avatarId]
|
||||||
weapon := player.WeaponMap[weaponId]
|
if !ok {
|
||||||
|
logger.Error("avatar error, avatarId: %v", avatarId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
weapon, ok := player.WeaponMap[weaponId]
|
||||||
|
if !ok {
|
||||||
|
logger.Error("weapon error, weaponId: %v", weaponId)
|
||||||
|
return
|
||||||
|
}
|
||||||
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
||||||
scene := world.GetSceneById(player.SceneId)
|
if world == nil {
|
||||||
|
logger.Error("world is nil, worldId: %v", player.WorldId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 角色已装备的武器
|
||||||
|
avatarCurWeapon := avatar.EquipWeapon
|
||||||
|
if avatarCurWeapon != nil {
|
||||||
|
if weapon.AvatarId != 0 {
|
||||||
|
// 武器在别的角色身上
|
||||||
|
targetWeaponAvatar, ok := player.AvatarMap[weapon.AvatarId]
|
||||||
|
if !ok {
|
||||||
|
logger.Error("avatar error, avatarId: %v", weapon.AvatarId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 卸下角色已装备的武器
|
||||||
|
player.TakeOffWeapon(avatarId, avatarCurWeapon.WeaponId)
|
||||||
|
|
||||||
if weapon.AvatarId != 0 {
|
// 将目标武器的角色卸下武器
|
||||||
// 武器在别的角色身上
|
player.TakeOffWeapon(targetWeaponAvatar.AvatarId, weapon.WeaponId)
|
||||||
weakAvatarId := weapon.AvatarId
|
// 将目标武器的角色装备当前角色曾装备的武器
|
||||||
weakWeaponId := weaponId
|
player.WearWeapon(targetWeaponAvatar.AvatarId, avatarCurWeapon.WeaponId)
|
||||||
strongAvatarId := avatarId
|
|
||||||
strongWeaponId := avatar.EquipWeapon.WeaponId
|
|
||||||
player.TakeOffWeapon(weakAvatarId, weakWeaponId)
|
|
||||||
player.TakeOffWeapon(strongAvatarId, strongWeaponId)
|
|
||||||
player.WearWeapon(weakAvatarId, strongWeaponId)
|
|
||||||
player.WearWeapon(strongAvatarId, weakWeaponId)
|
|
||||||
|
|
||||||
weakAvatar := player.AvatarMap[weakAvatarId]
|
// 更新目标武器角色的装备
|
||||||
weakWeapon := weakAvatar.EquipWeapon
|
weaponEntityId := uint32(0)
|
||||||
|
worldAvatar := world.GetPlayerWorldAvatar(player, targetWeaponAvatar.AvatarId)
|
||||||
weakWorldAvatar := world.GetPlayerWorldAvatar(player, weakAvatarId)
|
if worldAvatar != nil {
|
||||||
if weakWorldAvatar != nil {
|
weaponEntityId = worldAvatar.GetWeaponEntityId()
|
||||||
weakWorldAvatar.SetWeaponEntityId(scene.CreateEntityWeapon())
|
}
|
||||||
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByWeapon(weakAvatar, weakWeapon, weakWorldAvatar.GetWeaponEntityId())
|
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByWeapon(targetWeaponAvatar, avatarCurWeapon, weaponEntityId)
|
||||||
g.SendMsg(cmd.AvatarEquipChangeNotify, userId, player.ClientSeq, avatarEquipChangeNotify)
|
g.SendMsg(cmd.AvatarEquipChangeNotify, userId, player.ClientSeq, avatarEquipChangeNotify)
|
||||||
} else {
|
} else {
|
||||||
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByWeapon(weakAvatar, weakWeapon, 0)
|
// 角色当前有武器则卸下
|
||||||
g.SendMsg(cmd.AvatarEquipChangeNotify, userId, player.ClientSeq, avatarEquipChangeNotify)
|
player.TakeOffWeapon(avatarId, avatarCurWeapon.WeaponId)
|
||||||
}
|
}
|
||||||
} else if avatar.EquipWeapon != nil {
|
|
||||||
// 角色当前有武器
|
|
||||||
player.TakeOffWeapon(avatarId, avatar.EquipWeapon.WeaponId)
|
|
||||||
player.WearWeapon(avatarId, weaponId)
|
|
||||||
} else {
|
|
||||||
// 是新角色还没有武器
|
|
||||||
player.WearWeapon(avatarId, weaponId)
|
|
||||||
}
|
}
|
||||||
|
// 角色装备武器
|
||||||
|
player.WearWeapon(avatarId, weaponId)
|
||||||
|
|
||||||
|
// 更新角色装备
|
||||||
|
weaponEntityId := uint32(0)
|
||||||
worldAvatar := world.GetPlayerWorldAvatar(player, avatarId)
|
worldAvatar := world.GetPlayerWorldAvatar(player, avatarId)
|
||||||
if worldAvatar != nil {
|
if worldAvatar != nil {
|
||||||
worldAvatar.SetWeaponEntityId(scene.CreateEntityWeapon())
|
weaponEntityId = worldAvatar.GetWeaponEntityId()
|
||||||
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByWeapon(avatar, weapon, worldAvatar.GetWeaponEntityId())
|
|
||||||
g.SendMsg(cmd.AvatarEquipChangeNotify, userId, player.ClientSeq, avatarEquipChangeNotify)
|
|
||||||
} else {
|
|
||||||
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByWeapon(avatar, weapon, 0)
|
|
||||||
g.SendMsg(cmd.AvatarEquipChangeNotify, userId, player.ClientSeq, avatarEquipChangeNotify)
|
|
||||||
}
|
}
|
||||||
|
avatarEquipChangeNotify := g.PacketAvatarEquipChangeNotifyByWeapon(avatar, weapon, weaponEntityId)
|
||||||
|
g.SendMsg(cmd.AvatarEquipChangeNotify, userId, player.ClientSeq, avatarEquipChangeNotify)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GameManager) PacketAvatarEquipChangeNotifyByReliquary(avatar *model.Avatar, reliquary *model.Reliquary) *proto.AvatarEquipChangeNotify {
|
func (g *GameManager) PacketAvatarEquipChangeNotifyByReliquary(avatar *model.Avatar, reliquary *model.Reliquary) *proto.AvatarEquipChangeNotify {
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ func (p *Player) InitAvatar(avatar *Avatar) {
|
|||||||
avatar.Guid = p.GetNextGameObjectGuid()
|
avatar.Guid = p.GetNextGameObjectGuid()
|
||||||
p.GameObjectGuidMap[avatar.Guid] = GameObject(avatar)
|
p.GameObjectGuidMap[avatar.Guid] = GameObject(avatar)
|
||||||
avatar.EquipGuidMap = make(map[uint64]uint64)
|
avatar.EquipGuidMap = make(map[uint64]uint64)
|
||||||
|
avatar.EquipReliquaryMap = make(map[uint8]*Reliquary)
|
||||||
p.AvatarMap[avatar.AvatarId] = avatar
|
p.AvatarMap[avatar.AvatarId] = avatar
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user