Добавлен 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)";
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Волчачка
Отредактирован Волчачка
Ещё бывает что значение из хеш-таблицы строкового показывало "(null)";
если вы используете одно и тоже условие для триггеров то лучше сделать глобальным.
boolexpr BXPR_0000 = null
где-нибудь создаёте.
И добавляете в каждый нужный триггер, если не хотите расходовать лишнюю память на одно и тоже условие.
Ну есть и другой способ добавить в Trigger_Actions
if (условие) then
код вызова внутри
endif