Repository navigation
feat(gateway): send the quest and group messages the client expects - #698
Merged
Merged
Conversation
Quest accept Refusals reach the client as SMSG_QUESTGIVER_QUEST_INVALID, SMSG_QUESTLOG_FULL or SMSG_QUESTGIVER_QUEST_FAILED, each followed by SMSG_GOSSIP_COMPLETE. The Module refuses an accept with no free quest-log slot. CMSG_QUESTGIVER_CANCEL closes the gossip. Finished explore and event objectives send SMSG_QUESTUPDATE_COMPLETE. A member kicked from a surviving Group hears SMSG_GROUP_UNINVITE. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Mathih13
force-pushed
the
feat/opcode-parity-quest-instance
branch
from
October 15, 2026 09:04
3660b2e to
b292793
Compare
This was referenced Oct 15, 2026
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.
Several quest and group states had no message to the client. A refused quest accept left the window silent. The client never heard that a quest log was full, that a member was kicked, or that an objective was done.
This change sends the vmangos message for each state that already exists:
SMSG_QUESTGIVER_QUEST_INVALID(level, race, already on the quest, other requirements),SMSG_QUESTLOG_FULL, orSMSG_QUESTGIVER_QUEST_FAILEDwith the inventory-full reason when the source item does not fit. Each refusal, a giver Refusal (range, role) included, ends withSMSG_GOSSIP_COMPLETE, as vmangos closes the gossip on every refusal path.CMSG_QUESTGIVER_CANCELcloses the gossip withSMSG_GOSSIP_COMPLETE.SMSG_QUESTUPDATE_COMPLETEbefore the quest-log sync.SMSG_GROUP_UNINVITEbeforeSMSG_GROUP_DESTROYED. A kick that disbands the Group sends onlySMSG_GROUP_DESTROYED. vmangos sends an emptySMSG_GROUP_LISTafter the uninvite instead.The acceptance Refusal text now lives in
lyracore_shared::quest, so the Module and the Gateway cannot drift. The text is unchanged.Tests: byte tests for the three new quest packets, Fake dispatcher tests for each Refusal, relay tests, and durable tests for the log-full check (new, repeatable and failed quests) and the kick events. CI runs the durable tests.
Verification:
cargo fmt --all -- --check, Gateway clippy with-D warnings, Gateway tests (2028), Module lib tests (1581), shared tests (312) and the wasm check pass. The durable testsquest_log_fullandgroup_uninvitecompile with--no-run. CI runs them.origin/main, new test files included. It passed. I removed narration and kept one-line contracts: three packet layouts with opcodes, theLiveinsert replay rule, the gossip-close ordering, and theUNINVITEDevent meaning. No removed comment held a pointer or tool annotation.Claude Sonnet 5.5 in Claude Code.