Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • 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 servers
  • Don'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
  • 0
Pass777

Буксировка с игроком

Проблема: при попытке сесть в буксируемый транспорт - выкидывает, а вот если сначала сесть, а потом буксировать - все окей. Как исправить?

Share this post


Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Проблема: при попытке сесть в буксируемый транспорт - выкидывает, а вот если сначала сесть, а потом буксировать - все окей. Как исправить?

ммм тебе нужно разрешить или запретить посадку в буксируемый транспорт? И какая система буксировки?

Share this post


Link to post
Share on other sites



  • 0

Система буксировки R3F

Нужно запретить буксировку с людьми

Share this post


Link to post
Share on other sites
  • 0

Система буксировки R3F

Нужно запретить буксировку с людьми

в attach.sqf

 

После _object setVariable ["LOG_moves_by", _tug, true];

 

Добавь

 

   {
      unassignVehicle _x;
      _x Action ["Eject", Vehicle _x];
   } ForEach crew _object;

 

Share this post


Link to post
Share on other sites
  • 0

Ну и совсем чтобы исключить такие случаи - можешь еще и закрывать технику

 

 

_object setVehicleLock "LOCKED";
PVDZE_veh_Lock = [_object,true];
publicVariable "PVDZE_veh_Lock";
 

Share this post


Link to post
Share on other sites
  • 0

 

в attach.sqf

 

После _object setVariable ["LOG_moves_by", _tug, true];

 

Добавь

 

   {
      unassignVehicle _x;
      _x Action ["Eject", Vehicle _x];
   } ForEach crew _object;

Что-то нет там такого файла... Система вот эта: http://s-platoon.ru/index.php?/topic/2161-r3f-podem-i-buksirovka-tekhniki-2in1/

Edited by Pass777 (see edit history)

Share this post


Link to post
Share on other sites
  • 0

remorquer_selection.sqf

Там этот код:

