Files
hk4e/gs/game/player_flycloak.go
UnKownOwO 804e0dfc1a 时装、风之翼读表,give命令更新
修复了角色替换圣遗物异常的问题
2023-02-14 21:27:27 +08:00

79 lines
2.4 KiB
Go

package game
import (
"hk4e/gs/model"
"hk4e/pkg/logger"
"hk4e/protocol/cmd"
"hk4e/protocol/proto"
pb "google.golang.org/protobuf/proto"
)
// AddUserFlycloak 给予玩家风之翼
func (g *GameManager) AddUserFlycloak(userId uint32, flyCloakId uint32) {
player := USER_MANAGER.GetOnlineUser(userId)
if player == nil {
logger.Error("player is nil, uid: %v", userId)
return
}
// 验证玩家是否已拥有该风之翼
for _, flycloak := range player.FlyCloakList {
if flycloak == flyCloakId {
logger.Error("player has flycloak, flycloakId: %v", flyCloakId)
return
}
}
player.FlyCloakList = append(player.FlyCloakList, flyCloakId)
avatarGainFlycloakNotify := &proto.AvatarGainFlycloakNotify{
FlycloakId: flyCloakId,
}
g.SendMsg(cmd.AvatarGainFlycloakNotify, userId, player.ClientSeq, avatarGainFlycloakNotify)
}
// AvatarWearFlycloakReq 角色装备风之翼请求
func (g *GameManager) AvatarWearFlycloakReq(player *model.Player, payloadMsg pb.Message) {
logger.Debug("user change avatar fly cloak, uid: %v", player.PlayerID)
req := payloadMsg.(*proto.AvatarWearFlycloakReq)
// 确保角色存在
avatar, ok := player.GameObjectGuidMap[req.AvatarGuid].(*model.Avatar)
if !ok {
logger.Error("avatar error, avatarGuid: %v", req.AvatarGuid)
g.SendError(cmd.AvatarWearFlycloakRsp, player, &proto.AvatarWearFlycloakRsp{}, proto.Retcode_RET_CAN_NOT_FIND_AVATAR)
return
}
exist := false
for _, v := range player.FlyCloakList {
if v == req.FlycloakId {
exist = true
}
}
if !exist {
logger.Error("flycloak not exist, flycloakId: %v", req.FlycloakId)
g.SendError(cmd.AvatarWearFlycloakRsp, player, &proto.AvatarWearFlycloakRsp{}, proto.Retcode_RET_NOT_HAS_FLYCLOAK)
return
}
// 设置角色风之翼
avatar.FlyCloak = req.FlycloakId
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
scene := world.GetSceneById(player.SceneId)
avatarFlycloakChangeNotify := &proto.AvatarFlycloakChangeNotify{
AvatarGuid: req.AvatarGuid,
FlycloakId: req.FlycloakId,
}
for _, scenePlayer := range scene.GetAllPlayer() {
g.SendMsg(cmd.AvatarFlycloakChangeNotify, scenePlayer.PlayerID, scenePlayer.ClientSeq, avatarFlycloakChangeNotify)
}
avatarWearFlycloakRsp := &proto.AvatarWearFlycloakRsp{
AvatarGuid: req.AvatarGuid,
FlycloakId: req.FlycloakId,
}
g.SendMsg(cmd.AvatarWearFlycloakRsp, player.PlayerID, player.ClientSeq, avatarWearFlycloakRsp)
}