public static Asda2FastItemSlotRecord CreateRecord(byte panel, byte panelSlot, Asda2InventoryType invType, byte invSlot, short itemOrSkillId, int amount, uint ownerId, byte srcInfo)
        {
            var item = CreateRecord();

            item.PanelNum      = panel;
            item.PanelSlot     = panelSlot;
            item.InventoryType = (byte)invType;
            item.InventorySlot = invSlot;
            item.ItemOrSkillId = itemOrSkillId;
            item.Amount        = amount;
            item.OwnerId       = ownerId;
            item.SrcInfo       = srcInfo;
            return(item);
        }
        public static void SendMailMessageRequest(IRealmClient client, RealmPacketIn packet)
        {
            packet.ReadInt32();
            short slotInq = packet.ReadInt16();
            Asda2InventoryType asda2InventoryType = (Asda2InventoryType)packet.ReadByte();
            ushort             num = packet.ReadUInt16();
            uint   sendedGold      = packet.ReadUInt32();
            string str             = packet.ReadAsdaString(20, Locale.Start);
            string subject         = packet.ReadAsdaString(32, Locale.Start);
            string message         = packet.ReadAsdaString(126, Locale.Start);

            if (!Asda2EncodingHelper.IsPrueEnglish(message))
            {
                client.ActiveCharacter.SendOnlyEnglishCharactersAllowed("message");
                Asda2MailHandler.SendMailMessageSendedResponse(client, MailMessageSendedStatus.WrongInformation,
                                                               (Asda2Item)null);
            }
            else if (!Asda2EncodingHelper.IsPrueEnglish(subject))
            {
                client.ActiveCharacter.SendOnlyEnglishCharactersAllowed("subject");
                Asda2MailHandler.SendMailMessageSendedResponse(client, MailMessageSendedStatus.WrongInformation,
                                                               (Asda2Item)null);
            }
            else
            {
                Asda2Item asda2Item = asda2InventoryType == Asda2InventoryType.Shop
          ? client.ActiveCharacter.Asda2Inventory.GetShopShopItem(slotInq)
          : client.ActiveCharacter.Asda2Inventory.GetRegularItem(slotInq);
                if (client.ActiveCharacter.Money < 1001U || client.ActiveCharacter.Money - 1000U < sendedGold)
                {
                    Asda2MailHandler.SendMailMessageSendedResponse(client, MailMessageSendedStatus.IncifitientGold,
                                                                   (Asda2Item)null);
                }
                else
                {
                    Character       chr    = World.GetCharacter(str, false);
                    CharacterRecord chrRec = chr == null?CharacterRecord.GetRecordByName(str) : chr.Record;

                    if (chrRec == null)
                    {
                        Asda2MailHandler.SendMailMessageSendedResponse(client,
                                                                       MailMessageSendedStatus.RecipentNotFounded, (Asda2Item)null);
                    }
                    else
                    {
                        Asda2Item sendItem = (Asda2Item)null;
                        if (asda2Item != null)
                        {
                            if (asda2Item.IsSoulbound)
                            {
                                Asda2MailHandler.SendMailMessageSendedResponse(client,
                                                                               MailMessageSendedStatus.YouCantSendThisItem, (Asda2Item)null);
                                return;
                            }

                            if (asda2Item.Amount < (int)num)
                            {
                                client.ActiveCharacter.YouAreFuckingCheater("Tying to mail wrong item amount", 50);
                                Asda2MailHandler.SendMailMessageSendedResponse(client,
                                                                               MailMessageSendedStatus.WrongInformation, (Asda2Item)null);
                                return;
                            }

                            asda2Item.ModAmount(-(num == (ushort)0 ? 1 : (int)num));
                            sendItem = Asda2Item.CreateItem(asda2Item.Template, (Character)null,
                                                            num == (ushort)0 ? 1 : (int)num);
                            sendItem.Record.SaveLater();
                        }

                        client.ActiveCharacter.SubtractMoney(sendedGold + 1000U);
                        Log.Create(Log.Types.ItemOperations, LogSourceType.Character, client.ActiveCharacter.EntryId)
                        .AddAttribute("source", 0.0, "send_mail").AddItemAttributes(sendItem, "sent")
                        .AddItemAttributes(asda2Item, "source").AddAttribute("gold", (double)sendedGold, "")
                        .AddAttribute("receiver", (double)chrRec.EntityLowId, str).Write();
                        ServerApp <WCell.RealmServer.RealmServer> .IOQueue.AddMessage((Action)(() =>
                        {
                            Asda2MailMessage record = new Asda2MailMessage(subject, message, sendItem, sendedGold,
                                                                           chrRec.EntityLowId, client.ActiveCharacter.Name);
                            record.CreateLater();
                            if (chr == null)
                            {
                                return;
                            }
                            chr.MailMessages.Add(record.Guid, record);
                            chr.SendMailMsg(string.Format("You recieve new message from {0}. Subject {1}.",
                                                          (object)client.ActiveCharacter.Name, (object)record.Subject));
                            Asda2MailHandler.SendYouHaveNewMailResponse(chr.Client, 1);
                        }));

                        Asda2MailHandler.SendMailMessageSendedResponse(client, MailMessageSendedStatus.Ok, asda2Item);
                    }
                }
            }
        }
