Если на карте всего несколько триггерных способностей, то их легко сделать по событию "юнит применяет способность" и условием "применяемая способность = x" для каждой отдельно взятой способки. А что если их сотни? Например 500 способок. Писать 500 отдельных триггеров или блоков if/then/else не только путаницу в редакторе вызовет, но и дает лаги, особенно если там много способностей прокают при атаке юнита. условно каждый раз когда каждый юнит на карте атакует врага, триггер проверяет 100 условий - так и игру крашнуть можно. Как убрать эти лаги?

Принятый ответ

nvc123 уже решал эту проблему
если вкратце, в равкод абилки сохраняешь функцию которую нужно экзекютнуть и булевую, регистрируешь один раз событие каста для всех игроков, а в условии достаёшь булевую из равкода применяемой абилки, если есть, то экзекютнуть функцию по следующему ключу
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
1
1 год назад
0
nvc123 уже решал эту проблему
! novjass
inject "spellcast.j"
library mySpell initializer init{
void mySpellAction(){
call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Hello, world!")
}
private void init(){
addSpell('A000', "mySpellAction");
}
}
! endnovjass
Я попробовал сделать по той наработке, но что-то пошло не так) Ошибок компилятора 0 но оно не работает
0
8
1 год назад
0
Я в свое время делал системку с похожим смыслом.
Загруженные файлы
0
37
1 год назад
0
0
27
1 год назад
0
lioloisigisi, переведи на джасс/вджасс тогда, если с включённым сджассом оно у тебя не работает
0
26
1 год назад
0
ТС, раз ты описываешь ситуация когда вызываются лаги при открытии "триггера" из-за огромного наслоения if-ов и прочих действий, то тут можно предложить просто немного другой вариант организации всего это уже имеющегося у тебя "завала"...
Я делал так - есть один триггер с событием "приводит способность в действие.
В нём запускаются три-четыре триггера по очереди: "cast ITEMs", "cast HEROs", "cast UNITs".
В первом идут поочерёдные запуски всех отдельных триггеров кастов предметных абилок.
Во втором идут запуски триггеров подписанных как "HERO_NAME cast"
Внутри "HERO_NAME cast" идут 2-5 if-ов, которые проверяют абилки конкретно одного героя
(это чисто для удобства такая группировка)
В третьем идут поочерёдные запуски всех триггеров на абилки не-героев

В итоге имеет всё работает, не смотря на общее нагромождение проверок и экзекутов.
С атакой ровно так же - проверка замаха, чек предметов и инветаре, чек абилок, чек баффов.
0
13
1 год назад
Отредактирован Borodach
0
Еще как вариант, назвать спелы по названию функции вызова
Соб: кастует спел
Дей: call TriggerExecute(GetSpellTriggerName()) ))
Если пользуешся ГУИ
Дей:
сall TriggerExecute("trg_"+GetSpellTriggerName()+"Action")
может писатся по другому, написал из памяти
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.