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

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

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

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

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

Улучшения\апгрейд машин из Origins в DayZ EPOCH

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

Я сам парился долго, хотя там делов на 2 минуты

поделись фиксом на менюшку плизз

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


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

Наконец-то полностью сделал гнезда, осталось только постепенную стройку наладить и сделать сохранение покраски  

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


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

Наконец-то полностью сделал гнезда, осталось только постепенную стройку наладить и сделать сохранение покраски  

Ты скажи как ты исправил меню апгрейда техники?

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


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

Ты скажи как ты исправил меню апгрейда техники?

 

Зажал

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


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

 

Думаю всем понятно что при помощи данного скрипта мы сможем улучшать машины из Origins так же как в одноимённом моде. Имейте ввиду что хотя этот скрипт для EPOCH, он будет бесполезен если на вашем сервер также не активирован мод Origins.

 

 

wtk7imov.png

 

 

Внимание!

  • Данная версия позволит вам обновлять транспорт при помощи одних лишь запчастей (scrap metal)
  • Данная версия только для Origins Mod 1.7.9
  • Все эти минусы будут пофикшены в следующей версии :good:
Нам понадобятся следующие файлы:
  • variables.sqf
  • compiles.sqf
  • fn_selfactions.sqf
  • object_setFixServer.sqf
  • server_monitor.sqf
  • server_updateObject.sqf
  • server_publishVehicle.sqf
P.S. Я не буду объяснять как делать свои кастомные файлы типа variables.sqf, т.к. это займёт ооочень много времени, к тому же таких туторов уже куча, вы вполне сможете найти и прочитать как сделать кастомный файл :smile:

 

Инструкция:

1) Открываем ваш кастомный variables.sqf и находим эту строку:

// update objects
и сразу после этой строки добавить:
Ori_VehiclesList = ["ori_ScrapBuggy","ori_survivorBus","ori_vil_lada_2105_rust","ori_poldek_black","ori_poldek","ori_rth_originsmod_bathmobile","ori_transit","ori_vil_originsmod_lublin_truck","ori_vil_originsmod_truck_civ","ori_originsmod_pickupoldfuel","ori_p85_originsmod_cucv_pickup","ori_originsmod_pickupold"];  
Ori_VehicleUpgrades = ["pluhPredni","kolaOchrana","oknaOchrana","predniOknoOchrana"];
2) Открываем файл compiles.sqf и находим эту строку:
object_setFixServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_setFixServer.sqf";
заменяем её на эту:
object_setFixServer = compile preprocessFileLineNumbers "compile\object_setFixServer.sqf";
и создаём в папке миссии папку compile, а в ней файл object_setFixServer.sqf с таким содержимым:
private ["_unit","_selection","_strH","_damage","_upgrades"];
_unit =			_this select 0;
_selection =	_this select 1;
_damage =		_this select 2;

if (_selection != "" && local _unit) then {
	if (_selection in Ori_VehicleUpgrades) then {
		_unit setVariable [_selection,_damage,true];
		PVDZE_veh_Update = [_unit,"repair"];
	} else {
		_strH = "hit_" + (_selection);
		_unit setHit[_selection,_damage];

		_unit setVariable [_strH,_damage,true];
		if (_damage == 0) then {
			PVDZE_veh_Update = [_unit,"repair"];
		} else {
			PVDZE_veh_Update = [_unit,"damage"];
		};
	};
	
	if (isServer) then {
		PVDZE_veh_Update call server_updateObject;
	} else {
		publicVariableServer "PVDZE_veh_Update";
	};
};
3) Открываем ваш fn_selfaction.sqf и находим там строку:
s_player_repairActions set [count s_player_repairActions,_menu1];

а сразу после неё добавляем этот код:

