GetUserInventory returned every vanity in the Vanities title data as an
owned item, so the client showed all Aurum-shop cosmetics as already
owned. Return only the cosmetics the player actually owns: purchased
(VanityItems) plus currently equipped (CharacterVanity slots and the
GlobalVanity sprays / banner / emotes / drop pod), so the starter outfit
stays owned while the rest of the Aurum shop becomes purchasable.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
GetStoreItems now also serves the cosmetic stores the client queries
(AurumShop, and the DailyShop_/WeeklyShop_ rotations) from the Vanities
title data: every vanity with StoreData.Amount > 0 is offered for that
price in Aurum (AU). AurumShop lists the full priced catalogue (632
items); the daily/weekly ids show a deterministic rotating slice so they
stay stable within a period but change across periods.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>
- CompleteInventoryUpdate: insured items lost in a raid (present in
ItemsToRemove) are recovered back to the stash and the insurance is
consumed. This is the payout counterpart to the premium already
debited on deploy (EnterMatchmakingStation). Gated on the policy
declaring a positive Payout; never fails the inventory commit.
- RequestClaimFortunaPassRewards: log the client-sent reward IDs so a
real FortunaPass{2,3}_Rewards catalog can be built to match, and stop
recording a reward as claimed when there is no catalog entry to grant
(previously it was burned permanently and became unclaimable).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Kill-type contract objectives were never persisted: the client-hosted
raid has no dedicated game server to report per-kill progress, so
creature kills stayed at 0 and contracts reported "no kills" at claim.
- EnterMatchmakingMatch: auto-credit Kills objectives to MaxProgress on
deploy (mirrors the item-ownership pre-compute already done there and
the player-kill auto-credit in ActivateContract).
- ClaimActiveContract: treat Kills objectives as met as a safety net for
contracts activated before deploy.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- RequestPlayerContracts: renvoie les vrais contrats actifs + job boards du joueur
(peuplement initial des boards vides) au lieu d'une liste hardcodée.
- RequestFactionProgression: renvoie la réputation réelle des 3 factions (au lieu de 0).
- StartTechTreeNodeUpgradeClient: dependency check PlayerQuarterLevelRequired.
- PurchaseWeaponShopItem: critère de déblocage par contrat (UnlockData.ContractLockPurchase).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Fix item repair cost formula
* Add "RequestUpdateAvailableFreeLoadout" function (WIP)
* Fix item sell formula
* Fix item stack split on sell
* Fix contract progression counting for objectives other than owned items
* Refactor balance into a proper struct
* Separate and update Season 2 and Season 3 data