Добавлен , опубликован

vJass

Содержание:

Нам доступно множество функции из common.j и blizzard.j, которые, к сожалению, находятся вне нашего контроля. Однако, vJass позволяет перехватывать вызов любой функции в карте, для чего используется ключевое слово hook.
Используйте ключевое слово hook, после чего укажите имя перехватываемой функции и функции-перехватчика. Таким образом вы не только перехватите вызов функции, но и список передаваемых параметров. В качестве функции-перехватчика может выступать статичный метод структуры (информацию о структурах вы найдете в соответствующей главе).
function onRemoval takes unit u returns nothing
    call BJDebugMsg("Unit is being removed!")
endfunction

struct err
    static method onrem takes unit u returns nothing 
       call BJDebugMsg("This also knows that a unit is being removed!")
    endmethod
endstruct

hook RemoveUnit onRemoval
hook RemoveUnit err.onrem // Тоже работает
Опробуйте код, представленный выше, в карте где используется функция RemoveUnit и посмотрите, что произойдет.
К сожалению, существует одно ограничение - вы не сможете перехватить вызов нативной или BJ-функции, которая вызывается из другой BJ-функции.

`
ОЖИДАНИЕ РЕКЛАМЫ...
0
29
11 месяцев назад
0
vJass позволяет перехватывать вызов любой функции в карте
Не любой. Функцию объявленную пользователем не перехватывает.
0
9
2 месяца назад
0
Важная вещь, что перехват идет до выполнения самой нативки. То есть , вы до удаления юнита можете узнать его GetHandleId(unit)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.