From 630c0444a0d9e92e24d8e97e57028242b0e1a7bb Mon Sep 17 00:00:00 2001 From: flswld Date: Wed, 5 Apr 2023 02:27:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=B0=E7=89=A2=E5=86=85?= =?UTF-8?q?=E4=BC=A0=E9=80=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gs/game/game_command_gm.go | 31 +++++++++++-- gs/game/game_world_manager.go | 8 ++-- gs/game/player_fight_sync.go | 51 +++++++------------- gs/game/player_gcg.go | 10 +++- gs/game/player_login.go | 10 ++-- gs/game/player_multiplayer.go | 4 +- gs/game/player_scene.go | 11 +++-- gs/game/player_stamina.go | 26 ++++++++--- gs/game/player_world.go | 87 ++++++++++++++++++++++------------- gs/model/stamina.go | 2 +- 10 files changed, 142 insertions(+), 98 deletions(-) diff --git a/gs/game/game_command_gm.go b/gs/game/game_command_gm.go index 85e3c5dd..86a5496f 100644 --- a/gs/game/game_command_gm.go +++ b/gs/game/game_command_gm.go @@ -25,11 +25,32 @@ func (g *GMCmd) GMTeleportPlayer(userId, sceneId, dungeonId uint32, posX, posY, logger.Error("player is nil, uid: %v", userId) return } - GAME.TeleportPlayer(player, proto.EnterReason_ENTER_REASON_GM, sceneId, &model.Vector{ - X: posX, - Y: posY, - Z: posZ, - }, new(model.Vector), dungeonId) + dungeonPointId := uint32(0) + end := false + for _, pointData := range gdconf.GetScenePointMapBySceneId(int32(sceneId)) { + if end { + break + } + for _, v := range pointData.DungeonIds { + if uint32(v) == dungeonId { + dungeonPointId = uint32(pointData.Id) + end = true + break + } + } + } + if dungeonPointId == 0 { + return + } + GAME.TeleportPlayer( + player, + proto.EnterReason_ENTER_REASON_GM, + sceneId, + &model.Vector{X: posX, Y: posY, Z: posZ}, + new(model.Vector), + dungeonId, + dungeonPointId, + ) } // GMAddUserItem 给予玩家物品 diff --git a/gs/game/game_world_manager.go b/gs/game/game_world_manager.go index 45d18333..0bce7fa5 100644 --- a/gs/game/game_world_manager.go +++ b/gs/game/game_world_manager.go @@ -193,10 +193,10 @@ func (w *WorldManager) GetMultiplayerWorldNum() uint32 { // EnterSceneContext 场景切换上下文数据结构 type EnterSceneContext struct { - OldSceneId uint32 - OldPos *model.Vector - OldDungeonId uint32 - Uid uint32 + OldSceneId uint32 + OldPos *model.Vector + OldDungeonPointId uint32 + Uid uint32 } // World 世界数据结构 diff --git a/gs/game/player_fight_sync.go b/gs/game/player_fight_sync.go index 194d2981..d22db754 100644 --- a/gs/game/player_fight_sync.go +++ b/gs/game/player_fight_sync.go @@ -134,7 +134,7 @@ func (g *Game) CombatInvocationsNotify(player *model.Player, payloadMsg pb.Messa logger.Error("get gadget data config is nil, gadgetId: %v", gadgetEntity.GetGadgetId()) break } - logger.Debug("[EvtBeingHit] GadgetData: %+v, uid: %v", gadgetDataConfig, player.PlayerID) + logger.Debug("[EvtBeingHit] GadgetData: %+v, EntityId: %v, uid: %v", gadgetDataConfig, target.GetId(), player.PlayerID) // TODO 临时的解决方案 if strings.Contains(gadgetDataConfig.ServerLuaScript, "SetGadgetState") { g.ChangeGadgetState(player, target.GetId(), constant.GADGET_STATE_GEAR_START) @@ -325,12 +325,6 @@ 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 { @@ -341,7 +335,7 @@ func (g *Game) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Mess logger.Error("parse AbilityMetaModifierChange error: %v", err) continue } - logger.Debug("EntityId: %v, ModifierChange: %v", entry.EntityId, modifierChange) + // logger.Debug("EntityId: %v, ModifierChange: %v", entry.EntityId, modifierChange) // 处理耐力消耗 g.HandleAbilityStamina(player, entry) case proto.AbilityInvokeArgument_ABILITY_MIXIN_COST_STAMINA: @@ -351,17 +345,7 @@ func (g *Game) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Mess logger.Error("parse AbilityMixinCostStamina error: %v", err) continue } - logger.Debug("EntityId: %v, MixinCostStamina: %v", entry.EntityId, costStamina) - // 处理耐力消耗 - g.HandleAbilityStamina(player, entry) - case proto.AbilityInvokeArgument_ABILITY_ACTION_DEDUCT_STAMINA: - deductStamina := new(proto.AbilityActionDeductStamina) - err := pb.Unmarshal(entry.AbilityData, deductStamina) - if err != nil { - logger.Error("parse AbilityActionDeductStamina error: %v", err) - continue - } - logger.Debug("EntityId: %v, ActionDeductStamina: %v", entry.EntityId, deductStamina) + // logger.Debug("EntityId: %v, MixinCostStamina: %v", entry.EntityId, costStamina) // 处理耐力消耗 g.HandleAbilityStamina(player, entry) case proto.AbilityInvokeArgument_ABILITY_META_MODIFIER_DURABILITY_CHANGE: @@ -371,20 +355,7 @@ func (g *Game) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Mess logger.Error("parse AbilityMetaModifierDurabilityChange error: %v", err) continue } - 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) - if err != nil { - logger.Error("parse AbilityMetaDurabilityIsZero error: %v", err) - continue - } - 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: - case proto.AbilityInvokeArgument_ABILITY_MIXIN_SHIELD_BAR: + // logger.Debug("EntityId: %v, DurabilityChange: %v", entry.EntityId, modifierDurabilityChange) } } } @@ -569,12 +540,22 @@ func (g *Game) EvtDestroyGadgetNotify(player *model.Player, payloadMsg pb.Messag func (g *Game) EvtAiSyncSkillCdNotify(player *model.Player, payloadMsg pb.Message) { req := payloadMsg.(*proto.EvtAiSyncSkillCdNotify) - _ = req + if player.SceneLoadState != model.SceneEnterDone { + return + } + // logger.Debug("EvtAiSyncSkillCdNotify: %v", req) + world := WORLD_MANAGER.GetWorldByID(player.WorldId) + g.SendToWorldA(world, cmd.EvtAiSyncSkillCdNotify, player.ClientSeq, req) } func (g *Game) EvtAiSyncCombatThreatInfoNotify(player *model.Player, payloadMsg pb.Message) { req := payloadMsg.(*proto.EvtAiSyncCombatThreatInfoNotify) - _ = req + if player.SceneLoadState != model.SceneEnterDone { + return + } + // logger.Debug("EvtAiSyncCombatThreatInfoNotify: %v", req) + world := WORLD_MANAGER.GetWorldByID(player.WorldId) + g.SendToWorldA(world, cmd.EvtAiSyncCombatThreatInfoNotify, player.ClientSeq, req) } func (g *Game) EntityConfigHashNotify(player *model.Player, payloadMsg pb.Message) { diff --git a/gs/game/player_gcg.go b/gs/game/player_gcg.go index 4c86f6a4..df6ab5ae 100644 --- a/gs/game/player_gcg.go +++ b/gs/game/player_gcg.go @@ -63,7 +63,15 @@ func (g *Game) GCGStartChallenge(player *model.Player) { g.PacketGCGGameBriefDataNotify(player, proto.GCGGameBusinessType_GCG_GAME_GUIDE_GROUP, game)) // 玩家进入GCG界面 - g.TeleportPlayer(player, proto.EnterReason_ENTER_REASON_DUNGEON_ENTER, 79999, new(model.Vector), new(model.Vector), 2162) + g.TeleportPlayer( + player, + proto.EnterReason_ENTER_REASON_DUNGEON_ENTER, + 79999, + new(model.Vector), + new(model.Vector), + 2162, + 0, + ) } // GCGAskDuelReq GCG决斗请求 diff --git a/gs/game/player_login.go b/gs/game/player_login.go index e97a5476..490fdc3e 100644 --- a/gs/game/player_login.go +++ b/gs/game/player_login.go @@ -60,8 +60,6 @@ func (g *Game) SetPlayerBornDataReq(player *model.Player, payloadMsg pb.Message) g.AcceptQuest(player, false) - g.SendMsg(cmd.SetPlayerBornDataRsp, player.PlayerID, player.ClientSeq, new(proto.SetPlayerBornDataRsp)) - g.LoginNotify(player.PlayerID, player.ClientSeq, player) // 创建世界 @@ -73,6 +71,8 @@ func (g *Game) SetPlayerBornDataReq(player *model.Player, payloadMsg pb.Message) player.SceneLoadState = model.SceneNone g.SendMsg(cmd.PlayerEnterSceneNotify, player.PlayerID, player.ClientSeq, g.PacketPlayerEnterSceneNotifyLogin(player, proto.EnterType_ENTER_SELF)) + + g.SendMsg(cmd.SetPlayerBornDataRsp, player.PlayerID, player.ClientSeq, new(proto.SetPlayerBornDataRsp)) } func (g *Game) OnLogin(userId uint32, clientSeq uint32, gateAppId string, player *model.Player, joinHostUserId uint32) { @@ -116,10 +116,10 @@ func (g *Game) OnLogin(userId uint32, clientSeq uint32, gateAppId string, player g.LoginNotify(userId, clientSeq, player) if joinHostUserId != 0 { hostPlayer := USER_MANAGER.GetOnlineUser(joinHostUserId) - if hostPlayer == nil { - logger.Error("player is nil, uid: %v", joinHostUserId) - } else { + if hostPlayer != nil { g.JoinOtherWorld(player, hostPlayer) + } else { + logger.Error("player is nil, uid: %v", joinHostUserId) } } else { // 创建世界 diff --git a/gs/game/player_multiplayer.go b/gs/game/player_multiplayer.go index dc5aae0c..e96b7b75 100644 --- a/gs/game/player_multiplayer.go +++ b/gs/game/player_multiplayer.go @@ -70,6 +70,8 @@ func (g *Game) JoinPlayerSceneReq(player *model.Player, payloadMsg pb.Message) { return } + g.LoginNotify(player.PlayerID, player.ClientSeq, player) + g.JoinOtherWorld(player, hostPlayer) } @@ -94,7 +96,6 @@ func (g *Game) JoinOtherWorld(player *model.Player, hostPlayer *model.Player) { proto.EnterReason_ENTER_REASON_TEAM_JOIN, 0, new(model.Vector), - 0, ) g.SendMsg(cmd.PlayerEnterSceneNotify, player.PlayerID, player.ClientSeq, playerEnterSceneNotify) } else { @@ -344,7 +345,6 @@ func (g *Game) HostEnterMpWorld(hostPlayer *model.Player) { proto.EnterReason_ENTER_REASON_HOST_FROM_SINGLE_TO_MP, hostPlayer.SceneId, hostPlayer.Pos, - 0, ) g.SendMsg(cmd.PlayerEnterSceneNotify, hostPlayer.PlayerID, hostPlayer.ClientSeq, hostPlayerEnterSceneNotify) diff --git a/gs/game/player_scene.go b/gs/game/player_scene.go index 976f8926..e1e32524 100644 --- a/gs/game/player_scene.go +++ b/gs/game/player_scene.go @@ -766,8 +766,9 @@ func (g *Game) PacketPlayerEnterSceneNotifyTp( prevSceneId uint32, prevPos *model.Vector, dungeonId uint32, + dungeonPointId uint32, ) *proto.PlayerEnterSceneNotify { - return g.PacketPlayerEnterSceneNotifyCore(player, player, enterType, enterReason, prevSceneId, prevPos, dungeonId) + return g.PacketPlayerEnterSceneNotifyCore(player, player, enterType, enterReason, prevSceneId, prevPos, dungeonId, dungeonPointId) } func (g *Game) PacketPlayerEnterSceneNotifyMp( @@ -777,9 +778,8 @@ func (g *Game) PacketPlayerEnterSceneNotifyMp( enterReason proto.EnterReason, prevSceneId uint32, prevPos *model.Vector, - dungeonId uint32, ) *proto.PlayerEnterSceneNotify { - return g.PacketPlayerEnterSceneNotifyCore(player, targetPlayer, enterType, enterReason, prevSceneId, prevPos, dungeonId) + return g.PacketPlayerEnterSceneNotifyCore(player, targetPlayer, enterType, enterReason, prevSceneId, prevPos, 0, 0) } func (g *Game) PacketPlayerEnterSceneNotifyCore( @@ -790,6 +790,7 @@ func (g *Game) PacketPlayerEnterSceneNotifyCore( prevSceneId uint32, prevPos *model.Vector, dungeonId uint32, + dungeonPointId uint32, ) *proto.PlayerEnterSceneNotify { world := WORLD_MANAGER.GetWorldByID(targetPlayer.WorldId) scene := world.GetSceneById(targetPlayer.SceneId) @@ -800,8 +801,8 @@ func (g *Game) PacketPlayerEnterSceneNotifyCore( Y: prevPos.Y, Z: prevPos.Z, }, - OldDungeonId: dungeonId, - Uid: player.PlayerID, + OldDungeonPointId: dungeonPointId, + Uid: player.PlayerID, }) playerEnterSceneNotify := &proto.PlayerEnterSceneNotify{ PrevSceneId: prevSceneId, diff --git a/gs/game/player_stamina.go b/gs/game/player_stamina.go index 0783758d..ab10d675 100644 --- a/gs/game/player_stamina.go +++ b/gs/game/player_stamina.go @@ -83,13 +83,14 @@ func (g *Game) HandleAbilityStamina(player *model.Player, entry *proto.AbilityIn return } staminaInfo := player.StaminaInfo + now := time.Now().UnixMilli() switch entry.ArgumentType { case proto.AbilityInvokeArgument_ABILITY_META_MODIFIER_CHANGE: // 普通角色重击耐力消耗 // 距离技能开始过去的时间 - startPastTime := time.Now().UnixMilli() - staminaInfo.LastSkillTime + startPastTime := now - staminaInfo.LastSkillTime // 距离上次技能消耗的时间 - changePastTime := time.Now().UnixMilli() - staminaInfo.LastSkillChargeTime + changePastTime := now - staminaInfo.LastCostStaminaTime // 法器角色轻击也会算触发重击消耗 胡桃等角色重击一次会多次消耗 // 所以通过策略判断 必须距离技能开始过去200ms才算重击 两次技能耐力消耗之间需间隔500ms // 暂时就这样实现重击消耗 以后应该还会有更好的办法~ @@ -97,19 +98,22 @@ func (g *Game) HandleAbilityStamina(player *model.Player, entry *proto.AbilityIn costStamina := -(staminaDataConfig.CostStamina * 100) logger.Debug("stamina cost, skillId: %v, cost: %v", staminaDataConfig.AvatarSkillId, costStamina) g.UpdatePlayerStamina(player, costStamina) - staminaInfo.LastSkillChargeTime = time.Now().UnixMilli() + staminaInfo.LastCostStaminaTime = now } case proto.AbilityInvokeArgument_ABILITY_MIXIN_COST_STAMINA: // 大剑重击 或 持续技能 耐力消耗 // 根据配置以及距离上次的时间计算消耗的耐力 - pastTime := time.Now().UnixMilli() - staminaInfo.LastSkillTime + pastTime := now - staminaInfo.LastCostStaminaTime + if pastTime > 500 { + staminaInfo.LastCostStaminaTime = now + pastTime = 0 + } costStamina := -(staminaDataConfig.CostStamina * 100) costStamina = int32(float64(pastTime) / 1000 * float64(costStamina)) logger.Debug("stamina cost, skillId: %v, cost: %v", staminaDataConfig.AvatarSkillId, costStamina) g.UpdatePlayerStamina(player, costStamina) // 记录最后释放技能的时间 - staminaInfo.LastSkillTime = time.Now().UnixMilli() - case proto.AbilityInvokeArgument_ABILITY_ACTION_DEDUCT_STAMINA: + staminaInfo.LastCostStaminaTime = now } } @@ -340,7 +344,15 @@ func (g *Game) DrownBackHandler(player *model.Player) { Z: player.SafePos.Z, } // 传送玩家至安全位置 - g.TeleportPlayer(player, proto.EnterReason_ENTER_REASON_REVIVAL, player.SceneId, pos, new(model.Vector), 0) + g.TeleportPlayer( + player, + proto.EnterReason_ENTER_REASON_REVIVAL, + player.SceneId, + pos, + new(model.Vector), + 0, + 0, + ) } // 防止重置后又被修改 if player.StaminaInfo.DrownBackDelay != 0 { diff --git a/gs/game/player_world.go b/gs/game/player_world.go index eba9dc1b..935ea6ce 100644 --- a/gs/game/player_world.go +++ b/gs/game/player_world.go @@ -18,6 +18,10 @@ import ( func (g *Game) SceneTransToPointReq(player *model.Player, payloadMsg pb.Message) { req := payloadMsg.(*proto.SceneTransToPointReq) + if player.SceneLoadState != model.SceneEnterDone { + g.SendError(cmd.SceneTransToPointRsp, player, &proto.SceneTransToPointRsp{}, proto.Retcode_RET_IN_TRANSFER) + return + } dbWorld := player.GetDbWorld() dbScene := dbWorld.GetSceneById(req.SceneId) if dbScene == nil { @@ -26,8 +30,8 @@ func (g *Game) SceneTransToPointReq(player *model.Player, payloadMsg pb.Message) } unlock := dbScene.CheckPointUnlock(req.PointId) if !unlock { - g.SendError(cmd.SceneTransToPointRsp, player, &proto.SceneTransToPointRsp{}, proto.Retcode_RET_POINT_NOT_UNLOCKED) - return + // g.SendError(cmd.SceneTransToPointRsp, player, &proto.SceneTransToPointRsp{}, proto.Retcode_RET_POINT_NOT_UNLOCKED) + // return } pointDataConfig := gdconf.GetScenePointBySceneIdAndPointId(int32(req.SceneId), int32(req.PointId)) if pointDataConfig == nil { @@ -36,15 +40,15 @@ func (g *Game) SceneTransToPointReq(player *model.Player, payloadMsg pb.Message) } // 传送玩家 - g.TeleportPlayer(player, proto.EnterReason_ENTER_REASON_TRANS_POINT, req.SceneId, &model.Vector{ - X: pointDataConfig.TranPos.X, - Y: pointDataConfig.TranPos.Y, - Z: pointDataConfig.TranPos.Z, - }, &model.Vector{ - X: pointDataConfig.TranRot.X, - Y: pointDataConfig.TranRot.Y, - Z: pointDataConfig.TranRot.Z, - }, 0) + g.TeleportPlayer( + player, + proto.EnterReason_ENTER_REASON_TRANS_POINT, + req.SceneId, + &model.Vector{X: pointDataConfig.TranPos.X, Y: pointDataConfig.TranPos.Y, Z: pointDataConfig.TranPos.Z}, + &model.Vector{X: pointDataConfig.TranRot.X, Y: pointDataConfig.TranRot.Y, Z: pointDataConfig.TranRot.Z}, + 0, + 0, + ) sceneTransToPointRsp := &proto.SceneTransToPointRsp{ PointId: req.PointId, @@ -124,11 +128,15 @@ func (g *Game) MarkMapReq(player *model.Player, payloadMsg pb.Message) { posYInt = 300 } // 传送玩家 - g.TeleportPlayer(player, proto.EnterReason_ENTER_REASON_GM, req.Mark.SceneId, &model.Vector{ - X: float64(req.Mark.Pos.X), - Y: float64(posYInt), - Z: float64(req.Mark.Pos.Z), - }, new(model.Vector), 0) + g.TeleportPlayer( + player, + proto.EnterReason_ENTER_REASON_GM, + req.Mark.SceneId, + &model.Vector{X: float64(req.Mark.Pos.X), Y: float64(posYInt), Z: float64(req.Mark.Pos.Z)}, + new(model.Vector), + 0, + 0, + ) } } g.SendMsg(cmd.MarkMapRsp, player.PlayerID, player.ClientSeq, &proto.MarkMapRsp{}) @@ -247,15 +255,16 @@ func (g *Game) PlayerEnterDungeonReq(player *model.Player, payloadMsg pb.Message logger.Error("get scene lua config is nil, sceneId: %v, uid: %v", dungeonDataConfig.SceneId, player.PlayerID) return } - g.TeleportPlayer(player, proto.EnterReason_ENTER_REASON_DUNGEON_ENTER, uint32(dungeonDataConfig.SceneId), &model.Vector{ - X: float64(sceneLuaConfig.SceneConfig.BornPos.X), - Y: float64(sceneLuaConfig.SceneConfig.BornPos.Y), - Z: float64(sceneLuaConfig.SceneConfig.BornPos.Z), - }, &model.Vector{ - X: float64(sceneLuaConfig.SceneConfig.BornRot.X), - Y: float64(sceneLuaConfig.SceneConfig.BornRot.Y), - Z: float64(sceneLuaConfig.SceneConfig.BornRot.Z), - }, req.DungeonId) + sceneConfig := sceneLuaConfig.SceneConfig + g.TeleportPlayer( + player, + proto.EnterReason_ENTER_REASON_DUNGEON_ENTER, + uint32(dungeonDataConfig.SceneId), + &model.Vector{X: float64(sceneConfig.BornPos.X), Y: float64(sceneConfig.BornPos.Y), Z: float64(sceneConfig.BornPos.Z)}, + &model.Vector{X: float64(sceneConfig.BornRot.X), Y: float64(sceneConfig.BornRot.Y), Z: float64(sceneConfig.BornRot.Z)}, + req.DungeonId, + req.PointId, + ) rsp := &proto.PlayerEnterDungeonRsp{ DungeonId: req.DungeonId, @@ -274,11 +283,19 @@ func (g *Game) PlayerQuitDungeonReq(player *model.Player, payloadMsg pb.Message) if ctx == nil { return } - g.TeleportPlayer(player, proto.EnterReason_ENTER_REASON_DUNGEON_QUIT, 3, &model.Vector{ - X: ctx.OldPos.X, - Y: ctx.OldPos.Y, - Z: ctx.OldPos.Z, - }, new(model.Vector), 0) + pointDataConfig := gdconf.GetScenePointBySceneIdAndPointId(3, int32(ctx.OldDungeonPointId)) + if pointDataConfig == nil { + return + } + g.TeleportPlayer( + player, + proto.EnterReason_ENTER_REASON_DUNGEON_QUIT, + 3, + &model.Vector{X: pointDataConfig.TranPos.X, Y: pointDataConfig.TranPos.Y, Z: pointDataConfig.TranPos.Z}, + &model.Vector{X: pointDataConfig.TranRot.X, Y: pointDataConfig.TranRot.Y, Z: pointDataConfig.TranRot.Z}, + 0, + 0, + ) rsp := &proto.PlayerQuitDungeonRsp{ PointId: req.PointId, @@ -309,7 +326,7 @@ func (g *Game) GadgetInteractReq(player *model.Player, payloadMsg pb.Message) { logger.Error("get gadget data config is nil, gadgetId: %v, uid: %v", gadgetEntity.GetGadgetId(), player.PlayerID) return } - logger.Debug("[GadgetInteractReq] GadgetData: %+v, uid: %v", gadgetDataConfig, player.PlayerID) + logger.Debug("[GadgetInteractReq] GadgetData: %+v, EntityId: %v, uid: %v", gadgetDataConfig, entity.GetId(), player.PlayerID) interactType := proto.InteractType_INTERACT_NONE switch gadgetDataConfig.Type { case constant.GADGET_TYPE_GADGET: @@ -476,7 +493,11 @@ func (g *Game) doRandDropOnce(dropDataConfig *gdconf.DropData) map[int32]int32 { } // TeleportPlayer 传送玩家至地图上的某个位置 -func (g *Game) TeleportPlayer(player *model.Player, enterReason proto.EnterReason, sceneId uint32, pos, rot *model.Vector, dungeonId uint32) { +func (g *Game) TeleportPlayer( + player *model.Player, enterReason proto.EnterReason, + sceneId uint32, pos, rot *model.Vector, + dungeonId, dungeonPointId uint32, +) { // 传送玩家 newSceneId := sceneId oldSceneId := player.SceneId @@ -531,6 +552,6 @@ func (g *Game) TeleportPlayer(player *model.Player, enterReason proto.EnterReaso logger.Debug("player goto scene, scene: %v, pos: %v", player.SceneId, player.Pos) enterType = proto.EnterType_ENTER_GOTO } - playerEnterSceneNotify := g.PacketPlayerEnterSceneNotifyTp(player, enterType, enterReason, oldSceneId, oldPos, dungeonId) + playerEnterSceneNotify := g.PacketPlayerEnterSceneNotifyTp(player, enterType, enterReason, oldSceneId, oldPos, dungeonId, dungeonPointId) g.SendMsg(cmd.PlayerEnterSceneNotify, player.PlayerID, player.ClientSeq, playerEnterSceneNotify) } diff --git a/gs/model/stamina.go b/gs/model/stamina.go index 969d37b0..15510f41 100644 --- a/gs/model/stamina.go +++ b/gs/model/stamina.go @@ -11,7 +11,7 @@ type StaminaInfo struct { PlayerRestoreDelay uint8 // 玩家耐力回复延时 VehicleRestoreDelay uint8 // 载具耐力回复延时 LastSkillTime int64 // 最后释放技能的时间 - LastSkillChargeTime int64 // 最后执行技能耐力消耗的时间 + LastCostStaminaTime int64 // 最后执行技能耐力消耗的时间 DrownBackDelay uint8 // 溺水返回安全点延时 }