Казалось бы, вопрос элементарный, а меня можно задизлайкать за непонимание очевиднейших вещей. Но всё не так просто, как кажется.
Ситуация такая. Есть триггер (а вернее их три разных, выполняющихся в разных местах и в разное время, друг другу они не мешают совершенно), который срабатывает после завершения таймера. Там происходит много всяких действий, одно из которых - повышение переменной Fountain на 1 (при запуске карты она обнуляется конечно же).
Сам триггер (как и другие два) выглядит вот так:
Ситуация такая. Есть триггер (а вернее их три разных, выполняющихся в разных местах и в разное время, друг другу они не мешают совершенно), который срабатывает после завершения таймера. Там происходит много всяких действий, одно из которых - повышение переменной 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,
8gabriel8,
Беда в том, что эта карта из кампании, там всё очень много весит, потому не буду.Если что, скидывай карту.
PT153,
Пока никак, ибо из-за сессии отложил редактор в сторону (собственно, даже сюда времени зайти не было, к сожалению)ну как там дела?
Рад, что ты предложил выход, но я, боюсь, твой код себе никак не перенесу, ибо, как писал в вопросе, лишь на GUI могу работать.
8gabriel8,
Триггер, запускающий таймер, вряд ли многое испортить можетмне кажется, проблема не в этом триггере, а в другом, который запускает триггеры и таймеры.
Мдаааа... Я свою ошибку таки нашёл. Она была в самом тупом месте из всех возможных.
Так вот, это я дурак полный.
Запихнул обнуление своей переменной ВНИМАНИЕ! в триггер, который игрокам-компьютерам каждые 2 секунды обновляет ресурсы. А вместе с этим и обнуляет снова и снова мою переменную. Обнаружил ли я это через дебаги? Нет, просто от скуки и безнадёжности положения начал прокручивать и листать все триггеры.
Цитата из вопроса, у меня не работает голова.Я действительно не понимаю, это у меня голова не работает совершенно, или в редакторе какие-то баги
Так вот, это я дурак полный.
Запихнул обнуление своей переменной ВНИМАНИЕ! в триггер, который игрокам-компьютерам каждые 2 секунды обновляет ресурсы. А вместе с этим и обнуляет снова и снова мою переменную. Обнаружил ли я это через дебаги? Нет, просто от скуки и безнадёжности положения начал прокручивать и листать все триггеры.
Спасибо всем, кто пытался помочь, это было очень приятно) Мне жаль, что вы ломали голову и тратили время впустую по моей глупости и невнимательности.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. PT153
Баг не в том, что +1 не работает. +1 работает хорошо, просто с глобалками надо аккурантей.
Ред. Rare
На 100%. Подвожу героя к первой области, кончается таймер, выполняется весь триггер и условие при Fountain = 1. Подвожу ко второй области, снова таймер, снова всё те же действия, и снова условие при Fountain = 1. В третий раз аналогично. Это может означать лишь то, что переменная постоянно равна 1. Ей негде меняться между этими триггерами или внутри них. Есть лишь один оператор, её меняющий. И я его показал на скриншоте.
prog, Потому что квест такой в карте. Три фонтана надо от порчи очистить. Подвожу героя. запускается таймер, пока он колдует. Заканчивает колдовать - фонтан очищается, переменная увеличивается на 1. И так 3 раза, ибо фонтана на карте 3
Они в плане операторов совершенно одинаковые, но каждый из них выполняет replace unit для разных фонтанов
Ред. prog
второй смущающий меня момент - в описании первого способа (правильного), у тебя указано что возможны значения и 1 и 2, но не 3, а в комментариях ты ищеш решение какой-то другой проблемы, при которой значение всегда равно 1.А, нет, мой косяк, не достаточно внимательно прочитал.
Я нигде не говорил тех вещей, которые темя смутили.
pro100master, В карте только один игрок, который может это выполнить Она у меня в начале карты обнуляется, я это указал Уйти он не может, при запуске таймера герой ставится на паузу и вывести его невозможно до истечения времени или смерти
Настоятельно рекомендую во-первых вернуться к первому способу, а потом вывести значение переменной в трех указанных мной местах - в начале триггера, сразу после вейта и сразу после присвоения. Да, по косвенным признакам все выглядит так будто переменная всегда равна 1 и присвоение не работает, но так ли это на самом деле можно узнать только с помощью отладки (есть еще минимум два варианта попадающих под эти-же косвенные признаки, с другими значениями переменной).
Ред. PT153
При её отсутствии проблем тем более не будет, дело было точно не в ней.
У тебя есть пауза в 1 сек., потом если Fountain == 1, то идёт пауза до окончания звука, а после ещё пауза в 3 секунды. После этого проверяется условие Fountain == 2, если да, то пауза до окончания звука, а после ещё пауза в 3 секунды. Далее проверяется условие Fountain == 3, если да, то пауза до окончания звука, а после ещё пауза в 3 секунды.