Как я понимаю, бонус будет зависеть а) от свойств самого меча б) от реального навыка ГГ, причем этот бонус должен быть у всего оружия, в чьем бы инвентаре оно ни находилось. Тогда давать/убирать бонус ГГ надо при equip/unequip и изменении реального навыка. А изменять описание итемов надо при изменении навыка и в каждой загрузке игры. Возможности изменять описание при каждом обращении к итему в скриптах нет.
В такой постановке вопроса самым трудным будет при изменении навыка ГГ поменять описание всего (!

) оружия в игре. Стандартные скрипты просто не дают такой возможности. Через Икарус можно, и то придется повозиться. Более простым решением будет в свойствах итема отображать постоянное значение бонуса, которое зависит только от (а). А уже когда оружие экипируется, через PrintScreen писать реально полученный бонус.
Внутри instance итема можно использовать любые конструкции скриптов, в том числе if, вызов функций, какие-то вычисления и значения глобальных переменных. А вот self будет недоступен. hero будет недоступен в момент загрузки игры - сначала загружаются глобальные переменные, потом вставляются npc и предметы, а потом уже присваивается значение hero.
Отлавливать изменение (б) достаточно только в B_RaiseRealFightTalentPercent. И для обучения, и для табличек.
Чуть не забыла. Еще может возникнуть такая ситуация: ГГ надел, скажем, кольцо с бонусом к навыку и меч с бонусом, так что в сумме они дали больше 100%. Потом игрок кольцо снял, стало меньше 100%. Тогда от меча бонус будет меньше правильного, пока игрок его не снимет-наденет.