fifa17-recon: store fix (v2/store gate + flags) + full FUT endpoint map
Store "not available" root cause reversed from CardsDLL:
- ut/v2/game/fifa17/store is an ELIGIBILITY gate (FutStorePackQuantities
deser 0x1801758c0), not a quantity list. It reads one key "result"
(atom 0x288); the store screen refuses to open unless SUCCESS. Was
unhandled -> catch-all {} -> "not available". Now returns {"result":"SUCCESS"}.
- Store-screen entitlement checks (0x18001749d/0x1800175a2) read IS_*/
*_PURCHASE_ENABLED Blaze flags, separate from storeEnabled. Added the full
confirmed set (14 flags) to FUT_RS4_CONFIG.
- Catalog: assetId (0x23) is the real pack identity; extPrice inner keys are
amount/currency (not mtx). (Also gated client-side by GetSystemMetrics>1024x768.)
Full FUT API reversed (clean-room, CardsDLL only) into docs/ENDPOINT_MAP.md:
~100 FutXServerResponse types across 7 feature groups (market, SBC, draft,
seasons/match, club, store, user/hub), each with deserializer VA, atom-mapped
field schema + types, freeze-risk flags, and minimal known-good JSON.
Tooling kept: tools/atomdump.py (dumps the 907-atom key table at 0x1802d2760)
-> docs/fut_atoms.tsv. Research prompt: docs/OPENCODE_ENDPOINT_PROMPT.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PN5bmpDVQR1aXgefyWAt7o
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,170 @@
|
||||
# opencode task — map the remaining FIFA 17 FUT endpoints for the offline rebuild
|
||||
|
||||
## Context
|
||||
OpenFUT runs FIFA 17 Ultimate Team fully offline (clean-room; EA servers are dead).
|
||||
A working Python backend already exists at `~/Documents/OpenFUT/fifa17-recon/tools/` and
|
||||
FIFA talks to it (`/etc/hosts` → `easw.easports.com` → `127.0.0.1:8099`). Many endpoints
|
||||
are already reversed and served. Your job is **RESEARCH ONLY**: produce a complete map of
|
||||
the FUT endpoints that are LEFT to build, using the tools/logs/disassembly that already
|
||||
exist. Do NOT rewrite the backend — output `~/Documents/OpenFUT/fifa17-recon/docs/ENDPOINT_MAP.md`.
|
||||
|
||||
## CLEAN-ROOM RULE (HARD)
|
||||
Use ONLY files we own + our own client's traffic. NEVER use leaked EA source of any kind.
|
||||
|
||||
## Use the ALREADY-BUILT tools — do not rebuild these
|
||||
1. **`tools/utas_server.py`** — the live backend. Its `ROUTES` table is the AUTHORITATIVE
|
||||
list of endpoints already handled: `auth`, `delete/auth`, `phishing/{trusteddevice,
|
||||
validate,question}`, `user/credits`, `user/list`, `user/accountinfo`, `user`, `squad`
|
||||
(+`/list`), `hub`, `userMassInfo`, `season`, `club`, `item(/resource)/defid`,
|
||||
`store/purchasegroup`, `store/transaction`, `purchased`. Read it to see what's DONE and
|
||||
the exact response shapes used. Its `_handle()` logs `!! UNMAPPED PATH -> catch-all 200 {}`
|
||||
for any endpoint FIFA hits that ISN'T handled yet — those are your gaps.
|
||||
2. **`/tmp/utas_server.log`** — GROUND TRUTH of every request FIFA makes (method, path,
|
||||
headers, body) and our response. Start here:
|
||||
```
|
||||
grep 'UNMAPPED PATH' -B1 /tmp/utas_server.log # endpoints we stub {}
|
||||
grep -oE '(GET|POST|PUT) /ut/(v2/)?game/fifa17/[^ ?]*' /tmp/utas_server.log | sort -u
|
||||
```
|
||||
This is the real, ordered list of what the client requests per FUT screen.
|
||||
(Caveat: the log is temp — cleared on reboot — and only reflects FUT screens actually
|
||||
visited. For richer traffic, run the harness and navigate more FUT menus first.)
|
||||
3. **`tools/memtool.py`** — live FIFA17 `/proc/mem` reader/patcher (base `0x140000000`),
|
||||
for inspecting parsed structs live if a format is ambiguous.
|
||||
4. **`tools/fut_store.py` / `tools/fut_seed.py`** — the data models (club items, squad,
|
||||
packs) the backend already uses; extend these conceptually, don't reinvent.
|
||||
5. **`tools/openfut-fut.sh`** — starts the whole harness (lsx/blaze/roster/utas) if you
|
||||
need it running to capture more traffic. `tools/root_arm.sh` arms host state (needs sudo).
|
||||
6. **`docs/CARD_SYSTEM.md`** — the reversed card/parser system + method (READ FIRST). It
|
||||
already documents the SAX-parser internals so you don't re-derive them.
|
||||
|
||||
## Disassembly (regenerate once; same method `docs/CARD_SYSTEM.md` uses)
|
||||
```
|
||||
mkdir -p /tmp/fut && cp "/mnt/games/FIFA 17/CardsDLL_Win64_retail.dll" /tmp/fut/cardsdll.dll
|
||||
objdump -d -M intel /tmp/fut/cardsdll.dll > /tmp/fut/cardsdll.asm
|
||||
strings -t x /tmp/fut/cardsdll.dll > /tmp/fut/cardsdll.strings
|
||||
```
|
||||
Shared-parser CHEATSHEET (reuse, don't re-derive): endpoint paths are strings `"ut/%s/..."`
|
||||
(`%s` = `"game/fifa17"`); response structs are `"RS4:Fut<X>ServerResponse"`; each has a SAX
|
||||
deserializer that hashes each key via FNV-1a fn `0x180180d00` (seed `0x811c9dc5`) to an ATOM
|
||||
int, looks the name up in the table at `0x1802d2760` (`table[atom]=char*`), and dispatches
|
||||
via a jump-table; unknown keys hit the value-SKIP handler `0x180135ff0` (container-aware,
|
||||
safe). Field TYPE must match its handler (scalar getters `0x1801c79d0`/`0x1801c7620`/
|
||||
`0x1801c7aa0` vs nested object/array handlers) — a scalar handler fed an object/array
|
||||
**DESYNCS the parser and hard-freezes the game**, so type fidelity is mandatory.
|
||||
Endpoint resolve table: `RS4::ServerSettings::resolve 0x180124270`.
|
||||
|
||||
## Method (per endpoint)
|
||||
For each gap endpoint (from the log's UNMAPPED list + the `"ut/%s/..."` strings not yet in
|
||||
`ROUTES`): grep the strings for its path → find its `Fut<X>ServerResponse` struct → find its
|
||||
deserializer → list the atoms it dispatches, map atom→key via `0x1802d2760`, note each
|
||||
field's JSON type + required-vs-skip → write the minimal known-good response JSON.
|
||||
|
||||
## WHERE TO START
|
||||
1. Read `docs/CARD_SYSTEM.md` and skim `tools/utas_server.py` `ROUTES`.
|
||||
2. Run the two log greps above → the definitive list of endpoints FIFA calls but we only
|
||||
stub `{}`. Rank them by FUT feature.
|
||||
3. List ALL `"ut/%s/..."` path strings and subtract the ones already in `ROUTES` → the
|
||||
endpoints not yet even discovered in traffic.
|
||||
4. Reverse the response format for each gap, prioritizing the core loop first:
|
||||
**transfermarket** (search/bid/buy/list/watchlist), **tradepile**, **SBC**
|
||||
(challenges/submit), **objectives**, **draft**, **seasons/single-player**, **match**
|
||||
(squad-battles/kickoff result), then club stats / concept squads / loans.
|
||||
|
||||
## Deliverable
|
||||
`docs/ENDPOINT_MAP.md`, one section per feature: for each endpoint — method, path, whether
|
||||
already handled or a gap, request body shape, response shape (exact keys+types, required vs
|
||||
optional), deserializer VA, and a minimal known-good example JSON. This is the spec for
|
||||
finishing the FUT backend (target: port into the Rust `openfut-core` behind a FIFA-17 bridge).
|
||||
|
||||
---
|
||||
|
||||
## APPENDIX — known atoms + verified response templates (reuse these; don't re-derive)
|
||||
|
||||
### Parser internals (already reversed)
|
||||
- key → atom: FNV-1a fn `0x180180d00` (seed `0x811c9dc5`) → `table[atom]=char*` at `0x1802d2760`
|
||||
- dispatch: range jump-tables; unknown key → value-SKIP `0x180135ff0` (container-aware, safe)
|
||||
- scalar getters (leaf, no descend): int/num `0x1801c79d0`, bool `0x1801c7620`, string `0x1801c7aa0`
|
||||
- endpoint resolve: `RS4::ServerSettings::resolve 0x180124270`; path `"ut/%s/.."`, `%s="game/fifa17"`
|
||||
- shared ITEM/card deserializer: `0x18013fe00` (used by club, squad slots, pack itemList, purchased)
|
||||
|
||||
### Common shared keys (atom in hex | JSON type)
|
||||
```
|
||||
itemData 0x16b (obj/array-elem) | id 0x15c (int) | resourceId 0x287 (int) | assetId 0x23 (int)
|
||||
index 0x163 (int) | kitNumber 0x17a (int) | rating 0x274 (int) | preferredPosition 0x24a (str)
|
||||
cardsubtypeid 0x6c (int) | attributeList 0x31 (array) | currencies 0xc5 (array)
|
||||
currencies element: name 0x1d0 (str) | funds 0x134 (int) | finalFunds 0x124 (int)
|
||||
currency-name literals are CASE-SENSITIVE strings: "coins", "points", "DRAFT_TOKEN"
|
||||
configs 0xa2 (array) [settings response, key = "configs"]
|
||||
```
|
||||
|
||||
### FutUserCreditsServerResponse — GET user/credits (deser 0x180122c50) [VERIFIED WORKS]
|
||||
```json
|
||||
{"currencies":[{"name":"coins","funds":15000,"finalFunds":15000},
|
||||
{"name":"points","funds":0,"finalFunds":0}],
|
||||
"unopenedPacks":{"preOrderPacks":0,"recoveredPacks":0}}
|
||||
```
|
||||
Coins read from `currencies[name=="coins"].funds`. A bare `{"credits":n}` is SKIPPED → 0.
|
||||
|
||||
### FutStoreGetPackTypesServerResponse — GET store/purchasegroup/all (deser 0x1801234e0)
|
||||
Root key MUST be `"purchase"` `0x260` (array); optional `"timestamp"` `0x31b`. Per-pack
|
||||
(parser `0x18013af30`): `id 0x15c`(int16, the pack identity) | `packType 0x20f`(str) |
|
||||
`description 0xd1`(str) | `currencies 0xc5`(array {name,funds,finalFunds} = coins price) |
|
||||
`extPrice 0x119`(obj {`finalPrice 0x125`, `originalPrice 0x205`}, each a currency→amount map
|
||||
incl `"mtx"`=FIFA-Points) | `packContentInfo 0x20c`(obj: `bronzeQuantity 0x63`,
|
||||
`silverQuantity 0x2c6`, `goldQuantity 0x149`, `rareQuantity 0x273`, `itemQuantity 0x170`) |
|
||||
`quantity 0x26b`(int, 0=unlimited) | `isPremium 0x176` | `saleType 0x298` | `state 0x2eb` |
|
||||
`visible 0x37d`(sets flag, DON'T send the value—desyncs).
|
||||
|
||||
**⚠ The parser is NOT the store gate (CONFIRMED by disassembly).** Per-pack parser epilogue
|
||||
`0x18013badc` pushes every parsed pack unconditionally — no valid/drop predicate exists in
|
||||
the parse path. The `"not available"` error (`FUT_CatalogNotAvailable`, msg-id `0x7550`)
|
||||
comes from TWO downstream gates, neither JSON-schema-related:
|
||||
1. **Resolution gate `0x18001756e`**: calls `GetSystemMetrics` — if the display is
|
||||
**≤ 1024×768**, the store is declared unavailable regardless of any JSON. Run FIFA at
|
||||
**> 1024×768** (1280×720 passes). *Cheapest cause to eliminate — check this first.*
|
||||
2. **Store-data-model load status** (`0x180013cf0`): `model+0x30` must become `1` and the
|
||||
screen's cached status `[rsi+0x250]` must not stay `-1`; else post `0x7550` at
|
||||
`0x180013d6c`. Fed by two entitlement checks — `0x18001749d` (`vtable+0x138`) and
|
||||
`0x1800175a2` (`vtable+0x280`) — that read the **Blaze client-config purchase flags**:
|
||||
`IS_STORE_ENABLED`, `IS_COIN_PURCHASABLE`, `IS_FIFAPOINT_AVAILABLE`,
|
||||
`COINS_PURCHASE_ENABLED`, `POINTS_PURCHASE_ENABLED`, `MONEY_PURCHASE_ENABLED`. These are
|
||||
SEPARATE from `storeEnabled`/`cardPackStoreEnabled` and must ALSO be set in the Blaze config.
|
||||
Recognized per-pack enum tokens (send these exact strings to avoid enum-reject):
|
||||
`saleType` → `"promo"`/`"deal"`; a limit-type field → `NONE`/`QUANTITY`/`TIME`/`TIME_QUANTITY`;
|
||||
pack `state` → `"active"`. Currency token is lowercase `"coins"`/`"mtx"` (NOT uppercase).
|
||||
|
||||
### FutCreatePackServerResponse — PUT store/transaction (pack reveal, deser 0x180162880)
|
||||
Wrapper key `"createPackResponse"` `0xbe`:
|
||||
```json
|
||||
{"createPackResponse":{"itemList":[/*cards*/],"numberItems":7,
|
||||
"purchasedPackId":102,"duplicateItemIdList":[]}}
|
||||
```
|
||||
(atoms: itemList `0x16e`, numberItems `0x1dd`, purchasedPackId `0x264`, duplicateItemIdList `0xec`.)
|
||||
BUY signal = transaction body has `"packId"` `0x20b` AND `state 0x2eb != "TRANSACTIONCANCEL"`.
|
||||
state enum strings: `TRANSACTIONCREATED`(carries packId=the buy), `PURCHASECOMPLETE`,
|
||||
`TRANSACTIONCOMPLETE`, `TRANSACTIONCANCEL`.
|
||||
`FutGetPurchasedItemsServerResponse` — GET purchased: `{"itemData":[/*cards*/]}` (itemData `0x16b`).
|
||||
|
||||
### GetUserMassInfo — GET userMassInfo (deser 0x180174630) [FREEZE-SENSITIVE]
|
||||
Top-level: `userInfo 0x370`, `squad 0x2cd`, `settings`, `userData`. MUST serve `{}` unless
|
||||
every field type-matches, else the parser hard-freezes. `userInfo` deser `0x18013ec10`;
|
||||
SAFE minimal that carries coins:
|
||||
```json
|
||||
{"userInfo":{"currencies":[{"name":"coins","funds":15000}],"sessionCoinsBankBalance":15000}}
|
||||
```
|
||||
(`sessionCoinsBankBalance 0x2bb`.) DANGER: `squadList` must be an OBJECT `{"squad":[...]}`
|
||||
NOT an array (array → desync → freeze). Container fields `feature`/`reliability`/
|
||||
`unopenedPacks`/`bidTokens`/`actives` must match exact shape or be omitted.
|
||||
|
||||
### LoadActiveSquad — GET squad/0 (deser 0x18013d1f0)
|
||||
Keys: `id 0x15c` | `personaId 0x21b` | `squadName 0x2d3` | `formation 0x12b`(str) |
|
||||
`squadType 0x2d6` | `chemistry 0x81` | `starRating 0x2e2` | `captain 0x69` | `manager 0x1a8`(array)
|
||||
| `actives 0xb`(array) | `custom 0xc6`(STRING of 33 ints) | `players 0x238`(array of
|
||||
{index,itemData,kitNumber}) | `kicktakers 0x178`(array). Squad PUT stores slots as
|
||||
`itemData={id:<clubItemId>}` references (re-embed full items on GET, see `reconstruct_squad`).
|
||||
|
||||
> Atoms are index-into-`0x1802d2760`; a few above came from mixed-confidence passes — when a
|
||||
> value doesn't take, verify the atom by locating the key string in `cardsdll.strings` and
|
||||
> re-hashing. Field TYPE fidelity is mandatory (scalar-vs-container mismatch = freeze).
|
||||
> High-confidence/verified: `user/credits`, `createPackResponse`, the store gate analysis,
|
||||
> and the `userMassInfo` safe-shape.
|
||||
@@ -0,0 +1,907 @@
|
||||
0 0x0 LIST_START
|
||||
1 0x1 0
|
||||
2 0x2 1
|
||||
3 0x3 2
|
||||
4 0x4 3
|
||||
5 0x5 4
|
||||
6 0x6 accountCreatedPlatformName
|
||||
7 0x7 actions
|
||||
8 0x8 actionType
|
||||
9 0x9 activateSlotNumber
|
||||
10 0xa active
|
||||
11 0xb actives
|
||||
12 0xc activeAwayKit
|
||||
13 0xd activeBadge
|
||||
14 0xe activeBall
|
||||
15 0xf activeChampionLeagues
|
||||
16 0x10 activeHomeKit
|
||||
17 0x11 activeMessage
|
||||
18 0x12 activeStadium
|
||||
19 0x13 aigroup
|
||||
20 0x14 allCoins
|
||||
21 0x15 allObjectivesForCurrentGameSpaceId
|
||||
22 0x16 allofflinetrophy
|
||||
23 0x17 allonlinetrophy
|
||||
24 0x18 allowGracePeriodForSquadBuildingSets
|
||||
25 0x19 allowUntradeableForSquadBuildingSets
|
||||
26 0x1a AMATEUR
|
||||
27 0x1b amount
|
||||
28 0x1c AND
|
||||
29 0x1d answer
|
||||
30 0x1e any
|
||||
31 0x1f apply
|
||||
32 0x20 applyTo
|
||||
33 0x21 areas
|
||||
34 0x22 areaSubType
|
||||
35 0x23 assetId
|
||||
36 0x24 AssetId
|
||||
37 0x25 assetName
|
||||
38 0x26 assetType
|
||||
39 0x27 assists
|
||||
40 0x28 attempts
|
||||
41 0x29 attrib1
|
||||
42 0x2a attrib6
|
||||
43 0x2b Attribute1
|
||||
44 0x2c Attribute2
|
||||
45 0x2d Attribute3
|
||||
46 0x2e Attribute4
|
||||
47 0x2f Attribute5
|
||||
48 0x30 Attribute6
|
||||
49 0x31 attributeList
|
||||
50 0x32 auctionBid
|
||||
51 0x33 auctionCount
|
||||
52 0x34 auctionExpired
|
||||
53 0x35 auctionInfo
|
||||
54 0x36 auctionLostBidRejected
|
||||
55 0x37 auctionLostOutbid
|
||||
56 0x38 auctionLostOutbidSelf
|
||||
57 0x39 auctionSoldBid
|
||||
58 0x3a auctionSoldBuyNow
|
||||
59 0x3b auctionWonBid
|
||||
60 0x3c auctionWonBuyNow
|
||||
61 0x3d authToken
|
||||
62 0x3e available
|
||||
63 0x3f awaykit
|
||||
64 0x40 awardCount
|
||||
65 0x41 awardedPrizes
|
||||
66 0x42 awardItemData
|
||||
67 0x43 awardMappings
|
||||
68 0x44 awardType
|
||||
69 0x45 awardSet
|
||||
70 0x46 awardSetId
|
||||
71 0x47 awards
|
||||
72 0x48 awardValue
|
||||
73 0x49 badge
|
||||
74 0x4a badgeDBid
|
||||
75 0x4b badges
|
||||
76 0x4c Badge
|
||||
77 0x4d ball
|
||||
78 0x4e Ball
|
||||
79 0x4f balls
|
||||
80 0x50 base
|
||||
81 0x51 BEGINNER
|
||||
82 0x52 bestBuilderScore
|
||||
83 0x53 bestPointsSeasonId
|
||||
84 0x54 bestPointsSeasonValue
|
||||
85 0x55 bid
|
||||
86 0x56 bidPrices
|
||||
87 0x57 bidState
|
||||
88 0x58 bidToken
|
||||
89 0x59 bidTokens
|
||||
90 0x5a bio
|
||||
91 0x5b biodescription
|
||||
92 0x5c bonus
|
||||
93 0x5d bonusPacks
|
||||
94 0x5e Boost
|
||||
95 0x5f boost
|
||||
96 0x60 boostConis
|
||||
97 0x61 boostCountLeft
|
||||
98 0x62 bronze
|
||||
99 0x63 bronzeQuantity
|
||||
100 0x64 builder
|
||||
101 0x65 buyNowPrice
|
||||
102 0x66 buyoutPrices
|
||||
103 0x67 Cap
|
||||
104 0x68 capacity
|
||||
105 0x69 captain
|
||||
106 0x6a CAPTAIN_DRAFT
|
||||
107 0x6b cardassetid
|
||||
108 0x6c cardsubtypeid
|
||||
109 0x6d cardPackStoreEnabled
|
||||
110 0x6e cardPackStoreEnabled_JP
|
||||
111 0x6f categories
|
||||
112 0x70 category
|
||||
113 0x71 Category
|
||||
114 0x72 categoryCount
|
||||
115 0x73 categoryId
|
||||
116 0x74 challengeId
|
||||
117 0x75 challengeImageId
|
||||
118 0x76 challenges
|
||||
119 0x77 challengesCompletedCount
|
||||
120 0x78 challengesCount
|
||||
121 0x79 CHAMPIONSHIP
|
||||
122 0x7a championEvent
|
||||
123 0x7b championEventId
|
||||
124 0x7c championEventType
|
||||
125 0x7d champion_qualifier
|
||||
126 0x7e changed
|
||||
127 0x7f checkPointsReached
|
||||
128 0x80 checkServerDbVersion
|
||||
129 0x81 chemistry
|
||||
130 0x82 choiceIndex
|
||||
131 0x83 choices
|
||||
132 0x84 cleansheets
|
||||
133 0x85 clientId
|
||||
134 0x86 clientKeepAliveResetTimeoutSec
|
||||
135 0x87 club
|
||||
136 0x88 clubId
|
||||
137 0x89 ClubId
|
||||
138 0x8a clubInfo
|
||||
139 0x8b clubCount
|
||||
140 0x8c clubCreateThreshold
|
||||
141 0x8d clubAbbr
|
||||
142 0x8e clubName
|
||||
143 0x8f clubNameChangeAllowed
|
||||
144 0x90 clubPlayers
|
||||
145 0x91 clubUser
|
||||
146 0x92 code
|
||||
147 0x93 codeType
|
||||
148 0x94 coin
|
||||
149 0x95 coins
|
||||
150 0x96 COINS
|
||||
151 0x97 coinsEarned
|
||||
152 0x98 coinEnabled
|
||||
153 0x99 coinEnabled_JP
|
||||
154 0x9a collector
|
||||
155 0x9b CommonName
|
||||
156 0x9c COMPLETED_DRAFT
|
||||
157 0x9d competitor
|
||||
158 0x9e competitionId
|
||||
159 0x9f competitionCountryCode
|
||||
160 0xa0 competitionRegion
|
||||
161 0xa1 concededGoals
|
||||
162 0xa2 configs
|
||||
163 0xa3 constrainGracePeriod
|
||||
164 0xa4 consume
|
||||
165 0xa5 consumables
|
||||
166 0xa6 consumablesContract
|
||||
167 0xa7 consumablesTraining
|
||||
168 0xa8 consumablesFitness
|
||||
169 0xa9 consumablesContractPlayer
|
||||
170 0xaa consumablesContractManager
|
||||
171 0xab consumablesFitnessPlayer
|
||||
172 0xac consumablesFitnessTeam
|
||||
173 0xad consumablesFormationManager
|
||||
174 0xae consumablesTrainingManagerLeagueModifier
|
||||
175 0xaf consumablesHealing
|
||||
176 0xb0 consumablesTrainingPlayerPlayStyle
|
||||
177 0xb1 consumablesTrainingGkPlayStyle
|
||||
178 0xb2 consumablesPosition
|
||||
179 0xb3 consumablesTrainingPlayer
|
||||
180 0xb4 consumablesTrainingManager
|
||||
181 0xb5 consumablesTrainingGk
|
||||
182 0xb6 contextId
|
||||
183 0xb7 contextValue
|
||||
184 0xb8 contract
|
||||
185 0xb9 controls
|
||||
186 0xba corners
|
||||
187 0xbb couchPlayEnabled
|
||||
188 0xbc count
|
||||
189 0xbd country
|
||||
190 0xbe createPackResponse
|
||||
191 0xbf creationTime
|
||||
192 0xc0 credits
|
||||
193 0xc1 currentBid
|
||||
194 0xc2 currentChampionEvent
|
||||
195 0xc3 currentTime
|
||||
196 0xc4 currency
|
||||
197 0xc5 currencies
|
||||
198 0xc6 custom
|
||||
199 0xc7 customData
|
||||
200 0xc8 customData1
|
||||
201 0xc9 data
|
||||
202 0xca dataVersion
|
||||
203 0xcb debug
|
||||
204 0xcc dealType
|
||||
205 0xcd default
|
||||
206 0xce defending
|
||||
207 0xcf defId
|
||||
208 0xd0 desc
|
||||
209 0xd1 description
|
||||
210 0xd2 detaildescription
|
||||
211 0xd3 development
|
||||
212 0xd4 difficulty
|
||||
213 0xd5 difficultyName
|
||||
214 0xd6 dimeId
|
||||
215 0xd7 discardValue
|
||||
216 0xd8 display
|
||||
217 0xd9 displayGroup
|
||||
218 0xda displayGroupAssetId
|
||||
219 0xdb displayGroupUseDefaultImage
|
||||
220 0xdc divisionId
|
||||
221 0xdd divisionOffline
|
||||
222 0xde divisionOnline
|
||||
223 0xdf DRAFT_TOKEN
|
||||
224 0xe0 draft_token
|
||||
225 0xe1 draftChampion
|
||||
226 0xe2 draftsCompleted
|
||||
227 0xe3 draftState
|
||||
228 0xe4 draftSummary
|
||||
229 0xe5 draftToken
|
||||
230 0xe6 draw
|
||||
231 0xe7 dream
|
||||
232 0xe8 dreamSquad
|
||||
233 0xe9 dreamSquads
|
||||
234 0xea dribbling
|
||||
235 0xeb duplicateItemId
|
||||
236 0xec duplicateItemIdList
|
||||
237 0xed duplicateItemLoans
|
||||
238 0xee duration
|
||||
239 0xef durationInSec
|
||||
240 0xf0 elegibilityId
|
||||
241 0xf1 eligibilities
|
||||
242 0xf2 eligibilityKey
|
||||
243 0xf3 eligibilityOperation
|
||||
244 0xf4 eligibilitySlot
|
||||
245 0xf5 eligibilityValue
|
||||
246 0xf6 elgOperation
|
||||
247 0xf7 elgReq
|
||||
248 0xf8 email
|
||||
249 0xf9 enableDraftMode
|
||||
250 0xfa enableOfflineDraftMode
|
||||
251 0xfb enableLiveMessaging
|
||||
252 0xfc enableLoyaltyBonusForConceptPlayers
|
||||
253 0xfd enableObjectives
|
||||
254 0xfe enableObjectivesAsManagerTasks
|
||||
255 0xff enableSinglePlayerDraftMode
|
||||
256 0x100 enableSquadBuildingSetsFeature
|
||||
257 0x101 encodedImg
|
||||
258 0x102 end
|
||||
259 0x103 endDateTime
|
||||
260 0x104 endReason
|
||||
261 0x105 endtime
|
||||
262 0x106 endTime
|
||||
263 0x107 entitlementId
|
||||
264 0x108 entranceCriteria
|
||||
265 0x109 entries
|
||||
266 0x10a equippables
|
||||
267 0x10b errorMessage
|
||||
268 0x10c errors
|
||||
269 0x10d errorState
|
||||
270 0x10e errorType
|
||||
271 0x10f est
|
||||
272 0x110 established
|
||||
273 0x111 event
|
||||
274 0x112 eventId
|
||||
275 0x113 eventType
|
||||
276 0x114 exact
|
||||
277 0x115 expectedTierLevel
|
||||
278 0x116 expires
|
||||
279 0x117 exists
|
||||
280 0x118 extendGameSessionTimerSec
|
||||
281 0x119 extPrice
|
||||
282 0x11a externalPriceId
|
||||
283 0x11b false
|
||||
284 0x11c feature
|
||||
285 0x11d featuredofflinetrophy
|
||||
286 0x11e featuredonlinetrophy
|
||||
287 0x11f fifaPointsEnabled
|
||||
288 0x120 fifaPointsEnabled_JP
|
||||
289 0x121 fifaPointsFromLastYear
|
||||
290 0x122 fifaPointsTransferredStatus
|
||||
291 0x123 filter
|
||||
292 0x124 finalFunds
|
||||
293 0x125 finalPrice
|
||||
294 0x126 FirstName
|
||||
295 0x127 firstPartyStoreId
|
||||
296 0x128 fitness
|
||||
297 0x129 fitnesscoach
|
||||
298 0x12a fitnessCoach
|
||||
299 0x12b formation
|
||||
300 0x12c FORMATION_DRAFT
|
||||
301 0x12d fouls
|
||||
302 0x12e free
|
||||
303 0x12f friend
|
||||
304 0x130 friendMessages
|
||||
305 0x131 friendlySeason
|
||||
306 0x132 friendlySeasonHistory
|
||||
307 0x133 friendlySeasonsEnabled
|
||||
308 0x134 funds
|
||||
309 0x135 gameMode
|
||||
310 0x136 gameModeAward
|
||||
311 0x137 gamesDraw
|
||||
312 0x138 gamesLost
|
||||
313 0x139 gamesPlayed
|
||||
314 0x13a gamesWon
|
||||
315 0x13b gamesWonCurrentMatch
|
||||
316 0x13c gamesRemaining
|
||||
317 0x13d getOperationTimeoutSec
|
||||
318 0x13e gkDiving
|
||||
319 0x13f gkcoach
|
||||
320 0x140 gkCoach
|
||||
321 0x141 gkKicking
|
||||
322 0x142 gkHandling
|
||||
323 0x143 gkOneOnOne
|
||||
324 0x144 gkPositioning
|
||||
325 0x145 gkReflexes
|
||||
326 0x146 goals
|
||||
327 0x147 goalsScored
|
||||
328 0x148 gold
|
||||
329 0x149 goldQuantity
|
||||
330 0x14a grantedChallengeAwards
|
||||
331 0x14b grantedSetAwards
|
||||
332 0x14c grantsGameModePrizes
|
||||
333 0x14d group
|
||||
334 0x14e groupName
|
||||
335 0x14f halid
|
||||
336 0x150 halId
|
||||
337 0x151 halfLength
|
||||
338 0x152 header
|
||||
339 0x153 headcoach
|
||||
340 0x154 headCoach
|
||||
341 0x155 heading
|
||||
342 0x156 healing
|
||||
343 0x157 health
|
||||
344 0x158 hidden
|
||||
345 0x159 homekit
|
||||
346 0x15a hub
|
||||
347 0x15b icon
|
||||
348 0x15c id
|
||||
349 0x15d idList
|
||||
350 0x15e image
|
||||
351 0x15f imageFormat
|
||||
352 0x160 imageId
|
||||
353 0x161 immediateRecoveryAttempt
|
||||
354 0x162 immediateRecoveryAttemptDelay
|
||||
355 0x163 index
|
||||
356 0x164 inGame
|
||||
357 0x165 inset
|
||||
358 0x166 insetUrl
|
||||
359 0x167 injuryGames
|
||||
360 0x168 injuryType
|
||||
361 0x169 INVALID
|
||||
362 0x16a item
|
||||
363 0x16b itemData
|
||||
364 0x16c itemDbVersion
|
||||
365 0x16d itemId
|
||||
366 0x16e itemList
|
||||
367 0x16f itemLoans
|
||||
368 0x170 itemQuantity
|
||||
369 0x171 items
|
||||
370 0x172 itemState
|
||||
371 0x173 itemType
|
||||
372 0x174 ItemType
|
||||
373 0x175 isReturningUser
|
||||
374 0x176 isPremium
|
||||
375 0x177 key
|
||||
376 0x178 kicktakers
|
||||
377 0x179 kit
|
||||
378 0x17a kitNumber
|
||||
379 0x17b Kit
|
||||
380 0x17c kits
|
||||
381 0x17d kitsHome
|
||||
382 0x17e kitsAway
|
||||
383 0x17f knockout
|
||||
384 0x180 knockout_group
|
||||
385 0x181 label
|
||||
386 0x182 lang
|
||||
387 0x183 lastMatchUnfinished
|
||||
388 0x184 LastName
|
||||
389 0x185 lastSalePrice
|
||||
390 0x186 leaderboard
|
||||
391 0x187 LEGENDARY
|
||||
392 0x188 legendCount
|
||||
393 0x189 league
|
||||
394 0x18a leagueId
|
||||
395 0x18b LeagueId
|
||||
396 0x18c leagueCount
|
||||
397 0x18d leaguelogos
|
||||
398 0x18e leagueLogos
|
||||
399 0x18f link
|
||||
400 0x190 liveMessagesAvailable
|
||||
401 0x191 level
|
||||
402 0x192 lifetimeAssists
|
||||
403 0x193 lifetimeCleansheets
|
||||
404 0x194 lifetimeStats
|
||||
405 0x195 live_offline
|
||||
406 0x196 live_online
|
||||
407 0x197 loan
|
||||
408 0x198 loanId
|
||||
409 0x199 loanPlayerClientData
|
||||
410 0x19a loanPlayers
|
||||
411 0x19b loans
|
||||
412 0x19c localizedName
|
||||
413 0x19d lock
|
||||
414 0x19e locked
|
||||
415 0x19f LOCKED_ATTEMPTS_PERM
|
||||
416 0x1a0 LOCKED_ATTEMPTS_TEMP
|
||||
417 0x1a1 LOCKED_PERMANENT
|
||||
418 0x1a2 LOCKED_RETRY
|
||||
419 0x1a3 LOCKED_TROPHIES
|
||||
420 0x1a4 locString
|
||||
421 0x1a5 login
|
||||
422 0x1a6 loss
|
||||
423 0x1a7 MAINTENANCE
|
||||
424 0x1a8 manager
|
||||
425 0x1a9 Manager
|
||||
426 0x1aa MANAGER
|
||||
427 0x1ab managerTalk
|
||||
428 0x1ac MANAGER_DRAFT
|
||||
429 0x1ad manOfTheMatch
|
||||
430 0x1ae manufacturer
|
||||
431 0x1af marketData
|
||||
432 0x1b0 marketDataMaxPrice
|
||||
433 0x1b1 marketDataMinPrice
|
||||
434 0x1b2 marketPriceLimitValues
|
||||
435 0x1b3 maskDefId
|
||||
436 0x1b4 matchCoins
|
||||
437 0x1b5 matchCoinMultipliers
|
||||
438 0x1b6 matchCoinPartials
|
||||
439 0x1b7 matchDifficulty
|
||||
440 0x1b8 matches
|
||||
441 0x1b9 matchId
|
||||
442 0x1ba matchlength
|
||||
443 0x1bb matchLengthMin
|
||||
444 0x1bc matchParamsKeyValues
|
||||
445 0x1bd matchReportId
|
||||
446 0x1be matchUnfinishedTime
|
||||
447 0x1bf maxAuctionsAllowed
|
||||
448 0x1c0 maximumTradePileSize
|
||||
449 0x1c1 maxMatches
|
||||
450 0x1c2 maxPrice
|
||||
451 0x1c3 maxSize
|
||||
452 0x1c4 maxWins
|
||||
453 0x1c5 message
|
||||
454 0x1c6 messagesAvailable
|
||||
455 0x1c7 messageList
|
||||
456 0x1c8 messagesRead
|
||||
457 0x1c9 minMatchesToRank
|
||||
458 0x1ca minPrice
|
||||
459 0x1cb misc
|
||||
460 0x1cc morale
|
||||
461 0x1cd mtxEnabled
|
||||
462 0x1ce mtxEnabled_JP
|
||||
463 0x1cf myRating
|
||||
464 0x1d0 name
|
||||
465 0x1d1 nation
|
||||
466 0x1d2 nationId
|
||||
467 0x1d3 NationId
|
||||
468 0x1d4 nationCount
|
||||
469 0x1d5 negMods
|
||||
470 0x1d6 Negotiation
|
||||
471 0x1d7 newcards
|
||||
472 0x1d8 nextReset
|
||||
473 0x1d9 none
|
||||
474 0x1da notification
|
||||
475 0x1db NPTicket
|
||||
476 0x1dc NPTicketLength
|
||||
477 0x1dd numberItems
|
||||
478 0x1de numEndMatchRetriesAllowed
|
||||
479 0x1df numMatches
|
||||
480 0x1e0 numRounds
|
||||
481 0x1e1 numTeams
|
||||
482 0x1e2 objectives
|
||||
483 0x1e3 objectivesForCurrentUser
|
||||
484 0x1e4 offer
|
||||
485 0x1e5 offered
|
||||
486 0x1e6 offers
|
||||
487 0x1e7 offerState
|
||||
488 0x1e8 offline
|
||||
489 0x1e9 OFFLINE
|
||||
490 0x1ea offlineDivision
|
||||
491 0x1eb offlinetrophy
|
||||
492 0x1ec offlineSeason
|
||||
493 0x1ed offlineTournyProgress
|
||||
494 0x1ee offset
|
||||
495 0x1ef offsides
|
||||
496 0x1f0 online
|
||||
497 0x1f1 ONLINE
|
||||
498 0x1f2 onlineELORating
|
||||
499 0x1f3 onlineRatedUser
|
||||
500 0x1f4 accountResetCount
|
||||
501 0x1f5 onlinetrophy
|
||||
502 0x1f6 onlineSeason
|
||||
503 0x1f7 onlineTournyProgress
|
||||
504 0x1f8 onSale
|
||||
505 0x1f9 opponent
|
||||
506 0x1fa opponentBadgeId
|
||||
507 0x1fb opponentGoals
|
||||
508 0x1fc opponentId
|
||||
509 0x1fd opponentPenaltyScore
|
||||
510 0x1fe opponentPersonaId
|
||||
511 0x1ff opponentRating
|
||||
512 0x200 opponentScore
|
||||
513 0x201 opponentTeamId
|
||||
514 0x202 opponentUserPoints
|
||||
515 0x203 options
|
||||
516 0x204 OR
|
||||
517 0x205 originalPrice
|
||||
518 0x206 outbid
|
||||
519 0x207 owners
|
||||
520 0x208 ownGoals
|
||||
521 0x209 pace
|
||||
522 0x20a pack
|
||||
523 0x20b packId
|
||||
524 0x20c packContentInfo
|
||||
525 0x20d packList
|
||||
526 0x20e packOpeningAnimationEnabled
|
||||
527 0x20f packType
|
||||
528 0x210 parent
|
||||
529 0x211 participationAward
|
||||
530 0x212 passAccuracyTotal
|
||||
531 0x213 passesCompleted
|
||||
532 0x214 passing
|
||||
533 0x215 passingPercentage
|
||||
534 0x216 penaltyGoals
|
||||
535 0x217 penaltyScore
|
||||
536 0x218 period
|
||||
537 0x219 permutations
|
||||
538 0x21a persona
|
||||
539 0x21b personaId
|
||||
540 0x21c phoneNumber
|
||||
541 0x21d physio
|
||||
542 0x21e physioArm
|
||||
543 0x21f physioBack
|
||||
544 0x220 physioFoot
|
||||
545 0x221 physioHead
|
||||
546 0x222 physioHip
|
||||
547 0x223 physioLeg
|
||||
548 0x224 physioShoudler
|
||||
549 0x225 PICK_DIFFICULTY
|
||||
550 0x226 pile
|
||||
551 0x227 pileSizeClientData
|
||||
552 0x228 pileType
|
||||
553 0x229 PlayAFriendPractice
|
||||
554 0x22a platform
|
||||
555 0x22b player
|
||||
556 0x22c Player
|
||||
557 0x22d PLAYER
|
||||
558 0x22e playerAttrBoostLevel
|
||||
559 0x22f playerCount
|
||||
560 0x230 playerdefender
|
||||
561 0x231 playerforward
|
||||
562 0x232 playerLevel
|
||||
563 0x233 playermidfielder
|
||||
564 0x234 playerOne
|
||||
565 0x235 playerQuality
|
||||
566 0x236 playerRarity
|
||||
567 0x237 playerRequirements
|
||||
568 0x238 players
|
||||
569 0x239 playersBronze
|
||||
570 0x23a playersGold
|
||||
571 0x23b playersSilver
|
||||
572 0x23c playerTwo
|
||||
573 0x23d playerType
|
||||
574 0x23e PLAYER_DRAFT
|
||||
575 0x23f playStyle
|
||||
576 0x240 points
|
||||
577 0x241 POINTS
|
||||
578 0x242 pointsPackStoreEnabled
|
||||
579 0x243 position
|
||||
580 0x244 positionid
|
||||
581 0x245 positionId
|
||||
582 0x246 posMods
|
||||
583 0x247 possessionPercentage
|
||||
584 0x248 possesionTotal
|
||||
585 0x249 possessionTotal
|
||||
586 0x24a preferredPosition
|
||||
587 0x24b preOrderPacks
|
||||
588 0x24c previousChampionEvents
|
||||
589 0x24d price
|
||||
590 0x24e primaryBadgeId
|
||||
591 0x24f primaryPersonaId
|
||||
592 0x250 priority
|
||||
593 0x251 prize
|
||||
594 0x252 prizeLevel
|
||||
595 0x253 prizeSet
|
||||
596 0x254 prizesInError
|
||||
597 0x255 prizeTiers
|
||||
598 0x256 PRO
|
||||
599 0x257 processingStateEnabled
|
||||
600 0x258 productId
|
||||
601 0x259 PROFESSIONAL
|
||||
602 0x25a progressdata
|
||||
603 0x25b progressData
|
||||
604 0x25c progressDataVersion
|
||||
605 0x25d PROMOTION
|
||||
606 0x25e promoUpdate
|
||||
607 0x25f public
|
||||
608 0x260 purchase
|
||||
609 0x261 purchaseCount
|
||||
610 0x262 purchased
|
||||
611 0x263 purchasedItems
|
||||
612 0x264 purchasedPackId
|
||||
613 0x265 purchaseLimit
|
||||
614 0x266 purchasePackType
|
||||
615 0x267 qualified
|
||||
616 0x268 qualifiedChampionLeagueIds
|
||||
617 0x269 qualifiedChampionEventId
|
||||
618 0x26a qualifierTournaments
|
||||
619 0x26b quantity
|
||||
620 0x26c question
|
||||
621 0x26d rank
|
||||
622 0x26e ranking
|
||||
623 0x26f Rare
|
||||
624 0x270 rare
|
||||
625 0x271 rareflag
|
||||
626 0x272 rarePlayers
|
||||
627 0x273 rareQuantity
|
||||
628 0x274 rating
|
||||
629 0x275 Rating
|
||||
630 0x276 read
|
||||
631 0x277 READY_FOR_MATCH
|
||||
632 0x278 READY_FOR_REWARDS
|
||||
633 0x279 reason
|
||||
634 0x27a recoverAttempts
|
||||
635 0x27b recoveredPacks
|
||||
636 0x27c redCards
|
||||
637 0x27d RELEGATION
|
||||
638 0x27e reliability
|
||||
639 0x27f remainingMatches
|
||||
640 0x280 repeatable
|
||||
641 0x281 reportIdEnabled
|
||||
642 0x282 requestBody
|
||||
643 0x283 reset
|
||||
644 0x284 resetBonus
|
||||
645 0x285 responseBody
|
||||
646 0x286 responseHeader
|
||||
647 0x287 resourceId
|
||||
648 0x288 result
|
||||
649 0x289 returningUserRewards
|
||||
650 0x28a returningUserRewardsScreenEnabled
|
||||
651 0x28b rewardMult
|
||||
652 0x28c rewardMultiplier
|
||||
653 0x28d rewardQuantity
|
||||
654 0x28e rewardType
|
||||
655 0x28f rewardValue
|
||||
656 0x290 round
|
||||
657 0x291 roundId
|
||||
658 0x292 rounds
|
||||
659 0x293 roundsInfo
|
||||
660 0x294 rule
|
||||
661 0x295 sameClubCount
|
||||
662 0x296 sameLeagueCount
|
||||
663 0x297 sameNationCount
|
||||
664 0x298 saleType
|
||||
665 0x299 scope
|
||||
666 0x29a score
|
||||
667 0x29b scoredGoals
|
||||
668 0x29c scrollDelay
|
||||
669 0x29d SINGLE_PLAYER
|
||||
670 0x29e seasonCoins
|
||||
671 0x29f seasonCompleted
|
||||
672 0x2a0 seasonData
|
||||
673 0x2a1 seasonEndResult
|
||||
674 0x2a2 seasonId
|
||||
675 0x2a3 seasonGamesDraw
|
||||
676 0x2a4 seasonGamesLost
|
||||
677 0x2a5 seasonGamesWon
|
||||
678 0x2a6 seasonOnlineDraws
|
||||
679 0x2a7 seasonOnlineLosses
|
||||
680 0x2a8 seasonOnlineWins
|
||||
681 0x2a9 seasonsPassAccuracyTotal
|
||||
682 0x2aa seasonsPossesionTotal
|
||||
683 0x2ab seasonPromotions
|
||||
684 0x2ac seasonRelegations
|
||||
685 0x2ad seasons
|
||||
686 0x2ae seasonTitlesWon
|
||||
687 0x2af seasonConcededGoals
|
||||
688 0x2b0 seasonsScoredGoals
|
||||
689 0x2b1 seasonWins
|
||||
690 0x2b2 secondsPlayed
|
||||
691 0x2b3 secondsUntilEnd
|
||||
692 0x2b4 secondsUntilStart
|
||||
693 0x2b5 selection
|
||||
694 0x2b6 sellerEstablished
|
||||
695 0x2b7 sellerName
|
||||
696 0x2b8 selling
|
||||
697 0x2b9 SEMIPRO
|
||||
698 0x2ba sequence
|
||||
699 0x2bb sessionCoinsBankBalance
|
||||
700 0x2bc setId
|
||||
701 0x2bd setImageId
|
||||
702 0x2be sets
|
||||
703 0x2bf settings
|
||||
704 0x2c0 shooting
|
||||
705 0x2c1 shots
|
||||
706 0x2c2 shotsOnTarget
|
||||
707 0x2c3 silhouetteName
|
||||
708 0x2c4 silName
|
||||
709 0x2c5 silver
|
||||
710 0x2c6 silverQuantity
|
||||
711 0x2c7 sizeBeforeEncode
|
||||
712 0x2c8 slotIndex
|
||||
713 0x2c9 sold
|
||||
714 0x2ca sort
|
||||
715 0x2cb sortPriority
|
||||
716 0x2cc source
|
||||
717 0x2cd squad
|
||||
718 0x2ce squadActives
|
||||
719 0x2cf squadBuildingSetsClientData
|
||||
720 0x2d0 squadBuildingSetsGracePeriodMinutes
|
||||
721 0x2d1 squadChallenge
|
||||
722 0x2d2 squadId
|
||||
723 0x2d3 squadName
|
||||
724 0x2d4 squadList
|
||||
725 0x2d5 squadState
|
||||
726 0x2d6 squadType
|
||||
727 0x2d7 stadia
|
||||
728 0x2d8 stadium
|
||||
729 0x2d9 Stadium
|
||||
730 0x2da StadiumId
|
||||
731 0x2db stadiumid
|
||||
732 0x2dc staff
|
||||
733 0x2dd staffManager
|
||||
734 0x2de staffHeadCoach
|
||||
735 0x2df staffFitnessCoach
|
||||
736 0x2e0 staffGKCoach
|
||||
737 0x2e1 staffPhysio
|
||||
738 0x2e2 starRating
|
||||
739 0x2e3 start
|
||||
740 0x2e4 startDateTime
|
||||
741 0x2e5 starterPack
|
||||
742 0x2e6 startingBid
|
||||
743 0x2e7 starttime
|
||||
744 0x2e8 startTime
|
||||
745 0x2e9 stat
|
||||
746 0x2ea statBonus
|
||||
747 0x2eb state
|
||||
748 0x2ec stats
|
||||
749 0x2ed statsList
|
||||
750 0x2ee stateParam1
|
||||
751 0x2ef stateParam2
|
||||
752 0x2f0 status
|
||||
753 0x2f1 storeEnabled
|
||||
754 0x2f2 storeEnabled_JP
|
||||
755 0x2f3 storyModeRewardEnabled
|
||||
756 0x2f4 coinsProcessed
|
||||
757 0x2f5 championsScheduleViewPeriodInMinutes
|
||||
758 0x2f6 string
|
||||
759 0x2f7 style
|
||||
760 0x2f8 styleAttribMods
|
||||
761 0x2f9 subtype
|
||||
762 0x2fa success
|
||||
763 0x2fb SUCCESS
|
||||
764 0x2fc successfulTackles
|
||||
765 0x2fd suspension
|
||||
766 0x2fe swap
|
||||
767 0x2ff swapPlayerDefIds
|
||||
768 0x300 tagged
|
||||
769 0x301 taggedByProduction
|
||||
770 0x302 taggedByUser
|
||||
771 0x303 TalkRating
|
||||
772 0x304 team
|
||||
773 0x305 teamId
|
||||
774 0x306 teamid
|
||||
775 0x307 teamChemistry
|
||||
776 0x308 teamOfTournamentWinner
|
||||
777 0x309 teamRating
|
||||
778 0x30a teamRating1To100
|
||||
779 0x30b text
|
||||
780 0x30c tfaData
|
||||
781 0x30d tFAEnabled
|
||||
782 0x30e tFAResendIntervalSecs
|
||||
783 0x30f enableFloatPointSquadRating
|
||||
784 0x310 enableLegacyYearInfoInItemResourceId
|
||||
785 0x311 tfaState
|
||||
786 0x312 thresholdPoint
|
||||
787 0x313 tiebreak
|
||||
788 0x314 tiebreaker
|
||||
789 0x315 tier
|
||||
790 0x316 tierEnd
|
||||
791 0x317 tierLevel
|
||||
792 0x318 tierStart
|
||||
793 0x319 tierType
|
||||
794 0x31a timesCompleted
|
||||
795 0x31b timestamp
|
||||
796 0x31c timesWon
|
||||
797 0x31d timeUntilEnd
|
||||
798 0x31e timeUntilStart
|
||||
799 0x31f titleHolderPersonaId
|
||||
800 0x320 tokenRedemptionEnabled
|
||||
801 0x321 token
|
||||
802 0x322 tokens
|
||||
803 0x323 TOO_MANY_SEASONS
|
||||
804 0x324 TOO_MANY_TOURNAMENTS
|
||||
805 0x325 total
|
||||
806 0x326 totalCredits
|
||||
807 0x327 totalGames
|
||||
808 0x328 tournament
|
||||
809 0x329 tournamentCoins
|
||||
810 0x32a tournamentData
|
||||
811 0x32b tournamentId
|
||||
812 0x32c tournamentProgress
|
||||
813 0x32d tournamentQuitEnabled
|
||||
814 0x32e tournamentTrophyRound
|
||||
815 0x32f tournamentType
|
||||
816 0x330 trade
|
||||
817 0x331 tradeId
|
||||
818 0x332 tradepile
|
||||
819 0x333 tradePile
|
||||
820 0x334 trader
|
||||
821 0x335 tradeState
|
||||
822 0x336 tradingEnabled
|
||||
823 0x337 training
|
||||
824 0x338 trainingItem
|
||||
825 0x339 transaction
|
||||
826 0x33a transactionId
|
||||
827 0x33b transferValue
|
||||
828 0x33c treeType
|
||||
829 0x33d triesMax
|
||||
830 0x33e triesPeriod
|
||||
831 0x33f triesRemaining
|
||||
832 0x340 trophies
|
||||
833 0x341 trophiesFeaturedOffline
|
||||
834 0x342 trophiesFeaturedOnline
|
||||
835 0x343 trophiesOffline
|
||||
836 0x344 trophiesOnline
|
||||
837 0x345 trophiesSeasonOffline
|
||||
838 0x346 trophiesSeasonOnline
|
||||
839 0x347 trophy
|
||||
840 0x348 trophyId
|
||||
841 0x349 trophyResourceId
|
||||
842 0x34a trophyUseCount
|
||||
843 0x34b trophyUserCount
|
||||
844 0x34c TROPHY_FEATURED_OFFLINE
|
||||
845 0x34d TROPHY_FEATURED_ONLINE
|
||||
846 0x34e TROPHY_OFFLINE
|
||||
847 0x34f TROPHY_ONLINE
|
||||
848 0x350 true
|
||||
849 0x351 trusted
|
||||
850 0x352 tutorial
|
||||
851 0x353 tutorialClientData
|
||||
852 0x354 type
|
||||
853 0x355 typeValue
|
||||
854 0x356 ULTIMATE
|
||||
855 0x357 unclaimedPrizesChampionEvents
|
||||
856 0x358 uniqueId
|
||||
857 0x359 unlock
|
||||
858 0x35a UNLOCKED
|
||||
859 0x35b unlockreq
|
||||
860 0x35c unlocks
|
||||
861 0x35d unopened
|
||||
862 0x35e unopenedPacks
|
||||
863 0x35f untilEndSeconds
|
||||
864 0x360 untilStartSeconds
|
||||
865 0x361 untradeable
|
||||
866 0x362 untradeableCount
|
||||
867 0x363 updateTime
|
||||
868 0x364 upcomingChampionEvents
|
||||
869 0x365 uri
|
||||
870 0x366 url
|
||||
871 0x367 useAuth
|
||||
872 0x368 useCount
|
||||
873 0x369 useCredits
|
||||
874 0x36a useDefaultImage
|
||||
875 0x36b usePreOrder
|
||||
876 0x36c user
|
||||
877 0x36d userData
|
||||
878 0x36e userHubClientData
|
||||
879 0x36f userId
|
||||
880 0x370 userInfo
|
||||
881 0x371 userPoints
|
||||
882 0x372 userRegistration
|
||||
883 0x373 userStats
|
||||
884 0x374 userTierLevel
|
||||
885 0x375 useTime
|
||||
886 0x376 valid
|
||||
887 0x377 value
|
||||
888 0x378 Value
|
||||
889 0x379 values
|
||||
890 0x37a view
|
||||
891 0x37b visEnd
|
||||
892 0x37c visEndDays
|
||||
893 0x37d visible
|
||||
894 0x37e visStart
|
||||
895 0x37f visStartDays
|
||||
896 0x380 watched
|
||||
897 0x381 watchlist
|
||||
898 0x382 win
|
||||
899 0x383 winForm
|
||||
900 0x384 winning
|
||||
901 0x385 winsRemaining
|
||||
902 0x386 WORLDCLASS
|
||||
903 0x387 won
|
||||
904 0x388 XTicket
|
||||
905 0x389 year
|
||||
906 0x38a yellowCards
|
||||
|
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
# Dump the FUT atom name table (atom index -> key string) from CardsDLL.
|
||||
# Table at VA 0x1802d2760 is an array of char* pointers into .rdata.
|
||||
import struct, sys
|
||||
|
||||
DLL = "/tmp/fut/cardsdll.dll"
|
||||
data = open(DLL, "rb").read()
|
||||
|
||||
# (VA_start, size, file_off) from objdump -h
|
||||
SECTIONS = [
|
||||
(0x180001000, 0x1e3f62, 0x400), # .text
|
||||
(0x1801e5000, 0xa4094, 0x1e4400), # .rdata
|
||||
(0x18028a000, 0x54000, 0x288600), # .data
|
||||
]
|
||||
|
||||
def va_to_off(va):
|
||||
for start, size, off in SECTIONS:
|
||||
if start <= va < start + size:
|
||||
return off + (va - start)
|
||||
return None
|
||||
|
||||
def read_cstr(va, maxlen=128):
|
||||
off = va_to_off(va)
|
||||
if off is None:
|
||||
return None
|
||||
end = data.find(b"\x00", off, off + maxlen)
|
||||
if end < 0:
|
||||
return None
|
||||
try:
|
||||
return data[off:end].decode("ascii")
|
||||
except UnicodeDecodeError:
|
||||
return None
|
||||
|
||||
TABLE_VA = 0x1802d2760
|
||||
off = va_to_off(TABLE_VA)
|
||||
atoms = {}
|
||||
for i in range(0, 1200):
|
||||
ptr = struct.unpack_from("<Q", data, off + i * 8)[0]
|
||||
if ptr == 0:
|
||||
s = None
|
||||
else:
|
||||
s = read_cstr(ptr)
|
||||
if s is None:
|
||||
# allow a few gaps then stop if we run off the end
|
||||
if i > 40 and all(struct.unpack_from("<Q", data, off + (i + k) * 8)[0] == 0 for k in range(4)):
|
||||
break
|
||||
continue
|
||||
if s.isprintable() and 1 <= len(s) <= 40:
|
||||
atoms[i] = s
|
||||
|
||||
for i in sorted(atoms):
|
||||
print(f"{i}\t0x{i:x}\t{atoms[i]}")
|
||||
print(f"# total {len(atoms)} atoms", file=sys.stderr)
|
||||
@@ -575,6 +575,18 @@ FUT_RS4_CONFIG = (
|
||||
[("FUT_RS4_APIURL_%s" % m, UTAS_BASE) for m in FUT_RS4_MODULES]
|
||||
+ [("FUT_RS4_URL_%s" % c, UTAS_BASE) for c in FUT_RS4_CALLS_BOOT]
|
||||
+ [("FUT_RS4_BASE_URL", UTAS_BASE)]
|
||||
# STORE gate: FIFA shows "store not available" unless these config flags are
|
||||
# true. The store-screen entitlement checks (CardsDLL 0x18001749d vtable+0x138 /
|
||||
# 0x1800175a2 vtable+0x280) read the IS_*/*_PURCHASE_ENABLED booleans -- SEPARATE
|
||||
# from storeEnabled. Full confirmed list from ENDPOINT_MAP store § (grepped in
|
||||
# cardsdll.strings). (Also gated by GetSystemMetrics > 1024x768, client-side.)
|
||||
+ [(k, "1") for k in (
|
||||
"storeEnabled", "cardPackStoreEnabled", "pointsPackStoreEnabled",
|
||||
"cardPackStoreEnabled_JP", "coinEnabled", "coinEnabled_JP",
|
||||
"IS_STORE_ENABLED", "IS_COIN_PURCHASABLE", "IS_FIFAPOINT_AVAILABLE",
|
||||
"IS_FIFAPOINT_PURCHASABLE", "IS_EASTORE_SERVICE_READY",
|
||||
"COINS_PURCHASE_ENABLED", "POINTS_PURCHASE_ENABLED", "MONEY_PURCHASE_ENABLED",
|
||||
)]
|
||||
# NOTE: do NOT advertise itemDbVersion/checkServerDbVersion here or in any
|
||||
# response -- proven inert (wf_96b6c0c5): they are JSON field names that route
|
||||
# to the value-SKIP handler 0x180135ff0, never compared. See docs/CARD_SYSTEM.md.
|
||||
|
||||
@@ -154,6 +154,11 @@ ROUTES = [
|
||||
# ---- store / packs (match regardless of /ut/game vs /ut/v2/game prefix) ----
|
||||
(re.compile(r"/store/purchasegroup"), lambda m, h: store_catalog(h)),
|
||||
(re.compile(r"/store/transaction"), lambda m, h: store_buy(h)),
|
||||
# ut/v2/game/fifa17/store = FutStorePackQuantities ELIGIBILITY GATE, not a
|
||||
# quantity list. deser 0x1801758c0 reads one key "result" (atom 0x288); the
|
||||
# store screen shows "not available" unless this is SUCCESS. (ENDPOINT_MAP
|
||||
# store §2.) Bare /store only -- purchasegroup/transaction matched above.
|
||||
(re.compile(r"/store(\?|$)"), lambda m, h: (200, {"result": "SUCCESS"})),
|
||||
(re.compile(r"/purchased"), lambda m, h: purchased_items(h)),
|
||||
(re.compile(r"^/ut/auth"), lambda m, h: (200, auth_body())),
|
||||
(re.compile(r"^/ut/delete/auth"), lambda m, h: (200, {})),
|
||||
@@ -214,10 +219,19 @@ def store_catalog(h):
|
||||
# {name,funds,finalFunds}; display name is "description". (wf a245577b —
|
||||
# {purchaseGroups:...} + packId/price were all unknown atoms => empty => "not
|
||||
# available".) quantity:0 => unlimited.
|
||||
# Parse format is verified correct ("purchase" array, per-pack 0x18013af30).
|
||||
# The store still rejected minimal packs -> a pack must be COMPLETE to count as
|
||||
# valid: content info + BOTH a coins price (currencies) and a FIFA-Points price
|
||||
# (extPrice {finalPrice,originalPrice} -> {"mtx":N}).
|
||||
packs = []
|
||||
for p in PACK_CATALOG:
|
||||
gold = p["gold"]
|
||||
mtx = max(1, p["price"] // 100)
|
||||
packs.append({
|
||||
# assetId (atom 0x23) is the REAL pack identity the deser 0x18013af30
|
||||
# reads (ENDPOINT_MAP store §). id/packType/quantity/saleType/isPremium
|
||||
# are all unknown atoms -> SKIP (harmless no-ops, kept for readability).
|
||||
"assetId": p["id"],
|
||||
"id": p["id"],
|
||||
"packType": "GOLD" if gold else "BRONZE",
|
||||
"description": p["name"],
|
||||
@@ -228,11 +242,14 @@ def store_catalog(h):
|
||||
"saleType": "PERMANENT",
|
||||
"sortPriority": p["id"] - 100,
|
||||
"currencies": [{"name": "coins", "funds": p["price"], "finalFunds": p["price"]}],
|
||||
# extPrice inner keys are amount(0x1b)/currency(0xc4), NOT mtx (skipped).
|
||||
"extPrice": {"finalPrice": {"amount": mtx, "currency": "fifapoints"},
|
||||
"originalPrice": {"amount": mtx, "currency": "fifapoints"}},
|
||||
"packContentInfo": {
|
||||
"bronzeQuantity": 0 if gold else p["count"],
|
||||
"silverQuantity": 0,
|
||||
"goldQuantity": p["count"] if gold else 0,
|
||||
"rareQuantity": p["count"] if gold else 0,
|
||||
"rareQuantity": 1 if gold else 0,
|
||||
"itemQuantity": p["count"],
|
||||
},
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user