# Item sales / buy value — static map of the model (for tracking across updates) Goal: locate an item's **sell value / buy price** in the static files. **Status:** same situation as [weapon damage](WEAPON_DAMAGE.md). The price *model* is fully mapped statically (below). The actual *numbers* are **not** in any client asset — they live in the **PlayFab Economy catalog** (server-side) and reach the client as network DTOs. See [BACKEND_PLAYFAB.md](BACKEND_PLAYFAB.md) for how to acquire them at runtime without touching the game process (BattlEye-safe). ## Price model (all static, in `il2cpp/dump.cs`) A price is **"N units of a currency item"**, not a bare number: | Type | Fields | Role | |---|---|---| | `PriceDto` | `string ItemDefinition`, `int Amount` | one price leg = *Amount* of currency-item *ItemDefinition* | | `ItemDto` | `List SellPrice` | what the item **sells** for | | `ShopItemDto` | `string DefinitionName`, `int Amount`, `List BuyPrice` | what a shop **sells** to you / its **buy** cost | | `ShopItemSlotModel` (UI) | `int price`, `int requiredCurrencyAmount`, `string priceCurrencyItemName`, `bool isForSale`, `bool hasPrice`, `bool isTradable` | tooltip values, read off the DTO | | `PriceDataComponent : BaseLongValueComponent` (TypeDefIndex 5822, `IItemContextComponent`) | `long value @+0x10` | per-item price as an Entitas component — structurally identical to the `DamageXxxDataComponent` pattern | | `TransactionCurrencyData` | `Sprite sprite`, `int balance`, `Color color` | the wallet/currency shown in the store UI | | `PawnShopDeliveryRewardDataComponent` | `string rewardItem`, `int rewardCount` | pawn-shop turn-in reward | The currency item is **Crowns** (`item_coinCrown`) — the in-game money (the test conveyor `1x item_wineBox → 1000x item_coinCrown` mints it). *(Currency identity inferred from the item registry + that it's the only "coin" item; not yet confirmed against a live `PriceDto`.)* Store plumbing: `StoreBuyContainer`, `StoreSellContainer`, `LobbyStoreModule`, `StoreData`, `ShopInventoryContainer` — all under `Hologryph.Sand.Client.MainMenu.Ui.Store` (the **lobby** store, i.e. between-runs, not in-world). ## The numbers are not in any asset (verified, same three ways as damage) | Check | Result | |---|---| | `PriceDataComponent` across all 1446 EntityBlueprints (`bundle/component_census.py Price`) | **0** — not authored on any item | | `PawnShop*` across all 1446 blueprints | 0 | | `configuration_assets_all.bundle` MonoBehaviour classes (15 total) | no store/price/economy/shop config — only world/biome/loot/contract configs | | `CheatItemDefinitionsData` item defs | `{Name, Type, StorageStack}` — no price field | The giveaway is the naming: prices travel as **`...Dto`** (data-transfer objects) through `LobbyStoreModule` — they are delivered by the backend, not baked into the client. So sales value is **server-authoritative**, exactly like weapon damage. ## Re-deriving / tracking - Diff the model across patches: re-locate `PriceDto`, `ItemDto.SellPrice`, `ShopItemDto.BuyPrice`, `PriceDataComponent` by signature. - Get the actual numbers: query the PlayFab catalog — see [BACKEND_PLAYFAB.md](BACKEND_PLAYFAB.md). The catalog's `PriceOptions` are the source of these `PriceDto`s. One adjacent thing that **is** static: `WorldContractsConfig` (delivery-contract rewards) is authored in `configuration_assets_all.bundle`, so those reward amounts are extractable from the bundle directly (a different economy than the store sell price).