система каста заклинаний через 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();
    }

}
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
28
11 лет назад
1
бамп
7 часов 4 просмотра(
хотяб отписывайтесь кто посмотрел
1
32
11 лет назад
1
Как я понял.
1 общее событие при касте заклинаний у которых равкод выше или равен A000? функции void skill1,2, собственно и функции наших триггерных способностей.
Снова экономим 3 байта делая систему нихрена не понятной и нечетаемой (я с трудом понимаю), наверное очень актуально когда на карте 100+ триггерных спелов?
1
28
11 лет назад
1
Bergi_Bear, даже при 10 скилах триггерных довольно полезно
1
21
8 лет назад
1
Изобретательно. Но чего такого особенного в "ExecuteFunc", что ты решил сделать систему?
1
28
8 лет назад
Отредактирован nvc123
1
GF RaiseD, система старая и баганая
надо новую версию бы залить
особенность ExecuteFunc в том что он копирует параметры предыдущего потока (GetTriggerUnit() и прочее)
таким образом мы экономим память, процессорное время и уменьшаем объём кода
так как нам не надо создавать кучу триггеров с одинаковым событием
и не нужны условия вида GetSpellAbilityId()=='A000'
залил новую версию вроде
0
21
8 лет назад
Отредактирован Raised
0
В статьи это можно бы.
особенность ExecuteFunc в том что он копирует параметры предыдущего потока (GetTriggerUnit() и прочее)
Вот это интересней всего.
1
28
7 лет назад
1
добавил в виде подключаемой библиотеки
Загруженные файлы
1
21
7 лет назад
Отредактирован scopterectus
1
А зачем нужна функция cond(), если она нигде не используется?
И правильно ли я понял, что если спелл не тригерный, то ExecuteFunc запустится с переданной строкой "null"?
1
32
7 лет назад
1
Не запустится, для этого и есть условия. С проверкой на null по этому адресу, так же стоит в события добавить буллекспры для отслеживания даммиков и прочих юнитов, у которых нет и небудет триггерных способностей.
Это грубый пример, если вам дать все как надо, вы не разберетесь что к чему, а тут все просто и понятно.
1
20
7 лет назад
1
Имхо сомнительная полезность. Экзекутфанк работает тем быстрее, чем короче имя функции. Также, ячейки хештейбла создаются, ятп, большими пачками, что никак не экономит память. Жду аргументов против.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.