Короче я придумал вроде как работающее без багов решение. Как я понял причина бага в том, что в UseWithItem прописана кирка. Из-за этого оно снимает с гг экипированную кирку когда используешь жилу руды.
Что я сделал:
-Убрал кирку из поля UseWithItem. Прописал проверку наличия кирки в инвентаре через CondititonFunc.
(Теперь если в инвентаре несколько кирок, то можно копать с одетой киркой и та не снимется. А на случай когда одета единственная кирка, прописал unequip оружия.)
-Создал "копию кирки" в скриптах, которая будет вставляться в руки и не будет нигде доступна в игре.
-Поправил анимацию, "копию кирки" вставил в руки через DEF_CREATE_ITEM, а удаление через DEF_DESTROY_ITEM.
(DEF_CREATE_ITEM по идее должен удалять предмет из мира по окончании анимации, но если не прописать DEF_DESTROY_ITEM, то "копия кирки" почему-то остается в инвентаре.)
-убрал создание кирок в инвентаре и их экипировку в ZS_Pick_Ore(). Прописал там же AI_UnequipWeapons(self), чтобы нпс не копали руду, имея кирку и в руке и экипированную за спиной.
-убрал удаление кирок для рабов в ZS_Unconscious()
При этом частично исправился еще один баг из оригинальной игры - если завершить работу с жилой, то в момент когда кирка из рук уже убрана, но анимация еще не завершилась, можно нажать на клавиатуре кнопку вперед. ГГ продолжить копать руду, но без кирки в руке, а из инвентаря исчезнет одна кирка. Теперь же кирка из инвентаря не исчезает.
Но "копии кирок" теперь иногда появляются в инвентаре у нпс, например если заговорить с ними пока они копают руду. Возможно DEF_DESTROY_ITEM не срабатывает, т.к. при диалоге не проигрывается анимация выхода нпс из жилы. Решил эту проблему прописав удаление "копий кирок" через скрипты.