Exemple #3
0
        public static Asda2FastItemSlotRecord CreateRecord(byte panel, byte panelSlot, Asda2InventoryType invType,
                                                           byte invSlot, short itemOrSkillId, int amount, uint ownerId, byte srcInfo)
        {
            Asda2FastItemSlotRecord record = Asda2FastItemSlotRecord.CreateRecord();

            record.PanelNum      = panel;
            record.PanelSlot     = panelSlot;
            record.InventoryType = (byte)invType;
            record.InventorySlot = (short)invSlot;
            record.ItemOrSkillId = (int)itemOrSkillId;
            record.Amount        = amount;
            record.OwnerId       = ownerId;
            record.SrcInfo       = (short)srcInfo;
            return(record);
        }
Exemple #4
0
        public static void OpenPrivateShopRequest(IRealmClient client, RealmPacketIn packet)
        {
            if (client.ActiveCharacter.PrivateShop == null)
            {
                Asda2PrivateShopHandler.SendPrivateShopOpenedResponse(client, PrivateShopOpenedResult.Error,
                                                                      (Asda2ItemTradeRef[])null);
                client.ActiveCharacter.YouAreFuckingCheater("Trying to open not existing private shop", 2);
            }
            else
            {
                ++packet.Position;
                List <Asda2ItemTradeRef> asda2ItemTradeRefList = new List <Asda2ItemTradeRef>();
                for (int index = 0; index < 10; ++index)
                {
                    bool flag = false;
                    if (packet.ReadInt32() == 0)
                    {
                        flag = true;
                    }
                    Asda2InventoryType asda2InventoryType = (Asda2InventoryType)packet.ReadByte();
                    short num1 = packet.ReadInt16();
                    short num2 = packet.ReadInt16();
                    packet.Position += 4;
                    if (num1 < (short)0 || (int)num1 >= client.ActiveCharacter.Asda2Inventory.ShopItems.Length ||
                        num2 < (short)0)
                    {
                        flag = true;
                    }
                    int num3 = packet.ReadInt32();
                    if (!flag)
                    {
                        Asda2Item asda2Item = asda2InventoryType == Asda2InventoryType.Regular
                            ? client.ActiveCharacter.Asda2Inventory.RegularItems[(int)num1]
                            : client.ActiveCharacter.Asda2Inventory.ShopItems[(int)num1];
                        if (asda2Item == null)
                        {
                            Asda2PrivateShopHandler.SendPrivateShopOpenedResponse(client,
                                                                                  PrivateShopOpenedResult.ThereIsNoItemInfo, (Asda2ItemTradeRef[])null);
                            return;
                        }

                        if (asda2Item.Amount < (int)num2)
                        {
                            num2 = (short)asda2Item.Amount;
                        }
                        foreach (Asda2ItemTradeRef asda2ItemTradeRef in asda2ItemTradeRefList)
                        {
                            if (asda2ItemTradeRef.Item.InventoryType == asda2Item.InventoryType &&
                                (int)asda2ItemTradeRef.Item.Slot == (int)asda2Item.Slot)
                            {
                                flag = true;
                                break;
                            }
                        }

                        if (!flag)
                        {
                            asda2ItemTradeRefList.Add(new Asda2ItemTradeRef()
                            {
                                Item      = asda2Item,
                                Amount    = (int)num2,
                                Price     = num3,
                                TradeSlot = (byte)asda2ItemTradeRefList.Count <Asda2ItemTradeRef>()
                            });
                        }
                    }

                    packet.Position += 28;
                }

                string str = packet.ReadAsdaString(50, Locale.Start);
                if (!Asda2EncodingHelper.IsPrueEnglish(str))
                {
                    client.ActiveCharacter.SendOnlyEnglishCharactersAllowed("Shop title");
                    Asda2PrivateShopHandler.SendPrivateShopOpenedResponse(client, PrivateShopOpenedResult.Error,
                                                                          (Asda2ItemTradeRef[])null);
                }
                else
                {
                    int num = (int)client.ActiveCharacter.PrivateShop.StartTrade(asda2ItemTradeRefList, str);
                }
            }
        }