using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; namespace GameServer.PacketHandler; [PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.C2GS_REQ_UGQ_FIND_NPC), typeof(FindUgqNpcPacketHandler), typeof(GameLoginListener))] public class FindUgqNpcPacketHandler : PacketRecvHandler { public override async Task onProcessPacket(ISession session, IMessage recvMessage) { var result = new Result(); var player = session as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!"); var req_msg = recvMessage as ClientToGame; NullReferenceCheckHelper.throwIfNull(req_msg, () => $"req_msg is null !!! - {player.toBasicString()}"); var owner_guid = req_msg.Request.ReqUgqFindNpc.OwnerGuid; var ugq_npc_meta_guid = req_msg.Request.ReqUgqFindNpc.NpcGuid; (result, var npc_attrib) = await UgcNpcDoc.findUgcNpc(owner_guid, ugq_npc_meta_guid); send_GS2C_ACK_UGQ_FIND_NPC(player, result, npc_attrib); return result; } public static Result send_GS2C_ACK_UGQ_FIND_NPC(Player player, Result result, UgcNpcAttrib? npcAttrib) { ClientToGame ack_packet = new(); ack_packet.Response = new(); ack_packet.Response.ErrorCode = result.ErrorCode; ack_packet.Response.AckUgqFindNpc= new(); if (npcAttrib is not null) { ack_packet.Response.AckUgqFindNpc.UgcNpc = UgqMetaHelper.copyToUgcNpc(npcAttrib); } var server_logic = GameServerApp.getServerLogic(); if (false == server_logic.onSendPacket(player, ack_packet)) { var err_msg = $"send_GS2C_ACK_UGQ_FIND_NPC Fail !!! : owner:{player.toBasicString()}"; result.setFail(ServerErrorCode.ProudNetException, err_msg); Log.getLogger().error(result.toBasicString()); return result; } return result; } }