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);
 }
示例#10
0
 public void RemoveListing(UGCMarketItem item)
 {
     Items.Remove(item.Id);
 }
示例#11
0
 public void AddListing(UGCMarketItem item)
 {
     Items.Add(item.Id, item);
 }