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