Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
mafan9

[Гайд] Установка/Настройка плагина DynMap

Recommended Posts

Приветствую, сейчас вы узнаете как настроить плагин DynMap  :wink:

Первым делом конечно же нам нужно его скачать

 

Далее бросаем его в папку Plugins, за тем запускаем наш сервер, ждём пока прогрузится и​
выключаем, установка завершена!!! =)​
Переходим к настройке:​
1) Идём в папку Ваш сервер/plugins/DynMap​
2) Ищем файл "configuration.txt" и открываем.​
3) Находим строку:
cyrillic-support: false

Меняем на:

cyrillic-support: true

(Это нужно сделать для того, что бы нормально отображались Русские символы)

4) Далее ищем строки:

#scrollback: 100
#visiblelines: 10

Раскомментируем их, то есть убираем "#"

Получиться:

scrollback: 100
visiblelines: 10

5) Потом ищем строку:

webserver-port:

Меняем на желаемый порт (Внимание, ни когда не ставьте порт соответствующий порту сервера!!! Пример: ip сервера - 0.0.0.0:25565, не ставьте 25565 на вебсервер - порт (Будут конфликты и нечего не будет работать!)

6) На DynMap нельзя банить кого-то! В таком случае я отключил чат и советую всем!
Вот инструкция: ищем
allowwebchat: true

Меняем на:

allowwebchat: false
7) В панели есть слой "Cave" он отображает пещеры карты, что бы его удалить:
Ищем файл: plugins/dynmap/templates/normal-hires.txt
Копируем и создаем такой же файл с названием "custom-normal-hires.txt"
Потом заходим в "custom-normal-hires.txt"
Ищем строки:
- class: org.dynmap.hdmap.HDMap
name: cave
title: "Cave"
prefix: ct
perspective: iso_SE_60_lowres
shader: cave
lighting: default
mapzoomin: 3

И удаляем их

8) Задаётесь вопросом "Как скрыть игрока на карте ?"
Ответ: в чат введите команду "/dynmap hide Имя Игрока" Тем вы скроете игрока на карте.
9) Задаётесь вопросом "Как же скрыть всех игроков кроме определённых?"
Ответ: В файле конфигураций (configuration.txt) ищем строчку "display-whitelist:"
И просто ставим "True"
Но как же отобразить определённых игроков, спросите вы? Легко! Просто надо в чат ввести великолепную команду: "/dynmap show Имя Игрока"
10) Если на вашем сервере есть моды, ищите строчку с началом "ic2" после этой строки будут функции для включения модов в DynMap (Перед функцией уберите "#")
11) Если карта плохо прогружается введите в чат /dynmap fullrender
 
Источник: Rubukkit.org
Понравился гайд? Не поленись и поставь +

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Edited by mafan9 (see edit history)

Share this post


