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

3.9 KiB
Raw Permalink Blame History

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.