GetStoreItems was a stub returning an empty object, so every shop (Korolev / ICA / Osiris / QuickShop vendors) showed up empty. Build the store on the fly from the Blueprints title data: for the requested StoreId, list every item that declares an ItemShopsCraftingData entry for that store, converting its currency recipe ingredients into VirtualCurrencyPrices (SoftCurrency->SC, Aurum->AU, InsuranceCurrency->IN). Item-ingredient (crafting) entries are left to the crafting UI. Adds the StoreId/CatalogVersion fields to the request and the FGetStoreItemsResult / FStoreItem PlayFab response models. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Prospect.Server.Api.Models.Client.Data;
|
||||
|
||||
// PlayFab StoreItem: a single catalog item offered for sale in a store, with its prices.
|
||||
public class FStoreItem
|
||||
{
|
||||
/// <summary>
|
||||
/// [optional] Store specific custom data. The data only exists as part of this store; it is not transferred to item instances.
|
||||
/// </summary>
|
||||
[JsonPropertyName("CustomData")]
|
||||
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
|
||||
public object? CustomData { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// [optional] Intended display position for this item. Note that 0 is the first position and -1 is the last position.
|
||||
/// </summary>
|
||||
[JsonPropertyName("DisplayPosition")]
|
||||
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
|
||||
public uint? DisplayPosition { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Unique identifier of the item as it exists in the catalog - note that this must exactly match the ItemId from the catalog.
|
||||
/// </summary>
|
||||
[JsonPropertyName("ItemId")]
|
||||
public string ItemId { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// [optional] Override prices for this item for specific currencies.
|
||||
/// </summary>
|
||||
[JsonPropertyName("RealCurrencyPrices")]
|
||||
public Dictionary<string, uint> RealCurrencyPrices { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// [optional] Override prices for this item in virtual currencies and "RM" (the base Real Money purchase price, in USD pennies).
|
||||
/// </summary>
|
||||
[JsonPropertyName("VirtualCurrencyPrices")]
|
||||
public Dictionary<string, uint> VirtualCurrencyPrices { get; set; } = new();
|
||||
}
|
||||
@@ -1,8 +1,19 @@
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Text.Json.Serialization;
|
||||
using Prospect.Server.Api.Models.Client.Data;
|
||||
|
||||
namespace Prospect.Server.Api.Models.Client;
|
||||
|
||||
public class FGetStoreItems
|
||||
{
|
||||
}
|
||||
/// <summary>
|
||||
/// [optional] Catalog version to store items from. Use default catalog version if null.
|
||||
/// </summary>
|
||||
[JsonPropertyName("CatalogVersion")]
|
||||
public string? CatalogVersion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Unique identifier for the store which is being requested.
|
||||
/// </summary>
|
||||
[JsonPropertyName("StoreId")]
|
||||
public string? StoreId { get; set; }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
using System.Text.Json.Serialization;
|
||||
using Prospect.Server.Api.Models.Client.Data;
|
||||
|
||||
namespace Prospect.Server.Api.Models.Client;
|
||||
|
||||
public class FGetStoreItemsResult
|
||||
{
|
||||
/// <summary>
|
||||
/// [optional] The base catalog that this store is a part of.
|
||||
/// </summary>
|
||||
[JsonPropertyName("CatalogVersion")]
|
||||
public string? CatalogVersion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// [optional] Array of items which can be purchased from this store.
|
||||
/// </summary>
|
||||
[JsonPropertyName("Store")]
|
||||
public List<FStoreItem> Store { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// [optional] The ID of this store.
|
||||
/// </summary>
|
||||
[JsonPropertyName("StoreId")]
|
||||
public string? StoreId { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user