Link to post
Share on other sites



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Sovest2
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Подготовка
      Для начала нам понадобится подключить кастомный player_death.sqf в compiles.sqf
      Делается это следующим образом:
      В compiles.sqf заменить строку 
      player_death = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_death.sqf"; на
      player_death = compile preprocessFileLineNumbers "*ВАШ ПУТЬ*\player_death.sqf";  
      Если у вас стоит инфистар,то необходимо заменить строку в AH.sqf
      _death = compile preprocessFileLineNumbers '\z\addons\dayz_code\compile\player_death.sqf'; на
      _death = compile preprocessFileLineNumbers '*ВАШ ПУТЬ*\player_death.sqf';  
      В вашем кастомном player_death.sqf необходимо заменить 
      _array = _this; if (count _array > 0) then { _source = _array select 0; _method = _array select 1; if ((!isNull _source) && (_source != player)) then { _canHitFree = player getVariable ["freeTarget",false]; _isBandit = (player getVariable["humanity",0]) <= -2000; _punishment = _canHitFree || _isBandit; //if u are bandit || start first - player will not recieve humanity drop _humanityHit = 0; if (!_punishment) then { //i'm "not guilty" - kill me && be punished _myKills = ((player getVariable ["humanKills",0]) / 30) * 1000; _humanityHit = -(2000 - _myKills); _kills = _source getVariable ["humanKills",0]; _source setVariable ["humanKills",(_kills + 1),true]; PVDZE_send = [_source,"Humanity",[_source,_humanityHit,300]]; publicVariableServer "PVDZE_send"; } else { //i'm "guilty" - kill me as bandit _killsV = _source getVariable ["banditKills",0]; _source setVariable ["banditKills",(_killsV + 1),true]; }; }; _body setVariable ["deathType",_method,true]; }; на
      _array = _this; if (count _array > 0) then { _source = _array select 0; _method = _array select 1; if ((!isNull _source) && (_source != player)) then { [player,_source]execVM "*ВАШ ПУТЬ*\humanityChange.sqf"; [player,_source]execVM "*ВАШ ПУТЬ*\kill_msg_send.sqf"; }; _body setVariable ["deathType",_method,true]; }; Отображение ника убийцы(Kill message)
       
      Создаем файл и закидываем в миссию файл kill_msg_send.sqf
      С содержанием
      private ["_victim","_killer","_vehicle","_weapon","_pic"]; _victim = _this select 0; _killer = _this select 1; _killerName = name _killer; _victimName = name _victim; _vehicle = typeOf (vehicle _killer); _weapon = currentWeapon _killer; if ((getText (configFile >> "CfgVehicles" >> _vehicle >> "vehicleClass")) in ["CarW","Car","CarD","Armored","Ship","Support","Air","ArmouredW","ArmouredD","SupportWoodland_ACR","AllVehicles"]) then { _pic = gettext(configFile >> 'CfgVehicles' >> _vehicle >> 'picture'); } else { _pic = gettext(configFile >> 'cfgWeapons' >> _weapon >> 'picture'); }; _kill_txt = format ["<t align='left' size='0.5'>%1 </t>",_victimName]; _kill_txt = _kill_txt + format ["<img size='1.0' align='left' image='%1'/>",_pic]; _kill_txt = _kill_txt + format ["<t align='left' size='0.5'> %1 </t>",_killerName]; PVDZE_send = [player,"kill_message",[_kill_txt]]; publicVariableServer "PVDZE_send";  
      Далее,нам необходимо отредактировать файл server_sendToClient.sqf ,которой находится в директории сервера
      И добавить после
      case "tagFriendly": { PVDZE_plr_FriendRQ = _arraytosend; _owner publicVariableClient "PVDZE_plr_FriendRQ"; }; Это
      case "kill_message": { custom_kill_message_show = _arraytosend; publicVariable "custom_kill_message_show"; }; Теперь необходимо создать файл kill_msg_show.sqf в папке с вашей миссией
      с содержимым
      private ["_pos","_i"]; arr_kill = ["","","","","",""]; fnc_kill_message = { private ["_finaltxt"]; _finaltxt = _this select 0; for[{_i = 0},{(_i<6)},{_i = _i +1}] do { if((arr_kill select _i) == "") then { arr_kill set [_i,_finaltxt]; [_i] execVM "*ВАШ ПУТЬ*\kill_msg_delete.sqf"; _i = count(arr_kill); }; }; }; "custom_kill_message_show" addPublicVariableEventHandler {(_this select 1) call fnc_kill_message;}; while {true} do { _pos = 0.01; _layout = 1001; { [_x,[safezoneX + 0.01 * safezoneW,2.0],[safezoneY + _pos * safezoneH,0.3],5,0.5,0,_layout] spawn BIS_fnc_dynamicText; _pos = _pos + 0.021; _layout = _layout + 1; } ForEach arr_kill; sleep 1; }; Создать файл kill_msg_delete.sqf с 
      private["_pos"]; _pos = _this select 0; sleep 10; arr_kill set [_pos,""];  
      И вставить в init.sqf после строки
      _playerMonitor = [] execVM "custom\player_monitor.sqf"; строку
      execVM "*ВАШ ПУТЬ*\kill_msg_show.sqf"; Осталось только добавить
      custom_kill_message_show В первую строку файла publicvariable.txt
       
      Все,отображение ника убийцы готово!
       
       
      Изменение человечности за убийство Бандита\Героя
      создать файл humanityChange.sqf с содержимым
      private ["_victim","_killer","_myKills","_humanity","_killerHumanity","_isKillerBandit","_isBandit","_humanityHit","_kills","_killerGunner"]; _victim = _this select 0; _killer = _this select 1; _humanity = _victim getVariable["humanity",0]; _killerHumanity = _killer getVariable["humanity",0]; _isKillerBandit = (_killerHumanity) < 0 ; _isBandit = (_humanity) < 0; _humanityHit = 0; _myKills = 0; _killerVehicle = vehicle _killer; if(((!_isBandit) && _isKillerBandit) || (_isBandit && (!_isKillerBandit))) then { _myKills = round((_humanity) / 10); }; if(!_isBandit) then { _myKills = (_myKills + 200); _kills = _killer getVariable ["humanKills",0]; _killer setVariable ["humanKills",(_kills + 1),true]; } else { _myKills = (_myKills - 200); _kills = _killer getVariable ["banditKills",0]; _killer setVariable ["banditKills",(_kills + 1),true]; }; _killerGunner = gunner _killerVehicle; if(!isNil"_sourceGunner") then { _killer = _killerGunner; }; _humanityHit = _myKills * (-1); PVDZE_send = [_killer,"Humanity",[_killer,_humanityHit,300]]; publicVariableServer "PVDZE_send"; Изменение Человечности готово!
       
      Плюсы Всего этого:
      Отображение ника убийцы теперь работает всегда и корректно.(Если убивают с техники или с одного выстрела).
    • By cjanton
      Плагин позволяет выдавать игрокам VIP-статус навсегда или на определенный срок.
      Плагин очень гибкий и удобный в настройке. Плагин может работать как SQL так и с MySQL базой.
      В архиве только ядро меню, Модули нужно ставить отдельно. 
       
      Установка:
      1) Распаковать архив и раскидать файлы по папкам на сервере.
      Расположение файлов и краткое описанние
      2) Если хотите использовать MySQL базу, необходимо в databases.cfg прописать:
      "vip" { "driver" "mysql" "host" "ip" // ip сервера где находится ваш mysql "database" "vip" // название базы данных "user" "root" // имя пользователя базы данных "pass" "pass" // пароль для этого пользователя } При использовании SQLite базы она будет храниться здесь: addons/sourcemod/data/sqlite/vip.sq3
      3) Настроить конфиг cfg/vip/VIP_Core.cfg(будет создан автоматически после первого запуска)
      4) Установить необходимые модули(будут добавлены чучуть позднее)
      5) Для тех кто любит поковырять представлена глубокая настройка и конфигурация:
      Настройка информации
      Сортировка меню
       
      Настройка groups.ini
       
      Сортировка пунктов в Админ меню
      Команды:
      <параметр> - обязательный параметр.
      [параметр] - необязательный параметр.
      sm_refresh_vips - Перезагружает список VIP-игроков.
      sm_reload_vip_cfg - Перезагружает настройки VIP (обновляет группы и выполняет sm_refresh_vips).
      sm_delvip <steam_id> - удаляет VIP-игрока
      sm_addvip <identity type> <name|#userid|identity> [time] [group] - добавляет VIP-игрока.(Пример sm_addvip file_delete 10 1)
      <identity type> это метод идентификации: steam, ip, name.
      <name|#userid|identity> это идентификатор ник или юзер айди если игрок на сервере, иначе либо стим/ип/ник.
      [time] - время в единицах указанных в конфиге VIP_Core.cfg (Смотрите внимательно sm_vip_time_mode)
      [group] - VIP-группа.
       
      Модули для данного ядра будут добавлены в сообщениях ниже этого

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • By GhostDZ
      Всем хорошим людям добрый день.
       
      Предисловие:
      Очень давно я удалил этот гайд с этого сайта. ВОт решил восстановить.
      Скрипты P4L, SnapPro и BuiltVectors обновились, теперь собрать их вместе сложнее чем раньше но все еще возможно.
       
      Это более старая но проверенная временем версия которая содержит солянку из Plot4Life, SnapPro, BuiltVectors и Admin Build.
       
      1. Качаем архив прикрепленный к теме.
      2. Папку custom забрасываем в корень миссии
      3. Открываем файл init.sqf и после:
      call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; //Compile regular functions  
       
      вставьте:
      call compile preprocessFileLineNumbers "custom\compiles1.sqf"; ну или если вы прошаренный пользователь, можете перенести все значения из моего файла в свой кастомный compiles.
      Прошу обратить внимание на тот момент что если у вас в миссии уже есть такие файлы то их нужно совместить, тут вам поможет плагин compare для Notepad++.
      4. Все в том же init.sqf ниже:
      DZE_BuildOnRoads Вставьте:
      DZE_noRotate = []; //То что нельзя вращать. Ex: DZE_noRotate = ["VaultStorageLocked"] DZE_curPitch = 45; //Стартовый угол наклона. Доступны только эти цифры1, 5, 45, 90. WG_adminBuild = ["","","",""]; //Админские SteamID 5. Идем в server_functions.sqf и находим там:
      dayz_objectUID2 = { тут весь код функции }; заменяем всю функцию на:
      dayz_objectUID2 = { private["_position","_dir","_key"]; if((count _this) == 2) then{ _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _key = _key + str(round(_dir)); }else{ if((count _this) == 3) then{ if(typename (_this select 2) == "ARRAY")then{ _vector = _this select 2; if(count _vector == 2)then{ if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{ _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _vecCnt = 0; { _set = _x; { _vecCnt = _vecCnt + (round (_x * 100)) } foreach _set; } foreach _vector; if(_vecCnt < 0)then{ _vecCnt = ((_vecCnt * -1) * 3); }; _key = _key + str(_vecCnt); }else{ _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _key = _key + str(round(_dir)); }; }else{ _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _key = _key + str(round(_dir)); }; }else{ _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _key = _key + str(round(_dir)); }; }else{ if((count _this) == 4) then{ if(typename (_this select 3) == "ARRAY")then{ _vector = _this select 3; if(count _vector == 2)then{ if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{ _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _vecCnt = 0; { _set = _x; { _vecCnt = _vecCnt + (round (_x * 100)) } foreach _set; } foreach _vector; if(_vecCnt < 0)then{ _vecCnt = ((_vecCnt * -1) * 3); }; _key = _key + str(_vecCnt); }else{ _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _key = _key + str(round(_dir)); }; }else{ _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _key = _key + str(round(_dir)); }; }else{ if(typename (_this select 2) == "ARRAY")then{ _vector = _this select 2; if(count _vector == 2)then{ if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{ _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _vecCnt = 0; { _set = _x; { _vecCnt = _vecCnt + (round (_x * 100)) } foreach _set; } foreach _vector; if(_vecCnt < 0)then{ _vecCnt = ((_vecCnt * -1) * 3); }; _key = _key + str(_vecCnt); }else{ _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _key = _key + str(round(_dir)); }; }else{ _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _key = _key + str(round(_dir)); }; }else{ _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _key = _key + str(round(_dir)); }; }; }else{ _dir = _this select 0; _key = ""; _position = _this select 1; { _x = _x * 10; if ( _x < 0 ) then { _x = _x * -10 }; _key = _key + str(round(_x)); } count _position; _key = _key + str(round(_dir)); }; }; }; _key }; 6. Идем в server_monitor.sqf и находим там:
      // # NOW SPAWN OBJECTS # тут много кода // # END SPAWN OBJECTS # все что между этими строками заменяем на:
      // # NOW SPAWN OBJECTS # _totalvehicles = 0; { _idKey = _x select 1; _type = _x select 2; _ownerID = _x select 3; _worldspace = _x select 4; _intentory = _x select 5; _hitPoints = _x select 6; _fuel = _x select 7; _damage = _x select 8; _dir = 0; _pos = [0,0,0]; _wsDone = false; if (count _worldspace >= 2) then { if ((typeName (_worldspace select 0)) == "STRING") then { _worldspace set [0, call compile (_worldspace select 0)]; _worldspace set [1, call compile (_worldspace select 1)]; }; _dir = _worldspace select 0; if (count (_worldspace select 1) == 3) then { _pos = _worldspace select 1; _wsDone = true; } }; if (!_wsDone) then { if (count _worldspace >= 1) then { _dir = _worldspace select 0; }; _pos = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos; if (count _pos < 3) then { _pos = [_pos select 0,_pos select 1,0]; }; diag_log ("MOVED OBJ: " + str(_idKey) + " of class " + _type + " to pos: " + str(_pos)); }; _vector = [[0,0,0],[0,0,0]]; _vecExists = false; _ownerPUID = "0"; if (count _worldspace >= 3) then{ if(count _worldspace == 3) then{ if(typename (_worldspace select 2) == "STRING")then{ _ownerPUID = _worldspace select 2; }else{ if(typename (_worldspace select 2) == "ARRAY")then{ _vector = _worldspace select 2; if(count _vector == 2)then{ if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{ _vecExists = true; }; }; }; }; }else{ //Was not 3 elements, so check if 4 or more if(count _worldspace == 4) then{ if(typename (_worldspace select 3) == "STRING")then{ _ownerPUID = _worldspace select 3; }else{ if(typename (_worldspace select 2) == "STRING")then{ _ownerPUID = _worldspace select 2; }; }; if(typename (_worldspace select 2) == "ARRAY")then{ _vector = _worldspace select 2; if(count _vector == 2)then{ if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{ _vecExists = true; }; }; }else{ if(typename (_worldspace select 3) == "ARRAY")then{ _vector = _worldspace select 3; if(count _vector == 2)then{ if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{ _vecExists = true; }; }; }; }; }else{ //More than 3 or 4 elements found //Might add a search for the vector, ownerPUID will equal 0 }; }; }; // diag_log format["Server_monitor: [ObjectID = %1] [ClassID = %2] [_ownerPUID = %3]", _idKey, _type, _ownerPUID]; if (_damage < 1) then { //diag_log format["OBJ: %1 - %2", _idKey,_type]; //Create it _object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"]; _object setVariable ["lastUpdate",time]; _object setVariable ["ObjectID", _idKey, true]; _object setVariable ["OwnerPUID", _ownerPUID, true]; _lockable = 0; if(isNumber (configFile >> "CfgVehicles" >> _type >> "lockable")) then { _lockable = getNumber(configFile >> "CfgVehicles" >> _type >> "lockable"); }; // fix for leading zero issues on safe codes after restart if (_lockable == 4) then { _codeCount = (count (toArray _ownerID)); if(_codeCount == 3) then { _ownerID = format["0%1", _ownerID]; }; if(_codeCount == 2) then { _ownerID = format["00%1", _ownerID]; }; if(_codeCount == 1) then { _ownerID = format["000%1", _ownerID]; }; }; if (_lockable == 3) then { _codeCount = (count (toArray _ownerID)); if(_codeCount == 2) then { _ownerID = format["0%1", _ownerID]; }; if(_codeCount == 1) then { _ownerID = format["00%1", _ownerID]; }; }; _object setVariable ["CharacterID", _ownerID, true]; clearWeaponCargoGlobal _object; clearMagazineCargoGlobal _object; // _object setVehicleAmmo DZE_vehicleAmmo; _object setdir _dir; if(_vecExists)then{ _object setVectorDirAndUp _vector; }; _object setposATL _pos; _object setDamage _damage; if ((typeOf _object) in dayz_allowedObjects) then { if (DZE_GodModeBase) then { _object addEventHandler ["HandleDamage", {false}]; } else { _object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}]; }; // Test disabling simulation server side on buildables only. _object enableSimulation false; // used for inplace upgrades && lock/unlock of safe _object setVariable ["OEMPos", _pos, true]; }; if (count _intentory > 0) then { /*ZSC if( count (_intentory) > 3)then{ _object setVariable ["bankMoney", _intentory select 3, true]; }else{ _object setVariable ["bankMoney", 0, true]; }; ZSC*/ if (_type in DZE_LockedStorage) then { // Fill variables with loot _object setVariable ["WeaponCargo", (_intentory select 0),true]; _object setVariable ["MagazineCargo", (_intentory select 1),true]; _object setVariable ["BackpackCargo", (_intentory select 2),true]; } else { //Add weapons _objWpnTypes = (_intentory select 0) select 0; _objWpnQty = (_intentory select 0) select 1; _countr = 0; { if(_x in (DZE_REPLACE_WEAPONS select 0)) then { _x = (DZE_REPLACE_WEAPONS select 1) select ((DZE_REPLACE_WEAPONS select 0) find _x); }; _isOK = isClass(configFile >> "CfgWeapons" >> _x); if (_isOK) then { _object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)]; }; _countr = _countr + 1; } count _objWpnTypes; //Add Magazines _objWpnTypes = (_intentory select 1) select 0; _objWpnQty = (_intentory select 1) select 1; _countr = 0; { if (_x == "BoltSteel") then { _x = "WoodenArrow" }; // Convert BoltSteel to WoodenArrow if (_x == "ItemTent") then { _x = "ItemTentOld" }; _isOK = isClass(configFile >> "CfgMagazines" >> _x); if (_isOK) then { _object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)]; }; _countr = _countr + 1; } count _objWpnTypes; //Add Backpacks _objWpnTypes = (_intentory select 2) select 0; _objWpnQty = (_intentory select 2) select 1; _countr = 0; { _isOK = isClass(configFile >> "CfgVehicles" >> _x); if (_isOK) then { _object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)]; }; _countr = _countr + 1; } count _objWpnTypes; }; }; if (_object isKindOf "AllVehicles") then { { _selection = _x select 0; _dam = _x select 1; if (_selection in dayZ_explosiveParts && _dam > 0.8) then {_dam = 0.8}; [_object,_selection,_dam] call object_setFixServer; } count _hitpoints; _object setFuel _fuel; if (!((typeOf _object) in dayz_allowedObjects)) then { //_object setvelocity [0,0,1]; _object call fnc_veh_ResetEH; if(_ownerID != "0" && !(_object isKindOf "Bicycle")) then { _object setvehiclelock "locked"; }; _totalvehicles = _totalvehicles + 1; // total each vehicle serverVehicleCounter set [count serverVehicleCounter,_type]; }; }; //Monitor the object PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object]; }; } count (_BuildingQueue + _objectQueue); // # END SPAWN OBJECTS # 7. Идем в description.ext и в самый низ:
      #include "custom\snap_pro\snappoints.hpp"  
      Все установка и настройка закончены, можно ставить ЭТО
      BuildVectorsAdminP4lV3.zip
    • By Alexandr116ru
      В последнее время, часто всплывают темы, про дальность прорисовки. Всё равно спистят, пардон, так что, выкладываю. В общем, пользуйтесь, никаких extra_rc.hpp создавать/использовать не надо. Сделано на основе регулировки звука, выложенного здесь же, автором сего поста: http://s-platoon.ru/index.php?/topic/4014-gromkost/ Автору спасибо за идею!   В файле compiles.sqf, в самом низу, ПЕРЕД строкой:    
          //Server Only    
        Добавить код:    
          changeViewDistance = {         private["_val","_str","_titleText"];         if (isNil "view_distance") then { view_distance = 1500 };         view_distance = (((view_distance + _this) min 4000) max 500);         setViewDistance view_distance;         _val = round(view_distance/100);         _str = "";         for "_x" from 6 to _val do {             _str = _str + "-";         };         _str = _str + "|";         for "_x" from _val to 39 do {             _str = _str + "-";         };         _titleText = format[("<t font='TahomaB' size='0.9' color='#f56722' align='center'>%1%2 м.</t><br/>"),"Видимость: ",str(_val*100)];         _titleText = _titleText + format[("<t font='TahomaB' size='0.7' color='#FFFFFF' align='center'>%1</t>"),_str];         [ _titleText, [safezoneX + safezoneW - 0.8,0.50],  [safezoneY + safezoneH - 0.8,0.7],  3, 0] spawn BIS_fnc_dynamicText;         profileNamespace setVariable ['view_distance',view_distance];     };    
        В dayz_spaceInterrupt.sqf, в самом низу, ПЕРЕД строкой:    
      _handled    
        Добавить код:    
      if (_dikCode == 0x0D) then {     100 call changeViewDistance;     _handled = true; };      if (_dikCode == 0x0C) then {     -100 call changeViewDistance;     _handled = true; };    
        Используемые клавиши для изменения дальности прорисовки, в моём случае: + (0x0D) и - (0x0C) Цвета высвечиваемого текста (color='#f56722' и color='#ffffff') меняете на свои, по надобности. Надпись ("Видимость: ") - тоже и радуетесь простоте решения этого вопроса)))  
    • 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, маркеры вообще раз в секунду пересоздаются. Тут работает по тому же принципу; - Если борт сбить, на любом этапе, он упадёт и лут отспавнится вокруг него, с отображением маркера; - Читайте комментарии в скрипте, если хотите добавить оповещения игрокам о старте, сбросе груза, падении борта.
×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.