/**
 * Remorque l'objet sйlectionnй (R3F_LOG_objet_selectionne) а un vйhicule
 * 
 * @param 0 le remorqueur
 * 
 * Copyright © 2010 madbull ~R3F~
 * 
 * This program is free software under the terms of the GNU General Public License version 3.
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (R3F_LOG_mutex_local_verrou) then
{
	player globalChat STR_R3F_LOG_mutex_action_en_cours;
}
else
{
	R3F_LOG_mutex_local_verrou = true;
	
	private ["_objet", "_remorqueur"];
	
	_objet = R3F_LOG_objet_selectionne;
	_remorqueur = _this select 0;
	
	if (!(isNull _objet) && (alive _objet) && !(_objet getVariable "R3F_LOG_disabled")) then
	{
		if (isNull (_objet getVariable "R3F_LOG_est_transporte_par") && (isNull (_objet getVariable "R3F_LOG_est_deplace_par") || (!alive (_objet getVariable "R3F_LOG_est_deplace_par")))) then
		{
			if (_objet distance _remorqueur <= 30) then
			{
				// On mйmorise sur le rйseau que le vйhicule remorque quelque chose
				_remorqueur setVariable ["R3F_LOG_remorque", _objet, true];
				// On mйmorise aussi sur le rйseau que le canon est attachй en remorque
				_objet setVariable ["R3F_LOG_est_transporte_par", _remorqueur, true];
				
				// On place le joueur sur le cфtй du vйhicule, ce qui permet d'йviter les blessure et rend l'animation plus rйaliste
				player attachTo [_remorqueur, [
					(boundingBox _remorqueur select 1 select 0),
					(boundingBox _remorqueur select 0 select 1) + 1,
					(boundingBox _remorqueur select 0 select 2) - (boundingBox player select 0 select 2)
				]];
				
				player setDir 270;
				player setPos (getPos player);
				
				player playMove "AinvPknlMstpSlayWrflDnon_medic";
				sleep 2;
				
				// Attacher а l'arriиre du vйhicule au ras du sol
				_objet attachTo [_remorqueur, [
					0,
					(boundingBox _remorqueur select 0 select 1) + (boundingBox _objet select 0 select 1) + 3,
					(boundingBox _remorqueur select 0 select 2) - (boundingBox _objet select 0 select 2)
				]];
				
				R3F_LOG_objet_selectionne = objNull;
				
				detach player;
				
				// Si l'objet est une arme statique, on corrige l'orientation en fonction de la direction du canon
				if (_objet isKindOf "StaticWeapon") then
				{
					private ["_azimut_canon"];
					
					_azimut_canon = ((_objet weaponDirection (weapons _objet select 0)) select 0) atan2 ((_objet weaponDirection (weapons _objet select 0)) select 1);
					
					// Seul le D30 a le canon pointant vers le vйhicule
					if !(_objet isKindOf "D30_Base") then
					{
						_azimut_canon = _azimut_canon + 180;
					};
					
					// On est obligй de demander au serveur de tourner l'objet pour nous
					R3F_ARTY_AND_LOG_PUBVAR_setDir = [_objet, (getDir _objet)-_azimut_canon];
					if (isServer) then
					{
						["R3F_ARTY_AND_LOG_PUBVAR_setDir", R3F_ARTY_AND_LOG_PUBVAR_setDir] spawn R3F_ARTY_AND_LOG_FNCT_PUBVAR_setDir;
					}
					else
					{
						publicVariable "R3F_ARTY_AND_LOG_PUBVAR_setDir";
					};
				};
				
				sleep 5;
			}
			else
			{
				player globalChat format [STR_R3F_LOG_action_remorquer_selection_trop_loin, getText (configFile >> "CfgVehicles" >> (typeOf _objet) >> "displayName")];
			};
		}
		else
		{
			player globalChat format [STR_R3F_LOG_action_remorquer_selection_objet_transporte, getText (configFile >> "CfgVehicles" >> (typeOf _objet) >> "displayName")];
		};
	};
	
	R3F_LOG_mutex_local_verrou = false;
};

Share this post


Link to post
Share on other sites
  • 0

_objet setVariable ["R3F_LOG_est_transporte_par", _remorqueur, true];

 

 

{

unassignVehicle _x;

_x Action ["Eject", Vehicle _x];

} ForEach crew _objet;

Share this post


Link to post
Share on other sites
  • 0

_objet setVariable ["R3F_LOG_est_transporte_par", _remorqueur, true];

 

 

{

unassignVehicle _x;

_x Action ["Eject", Vehicle _x];

} ForEach crew _objet;

Спасибо большое!

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 BorizzK
      Функция вернет кол-во игроков рядом с текущей позицией игрока в заданном радиусе
      Использую на своем сервере при рандомном спавне нового игрока, что бы не заспавнился рядом с уже вооруженным и злым
      Если при спавне рядом есть игрок, то выбираются новые координаты для спавна
       
      int CheckNearestObjects(PlayerBase player, int radius) { array<Object> nearest_objects = new array<Object>; array<CargoBase> proxy_cargos = new array<CargoBase>; Object object; string className; int objectcount = 0; GetGame().GetObjectsAtPosition (player.GetPosition(), radius, nearest_objects, proxy_cargos ); Print("::: init_mod.c ::: CheckNearestObjects (int radius) ::: Radius: " + radius.ToString() + ", nearest_objects: " + nearest_objects.Count().ToString()); for ( int i = 0; i < nearest_objects.Count(); i++ ) { object = nearest_objects.Get(i); className = object.GetType(); if ( object ) { if (object.IsMan()) { if (player != object) { Print( "::: Init.c ::: CheckNearestObjects: IsMan(): "+i.ToString()+" => " + object.ToString() + " => Type: " + className + " => Position: " + object.GetPosition().ToString()); objectcount = objectcount + 1; } else { Print( "::: Init.c ::: CheckNearestObjects: isMan(): player and object " + object.ToString() + " the same object!"); } } } } return objectcount; }  
    • By Gromillla
      Установил буксировку MF-Tow и Запрет на буксировку , но при попытке начать буксировку пишет что техника закрыта, хотя обе транспорта открыты и были куплены у торговца. Ошибок в RPT клиентском и серверном нет.
      Может что-то ещё необходимо? 
      Версия эпоча 1.0.6.2
    • By TheFirstNoob
      Краткое описание:
      С помощью данного скрипта вы сможете буксировать технику с помощью вертолетов.

      Особенности:
      - Легкие вертолеты (Литл берды) могут буксировать только легкую технику (Мотоциклы, велики)
      - Средние вертолеты (Мишки, Юашки) могут буксировать только легкую и среднюю технику (Хамера, внедорожники, седаны, микроавтобусы)
      - Тяжелые вертолеты (Чинук) могут буксировать все. (Грузовики, водник, бронированная техника)
      - При сбросе техники с большой высоты открывается парашют и помечается зеленым дымом, чтобы техника приземлилась мягко и вы знали где она приземлилась.

      ГАЙД по запрету буксировки закрытой техники: Нажми на меня :3

      1. Качаем сам скрипт: Скачать
      2. Открываем ваш init.sqf и в конце написать:
      [] execVM "=BTC=_Logistic\=BTC=_Logistic_Init.sqf";

      3. Открываем ваш description.ext и после строк:
      aiKills = 1;
      diagRadio = 1;
      diagHit = 1;

      Через строчку вписать следующее:  class RscTitles { class BTC_Hud { idd = 1000; movingEnable=0; duration=1e+011; name = "BTC_Hud_Name"; onLoad = "uiNamespace setVariable ['HUD', _this select 0];"; controlsBackground[] = {}; objects[] = {}; class controls { class Radar { type = 0; idc = 1001; style = 48; x = (SafeZoneW+2*SafeZoneX) - 0.1; //safezonex + 0.1; //0.9 y = (SafeZoneH+2*SafeZoneY) - 0.15; //safezoney + 0.1; //0.85 w = 0.3; h = 0.4; font = "Zeppelin32"; sizeEx = 0.03; colorBackground[] = {0, 0, 0, 0}; colorText[] = {1, 1, 1, 1}; text = "\ca\ui\data\igui_radar_air_ca.paa"; }; class Img_Obj { type = 0; idc = 1002; style = 48; x = (SafeZoneW+2*SafeZoneX) + 0.045; y = (SafeZoneH+2*SafeZoneY) + 0.045; w = 0.01; h = 0.01; font = "Zeppelin32"; sizeEx = 0.04; colorBackground[] = {0, 0, 0, 0}; colorText[] = {1, 1, 1, 1}; text = "=BTC=_Logistic\data\=BTC=_Obj.paa"; }; class Pic_Obj { type = 0; idc = 1003; style = 48; x = (SafeZoneW+2*SafeZoneX) - 0.125; y = (SafeZoneH+2*SafeZoneY) - 0.23; w = 0.1; h = 0.1; font = "Zeppelin32"; sizeEx = 0.03; colorBackground[] = {0, 0, 0, 0}; colorText[] = {1, 1, 1, 1}; text = ""; }; class Arrow { type = 0; idc = 1004; style = 48; x = (SafeZoneW+2*SafeZoneX) + 0.15; y = (SafeZoneH+2*SafeZoneY) - 0.15; w = 0.05; h = 0.05; font = "Zeppelin32"; sizeEx = 0.03; colorBackground[] = {0, 0, 0, 0}; colorText[] = {1, 1, 1, 1}; text = ""; }; class Type_Obj { type = 0; idc = 1005; style = 0x00; x = (SafeZoneW+2*SafeZoneX) - 0.03; y = (SafeZoneH+2*SafeZoneY) - 0.335; w = 0.3; h = 0.3; font = "Zeppelin32"; sizeEx = 0.03; colorBackground[] = {0, 0, 0, 0}; colorText[] = {1, 1, 1, 1}; text = ""; }; }; }; class ExampleTitle { idd = -1; duration = 10; //show for 10 seconds class controls { class ExampleControl { idc = -1; type = 0; style = 2; //centre text x = safeZoneX + safeZoneW - 0.6 * 3 / 4; y = safeZoneY + safeZoneH - 0.6; h = 0.6; w = 0.6 * 3 / 4; //w == h font = "EtelkaNarrowMediumPro"; sizeEx = 0.03; colorBackground[] = {1,1,0,1}; //yellow background colorText[] = {0,0,1,1}; //blue text text = "Bottom Right Corner Square Box"; }; }; }; };  
      Готово!

      P.S. В папке =BTC=_Logistic в файле =BTC=_Logistic_init.sqf можно добавить дополнительную авиа-технику и технику, которая она будет способна буксировать.

      Открыв =BTC=_Logistic_init.sqf можно увидеть:
      case "AH6X_DZ" : {_array = ["Motorcycle"];};где "AH6X_DZ" - название воздушной единицы, которая будет поднимать груз где "Motorcycle" - название наземной единицы, которую будет поднимать соответственно "AH6X_DZ"
    • By Anton555
      Кто знает как отключить стандартную буксировку вертолетами в эпоче?
    • 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

×
×
  • 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.