fifa17: give the staging manager the rating the client re-rates it to

The bring-up mints a manager (neither club owns one, and FIFA refuses to start a
match without one). Its catalog entry carried nation/league/team read out of
managercards but not `value` or `rare`, so discard pricing declined for it and
fell back to the placeholder ladder: 150 paid against the 282 the client computes
for itself.

Carry managercards.value 88 and managercards.rare 1, from the same table and with
the same provenance as the fields already there. `rare` is not cosmetic -- it
selects the discard price column, which is the whole difference between 282 and
97.

Both are live-confirmed on the running client: coach_probe grades the manager
record HIT (so +0xb4 == value and +0x58 == rare) and discard_probe reads the
value it computed for itself at +0x3c as 282.

Verified on staging: the manager now quick-sells for exactly 282. With this, every
card the client prices for itself -- manager, GK coach, both fitness coaches --
is paid the number it displays.
This commit is contained in:
funman300
2026-08-21 22:55:01 +00:00
parent 755f237f17
commit f97654af86
+15 -1
View File
@@ -214,10 +214,16 @@ STAGING_CLUB_ITEMS = [
# Every value below is read out of the client's OWN tables, never invented:
# managercards.carddbid 1000509 (assetid == carddbid on all 417 rows)
# managercards.nation 45 -> the flag and the nation half of chemistry
# managercards.value 88 -> the rating the client re-rates this card to
# managercards.rare 1 -> selects its discard price column
# manager[509].surname "Luis Enrique", teamid 241
# leagueteamlinks[241].leagueid 53 -> the badge and the league half of chemistry
# League 53 is also the dominant league in the restored squad (12 of 23 players),
# so this manager is the chemistry-correct choice for it, not an arbitrary one.
#
# value/rare are LIVE-CONFIRMED: read back out of the running client's own record
# (tools/coach_probe.py grades it HIT, so +0xb4 == value and +0x58 == rare), and
# the discard value it computes for itself at +0x3c is 282 = 88 * 320 / 100.
MANAGER_SUBTYPE = 4
STAGING_MANAGER = {
"owned_id": "owned-a-manager",
@@ -226,6 +232,8 @@ STAGING_MANAGER = {
"nation": 45,
"league_id": 53,
"team_id": 241,
"rating": 88,
"rare": 1,
"label": "Luis Enrique",
}
@@ -602,12 +610,18 @@ def materialise(lay: Layout) -> None:
catalog["cards"][mgr["card_id"]] = {
"asset_id": mgr["resource_id"],
"version": 0,
"rareflag": 0,
# managercards.rare, NOT cosmetic: it selects the discard price column,
# and rare 1 is why this manager is worth 282 rather than 97.
"rareflag": mgr["rare"],
"kind": "staff",
"subtype": MANAGER_SUBTYPE,
"team_id": mgr["team_id"],
"nation": mgr["nation"],
"league_id": mgr["league_id"],
# managercards.value. The client re-rates staff from its own DB, so
# without this the server cannot price a quick sell to the number the
# client displays.
"rating": mgr["rating"],
}
with open(safe_path(lay.cards), "w") as fh:
json.dump(definitions, fh, indent=2)