Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной

Рекомендованные сообщения

В Epoch 1.0.5.1 стандартный HeliCrash не работает толком, точнее работает, но без лута.
Не беда. Откапал как-то на Epochmod.com скрипт на анимированный HeliCrash. Чуток переделал и русифицировал и вуаля.

Скрипт очень прост. Летит самолет/вертолет/истрибитель и "О нет! Говорит пилот Вася! Я падаю хрен знает где!" и бабах.
Взрыв, огонь, дым и... Лут :)

Что я изменил так это:
- Добавил C-130
- Убрал сообщения при падении, появлении и тп, но при желании их можно вернуть просто раскомментировать пару строчек.

Скрипт легко отслеживается через InfiSTAR. Вы увидете :)

Установка:

1) Скачать скрипт: Нажми на меня :3

2) Закинуть файл по пути dayz_server.pbo/modules и перепаковываем PBO.

3) Идем в MPMissions и открываем init.sqf.

4) Находим EpochEvents и дописываем активацию. (Я лично использую сразу 2-3 в разное время).

["any","any","any","any",7,"HeliCrashSpawner"], 	// ХелиКрашы
["any","any","any","any",15,"HeliCrashSpawner"]

Число 7 и 15. Время задержки от старта сервера. В минутах!

5) Открываем сам файл и находим

_heliStart 				= [[3458.7625, 2924.917],[11147.994, 1516.9348],[14464.443, 2533.0981],[18155.545, 1416.5674],[16951.584, 5436.3516],[16140.807, 12714.08],[14576.426, 14440.467],[8341.2383, 15756.525],[2070.4771, 8910.4111],[16316.533, 17309.357]] call BIS_fnc_selectRandom;

 

Заменяем на нужный вам старт:


Для Chernarus:

_heliStart				= [[1000.0,2.0],[3500.0,2.0],[5000.0,2.0],[7500.0,2.0],[9712.0,663.067],[12304.0,1175.07],[14736.0,2500.0],[16240.0,5000.0],[16240.0,7500.0],[16240.0,10000.0]] call BIS_fnc_selectRandom;

Для Napf:

_heliStart = [[3458.7625, 2924.917],[11147.994, 1516.9348],[14464.443, 2533.0981],[18155.545, 1416.5674],[16951.584, 5436.3516],[16140.807, 12714.08],[14576.426, 14440.467],[8341.2383, 15756.525],[2070.4771, 8910.4111],[16316.533, 17309.357]] call BIS_fnc_selectRandom; 

Для Taviana (Origins):
 

_heliStart = [[7637.1768, 4182.0859],[2154.2883, 17062.283],[8839.4092, 10396.975],[8821.5313, 19403.178],[15097.905, 15839.728],[17291.035, 7203.6821],[18815.258, 2757.0435],[13402.826, 12238.75],[12001.367, 15047.333],[5200.9824, 8429.251],[9564.2949, 5238.4321]] call BIS_fnc_selectRandom; 

Для Taviana 2.0:

_heliStart = [[11558.516, -56.829834],[7787.207, 3972.2046],[2279.2651, 6822.7891],[5548.9434, 8449.1914],[9465.4697, 7223.2925],[17441.467, 5454.5791],[13474.444, 11853.039],[8848.6611, 18823.994],[16224.908, 13310.733],[15171.845, 7629.0879]] call BIS_fnc_selectRandom; 

Для Sauerland:

_heliStart = [[3143.7053, 519.72656],[14047.064, 736.25336],[19551.301, 1638.9634],[22871.928, 3194.9937],[3216.1506, 8066.9844],[15430.821, 7462.8496],[22722.418, 8578.207],[3399.9622, 13945.776],[16220.508, 14363.767],[10220.176, 18679.586]] call BIS_fnc_selectRandom; 

Для Pantera: 

_heliStart = [[2354.8118, 2898.7732],[6441.2544, 604.39148],[5837.6265, 3852.1699],[3434.9966, 7324.9521],[1250.1727, 8301.4199],[6353.0869, 5563.6592],[3011.1584, 4440.96],[4967.9551, 6376.479],[8340.8125, 4563.1436],[4582.7534, 2080.5737]] call BIS_fnc_selectRandom; 

Для Namalsk:

 

_heliStart = [[5046.9678, 5943.2656],[6360.792, 6582.0723],[3544.4153, 6451.7793],[7504.9102, 5786.3271],[7752.436, 7067.6895],[3920.3354, 7530.4941],[6448.9805, 8406.374],[6098.7876, 10094.43],[4745.8853, 10273.457],[8271.7441, 10356.828]] call BIS_fnc_selectRandom;
 

Для Takistan:

 

_heliStart = [[2877.6855, 703.94592],[7118.8374, 10659.661],[7281.5488, 690.51361],[9251.5283, 2722.7166],[3742.7253, 3439.4333],[1300.1748, 3303.4463],[6000.7114, 5670.394],[9339.2139, 6650.0625],[11687.854, 9396.415],[3025.9387, 9983.293]] call BIS_fnc_selectRandom;
 

Для Lingor:

_heliStart = [[862.89911, 816.75781],[2884.9204, 1093.1793],[3923.7927, 1078.5016],[6571.9326, 1575.0684],[3046.9241, 2413.4119],[5652.1348, 2944.7871],[1866.0063, 4954.5566],[3748.3994, 5456.0498],[6348.8232, 4448.1694],[8368.7148, 7673.5293]] call BIS_fnc_selectRandom; 

 

 


