Repository navigation
feat: show melee swing errors and the periodic, miss and energize combat log - #700
Merged
Merged
Conversation
…ergize A player's due melee swing that cannot reach or face its target stores a Swing Error on the engagement row; a landed swing clears it. Each periodic damage, heal or energize tick writes a PERIODIC_LOG cast event at the target, except a heal on a full-health unit. A damage spell rolls its hit once per target, so a missed target takes none of its effects, and the GO row carries the Cast Miss and any energize. A swing that ends a Duel is no killing blow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sages Relay SMSG_ATTACKSWING_NOTINRANGE and _BADFACING on a Swing Error change, SMSG_PERIODICAURALOG for each tick, SMSG_SPELLENERGIZELOG, the GO miss list and SMSG_SPELLLOGMISS for an instant caster, SMSG_SPELL_FAILED_OTHER to bystanders, SMSG_AI_REACTION on a live creature aggro and SMSG_PARTYKILLLOG to the killer. Refuse pet-bar casts, ignore growth-aura and pet-info requests, and name mount refusals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mathih13
force-pushed
the
feat/opcode-parity-combat-spell
branch
from
October 15, 2026 11:17
d96c322 to
f692c89
Compare
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.
The 1.12.1 client gave too little combat feedback on LyraCore. A player who swung at a target out of reach or behind them got no message. Damage-over-time, heal-over-time and energize ticks did not show in the combat log. A spell that missed looked like a hit for zero damage. Bystanders of an interrupted player cast kept a full cast bar.
The Module now records these outcomes, and the Gateway sends the vanilla messages for them:
SMSG_ATTACKSWING_NOTINRANGEorSMSG_ATTACKSWING_BADFACINGonce per change, as vmangosUnit::UpdateMeleeAttackingStatedoes.SMSG_PERIODICAURALOGas raw bytes because gtker writes the damage school as one byte where the client reads a u32.SMSG_SPELL_GOmiss list: a miss for a physical spell, a resist for a magic one. The caster of a synced instant cast already holds a GO from the cast handler, so it getsSMSG_SPELLLOGMISSinstead.SMSG_SPELLENERGIZELOG.SMSG_SPELL_FAILED_OTHERgoes to bystanders of an interrupted player cast.SMSG_AI_REACTION(hostile) plays before a creature's attack start, for live engagements only. A reconnect replays only the attack start.SMSG_PARTYKILLLOG. A swing that ends a Duel is no killing blow. vmangos sends the line to the tagger or a pet's owner, and to the party. Those copies and spell kills are not sent, because the tag is gone from the cache when the relay runs.SMSG_PET_CAST_FAILEDand a System Message.CMSG_CANCEL_GROWTH_AURAandCMSG_REQUEST_PET_INFOare ignored explicitly.The new columns are end-appended with defaults. The paired packages branch
feat/opcode-parity-combat-spellsetsswing_error: 0in the playerbots fixture.CONTEXT.mdadds Swing Error and Cast Miss.Verification
Rebased onto
mainafter #696, #698, #699, #701, #702 and #704. #699's root relay and #702's stand-up on damage are unchanged. A missed spell applies no effects, so it deals no damage and stands no one up.Checks run locally, under the build lock:
cargo fmt --all -- --checkcargo clippy -p lyracore-gateway --all-targets -- -D warningscargo test -p lyracore-gatewaycargo clippy -p lyracore-module --all-targets --features=debug_reducers -- -D warningscargo test -p lyracore-module --lib --features=debug_reducerscargo test -p lyracore-shared--no-runThe durable tests are
module/tests/swing_error.rs,module/tests/combat_log.rs(periodic ticks, energize, and a resisted spell applying none of its effects) andmodule/tests/duel_killing_blow.rs. I did not run them locally: they start SpacetimeDB, which crashes this machine. CI's module-durable workflow runs them.Comment review (CODING_STANDARDS.md, "Comment review"):
main, across Gateway and Module source, the Gateway tests and the three new durable test files.docs/benilla-compatibility.mdunder "Combat feedback". A pointer remains in the relay, and the resolver comment points toCONTEXT.md"Cast Miss". Both pointers resolve.main.Made with Claude Opus 5.5 in Claude Code.
🤖 Generated with Claude Code