What this integration does
Highlights the inventory Dragon Soul button while the Dragon Soul system is activated. This is a client-side status cue, not an alchemy balance change or server system. The archive supplies Python merge instructions, an ENABLE_DSS_ACTIVE_EFFECT_BUTTON native definition/export and a README with the upstream preview link. Exact upstream author and commit were not established.

M2City r1 fixes
The original helper allocated a SlotWindow on every activation and deactivation. The revised helper allocates only on the first activation, reuses that object for subsequent toggles and allocates nothing when deactivating an effect that does not exist. The decorative overlay uses not_pick and an integer position so it does not cover the button's mouse target. A cleanup helper hides/deactivates/releases it. Weak interface callbacks now tolerate an expired target, and explicit initialization/cleanup instructions cover the DragonSoul window reference.

Integration requirements
Merge the native feature definition and Python export together. Add the SetRenderSlot helper to your existing ui.SlotWindow. Bind the actual DragonSoulWindow through interfaceModule and merge the activation/deactivation callbacks. In InventoryWindow initialize DSSButtonEffect beside DSSButton; call ClearDSSButtonEffect in the existing Destroy BEFORE clearing the button. Keep all pre-existing cleanup. If the parent button is rebuilt, clear its old effect first. Do not replace entire classes with these instruction fragments or add an unverified WindowDestroy decorator.

Staging checks
Test disabled/enabled builds, 100 activation toggles, inventory opening/closing, deck switches, mouse clicks through the effect, logout and character changes. Verify your SlotWindow.SetSlot signature accepts the supplied render-only placeholder. Fake-object tests prove allocation reuse and callback logic, not native renderer destruction or a full client build. The original archive remains for comparison; integrate reviewed/ instructions.

Editorial resource — M2City
Version: Legacy integration fragments; exact fork unspecified; M2City r1 (2026-11-04)
Rights: Public redistribution confirmed by owner; upstream notices retained. No blanket open-source relicensing.
Validation: 100 repeated activation/deactivation cycles allocate one fake SlotWindow; deactivation before activation allocates none; cleanup, rebuild, missing parent, not_pick and expired weakref checks passed. Python 3 fake objects; no Python 2 client render.
Source: Owner-supplied source; public creator/feature reference where established
SHA-256: ebb480796f39445f70e53c0a9b129605443626e8e3c28fc86c67336b44d2c3db