Files
GaCy-GO/docs/currency-wars-6900-audit.md
2026-10-28 18:54:43 +07:00

9.1 KiB

Currency Wars RET_GRID_FIGHT_CONF_MISS audit

In the current checked-in protocol, RET_GRID_FIGHT_CONF_MISS is retcode 6900. It is a configuration/state failure response, not a command ID. This audit covers all current source references found by searching internal/gameserver on 2026-10-22. It does not claim that every CW flow is implemented or Client-verified.

Client provenance correction (2026-10-22)

The target Client is the Beta 4.6.53 OS installation explicitly identified by the user. Its root GameAssembly.dll SHA-256 is c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144, matching the active-CW capture/resource identity. An earlier static lookup against the D: main-game installation was the wrong source and is excluded from this audit. The saved [GAC_CW_ACTIVE_TABLE_ROWS] runtime capture is the Beta run at route 2801 / section 4 / stage 70000006. The live process path was verified with QueryFullProcessImageName and resolves to the user's Beta installation. The attempted GridFightStageRouteConfigExcelTable.GetData and GridFightEnemyDifficultyLvConfigExcelTable.GetData lookups returned an empty row and No such type, respectively; this only shows those exact Lua type/API lookups did not resolve the expected data in this Beta runtime, not that the underlying game data is absent.

Handler Condition returning 6900 Current status
GridFightStartGamePlay — handlers_currency_wars.go CW catalog or saved snapshot cannot be read, or initial run data cannot be built Fails closed; log includes the setup failure.
GridFightHandlePendingActionScRsp — currency_wars_entry_choice.go Pending oneof is unsupported, does not match the active queue, or action processing fails Known missing pending arms remain incomplete; current handler logs unsupported arms and validation errors.
GridFightEnterBattleStage — currency_wars_battle.go Preparation state or battle envelope is invalid, or the selected node has no matching captured enemy recipe This is the user's current failure. The branch is now selected from the saved one-based choice, but stage 70000006 / penalties 91113 and 91114 have no captured recipes.
GridFightBuyExp — currency_wars_experience.go Required GridFight_LevelUpExp catalog rule is missing or outside the supported range Returns 6900; catalog rule is required for a safe purchase.
GridFightSpotLightEnter — currency_wars_spotlight.go Preparation/config is missing or a Spotlight offer cannot be built Returns 6900 with a diagnostic log.
GridFightRecycleRole — currency_wars_transactions.go No captured sale quote exists for the selected role/star Returns 6900 and logs the missing quote.
GridFightBuyGoods — currency_wars_transactions.go Party property scales disagree or the offered role/star variant is absent from captured resources Returns 6900; no transaction is committed.
PVEBattleResult CW settlement — handlers_battle.go Settlement validation or persistence fails Returns 6900 and logs the settlement error.
GridFightQuitSettle — currency_wars_quit.go Saving the abandoned-run state fails Returns 6900 and logs the save error.

Encounter blocker

The active saved run is Standard Gambit, route 2801, chapter 1, section 4, stage 70000006. A read-only capture from the running Client 4.6.53 confirms stage level 90, HardLevelGroup 1, StageExcel EliteGroup 0, and base/current/all difficulty deltas 0. The two branch records are:

Branch Option Penalty Wave Monsters as id:role_star
1 (selected) 11303 91113 1 200203009:1, 200201014:1, 202302016:2, 200201014:1, 201201013:1, 200201014:1, 200201014:1, 201201013:1, 200203009:1, 201301103:3, 200201014:1, 201302014:2
2 11304 91114 1 201201013:1, 200203009:1, 200201014:1, 200201014:1, 201302014:2, 201201013:1, 201201013:1, 200201014:1, 200203009:1, 200201014:1, 201302014:3, 201301103:2

The only saved recipe in CurrencyWarsEnemyPlans.json still covers stage 70000003 / penalty 92013. The builder correctly resolves the chosen branch and fails closed when its recipe is absent. The new capture does not prove the SceneMonsterWaveParam.EliteGroup or CPHIINKIDEB formation value: StageExcel has no monster list, and the saved branch message contains wave ID, monsters, stars, option and penalty but no formation-wave ID. The direct Lua API lookup for the expected formation/elite tables was unavailable. Therefore stage 70000006 is still not safe to add to the recipe resource; no battle values were guessed.

