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_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_URL_%s" % c, UTAS_BASE) for c in FUT_RS4_CALLS_BOOT]
|
||||||
+ [("FUT_RS4_BASE_URL", UTAS_BASE)]
|
+ [("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
|
# NOTE: do NOT advertise itemDbVersion/checkServerDbVersion here or in any
|
||||||
# response -- proven inert (wf_96b6c0c5): they are JSON field names that route
|
# 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.
|
# 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) ----
|
# ---- 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/purchasegroup"), lambda m, h: store_catalog(h)),
|
||||||
(re.compile(r"/store/transaction"), lambda m, h: store_buy(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"/purchased"), lambda m, h: purchased_items(h)),
|
||||||
(re.compile(r"^/ut/auth"), lambda m, h: (200, auth_body())),
|
(re.compile(r"^/ut/auth"), lambda m, h: (200, auth_body())),
|
||||||
(re.compile(r"^/ut/delete/auth"), lambda m, h: (200, {})),
|
(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 —
|
# {name,funds,finalFunds}; display name is "description". (wf a245577b —
|
||||||
# {purchaseGroups:...} + packId/price were all unknown atoms => empty => "not
|
# {purchaseGroups:...} + packId/price were all unknown atoms => empty => "not
|
||||||
# available".) quantity:0 => unlimited.
|
# 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 = []
|
packs = []
|
||||||
for p in PACK_CATALOG:
|
for p in PACK_CATALOG:
|
||||||
gold = p["gold"]
|
gold = p["gold"]
|
||||||
|
mtx = max(1, p["price"] // 100)
|
||||||
packs.append({
|
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"],
|
"id": p["id"],
|
||||||
"packType": "GOLD" if gold else "BRONZE",
|
"packType": "GOLD" if gold else "BRONZE",
|
||||||
"description": p["name"],
|
"description": p["name"],
|
||||||
@@ -228,11 +242,14 @@ def store_catalog(h):
|
|||||||
"saleType": "PERMANENT",
|
"saleType": "PERMANENT",
|
||||||
"sortPriority": p["id"] - 100,
|
"sortPriority": p["id"] - 100,
|
||||||
"currencies": [{"name": "coins", "funds": p["price"], "finalFunds": p["price"]}],
|
"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": {
|
"packContentInfo": {
|
||||||
"bronzeQuantity": 0 if gold else p["count"],
|
"bronzeQuantity": 0 if gold else p["count"],
|
||||||
"silverQuantity": 0,
|
"silverQuantity": 0,
|
||||||
"goldQuantity": p["count"] if gold else 0,
|
"goldQuantity": p["count"] if gold else 0,
|
||||||
"rareQuantity": p["count"] if gold else 0,
|
"rareQuantity": 1 if gold else 0,
|
||||||
"itemQuantity": p["count"],
|
"itemQuantity": p["count"],
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user