6) По сути все. Запускаем сервер и радуемся.


Настройка:

Все просто. Открываем сам файл и там все написано. Но выпишу и сюда.

_spawnChance			= 100;				// Процент спавна ХелиКраша (От 1 до 100%).
_guaranteedLoot			= 12;				// Количество лута которое точно отспавниться.
_randomizedLoot			= 12;				// Насколько рандомно класс лута будет спавниться за каждый итем.
_spawnFire			= true;				// После падения оставить Огонь и Дым на месте ХелиКраша.
_fadeFire			= false;			// Спустя некоторое время пропадет Огонь и Дым.
_preWaypoints			= 15;				// Количество точек через которые пройдет ХелиКраш перед тем как упасть.
_crashDamage			= 1;				// Какое количество урона нанести вертолету в момент падения (0.1 - Минимальный урон, тогда придется 1 раз выстрелить в ХелиКраш. 1 - Максимальный урон, ХелиКраш сразу падает).
_exploRange			= 500;				// Радиус получаемого урона при падении вертолета (В метрах).
_minLootRadius			= 7;				// Минимальная дистанция спавна лута от ХелиКраша (В метрах).
_maxLootRadius			= 50;				// Максимальная дистанция спавна лута от ХелиКраша (В метрах).
_lootTable			= "HeliCrash";		        // Название таблицы откуда берется лут (НЕ ТРОГАЙ ЕСЛИ НЕ ЗНАЕШЬ!).
_show_marker			= true;				// Показывать место падения ХелиКраша маркером.
_show_name			= false;			// Добавить в центре точку и подписывает что упало.
_markerRadius			= 400;				// Радиус маркера (В метрах).

Количество выпадаемых вещей настраивается тут: (На двух примерах)

if(_heliModel == "Mi24_D") then 
{
	_lootTable		= "MilitarySpecial";
	_crashModel		= "Mi24Wreck";
	_guaranteedLoot	= 5;
};

if(_heliModel == "Ka52Black") then 
{
	_lootTable		= "MilitarySpecial";
	_crashModel		= "Ka52Wreck";
	_guaranteedLoot	= 3;
};

Вот _guaranteedLoot    = Х отвечает за то, сколько предметов будет 100% валяться.

Изменено пользователем TheFirstNoob
Убрал Спойлер. (Удобнее) (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





с кастомными лут таблицами не выпадает лут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кстати, а координаты для напф?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кстати, а координаты для напф?

вот для напф

_heliStart = [[3458.7625, 2924.917],[11147.994, 1516.9348],[14464.443, 2533.0981],[18155.545, 1416.5674],[16951.584, 5436.3516],[16140.807, 12714.08],[14576.426, 14440.467],[8341.2383, 15756.525],[2070.4771, 8910.4111],[16316.533, 17309.357]] call BIS_fnc_selectRandom;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот для напф

 

 

значит для напф уже были вписаны

 

 

upd: Запустил, час работы тишина. Всё прописано как надо.

Изменено пользователем all88 (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вертолеты как-то убого падают, а самолеты вообще ужас. Я его немного переделал. Мне нужны были самолеты, в нужный момент я к самолету цеплял дым и убивал пилота. Так намного круче выглядит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вертолеты как-то убого падают, а самолеты вообще ужас. Я его немного переделал. Мне нужны были самолеты, в нужный момент я к самолету цеплял дым и убивал пилота. Так намного круче выглядит.

Видосик запиши, глянем. Или гайд отдельный с видосиком сделай. Я жду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
_spawnChance			= 100;				// Процент спавна ХелиКраша (От 1 до 100%).
_guaranteedLoot			= 12;				// Количество лута которое точно отспавниться.
_randomizedLoot			= 12;				// Насколько рандомно класс лута будет спавниться за каждый итем.
_spawnFire				= true;				// После падения оставить Огонь и Дым на месте ХелиКраша.
_fadeFire				= false;			// Спустя некоторое время пропадет Огонь и Дым.
_preWaypoints			= 15;				// Количество точек через которые пройдет ХелиКраш перед тем как упасть.
_crashDamage			= 0.1;				// Какое количество урона нанести вертолету в момент падения (0.1 - Минимальный урон, тогда придется 1 раз выстрелить в ХелиКраш. 1 - Максимальный урон, ХелиКраш сразу падает).
_exploRange				= 50;				// Радиус получаемого урона при падении вертолета (В метрах).
_minLootRadius			= 5;				// Минимальная дистанция спавна лута от ХелиКраша (В метрах).
_maxLootRadius			= 15;				// Максимальная дистанция спавна лута от ХелиКраша (В метрах).
_lootTable				= "HeliCrash";		// Название таблицы откуда берется лут (НЕ ТРОГАЙ ЕСЛИ НЕ ЗНАЕШЬ!).
_show_marker			= true;				// Показывать место падения ХелиКраша маркером.
_show_name				= false;			// Добавить в центре точку и подписывает что упало.
_markerRadius			= 100;				// Радиус маркера (В метрах).
EpochEvents = [
               ["any","any","any","any",10,"HeliCrashSpawner"],
			   ["any","any","any","any",70,"HeliCrashSpawner"],
			   ["any","any","any","any",130,"HeliCrashSpawner"],
			   ["any","any","any","any",190,"HeliCrashSpawner"]
			  ];
_endTime = time - _startTime;

		//Сообщение которое будет выводиться игрокам о том, что ХелиКраш упал и игроки должны найти его по метке. (Создание маркера)
		//Закомментируйте если вы не хотите чтобы выводилось данное сообщение.
		//Раскомментируйте если вы хотите чтобы выводилось данное сообщение.
		[nil,nil,rTitleText,format["Воздушный транспорт был сбит. Найдите его и заберите его груз себе!"], "PLAIN",10] call RE;
		
		//Выводит сообщение в RPT лог о Месте Падении ХелиКраша и информация до падения.
		diag_log(format["[Сервер] - [Система Ивентов] - [ХелиКраш упал]: ХелиКраш упал! Позиция: %2 - Время до падения: %1 Секунд || ХелиКраш пролетел: %3 Метров", round(_endTime), str(_pos), round(_position distance _crash)]);
waitUntil
		{
			sleep 5;
			_playerPresent = false;
			{
				if((isPlayer _x) && (_x distance _pos <= 25)) then {
					_playerPresent = true;
					_finder = name _x;
				};
				
			} foreach playableUnits;
			
			(_playerPresent)
		};

		//Сообщение которое будет выводиться игрокам о том, что ХелиКраш был найден (Фиксирование!)
		//Закомментируйте если вы не хотите чтобы выводилось данное сообщение.
		//Раскомментируйте если вы хотите чтобы выводилось данное сообщение.
		[nil,nil,rTitleText,format["Сбитый воздушный транспорт был найден выжившими!"], "PLAIN",10] call RE;

 

Чето не видать никаких крашей ваапще :verymad:

Изменено пользователем Karakurd (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Перезалил файл (Пофиксил ошибку) + дополнил гайд до полного состояния.
Просьба всех перекачать файл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всё работает. Раз уж пошла такая пьянка, может у тебя есть пофикшенные чёрные ящики?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всё работает. Раз уж пошла такая пьянка, может у тебя есть пофикшенные чёрные ящики?

а что с ними не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а что с ними не так?

Лута нету тоже :)

Нет, нету. Я использую 4 эвента автоматических вместо ящиков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Лута нету тоже :)

Нет, нету. Я использую 4 эвента автоматических вместо ящиков.

Странно, у меня все нормально с ящиками.

 

За  хеликраши спасибо добрый человек, вот бы еще сообщения сделать чтоб приходило только по радио (если есть рация) , а еще круче что б координаты места крушения тож по радио . тогда и ценность рации возрастет, и лут ценнее можно накидать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Видосик запиши, глянем. Или гайд отдельный с видосиком сделай. Я жду.

Заливаю

 

Лута нету тоже :)

