Вообщем суть вопроса такова - критично ли для карты наличие кучи триггеров с одинаковым условием, которые могли бы быть одним триггером, только сделанным через if do else(одно условие, к примеру "A Unit завершает строительство" и много if do else с разными юнитами и действиями) ? Нужно ли их собирать в один, или можно оставить как есть ? Недавно я обращался сюда по поводу странных багов в карте из за триггеров с условием A Unit Enters region, их было около 10 и после создания ещё пары таких триггеров, они стали вызывать баги. После того, как по вашему совету я собрал их в один(через if do else), баг перестал появляться.
Прикрепил пару примеров триггеров, которых можно было бы(но нужно ли?) обьединить. Хотелось бы понять, влияет ли это на работоспособность карты.

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

Или заменяются только те, у которых не написано "Реакция на событие"
Заменяются все глобальные переменные. Например, последний созданный юнит - глобальная переменная. Реакции на событие всегда нативки, но вот что из них перезаписывается, а что нет - не могу сказать, надо тестировать вручную.
GetLocalPlayer:
но на практике это не имеет смысла.
Имеет большой смысл, потому что 1 триггер проще дебажить, что 100500. Более того, события могут конфликтовать, так как триггер с удалением юнита может сработать раньше, и для всех других триггеров с таким же событием юнита уже не будет. Что уж говорить про события каста.
GetLocalPlayer:
Между тем есть такая вещь как лимит операций, в который ты можешь когда-нибудь упереться если делать все через один триггер.
Скорее лимит операций будет достигнут во время инициализации при 100500 триггеров, чем при 1 триггере с if\then\else. А тут ещё есть Lua, где можно нормально сохранять функции, так что даже if\then\else не нужен. Аналогично, но немного хуже можно сделать и на Jass.

crusader556, делать надо так, как будет удобней. На GUI if\then\else сделан криво, потому удобнее будет делать несколько триггеров. Но тогда надо будет следить за ними, чтобы они не конфликтовали.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
28
5 лет назад
Отредактирован PT153
0
То есть в "То - Действия" нужно после всех моих действий там вписывать Skip remaining actions, чтобы оно пропускало "Иначе - действия", т.к там у меня ничего нет. Да ?
Условия на то и условия, что либо выполнится ветка then, либо ветка else. Black Soul верно ответил, это для того, чтобы другие условия пропускались. На твоём скриншоте код выглядит так.
код
If something1 then
    // actions
endif

if something2 then
    // actions
endif
В этом случае, даже если something1 = true, второе условие будет всё равно проверятся. Тебе же нужно, чтобы при обнаружении нужного условия остальные не выполнялись. Потому нужно сделать так.
код
If something1 then
    // actions
    return
endif

if something2 then
    // actions
    return  // Если это условие в самом конце, то return необязателен.
endif
От этого смысла примерно столько же, как от удаления действия Do nothing. То есть вообще незаметно.
?
0
26
5 лет назад
Отредактирован 8gabriel8
0
PT153:
?
Насколько процентов снизится нагрузка на процессор?
0
28
5 лет назад
0
8gabriel8, простая оптимизация. Очень легко делается, а при срабатывании триггера проверяются не все условия.
Можно сделать по другому, для каждого спела в соответствие поставить триггер и вызывать его, передавая аргументы через глобалки.
0
12
5 лет назад
Отредактирован nazarpunk
0
PT153:
8gabriel8, простая оптимизация. Очень легко делается, а при срабатывании триггера проверяются не все условия.
Можно сделать по другому, для каждого спела в соответствие поставить триггер и вызывать его, передавая аргументы через глобалки.
То есть вот так ?
Загруженные файлы
2
29
5 лет назад
2
То есть вот так ?
Совершенно верно.
1
26
5 лет назад
1
8gabriel8:
Давайте-ка, немного позже опять сделаю и проверю, а то может не то говорю, так как напечатал по памяти и делал давно. Просто сейчас оцениваю кампанию Rare, игровой процесс занят, прерывать проверкой не хочу)
Сейчас проверил элементарный вариант, который описал, там всё работает. Но ранее мы вдвоём пробовали скипать одной переменной триггеры покрупнее, там были глюки. В ближайшие пару недель как раз надеюсь заняться редактированием диалогов кампании, там опять опробую одну переменную для скипа и опишу подробнее, если глюк снова появится. Если не будет, то, наверное, руки росли не из того места)

Специально глянул карту официальной кампании, там используются разные переменные для скипов. То есть даже нет смысла делать одну переменную, так как рискую узнать о багах после релиза.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.