if (_typeOfCursorTarget in Ori_VehiclesList) then {
			_cfg = configFile >> "CfgVehicles" >> _typeOfCursorTarget >> "AnimationSources";
			_tc = count _cfg;
			_part = "PartGeneric";
			
			for "_mti" from 0 to _tc-1 do {
				_mt = (_cfg select _mti);
				_st = getText(_mt >> "source");
				_anim_array = Ori_VehicleUpgrades;
				if (_st in _anim_array) then {
					_statuss = _cursorTarget getVariable [_st,1];
						if (_statuss == 1) then {
							_num = _anim_array find _st;
							_upgrade = _anim_array select _num;
							_upgradeName = "";
									switch _upgrade do {
									case "pluhPredni" : {_upgradeName = "Front Plow";};
									case "kolaOchrana" : {_upgradeName = "Wheel Guards";};
									case "oknaOchrana" : {_upgradeName = "Window Guards";};
									case "predniOknoOchrana" : {_upgradeName = "Windshield Guards";};
								};
							_color = "color='#ff0000'";
							_stname = format["Upgrade %1",_upgradeName];
							_string = format["<t %2>%1</t>", _stname,_color];
						_handle = dayz_myCursorTarget addAction [_string, "custom\ori_upgrade.sqf",[_cursorTarget,_part,_st], 0, false, true, "",""];
						s_player_repairActions set [count s_player_repairActions,_handle];
					};
				};
			};
		};
4) В папке миссии создаём папку custom и в ней - файл ori_upgrade.sqf с таким содержимым:
private ["_isOk","_vehicle","_part","_hitpoint","_type","_selection","_array","_started","_finished","_animState","_isMedic","_num_removed","_damage","_dis","_sfx","_allFixed","_id","_hasToolbox","_section","_nameType","_namePart","_hitpoints","_mt","_nameClass1","_st","_cfg","_tc"];

if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_92") , "PLAIN DOWN"]; };
DZE_ActionInProgress = true;

_id = _this select 2;
_array = 	_this select 3;

_vehicle = 	_array select 0;
_part =		_array select 1;
_hitpoint = _array select 2;
_type = typeOf _vehicle; 

//
_hasToolbox = 	"ItemToolbox" in items player;
_section = _part in magazines player;

// moving this here because we need to know which part needed if we don't have it
_nameType = 		getText(configFile >> "cfgVehicles" >> _type >> "displayName");
_namePart = 		getText(configFile >> "cfgMagazines" >> _part >> "displayName");
_isOk = true;
s_player_repair_crtl = 1;

if (_section && _hasToolbox) then {

	player playActionNow "Medic";
	_sfx = "repair";
	_dis=0;
	[player,_sfx,0,false,_dis] call dayz_zombieSpeak;
	[player,_dis,true,(getPosATL player)] spawn player_alertZombies;
	
	r_interrupt = false;
	_animState = animationState player;
	r_doLoop = true;
	_started = false;
	_finished = false;
	
	while {r_doLoop} do {
		_animState = animationState player;
		_isMedic = ["medic",_animState] call fnc_inString;
		if (_isMedic) then {
			_started = true;
		};
		if (_started && !_isMedic) then {
			r_doLoop = false;
			_finished = true;
		};
		if (r_interrupt) then {
			r_doLoop = false;
		};
		sleep 0.1;
	};
	r_doLoop = false;

	if (_finished) then {
		if (_part == "PartGeneric") then {
			player removeMagazine _part;
			
			_cfg = configFile >> "CfgVehicles" >> typeof _vehicle >> "AnimationSources";
			_tc = count _cfg;
			for "_mti" from 0 to _tc-1 do {
				_mt = (_cfg select _mti);
				_nameClass1 = configName(_mt);
				_st = getText(_mt >> "source");
				if (_st==_hitpoint) then { _selection = _st; };
			};
			PVDZE_veh_SFix = [_vehicle,_selection,0];
			publicVariable "PVDZE_veh_SFix";
			if (local _vehicle) then {
				PVDZE_veh_SFix call object_setFixServer;
			};
			
			player playActionNow "Medic";
			sleep 1;
			
			_dis=20;
			_sfx = "repair";
			[player,_sfx,0,false,_dis] call dayz_zombieSpeak;
			[player,_dis,true,(getPosATL player)] spawn player_alertZombies;
			sleep 5;
			_vehicle setvelocity [0,0,1];
			
			//Success!
			cutText [format[(localize "str_epoch_player_166"),_namePart,_nameType], "PLAIN DOWN"];			
		} else {
			_damage = [_vehicle,_hitpoint] call object_getHit;
			_vehicle removeAction _id;
		
			//dont waste loot on undamaged parts
			if (_damage > 0) then {
			
				// ensure part was removed
				_num_removed = ([player,_part] call BIS_fnc_invRemove);

				if(_num_removed == 1) then {

					//Fix the part
					_selection = getText(configFile >> "cfgVehicles" >> _type >> "HitPoints" >> _hitpoint >> "name");
			
					//vehicle is owned by whoever is in it, so we have to have each client try && fix it
					PVDZE_veh_SFix = [_vehicle,_selection,0];
					publicVariable "PVDZE_veh_SFix";
					
					if (local _vehicle) then {
						PVDZE_veh_SFix call object_setFixServer;
					};

					_vehicle setvelocity [0,0,1];

					//Success!
					cutText [format[(localize "str_epoch_player_166"),_namePart,_nameType], "PLAIN DOWN"];

				};
			
			};
		};
	} else {
		r_interrupt = false;
		if (vehicle player == player) then {
			[objNull, player, rSwitchMove,""] call RE;
			player playActionNow "stop";
		};
		cutText [(localize "str_epoch_player_93"), "PLAIN DOWN"];
	};
			
} else {
	cutText [format[(localize "str_epoch_player_167"),_namePart], "PLAIN DOWN"];
};

{dayz_myCursorTarget removeAction _x} count s_player_repairActions;s_player_repairActions = [];
dayz_myCursorTarget = objNull;

//check if repaired fully
_hitpoints = _vehicle call vehicle_getHitpoints;
_allFixed = true;
{
	_damage = [_vehicle,_x] call object_getHit;
	if (_damage > 0) exitWith {
		_allFixed = false;
	};
} count _hitpoints;

//update if repaired
if (_allFixed) then {
	_vehicle setDamage 0;
	//["PVDZE_veh_Update",[_vehicle,"repair"]] call callRpcProcedure;
	PVDZE_veh_SFix = [_vehicle,_selection,0];
	publicVariable "PVDZE_veh_SFix";
	if (local _vehicle) then {
		PVDZE_veh_SFix call object_setFixServer;
	};
};

s_player_repair_crtl = -1;

DZE_ActionInProgress = false;
5) В вашем dayz_server.pbo открываем файл server_monitor.sqf и находим там такие строки:
if (_selection in dayZ_explosiveParts && _dam > 0.8) then {_dam = 0.8};
					[_object,_selection,_dam] call object_setFixServer;
и заменяем их этими:
                    if (_selection in Ori_VehicleUpgrades) then {
						_object animate [_selection,_dam];
						_object setVariable [_selection,_dam,true];
					} else {	
						if (_selection in dayZ_explosiveParts and _dam > 0.8) then {_dam = 0.8};
						[_object,_selection,_dam] call object_setFixServer;
					};
6) Открываем файл server_updateObject.sqf, находим там секцию _object_damage = { ...}; и все действия что описаны в этом пункте - выполняет ТОЛЬКО в этой секции
  • Находим этот код:
    _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
    и сразу после него добавляем это:
    if (_selection in Ori_VehicleUpgrades) then {_dam = 0;}; //prevent double writtings
  • А после этого кода:
    } count _hitpoints;
  • Добавляем этот:

    		if (typeOf _object in Ori_VehiclesList) then {		_cfg = configFile >> "CfgVehicles" >> (typeOf _object) >> "AnimationSources";		_tc = count _cfg;				for "_mti" from 0 to _tc-1 do {				_mt = (_cfg select _mti);				_st = getText(_mt >> "source");				if (_st in Ori_VehicleUpgrades) then {				_hit = _object getVariable [_st,1];				_object animate [_st,_hit];				_array set [count _array,[_st,_hit]];				};			};		};
7) Открываем файл server_publishVehicle.sqf и ищем это:
_selection = getText(configFile >> "cfgVehicles" >> _class >> "HitPoints" >> _x >> "name");
и сразу после него добавляем этот код:
if (_selection in Ori_VehicleUpgrades) then {_dam = 0;}; //prevent double writtings

8) Ищем этот код:

} count _hitpoints;
добавляем после него:
        if (typeOf _object in Ori_VehiclesList) then {
		_cfg = configFile >> "CfgVehicles" >> _class >> "AnimationSources";
		_tc = count _cfg;
				for "_mti" from 0 to _tc-1 do {
				_mt = (_cfg select _mti);
				_st = getText(_mt >> "source");
				if (_st in Ori_VehicleUpgrades) then {
				_hit = 1;
				_object setVariable [_st,_hit,true];
				_object animate [_st,_hit];
				_array set [count _array,[_st,_hit]];

				};
			};
		};
9) Добавьте машины из мода Origins в dynamic_vehicles.sqf что бы они появлялись на карте.
["ori_ScrapBuggy",3],["ori_survivorBus",3],["ori_vil_lada_2105_rust",3],["ori_poldek_black",3],["ori_poldek",3],["ori_rth_originsmod_bathmobile",3],["ori_transit",3],["ori_vil_originsmod_lublin_truck",3],["ori_vil_originsmod_truck_civ",3],["ori_vil_originsmod_truck_civ",3],["ori_originsmod_pickupoldfuel",3],["ori_p85_originsmod_cucv_pickup",3],["ori_originsmod_pickupold",3]
Данный гайд изначально был совсем "не дружелюбный" к новичкам, но я постарался упростить его в рамках разумного (которые были определены мной в начале поста). Надеюсь что я вам помог. Ставим плюсы и развлекаемся! :good::wink:

 

 

 

Оригинал статьи:

http://epochmod.com/forum/index.php?/topic/34690-release-origins-vehicle-upgrades/

 

 

 

Спасибо за перевод

У меня версия чуть старее, но после подпиливания работает нормально.

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


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

А новых машин с последнего ориджинса как вытащить?

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

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


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

Нет меню при контакте с техникой... версия ори 1.7.9.5... в сервер RPT:

23:43:32   Error position: <Ori_VehicleUpgrades) then {_dam = 0;}; 
>
23:43:32   Error Undefined variable in expression: ori_vehicleupgrades
23:43:32 File z\addons\dayz_server\compile\server_publishVehicle.sqf, line 40
23:43:32 Error in expression <ts" >> _x >> "name");
if (_selection in Ori_VehicleUpgrades) then {_dam = 0;}; 
>

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


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

А игрокам дополнительные файлы нужно качать? чтобы все это видели?

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: Makliion
      Всем добрый вечер..
      У меня такой вопрос где найти или заказать скрипт для обыска зомбей & игроков 
      что-бы каждую вещь снимать через действие а не тупо через таб
      Шлем отдельно
      Рюкзак отдельно
      ну и на все остальные слоты
      искал долго не нашёл ничего
      есть мод на обыск но он просто открывает  инвентарь и все 
       
    • Автор: Troy1
      Всем привет. Подскжите ну или помогите пожалуйста решить вопрос.
      Вопрос звучит так. На сервере есть трейдер зоны и базы игроков. 
      Если в течение определённого времени, на пример 1 - 2 часа с машиной не кто не взаимодействует и машина не находится в зоне трейдера или на теретории базы, то машина отлетает в гараж или на штраф стоянку.
      На сервере используется TraderPlus.
       
      Есть такие решения у кого?
      За ранние благодарю.
    • Автор: Troy1
      Всем привет. Подскжите ну или помогите пожалуйста решить вопрос.
      Вопрос звучит так. Нужно сделать так, что бы на всей карте был запрет на строительство. 
      Если нужно построить например базу с палатками, то нужно установить верстак или флаг, который установит зону для строительства с радиусом примерно 20-25 метров от центра и желательно что бы зона была квадратной.
      Есть такие решения у кого?
      За ранние благодарю.
    • Автор: BR0wi
      Подскажите где найти людей, которые делаю моды на заказ. К кому вообще обращаться? Или что бы реализовать свои идеи нужно самому "год" сидеть и изучать все механики модинга?
    • Автор: CubeIn
      Приветствую господа, хочу создать новый проект, уникальный, но для этого нужен маппер.
      Я оставлю здесь свой дискрод, напишите в лс, кто готов взяться за крупный проект.
      4me#4542
  • Наш выбор

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

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

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

Поддержка