Subsequent Encounter entry recovery

The preceding missing-recipe finding describes the state before recovery. A typed MemoryPack BattlePlan was subsequently recovered from the isolated reference run for route 2801 / chapter 1 / section 4 / penalty 91114: elite group 1802, difficulty 0, one wave, formation 5, twelve monsters. The reference BuildEncounterBattlePlan chooses elite group and formation at node scope, independently of option quality. This supports the same wave parameters for saved option 91113; its penalty and monsters remain those from the player's selected branch.

The matching Beta formation consumer at RVA f0c9d50 calls the flat getter at RVA 1e33bb30 with the selector carried by SceneMonsterWaveParam tag 6. A bounded read on a managed handbook callback verified row 5: MaxTeammateCount 5, empty ParamList/Ability, ClearPreviousAbility false. Evidence: ev_ac0ddf4c7244887fe99edcde069382c076d0f5f96f887bbc44a4bb34b2ab85fc. The active StageRow was captured again for level 90 / hard group 1. These values are now resource entries with per-entry provenance; no game-value literals were added to the battle builder. The saved branch supplies every monster ID and star.

The staged Game server compiled and was copied to the root, hash-checked, and restarted visibly. The user confirmed Encounter combat now works. Own logs confirm stage 70000006 Battle 357 entered and PVEBattleResult arrived; settlement then rejected the absent next-node recipe, producing a blank Client result popup.

The selected penalty row 91113 was subsequently read from the active Beta node. The isolated reference was moved from Encounter 1-4 to the next ordered route node 1-5 and RoundBegin was captured. Only its next layer/action were imported, with queue counters rebased after existing captured actions using sequential-counter semantics. The selected-penalty settlement fix and these resource rows were built/deployed. The user's team/balances are preserved. Settlement/room-1-5 Client verification is pending; alternate option 91114 settlement and subsequent combat recipes remain incomplete. This is not complete CW progression.

tools/cw_active_encounter_capture.lua contains the bounded read-only capture used for the current encounter. tools/cw_active_wave_table_methods.lua inspects only the named 4.6.53 wave and elite table types. Both are kept in tools/; temporary copies were removed from scripts/ after collection. The probe reads reflected fields observed from this Client and depends on the current client schema; it is not a general Client-independent decoder.

The other 6900 sites are also fail-closed guards. Returning success while omitting their purchase, settlement or saved-state changes would leave the Client and server inconsistent. Unimplemented CW commands and pending arms are inventoried separately in currency-wars-coverage.md.

Combined handler and grant continuation

  • User confirmed selected Encounter Battle and settlement proceed to room 1-5; this supersedes the earlier pending Client check for that path only.
  • Added Tea Break entry response, equipment dressing/crafting and battle equipment forwarding. Compilation is confirmed; Client gameplay for these additions remains unverified.
  • Current Client _ProcessUpdateInfo dispatch evidence establishes equipment Add/Update/Remove as LMOLELDIKMA/DDBKEOPKPFI/PENGEDECBNF. Supply now sends Add instead of Remove.
  • /cw role, /cw equip, /cw exp and read-only catalog commands use captured resources and the existing Preparation transaction path. Additive grants and queue acknowledgement share the snapshot CAS/atomic file replacement. No adventure inventory is replaced.
  • Reference GridFightSession.AddKilledMonsterOrbs awards configured Orb drops for verified killed monster instances in Monster nodes; Boss talent Orb rewards have a separate path. This is evidence for comparison, not proof that the current Beta always gives an Orb after every fight. Current Go automatic Orb grant/opening is still missing, as are current-revision Orb/Consumable/Forge catalog captures.
  • Dispatcher inventory now contains 22 registration names, including equipment Forge use. Neither this count nor compilation proves a complete CW run; see the missing request/action arms in currency-wars-coverage.md.

Current-revision reward captures now include 529 Orb, 18 consumable, 11 Forge and 478 combination rows. Grant commands are implemented; opening Orbs and applying consumable effects remain incomplete. Offline comparison found only 347 matching combination rows in the older reference, so its entire bonus table cannot be treated as current Client data.