From 2ce948a5cef51d90f962c59d939060f8396f3839 Mon Sep 17 00:00:00 2001 From: flswld Date: Tue, 14 Mar 2023 00:07:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A8=E7=94=BB=E5=90=8C=E6=AD=A5=E8=B0=83?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gs/game/player_fight_sync.go | 86 ++++++++++++++++------------ gs/game/player_scene.go | 3 + protocol/cmd/cmd_id_proto_obj_map.go | 2 + 3 files changed, 53 insertions(+), 38 deletions(-) diff --git a/gs/game/player_fight_sync.go b/gs/game/player_fight_sync.go index 10a55fdb..df16e524 100644 --- a/gs/game/player_fight_sync.go +++ b/gs/game/player_fight_sync.go @@ -15,6 +15,8 @@ import ( pb "google.golang.org/protobuf/proto" ) +// TODO 暂时只做3.2协议的兼容了 在GS这边处理不同版本的协议太烦人了 有机会全部改到GATE那边处理 GS所有接收和发送的都应该是3.2版本的协议 + var cmdProtoMap *cmd.CmdProtoMap = nil func DoForward[IET model.InvokeEntryType](player *model.Player, invokeHandler *model.InvokeHandler[IET], @@ -218,21 +220,20 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p logger.Error("parse EvtAnimatorParameterInfo error: %v", err) continue } - // logger.Debug("EvtAnimatorParameterInfo: %v, ForwardType: %v", evtAnimatorParameterInfo, entry.ForwardType) - + logger.Debug("EvtAnimatorParameterInfo: %v, ForwardType: %v", evtAnimatorParameterInfo, entry.ForwardType) // 这是否? - if evtAnimatorParameterInfo.IsServerCache { - evtAnimatorParameterInfo.IsServerCache = false - // TODO 暂时只做3.2协议的兼容了 在GS这边处理不同版本的协议太烦人了 有机会全部改到GATE那边处理 GS所有接收和发送的都应该是3.2版本的协议 - newCombatData, err := pb.Marshal(evtAnimatorParameterInfo) - if err != nil { - logger.Error("build EvtAnimatorParameterInfo error: %v", err) - continue - } - entry.CombatData = newCombatData + evtAnimatorParameterInfo.IsServerCache = false + newCombatData, err := pb.Marshal(evtAnimatorParameterInfo) + if err != nil { + logger.Error("build EvtAnimatorParameterInfo error: %v", err) + continue } - + entry.CombatData = newCombatData player.CombatInvokeHandler.AddEntry(entry.ForwardType, entry) + g.SendToWorldAEC(world, cmd.EvtAnimatorParameterNotify, player.ClientSeq, &proto.EvtAnimatorParameterNotify{ + AnimatorParamInfo: evtAnimatorParameterInfo, + ForwardType: entry.ForwardType, + }, player.PlayerID) case proto.CombatTypeArgument_COMBAT_ANIMATOR_STATE_CHANGED: evtAnimatorStateChangedInfo := new(proto.EvtAnimatorStateChangedInfo) err := pb.Unmarshal(entry.CombatData, evtAnimatorStateChangedInfo) @@ -241,7 +242,20 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p continue } logger.Debug("EvtAnimatorStateChangedInfo: %v, ForwardType: %v", evtAnimatorStateChangedInfo, entry.ForwardType) + // 试试看? + evtAnimatorStateChangedInfo.HandleAnimatorStateImmediately = true + evtAnimatorStateChangedInfo.ForceSync = true + newCombatData, err := pb.Marshal(evtAnimatorStateChangedInfo) + if err != nil { + logger.Error("build EvtAnimatorParameterInfo error: %v", err) + continue + } + entry.CombatData = newCombatData player.CombatInvokeHandler.AddEntry(entry.ForwardType, entry) + g.SendToWorldAEC(world, cmd.EvtAnimatorStateChangedNotify, player.ClientSeq, &proto.EvtAnimatorStateChangedNotify{ + ForwardType: entry.ForwardType, + EvtAnimatorStateChangedInfo: evtAnimatorStateChangedInfo, + }, player.PlayerID) default: player.CombatInvokeHandler.AddEntry(entry.ForwardType, entry) } @@ -453,34 +467,30 @@ func (g *GameManager) AbilityInvocationsNotify(player *model.Player, payloadMsg if player.SceneLoadState != model.SceneEnterDone { return } - for _, entry := range req.Invokes { // logger.Debug("AbilityInvocationsNotify: %v", entry, player.PlayerID) - - // switch entry.ArgumentType { - // case proto.AbilityInvokeArgument_ABILITY_INVOKE_ARGUMENT_META_MODIFIER_CHANGE: - // world := WORLD_MANAGER.GetWorldByID(player.WorldId) - // worldAvatar := world.GetWorldAvatarByEntityId(entry.EntityId) - // if worldAvatar != nil { - // for _, ability := range worldAvatar.abilityList { - // if ability.InstancedAbilityId == entry.Head.InstancedAbilityId { - // logger.Error("A: %v", ability) - // } - // } - // for _, modifier := range worldAvatar.modifierList { - // if modifier.InstancedAbilityId == entry.Head.InstancedAbilityId { - // logger.Error("B: %v", modifier) - // } - // } - // for _, modifier := range worldAvatar.modifierList { - // if modifier.InstancedModifierId == entry.Head.InstancedModifierId { - // logger.Error("C: %v", modifier) - // } - // } - // } - // case proto.AbilityInvokeArgument_ABILITY_INVOKE_ARGUMENT_NONE: - // } - + switch entry.ArgumentType { + case proto.AbilityInvokeArgument_ABILITY_META_MODIFIER_CHANGE: + world := WORLD_MANAGER.GetWorldByID(player.WorldId) + worldAvatar := world.GetWorldAvatarByEntityId(entry.EntityId) + if worldAvatar != nil { + for _, ability := range worldAvatar.abilityList { + if ability.InstancedAbilityId == entry.Head.InstancedAbilityId { + // logger.Error("A: %v", ability) + } + } + for _, modifier := range worldAvatar.modifierList { + if modifier.InstancedAbilityId == entry.Head.InstancedAbilityId { + // logger.Error("B: %v", modifier) + } + } + for _, modifier := range worldAvatar.modifierList { + if modifier.InstancedModifierId == entry.Head.InstancedModifierId { + // logger.Error("C: %v", modifier) + } + } + } + } // 处理耐力消耗 g.HandleAbilityStamina(player, entry) player.AbilityInvokeHandler.AddEntry(entry.ForwardType, entry) diff --git a/gs/game/player_scene.go b/gs/game/player_scene.go index 3cafe23e..6067f508 100644 --- a/gs/game/player_scene.go +++ b/gs/game/player_scene.go @@ -373,6 +373,9 @@ func (g *GameManager) SceneEntityDrownReq(player *model.Player, payloadMsg pb.Me req := payloadMsg.(*proto.SceneEntityDrownReq) world := WORLD_MANAGER.GetWorldByID(player.WorldId) + if world == nil { + return + } scene := world.GetSceneById(player.SceneId) scene.DestroyEntity(req.EntityId) diff --git a/protocol/cmd/cmd_id_proto_obj_map.go b/protocol/cmd/cmd_id_proto_obj_map.go index 9d696df2..435021aa 100644 --- a/protocol/cmd/cmd_id_proto_obj_map.go +++ b/protocol/cmd/cmd_id_proto_obj_map.go @@ -132,6 +132,8 @@ func (c *CmdProtoMap) registerAllMessage() { c.regMsg(EvtEntityRenderersChangedNotify, func() any { return new(proto.EvtEntityRenderersChangedNotify) }) // 实体可视状态改变通知 c.regMsg(EvtCreateGadgetNotify, func() any { return new(proto.EvtCreateGadgetNotify) }) // 创建实体通知 c.regMsg(EvtDestroyGadgetNotify, func() any { return new(proto.EvtDestroyGadgetNotify) }) // 销毁实体通知 + c.regMsg(EvtAnimatorParameterNotify, func() any { return new(proto.EvtAnimatorParameterNotify) }) // 动画参数通知 + c.regMsg(EvtAnimatorStateChangedNotify, func() any { return new(proto.EvtAnimatorStateChangedNotify) }) // 动画状态通知 // 队伍 c.regMsg(ChangeAvatarReq, func() any { return new(proto.ChangeAvatarReq) }) // 更换角色请求 切人