Files
caliverse_server/GameServer/Contents/Party/PacketHandler/LeavePartyPacketHandler.cs
2025-05-01 07:20:41 +09:00

64 lines
2.1 KiB
C#

using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
using PARTY_GUID = System.String;
using USER_GUID = System.String;
namespace GameServer.PacketHandler;
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.LeavePartyReq), typeof(LeavePartyPacketHandler), typeof(GameLoginListener))]
public class LeavePartyPacketHandler : PacketRecvHandler
{
private static void send_S2C_ACK_LEAVE_PARTY(Player owner, Result result)
{
var ack_packet = new ClientToGame
{
Response = new ClientToGameRes
{
ErrorCode = result.ErrorCode,
LeavePartyRes = new()
}
};
GameServerApp.getServerLogic().onSendPacket(owner, ack_packet);
}
public override async Task<Result> onProcessPacket(ISession entityWithSession, IMessage recvMessage)
{
var result = new Result();
string err_msg;
var entity_player = entityWithSession as Player;
NullReferenceCheckHelper.throwIfNull(entity_player, () => "player is null !!!");
// 1. 기본 정보 체크
var request = (recvMessage as ClientToGame)?.Request.LeavePartyReq;
if (null == request)
{
err_msg = $"Failed to get request type !!! : {nameof(ClientToGame.Request.LeavePartyReq)}";
result.setFail(ServerErrorCode.InvalidArgument, err_msg);
Log.getLogger().error(result.toBasicString());
send_S2C_ACK_LEAVE_PARTY(entity_player, result);
return result;
}
// 2. 파티 떠나기 처리
var personal_party_action = entity_player.getEntityAction<PersonalPartyAction>();
result = await personal_party_action.leaveParty();
send_S2C_ACK_LEAVE_PARTY(entity_player, result);
await QuestManager.It.QuestCheck(entity_player, new QuestParty(EQuestEventTargetType.PARTY, EQuestEventNameType.EXITED));
return result;
}
}