Files
SandTools/docs/SALES_VALUE.md
DownloadPizza 5946e0910b docs: item sales value + PlayFab/master-server backend map
- 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
2026-06-12 01:17:07 +02:00

3.5 KiB

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. 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 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. The catalog's PriceOptions are the source of these PriceDtos.

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).