예제 #1
0
        public static void OnQueryGetMailItem(WorldClient client, INetPacketStream packet)
        {
            var onQueryGetMailItem    = new QueryGetMailItemPacket(packet);
            var queryGetMailItemEvent = new QueryGetMailItemEventArgs(onQueryGetMailItem.MailId);

            client.Player.NotifySystem <MailboxSystem>(queryGetMailItemEvent);
        }
예제 #2
0
        private void GetMailItem(IPlayerEntity player, QueryGetMailItemEventArgs e)
        {
            var database = DependencyContainer.Instance.Resolve <IDatabase>();
            var mail     = database.Mails.Get(x => x.Id == e.MailId && x.ReceiverId == player.PlayerData.Id);

            if (mail is null)
            {
                return;
            }

            if (mail.HasReceivedItem)
            {
                return;
            }

            if (!player.Inventory.HasAvailableSlots())
            {
                WorldPacketFactory.SendDefinedText(player, DefineText.TID_GAME_LACKSPACE);
                return;
            }

            mail.HasReceivedItem = true;
            int availableSlot = player.Inventory.GetAvailableSlot();

            player.Inventory.Items[availableSlot] = new Item(mail.Item);
            database.Complete();
            WorldPacketFactory.SendRemoveMail(player, mail, RemovedFromMail.Item);
        }