Skip to content

Talisman base enchants leak onto pasted amulets as phantom anoints #10182

Description

@tinycrops

Check version

  • I'm running the latest version of Path of Building and I've verified this by checking the changelog

Check for duplicates

  • I've checked for duplicate open and closed issues by using the search function of the issue tracker

Check for support

  • I've checked that the behaviour is supposed to be supported.

What platform are you running Path of Building on?

Linux - PoB Frontend

Reproduced on v2.67.2 (latest release) and on dev @ 32d4c87.

What is the behaviour in-game?

A Turquoise Amulet cannot have "15% increased maximum Life" as an enchantment. That
modifier belongs to the Gargantuan Talisman base. Copying an item into PoB should never
add a modifier the item cannot possess.

What is the behaviour in Path of Building?

With a 3.29 Talisman equipped in the Amulet slot, pasting any plain amulet silently
gives that amulet the talisman's base enchant as though it were an anoint. The
line reaches modList as a real modifier and inflates computed stats.

ItemsTab:CopyAnointsAndEldritchImplicits copies the equipped amulet-slot item's
enchantModLines wholesale onto a newly pasted anointable item:

if isAnointable(newItem) and (#newItem.enchantModLines == 0 or overwrite) and ... then
    local currentAnoint = currentItem.enchantModLines
    if currentAnoint and #currentAnoint == 1 then
        newItem.enchantModLines = currentAnoint

It never checks that currentItem's enchant line is actually an anoint. Since 3.29,
a talisman's defining property is an enchant line living in that same field, so a
talisman equipped in the Amulet slot becomes a donor of a modifier that is not an anoint.

PR #10088 stopped talismans being the recipient of a copied anoint. This is the
same function in the opposite direction — talisman as source — and is unfixed.

43 of the 85 talisman bases carry a leakable enchant, including:

Base Leaked modifier
Gargantuan Talisman 15% increased maximum Life
Wolf Alpha Talisman +40% to Global Critical Strike Multiplier
Devourer Talisman Damage Penetrates 15% Fire Resistance
Goatman Talisman Hits ignore Enemy Physical Damage Reduction
Chieftain Talisman 16% increased Area of Effect

How to reproduce the issue

  1. Equip a Gargantuan Talisman in the Amulet slot.
  2. Copy any plain rare amulet (e.g. a Turquoise Amulet) and Ctrl+V into the Items tab.
  3. The pasted amulet now shows the enchant "15% increased maximum Life".
  4. Delete the talisman and equip the pasted amulet — the phantom modifier stays and
    continues to apply.

Also reachable by double-clicking an item in the item DB (ItemDBControl.lua:366)
and via the shared item list (SharedItemListControl.lua:57) — every
CreateDisplayItemFromRaw(raw, normalise=true) caller.

Measured impact

Headless run, both arms ending with identical final gear (plain Turquoise Amulet
equipped, no talisman in the build). Identical numbers on v2.67.2 and on dev @ 32d4c87:

ARM 1 control -- paste plain amulet into empty slot
  pasted amulet enchants: []
  build Life = 90

ARM 2 -- equip Gargantuan Talisman, paste same amulet, delete talisman
  pasted amulet enchants: [15% increased maximum Life]
  build Life = 103

delta = +13 Life (+15%), from a modifier the amulet cannot have

The phantom modifier is saved into the build

It is not display-only or session-only. In the exported build XML the pasted
Turquoise Amulet carries:

Rarity: RARE
Pasted Plain Amulet
Turquoise Amulet
Item Level: 80
LevelReq: 16
Implicits: 1
{tags:resource,life}{enchant}{crafted}15% increased maximum Life
+30 to maximum Life

So it survives save/reload and travels with any shared build code.

PoB for PoE1 build code

Talisman already deleted; the equipped Turquoise Amulet still carries the leaked
enchant. Import and open the Items tab.

eNrVG8ty2zjyHH8FS1V72o1lPWO75EzJtvyoshOtqCS7pxRMQhImIKEBQduaVP59GwBJPSLQgMjL5uBIRHej3-huQoM_XiPqPWOeEBZfNFrHJw0PxwELSTy_aHyZ3rw_bfzx8WgwRmLxeXaZEipXPh69G6jPHsXPmAJewxOIz7H4mlPqfAdKSxSLBWbxI_qT8VsWXjQ-sRg3vCcUh0Tk3wKKkuQTivBFww8AueGhJMBxeLV-ngEuEEeBwPxB7jpMBXtkIawKnsJqhEjss-AHFrecpUvF1DPBLxpmOhmNNhgi8SZDIM-7wZiiFea-QMJL4M9FYwhqQXN8jSL4C7QQTYHQyfFJr9EsxbhMeSIc0PwlxmEB2TpumwDHHI9mMxwI8oyvOBFXCxQHG3uY8FxhH1MqyJISzDe4MrJ_9xtxI-iUCUSvx_6mWvrlwEy8zfM3IhaXFJRoS1oi3M9jIrALxpiRhMWu7G_BG7WeUgqBZQU7wQnmz0iQHV6MtFn0RGJ75TyiGF2xxELvEnKMOQSrcELwccAgvl33cMR8IDNsD-kkR4bgys1hcox8WzhnwocxNIHEZgfps5RaQop1rmkboa7xqwXUfSysaD0zoY6bt3hTkTy6GxeQ_f7xhw_ds7MPrc6HVqtjTNeLVUICRB_RK4nSCPLkFP3A6w1bJx2zt8wXIoaMYMLtG1FvCMfuWFeMhgdgLRBLjGhdc0yT-A5qgGEQpHCirwqUbmn42CgOztLgXALfx4FdUH6JuUqom0dwmWFmeAKxIk_6J4ptUdabZCG3gXhSvtccx9mGKzuBHjAOFreg4gkS2C7Brk_uk1LFSlgrxUrAPYrtWSI4KEkiGpR0fFaG5KimUYz5fOUvCKahG3TO2BVaWuRBqeZNbCt1b2_n5DGbqI4q-YZ4aHdauPL0jJLNzNzql6tLg9s5JoY6ERBCbFsQjzn7U5bc1A1tyCOWckuDa2ArAfJDRfcXExymgd0pVnQOlxS6JFsxCizgk1In1KEQKPhxzcK5tdLUJk4Y2_z56XIJOUR6gy0BeVxCRU02ipT3fQvoz-DKVhEtT1b7DdbQ1hsUtYL9Ljso9rLI895BmDW49RaFQR8hWURwCKjuGJr4dTYwGgeaKKuOSAFadmZj9gKcL-R0I3GDhrqoQDBXaxzHf6-s6W-BW20wikOosSAUrPfYxdi3zZREkEiT5BoJ5IVZJf0VcYJi0VajlwQjHiwewPQ3iNInyAQXjc2n8tsOYiu37aCppkvy0320ZFx4-FX-N0ZcrC4aM0QTrAHVE6CTCBKrjhjSDqUNz1-wl2H4LKWYMkaTHMlDyyWOwy0aU46xh_IkEkgmlIzyixfQNBGY36FkccN4hNYTrrYcOcm1lXbZREq0Mbm6D6WOvZgBd1D5nJ52OlJ-2WYhvhpuA8YEmBbAyMYArX2WzcY0JcnTu8GXyYP68G4hxDI5bzZfXl6Ol0gs2Ay_whl1HLCouQQkkOZ98oNQ-l6SbQ7h3-V8qP4pQs2c0kAPzZKm_iYDlRPgWRu6KbWgTCLVJD98YgInck0-zL8MfLlV4iVgpVscJZcrCK4bWVPszB8yPUtoHwvtKZs4-TQvxDOUUvn83ymiRJpd6Wj9_EGPHmNplbzFAmJgeHkKaJrT1VIqf_jwoFce8BzaDblZ7gHa0hk7HgnXLqglkh-vEA2UxIP7eJkKL1YzyYgkwfendDaTA0YgL7iamY5ubkZX0_uvoyxSNlGUPb7HafQkJ2v6_3U-87E6yb0kfUr0x4vGV4JfFCPXWCBCIXoDRilaJrjwYcV0JgEFvBJqCgr6tHw2uZ_WGsBMafSKOYTcHErAgBNs5KtYLyEFEQ5JE4fqBDdSGoPnJG_JpvmWVaZMUCZScqZoJqTLlisIbV0FGxSuZrZmKnKMapRFLpbgQs5D1LhztvqGJoT0fAhdMiOBzO3lniPjREOV6KVo1o1uk9VcZhpqSGsioBfNyHr8avQPvVqiVTXvNWpVr5rRr3GAjLLrRTNy0VixGNRkolJAlVD6xGLl5BB7Q0JlfWS07IjiAsRM8LNYYJ6dYCZKj5DqcpDSwOHkKRXmbLABUaIrNekxaEiumVH1KMMgg1wryUJb7b1BoZswZlK6LTbmwzJUXSsb9ZdV3iUmyJpOg_r1aokS8r7bIH-2XBIkKv8OnxkJdfdlCJcdsLKEAcVJdTKqpaxOZrfHrE7xBuq7H0Z7Z6tm9C-CyNpoDxVdRVkRkUFVjYKMrWoUpiQORMrxwQQmuwXNGndSXsoUfdFe5Hy1LHNk7dLBFHRTdzC66jkPxlb5_xrPMEhQegAUMCWCQNUtCw4kSoLDkpYv0vgaFFsDKSXi_qS01pQTLX2s7tWaM0WdLLJXJ2X5RIO8QQjqgruSytOOUjGDucOIyvfejFYj-NsroirE5Bw5XaI4zMl93lfvr-1gqT0mEqCpBg_XclxdVYcxjlZ7CJn5GjTzRlONJGTrl81LfMHlcOFvxqL_qqGC_JT1v52s54Xq_ZqA3bjyt3wfCfiffNYzuBfQ-WYtuPxcdOBmAmmC9avhbxgtWawwZCOue1ugkfXMangwQdDYrM69yXAyOvKh1giwN4XuPYlQfHQLmQjFIkXx-pkioAQ5905PjqC1oSQA9z33Wkc_BZon53AkKDr_onBK_foJvEGPIX79DDiaCRz-avX-4cHZwTEC7XqR9jNPHmlH_-yceIJtP5MTDujXJyieY4_Lv_I9Ua-x0fmXQeQ3c5qS8W0VtPeoYCznQ6E3plDTe8MopVgcTVP-Vwq9Cs4f7OhAfZrgv0AF_f9XhchRislxNv1l4FMmPOi7ovHTl8mD9HE9KNE4HrimXNTzr2Y5ygQyn9dxQLjEVHjDp1WSIOrpGZjXdsDPedyl0XOn0a6BRsvzX9Byl1C_BoH6NQjkQuOSQSreJeBi2TsMx_Nvtm1V9I2D1LDPJr0abNKqwSatGvjoOiq1Lr-uI1BdaKj-w8lye724XdEHO84suxjolrJnnFRxk_2R13fmulWZaxdT6YN4jdA-1KM6NURlp7LoXWd1u7jlrawz3E_m9qHZ01kdVWO056y-6mdTuzKF6jx0qyquW1dyd6riWLjy9GCz_sRVWxnWqkeidlUTOZdhlZNRvzKFjmuqqaM2qs2Xe_VYvroaq5Ye3Yr4NYVAp64q3D071LVz5Sg-xMEP075zXdCux8rdesgcnL8r-nqvLlepo6Bs18VMbQ1wbcn1d0J6EOVjoeapat6pbvCweEbm2eRTf8lmnwqpeLI1nBpTFOAFoyHmGTNYznSzX-vlt3c-nBQyGBC2Lk3maJ23sIormvllnRyz3e623tpx4_d-OVrPjOMvQJ2-vPWS_HYrybwHPDmANXmB9gA0NRVdY5x2zfBR8eNF-Zs9dbFIXehhaSx8TGcbIvYsZNw1XM_acGP5oqOwty2W837FS_tCrJNWt2S7QDv7EgeCIzolc8yVbqxcRd76xNfA4LZzlWkyIXNCP8_UW0qwhHrV6uJkTmpUsbbrX6dnfTPasrje_7tY3RMLb3Yx2No37xCl7AXsDS1khHXwTXAElVt4uRpSurJSkh8w9XrIMXT5-gqgdT7KC4Icod86Oz2zkVS9CNsW157V7FcOjFL1_mEz7VqYxsl1tn9YsT87XaWJYNEjC8kMJFOXUzxBBMXyCpi6mCp_Pi9_GJa_6dOXdfWN2z3Y-swqzh_9FlB9-3g0aO7-6v5_9L9eFQ==

Suggested fix

Gate the copy on the source line actually being an anoint, rather than on the
recipient alone — e.g. require the donor's single enchant line to be a
crafted/Allocates … anoint, or skip donors whose enchant line equals their
base.enchant.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions