Files
a301_mmo_game_server/MMOTestServer/MMOserver/Game/Service/StatePlayerHandler.cs

43 lines
1.2 KiB
C#

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 OnStatePlayer(NetPeer peer, int hashKey, byte[] payload)
{
StatePlayerPacket packet = Serializer.Deserialize<StatePlayerPacket>(new ReadOnlyMemory<byte>(payload));
ChannelManager cm = ChannelManager.Instance;
int channelId = cm.HasUser(hashKey);
if (channelId < 0)
{
return;
}
// 채널 내 플레이어 HP/MP 상태 갱신
Player? player = cm.GetChannel(channelId).GetPlayer(hashKey);
if (player == null)
{
return;
}
player.Hp = packet.Hp;
player.MaxHp = packet.MaxHp;
player.Mp = packet.Mp;
player.MaxMp = packet.MaxMp;
// 같은 맵 유저들에게 스테이트 브로드캐스트 (나 제외)
byte[] data = PacketSerializer.Serialize((ushort)PacketCode.STATE_PLAYER, packet);
BroadcastToMap(channelId, player.CurrentMapId, data, peer);
}
}