Repository navigation
Conversation
The engine won't disarm essential actors and every player is essential, so the shout and the perks silently did nothing. Lift that check only for the local player being disarmed by another player. Perk disarms are sent to the victim's client since they only run on the attacker's, and the weapon is only dropped on the victim's client so it can't be duplicated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018fvQxQEu7yvi9eRZyKsEur
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.
Requested by Eric · project thread
Part of tiltedphoques#938 ("Disarm doesn't work on players").
Why it failed
The engine refuses to disarm essential actors, and every player is made essential by
SetPlayerRespawnMode.What
HookAddTargetdropped them on the attacker's side. The victim's client still runs the effect's own condition check (e.g. victim must be attacking) instead of auto-succeeding.Drop=falseon other clients, so the weapon only drops on the victim's client. Other players' copies of the victim just lose it from inventory, even withbEnableItemDropson. Trade-off: other players don't see or can't take the dropped weapon.Verified vs assumed
Verified in Ghidra, SkyrimSE 1.6.1170:
flags2bit 18 (IS_ESSENTIAL,flags2at 0x204).DisarmEffect::Start) and 37524 (0x140678c70, the drop, reached fromDisarmEffect::Update34287 via task 0x5b).PlayerCharactervtable +0x658 is 0x140734250 (ID 40454), soHookDropObjectfires for the local player.1.7.104: only checked that the IDs resolve.
Assumed:
HookAddTargeton the attacker's client when they hit a remote copy.Dupe/loss: other clients can't drop a copy (they stay essential and get
Drop=false). The dropped ref is temporary, so pickup sends +1 against the -1. It can be lost like any dropped item if the victim disconnects and the cell resets.Testing
Not built locally (CI builds it) and not tested in game. Two clients, PvP on:
Gameplay:bEnableItemDropson: no second weapon.Must not change: PvP off (no effect), an NPC disarming a player (no effect, as on dev), a player disarming an NPC (as on dev).
Merge note: also edits
MagicTarget.cpplike #30 and #31, in different lines.Generated by Claude Code