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

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

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

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

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

Сборка транспорта при помощи ПКМ на Toolbox [Enhanced Vehicle Deployment]

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

 

вы Дал.... вы когда устанавливаете скрипты прочее. ПУТИ ЧИТАЙТЕ И СРАВНИВАЙТЕ.

Если Вы про меня я просто не заметил, что там тоже указан путь-да и разбираюсь как нуб (только увлекся). И спасбо большое, что тут есть отзывчивые люди низкий им поклон). А раскритиковать может каждый эт проще всего

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


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





Если Вы про меня я просто не заметил, что там тоже указан путь-да и разбираюсь как нуб (только увлекся). И спасбо большое, что тут есть отзывчивые люди низкий им поклон). А раскритиковать может каждый эт проще всего

Внимательность, мой друг, - залог успеха. Указали неверно путь к 1 файлу - перестал стартовать сервер, либо в лучшем случаи просто не находит скрипт. Гайд, на то и гайд чтобы смотреть и разбираться что, как и куда, а не тупо копировать

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

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


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

[success=Перезалил файл на форум и добавил ссылку на первоисточник][/success]

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


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

Архив перезалейте пожалуйста

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


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

Архив перезалейте пожалуйста

перезалил

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


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

Архив перезалейте пожалуйста

Перезалил архив, все работает!)

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


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

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

Вообщем разобрался...

 

 

Подскажите пожалуйста.

Это только с техникой можно, а если скрафтить не технику, а запчасти...
Ну например, в SinglePlayer очень трудно найти Противотанковый ёж. Так подскажите скрипт к данному EVD, чтобы можно было также скрафтить из 6 металлолома - 1 противотанковый ёж? Или из 10 пустых банок - скрафтить 1 металлолом.

ссылка на изображение, размер: 132 кбайт, 1024 x 768 точек

СПАСИБО! РАЗОБРАЛСЯ УЖЕ САМ.  :good: 

 

С таким же успехом при помощи данного гайда можно раскидать крафт по инструментам

http://savepic.org/7563728.jpg

http://savepic.org/7562704.jpg

http://savepic.org/7565776.jpg

:good: 

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

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


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

