DyrmanПлохо 
Кстати, я твоего Хафада переделаю: сделаю чтобы на героев его абилка тоже действовала, даже если те сидят в городе.
Можешь, конечно, и сам сделать) Нужна будет только одна функция без триггеров и принудительных соприкосновений.
Может, подойдет errorHook?
void errorHook( fCallback )
Позволяет установить перехватчик ошибки. По умолчанию при возникновении ошибки скрипта текущий поток завершает свою работу. Благодаря данной функции у Вас есть возможность откорректировать это поведение – перед остановом управление будет передано функции fCallback
Нашел у Новика. Если это не поможет-тогда больше вариантов нет)