Казалось бы, вопрос элементарный, а меня можно задизлайкать за непонимание очевиднейших вещей. Но всё не так просто, как кажется.
Ситуация такая. Есть триггер (а вернее их три разных, выполняющихся в разных местах и в разное время, друг другу они не мешают совершенно), который срабатывает после завершения таймера. Там происходит много всяких действий, одно из которых - повышение переменной Fountain на 1 (при запуске карты она обнуляется конечно же).
Сам триггер (как и другие два) выглядит вот так:
Беда в том, что триггер выполняется абсолютно весь. Окно таймера сворачивается, анимации пропадают, юнит, который должен замениться, заменяется и т.д. Всё работает. Кроме увеличения переменной Fountain на 1. Мной было использовано 3 различных способа.
Первый (самый очевидный) через оператор set variable. То есть
Set Fountain = Fountain +1
Казалось бы, должно работать. И да, в самый первый раз наша нулевая переменная становится равной 1. А вот во второй раз становиться двойкой, а в третий раз тройкой она почему-то не хочет. И потому в каждый из трёх раз мне проигрывается действие с условием "if Fountain == 1".
Далее я всё поменял. Разбил действие на три, а именно:
If Fountain == 2 then set Fountain = 3
If Fountain == 1 then set Fountain = 2
If Fountain == 0 then set Fountain = 1
Именно в этом порядке. Каков результат? От прошлого не отличается он ничем совершенно.
Ну а последний способ можете посмотреть на картинке.
По сути, тот же второй, но всё умещено в одно условие. Исход, как вы понимаете, снова печальный и нерабочий.
Собственно, вопрос мой таков: если я всё же ошибся, то в чём именно? А если не ошибся и делал верно, то какие ещё способы существуют для увеличения значения переменной на 1 (оператор Inc() я искал, безуспешно).
Я действительно не понимаю, это у меня голова не работает совершенно, или в редакторе какие-то баги
П.С. JASS и его разновидности не знаю совершенно, огромная просьба объяснять и советовать исключительно с использованием стандартных триггеров.
П.П.С. Если что, у меня версия игры 1.26

8gabriel8,
Если что, скидывай карту.
Беда в том, что эта карта из кампании, там всё очень много весит, потому не буду.
PT153,
ну как там дела?
Пока никак, ибо из-за сессии отложил редактор в сторону (собственно, даже сюда времени зайти не было, к сожалению)
Рад, что ты предложил выход, но я, боюсь, твой код себе никак не перенесу, ибо, как писал в вопросе, лишь на GUI могу работать.
8gabriel8,
мне кажется, проблема не в этом триггере, а в другом, который запускает триггеры и таймеры.
Триггер, запускающий таймер, вряд ли многое испортить может
Мдаааа... Я свою ошибку таки нашёл. Она была в самом тупом месте из всех возможных.
Я действительно не понимаю, это у меня голова не работает совершенно, или в редакторе какие-то баги
Цитата из вопроса, у меня не работает голова.
Так вот, это я дурак полный.
Запихнул обнуление своей переменной ВНИМАНИЕ! в триггер, который игрокам-компьютерам каждые 2 секунды обновляет ресурсы. А вместе с этим и обнуляет снова и снова мою переменную. Обнаружил ли я это через дебаги? Нет, просто от скуки и безнадёжности положения начал прокручивать и листать все триггеры.
Спасибо всем, кто пытался помочь, это было очень приятно) Мне жаль, что вы ломали голову и тратили время впустую по моей глупости и невнимательности.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
22
If Fountain == 2 then set Fountain = 3
If Fountain == 1 then set Fountain = 2
If Fountain == 0 then set Fountain = 1
Забыл уточнить вот в этом моменте. Если порядок поменять, то работает всё великолепно. Сначала Fountain приравнивается единице, затем двойке, а в конце тройке.
В имеющейся же последовательности переменная успешно становится единицей, а в двух других триггерах эти три строки благополучно игнорирует, абсолютно отказываясь увеличиваться.
24
Первый способ должен работать, проблема где-то в другом месте.
22
prog, можешь, пожалуйста, посмотреть, в каком именно? Потому что абсолютно весь триггер работает идеально, кроме этого единственного момента.
22
Hate, к сожалению, описанный тут способ никак не помогает. Сам по себе set 'переменная' = 'переменная' + 'число' у меня есть. В условиях ошибки нет никакой тоже. Сами триггеры работают прекрасно, а условные операторы должны быть именно такими и выполняться лишь при конкретном значении Fountain.
21
зачем такой длиннющий ифзенэлс в одну строку?
попробуй разбить на несколько помельче последовательных друг в друге чтобы смысл в итоге был тот же
22
ClotPh, у меня во втором способе и было разбиение такое. Не работает оно.
24
Rare, я не занимаюсь поиском багов в чужом коде. Особенно когда в дело замешано больше одного триггера и вейты. Могу по советовать выводить на время отладки текстом имена сработавших триггеров и значения переменной в трех местах - сразу после срабатывания триггера, после вейта и после присвоения (все три с именем триггера, чтобы понимать откуда эти значения), а еще пригодится отладка в местах где активируются эти триггеры и запускается таймер.
28
Используй If/Then/Else, который позволяет вставлять несколько действий.
Убери Do Nothing.

Есть такая вещь как Object Manger (F11). Посмотри там, где используется переменная Fountain.
Если она используется только, где надо, то проблема не тут.

У тебя есть пауза. Пока она идёт, значение Fountain может поменяться.
Fountain общая для всех этих триггеров? Эти триггеры часто используются? Могут ли они пересекаться (уточняю)?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.