Добавлен nvc123,
опубликован
система каста заклинаний через Execute
для добавления заклинания необходимо вызвать при инициализации карты функцию addSpell
/**
* привязывает функцию с именем func к спеллу с равкодом rawcode
* @param rawcode равкод спела
* @param func имя функции которая вызывается при касте спела
*/
void addSpell(int rawcode,string func)
код
library spellcast initializer init{
private hashtable hash;
private void act(){
ExecuteFunc(LoadStr(hash, GetSpellAbilityId(), 0));
}
void addSpell(int a,string b){
SaveStr(hash, a, 0, b);
}
private void init(){
trigger a=CreateTrigger();
TriggerRegisterAnyUnitEventBJ(a,EVENT_PLAYER_UNIT_SPELL_EFFECT);
TriggerAddAction(a, function act);
hash=InitHashtable();
}
}
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
7 часов 4 просмотра(
хотяб отписывайтесь кто посмотрел
1 общее событие при касте заклинаний у которых равкод выше или равен A000? функции void skill1,2, собственно и функции наших триггерных способностей.
Снова экономим 3 байта делая систему нихрена не понятной и нечетаемой (я с трудом понимаю), наверное очень актуально когда на карте 100+ триггерных спелов?
Отредактирован nvc123
надо новую версию бы залить
особенность ExecuteFunc в том что он копирует параметры предыдущего потока (GetTriggerUnit() и прочее)
таким образом мы экономим память, процессорное время и уменьшаем объём кода
так как нам не надо создавать кучу триггеров с одинаковым событием
и не нужны условия вида GetSpellAbilityId()=='A000'
залил новую версию вроде
Отредактирован Raised
Отредактирован scopterectus
И правильно ли я понял, что если спелл не тригерный, то ExecuteFunc запустится с переданной строкой "null"?
Это грубый пример, если вам дать все как надо, вы не разберетесь что к чему, а тут все просто и понятно.
Отредактирован nvc123
или ты считаешь что хэш + экзекут функц тратят больше ресурсов чем 100 триггеров с условиями?
ScopteRectuS: