From ec3000d9aed7aa1e7b4449d5ba37e8ede41438ac Mon Sep 17 00:00:00 2001 From: flswld Date: Tue, 4 Apr 2023 19:25:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gs/game/player_fight_sync.go | 17 ++++++++++++----- gs/game/player_stamina.go | 6 ++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gs/game/player_fight_sync.go b/gs/game/player_fight_sync.go index c9b1ab03..194d2981 100644 --- a/gs/game/player_fight_sync.go +++ b/gs/game/player_fight_sync.go @@ -325,6 +325,12 @@ func (g *Game) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Mess if player.SceneLoadState != model.SceneEnterDone { return } + world := WORLD_MANAGER.GetWorldByID(player.WorldId) + if world == nil { + logger.Error("get player world is nil, uid: %v", player.PlayerID) + return + } + scene := world.GetSceneById(player.SceneId) for _, entry := range req.Invokes { player.AbilityInvokeHandler.AddEntry(entry.ForwardType, entry) switch entry.ArgumentType { @@ -335,7 +341,7 @@ func (g *Game) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Mess logger.Error("parse AbilityMetaModifierChange error: %v", err) continue } - // logger.Debug("entry: %v, ModifierChange: %v", entry, modifierChange) + logger.Debug("EntityId: %v, ModifierChange: %v", entry.EntityId, modifierChange) // 处理耐力消耗 g.HandleAbilityStamina(player, entry) case proto.AbilityInvokeArgument_ABILITY_MIXIN_COST_STAMINA: @@ -345,7 +351,7 @@ func (g *Game) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Mess logger.Error("parse AbilityMixinCostStamina error: %v", err) continue } - logger.Debug("entry: %v, MixinCostStamina: %v", entry, costStamina) + logger.Debug("EntityId: %v, MixinCostStamina: %v", entry.EntityId, costStamina) // 处理耐力消耗 g.HandleAbilityStamina(player, entry) case proto.AbilityInvokeArgument_ABILITY_ACTION_DEDUCT_STAMINA: @@ -355,7 +361,7 @@ func (g *Game) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Mess logger.Error("parse AbilityActionDeductStamina error: %v", err) continue } - logger.Debug("entry: %v, ActionDeductStamina: %v", entry, deductStamina) + logger.Debug("EntityId: %v, ActionDeductStamina: %v", entry.EntityId, deductStamina) // 处理耐力消耗 g.HandleAbilityStamina(player, entry) case proto.AbilityInvokeArgument_ABILITY_META_MODIFIER_DURABILITY_CHANGE: @@ -365,7 +371,7 @@ func (g *Game) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Mess logger.Error("parse AbilityMetaModifierDurabilityChange error: %v", err) continue } - logger.Debug("entry: %v, DurabilityChange: %v", entry, modifierDurabilityChange) + logger.Debug("EntityId: %v, DurabilityChange: %v", entry.EntityId, modifierDurabilityChange) case proto.AbilityInvokeArgument_ABILITY_META_DURABILITY_IS_ZERO: durabilityIsZero := new(proto.AbilityMetaDurabilityIsZero) err := pb.Unmarshal(entry.AbilityData, durabilityIsZero) @@ -373,7 +379,8 @@ func (g *Game) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Mess logger.Error("parse AbilityMetaDurabilityIsZero error: %v", err) continue } - logger.Debug("entry: %v, DurabilityIsZero: %v", entry, durabilityIsZero) + logger.Debug("EntityId: %v, DurabilityIsZero: %v", entry.EntityId, durabilityIsZero) + g.KillEntity(player, scene, entry.EntityId, proto.PlayerDieType_PLAYER_DIE_GM) case proto.AbilityInvokeArgument_ABILITY_MIXIN_ELITE_SHIELD: case proto.AbilityInvokeArgument_ABILITY_MIXIN_ELEMENT_SHIELD: case proto.AbilityInvokeArgument_ABILITY_MIXIN_GLOBAL_SHIELD: diff --git a/gs/game/player_stamina.go b/gs/game/player_stamina.go index 3d0acbcc..0783758d 100644 --- a/gs/game/player_stamina.go +++ b/gs/game/player_stamina.go @@ -60,6 +60,9 @@ func (g *Game) SceneAvatarStaminaStepReq(player *model.Player, payloadMsg pb.Mes // HandleAbilityStamina 处理来自ability的耐力消耗 func (g *Game) HandleAbilityStamina(player *model.Player, entry *proto.AbilityInvokeEntry) { world := WORLD_MANAGER.GetWorldByID(player.WorldId) + if world == nil { + return + } // 获取世界中的角色实体 worldAvatar := world.GetWorldAvatarByEntityId(entry.EntityId) if worldAvatar == nil { @@ -67,6 +70,9 @@ func (g *Game) HandleAbilityStamina(player *model.Player, entry *proto.AbilityIn } // 查找是不是属于该角色实体的ability id ability := worldAvatar.GetAbilityByInstanceId(entry.Head.InstancedAbilityId) + if ability == nil { + return + } abilityNameHashCode := ability.AbilityName.GetHash() if abilityNameHashCode == 0 { return