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.MarketId, marketItem.Price, 1)); }
public static PacketWriter RelistItem(UgcMarketItem item) { PacketWriter pWriter = PacketWriter.Of(SendOp.MeretMarket); pWriter.Write(MeretMarketMode.RelistItem); WriteUgcMarketItem(pWriter, item); return(pWriter); }
public void Update(UgcMarketItem item) { QueryFactory.Query(TableName).Where("id", item.MarketId).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.MeretMarket); pWriter.Write(MeretMarketMode.UpdateExpiration); pWriter.WriteInt(); pWriter.WriteLong(item.MarketId); pWriter.WriteLong(item.MarketId); 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.MarketId)); DatabaseManager.UgcMarketItems.Delete(item.MarketId); GameServer.UgcMarketManager.RemoveListing(item); }
public long Insert(UgcMarketItem item) { return(QueryFactory.Query(TableName).InsertGetId <long>(new { id = item.MarketId, 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)); }
public void RemoveListing(UgcMarketItem item) { Items.Remove(item.MarketId); }
public void AddListing(UgcMarketItem item) { Items.Add(item.MarketId, item); }
private static void WriteUgcMarketItem(PacketWriter pWriter, UgcMarketItem item, UgcMarketItemHomeCategory category = UgcMarketItemHomeCategory.None) { pWriter.WriteByte(1); pWriter.WriteInt(); pWriter.WriteLong(item.MarketId); pWriter.WriteInt(); pWriter.WriteLong(item.MarketId); 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); 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); }