У меня возникла проблема после установки.
При сборе и разборе велосипеда(да любого транспортного средства в логе RPT возникает ошибка


 

8:55:07 Error in expression <riable["lastInventory",_inventory];
if (_objectID == "0") then {
_key = format[">
18:55:07   Error position: <_objectID == "0") then {
_key = format[">
18:55:07   Error Undefined variable in expression: _objectid
18:55:07 File z\addons\dayz_server\compile\server_updateObject.sqf, line 71
18:55:07 Error in expression <iable ["ObjectUID","0"];

if ((typeName _objectID != "string") || (typeName _uid>
18:55:07   Error position: <_objectID != "string") || (typeName _uid>
18:55:07   Error Undefined variable in expression: _objectid
18:55:07 File z\addons\dayz_server\compile\server_updateObject.sqf, line 21
18:55:07 Error in expression <iable ["ObjectUID","0"];

if ((typeName _objectID != "string") || (typeName _uid>
18:55:07   Error position: <_objectID != "string") || (typeName _uid>
18:55:07   Error Undefined variable in expression: _objectid
18:55:07 File z\addons\dayz_server\compile\server_updateObject.sqf, line 21
18:55:07 Error in expression <iable ["ObjectUID","0"];

if ((typeName _objectID != "string") || (typeName _uid>
18:55:07   Error position: <_objectID != "string") || (typeName _uid>
18:55:07   Error Undefined variable in expression: _objectid
18:55:07 File z\addons\dayz_server\compile\server_updateObject.sqf, line 21
18:55:08 "RUNNING EVENT: Construction on [2015,7,31,18,55]"
18:55:08 "Spawning loot event at [10496.7,13669.7]"
18:55:08 "Creating ammo box at [10302.7,13588.1]"
18:55:08 "Loot event setup, waiting for 600 seconds"
18:55:19 Error in expression <iable ["ObjectUID","0"];

if ((typeName _objectID != "string") || (typeName _uid>
18:55:19   Error position: <_objectID != "string") || (typeName _uid>
18:55:19   Error Undefined variable in expression: _objectid
18:55:19 File z\addons\dayz_server\compile\server_updateObject.sqf, line 21
18:55:19 Error in expression <iable ["ObjectUID","0"];

if ((typeName _objectID != "string") || (typeName _uid>
18:55:19   Error position: <_objectID != "string") || (typeName _uid>
18:55:19   Error Undefined variable in expression: _objectid
18:55:19 File z\addons\dayz_server\compile\server_updateObject.sqf, line 21
18:55:19 Error in expression <iable ["ObjectUID","0"];

if ((typeName _objectID != "string") || (typeName _uid>
18:55:19   Error position: <_objectID != "string") || (typeName _uid>
18:55:19   Error Undefined variable in expression: _objectid
18:55:19 File z\addons\dayz_server\compile\server_updateObject.sqf, line 21
РАЗБОР
18:55:27 Error in expression <

if (isServer) then {

if (parseNumber _id > 0) then {

_key = format["CHILD:30>
18:55:27   Error position: <_id > 0) then {

_key = format["CHILD:30>
18:55:27   Error Undefined variable in expression: _id
18:55:27 File z\addons\dayz_server\compile\server_deleteObj.sqf, line 11

 

 

Файл server_updateObject.sqf

 

/*
[_object,_type] spawn server_updateObject;
*/
private ["_object","_type","_objectID","_uid","_lastUpdate","_needUpdate","_object_position","_object_inventory","_object_damage","_isNotOk","_parachuteWest","_firstTime","_object_killed","_object_repair","_isbuildable"];

_object = 	_this select 0;

if(isNull(_object)) exitWith {
	diag_log format["Skipping Null Object: %1", _object];
};

_type = 	_this select 1;
_parachuteWest = ((typeOf _object == "ParachuteWest") || (typeOf _object == "ParachuteC"));
_isbuildable = (typeOf _object) in dayz_allowedObjects;
_isNotOk = false;
_firstTime = false;

_objectID =	_object getVariable ["ObjectID","0"];
_uid = 		_object getVariable ["ObjectUID","0"];

if ((typeName _objectID != "string") || (typeName _uid != "string")) then
{ 
    diag_log(format["Non-string Object: ID %1 UID %2", _objectID, _uid]);
    //force fail
    _objectID = "0";
    _uid = "0";
};


// do not update if buildable && not ok
if (_isNotOk && _isbuildable) exitWith {  };

// delete if still not ok
if (_isNotOk) exitWith { deleteVehicle _object; diag_log(format["Deleting object %1 with invalid ID at pos [%2,%3,%4]",typeOf _object,_object_position select 0,_object_position select 1, _object_position select 2]); };


_lastUpdate = _object getVariable ["lastUpdate",time];
_needUpdate = _object in needUpdate_objects;

// TODO ----------------------
_object_position = {
	private["_position","_worldspace","_fuel","_key"];
		_position = getPosATL _object;
		_worldspace = [
			round(direction _object),
			_position
		];
		_fuel = 0;
		if (_object isKindOf "AllVehicles") then {
			_fuel = fuel _object;
		};
		_key = format["CHILD:305:%1:%2:%3:",_objectID,_worldspace,_fuel];
		//diag_log ("HIVE: WRITE: "+ str(_key));
		_key call server_hiveWrite;
};

_object_inventory = {
	private["_inventory","_previous","_key"];
		if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then{
    _inventory = _object getVariable ["plotfriends", []]; //We're replacing the inventory with UIDs for this item
} else {
    _inventory = [
    getWeaponCargo _object,
    getMagazineCargo _object,
    getBackpackCargo _object
    ];
};
		_previous = str(_object getVariable["lastInventory",[]]);
		if (str(_inventory) != _previous) then {
			_object setVariable["lastInventory",_inventory];
			if (_objectID == "0") then {
				_key = format["CHILD:309:%1:%2:",_uid,_inventory];
			} else {
				_key = format["CHILD:303:%1:%2:",_objectID,_inventory];
			};
			//diag_log ("HIVE: WRITE: "+ str(_key));
			_key call server_hiveWrite;
		};
};

_object_damage = {
	private["_hitpoints","_array","_hit","_selection","_key","_damage"];
		_hitpoints = _object call vehicle_getHitpoints;
		_damage = damage _object;
		_array = [];
		{
			_hit = [_object,_x] call object_getHit;
			_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
			if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
			_object setHit ["_selection", _hit];
		} count _hitpoints;
	
		_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
		//diag_log ("HIVE: WRITE: "+ str(_key));
		_key call server_hiveWrite;
	_object setVariable ["needUpdate",false,true];
	};

_object_killed = {
	private["_hitpoints","_array","_hit","_selection","_key","_damage"];
	_hitpoints = _object call vehicle_getHitpoints;
	//_damage = damage _object;
	_damage = 1;
	_array = [];
	{
		_hit = [_object,_x] call object_getHit;
		_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
		if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
		_hit = 1;
		_object setHit ["_selection", _hit];
	} count _hitpoints;
	
	if (_objectID == "0") then {
		_key = format["CHILD:306:%1:%2:%3:",_uid,_array,_damage];
	} else {
		_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
	};
	//diag_log ("HIVE: WRITE: "+ str(_key));
	_key call server_hiveWrite;
	_object setVariable ["needUpdate",false,true];
	if ((count _this) > 2) then {
		_killer = _this select 2;
		_charID = _object getVariable ['CharacterID','0'];
		_objID 	= _object getVariable['ObjectID','0'];
		_objUID	= _object getVariable['ObjectUID','0'];
		_worldSpace = getPosATL _object;
		if (getPlayerUID _killer != "") then {
			_name = if (alive _killer) then { name _killer; } else { format["OBJECT %1", _killer]; };
			diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6, Killer: %7 (UID: %8)", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace, _name, (getPlayerUID _killer)];
		} else {
			diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace];
		};
	};
};

_object_repair = {
	private["_hitpoints","_array","_hit","_selection","_key","_damage"];
	_hitpoints = _object call vehicle_getHitpoints;
	_damage = damage _object;
	_array = [];
	{
		_hit = [_object,_x] call object_getHit;
		_selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name");
		if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
		_object setHit ["_selection", _hit];
	} count _hitpoints;
	
	_key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage];
	//diag_log ("HIVE: WRITE: "+ str(_key));
	_key call server_hiveWrite;
	_object setVariable ["needUpdate",false,true];
};
// TODO ----------------------

_object setVariable ["lastUpdate",time,true];
switch (_type) do {
	case "all": {
		call _object_position;
		call _object_inventory;
		call _object_damage;
		};
	case "position": {
		if (!(_object in needUpdate_objects)) then {
			//diag_log format["DEBUG Position: Added to NeedUpdate=%1",_object];
			needUpdate_objects set [count needUpdate_objects, _object];
		};
	};
	case "gear": {
		call _object_inventory;
			};
	case "damage": {
		if ( (time - _lastUpdate) > 5) then {
			call _object_damage;
		} else {
			if (!(_object in needUpdate_objects)) then {
				//diag_log format["DEBUG Damage: Added to NeedUpdate=%1",_object];
				needUpdate_objects set [count needUpdate_objects, _object];
			};
		};
	};
	case "killed": {
		call _object_killed;
	};
	case "repair": {
		call _object_damage;
	};
};

 

 

Файл server_deleteObj.sqf

 

/*
[_objectID,_objectUID] call server_deleteObj;
*/
private["_id","_uid","_key"];
_id 	= _this select 0;
_uid 	= _this select 1;
_activatingPlayer 	= _this select 2;

if (isServer) then {
	//remove from database
	if (parseNumber _id > 0) then {
		//Send request
		_key = format["CHILD:304:%1:",_id];
		_key call server_hiveWrite;
		diag_log format["DELETE: %1 Deleted by ID: %2",_activatingPlayer,_id];
	} else  {
		//Send request
		_key = format["CHILD:310:%1:",_uid];
		_key call server_hiveWrite;
		diag_log format["DELETE: %1 Deleted by UID: %2",_activatingPlayer,_uid];
	};
}; 

 

 

Помогите кто сможет)

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

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


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

 

Особенности:

  • Сборка моззи, велика или мотоцикла
  • Меню сборки при нажатии ПКМ на тулбокс
  • Остановка сборки при движении персонажа
  • Сборка транспорта (а так же поломаного)
  • Возможность продать собранный транспорт
  • Транспорт не заносится в БД и удаляется после рестарта
  • После сборки детали появляются на земле

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

 

 

Инструкция:

1) Открываем ваш кастомный variables.sqf и в самый низ добавляем код:

EVDVehicleArray = ["MMT_Civ","TT650_Civ","CSJ_GyroC"];
dayz_allowedObjects = dayz_allowedObjects + EVDVehicleArray;

if(isServer) then {
    DZE_safeVehicle = DZE_safeVehicle + EVDVehicleArray;
};

2) Открываем init.sqf и находим это:

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf";

и ниже добавляем это:

call compile preprocessFileLineNumbers "ПУТЬ К СКРИПТУ\variables.sqf";

где SCRIPT_PATH\variables.sqf - путь к соответствующему кастомному файлу

3) Находим строку:

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";

и ниже добавляем это:

call compile preprocessFileLineNumbers "ПУТЬ К СКРИПТУ\compiles.sqf";    //Compile custom functions

где SCRIPT_PATH\compiles.sqf - путь к соответствующему кастомному файлу

4) Открываем ваш кастомный ui_selectSlot.sqf и ищем это:

_pos set [3,_height];

и выше добавляем этот код:

// Add extra context menus
    _erc_cfgActions = (missionConfigFile >> "ExtraRc" >> _item);
    _erc_numActions = (count _erc_cfgActions);
    if (isClass _erc_cfgActions) then {
        for "_j" from 0 to (_erc_numActions - 1) do {
            _menu = _parent displayCtrl (1600 + _j + _numActions);
            _menu ctrlShow true;
            _config = (_erc_cfgActions select _j);
            _text = getText (_config >> "text");
            _script = getText (_config >> "script");
            _height = _height + (0.025 * safezoneH);
            uiNamespace setVariable ['uiControl', _control];
            _menu ctrlSetText _text;
            _menu ctrlSetEventHandler ["ButtonClick",_script];
        };
    };

5) Открываем description.ext и в конец добавляем:

#include "ПУТЬ К СКРИПТУ\extra_rc.hpp"

6) Создаём файл extra_rc.hpp по тому пути что указали в пункте выше и вставляем туда код:

class ExtraRc {
    class ItemToolbox {
        class BuildBike {
            text = "Deploy Bike";
            script = "['MMT_Civ'] execVM 'ПУТЬ К СКРИПТУ\EVD\EVD_deploy.sqf'";
        };
        class BuildMotorcycle {
            text = "Deploy Motorcycle";
            script = "['TT650_Civ'] execVM 'ПУТЬ К СКРИПТУ\EVD\EVD_deploy.sqf'";
        };
        class BuildMozzie {
            text = "Deploy Mozzie";
            script = "['CSJ_GyroC'] execVM 'ПУТЬ К СКРИПТУ\EVD\EVD_deploy.sqf'";
        };
    };
};

если у вас уже установлена функция для использования ПКМ по предметам, то файл должен содержать этот код, а не то что выше:

class ExtraRc {
    class ItemBloodbag {
        class Use {
            text = "Use Bloodbag";
            script = "execVM 'ПУТЬ К СКРИПТУ\SelfBB\SelfBB.sqf'";
        };
    };
    class ItemToolbox {
        class BuildBike {
            text = "Deploy Bike";
            script = "['MMT_Civ'] execVM 'ПУТЬ К СКРИПТУ\EVD\EVD_deploy.sqf'";
        };
        class BuildMotorcycle {
            text = "Deploy Motorcycle";
            script = "['TT650_Civ'] execVM 'ПУТЬ К СКРИПТУ\EVD\EVD_deploy.sqf'";
        };
        class BuildMozzie {
            text = "Deploy Mozzie";
            script = "['CSJ_GyroC'] execVM 'ПУТЬ К СКРИПТУ\EVD\EVD_deploy.sqf'";
        };
    };
};

7) Открываем ваш fn_selfActions.sqf и ищем этот код:

// All Traders
    if (_isMan and !_isPZombie and _traderType in serverTraders) then {

и над ним добавляем это:

//Pack Vehicles
    if (_typeOfCursorTarget in EVDVehicleArray and _hasToolbox and !(locked _cursorTarget) and (damage _cursorTarget < 1)) then {
        if (s_player_packvehicle < 0) then {
            s_player_packvehicle = player addAction ["Pack Vehicle", "SCRIPT_PATH\EVD\EVD_pack.sqf",_cursorTarget, 0, false, true, "",""];
        };
    } else {
        player removeAction s_player_packvehicle;
        s_player_packvehicle = -1;
    };

8) Папку EVD копируем в новую папку по тому пути что всё это время указывали в кодах выше.

 

Опция - добавление своего транспорта:

 

 

Для того чтобы добавить транспорт (любой) на сборку из набора инструментов и запчастей нам нужно:

 

1) Открыть файл: EVD_common.sqf

 

2) Найти: 

switch (_type) do {
		case "MMT_Civ":		{ _materials = [["PartGeneric", 1]]; };
		case "TT650_Civ":	{ _materials = [["PartGeneric", 2], ["PartEngine", 1], ["PartWheel", 2]]; };
		case "CSJ_GyroC":	{ _materials = [["PartGeneric", 2], ["PartEngine", 1], ["PartVRotor", 1]]; };
	};

После:

case "CSJ_GyroC":	{ _materials = [["PartGeneric", 2], ["PartEngine", 1], ["PartVRotor", 1]]; };

Добавить:

case "SkodaGreen":	{ _materials = [["PartGeneric", 2], ["PartEngine", 1], ["PartWheel", 4]]; };

Вместо SkodaGreen - пишите classname вашего транспорта. 

И указываете количество и тип запчастей.

 

3) В файле extra_rc.hpp

 

Находим:

class BuildMozzie {
			text = "Собрать Mozzie";
			script = "['CSJ_GyroC'] execVM 'Scripts\EVD\EVD_deploy.sqf'";
		}; 

Ниже добавляем: 

class BuildSkodaGreen {
			text = "Собрать SkodaGreen";
			script = "['SkodaGreen'] execVM 'Scripts\EVD\EVD_deploy.sqf'";
		};

4) В variables.sqf :

Находим:

EVDVehicleArray = ["MMT_Civ","TT650_Civ","CSJ_GyroC",""];
dayz_allowedObjects = dayz_allowedObjects + EVDVehicleArray;

Заменяем на:

EVDVehicleArray = ["MMT_Civ","TT650_Civ","CSJ_GyroC","ScodaGreen"];
dayz_allowedObjects = dayz_allowedObjects + EVDVehicleArray;

Всё, транспорт добавлен.

 

 

 

Оригинал статьи: http://epochmod.com/forum/index.php?/topic/10905-release-enhanced-vehicle-deployment-with-right-click-option/

в инструкции в первом пункте -

  • if(isServer) then {
  •     DZE_safeVehicle = DZE_safeVehicle + EVDVehicleArray;
  • };

у меня там уже есть строка - DZE_safeVehicle = ["ParachuteWest","ParachuteC"];

мне просто добавить DZE_safeVehicle = DZE_safeVehicle + EVDVehicleArray; после DZE_safeVehicle = ["ParachuteWest","ParachuteC"]; ??

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

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


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

Еще 1 вопрос все поставил вроде все ровно но когда садишься на вел через 1 секунду умираешь . Что подскажите?*

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


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

Оказалось что у меня еще и скрипт единой валюты отвалился.

Что то мне подсказывает что на чудотворил я в ините гляньте кто шарит пожалуста. Причем именно в этом куске

 

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf";
call compile preprocessFileLineNumbers "custom\variables.sqf";                //Initilize the Variables (IMPORTANT: Must happen very early)
progressLoadingScreen 0.1;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\publicEH.sqf";                //Initilize the publicVariable event handlers
progressLoadingScreen 0.2;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf";    //Functions used by CLIENT for medical
progressLoadingScreen 0.4;
call compile preprocessFileLineNumbers "custom\compiles.sqf";                //Compile regular functions
call compile preprocessFileLineNumbers "ZSC\gold\ZSCinit.sqf";
progressLoadingScreen 0.5;
call compile preprocessFileLineNumbers "server_traders_cherno_11.sqf";                //Compile trader configs
progressLoadingScreen 1.0;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";   // Snap Pro строительство
call compile preprocessFileLineNumbers "custom\compiles.sqf";
progressLoadingScreen 1.2;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";
call compile preprocessFileLineNumbers "custom\compiles.sqf";
 

 

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


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

Не обращайте внимания ) Итог магазины полители чтобы не убивало на мото и всем остальном правильно читайте гайд там есть смысл где располагаются файлы если пишут внизу самом низу то нужно в самом низу. Как востановить теперь хз. Делайте копию своих серверов работающих версий ) а то все ровно плуганете так хоть не так страшно). МБ кто знает суть в том что у меня во первых не из чего делаеться мото вело вертолето а также исчезает. А трабл с магазинами в том что цены остались название валюты исчезло и покупаешь что хочешь и продаешь денег не берет(

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


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

 

Оказалось что у меня еще и скрипт единой валюты отвалился.

Что то мне подсказывает что на чудотворил я в ините гляньте кто шарит пожалуста. Причем именно в этом куске

 

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf";
call compile preprocessFileLineNumbers "custom\variables.sqf";                //Initilize the Variables (IMPORTANT: Must happen very early)
progressLoadingScreen 0.1;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\publicEH.sqf";                //Initilize the publicVariable event handlers
progressLoadingScreen 0.2;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf";    //Functions used by CLIENT for medical
progressLoadingScreen 0.4;
call compile preprocessFileLineNumbers "custom\compiles.sqf";                //Compile regular functions
call compile preprocessFileLineNumbers "ZSC\gold\ZSCinit.sqf";
progressLoadingScreen 0.5;
call compile preprocessFileLineNumbers "server_traders_cherno_11.sqf";                //Compile trader configs
progressLoadingScreen 1.0;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";   // Snap Pro строительство
call compile preprocessFileLineNumbers "custom\compiles.sqf";
progressLoadingScreen 1.2;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";
call compile preprocessFileLineNumbers "custom\compiles.sqf";

 

Что за ересь у вас в init.sqf?

Откуда ProgressLoadingScreen 1.2? если допустимо только до 1.

Почему такая куча Compile.sqf файлов. Один должен быть и все изменения должны быть в нем.

Та же ситуация с Variables.sqf. Почему их два? Должен быть один и в нем  делать изменения.

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


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

Благодарю уже разобрался когда 2 раз ставил )

Да там ересь просто в чем фикус так сказать. Как бы по логике программирования вызов (подключение) данной функции 2 не нужен ибо будет ошибка ) Это я знаю но как всегда есть но я ставил снап про и он не пахал пока я 2 раз не прописал как в гайде решил на авось прокатило но тока рынок упал из за этого чего я не заметил так как не проверял а логах ошибок нету. А потом завелся вот с этим мученьем и посматрел что по факту рынок уже вылетел и начал на него грешить) Щас просто все переставил и посматрел над каждым плагином где вылет происходит из за чего) исправил) Так что все ровно благодарю что ответили ) Танцы с бубном уже мне сняться. Хоть не чего сложного и нет ) 



