Суть код
local code var = ... // ok
call var.execute() // Ошибка ругает
// или
call var.evaluate() // Тоже ошибка
Хотя раньше работало без ошибок но этот ругает или как его сохранить функцию и потом вызвать напрямую, если делать с интерфейс то ок
/* -------------------------------------------------- */
private function interface Use takes unit u, TypeItem ti returns nothing
/* -------------------------------------------------- */
private module TypeItemUse
private Use e
private static method onInit takes nothing returns nothing
local trigger t = CreateTrigger()
local integer i = 0
loop
call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_USE_ITEM, null)
set i = i + 1
exitwhen i == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(t, Condition(function thistype.onCall))
endmethod
private static method onCall takes nothing returns nothing
local integer i = GetItemTypeId(GetManipulatedItem())
local thistype this = thistype[thistype.getIndex(i)]
if this.e != 0 then
call this.e.evaluate(GetManipulatingUnit(), this)
endif
endmethod
method addEventUse takes Use e returns nothing
set this.e = e
endmethod
endmodule
Принятый ответ
Потому что .execute() и .evaluate() работают с именами функций, а не с самими функциями. Точнее говоря, vJass каждой функции, что вызываются через .execute() или .evaluate(), ставит в соответствие уникальный номер, генерирует для них массив триггеров и заполняет его триггерами, действиями и условиями которых являются обёрнутые вызовы пронумерованных функций.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
хоть 1 строка мешать не будет...