Transmog: full slot-echo, retail slot model, stamped weapon options, and split builders#36
Transmog: full slot-echo, retail slot model, stamped weapon options, and split builders#36
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a7a42ad072
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| appendWeaponRows(12, {8, 9, 10, 11}, equipmentSet->MainHandOption, mhAppearance, mhEnchant); | ||
| appendWeaponRows(13, {8, 9, 10, 11}, equipmentSet->OffHandOption, ohAppearance, ohEnchant); |
There was a problem hiding this comment.
Persist weapon option enums with transmog outfits
MainHandOption/OffHandOption now gate whether any weapon appearance row is emitted (appendWeaponRows only sets imaID when selectedOption == option), but these new fields are not loaded or written in the transmog outfit DB paths (_LoadTransmogOutfits and CHAR_{SEL,UPD,INS}_TRANSMOG_OUTFIT still only handle appearances/enchants/secondary shoulder). After relog or restart, both options reset to 0, so previously saved weapon transmogs stop appearing in ViewedOutfit/slot echoes until the outfit is edited again.
Useful? React with 👍 / 👎.
Motivation
DT=14to offhand.\n- Ensure storedTransmogOutfitsand liveViewedOutfituse distinct behavioral semantics and stamp real weapon option enums into metadata.\nDescription
SMSG_TRANSMOG_OUTFIT_SLOTS_UPDATEDby adding aSlotsvector to the server packet model and serializingSetID,SlotCount, and 16-byte slot rows (seeTransmogrificationPackets.h/cpp: TransmogOutfitSlotsUpdated::Write).\n- Parse and use the option byte in incoming outfit packets and update slot-option selection in bothTransmogOutfitNew::Read()andTransmogOutfitUpdateSlots::Read()(consumebyte[1]and setMainHandOption/OffHandOption).\n- AddDT=14→EQUIPMENT_SLOT_OFFHANDrouting inDisplayTypeToEquipSlot.\n- ExtendEquipmentSetDatawithMainHandOptionandOffHandOptionfields to persist selected weapon option enums.\n- Replace one sharedfillOutfitDatabuilder with a small writer + two thin wrappers:fillStoredOutfitData(stored semantics) andfillViewedOutfitData(live semantics), implemented inPlayer::_SyncTransmogOutfitsToActivePlayerData.\n- Implement retail-aligned row generation in the writer: 12 armor rows (option=0), 9 MH option rows, 9 OH option rows in the verified retail order; armor rows useSlotOption=0and paired weapon placeholders (options 8–11) emitAppearanceDisplayType=IllusionDisplayType=4; no fake weapon option-0 rows for the weapons.\n- StampTransmogOutfitMetadata::StampedOptionMainHand/OffHandwith the selected option enum values (not booleans), and populate theSMSGslot echo from the finalized pending outfit inFinalizeTransmogBridgePendingOutfit()(handler writes 30-row response built from pending outfit).\n- Files changed (key locations):\n -src/server/game/Server/Packets/TransmogrificationPackets.h/.cpp— packet model,DisplayTypeToEquipSlot,TransmogOutfitNew::Read,TransmogOutfitUpdateSlots::Read,TransmogOutfitSlotsUpdated::Write.\n -src/server/game/Entities/Player/EquipmentSet.h— addedMainHandOption,OffHandOption.\n -src/server/game/Entities/Player/Player.cpp—_SyncTransmogOutfitsToActivePlayerDatasplit writer + retail row layout and stamped-option handling.\n -src/server/game/Handlers/TransmogrificationHandler.cpp— persist options from incoming CMSG to saved set and build SMSG rows from finalized pending outfit.\nTesting
git diff --check(no whitespace/patch issues) — succeeded.\n- Attempted local configure:cmake -S . -B build -GNinja— configure failed in this environment due to missing external dependency (Boost), so a full compile was not completed here (environment lacks required system packages).\n- Build command from project docs (cd out/build/x64-Debug && ninja -j$(nproc)) could not be executed in this container because the build output dir is not present.\nNotes: changes were committed (branch/commit present in working tree); automated compile in this container was blocked by missing system dependencies, but the patch is intentionally localized and small; recommend running a full build in your normal CI/development environment to validate compile and runtime behavior, then exercising the transmog UI flow to verify the 30-row SMSG echo and the stamped option behaviors described in the verification checklist.
Codex Task