Я представляю вам свою наработку "Навигационная система". Не знаю есть ли подобные, но во всяком случае не видел. Что за наработка? Эта наработка очень хорошо подойдет для карт типа RPG. В общем над героем появляется стрелка указывающая куда надо идти (например для выполнения квеста, это уже как вам заблагорассудиться). Наработка не сложная, думаю все разберутся. Удачи, пользуйтесь)
tvain, Как раз твою использовать в своей мапе равносильно тому что её делать с нуля. Мою же импортируй и вписывай одну строчку в нужном триггере. Все остальное будет делаться за тебя.
Чуть яснее: Ты создаешь юнита и в отдельном триггере на периоде заставляешь юнита поворачиваться в точку. После чего, когда надо сменить точку - ты создаешь другого юнита и заставляешь его поворачиваться в другую точку. Что говорит лишь о том что для импорта по твоему шаблону в карте, где, к примеру, подобная система нужна для использования более 5-6 раз придется делать набор из 15-18 триггеров (по три на каждый компас), по моему шаблону - только момент запуска.
К тому же, при длительном использовании твоей системы - игра вылетит из-за перегрузки памяти (вес процесса достигнет критической отметки в 768МБ и компьютер с 1ГБ оперативной памяти закроет процесс) А это произойдет по тому что ты не удаляешь утечные объекты (точки), которых у тебя каждую секунду создается огромное количество.
Хочу тебе донести что твоя система в твоем исполнении вне твоей тестовой карты просто не жизнеспособна. Моя же, в отличии от твоей - обладает двумя различными настройками (Компас на юнита \ компас на точку) и 100% безутечна, тоесть хоть 20 часов пусть работает - в любом случае игра не будет притормаживать.
tvain, Вообще на будущее вот тебе пара стандартов наработок, пусть даже для гуи.
Наработка должна быть MUI ( Multi-Unit Instanceability ) Грубо говоря - то, что не вызовет проблем если спользовать одновременно на нескольких юнитах сразу. Как это сделать - нажми на кнопку:
Единственный возможный способ создания MUI на GUI это работа с хэш-таблицами и глобальными переменными. Раньше все работали исключительно на глобальных переменных, но после выхода 1.24 мы можем работать с хэш-таблицами что значительно облегчает задачу. Теперь пример. Цель - заставить юнита в течении 10 секунд получать урон. Создаем глобальную переменную SpellInit. Тип - целочисленная Создаем глобальную переменную Data. Тип - хэш-таблица
Триггер первый - запуск муи конструкции. Боевая единица атакованна Условие: Уровень способности "кровотечение" для "атакующий юнит" больше 0 действие: Установить значение SpellInit как SpellInit+1 Сохранить Unit Handle в хэш: сохранить "атакующий юнит" как 1 из SpellInit в Data Сохранить Unit Handle в хэш: сохранить "атакованный юнит" как 2 из SpellInit в Data Сохранить Real в хэш: сохранить (Арифметика: 10 + 10*(преобразование целого в реальное: уровень "кровотечение" для "атакующий юнит")) как 3 из SpellInit в Data Сохранить Integer в хэш: сохранить (Арифметика: 2+(2*Уровень "кровотечение" для "атакующий юнит") как 4 из SpellInit в Data Если\то\иначе: SpellInit == 1 то Запустить "Триггер 2" иначе
Триггер 2: каждые 1.0 секунду Условие Действие:
Цикл [X] от 1 до SpellInit: If\then\else: Если: Загрузить Integer из хэш: 4 из X в Data больше 0 то Боевая единица: нанести урон:Cause [Загрузить Unit Handle 1 из X в Data] damage [Загрузить Unit Handle 2 из X в Data] значение [Загрузить Real 3 из X в Data] по типу атаки хх и типу урона хх Сохранить Integer в хэш (Арифметика: [Загрузить Integer из хэш: 4 из X в Data] - 1 ) как 4 из X в Data Иначе Сохранить UnitHandle([Загрузить UnitHandle 1 из SpellInit в Data] как 1 из X в Data) Сохранить UnitHandle([Загрузить UnitHandle 2 из SpellInit в Data] как 2 из X в Data) Сохранить Real([Загрузить Real 3 из SpellInit в Data] как 3 из X в Data) Сохранить Integer([Загрузить Integer 4 из SpellInit в Data] как 4 из X в Data) Установить SpellInit как SpellInit - 1
если\то\иначе SpellInt == 0 то Выключить этот триггер иначе
Проще говоря - смысл в том что когда условия какого либо из событий по циклу соответствуют завершению - текущим значениям цикла присваиваются последние значения самого цикла и цикл закрывается.
Помимо этого стоит отметить что система должна быть универсальна ,именно по этому её стоит писать на джассе, потому как дажсс дает возможность использовать не 50 строк нужного кода в каждом из триггеров а вписать всего одну строчку в код а дальнейшее делается без участия создателя.
Ну а так же - системы должны быть без утечек. Утечки вызывает все что не касается Real \ Integer \ Text \ Boolean. Тоесть, грубо говоря, утечно все то что является игровым объектом. В том числе и точки и юниты и способности, однако типы юнитов или, к примеру, типы способностей - всего лишь Integer числа.
Вообще очень рекоммендую начинать знакомится с джассом. Найди мою статью на ближайших страницах, там лежит ссылка на очень полезную программу. По пути разберешься.
FkoFF да и твою версию нормальной наработкой назвать сложно, т.к нету возможности скрыть компас( что явно захочется многим), после смерти юнита он останется висеть. И зачем таймер ставить на 0.01??! когда вполне достаточно от .05 до .1 Проверка условия достиг юнит конечной конца ооочень страшная. И самое главное у тебя тоже утечка в функции NavigateLoop переменная t не обнуляется. Ну и последнее спецэффект не уничтожается...