Еще только вопрос что такое ProgressLoadingScreen аналог таймера выжидания или как . Корректнее зачем он нужен? По русски по идее монитор загрузки как я понимаю.

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


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

Поставил работает но та же проблема как 1 возникла. Собрать можно скок раз хочешь. Пути я прописал ошибку не выдает( Есть еще варианты ?

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


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

Спасибо



Спасибо

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


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

Подскажите почему собранный транспорт иногда разбирается а иногда нет?

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


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

Перезалейте архив, если у кого есть

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


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

MrMiBl На первой странице ссылка рабочая, или вот:

https://epochmod.com/forum/applications/core/interface/file/attachment.php?id=561

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


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

Есть у кого фильтры на этот скрипт? Кикает с createvehicle #0

В логах ничего кроме 

20.08.2017 14:47:45: Sonne (192.168.0.146:2304) f5de1035722c21968f378ff7ff7eb890 - #43 "AIN DOWN"];
};
};

Сам scripts

//new2
5 "EqualCheats"
5 "been infected!"
5 "FunctionsManager" !=" (isNull _grp) then { _grp = group ((allmissionobjects 'FunctionsManager') select 0); };\nif (!isNull _grp) then {\n_list = units "
5 "BattleFieldClearance"
5 "BIS_MPF_logic" !"BIS_MPF_logic = BIS_MPF_dummygroup createUnit"
5 "BIS_MPF_dummygroup" !="BIS_MPF_dummygroup = createGroup sideLogic;" !"BIS_MPF_logic = BIS_MPF_dummygroup createUnit"
5 "_codeAHOFF"
5 "_box" !="{show_loot_infiSTAR = !show_loot_infiSTAR;};\n};\nif(isNil \"show_boxes_infiSTAR\")then{show_boxes_infiSTAR = false;};\nfnc_BoxS = {\n"
5 "_first in"
5 "_commands"
5 "_createDialog" !="_dialog = createDialog \"BankDialog\";" !="_dialog = createdialog \"GivePlayerDialog\";"
5 "_agent setDamage 1"
5 "_unit createUnit"
5 "_closeDisplay =" !="((ctrlParent (_this select 0)) closeDisplay 9000);"
5 "rJIPrequest =" !"rJIPrequest = 'JIPrequest'"
5 "RUSTLER"
5 "Ruslter"
5 "Systems Online"
5 "HangenderRE"
5 "vilegaming"
5 "Lystic"
5 "setDammage"
5 "@TheWarZ"
5 "beeeh"
5 "dayz-injector-menu"
5 "Shadowy_NONRE"
5 "_cute"
5 "_stuff"
5 "_vgmenu"
5 "_func4"
5 "_genVar"
5 "_rand60"
5 "_first_term"
5 "_skarmory"
5 "_salamence"
5 "Init RE"
5 "Nigger"
5 "action_crate1"
5 "_dummyveh"
5 "try saving"
5 "setDamage -"
5 "setDamage +"
1 cutrsc !="layer == player)};\nwaituntil {!(isNull (findDisplay 46))};\n5 cutRsc [\"wm_disp\",\"PLAIN\"];\n((uiNamespace getVariable \"wm_disp\") di" !="cutRsc ['rscDynamicText', 'PLAIN'];" !=";\n_displayText = {\nprivate [\"_display\",\"_textLine\"];\n4099999 cutrsc [\"RSC_DZ_Messages\",\"plain\"];\n_display = uinamespace getvaria" !="holdBreath select 0) or (_turboKey select 0)) then {\n4100002 cutRsc [\"DZ_BlackScreen\",\"PLAIN\"];\n(uiNamespace getVariable \"DZ_Bla" !="Completed)}) then {\nif (toLower DZE_UI == \"vanilla\") then {3 cutRsc ['playerStatusGUI','PLAIN',3];} else {3 cutRsc ['playerStatu" !="cameraView in [\"INTERNAL\",\"EXTERNAL\",\"GUNNER\"]) then {\n80000 cutRsc [\"DZ_GroupIcons\",\"PLAIN\"];\n\n_display = uiNamespace getVariab" !="= _y;\n_y = _array select 0;\n_h = _array select 1;\n};\n\n_layer cutrsc [\"rscDynamicText\",\"plain\"];\n\n_display = uinamespace getvaria" !="\"ca\modules_e\functions\GUI\fn_infoText.sqf\"\n\n\n\n\n\n\n\n\n\n\n\n3100 cutrsc [\"rscInfoText\",\"plain\"];\n\n\n\n_text = _this;\n_textArrayUnicode" !="Group;\ndeleteGroup _myGroup;\n80000 cutText [\"\",\"PLAIN\"]; \n\n3 cutRsc [\"default\", \"PLAIN\",3];\n4 cutRsc [\"default\", \"PLAIN\",3];\n\n_b"
1 setVehicleInit 
1 createTeam
1 Waypoint !="oiter;\n_newDest = nil;\n_movingTo = _myDest;\n_array = 		[];\n_waypoint = [];\n\n_agentReset = false;\n\n_bodyStay = 	60;\n\n_agent disab"
1 createUnit !="roup);\n\n\n\n\n\n\n\n_group = createGroup west;\n_newUnit = _group createUnit [_class,getMarkerPos \"respawn_west\",[],0,\"NONE\"];\n_newUnit" !="eGroup sideLogic;\n\n\n\n\n\n\nBIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];\npublicVariable \"BIS"
1 markerText !=", [0,0,0]]) setMarkerText (_this select 0);\n				PVAH_AdminReq = [69,player];publicVa" !="\n_marker setMarkerTypeLocal \"DestroyedVehicle\";\n_marker setMarkerTextLocal format [\"%1\",if (_vehicle == _x) then {name _x} else " !="\"SupplyVehicle\";\n_vm setMarkerSizeLocal [0.8, 0.8];\n_vm setMarkerTextLocal format[\" %1\", getText (configFile >> 'CfgVehicles' >>"
1 addMPEventHandler

 

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


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

