Добавлен Enemy1PK
Почему когда я добавляю любое (if/then/else) в этот триггер, карта перестаёт запускаться?
Скил - временное добавление ловкости в зависимости от уровня способности, я хочу сделать еще чтобы пока старый бонус активен, новый не добавлялся.
Или чтобы он не добавлялся но обновил время действия бонуса.
Скил - временное добавление ловкости в зависимости от уровня способности, я хочу сделать еще чтобы пока старый бонус активен, новый не добавлялся.
Или чтобы он не добавлялся но обновил время действия бонуса.
Даже если все действия запихнуть в (if/then/else) карта перестает запускаться.
Принятый ответ
что-то не вижу на скрине как вы пытаетесь запихнуть в if/then/else. Почему должен угадывать
Предположение: ошибка - локальные переменные объявляются всегда первыми. Если там будет какое-то другое действие, а объявление локалок ниже, то это ошибка. Ты вперед, наверное, поставил действие "if/then/else", а потом начал объявлять что-то там,
Предположение: ошибка - локальные переменные объявляются всегда первыми. Если там будет какое-то другое действие, а объявление локалок ниже, то это ошибка. Ты вперед, наверное, поставил действие "if/then/else", а потом начал объявлять что-то там,
правильно
local unit u
if (условие) then
действие
endif
не правильно
if (условие) then
local unit u
endif
Локалки вначале функции всегда объявляются. Можете в код конвентировать и посмотреть.
вейты не юзайте лучше, используйте таймер. Он поток паузит, еще работает во время паузы, и не точен .
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован MpW
Предположение: ошибка - локальные переменные объявляются всегда первыми. Если там будет какое-то другое действие, а объявление локалок ниже, то это ошибка. Ты вперед, наверное, поставил действие "if/then/else", а потом начал объявлять что-то там,
Отредактирован Enemy1PK
но я не понимаю как тут можно реализовать через таймер, если убирать бонус ловкость другим тригером с событием "таймер иссякает" то как таймер можно указать только глобальную переменную, а это вызывает баг даже когда 2 юнита использовали скил.
Отредактирован Raised
и таймер может вызывать на прямую функцию без использования триггеров
впрочем не обязательно использовать локальные таймеры
создай список юнитов
когда юнит применяет твою абилку проверяй есть ли он в списке и если нету то добавляй его в список и атач к нему число 300 (продолжительность бафа)
если он есть в списке то установи значение этого числа = 300
одним глобальным таймером пробегай по списку и уменьшай у каждого юнита это число на 1
если число достигло 0 то удаляй его из списка и отбирай ловкость
nvc123: а ты мне просто мозг взорвал, про таймеры не помешало бы уточнить.
как и про группы, я могу добавить юнита в группу, но как именно к нему присвоить число 300 и потом уменьшать у каждого.
Потому что в условиях есть только бесполезная функция buff равно buff.
надо блин, не то что по символу объяснять, а даже показывать где какие кнопки нажимать чтобы увидеть текстовые варианты тригеров.
тут без наставника не разобраться.
но очевидно что дополнительные ответы не упростят мне задачу.
Отредактирован nvc123
один из самых простых это юзер дата
в гуи называется custom value
в действиях во вкладке юниты есть set custom value
она к юниту привязывает число
т.е. когда даёшь юниту баф добавляй его в группу и делай set custom value (юнит, 300)
а твоим таймером каждую секунду перебирай эту группу и делай
set custom value(picked unit, get custom value(picked unit) - 1)
далее если get custom value(picked unit) == 0 то удаляй юнита из группы
но это скорее всего приведёт к багам
т.к. бывают различные ситуации когда баф исчезает
например смерть героя, очищение, наличие конфликтующего баффа и т.д.
в результате баф исчезнет раньше времени а то и вовсе не появится