mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-03 04:36:03 +08:00
66 lines
2.3 KiB
C#
66 lines
2.3 KiB
C#
using EggLink.DanhengServer.GameServer.Game.Mission;
|
|
using EggLink.DanhengServer.GameServer.Game.Player;
|
|
using EggLink.DanhengServer.GameServer.Game.Scene.Entity;
|
|
using EggLink.DanhengServer.Kcp;
|
|
using EggLink.DanhengServer.Proto;
|
|
|
|
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene;
|
|
|
|
public class PacketSceneGroupRefreshScNotify : BasePacket
|
|
{
|
|
public PacketSceneGroupRefreshScNotify(PlayerInstance player, List<IGameEntity>? addEntity = null, List<IGameEntity>? removeEntity = null)
|
|
: base(CmdIds.SceneGroupRefreshScNotify)
|
|
{
|
|
var proto = new SceneGroupRefreshScNotify
|
|
{
|
|
FloorId = (uint)player.Data.FloorId,
|
|
DimensionId = (uint)((player.SceneInstance!.EntityLoader as StoryLineEntityLoader)?.DimensionId ?? 0)
|
|
};
|
|
Dictionary<int, GroupRefreshInfo> refreshInfo = [];
|
|
|
|
foreach (var e in removeEntity ?? [])
|
|
{
|
|
var group = new GroupRefreshInfo
|
|
{
|
|
GroupId = (uint)e.GroupID,
|
|
RefreshType = SceneGroupRefreshType.Loaded
|
|
};
|
|
group.RefreshEntity.Add(new SceneEntityRefreshInfo
|
|
{
|
|
DeleteEntity = (uint)e.EntityID
|
|
});
|
|
|
|
if (refreshInfo.TryGetValue(e.GroupID, out var value))
|
|
value.RefreshEntity.AddRange(group.RefreshEntity);
|
|
else
|
|
refreshInfo[e.GroupID] = group;
|
|
}
|
|
|
|
foreach (var e in addEntity ?? [])
|
|
{
|
|
var group = new GroupRefreshInfo
|
|
{
|
|
GroupId = (uint)e.GroupID,
|
|
RefreshType = SceneGroupRefreshType.Loaded
|
|
};
|
|
group.RefreshEntity.Add(new SceneEntityRefreshInfo
|
|
{
|
|
AddEntity = e.ToProto()
|
|
});
|
|
|
|
if (refreshInfo.TryGetValue(e.GroupID, out var value))
|
|
value.RefreshEntity.AddRange(group.RefreshEntity);
|
|
else
|
|
refreshInfo[e.GroupID] = group;
|
|
}
|
|
|
|
proto.GroupRefreshList.AddRange(refreshInfo.Values);
|
|
|
|
SetData(proto);
|
|
}
|
|
|
|
public PacketSceneGroupRefreshScNotify(PlayerInstance player, IGameEntity? addEntity = null, IGameEntity? removeEntity = null) :
|
|
this(player, addEntity == null ? [] : [addEntity], removeEntity == null ? [] : [removeEntity])
|
|
{
|
|
}
|
|
} |