fix: cannot exit raid scene

This commit is contained in:
Somebody
2025-06-06 17:35:07 +08:00
committed by StopWuyu
parent cb59418922
commit 855005150f
4 changed files with 47 additions and 7 deletions

View File

@@ -834,7 +834,7 @@ public class PlayerInstance(PlayerData data)
Data.Pos = pos;
Data.Rot = rot;
var notSendMove = true;
if (planeId != Data.PlaneId || floorId != Data.FloorId || entryId != Data.EntryId || SceneInstance == null)
if (planeId != Data.PlaneId || floorId != Data.FloorId || entryId != Data.EntryId || SceneInstance == null || !mapTp)
{
if (SceneInstance != null)
await SceneInstance.OnDestroy();

View File

@@ -61,12 +61,12 @@ public class RaidManager : BasePlayerManager
#region Player Action
public async ValueTask EnterRaid(int raidId, int worldLevel, List<int>? avatarList = null, bool enterSaved = false)
public async ValueTask<RaidRecord?> EnterRaid(int raidId, int worldLevel, List<int>? avatarList = null, bool enterSaved = false)
{
if (RaidData.CurRaidId != 0) return;
if (RaidData.CurRaidId != 0) return null;
GameData.RaidConfigData.TryGetValue(raidId * 100 + worldLevel, out var excel);
if (excel == null) return; // not exist
if (excel == null) return null; // not exist
RaidData.RaidRecordDatas.TryGetValue(raidId, out var dict);
dict ??= [];
@@ -177,6 +177,7 @@ public class RaidManager : BasePlayerManager
}
await Player.SendPacket(new PacketRaidInfoNotify(record));
return record;
}
public async ValueTask CheckIfLeaveRaid()

View File

@@ -1,4 +1,5 @@
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Raid;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Raid;
@@ -11,10 +12,13 @@ public class HandlerStartRaidCsReq : Handler
var req = StartRaidCsReq.Parser.ParseFrom(data);
var player = connection.Player!;
await player.RaidManager!.EnterRaid((int)req.RaidId, (int)req.WorldLevel,
var record = await player.RaidManager!.EnterRaid((int)req.RaidId, (int)req.WorldLevel,
req.AvatarList.Select(x => (int)x).ToList(),
req.IsSave == 1);
await connection.SendPacket(CmdIds.StartRaidScRsp);
if (record == null)
await connection.SendPacket(new PacketStartRaidScRsp(Retcode.RetReqParaInvalid));
else
await connection.SendPacket(new PacketStartRaidScRsp(record, player));
}
}

View File

@@ -0,0 +1,35 @@
using EggLink.DanhengServer.Database.Scene;
using EggLink.DanhengServer.GameServer.Game.Player;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Raid;
public class PacketStartRaidScRsp : BasePacket
{
public PacketStartRaidScRsp(RaidRecord record, PlayerInstance player) : base(CmdIds.StartRaidScRsp)
{
var proto = new StartRaidScRsp
{
Scene = new RaidPlayerData
{
Lineup = player.LineupManager!.GetCurLineup()!.ToProto(),
RaidId = (uint)record.RaidId,
RaidSceneInfo = player.SceneInstance!.ToProto(),
WorldLevel = (uint)record.WorldLevel
}
};
SetData(proto);
}
public PacketStartRaidScRsp(Retcode ret) : base(CmdIds.StartRaidScRsp)
{
var proto = new StartRaidScRsp
{
Retcode = (uint)ret
};
SetData(proto);
}
}