From a5ad9cd65ef81ab61d43a5c831367770b0ba3b83 Mon Sep 17 00:00:00 2001 From: flswld Date: Sun, 26 Mar 2023 05:45:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E7=BE=8E=E8=A7=A3=E5=86=B3=E5=A4=9A?= =?UTF-8?q?=E4=BA=BA=E8=81=94=E6=9C=BA=E8=A7=92=E8=89=B2=E5=8A=A8=E7=94=BB?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=9A=84=E5=85=A8=E9=83=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gs/game/player_fight_sync.go | 44 ++++++++---------------------------- gs/game/player_scene.go | 18 +++++++-------- 2 files changed, 19 insertions(+), 43 deletions(-) diff --git a/gs/game/player_fight_sync.go b/gs/game/player_fight_sync.go index ed3162de..7df75fab 100644 --- a/gs/game/player_fight_sync.go +++ b/gs/game/player_fight_sync.go @@ -101,24 +101,24 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p for _, entry := range req.InvokeList { switch entry.ArgumentType { case proto.CombatTypeArgument_COMBAT_EVT_BEING_HIT: - hitInfo := new(proto.EvtBeingHitInfo) - err := pb.Unmarshal(entry.CombatData, hitInfo) + evtBeingHitInfo := new(proto.EvtBeingHitInfo) + err := pb.Unmarshal(entry.CombatData, evtBeingHitInfo) if err != nil { logger.Error("parse EvtBeingHitInfo error: %v", err) continue } - attackResult := hitInfo.AttackResult + // logger.Debug("EvtBeingHitInfo: %v, ForwardType: %v", evtBeingHitInfo, entry.ForwardType) + attackResult := evtBeingHitInfo.AttackResult if attackResult == nil { logger.Error("attackResult is nil") continue } - // logger.Debug("run attack handler, attackResult: %v", attackResult) target := scene.GetEntity(attackResult.DefenseId) if target == nil { logger.Error("could not found target, defense id: %v", attackResult.DefenseId) continue } - attackResult.Damage *= 10 + attackResult.Damage *= 100 damage := attackResult.Damage attackerId := attackResult.AttackerId _ = attackerId @@ -140,7 +140,7 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p if currHp == 0 && target.GetEntityType() != constant.ENTITY_TYPE_AVATAR { scene.SetEntityLifeState(target, constant.LIFE_STATE_DEAD, proto.PlayerDieType_PLAYER_DIE_GM) } - combatData, err := pb.Marshal(hitInfo) + combatData, err := pb.Marshal(evtBeingHitInfo) if err != nil { logger.Error("create combat invocations entity hit info error: %v", err) } @@ -153,6 +153,7 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p logger.Error("parse EntityMoveInfo error: %v", err) continue } + // logger.Debug("EntityMoveInfo: %v, ForwardType: %v", entityMoveInfo, entry.ForwardType) motionInfo := entityMoveInfo.MotionInfo if motionInfo.Pos == nil || motionInfo.Rot == nil { continue @@ -208,11 +209,11 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p sceneEntity.SetMoveState(uint16(motionInfo.State)) sceneEntity.SetLastMoveSceneTimeMs(entityMoveInfo.SceneTime) sceneEntity.SetLastMoveReliableSeq(entityMoveInfo.ReliableSeq) - - if motionInfo.State == proto.MotionState_MOTION_NOTIFY { + // 众里寻他千百度 蓦然回首 那人却在灯火阑珊处 + if motionInfo.State == proto.MotionState_MOTION_NOTIFY || motionInfo.State == proto.MotionState_MOTION_FIGHT { + // 只要转发了这两个包的其中之一 客户端的动画就会被打断 continue } - player.CombatInvokeHandler.AddEntry(entry.ForwardType, entry) case proto.CombatTypeArgument_COMBAT_ANIMATOR_PARAMETER_CHANGED: evtAnimatorParameterInfo := new(proto.EvtAnimatorParameterInfo) @@ -222,19 +223,7 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p continue } // logger.Debug("EvtAnimatorParameterInfo: %v, ForwardType: %v", evtAnimatorParameterInfo, entry.ForwardType) - // 这是否? - 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) @@ -243,20 +232,7 @@ 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) } diff --git a/gs/game/player_scene.go b/gs/game/player_scene.go index e0c8402c..9217e90d 100644 --- a/gs/game/player_scene.go +++ b/gs/game/player_scene.go @@ -28,24 +28,24 @@ func (g *GameManager) EnterSceneReadyReq(player *model.Player, payloadMsg pb.Mes logger.Debug("player enter scene ready, uid: %v", player.PlayerID) world := WORLD_MANAGER.GetWorldByID(player.WorldId) - enterSceneContext := world.GetEnterSceneContextByToken(req.EnterSceneToken) - if enterSceneContext == nil { + ctx := world.GetEnterSceneContextByToken(req.EnterSceneToken) + if ctx == nil { logger.Error("get enter scene context is nil, uid: %v", player.PlayerID) return } - if enterSceneContext.OldSceneId != 0 { - aoiManager, exist := WORLD_MANAGER.GetSceneBlockAoiMap()[enterSceneContext.OldSceneId] + if ctx.OldSceneId != 0 { + aoiManager, exist := WORLD_MANAGER.GetSceneBlockAoiMap()[ctx.OldSceneId] if !exist { - logger.Error("player scene not exist in aoi, sceneId: %v, uid: %v", enterSceneContext.OldSceneId, player.PlayerID) + logger.Error("player scene not exist in aoi, sceneId: %v, uid: %v", ctx.OldSceneId, player.PlayerID) return } - objectList := aoiManager.GetObjectListByPos(float32(enterSceneContext.OldPos.X), 0.0, float32(enterSceneContext.OldPos.Z)) + objectList := aoiManager.GetObjectListByPos(float32(ctx.OldPos.X), 0.0, float32(ctx.OldPos.Z)) delEntityIdList := make([]uint32, 0) - oldScene := world.GetSceneById(enterSceneContext.OldSceneId) + oldScene := world.GetSceneById(ctx.OldSceneId) for _, groupAny := range objectList { groupConfig := groupAny.(*gdconf.Group) - distance2D := math.Sqrt((player.Pos.X-float64(groupConfig.Pos.X))*(player.Pos.X-float64(groupConfig.Pos.X)) + - (player.Pos.Z-float64(groupConfig.Pos.Z))*(player.Pos.Z-float64(groupConfig.Pos.Z))) + distance2D := math.Sqrt((ctx.OldPos.X-float64(groupConfig.Pos.X))*(ctx.OldPos.X-float64(groupConfig.Pos.X)) + + (ctx.OldPos.Z-float64(groupConfig.Pos.Z))*(ctx.OldPos.Z-float64(groupConfig.Pos.Z))) if distance2D > ENTITY_LOD { continue }