public static Packet Purchase(MeretMarketItem item, int itemIndex, int totalQuantity) { PacketWriter pWriter = PacketWriter.Of(SendOp.MERET_MARKET); pWriter.WriteEnum(MeretMarketMode.Purchase); pWriter.WriteByte((byte)totalQuantity); pWriter.WriteInt(item.MarketId); pWriter.WriteLong(); pWriter.WriteInt(1); pWriter.WriteInt(); pWriter.WriteLong(); pWriter.WriteInt(itemIndex); pWriter.WriteInt(totalQuantity); pWriter.WriteInt(); pWriter.WriteByte(); pWriter.WriteUnicodeString(""); pWriter.WriteUnicodeString(""); pWriter.WriteLong(item.SalePrice); pWriter.WriteByte(); pWriter.WriteByte(); pWriter.WriteInt(); pWriter.WriteInt(); pWriter.WriteInt(); pWriter.WriteInt(); return(pWriter); }
private static void HandleMarketItemPay(GameSession session, MeretMarketItem marketItem, int itemIndex, int totalQuantity) { switch (marketItem.TokenType) { case MeretMarketCurrencyType.Meret: if (!session.Player.Account.RemoveMerets(marketItem.SalePrice)) { return; } break; case MeretMarketCurrencyType.Meso: if (!session.Player.Wallet.Meso.Modify(marketItem.SalePrice)) { return; } break; } Item item = new Item(marketItem.ItemId) { Amount = marketItem.Quantity + marketItem.BonusQuantity, Rarity = marketItem.Rarity }; if (marketItem.Duration != 0) { item.ExpiryTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds() + Environment.TickCount + (marketItem.Duration * (24 * 60 * 60)); } InventoryController.Add(session, item, true); session.Send(MeretMarketPacket.Purchase(marketItem, itemIndex, totalQuantity)); }
private static void HandlePurchase(GameSession session, PacketReader packet) { byte quantity = packet.ReadByte(); int marketItemId = packet.ReadInt(); byte[] unk = packet.Read(12); int childMarketItemId = packet.ReadInt(); long unk2 = packet.ReadLong(); int itemIndex = packet.ReadInt(); int totalQuantity = packet.ReadInt(); int unk3 = packet.ReadInt(); byte unk4 = packet.ReadByte(); string unk5 = packet.ReadUnicodeString(); string unk6 = packet.ReadUnicodeString(); long price = packet.ReadLong(); MeretMarketItem marketItem = DatabaseManager.GetMeretMarketItem(marketItemId); if (marketItem == null) { return; } if (childMarketItemId == 0) { HandleMarketItemPay(session, marketItem, itemIndex, totalQuantity); } else { MeretMarketItem childItem = marketItem.AdditionalQuantities.FirstOrDefault(x => x.MarketId == childMarketItemId); HandleMarketItemPay(session, childItem, itemIndex, totalQuantity); } }
public static void WriteMeretMarketItem(PacketWriter pWriter, MeretMarketItem item) { pWriter.WriteInt(item.MarketId); pWriter.WriteByte(2); pWriter.WriteUnicodeString(item.ItemName); pWriter.WriteByte(1); pWriter.WriteInt(item.ParentMarketId); pWriter.WriteInt(254); pWriter.WriteInt(); // promo bool pWriter.WriteByte(2); pWriter.WriteEnum(item.Flag); pWriter.WriteEnum(item.TokenType); pWriter.WriteLong(item.Price); pWriter.WriteLong(item.SalePrice); pWriter.WriteByte(1); pWriter.WriteLong(item.SellBeginTime); pWriter.WriteLong(item.SellEndTime); pWriter.WriteEnum(item.JobRequirement); pWriter.WriteInt(3); pWriter.WriteBool(item.RestockUnavailable); pWriter.WriteInt(); pWriter.WriteByte(); pWriter.WriteShort(item.MinLevelRequirement); pWriter.WriteShort(item.MaxLevelRequirement); pWriter.WriteEnum(item.JobRequirement); pWriter.WriteInt(item.ItemId); pWriter.WriteByte(item.Rarity); pWriter.WriteInt(item.Quantity); pWriter.WriteInt(item.Duration); pWriter.WriteInt(item.BonusQuantity); pWriter.WriteInt(40300); pWriter.WriteInt(0); pWriter.WriteByte(0); pWriter.WriteEnum(item.PromoFlag); string bannerName = ""; if (item.Banner != null) { bannerName = item.Banner.Name; } pWriter.WriteMapleString(bannerName); pWriter.WriteMapleString(""); pWriter.WriteByte(); pWriter.WriteByte(0); pWriter.WriteInt(0); pWriter.WriteByte(0); pWriter.WriteInt(item.RequiredAchievementId); pWriter.WriteInt(item.RequiredAchievementGrade); pWriter.WriteInt(0); pWriter.WriteBool(item.PCCafe); pWriter.WriteByte(0); pWriter.WriteInt(0); }
public List <MeretMarketItem> FindAllByCategoryId(MeretMarketCategory category) { List <MeretMarketItem> items = new(); IEnumerable <dynamic> results = QueryFactory.Query(TableName).Where("category", (int)category).Get(); foreach (dynamic data in results) { MeretMarketItem meretMarketItem = ReadMeretMarketItem(data); if (meretMarketItem.BannerId != 0) { meretMarketItem.Banner = DatabaseManager.Banners.FindById(meretMarketItem.BannerId); } items.Add(meretMarketItem); } return(items); }
private static void PurchasePremiumItem(GameSession session, PacketReader packet, int marketItemId) { packet.ReadInt(); int childMarketItemId = packet.ReadInt(); long unk2 = packet.ReadLong(); int itemIndex = packet.ReadInt(); int totalQuantity = packet.ReadInt(); int unk3 = packet.ReadInt(); byte unk4 = packet.ReadByte(); string unk5 = packet.ReadUnicodeString(); string unk6 = packet.ReadUnicodeString(); long price = packet.ReadLong(); MeretMarketItem marketItem = DatabaseManager.MeretMarket.FindById(marketItemId); if (marketItem is null) { return; } if (childMarketItemId != 0) { marketItem = marketItem.AdditionalQuantities.FirstOrDefault(x => x.MarketId == childMarketItemId); if (marketItem is null) { return; } } if (!HandleMarketItemPay(session, marketItem.Price, marketItem.TokenType)) { return; } Item item = new(marketItem.ItemId) { Amount = marketItem.Quantity + marketItem.BonusQuantity, Rarity = marketItem.Rarity }; if (marketItem.Duration != 0) { item.ExpiryTime = TimeInfo.Now() + Environment.TickCount + marketItem.Duration * 24 * 60 * 60; } session.Player.Inventory.AddItem(session, item, true); session.Send(MeretMarketPacket.Purchase(marketItem.MarketId, 0, marketItem.Price, totalQuantity, itemIndex)); }