Причина в коде:
В функции ядра Spell::EffectEnchantItemPerm нет вызова TakeReagents() для трейд-чарки. Каст-бара нет в обоих случаях (чары мгновенные), поэтому списание реагентов не срабатывает для трейд-чарки.

Предполагаемое исправление:

diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 1234567..89abcde 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ void Spell::EffectEnchantItemPerm(SpellEffectIndex eff_idx)
{
if (!item)
return;

uint32 enchant_id = m_spellInfo->EffectMiscValue[eff_idx];
if (!enchant_id)
return;

item->SetEnchantment(PERM_ENCHANTMENT_SLOT, enchant_id, 0, 0);

+ // Списываем реагенты и для трейд-чарки тоже
+ if (Player* caster = m_caster->ToPlayer())
+ {
+ caster->TakeReagents(this);
+ }
}