From dd855017b50b6604f0087cc67cda618a31dc420a Mon Sep 17 00:00:00 2001 From: Somebody Date: Sun, 11 May 2025 10:25:12 +0800 Subject: [PATCH] fix: the screen will be stuck when seal is killed --- .../MarbleGame/MarbleGameRoomInstance.cs | 16 ++++++++++------ .../MarbleGame/Seal/MarbleGameSealSyncData.cs | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/GameServer/Game/MultiPlayer/MarbleGame/MarbleGameRoomInstance.cs b/GameServer/Game/MultiPlayer/MarbleGame/MarbleGameRoomInstance.cs index 67f19fea..54688574 100644 --- a/GameServer/Game/MultiPlayer/MarbleGame/MarbleGameRoomInstance.cs +++ b/GameServer/Game/MultiPlayer/MarbleGame/MarbleGameRoomInstance.cs @@ -283,7 +283,10 @@ public class MarbleGameRoomInstance : BaseMultiPlayerGameRoomInstance Y = speed.Y }; - List syncData = []; + List syncData = + [ + new MarbleGameEffectSyncData(seal, MarbleFrameType.Effect, 101) + ]; foreach (var sealInst in Players.OfType().SelectMany(x => x.SealList.Values) .Where(x => x.OnStage)) @@ -490,15 +493,14 @@ public class MarbleGameRoomInstance : BaseMultiPlayerGameRoomInstance if (target.CurHp <= 0) { // die + target.CurHp = 0; // score if (Players.OfType().All(x => x.Score < 6)) { attackerPlayer.Score++; - syncData.Add(new MarbleGameScoreSyncData((Players[0] as MarbleGamePlayerInstance)!.Score, - (Players[1] as MarbleGamePlayerInstance)!.Score, MarbleFrameType.TeamScore)); + syncData.Add(new MarbleGameScoreSyncData((Players[0] as MarbleGamePlayerInstance)!.Score, + (Players[1] as MarbleGamePlayerInstance)!.Score, MarbleFrameType.TeamScore)); } - - target.CurHp = 0; } return syncData; @@ -538,6 +540,7 @@ public class MarbleGameRoomInstance : BaseMultiPlayerGameRoomInstance X = posXBaseValue * -1f, }; + syncData.RemoveAll(x => x.ToProto().Id == seal.Id); syncData.Add(new MarbleGameSealActionSyncData(seal, MarbleFrameType.Revive, time)); } @@ -568,6 +571,7 @@ public class MarbleGameRoomInstance : BaseMultiPlayerGameRoomInstance Y = sealB.Position.Y + moveVec.Y }; + syncData.RemoveAll(x => x.ToProto().Id == sealB.Id); syncData.Add(new MarbleGameSealActionSyncData(sealB, MarbleFrameType.Revive, time)); } } @@ -584,7 +588,7 @@ public class MarbleGameRoomInstance : BaseMultiPlayerGameRoomInstance { LobbyBasicInfo = { ParentLobby.Players.Select(x => x.ToProto()) }, CurActionTeamType = CurMoveTeamType, - LevelId = 101, + LevelId = 100, TeamAPlayer = (uint)Players[0].LobbyPlayer.Player.Uid, TeamBPlayer = (uint)Players[1].LobbyPlayer.Player.Uid, TeamARank = 1, diff --git a/GameServer/Game/MultiPlayer/MarbleGame/Seal/MarbleGameSealSyncData.cs b/GameServer/Game/MultiPlayer/MarbleGame/Seal/MarbleGameSealSyncData.cs index 63b4b03c..fb0974a7 100644 --- a/GameServer/Game/MultiPlayer/MarbleGame/Seal/MarbleGameSealSyncData.cs +++ b/GameServer/Game/MultiPlayer/MarbleGame/Seal/MarbleGameSealSyncData.cs @@ -38,6 +38,21 @@ public class MarbleGameHpChangeSyncData(MarbleGameSealInstance inst, MarbleFrame } } +public class MarbleGameEffectSyncData(MarbleGameSealInstance inst, MarbleFrameType frameType, int skillId, float time = 0f) : MarbleGameSealSyncData(inst, frameType) +{ + public override MarbleGameSyncData ToProto() + { + return new MarbleGameSyncData + { + FrameType = FrameType, + Id = (uint)Instance.Id, + Time = time, + SealSkillId = (uint)skillId, + CollisionPosition = new MarbleSealVector() + }; + } +} + public class MarbleGameSealSyncData(MarbleGameSealInstance inst, MarbleFrameType frameType) : BaseMarbleGameSyncData { public MarbleGameSealInstance Instance { get; set; } = inst.Clone();