Есть у кого фильтры на этот скрипт? Кикает с createvehicle #0

В логах ничего кроме 


20.08.2017 14:47:45: Sonne (192.168.0.146:2304) f5de1035722c21968f378ff7ff7eb890 - #43 "AIN DOWN"];
};
};

Сам scripts


//new2
5 "EqualCheats"
5 "been infected!"
5 "FunctionsManager" !=" (isNull _grp) then { _grp = group ((allmissionobjects 'FunctionsManager') select 0); };\nif (!isNull _grp) then {\n_list = units "
5 "BattleFieldClearance"
5 "BIS_MPF_logic" !"BIS_MPF_logic = BIS_MPF_dummygroup createUnit"
5 "BIS_MPF_dummygroup" !="BIS_MPF_dummygroup = createGroup sideLogic;" !"BIS_MPF_logic = BIS_MPF_dummygroup createUnit"
5 "_codeAHOFF"
5 "_box" !="{show_loot_infiSTAR = !show_loot_infiSTAR;};\n};\nif(isNil \"show_boxes_infiSTAR\")then{show_boxes_infiSTAR = false;};\nfnc_BoxS = {\n"
5 "_first in"
5 "_commands"
5 "_createDialog" !="_dialog = createDialog \"BankDialog\";" !="_dialog = createdialog \"GivePlayerDialog\";"
5 "_agent setDamage 1"
5 "_unit createUnit"
5 "_closeDisplay =" !="((ctrlParent (_this select 0)) closeDisplay 9000);"
5 "rJIPrequest =" !"rJIPrequest = 'JIPrequest'"
5 "RUSTLER"
5 "Ruslter"
5 "Systems Online"
5 "HangenderRE"
5 "vilegaming"
5 "Lystic"
5 "setDammage"
5 "@TheWarZ"
5 "beeeh"
5 "dayz-injector-menu"
5 "Shadowy_NONRE"
5 "_cute"
5 "_stuff"
5 "_vgmenu"
5 "_func4"
5 "_genVar"
5 "_rand60"
5 "_first_term"
5 "_skarmory"
5 "_salamence"
5 "Init RE"
5 "Nigger"
5 "action_crate1"
5 "_dummyveh"
5 "try saving"
5 "setDamage -"
5 "setDamage +"
1 cutrsc !="layer == player)};\nwaituntil {!(isNull (findDisplay 46))};\n5 cutRsc [\"wm_disp\",\"PLAIN\"];\n((uiNamespace getVariable \"wm_disp\") di" !="cutRsc ['rscDynamicText', 'PLAIN'];" !=";\n_displayText = {\nprivate [\"_display\",\"_textLine\"];\n4099999 cutrsc [\"RSC_DZ_Messages\",\"plain\"];\n_display = uinamespace getvaria" !="holdBreath select 0) or (_turboKey select 0)) then {\n4100002 cutRsc [\"DZ_BlackScreen\",\"PLAIN\"];\n(uiNamespace getVariable \"DZ_Bla" !="Completed)}) then {\nif (toLower DZE_UI == \"vanilla\") then {3 cutRsc ['playerStatusGUI','PLAIN',3];} else {3 cutRsc ['playerStatu" !="cameraView in [\"INTERNAL\",\"EXTERNAL\",\"GUNNER\"]) then {\n80000 cutRsc [\"DZ_GroupIcons\",\"PLAIN\"];\n\n_display = uiNamespace getVariab" !="= _y;\n_y = _array select 0;\n_h = _array select 1;\n};\n\n_layer cutrsc [\"rscDynamicText\",\"plain\"];\n\n_display = uinamespace getvaria" !="\"ca\modules_e\functions\GUI\fn_infoText.sqf\"\n\n\n\n\n\n\n\n\n\n\n\n3100 cutrsc [\"rscInfoText\",\"plain\"];\n\n\n\n_text = _this;\n_textArrayUnicode" !="Group;\ndeleteGroup _myGroup;\n80000 cutText [\"\",\"PLAIN\"]; \n\n3 cutRsc [\"default\", \"PLAIN\",3];\n4 cutRsc [\"default\", \"PLAIN\",3];\n\n_b"
1 setVehicleInit 
1 createTeam
1 Waypoint !="oiter;\n_newDest = nil;\n_movingTo = _myDest;\n_array = 		[];\n_waypoint = [];\n\n_agentReset = false;\n\n_bodyStay = 	60;\n\n_agent disab"
1 createUnit !="roup);\n\n\n\n\n\n\n\n_group = createGroup west;\n_newUnit = _group createUnit [_class,getMarkerPos \"respawn_west\",[],0,\"NONE\"];\n_newUnit" !="eGroup sideLogic;\n\n\n\n\n\n\nBIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];\npublicVariable \"BIS"
1 markerText !=", [0,0,0]]) setMarkerText (_this select 0);\n				PVAH_AdminReq = [69,player];publicVa" !="\n_marker setMarkerTypeLocal \"DestroyedVehicle\";\n_marker setMarkerTextLocal format [\"%1\",if (_vehicle == _x) then {name _x} else " !="\"SupplyVehicle\";\n_vm setMarkerSizeLocal [0.8, 0.8];\n_vm setMarkerTextLocal format[\" %1\", getText (configFile >> 'CfgVehicles' >>"
1 addMPEventHandler

 

