Почему нельзя создать больше TriggerAddCondition для 1 триггера?
Делал 1 триггер а TriggerAddCondition 2 раза в разных местах, но почему то функция работает только 1 раз у последний созданный TriggerAddCondition... Спасибо заранее!

Без ответа.


Просмотров: 254

quq_CCCP #1 - 3 месяца назад 0
Кто тебе такое сказал что нельзя? Глупость, все можно, все события должны вернуть положительный результат чтобы сработало действие.
pro100master #2 - 3 месяца назад 0
quq_CCCP, так я дебагом проверям каждый имеет свой цифр но цифр 1 не появил а цифр 2 появил вот логика а?
Hate #3 - 3 месяца назад -2
экстрасенсов нет, показывайте как делали
pro100master #4 - 3 месяца назад (отредактировано ) 0
Hate, ((кат Пример кода
library RPGTest initializer Init uses UnitDex
    globals
        // Event types
        constant integer EVENT_TEST_USE_ITEM        = 0
        constant integer EVENT_TEST_SPELL_CAST      = 1
        
        // System variables
        private trigger array IndexTrig
    endglobals
    
    function RegisterTestEnter takes code func returns triggercondition
        return TriggerAddCondition(IndexTrig[EVENT_HERO_USE_ITEM], Filter(func))
    endfunction

    function RegisterTestRemove takes code func returns triggercondition
        return TriggerAddCondition(IndexTrig[EVENT_HERO_SPELL_CAST], Filter(func))
    endfunction

    private function onEnter takes nothing returns boolean
        return false
    endfunction
        
    private function onRemove takes nothing returns boolean
        return false
    endfunction
        
    private function Init takes nothing returns nothing      
        local integer i = 11
        local player p 
        
        set IndexTrig[EVENT_HERO_USE_ITEM] = CreateTrigger()
        set IndexTrig[EVENT_HERO_SPELL_CAST] = CreateTrigger()
    
        loop
            exitwhen i == 0
            set p = Player(i)
            call TriggerRegisterPlayerUnitEvent(IndexTrig[EVENT_HERO_USE_ITEM], p, EVENT_PLAYER_UNIT_USE_ITEM, null)
            call TriggerRegisterPlayerUnitEvent(IndexTrig[EVENT_HERO_SPELL_CAST], p, EVENT_PLAYER_UNIT_SPELL_CAST, null)
            set i = i - 1
        endloop
        
        call TriggerAddCondition(IndexTrig[EVENT_HERO_USE_ITEM], Filter(function onEnter))
        call TriggerAddCondition(IndexTrig[EVENT_HERO_SPELL_CAST], Filter(function onRemove))
    endfunction
endlibrary
))
Если написать функцию RegisterTestEnter (filter) в другом месте, то из call TriggerAddCondition(IndexTrig[EVENT_HERO_USE_ITEM], Filter(function onEnter)) не будет работать
Поэтому сделал отдельно, то есть
Ловим события что предмет нажато, то толкать call TriggerEvaluate(IndexTrig[EVENT_HERO_USE_ITEM]) иначе другого не вижу
Steal nerves #5 - 3 месяца назад 0
не понятно, что не работает и что вы хотите сделать.
» не знаю мб поможет
Можно использовать нативку
GetTriggerEventId() - возвращает событие
GetHandleId(GetTriggerEventId()) - возвращает номер события
например событие юнит использует событие EVENT_PLAYER_UNIT_ISSUED_ORDER
constant playerunitevent EVENT_PLAYER_UNIT_ISSUED_ORDER=ConvertPlayerUnitEvent(38)
возвращает число 38
constant playerunitevent EVENT_PLAYER_UNIT_USE_ITEM=ConvertPlayerUnitEvent(50)
возвращает число 50
constant playerunitevent EVENT_PLAYER_UNIT_SPELL_CAST=ConvertPlayerUnitEvent(273)
возвращает число 273
тогда можно несколько событии на один триггер, если в вашем случае поможет. Не знаю, что вы хотите сделать.
PT153 #6 - 3 месяца назад 0
Используйте не Filter(), а Condition(). С последним точно работает.