Почему когда я добавляю любое (if/then/else) в этот триггер, карта перестаёт запускаться?
Скил - временное добавление ловкости в зависимости от уровня способности, я хочу сделать еще чтобы пока старый бонус активен, новый не добавлялся.
Или чтобы он не добавлялся но обновил время действия бонуса.
Даже если все действия запихнуть в (if/then/else) карта перестает запускаться.

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

что-то не вижу на скрине как вы пытаетесь запихнуть в if/then/else. Почему должен угадывать
Предположение: ошибка - локальные переменные объявляются всегда первыми. Если там будет какое-то другое действие, а объявление локалок ниже, то это ошибка. Ты вперед, наверное, поставил действие "if/then/else", а потом начал объявлять что-то там,
правильно
local unit u
if (условие) then
	действие
endif
не правильно
if (условие) then
	local unit u
endif
Локалки вначале функции всегда объявляются. Можете в код конвентировать и посмотреть.
вейты не юзайте лучше, используйте таймер. Он поток паузит, еще работает во время паузы, и не точен .
0
19
6 лет назад
0
Похожие вопросы:

ответ
Это не пробовали?
Или вот это. Хорошая наработка, насколько я помню.
ответ
Поищи у китайцев, у них много чего можно найти, но от их скорости проще застрелится
ответ
Есть логическое условие. Его нахождение в списке не должно доставить проблем.

0
27
6 лет назад
Отредактирован MpW
0
что-то не вижу на скрине как вы пытаетесь запихнуть в if/then/else. Почему должен угадывать
Предположение: ошибка - локальные переменные объявляются всегда первыми. Если там будет какое-то другое действие, а объявление локалок ниже, то это ошибка. Ты вперед, наверное, поставил действие "if/then/else", а потом начал объявлять что-то там,
правильно
local unit u
if (условие) then
	действие
endif
не правильно
if (условие) then
	local unit u
endif
Локалки вначале функции всегда объявляются. Можете в код конвентировать и посмотреть.
вейты не юзайте лучше, используйте таймер. Он поток паузит, еще работает во время паузы, и не точен .
Принятый ответ
0
17
6 лет назад
0
в vjass локалки моно внутри if или циклов ну использовать их вне их блока незя
0
6
6 лет назад
Отредактирован Enemy1PK
0
Steal nerves:
что-то не вижу на скрине как вы пытаетесь запихнуть в if/then/else. Почему должен угадывать
Предположение: ошибка - локальные переменные объявляются всегда первыми. Если там будет какое-то другое действие, а объявление локалок ниже, то это ошибка. Ты вперед, наверное, поставил действие "if/then/else", а потом начал объявлять что-то там,
правильно
local unit u
if (условие) then
	действие
endif
не правильно
if (условие) then
	local unit u