Ты пишешь что кикает с ошибкой createvehicle #0, а лог какой-то левый прилагаешь:

20.08.2017 14:47:45: Sonne (192.168.0.146:2304) f5de1035722c21968f378ff7ff7eb890 - #43 "AIN DOWN"];

Смотреть надо в файле createvehicle.log все строки, где есть #0 и исключения добавлять в файл createvehicle.txt, а не в scripts.txt

 

PS: Открываешь файл createvehicle.txt и в конец второй строки добавляешь !="MMT_Civ" !="TT650_Civ" !="CSJ_GyroC"

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

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


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

Прошло много лет, но я на днях наткнулся у себя в закромах на скрипты этого дополнения. Сразу же вспомнил это хорошее дополнение, особенно сейчас ностальгируя и играя в LOTD 1.0 ...  Вещь полезная, но как до сих пор многие не заметили, что транспорт создаётся читерский.
Почему? Потому что когда разбиваешь транспорт(например колесо у велосипеда) и собираешься его отремонтировать(выбираешь в меню "Отремонтировать транспорт") - транспорт ремонтировался мгновенно весь, без  использования необходимых запчастей. Это не есть ГУД :sad: 
Играю в синглплеер LOTD 1.0. 
Чтобы исправить созданный при помощи EVD транспорт, я позаимствовал функцию myDamageVehicle из файла u_progs.sqf от Kenza и Sanfan.
Немного переделал эту функцию

DamageVehicle = {  
private ["_object","_hitpoints","_selection","_dam","_leftpart"];
_object = _this select 0; 
_leftpart = ["HitRGlass","HitLGlass","HitLMWheel","HitLF2Wheel","HitRMWheel","HitRF2Wheel"];
if (_object isKindOf "AllVehicles") then {
    _hitpoints = _object call vehicle_getHitpoints;
    {       
        _selection = getText(configFile >> "cfgVehicles" >> typeOf _object >> "HitPoints" >> _x >> "name");
        _dam = 0;
        [_object,_selection,_dam] call fnc_veh_handleDam;
    } forEach _hitpoints;
    _object setvelocity [0,0,1];
    _object setFuel 1;
    _object call fnc_veh_ResetEH;
};    
_object;
};


и весь этот код поставил в самый верх файла EVD_deploy.sqf
В этом же файле, почти в конце, после строки 

_object setVehicleAmmo 0;

я добавил эту функцию

[_object] call DamageVehicle;

Вот и всё. Транспорт вы собираете и его можно чинить при помощи запчастей.

P.S. Также, если чего-то не хватает для постройки транспорта - написал небольшой код и на экране всегда показывает полный список материалов, которые необходимы для постройки транспорта. Смотрим скриншоты:

Чтобы получить полный список: заходим в файл EVD_deploy.sqf и почти в начале находим строки

