mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-04 16:02:26 +08:00
84 lines
2.5 KiB
Go
84 lines
2.5 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) {
|
|
req := payloadMsg.(*proto.AvatarWearFlycloakReq)
|
|
|
|
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
|
scene := world.GetSceneById(player.SceneId)
|
|
if scene == nil {
|
|
logger.Error("scene is nil, sceneId: %v", player.SceneId)
|
|
g.SendError(cmd.AvatarWearFlycloakRsp, player, &proto.AvatarWearFlycloakRsp{})
|
|
return
|
|
}
|
|
|
|
// 确保角色存在
|
|
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
|
|
|
|
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)
|
|
}
|