Files
GaCy-GO/docs/aa-scene-npc-recovery.md
T
2026-10-28 18:54:43 +07:00

75 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AA scene NPC recovery
## Observed loading failure
The current Client reports `CreateNPCMonster Invalid ID 4015011` while entering
Peak 204 from selected group 2. The source resource row supplies entrance
3013501, maze group 8, event 30502021 and NPC 4015011. This is a scene actor
creation failure, separate from refreshing the selected AA group.
`loadPeakResources` in `handlers_challenge.go` copies `NpcMonsterIDList` into
`PeakStageData.MonsterID`. `loadChallengeScene` in
`handlers_challenge_scene.go` forwards that value directly into
`SceneNpcMonsterInfo.MonsterId`; no current Client config lookup validates it.
The battle wave monster is a different identifier namespace and cannot be
converted into an adventure NPC by truncating digits.
## Evidence boundary
The existing `WorldBattleConfig.json` NPC catalog is a partial capture of 153
NPCs, from assembly SHA-256
`c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144`.
An offline comparison finds that 42 of the 44 Peak rows refer to at least one
NPC outside that partial catalog. Absence from it is therefore insufficient
to declare an AA room invalid. Using it as a mandatory allow-list would disable
most AA rooms, including ones not demonstrated to fail.
The reported Client error establishes that this particular NPC failed in the
actual session. It does not establish a replacement NPC or prove that all
other Peak rows are invalid. No replacement ID, arbitrary fallback monster,
save migration was justified by the old partial catalog alone.
## Reference-backed correction prepared
The FFGO update inspected on 2026-10-26 contains an explicit
`challenge_peak_extra_data` JSON object at binary file offset `0x114c212`,
decoded length 9101 bytes, binary SHA-256
`235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86`.
Its Peak 204 mapping is NPC **4015010**, entrance **3013701**, maze group
**10**. These values come from the reference object, not ID arithmetic.
The full reference extraction is retained in
`battle_diagnostics/ffgo-20261026/challenge_peak_extra_data.json`.
`resources/ChallengePeakSceneOverrides.json` retains all 44 explicit mappings
and their provenance. `peak_scene_overrides.go` applies only the scene NPC,
entrance and maze group after loading canonical Peak group memberships.
Battle event IDs, waves, buffs, targets and saved/active runs are unchanged.
The loader validates provenance, duplicate/unknown IDs, group membership and
merged resource scene placements. A missing mapping or unusable placement
is stored as a configuration error. `StartChallengePeak` rejects it before
creating battle/run state or sending EnterScene; unknown Peak IDs also now
return the existing typed challenge-not-exist error instead of empty success.
The first 36 reference mappings have monster placements in raw `res.json`.
The last eight (Peak 1001–1104) require supplementary placements or further
capture; no placement is invented when the merged loader cannot supply one.
The resource is labeled reference evidence, not a captured Client table.
`go build ./internal/gameserver` succeeded; no tests were run, no deployment
was performed by this subtask, and actual Client NPC/scene acceptance remains
unverified.
## Next bounded capture
`tools/aa_npc_config_metadata.lua` is prepared outside `scripts/` and passes
Lua syntax parsing. It inspects only six named candidate types, at eight
members per heartbeat, to locate `NPCManager.CreateNPCMonster` and the
NPC/Peak flat config entry points. Missing candidate types are logged rather
than treated as proof that config is absent. It does not enumerate assembly
types, call getters, create actors, load scene graphs or send gameplay packets.
The Client process was not open during this offline inspection, so this probe
has not been staged or run. Once current native/config lookup evidence is
available, capture the relevant Peak row and each referenced NPC config to
verify or supersede the reference mapping. Client battle/scene success remains
unverified.