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; } }