Need help?
Create a topic in the appropriate section
Don't write everything in the chat!Take a look at the marketplace
There you can buy
everything related to game serversDon't want a ban?
Please read our rules
Don't disturb the order!Sell or buy?
Use services of the guarantor
We will make your deal safe



-
Similar Content
-
By
Suslikonator
Доброго времени суток, господа, появилась задачка убрать с конкретных координат точку спавна хеликраша, где эти точки вообще настраиваются, в каком файле, ибо искал, но так и не нашел. И возможно ли подобное вообще.
-
By 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
Понравилась статья? Поставь +
-
By Муха0в0Кедах
Хеликраш нет на сервере вообще, подскажите как можно включить или что надо сделать чтобы они появились, спасибо заранее за помощь.
-
By 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, маркеры вообще раз в секунду пересоздаются. Тут работает по тому же принципу; - Если борт сбить, на любом этапе, он упадёт и лут отспавнится вокруг него, с отображением маркера; - Читайте комментарии в скрипте, если хотите добавить оповещения игрокам о старте, сбросе груза, падении борта.
-
-
Our picks