Да, на 20 секунд. Если не трудно, напиши карту пример, я уже убегаю по делам.
Напишу. Жди.
Таймеры идут одинаковое время. Отсюда следует, что первый запущенный таймер завершится только первым. Второй запущенный - только вторым. Третий - только третьим. Они не могут поменяться местами, а значит, инкрементом можно отследить их индекс.
Либо, если бы у тебя были таймеры с разным временем, но версия Warcraft III не меньше 1.26 (в нём добавили хеш-таблицы), то с помощью хеш-таблиц, если я их правильно понимаю, можно отследить индекс. ssbbssc:
однако триггер с таймером сработал только один раз и больше не фурычил =\
Внезапно обнаружил. До какого индекса будут создаваться таймеры, определяет "Раз.". Например, если бы ты указал "Раз." равным 5, у тебя бы сработало 5 таймеров.
Чтобы это обойти, , перед запуском таймера, нужно создавать новый таймер строкой кода "Custom script: set udg_TheTimer[udg_TheTimerIndex] = CreateTimer()".
Сделал и прикрепляю карту с первым способов (инкремент). Попробую ещё с помощью хеш-таблиц.
А у тебя каждый таймер запускается на одинаковое количество секунд? Если да, я догадываюсь, как можно отследить индекс. ssbbssc:
однако триггер с таймером сработал только один раз и больше не фурычил =\
Можно создавать триггер действием, новым действием задавать ему событие. Пусть единственным действием созданного триггера будет вызов нужного тебе триггера.
В данном случае воспользуешься MPQ-редактором и исправишь, но что ты сделаешь, если карта начнёт вылетать не из-за модели? Такие случаи видел не 1 раз. А разгадка одна - нужно делать бэкапы карт.
Можно триггерно создавать новый триггер и назначать ему новое событие с нужным индексом. Могу сделать карту-пример.
Уже написал, а теперь понял, что индекс и этим способом не достать.
Но если вместо таймера использовать "Wait" и локальные переменные в одном триггере, то получится.
Обьясните связь, почему построенный обьект не удаляется в след триггере
Потому, что в следующем триггере ты пытаешься обратиться к построенному объекту с помощью функции "Реакция на событие - Constructed Structure". Но эта функция не вернёт юнит, т.к. она возвращает юнит только когда событием была постройка здания. У тебя же событие "Боевая единица - Unit Enters Region" и в нём не происходит постройка здания. В нём происходит вход в регион и оно возвращает уже юнит, вошедший в регион, а никак не построенное здание.
Когда юнит завершает строительство, игра сохраняет построенно здание в переменную UnitOfDeath[RectOfDeathLength], назначает новому триггеру новое событие, что в область вокруг построенного здания вошёл юнит. Эту область игра сохраняет в переменной RectOfDeath[RectOfDeathLength]. Когда событие срабатывает, цикл проверяет, в какой из этих областей находится вошедший юнит и удаляет здание, которое было связано с этой областью переменной UnitOfDeath[RectOfDeathLength].
После того, как здание построилось создаётся новое событие для 1 и того же триггера. Но есть действие, которое позволяет создать новый триггер. И к нему уже можно прикрепить новое событие. Могу сделать карту-пример.
Способ I:
Действие 1. Открываешь редактор.
Действие 2. Нажимаешь клавишу D, чтобы открыть панель декораций.
Действие 3. Среди деревьев и разрушаемых объектов находишь ворота.
Действие 4. Выставляешь найденные ворота на карту.
Действие 5. Выделяешь ворота.
Действие 6. Нажимаешь клавишу Enter или дважды щёлкаешь по воротам.
Действие 7. В открывшемся диалоговом окне устанавливаешь значение параметра "Прочность" равному 0.
Способ 2:
Повторяешь действия с 1 по 4.
Действие 5. Нажимаешь клавишу F4, чтобы открыть редактор триггеров.
Действие 6. Нажимаешь клавишу Ctrl+T, чтобы создать новый триггер.
Действие 7. Нажимаешь клавишу Ctrl+E, чтобы создать новое событие.
Действие 9. Раскрываешь выпадающий список.
Действие 10. Выбираешь событие "Map initialization".
Действие 11. Нажимаешь кнопку OK.
Действие 12. Нажимаешь клавишу Ctrl+R, чтобы создать новое действие.
Действие 13. Раскрываешь выпадающий список.
Действие 14. Выбираешь действие "Декорация - Kill".
Что-то мне лень дальше писать. В общем остался ты без ворот.
» WarCraft 3 / И ещё один баг
» WarCraft 3 / Array Timer
Doc:
Ред. naxim
» WarCraft 3 / Array Timer
ssbbssc:
Чтобы это обойти, , перед запуском таймера, нужно создавать новый таймер строкой кода "Custom script: set udg_TheTimer[udg_TheTimerIndex] = CreateTimer()".
Сделал и прикрепляю карту с первым способов (инкремент). Попробую ещё с помощью хеш-таблиц.
» WarCraft 3 / Array Timer
ssbbssc:
» WarCraft 3 / Карта вылетает
» WarCraft 3 / Array Timer
Но если вместо таймера использовать "Wait" и локальные переменные в одном триггере, то получится.
Ред. naxim
» WarCraft 3 / Array Timer
» WarCraft 3 / Какие не очевидные особенности Warcraft III вы знаете?
» WarCraft 3 / Какие не очевидные особенности Warcraft III вы знаете?
» WarCraft 3 / Какие не очевидные особенности Warcraft III вы знаете?
Nosferoh:
Ред. alexprey
» WarCraft 3 / Как увеличить круг выбора юнита
» WarCraft 3 / Как увеличить круг выбора юнита
» WarCraft 3 / Взаимосвязь
» WarCraft 3 / Взаимосвязь
» WarCraft 3 / Взаимосвязь
А почему нельзя удалять все здания в области, когда нужный юнит в неё войдёт?
» WarCraft 3 / Взаимосвязь
» WarCraft 3 / Взаимосвязь
» WarCraft 3 / Взаимосвязь
» WarCraft 3 / Мигающая пиктограмма способности
Ред. naxim
» WarCraft 3 / Невозможность выбора расы
» WarCraft 3 / Магическая защита.
» WarCraft 3 / Перенос героя в другую локацию
» WarCraft 3 / Ворота.
Действие 1. Открываешь редактор.
Действие 2. Нажимаешь клавишу D, чтобы открыть панель декораций.
Действие 3. Среди деревьев и разрушаемых объектов находишь ворота.
Действие 4. Выставляешь найденные ворота на карту.
Действие 5. Выделяешь ворота.
Действие 6. Нажимаешь клавишу Enter или дважды щёлкаешь по воротам.
Действие 7. В открывшемся диалоговом окне устанавливаешь значение параметра "Прочность" равному 0.
Повторяешь действия с 1 по 4.
Действие 5. Нажимаешь клавишу F4, чтобы открыть редактор триггеров.
Действие 6. Нажимаешь клавишу Ctrl+T, чтобы создать новый триггер.
Действие 7. Нажимаешь клавишу Ctrl+E, чтобы создать новое событие.
Действие 9. Раскрываешь выпадающий список.
Действие 10. Выбираешь событие "Map initialization".
Действие 11. Нажимаешь кнопку OK.
Действие 12. Нажимаешь клавишу Ctrl+R, чтобы создать новое действие.
Действие 13. Раскрываешь выпадающий список.
Действие 14. Выбираешь действие "Декорация - Kill".
» WarCraft 3 / Скрипт AI
» WarCraft 3 / Таблица рекордов