- SALES_VALUE.md: price model (PriceDto/ItemDto.SellPrice/PriceDataComponent), server-authoritative - BACKEND_PLAYFAB.md: backend = PlayFab Economy + ws:// master server (per-region); observed no-playtest boot behavior, capture findings, OnRegionsLoadFailed dialog path - WEAPON_DAMAGE.md: cross-link to backend doc
57 lines
3.5 KiB
Markdown
57 lines
3.5 KiB
Markdown
# 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<PriceDto> SellPrice` | what the item **sells** for |
|
|
| `ShopItemDto` | `string DefinitionName`, `int Amount`, `List<PriceDto> 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).
|