Можно добавить опциональный аругмент : , uint32* pProblematicItemId)
и предавать его по цепочке Can* функций в глубь до ошибки, где
if (pProblematicItemId)
*pProblematicItemId = gemid -- или собствеено itemId
тогда можно будет значение из него будет передать в
SendEquipError( uint8 msg, Item* pItem, Item *pItem2, uint32 itemid) -- как itemid
Фактически тогда это значение можно будет использовать во всех случаях дополнительных данных в SendEquipError
Только это видимо потребует кучу мест для выставлния значений