Модератор форума: Slon |
Форум РЕДАКТОР - ArmA 2 Operation Arrowhead Скрипты Динамическая подгрузка и удаление областей карты (Скрипт подгружающий юнитов при приближении игрока) |
Динамическая подгрузка и удаление областей карты |
› Воскресенье
› 07.12.2014
› 20:56
› Сообщение #
Доброго времени суток. Прошу помощи у знающих товарищей. Задача вроде бы не сложная, но я сам не осилю.
Задача: Скрипт который подгружал бы юнитов с их вэйпоинтами внутри определенной области при приближении игрока к ней. Кода-же игрок отдаляется от этой области - скрипт удаляет всех этих юнитов. Пример: В редакторе создается несколько юнитов и вэйпоинтов к ним. Создается тригер "А" некоего радиуса вокруг этих юнитов Создается тригер "Б" еще большего радиуса, вокруг тригера "А" Создается юнит игрока вне обоих тригеров При запуске миссии юниты находящиеся внутри тригера "А" удаляются (или не появляются вовсе). Когда игрок входит в тригер "Б" - скрипт создает юниты которые были размещены внутри тригера "А" вместе с их вэйпоинтами. Когда игрок выходит из области "Б", то скрипт удаляет этих юнитов. Если игрок опять вернется в тригер "Б", то скрипт опять создаст в ней этих юнитов и т.д.... Таким образом можно хоть весь остров населить юнитами и событиями не нагружая процессор. Помогите пожалуйста создать такой скрипт Буду очень благодарен. |
› Воскресенье
› 07.12.2014
› 23:02
› Сообщение #
mrFlint,
Цитата В редакторе создается несколько юнитов и вэйпоинтов к ним. Создается юнит игрока вне обоих тригеров Создавать игрока? Зачем?) Цитата При запуске миссии юниты находящиеся внутри тригера "А" удаляются (или не появляются вовсе). Когда игрок входит в тригер "Б" - скрипт создает юниты которые были размещены внутри тригера "А" вместе с их вэйпоинтами. Не удобней ли создавать сразу в пределах одного триггера повесив на него условие присутствия игрока как активацию: Condition: player distance thisTrigger < {spawnDistance} Activation: thisTrigger execVM "spawnAI.sqf"; Deactivation: thisTrigger execVM "removeAI.sqf"; Добавлено (07.12.2014, 22:12) Добавлено (07.12.2014, 23:02) Код if(!isNil {_this getVariable "spawnedUnits"};)then{ _this setVariable ["spawnedUnits", [] ] }; _spawned = _this getVariable "spawnedUnits"; _spawned set [count _spawned, _unit]; removeAI При удалении получай массив, и удаляй всех созданных юнитов в радиусе триггера Код _spawned = _this getVariable "spawnedUnits"; {deleteVehicle _x} foreach _spawned; _this setVariable ["spawnedUnits", nil];
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Воскресенье
› 07.12.2014
› 23:13
› Сообщение #
Цитата Зачем в редакторе размещать юнитов, потом их удалять при старте чтобы вновь создать? А может я чего-то не знаю и есть способ проще этого добиться? Например, через condition of presens. Подскажите. |
› Понедельник
› 08.12.2014
› 08:00
› Сообщение #
mrFlint, В таком случае сотней строк кода не обойтись:
1. Получить список юнитов через триггер. 2. Сгруппировать юнитов по группам 3. Построить структуру на массивах содержащую необходимые данные для команд, и по ней создавать всё вновь: сначала группы, затем юниты и вейпоинты. Сейчас времени нет постараюсь ответить позже дня через 2-3
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Понедельник
› 08.12.2014
› 14:34
› Сообщение #
Мне видится что если обойтись без групп (т.е. делать так, что бы все размещенные внутри тригера юниты были одиночками), то задача значительно упростится. Можно попробовать сделать так для начала.
Цитата Сейчас времени нет постараюсь ответить позже дня через 2-3 |
› Понедельник
› 08.12.2014
› 15:24
› Сообщение #
|
› Понедельник
› 08.12.2014
› 18:03
› Сообщение #
bosoy07, да, это что-то похожее - то же для экономии ресурсов процессора, но не совсем то. Здесь на определенном расстоянии убираются все юниты кроме тим лидера из группы. Но если каждый юнит в отдельной группе, то это ничего не даст. Но как пример очень полезно.
Вот ссылка на файл, если кому интересно. Там есть версия скрипта и аддона. zbe_cacheV4.6 (P.S. Это для третьей армы) |
› Понедельник
› 08.12.2014
› 18:07
› Сообщение #
Цитата Вот ссылка на файл, если кому интересно. Там есть версия скрипта и аддона. zbe_cacheV4.6 (P.S. Это для третьей армы) |
› Понедельник
› 08.12.2014
› 18:25
› Сообщение #
Цитата он и под а2 переделывается при нужности... Там используется функция из третьей армы BIS_fnc_mapSize Я хочу вручную ввести это значение для своей карты, но для этого надо знать в каком виде его возвращает BIS_fnc_mapSize . Это два числа (по оси X и Y) или это площадь или еще что? Подскажите плиз. |
› Понедельник
› 08.12.2014
› 18:46
› Сообщение #
Ковырни BIS_fnc_mapSize и посмотри что там внутри.
|
› Понедельник
› 08.12.2014
› 18:53
› Сообщение #
Цитата Ковырни BIS_fnc_mapSize и посмотри что там внутри. |
› Понедельник
› 08.12.2014
› 21:59
› Сообщение #
mrFlint, без групп ничего не получится это фундаментальный элемент. Если ты не знал, то и один юнит обладает группой. Также команда для создания вейпоинта addWaypoint применяется к группе, а не к юниту.
Поэтому лучше одиночек не использовать ибо присутствует ограничение на их количество для каждой стооны - 144 групп. Если ты ставишь юнита в редакторе, то при старте миссии он создается автоматически а так же группа для него. Невозможно сделать так, чтобы он не создавался и поэтому приходится копировать все его свойства, затем удалять юнита потом его группу, и только потом создавать в тот момент когда он нужен. А это значит, что в редакторе размахнуться по полной ( преодолеть лимит в 144 ) и населить каждый уголок карты жизнью используя предложенный тобой метод не получится. Другое дело когда ты создаешь юнита динамически из скрипта не используя редактор - ведь одновременно создавать 144 группы вряд ли прийдется.
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Понедельник
› 08.12.2014
› 22:28
› Сообщение #
А можно ли сделать так:
Заселить в редакторе один город. Сохранить миссию. Залезть в mission.sqm, выдрать оттуда целым куском всё что навоял в городе и вставить прям этим куском в скрипт, который при приближении игрока создаст эти юниты, вэйпоинты и др.. Ну а при отдаленни - удалит. Потом опять зайти в редактор, удалить всех в первом городе и заселить второй и т.д. пока весь остров не забьет жизнью. А? |
› Понедельник
› 08.12.2014
› 22:40
› Сообщение #
mission.sqm содержит классы в формате, который sqf скрипты не понимают
Добавлено (08.12.2014, 22:40)
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Вторник
› 09.12.2014
› 14:01
› Сообщение #
Цитата Единственный нормальный вариант создавать из скрипта. Добавлено (08.12.2014, 23:41) Добавлено (09.12.2014, 14:01) |
| |||
Чат сайта |