Нет, нету. Я использую 4 эвента автоматических вместо ящиков.

Так рядом с ящиками и не должен спавниться лут. Вы ящик пробовали разбивать, а потом разламывать ломом?)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Заливаю

 

Так рядом с ящиками и не должен спавниться лут. Вы ящик пробовали разбивать, а потом разламывать ломом?)

 

Не дураки. С 1.0.4 еще знаем как работает эта фигня :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не дураки. С 1.0.4 еще знаем как работает эта фигня :)

ну хз. У меня все прекрасно работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ребят скиньте коордосы  для черно, буду признателен)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ребят скиньте коордосы  для черно, буду признателен)

Гайд сложно почитать. Они написаны в спойлере.

 

P.S. Убрал спойлер... Так думаю лучше будет...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах


2015/07/08, 23:07:03 "RUNNING EVENT: HeliCrashSpawner on [2015,7,8,23,7]"

2015/07/08, 23:07:03 Error in expression <iCrashArea;

_heliStart = _heliStart = [[5046.9678, 5943.2656],[6360.792, 658>

2015/07/08, 23:07:03 Error position: <= [[5046.9678, 5943.2656],[6360.792, 658>

2015/07/08, 23:07:03 Error Missing ;

2015/07/08, 23:07:03 File z\addons\dayz_server\modules\HeliCrashSpawner.sqf, line 23

2015/07/08, 23:07:03 Error in expression <iCrashArea;

_heliStart = _heliStart = [[5046.9678, 5943.2656],[6360.792, 658>

2015/07/08, 23:07:03 Error position: <= [[5046.9678, 5943.2656],[6360.792, 658>

2015/07/08, 23:07:03 Error Missing ;

2015/07/08, 23:07:03 File z\addons\dayz_server\modules\HeliCrashSpawner.sqf, line 23

2015/07/08, 23:07:03 Error in expression <ius = HeliCrashArea;

_heliStart = _heliStart = [[5046.9678, 5943.2656],[63>

2015/07/08, 23:07:03 Error position: <_heliStart = [[5046.9678, 5943.2656],[63>

2015/07/08, 23:07:03 Error Undefined variable in expression: _helistart

2015/07/08, 23:07:03 File z\addons\dayz_server\modules\HeliCrashSpawner.sqf, line 23

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не срабатывает ивент, почему-то, всё сделал по гайду, вертолетов вообще нет. В чем может быть беда?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не срабатывает ивент, почему-то, всё сделал по гайду, вертолетов вообще нет. В чем может быть беда?

РПТ смотрите, все работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: Suslikonator
      Доброго времени суток, господа, появилась задачка убрать с конкретных координат точку спавна хеликраша, где эти точки вообще настраиваются, в каком файле, ибо искал, но так и не нашел. И возможно ли подобное вообще.
    • Автор: ZizionarD
      Я всегда думал, что это крутое серверное событие, поэтому я обновил его для DayZ Epoch/Overpoch 1.0.6.2, дал ему некоторую оптимизацию кода и добавил некоторые новые функции.
       
      Обновления для DayZ Epoch/Overpoch 1.0.6.2:
      Обновлено под новые лут таблицы 1.0.6.2 Режим отладки включает или отключает журналы диагностики rpt сервера. Регулируемый тайм-аут миссии. Убрана трава вокруг лута Цикл маркеров JIP (заменяет waitUntil, используемый для обнаружения игроков). Автоматически определяет используемую карту и настраивает ее соответствующим образом. Настраиваемый черный список на карте. Этот мод работает с картами: Chernarus, Lingor, Sahrani, Panthera, Namalsk, Taviana, Napf, Sauerland, and Takistan.
       
      Рекомендуемое ПО:
      PBO Manager Notepad++ (x32) (x64) Установка:
      1. Скачать архив
      2. Распаковать dayz_server.pbo и поместить файл animated_crash_spawner.sqf в директорию dayz_server\modules
      3. Поскольку вы устанавливаете анимированный Crash Spawner, я рекомендую вам отключить DayZ Vanilla Crash Spawner. Для этого отредактируйте файл dayz_server\system\server_monitor.sqf в Notepad++
      Найдите эту строку:
      [] execVM "\z\addons\dayz_server\compile\server_spawnCrashSites.sqf"; и закомментируйте ее, чтобы это выглядело так:
      //[] execVM "\z\addons\dayz_server\compile\server_spawnCrashSites.sqf"; 4. Сохраните файл и повторно запакуйте dayz_server.pbo
      5. Переходим в директорию со своей миссией
      6. Откройте init.sqf в Notepad++
      Найти строку:
      EpochUseEvents = false; Измените его на true:
      EpochUseEvents = true; Найдите строку:
      EpochEvents = [["any","any","any","any",30,"crash_spawner"],["any","any","any","any",0,"crash_spawner"],["any","any","any","any",15,"supply_drop"]]; Замените ее на:
      EpochEvents = [["any","any","any","any",5,"animated_crash_spawner"],["any","any","any","any",35,"animated_crash_spawner"]]; Это будет спавнить анимированный HeliCrash каждые 30 минут, пока ваш сервер онлайн. Первый начнется после того, как сервер будет в сети в течение 5 минут. Примечание: старые события crash_spawner и supply_drop больше не используются в DayZ Epoch 1.0.6+, поэтому мы удаляем их из массива EpochEvents.
       
      Опционально:
      Вы можете настроить анимированный HeliCrash со следующим блоком определений и переменных.
      // Configs - You can adjust these #define DEBUG_MODE false // Adds diagnostic entries to the server rpt #define CRASH_TIMEOUT 1200 // The amount of time it takes for the mission to time out if no players show up #define SPAWN_CHANCE 100 // Percent chance of spawning a crash number between 0 - 100 #define GUARANTEED_LOOT 16 // Guaranteed Loot Spawns #define RANDOM_LOOT 8 // Random number of loot piles as well as the guaranteed ones #define SPAWN_FIRE true // Spawn Smoke/Fire at the helicrash #define FADE_FIRE false // Fade the Smoke/Fire overtime #define PREWAYPOINTS 2 // Amount of way points the heli flies to before crashing #define MIN_LOOT_RADIUS 4 // Minimum distance for loot to spawn from the crash site in meters #define MAX_LOOT_RADIUS 10 // Maximum distance for loot to spawn from the crash site in meters #define MARKER_RADIUS 400 // Radius for the marker #define SHOW_MARKER true // Show a marker on the map #define MARKER_NAME true // Add the crash name to the marker, SHOW_MARKER must be true #define LOWER_GRASS true // lowers the grass around the loot _crashDamage = 1; // Amount of damage the heli can take before crashing (between 0.1 and 1) Lower the number and the heli can take less damage before crashing 1 damage is fully destroyed and 0.1 something like a DMR could one shot the heli _exploRange = 200; // How far away from the predefined crash point should the heli start crashing  
      Вы также можете настроить черный список для каждой карты, если вы не хотите, чтобы HeliCrash спавнились в определенных областях карты.
      _blackList = []; Добавить координаты. Инструкция для черного списка находится в BIS_fnc_selectRandom
       
      Если вы используете This Crashsite Loot Table, каждый HeliCrash выбирает одну из групп рандомно. Если вы хотите использовать кастомный лут, то вы можете настроить лут в этом файле.
      Статья взята с сайта: epochmod.com
      Понравилась статья? Поставь +
    • Автор: Муха0в0Кедах
      Хеликраш нет на сервере вообще, подскажите как можно включить или что надо сделать чтобы они появились, спасибо заранее за помощь.
    • Автор: Alexandr116ru
      По сути, это всего лишь объединение двух скриптов в один. По мере сил и возможностей. Вероятно, тут всё грубо и далеко не идеально (ну не владею я такими навыками). Но скрипт работает 100% корректно.   Установка: 1. Создать файл с раширением ИМЯ_ФАЙЛА.sqf, скопировать в него содержимое кода:  
      private["_textPos","_rand_player","_playerpos","_randomLoot","_maxLootRadius","_playerPresent","_finder","_preWaypointPos","_startTime","_heliStart","_heliModel","_lootPos","_wp1","_wp2","_wp3","_landingzone","_aigroup","_wp","_helipilot","_crashwreck","_vel","_pos","_dir","_position","_num","_itemType","_CBLBase","_weights","_cntWeights","_index1","_index2","_crashName","_objectID","_marker_position","_marker","_mdot","_flyToPlayer","_dropPosition","_chute","_chutePos","_FlyingSupplyBox","_smoke","_var","_posATL","_SupplyBox","_mapLootPos"]; if ((count playableUnits) < 1) exitWith {diag_log("[ХЕЛИКРАШ ОТМЕНА]: Нет игроков на сервере");}; //СКРИПТ НЕ БУДЕТ ВЫПОЛНЯТЬСЯ, ЕСЛИ НА СЕРВЕРЕ НЕТ ИГРОКОВ _rand_player            = playableUnits call BIS_fnc_selectRandom; _playerpos                = [_rand_player] call FNC_GetPos; _heliModel                = ["Mi17_TK_EP1","Mi17_CDF","Mi17_Ins","Mi17_UN_CDF_EP1","Mi171Sh_CZ_EP1","AH6J_EP1","UH1H_TK_GUE_EP1","UH1H_TK_EP1","UH1Y","MH60S","UH60M_EP1","AH6X_EP1","MH6J_EP1","Mi17_Civilian","Mi17_medevac_Ins","Mi17_medevac_CDF","Mi17_medevac_RU","UH60M_MEV_EP1","BAF_Merlin_HC3_D","CH_47F_EP1","CH_47F_BAF","MV22","C130J"] call BIS_fnc_selectRandom; _heliStart                = [[1000.0,2.0],[3500.0,2.0],[5000.0,2.0],[7500.0,2.0],[9712.0,663.067],[12304.0,1175.07]] call BIS_fnc_selectRandom; //КООРДИНАТЫ, ОТКУДА БУДЕТ ВЫЛЕТАТЬ БОРТ. ДЛЯ ЧЕРНО _crashName                = getText (configFile >> "CfgVehicles" >> _heliModel >> "displayName"); _finder                    = ""; _randomLoot                = ["HeliCrash","Hospital","Military","MilitaryIndustrial","MilitarySpecial"] call BIS_fnc_selectRandom; //СПИСОК, ОТКУДА БУДЕТ БРАТЬСЯ ЛУТ ДЛЯ ПРИЗЕМЛИВШЕЙСЯ КОРОБКИ     //ЗДЕСЬ МОЖНО РАЗМЕСТИТЬ ОПОВЕЩЕНИЕ ИГРОКАМ О СТАРТЕ ИВЕНТА          _position = [getMarkerPos "center",0,5000,10,0,2000,0] call BIS_fnc_findSafePos;     diag_log(format["[ХЕЛИКРАШ НАЧАЛО]: %1 вылетел с позиции %2 к позиции %3!", _crashName,  str(_heliStart), str(_position)]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT          _startTime = time;     _crashwreck = createVehicle [_heliModel,_heliStart, [], 0, "FLY"];     _objectID = str(round(random 999999));     _crashwreck setVariable ["ObjectID", _objectID, true];     _crashwreck setVariable ["ObjectUID", _objectID, true];     PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_crashwreck];     waitUntil {(!isNull _crashwreck)};     _crashwreck setCombatMode "BLUE";     _crashwreck engineOn true;     _crashwreck flyInHeight 200; //ВЫСОТА ПОЛЁТА. ЕСЛИ НОВИЧОК, ЛУЧШЕ НЕ ТРОГАЙ. ИНАЧЕ БУДЕТ СБОИТЬ СБРОС КОРОБКИ. БОРТ БУДЕТ КРУЖИТЬ НАД ИГРОКОМ, ТЕМ САМЫМ, ДЕМОРАЛИЗУЯ И НАРУШАЯ ЕГО ПСИХИКУ     _crashwreck forceSpeed 150;     _crashwreck setspeedmode "NORMAL";          _landingzone = createVehicle ["HeliHEmpty", [_position select 0, _position select 1,0], [], 0, "CAN_COLLIDE"];     _aigroup = creategroup civilian;     _helipilot = _aigroup createUnit ["SurvivorW2_DZ",getPos _crashwreck,[],0,"FORM"];     _helipilot setCombatMode "BLUE";     _helipilot moveindriver _crashwreck;     _helipilot assignAsDriver _crashwreck;     uiSleep 0.5;          if ((isPlayer _rand_player) && (alive _rand_player)) then { //ЕСЛИ ВЫБРАННАЯ ЦЕЛЬ - ИГРОК И ЕСЛИ ИГРОК ЖИВ, ТО ПОЛЕТИТ НА ЕГО ПОЗИЦИЮ         _wp1 = _aigroup addWaypoint [[(_playerpos select 0),(_playerpos select 1),200],0];         _wp1 setWaypointType "MOVE";         _wp1 setWaypointBehaviour "CARELESS";         _flyToPlayer = true;         for "_x" from 1 to 5 do         {             _preWaypointPos = [getMarkerPos "center", 0, 5000, 10, 0, 2000, 0] call BIS_fnc_findSafePos;             _wp = _aigroup addWaypoint [_preWaypointPos, 0];             _wp setWaypointType "MOVE";             _wp setWaypointBehaviour "CARELESS";         };         diag_log(format["[ХЕЛИКРАШ]: %1 полетел к игроку %2", _crashName, (name _rand_player)]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT     } else {  //ЕСЛИ ПОЛЕТЕЛ НЕ К ИГРОКУ, БУДЕТ ПРОСТО ЛЕТАТЬ ПО ТОЧКАМ, ПОКА НЕ СОБЬЮТ ИЛИ ПОКА НЕ ДОЛЕТИТ ДО ФИНАЛЬНОЙ         for "_x" from 1 to 10 do         {             _preWaypointPos = [getMarkerPos "center", 0, 5000, 10, 0, 2000, 0] call BIS_fnc_findSafePos;             _wp = _aigroup addWaypoint [_preWaypointPos, 0];             _wp setWaypointType "MOVE";             _wp setWaypointBehaviour "CARELESS";         };         diag_log(format["[ХЕЛИКРАШ]: %1 полетел кружить по карте", _crashName]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT     };     _dropPosition = [(_playerpos select 0),(_playerpos select 1),200];     if (_flyToPlayer) then {  //ЕСЛИ ИЗНАЧАЛЬНО ЛЕТЕЛ К ИГРОКУ - НИЖЕ ОЖИДАНИЕ, КОГДА ПРИБЛИЗИТСЯ К ЕГО ПОЗИЦИИ. НУ И ДРУГИЕ ЧРЕЗВЫЧАЙНЫЕ СИТУАЦИИ. ЧТОБЫ ПРОДОЛЖИЛОСЬ ВЫПОЛНЕНИЕ СКРИПТА         waitUntil {(_crashwreck distance _dropPosition < 50) || !alive _crashwreck || (getPosATL _crashwreck select 2) < 5 || (damage _crashwreck) >= 1};         diag_log(format["[ХЕЛИКРАШ]: %1 долетел до игрока или был сбит", _crashName]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT     };     if ((_flyToPlayer) && (alive _crashwreck)) then { //ЕСЛИ ИЗНАЧАЛЬНО ЛЕТЕЛ К ИГРОКУ И НЕ СБИЛИ, ТО СБРОСИТ КОРОБКУ ПОЧТИ НА ГОЛОВУ БЕДНОЙ КЕПКИ, В ДРУГОМ СЛУЧАЕ, КУСОК СКРИПТА ПРОПУСКАЕТСЯ И СБРОСА НЕ БУДЕТ         diag_log(format["[ХЕЛИКРАШ]: %1 сбросил груз. Значит долетел", _crashName]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT         _aircraftpos = [_crashwreck] call FNC_GetPos;         _chute = createVehicle ["ParachuteMediumEast", _aircraftpos, [], 0, "FLY"];         _chutePos = getPos _chute;         _FlyingSupplyBox = createVehicle ["Supply_Crate_DZE", _chutePos, [], 0, "FLY"];         _FlyingSupplyBox attachTo [_chute, [0,0,0]];         _FlyingSupplyBox setVariable ["permaLoot",true];         _FlyingSupplyBox setVariable ["ObjectID", ""];         _FlyingSupplyBox addEventHandler ["handleDamage", {false}];         _chute setVariable ["ObjectID", ""];         _smoke = "SmokeShellGreen" createVehicle (getPos _FlyingSupplyBox);         _smoke attachTo [_FlyingSupplyBox, [0,0,1]];         _var = floor((random 2) + 1);         while {getPos _FlyingSupplyBox select 2 > 4} do         {             _chute SetVelocity [0,0,-5];             uiSleep 0.1;         };         detach _FlyingSupplyBox;         while {getPos _FlyingSupplyBox select 2 > 0} do {             _FlyingSupplyBox setPos [getPos _FlyingSupplyBox select 0, getPos _FlyingSupplyBox select 1, (getPos _FlyingSupplyBox select 2) - .25]         };         deleteVehicle _chute;         _posATL = getPosATL _FlyingSupplyBox;         _mapLootPos = mapGridPosition getPos _FlyingSupplyBox;         deleteVehicle _FlyingSupplyBox;         _SupplyBox = "Supply_Crate_DZE" createVehicle _posATL;         _SupplyBox setVariable ["permaLoot",true];         _SupplyBox enableSimulation false;         if (DZE_MissionLootTable) then {             dgx_itemTypes = [] + getArray (missionConfigFile >> "CfgBuildingLoot" >> _randomLoot >> "lootType");         } else {             dgx_itemTypes = [] + getArray (configFile >> "CfgBuildingLoot" >> _randomLoot >> "lootType");         };         _CBLBase = dayz_CBLBase find (toLower(_randomLoot));         _weights = dayz_CBLChances select _CBLBase;         _cntWeights = count _weights;         _num = (round(random 12)) + 12;         for "_x" from 1 to _num do {             _maxLootRadius = (random 4) + 4;             _lootPos = [_posATL, _maxLootRadius, random 360] call BIS_fnc_relPos;             _index1 = floor(random _cntWeights);             _index2 = _weights select _index1;             _itemType = dgx_itemTypes select _index2;             [_itemType select 0, _itemType select 1, _lootPos, 5] call spawn_loot;             diag_log(format["[ХЕЛИКРАШ СБРОС КОРОБКИ]: %1 сбросил груз из %2 на позиции @%3", _crashName, _randomLoot, _mapLootPos]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT         };         _nearby = _dropPosition nearObjects ["ReammoBox", sizeOf("Supply_Crate_DZE")];         {             _x setVariable ["permaLoot",true];         } count _nearBy;         //_textPos = format ["Воздушный транспорт сбросил груз на координтах %1.", _mapLootPos];         //RemoteMessage = ["radio",_textPos];         //publicVariable "RemoteMessage";         //ЗДЕСЬ МОЖНО РАЗМЕСТИТЬ ОПОВЕЩЕНИЕ ИГРОКАМ О СБРОСЕ ГРУЗА, В КАЧЕСТВЕ ПРИМЕРА, ПРИВЕДЕНО СООБЩЕНИЕ, ВЫВОДЯЩЕЕСЯ ПРИ ПОМОЩИ REMOTE MESSAGE ИЗ МОДА WAI 2.2.0         //_mapLootPos - ПОКАЖЕТ КВАДРАТ, В КОТОРОМ СБРОШЕНА КОРОБКА.          };     _wp2 = _aigroup addWaypoint [position _landingzone, 0];     _wp2 setWaypointType "MOVE";     _wp2 setWaypointBehaviour "CARELESS";     _wp2 setWaypointStatements ["true", "_crashwreck setdamage 1;"];          _wp3 = _aigroup addWaypoint [[0,16000,0], 0];     _wp3 setWaypointType "CYCLE";     _wp3 setWaypointBehaviour "CARELESS";          waitUntil {(_crashwreck distance _position) <= 1000 || !alive _crashwreck || (getPosATL _crashwreck select 2) < 5 || (damage _crashwreck) >= 1};          _crashwreck flyInHeight 100;     _crashwreck forceSpeed 100;     _crashwreck setspeedmode "NORMAL";          waitUntil {(_crashwreck distance _position) <= 500 || !alive _crashwreck || (getPosATL _crashwreck select 2) < 5 || (damage _crashwreck) >= 1};     deletevehicle _helipilot;          _crashwreck setHit ["mala vrtule", 1];     _ran15 = random 15;     _crashwreck setVelocity [_ran15,_ran15,-25];     _crashwreck setdamage .9;     waitUntil{uiSleep 1; getpos _crashwreck select 2 <= 30};     _helipilot setdamage 1;     _crashwreck setVelocity [_ran15,_ran15,-20];     waitUntil{uiSleep 1; getpos _crashwreck select 2 <= 10};     _crashwreck setdamage 1;          waitUntil{uiSleep 1; getpos _crashwreck select 2 <= 5};          diag_log(format["[ХЕЛИКРАШ ПАДЕНИЕ]: %1 упал на позиции %2!", _crashName, getpos _crashwreck]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT          _pos = [getpos _crashwreck select 0, getpos _crashwreck select 1,0];     _dir = getdir _crashwreck;     deletevehicle _landingzone;          _isWater = surfaceIsWater [getpos _crashwreck select 0, getpos _crashwreck select 1];     if(_isWater) then {     //ЗДЕСЬ МОЖНО РАЗМЕСТИТЬ ОПОВЕЩЕНИЕ, ЧТО ВОЗДУШНЫЙ ТРАНСПОРТ УПАЛ В ВОДУ. И НА ЭТОМ СКРИПТ ЗАКОНЧИТ СВОЮ РАБОТУ.     } else { //ЕСЛИ ВСЁ ХОРОШО, ТО НА МЕСТЕ КРУШЕНИЯ СПАВНИТСЯ ЛУТ ИЗ ТАБЛИЦЫ "HeliCrash". ЕСЛИ ХОЧЕТСЯ РАНДОМА, МОЖНО НИЖЕ ВСЕ ТРИ "HeliCrash" ЗАМЕНИТЬ НА _randomLoot         _num = round(random 12) + 12;         if (DZE_MissionLootTable) then {             dgx_itemTypes = [] + getArray(missionConfigFile >> "CfgBuildingLoot" >> "HeliCrash" >> "lootType");         } else {             dgx_itemTypes = [] + getArray(configFile >> "CfgBuildingLoot" >> "HeliCrash" >> "lootType");         };         _CBLBase = dayz_CBLBase find(toLower("HeliCrash"));         _weights = dayz_CBLChances select _CBLBase;         _cntWeights = count _weights;         for "_x" from 1 to _num do         {             _maxLootRadius     = (random 20) + 10;             _lootPos = [_pos, _maxLootRadius, random 360] call BIS_fnc_relPos;             _index1 = floor(random _cntWeights);             _index2 = _weights select _index1;             _itemType = dgx_itemTypes select _index2;             [_itemType select 0, _itemType select 1, _lootPos, 5] call spawn_loot;                          diag_log(format["[ХЕЛИКРАШ СПАВН ЛУТА]: %1 упал на позиции %2", _crashName, _lootPos]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT                          _nearby = _pos nearObjects ["ReammoBox", 20];             {                 _x setVariable ["permaLoot",true];             } forEach _nearBy;         };                  //ЗДЕСЬ МОЖНО РАЗМЕСТИТЬ ОПОВЕЩЕНИЕ ИГРОКАМ, О ТОМ, ЧТО БОРТ УПАЛ. ДАЛЕЕ ПОЯВИТСЯ МАРКЕР, НО ОСТАТКИ СГОРЕВШЕГО БОРТА, БУДУТ РАСПОЛАГАТЬСЯ НЕ ТОЧНО ПО ЦЕНТРУ МАРКЕРА, ИБО ПУСТЬ ИЩУТ         _marker_position = [_pos,0,400,0,1,2000,0] call BIS_fnc_findSafePos;         waitUntil         {             _marker = createMarker [ format ["loot_event_marker_%1", _startTime], _marker_position];             _marker setMarkerColor "ColorRed";             _marker setMarkerShape "ELLIPSE";             _marker setMarkerAlpha 0.5;             _marker setMarkerSize [400,400];             _marker setMarkerText _crashName;             _mdot = createMarker [format ["dot_%1", _startTime], _marker_position];             _mdot setMarkerColor "ColorBlack";             _mdot setMarkerType "hd_destroy";             _mdot setMarkerText (format["Место крушения: %1", _crashName]); //ТЕКСТ КОТОРЫЙ БУДЕТ ОТОБРАЖАТЬСЯ НА МАРКЕРЕ, С НАЗВАНИЕМ УПАВШЕГО БОРТА             uiSleep 10;             deleteMarker _marker;             deleteMarker _mdot;             _playerPresent = false;             {                 if((isPlayer _x) && (_x distance _pos <= 25)) then {                     _playerPresent = true;                     _finder = name _x;                 };             } foreach playableUnits;             (_playerPresent)         };         deleteMarker _marker; //НЕ УВЕРЕН, НАДО ЛИ ДУБЛИРОВАТЬ УДАЛЕНИЕ МАРКЕРОВ, ИБО НЕ СПЕЦ. НЕ ЗНАЮ. НО НЕ МЕШАЕТ (ЭТА СТРОКА И НИЖЕ).         deleteMarker _mdot;         //МАРКЕР БУДЕТ ПЕРЕСОЗДАВАТЬСЯ КАЖДЫЕ 10 СЕКУНД, ЧТОБЫ ВСЕ ИГРОКИ ЕГО ВИДЕЛИ, ДАЖЕ ПОСЛЕ ПЕРЕЗАХОДА. БУДЕТ ОТОБРАЖАТЬСЯ ДО ТЕХ ПОР, ПОКА К СГОРЕВШЕМУ БОРТУ НЕ ПОДОЙДЁТ ИГРОК         //ЗДЕСЬ МОЖНО РАЗМЕСТИТЬ ОПОВЕЩЕНИЕ ИГРОКАМ, О ТОМ ЧТО ХЕЛИКРАШ НАЙДЕН         diag_log(format["[ХЕЛИКРАШ КОНЕЦ]: Обнаружен игроком %1. Ивент выполнен!" , _finder]); //ЭТУ СТРОКУ МОЖНО УДАЛИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ЛОГГИРОВАНИЕ В СЕРВЕРНЫЙ RPT     };    
      2. Закинуть файл ИМЯ_ФАЙЛА.sqf в папку @DayZ_Epoch_Server\addons\dayz_server\modules\ 3. Добавить в init.sqf в EpochEvents, внутри [], код ["any","any","any","any",30,"ИМЯ_ФАЙЛА"], не забыв поставить запятую после предыдущего ивента. Пример: EpochEvents = [["any","any","any","any",10,"другой_ивент"],["any","any","any","any",30,"ИМЯ_ФАЙЛА"]];   Что происходит и как это работает: - По заданному в init.sqf промежутку времени, вылетает вертолёт/самолёт; - Если есть игроки и выбранная цель из всех юнитов игрок, то воздушный транспорт направляется к его позиции; - Долетев до позиции игрока, "сбрасывает" ящик на парашюте и продолжает свой маршрут по точкам; - После приземления, вокруг ящика спавнится лут. Да и сам ящик можно разобрать; - Если изначально цель не игрок, то борт сразу полетит кружить по карте; - Отлетав определённое количество точек, пойдёт на финальную, разобьётся и вокруг него отспавнится лут, с отображением информации на карте маркером; - Маркер будет отображаться до тех пор, пока кто либо из игроков не подойдёт к крашу; В принципе, функционал двух скриптов в одном, как оно и было, ничего экстраординарного.   Я лишь внёс пару проверок и поправок: - Если игроков нет на сервере, то работа скрипта прекращается; - Скрипт отработает всегда (в оригинале, только если выбранная цель - игрок). В моём случае, он стартанёт всегда, но если выбранная цель не игрок, то просто отработает, как анимированный хеликраш, без сброса груза; - Маркер будет отображаться даже после перезахода игрока на сервер. Пересоздаётся раз в 10 секунд. Увы, более ювелирных способов не нашёл. В миссиях WAI, маркеры вообще раз в секунду пересоздаются. Тут работает по тому же принципу; - Если борт сбить, на любом этапе, он упадёт и лут отспавнится вокруг него, с отображением маркера; - Читайте комментарии в скрипте, если хотите добавить оповещения игрокам о старте, сбросе груза, падении борта.
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.