Добавлен  scopterectus 
                            
                            
                            
                            
                            
                            
                        
                        
                    Немного изменил одну библиотеку, взятую из данного сайта:
globals
        public     constant    trigger      TRIGGER    =    CreateTrigger()
    endglobals
    private function Trigger_Conditions takes nothing returns boolean
        local string s = LoadStr(HASHTABLE, GetSpellAbilityId(), StringHash("abil_id"))
        if (s != null) then
            return true
        endif
        return false
    endfunction
    private function Trigger_Actions takes nothing returns nothing
        call BJDebugMsg(RAW2S(GetSpellAbilityId()) + "str != null")
        call ExecuteFunc(LoadStr(HASHTABLE, GetSpellAbilityId(), StringHash("abil_id")))
    endfunction
    private function Init takes nothing returns nothing
        local boolexpr b = Condition(function Trigger_Conditions)
        call TriggerRegisterAnyUnitEventBJ(TRIGGER, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition(TRIGGER, b)
        call TriggerAddAction(TRIGGER, function Trigger_Actions)
        call DestroyBoolExpr(b)
        set b = null
    endfunction
    function TriggerRegisterAnyUnitSpellEffectEvent takes integer abil, string str returns nothing
        call SaveStr(HASHTABLE, abil, StringHash("abil_id"), str)
    endfunctionИ почему-то BJDebugMsg(...) из функции Trigger_Actions всплывает в игре независимо от того, тригерный скил или нет. 
В Trigger_Conditions писал return HaveSavedString(HASHTABLE, abil, StringHash("abil_id")) - результат не меняется.
В чём проблема?
Принятый ответ
private function Trigger_Conditions takes nothing returns boolean
     return LoadStr(HASHTABLE, GetSpellAbilityId(), StringHash("abil_id")) != null and LoadStr(HASHTABLE, GetSpellAbilityId(), StringHash("abil_id")) != ""
endfunctionпопробуйте так, или уберите: 
local boolexpr b = Condition(function Trigger_Conditions)
call DestroyBoolExpr(b)
set b = nullЗамените call TriggerAddCondition(TRIGGER, b) на call TriggerAddCondition(TRIGGER, Condition(function Trigger_Conditions))
Добавлю
Ещё бывает что значение из хеш-таблицы строкового показывало "(null)";
Ещё бывает что значение из хеш-таблицы строкового показывало "(null)";
    
        
            
                `
            
            
                
        
    
    ОЖИДАНИЕ РЕКЛАМЫ...
            
                    
                        Чтобы оставить комментарий, пожалуйста, войдите на сайт.
                    
                
             
                        
                        
                    
 WC3
                                WC3
                            



 
                    
                
Ред. Волчачка
Ред. Волчачка
Ещё бывает что значение из хеш-таблицы строкового показывало "(null)";
если вы используете одно и тоже условие для триггеров то лучше сделать глобальным.
boolexpr BXPR_0000 = null
где-нибудь создаёте.
И добавляете в каждый нужный триггер, если не хотите расходовать лишнюю память на одно и тоже условие.
Ну есть и другой способ добавить в Trigger_Actions
if (условие) then
код вызова внутри
endif