private static void HandleRelistItem(GameSession session, PacketReader packet) { long ugcMarketItemId = packet.ReadLong(); long price = packet.ReadLong(); bool promote = packet.ReadBool(); List <string> tags = packet.ReadUnicodeString().Split(",").ToList(); string description = packet.ReadUnicodeString(); long listingFee = packet.ReadLong(); UGCMarketItem item = GameServer.UGCMarketManager.FindItemById(ugcMarketItemId); if (item is null || item.SellerCharacterId != session.Player.CharacterId || item.ListingExpirationTimestamp < TimeInfo.Now()) { return; } long totalFee = GetListingFee(session.Player.CharacterId, promote); if (!HandleMarketItemPay(session, totalFee, MeretMarketCurrencyType.Meret)) { return; } item.Price = price; item.ListingExpirationTimestamp = long.Parse(ConstantsMetadataStorage.GetConstant("UGCShopSaleDay")) * 86400 + TimeInfo.Now(); if (promote) { item.PromotionExpirationTimestamp = long.Parse(ConstantsMetadataStorage.GetConstant("UGCShopAdHour")) * 3600 + item.ListingExpirationTimestamp; } item.Status = UGCMarketListingStatus.Active; item.Description = description; item.Tags = tags; DatabaseManager.UGCMarketItems.Update(item); session.Send(MeretMarketPacket.RelistItem(item)); }
private static void PurchaseUGCItem(GameSession session, long ugcMarketItemId) { UGCMarketItem marketItem = GameServer.UGCMarketManager.FindItemById(ugcMarketItemId); if (marketItem is null || marketItem.ListingExpirationTimestamp < TimeInfo.Now()) { return; } if (!HandleMarketItemPay(session, marketItem.Price, MeretMarketCurrencyType.Meret)) { return; } marketItem.SalesCount++; DatabaseManager.UGCMarketItems.Update(marketItem); _ = new UGCMarketSale(marketItem.Price, marketItem.Item.UGC.Name, marketItem.SellerCharacterId); Item item = new(marketItem.Item) { CreationTime = TimeInfo.Now() }; item.Uid = DatabaseManager.Items.Insert(item); session.Player.Inventory.AddItem(session, item, true); session.Send(MeretMarketPacket.Purchase(0, marketItem.Id, marketItem.Price, 1)); }
public static PacketWriter RelistItem(UGCMarketItem item) { PacketWriter pWriter = PacketWriter.Of(SendOp.MERET_MARKET); pWriter.Write(MeretMarketMode.RelistItem); WriteUgcMarketItem(pWriter, item); return(pWriter); }
public void Update(UGCMarketItem item) { QueryFactory.Query(TableName).Where("id", item.Id).Update(new { sales_count = item.SalesCount, status = (byte)item.Status, promotion_expiration_time = item.PromotionExpirationTimestamp, listing_expiration_time = item.ListingExpirationTimestamp, tags = JsonConvert.SerializeObject(item.Tags), description = item.Description, price = item.Price }); }
public static PacketWriter UpdateExpiration(UGCMarketItem item) { PacketWriter pWriter = PacketWriter.Of(SendOp.MERET_MARKET); pWriter.Write(MeretMarketMode.UpdateExpiration); pWriter.WriteInt(); pWriter.WriteLong(item.Id); pWriter.WriteLong(item.Id); pWriter.Write(item.Status); pWriter.WriteByte(); pWriter.WriteLong(item.ListingExpirationTimestamp); return(pWriter); }
private static void HandleRemoveListing(GameSession session, PacketReader packet) { packet.ReadInt(); // 0 long ugcMarketItemId = packet.ReadLong(); packet.ReadLong(); // duplicate id read? UGCMarketItem item = GameServer.UGCMarketManager.FindItemById(ugcMarketItemId); if (item is null || item.SellerCharacterId != session.Player.CharacterId) { return; } session.Send(MeretMarketPacket.RemoveListing(item.Id)); DatabaseManager.UGCMarketItems.Delete(item.Id); GameServer.UGCMarketManager.RemoveListing(item); }
public long Insert(UGCMarketItem item) { return(QueryFactory.Query(TableName).InsertGetId <long>(new { id = item.Id, price = item.Price, item_uid = item.Item.Uid, status = item.Status, creation_time = item.CreationTimestamp, listing_expiration_time = item.ListingExpirationTimestamp, promotion_expiration_time = item.PromotionExpirationTimestamp, seller_account_id = item.SellerAccountId, seller_character_id = item.SellerCharacterId, seller_character_name = item.SellerCharacterName, sales_count = item.SalesCount, description = item.Description, tags = JsonConvert.SerializeObject(item.Tags) })); }
private static void HandleUnlistItem(GameSession session, PacketReader packet) { packet.ReadInt(); // 0 long ugcMarketItemId = packet.ReadLong(); packet.ReadLong(); // duplicate id read? UGCMarketItem item = GameServer.UGCMarketManager.FindItemById(ugcMarketItemId); if (item is null || item.SellerCharacterId != session.Player.CharacterId) { return; } item.ListingExpirationTimestamp = long.Parse(ConstantsMetadataStorage.GetConstant("UGCShopExpiredListingRemovalHour")) * 3600 + TimeInfo.Now(); item.PromotionExpirationTimestamp = 0; item.Status = UGCMarketListingStatus.Expired; DatabaseManager.UGCMarketItems.Update(item); session.Send(MeretMarketPacket.UpdateExpiration(item)); }
private static void WriteUgcMarketItem(PacketWriter pWriter, UGCMarketItem item, UGCMarketItemHomeCategory category = UGCMarketItemHomeCategory.None) { pWriter.WriteByte(1); pWriter.WriteInt(); pWriter.WriteLong(item.Id); pWriter.WriteInt(); pWriter.WriteLong(item.Id); pWriter.Write(item.Status); pWriter.WriteInt(item.Item.Id); pWriter.WriteInt(35); pWriter.WriteByte(); pWriter.WriteInt(); pWriter.WriteLong(item.Price); pWriter.WriteInt(); pWriter.WriteInt(); pWriter.WriteInt(item.SalesCount); pWriter.WriteInt(); pWriter.WriteLong(item.CreationTimestamp); pWriter.WriteLong(item.CreationTimestamp); pWriter.WriteLong(item.ListingExpirationTimestamp); // TODO: Change name pWriter.WriteInt(); pWriter.WriteLong(item.PromotionExpirationTimestamp); pWriter.WriteLong(); pWriter.WriteLong(item.CreationTimestamp); pWriter.WriteInt(2); pWriter.WriteLong(item.SellerAccountId); pWriter.WriteLong(item.SellerCharacterId); pWriter.WriteUnicodeString(); pWriter.WriteUnicodeString(item.SellerCharacterName); pWriter.WriteUnicodeString(string.Join(",", item.Tags.ToArray()) + ", " + item.Item.UGC.Name); pWriter.WriteUnicodeString(item.Description); pWriter.WriteUnicodeString(item.Item.UGC.CharacterName); pWriter.WriteLong(item.Item.UGC.Uid); pWriter.WriteUnicodeString(item.Item.UGC.Guid.ToString()); pWriter.WriteUnicodeString(item.Item.UGC.Name); pWriter.WriteByte(1); pWriter.WriteInt(2); pWriter.WriteLong(item.Item.UGC.AccountId); pWriter.WriteLong(item.Item.UGC.CharacterId); pWriter.WriteUnicodeString(item.Item.UGC.CharacterName); pWriter.WriteLong(item.Item.UGC.CreationTime); pWriter.WriteUnicodeString(item.Item.UGC.Url); pWriter.WriteByte(); pWriter.WriteLong(); pWriter.WriteInt(); pWriter.WriteInt(); pWriter.WriteUnicodeString(); pWriter.WriteUnicodeString(); pWriter.WriteString(); pWriter.WriteInt(); pWriter.WriteLong(); pWriter.WriteLong(); pWriter.WriteUnicodeString(); pWriter.WriteLong(); pWriter.WriteInt(); pWriter.WriteInt(); pWriter.WriteInt(); pWriter.WriteLong(); pWriter.WriteInt(); pWriter.WriteLong(); pWriter.WriteLong(); pWriter.WriteUnicodeString(); pWriter.Write(category); }
public void RemoveListing(UGCMarketItem item) { Items.Remove(item.Id); }
public void AddListing(UGCMarketItem item) { Items.Add(item.Id, item); }