Skip to content

Restore quest gameobjects: 57 uncompletable quests fixed - #179

Open
Chris443C wants to merge 2 commits into
Shmerrick:masterfrom
Chris443C:fix/quest-gameobjects
Open

Restore quest gameobjects: 57 uncompletable quests fixed#179
Chris443C wants to merge 2 commits into
Shmerrick:masterfrom
Chris443C:fix/quest-gameobjects

Conversation

@Chris443C

Copy link
Copy Markdown

221 quests currently cannot be completed. Each has an ObjType = 3 (gameobject) objective pointing at a gameobject_protos.Entry that does not exist, so the objective can never be credited and the quest hangs. The same missing rows also abort PQ spawn loops, so this affects public quests too.

Found from the client's own tracker showing Invalid GameObject - QuestID 30001, ObjId=131402 on quest Grimmenhagen Burning, then measured against the database.

blocked quests      221 -> 164   (57 restored)
missing objectives  290 -> 194

Data only. No code changes.

Source

Return of Reckoning's public GraphQL API. Its gameobject ids align with this database — verified on entries 5, 44, 5006 and 2000489, the last two being the pair that abort PQ 165.

The API returns modelName as a string ("WORLD OBJ dw_tree_pine01_var00sw"), not the numeric DisplayID this schema needs. That map was derived from data already here: the 796 distinct models across the 2633 protos present, pairing the API's modelName against the known DisplayID.

Why 74 and not 237

Deliberately conservative. An entry is restored only when both its model is known — so DisplayID is real rather than guessed — and the API carries spawn placement.

A guessed DisplayID renders the object invisible, and a proto without a spawn cannot be reached. Both look fixed while remaining broken, which is worse than leaving them out, because the diagnostic query stops reporting them.

entries needed by blocked quests 237
present in the RoR API 130
fully resolvable (model + spawn) 91
restored here (complete a whole quest) 74

Entries that would only partly unblock a quest are not inserted — restoring three of the four objects a quest needs adds rows and fixes nothing.

The remaining 107 entries are in no available source. The older dumps are strictly poorer: war_world (2012 WarEmu) and WARDB rev10 (2011) hold 579 rows each against this database's 2639.

Testing

Applied to a scratch copy of the world database and verified:

  • the counts above
  • no inserted proto left without a spawn
  • no duplicates on a second run (every insert is guarded, so the script is re-runnable)

The list of unblocked quests is at the end of the script.

Known limitation

WorldO (orientation) is not exposed by the API and defaults to 0, so restored objects may face arbitrarily. Cosmetic.

🤖 Generated with Claude Code

Chris443C and others added 2 commits August 6, 2026 19:24
221 quests have an ObjType=3 objective pointing at a gameobject_protos Entry that
does not exist, so the objective can never be credited and the quest can never be
completed. The same missing rows abort PQ spawn loops, so both are affected.

    blocked quests      221 -> 164   (57 restored)
    missing objectives  290 -> 194

Source is Return of Reckoning's public GraphQL API, whose gameobject ids align
with ours - verified on entries 5, 44, 5006 and 2000489.

The API returns modelName as a string, not the numeric DisplayID this schema
needs. That map was derived from the 796 distinct models across the 2633 protos
already present, pairing the API's modelName against our known DisplayID.

Deliberately conservative: an entry is restored only when its model is known, so
DisplayID is real rather than guessed, AND the API carries spawn placement. A
guessed DisplayID renders the object invisible and a proto without a spawn is
unreachable - both look fixed while remaining broken. Of 237 needed entries, 130
are in the API, 91 are fully resolvable, and 74 of those complete a whole quest.
Entries that would only partly unblock a quest are not inserted.

Every insert is guarded, so the script is re-runnable. Verified on a scratch copy
of the world database: the counts above, no inserted proto left without a spawn,
and no duplicates on a second run.

WorldO is not exposed by the API and defaults to 0, so restored objects may face
arbitrarily. Cosmetic.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Follow-up to 08, and it needs no external source at all.

gameobject_spawns carries its own DisplayID, and 334 entries in this database have
spawn rows with no matching proto. For those the display id and the world
placement are both already present - only the proto row is missing, and that is
exactly the row a quest objective check looks for. The objects are placed in the
world but have no prototype, so nothing can be credited against them.

    blocked quests      164 -> 142   (22 restored)
    missing objectives  194 -> 152

DisplayID comes from the spawn rows themselves, so it is real rather than
inferred - a stronger source than the modelName mapping 08 had to derive. Names
come from the RoR API where it has them, since a proto Name is NOT NULL. Entries
that would only partly unblock a quest are not inserted.

Verified on a scratch copy: the counts above, and no duplicates after running the
script twice.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant