Restore quest gameobjects: 57 uncompletable quests fixed - #179
Open
Chris443C wants to merge 2 commits into
Open
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
221 quests currently cannot be completed. Each has an
ObjType = 3(gameobject) objective pointing at agameobject_protos.Entrythat 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=131402on quest Grimmenhagen Burning, then measured against the database.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
modelNameas a string ("WORLD OBJ dw_tree_pine01_var00sw"), not the numericDisplayIDthis schema needs. That map was derived from data already here: the 796 distinct models across the 2633 protos present, pairing the API'smodelNameagainst the knownDisplayID.Why 74 and not 237
Deliberately conservative. An entry is restored only when both its model is known — so
DisplayIDis real rather than guessed — and the API carries spawn placement.A guessed
DisplayIDrenders 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 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 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