if (_canDo) then {
    _materials = [_type] call EVDGetMaterials;


и сразу после них добавляем код

_select = count _materials; // считаем сколько всего материалов
    _i = 0;
    _text_out = "";
    for "_i" from 0 to ((_select) - 1) do {
        _recept = _materials select _i;
// Выделяем каждый материал в отдельности
        _rec = _recept select 0; // и отбираем название материала
        _rec_kol = _recept select 1; // и сколько его необходимо
// Далее всё плюсуется в текст 
        _rec_name = getText(configFile >> "CfgMagazines" >> _rec >> "displayName");
        _text_out = _text_out +" "+_rec_name + " - " + str(_rec_kol)+"шт.\n";
    };    


Теперь, чтобы всё увидеть на экране, в конце этого же файла находим строки:

_textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName");
cutText [format["Missing %1 more of %2",_missingQty, _textMissing], "PLAIN DOWN"];


удаляем их и вставляем на их место этот код

CloseDialog 0;
cutText [format["Для постройки транспортного средства, Вам необходимо:\n\n %1 ",_text_out], "PLAIN"];


Вот и всё. :relaxed: Возможно, у многих проблема игры на серверах именно из-за этого, что транспорт читерский спавнится, когда вы его собираете. Вот он и исчезает и появляются разные баги. Играю в синглплеер и никаких пропаж и багов.

Спасибо за внимание!

Да, чуть не забыл ... Свой код на список материалов и ещё кое-каких изменениях

Скрытый текст

_select = count _materials; // считаем сколько всего материалов
    _i = 0;
    _text_out = "";
    for "_i" from 0 to ((_select) - 1) do {
        _recept = _materials select _i;
// Выделяем каждый материал в отдельности
        _rec = _recept select 0; // и отбираем название материала
        _rec_kol = _recept select 1; // и сколько его необходимо
// Далее всё плюсуется в текст 
        _rec_name = getText(configFile >> "CfgMagazines" >> _rec >> "displayName");
        _text_out = _text_out +" "+_rec_name + " - " + str(_rec_kol)+"шт.\n";
    };    

я также использую в файле player_craftitem.sqf и всегда вижу полный список всего необходимого при постройке чего-либо. Например при постройке Дома, показывает весь материал, какие инструменты нужны и что рядом находится должно: бетономешалка и т.п.
 

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: 123new
      И так, ребятки, вот вам небольшая 'полезняшка' от меня, и совершенно бесплатно!
       
      Описание:

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      или создать их самим со следующим содержанием:
      Script.c
      /* Описание: Скрипт выдачи индивидуального стартового лута, скина игрока и точек спавна Автор: 123new Установка: 1. По пути: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\ создать папку 'CustomSpawnPlayerConfig' и поместить в нее 3 файла скрипта: Script.c Sets.c init_mod.c 2. В файле: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c в самом верху файла добавить: #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c" 3. В папке, обозначенной параметром запуска сервера '-profile=', поместить файл с именем CustomSpawnPlayerConfig.txt и заполнить его данными по следующему формату: UID|Skin_player|sets_numbers|points_spawns где UID - это steam64id от профиля игрока в steam Skin_player - точный id скина игрока (можно указать 0 для отключения опции) sets_numbers - номер сета со стартовым лутом (можно указать несколько через ';', указать один всего, либо указать 0 для отключения опции) points_spawns - координаты спавна игрока на карте в формате 'x y z' (можно указать несколько через ';', указать всего одну точку, либо указать 0 для отключения опции) Пример: 76561198141889254|SurvivorM_Oliver|1|12955.091797 16.115206 7993.588379 76561198141889256|SurvivorM_Oliver|1;2|14791.965820 76.481781 14041.661133;12029.079102 196.356125 7274.689941 76561198141889253|SurvivorM_Oliver|0|0 4. В файле Sets.c в папке: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\ настроить стартовый лут для ваших игроков и написать собственные сеты ВАЖНО: количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше) Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет! P.S. Прикрепить к соспавненному оружию магазин не получится, рабочего кода я не смог найти!! Если у вас папка активной миссии сервера отличается от dayzOffline.chernarusplus то переименуйте ее в строке, вписываемой в: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c */ class CustomSpawnPlayerConfig { private string Location_Directory_config = "$profile:"; // Расположение папки с конфигом скрипта private string Location_filename_config = "CustomSpawnPlayerConfig.txt"; // имя файла с конфигом скрипта private string default_log_block_name = "[CustomSpawnPlayerConfig] "; // Стандартный блок скрипта для идентификации с script.log private string disable_read_parameter = "0"; // Стандартное значение (без кавычек) для обозначения в файле конфига скрипта неиспользование параметра private string block_split_parameters_config = "|"; // Символ, обозначающий разделение параметров при чтении файла конфига private string block_split_multi_parameters_config = ";"; // Символ, обозначающий перечисление в одной ячейке параметра нескольких параметров при чтении файла конфига private bool enabled_loading_custom_spawnpoints = true; // Параметр, включающий и отключающий возможность использования приватной точки спавна для каждого игрока. В случае отключения кастомная точка спавна будет отключена для всех поумолчанию, вне зависимости от данных в конфиге! private bool enabled_loading_custom_sets = true; // Параметр, включающий и отключающий возможность использования приватного сета для каждого игроков. В случае отключения выдача сетов будет отключена для всех поумолчанию, вне зависимости от данных в конфиге, будет выдаваться только сет для всех игроков! private bool enabled_loading_custom_skins = true; // Параметр, включающий и отключающий возможность использования индивидуального стартового скина игрока для каждого игрока. В случае отключения эта возможность будет отключена для всех поумолчанию, вне зависимости от данных в конфиге! // ------------------------------------------------------------ // ---------------- NEXT CODE DON'T EDIT ----------------- // ------------------------------------------------------------ ref map<string, ref array<vector>> players_spawnpoints = new map<string, ref array<vector> >; ref map<string, ref array<int>> players_sets = new map<string, ref array<int> >; ref map<string, string> players_skins = new map<string, string>; private bool enabled_loaded_successfull_config = false; string Log_CustomSpawnPlayerConfig_GetDateTime() { private int year, month, day, hour, minute, second; GetYearMonthDay(year, month, day); GetHourMinuteSecond(hour, minute, second); string returned_message = "[" + day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2) + " - " + hour.ToStringLen(2) + "." + minute.ToStringLen(2) + "." + second.ToStringLen(2) + "] "; return returned_message; } bool Check_coords_disable(vector coord) { private bool ret_zn = false; private float pos_x = coord[0]; private float pos_y = coord[1]; private float pos_z = coord[2]; if ((pos_x == 0.0) & (pos_y == 0.0) & (pos_z == 0.0)) { ret_zn = true; } return ret_zn; } vector Set_Read_coords_disable() { return Vector(0.0, 0.0, 0.0); } void CustomSpawnPlayerConfig() { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + "CustomSpawnPlayerConfig initialize start!"); Read_Update_Config(); } void ~CustomSpawnPlayerConfig() { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + "CustomSpawnPlayerConfig work end, class closed!"); } void Read_Update_Config() { private string name_block_work = "[ReadAndUpdateSettings] "; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + " Started Reading config!"); private array<string> readed_lines_config = ReadFileConfig(); private bool check_normal_read = AnaliseFileConfig(readed_lines_config); if (check_normal_read) { LoadFileConfig(readed_lines_config); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "config readed successfull!"); enabled_loaded_successfull_config = true; } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "config read failed, work script disabled for players!"); enabled_loaded_successfull_config = false; } } array<string> ReadFileConfig() { private string name_block_work = "[ReadFileConfig] "; private array<string> readed_lines_config = new array<string>; readed_lines_config.Clear(); if (FileExist ( (Location_Directory_config + Location_filename_config) ) ) { private string line_content; FileHandle file = OpenFile((Location_Directory_config + Location_filename_config), FileMode.READ); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Open file config: " + (Location_Directory_config + Location_filename_config)); if (file != 0) { while ( FGets( file, line_content ) > 0 ) { readed_lines_config.Insert( line_content); } CloseFile(file); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! CAN'T OPEN FILE CONFIG : " + (Location_Directory_config + Location_filename_config)); } //readed_lines_config.Debug(); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! CAN'T FOUND FILE CONFIG OR DIRECTORY: " + (Location_Directory_config + Location_filename_config)); } return readed_lines_config; } bool AnaliseFileConfig(array<string> readed_lines_config) { private bool return_zn = true; private string name_block_work = "[AnaliseFileConfig] "; if (readed_lines_config.Count() > 0) { foreach (string line : readed_lines_config) { if (line.Contains(block_split_parameters_config)) { private array<string> splited_line = new array<string>; line.Split( block_split_parameters_config, splited_line ); if (splited_line.Count() == 4) { private string UID_player = splited_line.Get(0); private string default_skin_player = splited_line.Get(1); private string sets_numbers_player = splited_line.Get(2); private string points_spawn_player = splited_line.Get(3); if ((UID_player == "") || (default_skin_player == "") || (sets_numbers_player == "") || (points_spawn_player == "")) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Lines in Readed file is not correct, please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Readed file is have incorrect count parameters with a tag '" + block_split_parameters_config + "', please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Readed file can't have a tag '" + block_split_parameters_config + "', please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Config file is empty, fix your config script!"); return_zn = false; } return return_zn; } void LoadFileConfig(array<string> readed_lines_config) { private string name_block_work = "[LoadFileConfig] "; players_spawnpoints.Clear(); players_sets.Clear(); players_skins.Clear(); foreach (string line : readed_lines_config) { private array<string> splited_line = new array<string>; splited_line.Clear(); line.Split( block_split_parameters_config, splited_line ); private string UID_player = splited_line.Get(0); private string default_skin_player = splited_line.Get(1); private string sets_numbers_player = splited_line.Get(2); private string points_spawn_player = splited_line.Get(3); private array<vector> temp_players_spawnpoints = new array<vector>; temp_players_spawnpoints.Clear(); array<int> temp_players_sets = new array<int>; temp_players_sets.Clear(); array<string> temp_players_spawnpoints_string = new array<string>; temp_players_spawnpoints_string.Clear(); array<string> temp_players_sets_string = new array<string>; temp_players_sets_string.Clear(); if (points_spawn_player.Contains(block_split_multi_parameters_config)) { points_spawn_player.Split( block_split_multi_parameters_config, temp_players_spawnpoints_string ); } else { temp_players_spawnpoints_string.Insert(points_spawn_player); } foreach (string line_spawnpoint : temp_players_spawnpoints_string) { if (line_spawnpoint == disable_read_parameter) { temp_players_spawnpoints.Insert(Set_Read_coords_disable()); } else { temp_players_spawnpoints.Insert(line_spawnpoint.ToVector()); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Generated massive for " + UID_player + " with " + temp_players_spawnpoints.Count().ToString() + " spawnpoints."); if (sets_numbers_player.Contains(block_split_multi_parameters_config)) { sets_numbers_player.Split( block_split_multi_parameters_config, temp_players_sets_string ); } else { temp_players_sets_string.Insert(sets_numbers_player); } foreach (string line_set : temp_players_sets_string) { if (line_set == disable_read_parameter) { temp_players_sets.Insert(0); } else { temp_players_sets.Insert(line_set.ToInt()); } } if (default_skin_player == disable_read_parameter) { default_skin_player = "0"; } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Generated massive for " + UID_player + " with " + temp_players_sets.Count().ToString() + " sets."); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Detected for " + UID_player + " skin " + default_skin_player); players_spawnpoints.Insert(UID_player,temp_players_spawnpoints); players_sets.Insert(UID_player,temp_players_sets); players_skins.Insert(UID_player,default_skin_player); } } vector Load_And_Check_Spawnpoints(PlayerIdentity identity, vector pos_default) { private string name_block_work = "[Load_And_Check_Spawnpoints] "; private vector retun_pos = pos_default; if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_spawnpoints) { if ((players_spawnpoints.Count() > 0) && (enabled_loaded_successfull_config)) { if (players_spawnpoints.Contains(UID_P)) { private array<vector> readed_lines_config = new array<vector>; readed_lines_config = players_spawnpoints.Get(UID_P); private vector retun_pos_check = readed_lines_config.GetRandomElement(); if (Check_coords_disable(retun_pos_check)) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private spawn point. Will be used default spawn point!"); } else { retun_pos = retun_pos_check; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private spawn point: " + retun_pos.ToString()); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private spawnpoint for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private spawnpoints is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal spawnpoints from config file script!"); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn point: " + retun_pos.ToString()); return retun_pos; } string Load_And_Check_SpawnSkin_Player(PlayerIdentity identity, string characterName) { private string name_block_work = "[SelectStartSkinPlayer] "; private string retun_skin = characterName; if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_skins) { if (players_skins.Count() > 0) { if (players_skins.Contains(UID_P)) { private string readed_skin = players_skins.Get(UID_P); if (readed_skin == "0") { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private skin setting, will be used default setting game!"); } else { retun_skin = readed_skin; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private skin setting: " + retun_skin); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private skin setting for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private skin setting is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal skin player settings from config file script!"); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used skin: " + retun_skin); return retun_skin; } void Load_And_Check_StartLoadout(PlayerBase player) { private string name_block_work = "[SelectStartSetPlayer] "; private int use_set_id = -1; private PlayerIdentity identity = player.GetIdentity(); if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_sets) { if ((players_sets.Count() > 0) && (enabled_loaded_successfull_config)) { if (players_sets.Contains(UID_P)) { private array<int> readed_lines_config = new array<int>; readed_lines_config.Clear(); readed_lines_config = players_sets.Get(UID_P); private int chek_use_set_id = readed_lines_config.GetRandomElement(); if (chek_use_set_id == 0) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private set numbers. Will be used default set player! "); } else { use_set_id = chek_use_set_id; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private set number is: " + use_set_id.ToString()); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private sets for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private sets is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal loadout sets player settings from config file script! Will be used default loadout!"); } if (use_set_id >= 0) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn set with number is: " + use_set_id.ToString()); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn default start set without number. "); } StartSetsPlayers.StartSetsPlayer(player, use_set_id); } } private array<EntityAI> GetItemListinobject(PlayerBase player,EntityAI item, bool check_player) { array<EntityAI> EntityAI_list_items = new array<EntityAI>; EntityAI_list_items.Clear(); int attIdx = 0; int attCount = 0; EntityAI item_in_object; if ((player) && (check_player)) { attCount = player.GetInventory().AttachmentCount(); for (attIdx = 0; attIdx < attCount; attIdx++) { item_in_object = player.GetInventory().GetAttachmentFromIndex(attIdx); if ( item_in_object.IsItemBase() ) { EntityAI_list_items.Insert(item_in_object); } } } if ((item) && !check_player) { attCount = item.GetInventory().AttachmentCount(); for (attIdx = 0; attIdx < attCount; attIdx++) { item_in_object = item.GetInventory().GetAttachmentFromIndex(attIdx); if ( item_in_object.IsItemBase() ) { EntityAI_list_items.Insert(item_in_object); } } } return EntityAI_list_items; } void RemoveAllItems (PlayerBase player) { private array<EntityAI> ItemListPlayer = new array<EntityAI>; private array<EntityAI> ItemsForDelete = new array<EntityAI>; private EntityAI itemInHands_player = player.GetHumanInventory().GetEntityInHands(); if (itemInHands_player != NULL) { if (player.CanDropEntity(itemInHands_player) && player.GetHumanInventory().CanRemoveEntityInHands()) { // Print("ItemForDelete: " + itemInHands_player.ToString()); ItemsForDelete.Insert(itemInHands_player); } } ItemListPlayer = GetItemListinobject(player,NULL,true); if (ItemListPlayer.Count() > 0) { foreach(EntityAI ItemPlayer: ItemListPlayer) { private array<EntityAI> ItemInItemInInventory = GetItemListinobject(NULL,ItemPlayer,false); private CargoBase cargo = ItemPlayer.GetInventory().GetCargo(); if(cargo) { if (cargo.GetItemCount() > 0) { for (int f = 0; f < cargo.GetItemCount(); f++) { if(cargo.GetItem(f)) { ItemsForDelete.Insert(cargo.GetItem(f)); } } } } if (ItemInItemInInventory.Count() > 0) { foreach(EntityAI items_temp: ItemInItemInInventory) { if(items_temp) { ItemsForDelete.Insert(items_temp); } } } if(ItemPlayer) { ItemsForDelete.Insert(ItemPlayer); } } } if (ItemsForDelete.Count() > 0) { foreach(EntityAI item_temp: ItemsForDelete) { if(item_temp) { GetGame().ObjectDelete(item_temp); } } } } }; Sets.c
      class StartSetsPlayersConfig { void StartSetsPlayer(PlayerBase player,int use_set_id) { EntityAI itemCreated = NULL; EntityAI itemCreated1 = NULL; ItemBase itemCasted = NULL; switch( use_set_id ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1) { case 1: //Set with number 1 (Сет с номером 1) { My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку itemCreated = player.GetInventory().CreateInInventory("CoyoteBag_Green"); // Выдаем рюкзак и записываем в переменную itemCreated if (itemCreated) // Проверяем, создался ли рюкзак. Если он создался, переменная itemCreated будет не пуста и проверка пройдет { SetRandomHealthItem(itemCreated); // Выдаем рюкзаку рандомное качество itemCreated1 = itemCreated.GetInventory().CreateInInventory("Apple"); // Добавляем в инвентарь созданного рюкзака яблоко и записываем в переменную itemCreated1 if (itemCreated1) // Проверяем, создалось ли яблоко в рюкзаке, яблоко у нас с переменной itemCreated1 { SetRandomHealthItem(itemCreated1); // Выдаем яблоку рандомное качество } itemCreated1 = NULL; // Обнуляем значение переменной после работы с ней, чтобы следующая проверка прошла корректно itemCreated1 = itemCreated.GetInventory().CreateInInventory("Rag"); // Выдаем игроку бинты в рюкзак и записываем в переменную itemCreated1 if (itemCreated1) // Проверяем, создались ли бинты в рюкзаке, они у нас с переменной itemCreated1 { itemCasted = ItemBase.Cast(itemCreated1); // Выполняем преобразование в другой класс для работы с нужной нам функцией, поскольку в классе EntityAI нет нужной нам функции SetQuantity, а в подклассе ItemBase она есть. Предмет при этом так и остается один и тот же! itemCasted.SetQuantity(4); // Определяем количество для созданных бинтов как 4 штуки SetRandomHealthItem(itemCreated); // Выдаем бинтам рандомное качество, функция работает с классом EntityAI (см. в конфе файла) } } // переменную itemCreated не обнуляем далее, поскольку мы ее не используем в проверке ниже. itemCreated = player.GetInventory().CreateInInventory("TTSKOPants"); // Выдаем игроку штаны itemCreated = player.GetInventory().CreateInInventory("TTsKOJacket_Camo"); // Выдаем игроку куртку itemCreated = player.GetInventory().CreateInInventory("CombatBoots_Black"); // Выдаем игроку обувь //itemCasted = ItemBase.Cast(itemCreated); // Строка не нужна, закоментирована. используется для изменения класса EntityAI в ItemBase (чтобы нужные операции были доступны) itemCreated = player.GetInventory().CreateInInventory("CombatKnife"); // Выдаем игроку ножик в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("FNX45"); // Выдаем игроку FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); // Выдаем игроку магазины к FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); // Выдаем игроку магазины к FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); // Выдаем игроку магазины к AKM в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); // Выдаем игроку магазины к AKM в любой свободный слот в инвентаре itemCreated = NULL; // Обнуляем значение переменной после работы с ней, нужно если мы будем использовать ее далее itemCreated = player.GetHumanInventory().CreateInHands("akm"); // Выдаем игроку AKM в руки if (itemCreated) // Проверяем, создался ли АКМ { itemCreated.GetInventory().CreateAttachment( "PSO11Optic" ); // Выдаем игроку на AKM оптику ПСО 11 и крепим itemCreated.GetInventory().CreateAttachment( "AK_WoodBttstck" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим itemCreated.GetInventory().CreateAttachment( "AK_WoodHndgrd" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим itemCreated.GetInventory().CreateAttachment( "AK_Suppressor" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим } break; } case 2: //Set with number 2 (Сет с номером 2) { break; } case 3: //Set with number 3 (Сет с номером 3) { break; } case 4: //Set with number 4 (Сет с номером 4) { break; } case 5: //Set with number 5 (Сет с номером 5) { break; } case 6: //Set with number 6 (Сет с номером 6) { break; } default: //Default starting spawn set (Сет поумолчанию для всех игроков, если хотите назначить - добавляйте здесь!) { //My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку DefaultSets(player); // Для выдачи своих сетов по рандому всем игрокам, не прописанным в скрипте, раскомментировать эту строку break; } } } void SetRandomHealthItem(EntityAI itemCreated) // Функция генерирует и применяет для предмета рандомное значение здоровья! { if ( itemCreated ) { private int rndHlt = Math.RandomInt(55,6); itemCreated.SetHealth("","",rndHlt); } } void DefaultSets(PlayerBase player) // Функция выдает сеты игрокам, не прописанным в конфигурации скрипта!!! { EntityAI itemCreated = NULL; EntityAI itemCreated1 = NULL; ItemBase itemCasted = NULL; // ниже пример, если вам нужно задать свои точки спавна для всех игроков. Этот код можно также использовать и для каждого сета индивидуально! // Код закомментирован, если это надо - раскомментируйте! // начало кода точек спавна игрока /* private array <vector> spawnpoints = {"7500 0 7500", "7500 0 7500","7500 0 7500", "7500 0 7500"}; private vector selected_spawnpoint = spawnpoints.GetRandomElement(); player.SetPosition(selected_spawnpoint); */ // конец кода точек спавна игрока private int random_set_number = Math.RandomIntInclusive(1,6); // генерируем рандом номер сета от 1 до 6 включительно (по значениям блоков case ниже) switch( random_set_number ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1) { case 1: //Set with number 1 (Сет с номером 1) { break; } case 2: //Set with number 2 (Сет с номером 2) { break; } case 3: //Set with number 3 (Сет с номером 3) { break; } case 4: //Set with number 4 (Сет с номером 4) { break; } case 5: //Set with number 5 (Сет с номером 5) { break; } case 6: //Set with number 6 (Сет с номером 6) { break; } default: //Default starting spawn set (Сет поумолчанию для всех игроков, в случае если ни один из сетов выше не выпал. { //My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку break; } } } } init_mod.c
      #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\Script.c" #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\Sets.c" ref CustomSpawnPlayerConfig My_Custom_Spawn_Parameters = new CustomSpawnPlayerConfig(); ref StartSetsPlayersConfig StartSetsPlayers = new StartSetsPlayersConfig(); modded class CustomMission { override void OnInit () { super.OnInit(); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(My_Custom_Spawn_Parameters.Read_Update_Config, 120000, true); // Обновление настроек скрипта кастомных спавнов, 1 минута = 60000 } override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) { pos = My_Custom_Spawn_Parameters.Load_And_Check_Spawnpoints(identity, pos); characterName = My_Custom_Spawn_Parameters.Load_And_Check_SpawnSkin_Player(identity, characterName); super.CreateCharacter(identity, pos, ctx, characterName); return m_player; } override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { super.StartingEquipSetup(player, clothesChosen); My_Custom_Spawn_Parameters.Load_And_Check_StartLoadout(player); } }  

       
      2. В файле:
      {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c в самом верху файла добавить:
      #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c" Чтобы получилось примерно так

       
      3. В папке, обозначенной параметром запуска сервера '-profile=', поместить файл с именем CustomSpawnPlayerConfig.txt
      и заполнить его данными по следующему формату:
      UID|Skin_player|sets_numbers|points_spawns где UID - это steam64id от профиля игрока в steam
      Skin_player - точный id скина игрока (можно указать 0 для отключения опции)
      sets_numbers - номер сета со стартовым лутом (можно указать несколько через ';', указать один всего, либо указать 0 для отключения опции)
      points_spawns - координаты спавна игрока на карте в формате 'x y z' (можно указать несколько через ';', указать всего одну точку, либо указать 0 для отключения опции)
      Пример:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      76561198141889254|SurvivorM_Oliver|1|12955.091797 16.115206 7993.588379 76561198141889256|SurvivorM_Oliver|1;2|14791.965820 76.481781 14041.661133;12029.079102 196.356125 7274.689941 76561198141889253|SurvivorM_Oliver|0|0  
      4. В файле Sets.c в папке:
      {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\ настроить стартовый лут для ваших игроков и написать собственные сеты
      ВАЖНО: количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше)
      Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет!
      Поумолчанию в функции default вызывается функция DefaultSets, позволяющая рандомно выбирать любой из сетов для игроков, которым сет не задан в конфигурации скрипта. Принцип составления сетов такой же, как и выше. Если будете пользоваться этим, обратите вниманием на строку:
      private int random_set_number = Math.RandomIntInclusive(1,6); Эта функция генерирует число от 1 до 6 включительно. Соответственно если сетов будет больше 6, то число надо корректировать и тут тоже!
       
      P.S. Прикрепить к соспавненному оружию магазин не получится, рабочего кода я не смог найти!!
       
      Если у вас папка активной миссии сервера отличается от dayzOffline.chernarusplus то переименуйте ее в строке, вписываемой в:
              {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c
              {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c
       
      Благодарности: Товарищу Mizev за его первоначальные гайды в группе VK при появлении в сети серверной части игры
       
       
    • Автор: Akie
      Вопрос в чем, как тому или иному предмету дать свойство, чтобы при использовании в инвентаре он удалялся и давал хумку, пытался сделать сам, сделал удаление предмета через функцию player removeMagazine, потом проверку на количество хумки, то есть, если хумка больше 2500 то _positive, если меньше то _negative, прописал выдачу в зависимости от условия к примеру :
      if (_Positive) then { player setVariable["humanity",(_HumanityVal+5000),true] }; прикрутил экзекут скрипта к Overwrites click actions, кнопка появилась, но при нажатии, ничего не происходит, ни удаления предмета, ни начисления хуманити, куда копать?

      Понимаю, что чего-то не хватает, а вот чего понять не могу, вот сам скрипт:
       
      private ["_item","_HumanityVal","_Negative","_Positive"] _item = "Итем класс нейм"; player removeMagazine _item; _HumanityVal = player getVariable["humanity",0]; if (_HumanityVal <= -2500) then {_Negative = true;}; if (_HumanityVal >= 2500) then {_Positive = true;}; if (_Positive) then { player setVariable["humanity",(_HumanityVal+5000),true] }; if (_Negative) then { player setVariable["humanity",(_HumanityVal-5000),true] }; Подскажите пожалуйста, что не так)
    • Автор: DrTauren
      На нашем сайте предусмотрена возможность рекламирования вашего игрового сервера/сайта/програмного обеспечения при помощи баннеров и ссылок.
       
      Баннеры под первым сообщением темы ↓
       
      Баннер на главной странице (над чатом) ↓
       
      Ссылки над первым сообщением темы ↓
       
      Ссылка на главной странице (над чатом) ↓
       
       

      Заявку вы можете заполнить в этой же теме, либо написать мне в ЛС.
      Любые сообщения не по теме запрещены.
    • Автор: BorizzK
      Вобщем в процессе работы сервера происходят рандомные динамические события и вместе с ними на карте спавнятся некоторые обьекты
      Если время их жизни истекает и настает время нового события и в радиусе видимости нет игроков обьекты удаляются с карты
      Но
      Если выключение корректно (запланированный рестарт например), вызов функции удаления происходит из деструктора класса
      Все отрабатывает
      Ошибок нет
      Но после рестарта некоторые обьекты на месте
      Тогда я замутил функцию-задержку с проверкой
       
      float TimeWait(Object object, float timeW) { float cTick = GetGame().GetTickTime() + timeW; while(object || GetGame().GetTickTime() < cTick ) { if ( GetGame().GetTickTime() >= cTick ) break; } return GetGame().GetTickTime(); } и вызываю ее
       
      if (object) tW = TimeWait(object, timeW); задержка реально происходит - делал ее 60 секунда да же
      НО! обьекты эти после рестарта опять на месте
       
      Пока придумал костыль - сохраняю в профиль сервера при каждом спавне координаты и тайпнеймы заспавленных обьектов и при запуске в конструкторе проверяю это место и грохаю обьекты по тайпнеймам - места безлюдные и открытые, лагерей и тп там быть не может - потому в принципе ничего лишнего туда попасть не может
      к тому же это полезно в случае крашей
       
      и все же
      почему обьекты не удаляются при завершении работы сервера?
       
  • Наш выбор

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

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

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