using LiteNetLib; using MMOserver.Game.Channel; using MMOserver.Packet; using ProtoBuf; using ServerLib.Packet; using ServerLib.Service; namespace MMOserver.Game.Service; /* * 플레이어 위치/방향 업데이트 핸들러 */ public partial class GameServer : ServerBase { private void OnTransformPlayer(NetPeer peer, int hashKey, byte[] payload) { TransformPlayerPacket packet = Serializer.Deserialize(new ReadOnlyMemory(payload)); ChannelManager cm = ChannelManager.Instance; int channelId = cm.HasUser(hashKey); if (channelId < 0) { return; } // 채널 내 플레이어 위치/방향 상태 갱신 Player? player = cm.GetChannel(channelId).GetPlayer(hashKey); if (player == null) { return; } player.PosX = packet.Position.X; player.PosY = packet.Position.Y; player.PosZ = packet.Position.Z; player.RotY = packet.RotY; // 같은 맵 유저들에게 위치/방향 브로드캐스트 (나 제외) byte[] data = PacketSerializer.Serialize((ushort)PacketCode.TRANSFORM_PLAYER, packet); BroadcastToMap(channelId, player.CurrentMapId, data, peer, DeliveryMethod.Unreliable); } }