Add .transmog check diagnostic command#233
Merged
Merged
Conversation
Adds a GM/console command that audits whether a given destination/source item pair can be transmogged for a target player, working for both online and offline characters via CharacterCache and direct character_skills / character_spell lookups. Output is split into Pair, per-Item, and Collection sections with one summary line each. Co-Authored-By: Claude Opus 4.7 (1M context) <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.
Summary
.transmog check <player> <destItem> <srcItem>— a GM/console command that audits whether a given destination/source item pair could be transmogged for a target player, and reports which rules fail.CharacterCacheand falls back to directcharacter_skills/character_spellreads when noPlayer*is available. The collection check uses the account-keyedcollectionCache, which is loaded regardless of who's online.[+]all checks passed,[-]one or more failures (semicolon-separated), or[~]whitelisted/disabled-system skip. Plain text — no color codes — so it stays readable on the worldserver console.What's covered by the checks
IsSubclassMismatchAllowed/IsInvTypeMismatchAllowedhelpers.IgnoreReq*andAllowLowerTiersconfig toggles.GetUseCollectionSystem(); looks up the source ItemId in the account'scollectionCache.Strings
All new diagnostic strings (IDs 46–80, English + 8 locales: koKR/frFR/deDE/zhCN/zhTW/esES/esMX/ruRU) are appended to the existing
data/sql/db-world/updates/2026_05_09_migrate_strings_to_module_string.sqlmigration, alongside thecommandtable entry registering the subcommand at security level 2.Known limitation
IsSubclassMismatchAllowedinternally callsTierAvailable(player, 0, ...). For an offline target,playeris null andplayerGuid=0, so theAllowLowerTiersarmor-mismatch path short-circuits to false. This can yield a false-negative "Subclass mismatch — not allowed" verdict in the narrow case of armor pairs with different subclasses where the offline player actually owns higher-tier armor. Easy to address in a follow-up by threading the guid through, but didn't want to widen the touched API surface in this PR.Test plan
.transmog check <online-name> <destId> <srcId>from chat: known-good pair returns=== RESULT: CAN transmog ===.[~] Whitelisted — all requirement checks are bypassed.UseCollectionSystem=0: collection section shows[~] Collection system disabled; otherwise verifies presence in the account collection cache.