Exemplo n.º 1
0
    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));
    }
Exemplo n.º 2
0
    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));
    }
Exemplo n.º 3
0
    public static PacketWriter RelistItem(UgcMarketItem item)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.MeretMarket);

        pWriter.Write(MeretMarketMode.RelistItem);
        WriteUgcMarketItem(pWriter, item);
        return(pWriter);
    }
Exemplo n.º 4
0
 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
     });
 }
Exemplo n.º 5
0
    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);
    }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
0
 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)
     }));
 }
Exemplo n.º 8
0
    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));
    }
Exemplo n.º 9
0
 public void RemoveListing(UgcMarketItem item)
 {
     Items.Remove(item.MarketId);
 }
Exemplo n.º 10
0
 public void AddListing(UgcMarketItem item)
 {
     Items.Add(item.MarketId, item);
 }
Exemplo n.º 11
0
 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);
 }