Суть код
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(), ставит в соответствие уникальный номер, генерирует для них массив триггеров и заполняет его триггерами, действиями и условиями которых являются обёрнутые вызовы пронумерованных функций.
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
Потому что .execute() и .evaluate() работают с именами функций, а не с самими функциями. Точнее говоря, vJass каждой функции, что вызываются через .execute() или .evaluate(), ставит в соответствие уникальный номер, генерирует для них массив триггеров и заполняет его триггерами, действиями и условиями которых являются обёрнутые вызовы пронумерованных функций.
Принятый ответ
22
PT153, даже через интерфейс то пашет а если без него нет... =)
хоть 1 строка мешать не будет...
32
code не может быть ни массивом ни сохранен или передан как то еще кроме как 1 переменной, так что не удивительно, поэтому там юзают екзекут, без ретурн бага сделать массив code никак не получится, увы но этот тип мягко говоря не предназначен для таких манипуляций.
28
даже через интерфейс то пашет а если без него нет..
Не, не надо создавать переменные типа code. Просто пишешь имя функции, а после неё сразу .evaluate() или .execute(), если нужно создать новый поток.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.