Skip to content

Don't give summons death items (matching vanilla singleplayer behavior) - #935

Draft
absol89 wants to merge 1 commit into
tiltedphoques:devfrom
absol89:fix/no-death-items-for-summons
Draft

absol89 wants to merge 1 commit into
tiltedphoques:devfrom
absol89:fix/no-death-items-for-summons

Conversation

@absol89

@absol89 absol89 commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Actor::KillImpl (ID 37896) adds the base's death items to every dying actor except reanimated corpses, so a summoned flame atronach still gets its fire salts. The summon vanishes right after, but the item add went through the inventory hook and was synced to the server and every other player. In vanilla singleplayer skyrim, the players cannot farm elemental salts this way.

AddDeathItems now skips commanded actors, as it already skips remote ones. My client party leader froze so we investigated:

What it does

HookAddDeathItems now also returns early for commanded actors (summons and raised thralls), the same way it
already does for remote actors. Their death items are never added, so nothing about them is synced.

Why

Actor::KillImpl (ID 37896) calls AddDeathItems (ID 37198) for every dying actor except one whose life state is
kReanimate ((flags & 0x1E00000) != 0x800000). A summoned creature isn't excluded, so a conjured or NPC-summoned
flame atronach gets its base's death items (Fire Salts, 0003AD5E) when it dies.

In the base game nobody notices, because the summon vanishes right after. In Skyrim Together the add goes
through HookAddInventoryItem → InventoryChangeEvent → RequestInventoryChanges, so the owner sends the server an
inventory change for an actor that is about to be removed, and the server forwards it to the other players. From a
client log, right before the summon is handed off and removed:

Sending item request, item: 3AD5E, count: 1, target object: FF000BDD
Sending death state true for local actor FF000BDD, server id: F0000D
...
Transferring ownership of local actor, server id: F0000D, ...
Actor removed, form id: FF000BDD

There is no body to loot, so the item and its traffic are wasted, and the other clients briefly hold an inventory
entry for an entity that is being deleted.

Changes

  • Code/client/Games/Skyrim/Actor.cpp: HookAddDeathItems skips IsCommandedActor() actors.

Raised thralls are commanded too, but the game already skips them (kReanimate), so nothing changes for them.
Normal NPCs and creatures still get their death items as before.

How to test

  1. Have a summoner NPC (e.g. a witch or a conjurer) summon a flame atronach, or conjure one yourself, while
    connected to a server.
  2. Kill the atronach.
  3. In tp_client.log there should be no Sending item request, item: 3AD5E, ... target object: <atronach> line.
    Before this change there is one, right before Sending death state true for the atronach.
  4. Kill a normal NPC or creature (e.g. a wild flame atronach that isn't summoned, or a draugr): its death items are
    still added and lootable as before.

Done so far:

  • Client builds (release).
  • Tested in game as above.

🤖 Generated with Claude Code

Note: The freeze behavior will be adressed in a separate PR, I havent tested how this effects npc summoned atros

Actor::KillImpl (ID 37896) adds the base's death items to every dying actor
except reanimated corpses, so a summoned flame atronach still gets its fire
salts. The summon vanishes right after, but the item add went through the
inventory hook and was synced to the server and every other player.

AddDeathItems now skips commanded actors, as it already skips remote ones.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@absol89
absol89 marked this pull request as draft October 24, 2026 14:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant