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

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

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

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

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

Elevator Script for Players and Vehicles

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

Это способ от автора скрипта. Всё работает. Лут есть.

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


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



Привет всем. Решил запилить достаточно полезный гайд, который облегчит жизнь любителям стройки.

 

Итак

 

Что нам понадобится:

 

1) Папка elevator

2) Notepad

 

Инструкция:

1) Качаем папку, закидываем ее в папку нашей миссии (MPMissions\DayZ_Epoch_11.Chernarus)

2) Заходим в "init.sqf" и дописываем в конце эти строки:

 

вот как предлагает автор скрипта

["elevator"] execVM "elevator\elevator_init.sqf";

вот как еще можно

 

[] execVM "elevator\elevator_init.sqf";

Оба варианта рабочие.

 

3) Делаем настройки "под себя" в файлике "elevator_init.sqf" в нашей папке с элеватором:

// global variablesif (isNil "ELE_PlatformClass") then { ELE_PlatformClass = "MetalFloor_DZ" }
if (isNil "ELE_StopClass") then { ELE_StopClass = "MetalFloor_Preview_DZ" }
if (isNil "ELE_MaxRange") then { ELE_MaxRange = 100 }; // m - максимальная высота на которую может подыматься лифт т.е. строиться самая высокая остановка. По умолчанию тут стоит 25 метров, я поставил 100
if (isNil "ELE_Size") then { ELE_Size = 4 }; // m - судя по всему это размер поля лифта, эту настройку я не меня
if (isNil "ELE_Speed") then { ELE_Speed = 5}; // m/s - скорость передвижения лифта. Советую ставить в диапазоне 5-10, иначе разные глюки могут быть, если быстрее
if (isNil "ELE_StopWaitTime") then { ELE_StopWaitTime = 5 }; // s - время ожидания лифта. Советую ставить 5-6 секунд, иначе можно не успеть отойти и лифт прихлопнет персонажа
if (isNil "ELE_RequiredBuildTools") then { ELE_RequiredBuildTools = ["ItemToolbox", "ItemCrowbar"] }; // необходимый набор инструментов чтобы построить лифт и остановк
if (isNil "ELE_RequiredBuildItems") then { ELE_RequiredBuildItems = [["PartGeneric",2], "PartEngine"] }; // необходимые запчасти для постройки основы лифт
if (isNil "ELE_RequiredBuildStopItems") then { ELE_RequiredBuildStopItems = [["PartGeneric",2]] }; // необходимые запчасти для постройки остановки лифта

Что касается запчастей для постройки лифта, их можно сделать сложнее. В оригинале там для основания лифта нужно 4шт запчасти, двигатель, генератор и канистра с бензином. Я упростил для себя, но вы можете добавить свой вариант.

 

4) ВАЖНО: если у вас при постройке остановки пропадает металлический пол, то значит нужно в (dayz_code\init\variables.sqf) найти строчку с dayz_allowedObjects и вписать туда класс "MetalFloor_Preview_DZ" в этот список разрешенных классов.

 

 

ПРОВЕРЕНО НА Dayz Epoch 1.0.4.2.а

 

ДЕМОНСТРАЦИЯ РАБОТЫ:

 

 

Источник

На 1,0,5,1 пашет? Я поставил,краш вот такой:

 

"Error: Elevator script should NOT be started on the server"

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


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

Пашет. Работает уже давно.

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


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

А возможно ли сделать, чтобы два пола одновременно поднимались? И зачем команда select elevator?

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


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

А возможно ли сделать, чтобы два пола одновременно поднимались? И зачем команда select elevator?

Выбрать нужный лифт. Переводчик в помощь.

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


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

 

Выбрать нужный лифт. Переводчик в помощь.

Я спросил "зачем эта команда?". С английским у меня проблем нет! И основной вопрос был первый. Второй задал из-за того, что думал, что можно выбрать несколько лифтов и поднять вместе. Изменено пользователем junmsk (история изменений)

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


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

Я спросил "зачем эта команда?". С английским у меня проблем нет! И основной вопрос был первый. Второй задал из-за того, что думал, что можно выбрать несколько лифтов и поднять вместе.

Скорее всего эта функция выбирает Waypoint. По которым будет двигаться лифт.

Например ты сделал лифт из 5-7 станции, расположены они вообще рандомно. И далее этой функцией ты выбираешь как будет двигаться лифт.

По памяти говорю, может уже что путаю.

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


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

silverspam, этот мод не хочет работать на Epoch 1.0.5.1 в логах нечего нет. Просто нет таких фукций на (металлической панели) реакция такая-же как если-б я его не подключал в init

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


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

silverspam, этот мод не хочет работать на Epoch 1.0.5.1 в логах нечего нет. Просто нет таких фукций на (металлической панели) реакция такая-же как если-б я его не подключал в init

Все работает с 1.0.5.1.

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


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

Да, работает вот только по оригинальному гайду. Но конечная лифта исчезает((( в variable прописываю, черный экран со звуками. Жалко.

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


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

знать бы  как иммено на 1.0.5.1 работает,ато я тут уже пол дня ковыряюсь и толку никакого.неполучаетса никак , что надо ещё я непойму .может кто из вас знает как правильно надо ?

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

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


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

Тоже не работает, серв epoch 1051 в RPT логе только одна надпись

13:58:42 "Error: Elevator script should NOT be started on the server"

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

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


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

Модеры допилите в гайде что нужно прописывать в секцию if (!isDedicated) then {
Пример:
if (!isDedicated) then {
//elevator
["elevator"] execVM "elevator\elevator_init.sqf";
Я 2ч голову ломал почему не работает, а потому-что в инструкции не сказано про секцию...

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


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

поставил на 1.0.6.1а все работает но ошибка на стороне клиента

Error in expression <earObjects [ELE_StopClass, _maxRange]);
_stop
};



ELE_fnc_hasNextStop = {
priv>
  Error position: <_stop
};



ELE_fnc_hasNextStop = {
priv>
  Error Undefined variable in expression: _stop
File mpmissions\__CUR_MP.Napf\elevator\elevator_functions.sqf, line 101
"ELE_fnc_getNextStop следующий идентификатор остановки -1, в не досягаемости."

сам  elevator_functions.sqf

// elevator functions

// params: obj:object
// return: [elevator_id:number, stop_id:number]
ELE_fnc_getElevatorId = {
	private ["_obj","_id","_cid","_cidArr","_ele","_i","_stopId"];
	_obj = _this select 0;
	_id = _obj getVariable ["ElevatorID", 0];
	_stopId = _obj getVariable ["ElevatorStopID", -1];
	if (_id > 0 && _stopId >= 0) exitWith {[_id,_stopId]};
	// id not cached yet, decode it
	_cid = _obj getVariable ["CharacterID", "0"];
	// ID 8 digits: EL-ID-STID = 6976-###-#
	_cidArr = toArray _cid;
	if (count _cidArr != 8) exitWith {[0,0]};
	_ele = "";
	for "_i" from 0 to 3 do {
		_ele = _ele + (toString [_cidArr select _i]);
	};
	if (_ele != "6976") exitWith {[0,0]};
	_id = (((_cidArr select 4)-48)*100) + (((_cidArr select 5)-48)*10) + ((_cidArr select 6)-48);
	_stopId = (_cidArr select 7)-48;
	// should be an elevator or elevator stop
	_obj setVariable ["ElevatorID", _id, true];
	_obj setVariable ["ElevatorStopID", _stopId, true];
	[_id, _stopId]
};

// params: obj:object
// return: bool
ELE_fnc_isElevator = {
	private ["_obj","_id","_b"];
	_obj = _this select 0;
	if ((typeOf _obj) != ELE_PlatformClass) exitWith { false };
	_id = [_obj] call ELE_fnc_getElevatorId;
	_b = (_id select 0) > 0 && (_id select 1) == 0;
	_b
};

// params: obj:object
// return: bool
ELE_fnc_isElevatorStop = {
	private ["_obj","_id","_b"];
	_obj = _this select 0;
	if ((typeOf _obj) != ELE_StopClass) exitWith { false };
	_id = [_obj] call ELE_fnc_getElevatorId;
	_b = (_id select 0) > 0;
	_b
};

// params: obj:object
// return: id:string
ELE_fnc_generateElevatorId = {
	private ["_obj","_maxElevatorId","_maxDistance","_id","_eid","_idTemp","_idStr"];
	_obj = _this select 0;
	_maxElevatorId = 999;
	// generate random id instead?
	_maxDistance = 500;
	_id = 1;
	{
		if (alive _x) then {
			_idTemp = ([_x] call ELE_fnc_getElevatorId) select 0;
			if (_idTemp > 0) then {
				diag_log format ["ELE_fnc_generateElevatorId elevator found: %1, id = %2", _x, _idTemp];
			};
			if (_idTemp >= _id) then {
				_id = _idTemp + 1;
			};
		};
	} forEach ((getPos _obj) nearObjects [ELE_PlatformClass, _maxDistance]);
	if (_id > _maxElevatorId) exitWith { "" };
	_idStr = [_id, 3] call AC_fnc_num2str;
	_eid = "6976" + _idStr + "0";
	diag_log format ["ELE_fnc_generateElevatorId elevator id generated: %1", _eid];
	_eid
};

// params: elevator:object, stopDiff:number 
// params: stop:object
ELE_fnc_getNextStop = {
	private ["_elevator","_stopDiff","_id","_currentStopId","_nextStopId","_maxRange","_stop","_xid"];
	_elevator = _this select 0;
	_stopDiff = _this select 1;
	_maxStopId = 9;
	_id = _elevator getVariable ["ElevatorID", 0];
	_currentStopId = _elevator getVariable ["ElevatorCurrentStop", 0];
	_nextStopId = _currentStopId + _stopDiff;
	if (_nextStopId < 0 || _nextStopId > _maxStopId) exitWith {
		diag_log format ["ELE_fnc_getNextStop следующий идентификатор остановки %1, в не досягаемости.", _nextStopId];
		nil
	};
	_maxRange = ELE_MaxRange * (abs _stopDiff);
	_stop = nil;
	{
		_xid = [_x] call ELE_fnc_getElevatorId;
		if ((_xid select 0) == _id && (_xid select 1) == _nextStopId) exitWith {
			// next stop found
			_stop = _x;
		};
	} forEach ((getPos _elevator) nearObjects [ELE_StopClass, _maxRange]);
	_stop
};

// params: elevator:object
// return: bool
ELE_fnc_hasNextStop = {
	private ["_elevator","_stop","_b"];
	_elevator = _this select 0;
	_stop = [_elevator, +1] call ELE_fnc_getNextStop;
	_b = !isNil "_stop";
	_b
};

// params: elevator:object
// return: bool
ELE_fnc_hasPreviousStop = {
	private ["_elevator","_stop","_b"];
	_elevator = _this select 0;
	_stop = [_elevator, -1] call ELE_fnc_getNextStop;
	_b = !isNil "_stop";
	_b
};

// params: elevator:object
// return: stop_id:string
ELE_fnc_getNextStopId = {
	private ["_elevator","_maxStopId","_id","_nextStopId","_idStr","_eid"];
	_elevator = _this select 0;
	_maxStopId = 9;
	_id = _elevator getVariable ["ElevatorID", 0];
	_nextStopId = (_elevator getVariable ["ElevatorCurrentStop", 0]) + 1;
	if (_nextStopId > _maxStopId) exitWith {
		diag_log format ["ELE_fnc_getNextStopId остановка %1 > макс. остановок %2", _nextStopId, _maxStopId];
		""
	};
	if ([_elevator] call ELE_fnc_hasNextStop) exitWith {
		diag_log format ["ELE_fnc_getNextStopId остановка %1 уже присутствует", _nextStopId];
		""
	};
	_idStr = [_id, 3] call AC_fnc_num2str;
	_eid = "6976" + _idStr + (str _nextStopId);
	diag_log format ["ELE_fnc_getNextStopId идентификатор следующей остановки: %1", _eid];
	_eid
};

// params: elevator:object, stopDiff:number 
ELE_fnc_activateElevator = {
	private ["_elevator","_stopDiff","_id","_currentStopId","_firstActivation","_nextStopId","_nextStop","_dest","_pos","_dir","_stop","_dist","_attachments","_updateInterval","_distLast"];
	_elevator = _this select 0;
	_stopDiff = _this select 1;
	if (_elevator getVariable ["ElevatorActive", false]) exitWith {
		cutText ["Этот лифт уже активирован", "PLAIN DOWN"];
	};
	_id = _elevator getVariable ["ElevatorID", 0];
	_currentStopId = _elevator getVariable ["ElevatorCurrentStop", -1];
	_firstActivation = false;
	if (_currentStopId == -1) then {
		_firstActivation = true;
		_currentStopId = 0;
	};
	// find next elevator stop
	_nextStopId = _currentStopId + _stopDiff;
	_nextStop = [_elevator, _stopDiff] call ELE_fnc_getNextStop;
	if (isNil "_nextStop") exitWith {
		cutText ["Следующая остановка для лифта не найдена.", "PLAIN DOWN"];
	};
	_dest = getPosATL _nextStop;
	_dest set [2, (_dest select 2) + 0.05]; // elevate a little to separate elevator and stop point
	_pos = getPosATL _elevator;
	// check here again, if there is no elevator stop no elevator will be created
	if (_firstActivation) then {
		// spawn elevator in and replace original with stop point
		_dir = getDir _elevator;
		deleteVehicle _elevator; // delete original
		// create new elevator
		_elevator = createVehicle [ELE_PlatformClass, [0,0,0], [], 0, "CAN_COLLIDE"];
		// _elevator = ELE_PlatformClass createVehicleLocal _pos;
		_elevator setDir _dir;
		_elevator setPosATL _pos;
		_elevator setVariable ["ElevatorID", _id, true];
		_elevator setVariable ["ElevatorStopID", 0, true];
		player reveal _elevator;
		// create stop point
		_stop = createVehicle [ELE_StopClass, [0,0,0], [], 0, "CAN_COLLIDE"];
		_stop setDir _dir;
		_stop setPosATL _pos;
		_stop setVariable ["ElevatorID", _id, true];
		_stop setVariable ["ElevatorStopID", 0, true];
		player reveal _stop;
		diag_log format ["ELE_fnc_activateElevator first elevator activation: id = %1", _id];
	} else {
		// make the elevator local to the player who activated it
		if (!local _elevator) then {
			// use setOwner on the server instead?
			_dir = getDir _elevator;
			deleteVehicle _elevator; // delete original
			// create new elevator
			_elevator = createVehicle [ELE_PlatformClass, [0,0,0], [], 0, "CAN_COLLIDE"];
			_elevator setDir _dir;
			_elevator setPosATL _pos;
			_elevator setVariable ["ElevatorID", _id, true];
			_elevator setVariable ["ElevatorStopID", 0, true];
			player reveal _elevator;
			//diag_log format ["ELE_fnc_activateElevator локальный лифт изменен на игрока %1", name player];
		};
	};
	// select this elevator
	ELE_elevator = _elevator;
	_dist = _pos distance _dest;
	_elevator setVariable ["ElevatorActive", true, true];
	// attach near entities to the elevator platform
	_attachments = [];
	{ _x attachTo [_elevator]; _attachments set [count _attachments, _x]; } forEach (_elevator nearEntities ELE_Size);
	// animate to the next stop
	cutText [format["Движение к следующей остановке лифта (%1, удаленность %2м) ...", _nextStopId, _dist], "PLAIN DOWN"];
	_updateInterval = 1 / ELE_UpdatesPerSecond;
	// direction pos -> dest
	_dir = [_dest, _pos] call VEC_fnc_sub;
	// normalize dir vector to the elevator speed
	_dir = _dir call VEC_fnc_unit;
	_dir = [_dir, ELE_Speed * _updateInterval] call VEC_fnc_mul;
	_distLast = _dist;
	// if the distance is greater than last iteration we have reached the destination (went past it actually)
	while {_dist <= _distLast} do {
		_pos = [_pos, _dir] call VEC_fnc_add;
		_elevator setPosATL _pos;
		_distLast = _dist;
		_dist = _pos distance _dest;
		sleep _updateInterval;
	};
	_elevator setPosATL _dest; // just in case it went to far
	// detach entities again
	{ detach _x; } forEach _attachments;
	_elevator setVariable ["ElevatorCurrentStop", _nextStopId, true];
	_elevator setVariable ["ElevatorActive", false, true];
	cutText ["... лифт достиг остановки.", "PLAIN DOWN"];
};

// params: elevatorStop:object
ELE_fnc_callElevator = {
	private ["_elevatorStop","_id","_elevatorId","_stopId","_elevator","_xid","_currentStopId","_stopDiff"];
	_elevatorStop = _this select 0;
	_id = [_elevatorStop] call ELE_fnc_getElevatorId;
	_elevatorId = _id select 0;
	_stopId = _id select 1;
	// find elevator
	_elevator = nil;
	{
		_xid = [_x] call ELE_fnc_getElevatorId;
		if ((_xid select 0) == _elevatorId) exitWith {
			// elevator found
			_elevator = _x;
		};
	} forEach (nearestObjects [_elevatorStop, [ELE_PlatformClass], ELE_MaxRange * 10]); // max 10 times the range because 10 possible stops
	if (isNil "_elevator") exitWith {
		cutText ["Лифт не найден", "PLAIN DOWN"];
	};
	if (_elevator getVariable ["ElevatorActive", false]) exitWith {
		cutText ["Этот лифт уже активирован.", "PLAIN DOWN"];
	};
	// get the elevator to this stop point
	_currentStopId = _elevator getVariable ["ElevatorCurrentStop", 0];
	_stopDiff = if (_stopId > _currentStopId) then [{+1},{-1}];
	while {_currentStopId != _stopId} do {
		[_elevator, _stopDiff] call ELE_fnc_activateElevator;
		_currentStopId = _currentStopId + _stopDiff;
		// wait at each stop
		if (ELE_StopWaitTime > 0) then {
			sleep ELE_StopWaitTime;
		};
	};
	cutText ["Лифт приехал.", "PLAIN DOWN"];
};

помогите плиззз

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

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


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, lockdog сказал:

там нет ответа на эту проблему)), у меня и  стоит для 1061

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


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, lockdog сказал:

подробный лог выложи

это и была вся ошибка, стольное не к этому относится, эта ошибка осталась с 1051, на эпочь форуме задавали этот вопрос, но вопросы так и остались без ответа, она появляется в момент когда катаешься на лифте))

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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