Ejemplo n.º 1
0
        public override async Task ExecuteAsync(PclPacket getGiftPacket, ClientSession clientSession)
        {
            var isCopy = getGiftPacket.Type == 2;
            var mail   = await _mailHttpClient.GetGiftAsync(getGiftPacket.GiftId, clientSession.Character.VisualId, isCopy).ConfigureAwait(false);

            if (mail == null)
            {
                return;
            }

            if ((getGiftPacket.Type == 4) && (mail.ItemInstance != null))
            {
                var itemInstance = await _itemInstanceDao.FirstOrDefaultAsync(s => s !.Id == mail.ItemInstance.Id).ConfigureAwait(false);

                var item = _itemProvider.Convert(itemInstance !);
                item.Id = Guid.NewGuid();
                var newInv = clientSession.Character.InventoryService
                             .AddItemToPocket(InventoryItemInstance.Create(item, clientSession.Character.CharacterId))
                             .FirstOrDefault();
                if (newInv != null)
                {
                    await clientSession.SendPacketAsync(clientSession.Character.GenerateSay(
                                                            string.Format(
                                                                GameLanguage.Instance.GetMessageFromKey(LanguageKey.ITEM_RECEIVED,
                                                                                                        clientSession.Account.Language),
                                                                newInv.ItemInstance !.Item !.Name, newInv.ItemInstance.Amount), SayColorType.Green)).ConfigureAwait(false);

                    await clientSession.SendPacketAsync(
                        new ParcelPacket { Type = 2, Unknown = 1, Id = (short)getGiftPacket.GiftId }).ConfigureAwait(false);

                    await _mailHttpClient.DeleteGiftAsync(getGiftPacket.GiftId, clientSession.Character.VisualId, isCopy).ConfigureAwait(false);
                }
                else
                {
                    await clientSession.SendPacketAsync(new ParcelPacket { Type = 5, Unknown = 1, Id = 0 }).ConfigureAwait(false);

                    await clientSession.SendPacketAsync(new MsgPacket
                    {
                        Message = GameLanguage.Instance.GetMessageFromKey(LanguageKey.NOT_ENOUGH_PLACE,
                                                                          clientSession.Account.Language),
                        Type = 0
                    }).ConfigureAwait(false);
                }
            }
            else if (getGiftPacket.Type == 5)
            {
                await clientSession.SendPacketAsync(new ParcelPacket { Type = 7, Unknown = 1, Id = (short)getGiftPacket.GiftId }).ConfigureAwait(false);

                await _mailHttpClient.DeleteGiftAsync(getGiftPacket.GiftId, clientSession.Character.VisualId, isCopy).ConfigureAwait(false);
            }
        }
        public override async Task ExecuteAsync(PstClientPacket pstClientPacket, ClientSession clientSession)
        {
            var isCopy = pstClientPacket.Type == 2;
            var mail   = await _mailHttpClient.GetGiftAsync(pstClientPacket.Id, clientSession.Character.VisualId, isCopy).ConfigureAwait(false);

            switch (pstClientPacket.ActionType)
            {
            case 3:
                if (mail == null)
                {
                    return;
                }

                var patch = new JsonPatch(PatchOperation.Replace(JsonPointer.Create <MailDto>(o => o.IsOpened), true.AsJsonElement()));
                await _mailHttpClient.ViewGiftAsync(mail.MailDto.MailId, patch).ConfigureAwait(false);

                await clientSession.SendPacketAsync(mail.GeneratePostMessage(pstClientPacket.Type)).ConfigureAwait(false);

                break;

            case 2:
                if (mail == null)
                {
                    return;
                }

                await _mailHttpClient.DeleteGiftAsync(pstClientPacket.Id, clientSession.Character.VisualId, isCopy).ConfigureAwait(false);

                await clientSession.SendPacketAsync(
                    clientSession.Character.GenerateSay(
                        GameLanguage.Instance.GetMessageFromKey(LanguageKey.MAIL_DELETED,
                                                                clientSession.Account.Language),
                        SayColorType.Purple)).ConfigureAwait(false);

                break;

            case 1:
                if (string.IsNullOrEmpty(pstClientPacket.Text) || string.IsNullOrEmpty(pstClientPacket.Title))
                {
                    return;
                }

                var dest = await _characterDao.FirstOrDefaultAsync(s => s.Name == pstClientPacket.ReceiverName).ConfigureAwait(false);

                if (dest != null)
                {
                    await _mailHttpClient.SendMessageAsync(clientSession.Character, dest.CharacterId, pstClientPacket.Title,
                                                           pstClientPacket.Text).ConfigureAwait(false);

                    await clientSession.SendPacketAsync(clientSession.Character.GenerateSay(
                                                            GameLanguage.Instance.GetMessageFromKey(
                                                                LanguageKey.MAILED,
                                                                clientSession.Account.Language), SayColorType.Yellow)).ConfigureAwait(false);
                }
                else
                {
                    await clientSession.SendPacketAsync(
                        clientSession.Character.GenerateSay(
                            GameLanguage.Instance.GetMessageFromKey(LanguageKey.USER_NOT_FOUND,
                                                                    clientSession.Account.Language),
                            SayColorType.Yellow)).ConfigureAwait(false);
                }

                break;

            default:
                return;
            }
        }