endif
Локалки вначале функции всегда объявляются. Можете в код конвентировать и посмотреть.
вейты не юзайте лучше, используйте таймер. Он поток паузит, еще работает во время паузы, и не точен .
респект таким ребятам, теперь работает.
но я не понимаю как тут можно реализовать через таймер, если убирать бонус ловкость другим тригером с событием "таймер иссякает" то как таймер можно указать только глобальную переменную, а это вызывает баг даже когда 2 юнита использовали скил.
0
21
6 лет назад
Отредактирован Raised
0
Enemy1PK, локалки нельзя передевать между функциями, но можно сохранять в хеш-таблицы или структуры.
0
28
6 лет назад
0
Enemy1PK, таймер может быть локальным
и таймер может вызывать на прямую функцию без использования триггеров
впрочем не обязательно использовать локальные таймеры
создай список юнитов
когда юнит применяет твою абилку проверяй есть ли он в списке и если нету то добавляй его в список и атач к нему число 300 (продолжительность бафа)
если он есть в списке то установи значение этого числа = 300
одним глобальным таймером пробегай по списку и уменьшай у каждого юнита это число на 1
если число достигло 0 то удаляй его из списка и отбирай ловкость
0
6
6 лет назад
0
GF RaiseD:
Enemy1PK, локалки нельзя передевать между функциями, но можно сохранять в хеш-таблицы или структуры.
учитывая что там написано на jass, непонятно когда я это освою, но лучше чем ничего.
nvc123:
Enemy1PK, таймер может быть локальным
и таймер может вызывать на прямую функцию без использования триггеров
впрочем не обязательно использовать локальные таймеры
создай список юнитов
когда юнит применяет твою абилку проверяй есть ли он в списке и если нету то добавляй его в список и атач к нему число 300 (продолжительность бафа)
если он есть в списке то установи значение этого числа = 300
одним глобальным таймером пробегай по списку и уменьшай у каждого юнита это число на 1
если число достигло 0 то удаляй его из списка и отбирай ловкость
а ты мне просто мозг взорвал, про таймеры не помешало бы уточнить.
как и про группы, я могу добавить юнита в группу, но как именно к нему присвоить число 300 и потом уменьшать у каждого.
Может будет проще если подскажете как "цепляться" за баф? проверять висит ли конкретный баф, и когда он пропадает - ловкость удалятся.
Потому что в условиях есть только бесполезная функция buff равно buff.
0
32
6 лет назад
0
Enemy1PK, вот так:
local timet t = CreateTimer( )
local integer id = GetHandleId(t)

call SaveUnitHandle( udg_Hash, id, 0 )
call SaveInteger( udg_Hash, id, 1 )

call TimerStart( t, 10.00, false, function somefunc)
Статьи про jass надо прочитать, если в краце, то создается такой обьект - таймер, к которому крепятся данные, когда этот таймер истечен он вызовет некую функцию, в которой находятся все необходимые действия + чтения данных из таймера запустившего эту функцию, таких таймеров может быть 100500 и не надо никаких триггеров, глобальных переменных (кроме хештаблицы)
0
6
6 лет назад
0
quq_CCCP:
Enemy1PK, вот так:
local timet t = CreateTimer( )
local integer id = GetHandleId(t)

call SaveUnitHandle( udg_Hash, id, 0 )
call SaveInteger( udg_Hash, id, 1 )

call TimerStart( t, 10.00, false, function somefunc)
Статьи про jass надо прочитать, если в краце, то создается такой обьект - таймер, к которому крепятся данные, когда этот таймер истечен он вызовет некую функцию, в которой находятся все необходимые действия + чтения данных из таймера запустившего эту функцию, таких таймеров может быть 100500 и не надо никаких триггеров, глобальных переменных (кроме хештаблицы)
я читал, но быть хорошим програмером не тоже самое что быть хорошим учителем.
надо блин, не то что по символу объяснять, а даже показывать где какие кнопки нажимать чтобы увидеть текстовые варианты тригеров.
тут без наставника не разобраться.
но очевидно что дополнительные ответы не упростят мне задачу.
0
32
6 лет назад
0
Enemy1PK, я и не собирался не кого учить, как бы шибко жирно, есть куча статей, читайте.
0
16
6 лет назад
0
Конкретно по вопросу таймеров - тебе нужна статья про хэш.
0
28
6 лет назад
Отредактирован nvc123
0
но как именно к нему присвоить число 300 и потом уменьшать у каждого
но как именно к нему присвоить число 300 и потом уменьшать у каждого
есть куча способов цеплять данные к юнитам и прочим объектам
один из самых простых это юзер дата
в гуи называется 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 то удаляй юнита из группы

проверка на баф есть в разделе условия - логические
но это скорее всего приведёт к багам
т.к. бывают различные ситуации когда баф исчезает
например смерть героя, очищение, наличие конфликтующего баффа и т.д.
в результате баф исчезнет раньше времени а то и вовсе не появится
Чтобы оставить комментарий, пожалуйста, войдите на сайт.