Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
123new

[DayZ 0.60, 0.61, 0.62] Скрипт на спавн авто с очисткой

Recommended Posts

В данной теме напишу простенький гайд о том, как самому на своем собственном сервере DayZ установить костомный (мой) скрипт на спавн, респавн и чистку транспорта.

 

Гайд пригодится тем, кто сам делает свою сборку сервера, либо по каким-то причинам пользуется не моей сборкой сервера (где это уже сделано), а чьей-либо еще. Обращаю ваше внимание на тот факт, что часть файлов, описанных в гайде, у вас могут уже быть вынесены в другое место или названы несколько иначе (это зависит от сборки сервера, которую вы используете, например, в сборке dankdayz вся mpmissions вынесена в отдельный файл в addons сервера), гайд основывается на чистых серверных файлах игры и отталкивается от них.
Гайд сделан для версий игры с серверной частью 0.60-0.62, но может быть совместим и с другими версиями игры, если файлы серверной части игры не поменяли своего текущего месторасположения и содержания. Гайд составлен по версии серверных файлов игры 0.62 чистой "девственной" и не правленой никем версии игры.

Напоминаю заранее, в моих серверных файлах версий 0.60, 0.61 и 0.62 из моих гайдов на данном форуме это уже сделано и делать это не нужно!!!

Нам понадобятся:

1. Notepad++ https://notepad-plus-plus.org/download/

2. Ваши серверные файлы игры

 

И так, приступим.

1. Первое, что нам понадобится - создать сам скрипт. Создаем по пути: "MPMissions\dayz_Auto.ChernarusPlus\"  папку "scripts" , в ней папку "custom"  , и в ней файл с именем "SpawnCars.sqf" . Если такие папки у вас уже имеются, просто не создавайте их, а перейдите в них. Если файл с там именем уже имеется у вас, задайте ему другое имя.

2. Вписываем в созданный файл код следующего содержания (либо скачайте его):

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

diag_log format [" SpawnCar: Reading Settings ..."];
/*
	Car Spawner for DayZ Standalone v 0.60.133.913 and high versions
	author: 123new
	Thanks for help: user BorizzK from s-platoon.ru for help and tests parts script and all community for this. 
	
	Install:
	.\mpmissions\init.sqf
	Add in end file:
	init_spawn_cars = compile preprocessFileLineNumbers "scripts\custom\SpawnCars.sqf";
	Call init_spawn_cars; 	
	and place this script file in:
	.\mpmissions\{your mission name}\scripts\custom\SpawnCars.sqf
	WARNING: add after string: dbInitEconomy
	CAUTION: When you are on the spawn cars in the game server with version 0.60 and higher (0.61 and 0.62 version it blocks events.xml) the transport can be re-spelled and re-spelled by the server itself, regardless of the script. For correct operation it is highly recommended to disable the official transport spawn!
	
	Info about script:
	This script will scan the server database for the specified transport types, push it to the server along with its parts in case of shortage, and clean the destroyed vehicles.
	A first massives - details for car (all details will be spawned)
	A second massives - possible spawn points of the technique (the spawn point will be selected randomly)
	A third (end) massive - configuration: specify the number of cars on writed type, a list of possible spawn points car for writed type and massive from first block with parts car.
	
	Settings format:
	A first massives: [count loot,type loot]
	A second massives: [(coordinate x),(coordinate y),(coordinate z)] 
	A third (end) massive: [max count this type car, type car(classname) or massive types car for random select, selected second massive name, selected first massive name]
	If add after in 'A third (end) massive' 5 and more massives elements with details car, script will be select random details.
*/

// MAIN SETTINGS

_enable_detect_old_ruined_cars = true; // Enable detect old ruined cars in server and delete him
_enable_detect_old_cars_in_point_spawn_in_meters = true; // Enable detect old cars in point spawn in writed meters and secure him for spawn new car 

_meters_check_old_car_in_point_spawn = 10;  // How many meters for chack old car in point spawn - wored only with _enable_detect_old_cars_in_point_spawn_in_meters = true - not recommend set up more 15 meters
_check_damage_for_delete_ruined_car = 1; // How many damage for object car for delete him from server (for set up min 0.1 max 1) - wored only with _enable_detect_old_ruined_cars = true


///////////////////////////  --->  A first massives   <--- ///////////////////////////
//	(count this detail in vehicle),(type detail vehicle)

_items_car_Volga = [
	[4,"CivSedanWheel"],
	[1,"CivSedanDoors_Driver"],
	[1,"CivSedanDoors_CoDriver"],
	[1,"CivSedanDoors_BackLeft"],
	[1,"CivSedanDoors_BackRight"],
	[1,"CivSedanHood"],
	[1,"CivSedanTrunk"],
	[1,"CarRadiator"],
	[1,"CarBattery"],
	[1,"SparkPlug"],
	[2,"HeadlightH7"]
];

_items_car_Niva = [
	[4,"HatchbackWheel"],
	[1,"HatchbackDoors_Driver"],
	[1,"HatchbackDoors_CoDriver"],
	[1,"HatchbackHood"],
	[1,"HatchbackTrunk"],
	[1,"CarRadiator"],
	[1,"CarBattery"],
	[1,"SparkPlug"],
	[1,"HeadlightH7"]
];

_items_car_Bus = [
	[2,"TransitBusWheel"],
	[2,"TransitBusWheelDouble"],
	[1,"TruckBattery"],
	[1,"GlowPlug"],
	[1,"TruckRadiator"],
	[1,"LightBulb"],
	[1,"EngineBelt"]
];

_items_car_V3S = [
	[4,"V3SWheel"],
	[4,"V3SWheelDouble"],
	[1,"V3SDoors_Driver"],
	[1,"V3SDoors_CoDriver"],
	[1,"V3SHood"],
	[1,"TruckBattery"],
	[2,"LightBulb"],
	[1,"EngineBelt"],
	[1,"HeadlightH7"]
];

_items_car_V3S_Blue = [
	[4,"V3SWheel"],
	[4,"V3SWheelDouble"],
	[1,"V3SDoors_Driver_Blue"],
	[1,"V3SDoors_CoDriver_Blue"],
	[1,"V3SHood_Blue"],
	[1,"TruckBattery"],
	[2,"LightBulb"],
	[1,"EngineBelt"],
	[1,"HeadlightH7"]
];

_items_car_V3S_Grey = [
	[4,"V3SWheel"],
	[4,"V3SWheelDouble"],
	[1,"V3SDoors_Driver_Grey"],
	[1,"V3SDoors_CoDriver_Grey"],
	[1,"V3SHood_Grey"],
	[1,"TruckBattery"],
	[2,"LightBulb"],
	[1,"EngineBelt"],
	[1,"HeadlightH7"]
];

_items_car_V3S_Orange = [
	[4,"V3SWheel"],
	[4,"V3SWheelDouble"],
	[1,"V3SDoors_Driver_Orange"],
	[1,"V3SDoors_CoDriver_Orange"],
	[1,"V3SHood_Orange"],
	[1,"TruckBattery"],
	[2,"LightBulb"],
	[1,"EngineBelt"],
	[1,"HeadlightH7"]
];

///////////////////////////  --->   A second massives   <--- ///////////////////////////
//	massives points spawn for vehicles

_points_car_Volga = [
	[10493.7,2348.17,0],
	[10150.7,1810.41,0],
	[11986.2,3839.67,0],
	[12883.2,6259.25,0],
	[12937.6,10185.7,0],
	[13845.8,13216.7,0],
	[4163.03,11104.75,0],
	[5954.25,10366.5,0],
	[3751.32,8858.37,0],
	[3048.92,7787.31,0],
	[2583.23,5073.8,0],
	[2654.09,5289.31,0]	
];
 
_points_car_Niva = [
	[13891.7,13425.6,0],
	[11262.4,12212.2,0],
	[4794.11,2539.87,0],
	[10740.4,10788.2,0],
	[10661.3,7994.43,0],
	[6063.77,7871.36,0],
	[4519.95,8291.32,0],
	[2182.85,3307.73,0],
	[3658.2,2194.58,0],
	[6855.9,2471.24,0],
	[6565.1,2547.52,0],
	[4262.06,11235,0],
	[6255.8,3256.48,0],
	[6682.32,3580.23,0],
	[13785.5,2930.17,0]	
];

_points_car_Bus = [
	[12275.8,9123.41,0],
	[11885.6,12469.2,0],
	[7185,7675.18,0],
	[4795.56,10250.1,0],
	[2716.53,10031.4,0],
	[2589.18,6355.03,0],
	[1672.24,3843.93,0],
	[1878.72,2254.03,0],
	[4334.19,2462.08,0],
	[5691.65,2579.14,0],
	[7805.4,3534.9,0],
	[12238.9,12635,0]
];

_points_car_V3S = [
	[4767.29,9594.32,0],
	[13980.3,2931.02,0],
	[12238.9,12635,0],
	[12229.7,12590.2,0],
	[7216.52,7755.26,0],
	[3711.64,5969.98,0],
	[4392.4,10510.4,0],
	[1741.44,7930.12,0],
	[5590.24,2699.39,0]
];

///////////////////////////  --->   A third (end) massive   <--- ///////////////////////////
//	(max count vehicles this type in server),(type vehicle or massive types for random select),(massive coords for spawn vehicle),(massive items for this car)
//  If add 5 and more massives elements with details car, script will be select random details.

_types_car_V3S = ["V3S_Cargo_Orange","V3S_Cargo_Blue","V3S_Cargo_Grey","V3S_Cargo"];  /// massive types cars for random select
_types_car_V3S_Chassis = ["V3S_Chassis_Orange","V3S_Chassis_Blue","V3S_Chassis_Grey","V3S_Chassis"];  /// massive types cars for random select

_CarsSpawnConfig = [
	[10,"CivilianSedan", _points_car_Volga, _items_car_Volga],
	[12,"TransitBus", _points_car_Bus, _items_car_Bus],
	[7,"OffroadHatchback", _points_car_Niva, _items_car_Niva],
	[4,_types_car_V3S, _points_car_V3S, _items_car_V3S,_items_car_V3S_Blue,_items_car_V3S_Grey,_items_car_V3S_Orange],
	[5,_types_car_V3S_Chassis, _points_car_V3S, _items_car_V3S,_items_car_V3S_Blue,_items_car_V3S_Grey,_items_car_V3S_Orange]
];

{
	if ((count _x) > 4) then
	{
		_rand = floor (random ((count _x) - 1));
		while {(_rand < 4)} do
		{				
			_rand = floor (random ((count _x) - 1));
		};
		_selected_items_car = _x select _rand;
	};
} foreach _CarsSpawnConfig;

////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////  --->   NEXT CODE DON'T EDIT   <--- ///////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////

diag_log format [" SpawnCar: Readed Settings! Start spawn car!"];

fnc_random_int_select =
{
	private["_min","_max","_rand"];
	_min = _this select 0;
	_max = _this select 1;
	_rand = round (random _max);
	
	if ((_rand < _min) or (_rand > _max)) then
	{
		while {(_rand < _min) or (_rand > _max)} do
		{				
			_rand = round (random _max);
		};
	};
	_rand
};

_massive_writed_alltypes_cars = [];
_massive_writed_allcoords_cars = [];

fnc_spawnCar = 
{
	_SelectedLine = _this;
	_selected_count_car = _this select 0;
	_selected_type_car = _this select 1; 
	_selected_points_car = _this select 2;
	_selected_items_car = _this select 3;
	_count_incar_loot = 0;
	_count_aroundcar_loot = 0;
	_count_selected_type_car_in_server = 0;	
		
	_count_selected_type_car_in_server = 0;
	if((typeName _selected_type_car) == "ARRAY") then
	{
		{
			_count_selected_type_car_in_server = _count_selected_type_car_in_server + (count (allMissionObjects _x));
		} forEach _selected_type_car;
		diag_log format [" SpawnCar: %2 old cars of types '%1' has been detected on the server",_selected_type_car,_count_selected_type_car_in_server];
	} else
	{
		_count_selected_type_car_in_server = count (allMissionObjects _selected_type_car); 
		diag_log format [" SpawnCar: %2 old cars of type '%1' has been detected on the server",_selected_type_car,_count_selected_type_car_in_server];
	};

	if (_enable_detect_old_cars_in_point_spawn_in_meters) then
	{
		_temp_selected_points_car = _selected_points_car;
		{
			_selected_point_car = _x;
			{
				if (((typeOf _x) in _massive_writed_alltypes_cars) && (_selected_point_car in _massive_writed_allcoords_cars)) then 
				{
					if (count _selected_points_car > 0) then 
					{
						_selected_points_car = _selected_points_car - [_selected_point_car];
						diag_log format [" SpawnCar: Detected previously spawned car in server: type '%1' at position %2 - point spawn %3 deleted from list spawn this type!",(typeOf _x),(getPos _x),_selected_point_car];
					} else
					{
						diag_log format [" SpawnCar: Detected previously spawned car in server: type '%1' at position %2 - point spawn %3 can't be deleted from list spawn this type because spawnpoints this type allready <= 0!",(typeOf _x),(getPos _x),_selected_point_car];
					};
				};
			} forEach (_selected_point_car nearObjects _meters_check_old_car_in_point_spawn);
		} forEach _temp_selected_points_car;
	};
	
	if (_count_selected_type_car_in_server < _selected_count_car) then
	{
		_selected_count_car = _selected_count_car - _count_selected_type_car_in_server;
		if((typeName _selected_type_car) == "ARRAY") then
		{
			diag_log format [" SpawnCar: Required spawn %2 cars of type list '%1'",_selected_type_car,_selected_count_car];
		} else
		{
			diag_log format [" SpawnCar: Required spawn %2 cars of type '%1'",_selected_type_car,_selected_count_car];
		};
		if (count _selected_points_car > 0) then 
		{
			for "_j" from 1 to _selected_count_car do
			{
				_car_in_server = NULL; 
				if (count _selected_points_car > 0) then 
				{
					_selected_type_car_for_spawn = "";
					if((typeName _selected_type_car) == "ARRAY") then
					{
						_selected_type_car_for_spawn = _selected_type_car select ([0,(count _selected_type_car)-1] call fnc_random_int_select);
					} else
					{
						_selected_type_car_for_spawn = _selected_type_car;
					};
					if ((count _SelectedLine) > 4) then
					{
						_selected_items_car = _SelectedLine select ([3,(count _SelectedLine)-1] call fnc_random_int_select);
						diag_log format [" SpawnCar: Selected for next car massive details: %1 ",_selected_items_car];
					};
					_selected_point_car = _selected_points_car select ([0,(count _selected_points_car)-1] call fnc_random_int_select);
					_car_in_server = createvehicle [_selected_type_car_for_spawn, _selected_point_car, [], 0, "CAN_COLLIDE"];
					if !(isNull _car_in_server) then 
					{
						_selected_points_car = _selected_points_car - [_selected_point_car];
						_car_in_server setDir floor(random 360);
						_selected_name_car = (displayName _car_in_server);
						_originalPos = getPosATL _car_in_server;
						_Damage = random 0.7;
						_map_pos_car = mapGridPosition _car_in_server;
						
						{
						   _count_sel_loot = _x select 0;
						   _type_sel_loot = _x select 1;
						   for [{_i = 0}, {_i < _count_sel_loot}, {_i = _i + 1}] do
						   {
								_loot_car = NULL;
								_loot_car = _car_in_server createInInventory _type_sel_loot;
								if (isNull _loot_car) then 
								{
									_loot_car = createvehicle [_type_sel_loot, _originalPos, [], 5, "CAN_COLLIDE"];
									if ((floor(random 4)) >= 2) then
									{
										_Damage_loot = random 0.7;
										_loot_car setDamage _Damage_loot; 
									};
									_count_aroundcar_loot = _count_aroundcar_loot + 1;
								} else 
								{
									_count_incar_loot = _count_incar_loot + 1;
								};
						   };
						} foreach _selected_items_car;
						diag_log format [" SpawnCar: Spawned %1 in %2 with %3 loot in Car and %4 loot around car ",_selected_name_car,_map_pos_car,_count_incar_loot,_count_aroundcar_loot];
					} else
					{
						diag_log format [" SpawnCar: Type car '%1' is not spawned in server, because when i try spawn car in point '%2' exist errors!",_selected_type_car_for_spawn,_selected_point_car];
					};
				} else
				{
					if((typeName _selected_type_car) == "ARRAY") then
					{
						diag_log format [" SpawnCar: Random type car from array '%1' is not can be spawned in server, because setuped count cars this types > possible count points spawn this type!",_selected_type_car];
					} else
					{
						diag_log format [" SpawnCar: Type car '%1' is not can be spawned in server, because setuped count cars this type > possible count points spawn this type!",_selected_type_car];
					};
				};
			};
		} else
		{
			if((typeName _selected_type_car) == "ARRAY") then
			{
				diag_log format [" SpawnCar: Spawn car from type list '%1' is not possible because not have possible points to spawn.",_selected_type_car];
			} else
			{
				diag_log format [" SpawnCar: Spawn car type(s) '%1' is not possible because not have possible points to spawn.",_selected_type_car];
			};
		};
	} else
	{
		if((typeName _selected_type_car) == "ARRAY") then
		{
			diag_log format [" SpawnCar: Random type car from array '%1' is not need spawn in server, because cars this types allready is max (or more max) in server!",_selected_type_car];
		} else
		{
			diag_log format [" SpawnCar: Type car '%1' is not need spawn in server, because this cars allready is max (or more max) in server!",_selected_type_car];
		};
	};
};

if (_enable_detect_old_ruined_cars) then
{
	_deleted_ruined_Cars = 0;
	{
		if (damage _x == _check_damage_for_delete_ruined_car) then
		{
			deleteVehicle _x;
			_deleted_ruined_Cars = _deleted_ruined_Cars + 1;
		};
	} forEach (allMissionObjects "Car");
	if (_deleted_ruined_Cars > 0) then {
		diag_log format [" SpawnCar: Deleted %1 old ruined cars from server",_deleted_ruined_Cars];
	};
};

if (_enable_detect_old_cars_in_point_spawn_in_meters) then
{
	{
		if((typeName(_x select 1)) == "ARRAY") then
		{
			{
				if (!(_x in _massive_writed_alltypes_cars)) then
				{
					_massive_writed_alltypes_cars = _massive_writed_alltypes_cars + [_x];
				};
			} foreach (_x select 1);
		} else
		{
			if (!((_x select 1) in _massive_writed_alltypes_cars)) then
			{
				_massive_writed_alltypes_cars = _massive_writed_alltypes_cars + [(_x select 1)];
			};
		};
		{
			if (!(_x in _massive_writed_allcoords_cars)) then
			{
				_massive_writed_allcoords_cars = _massive_writed_allcoords_cars + [_x];
			};
		} foreach (_x select 2);
	} foreach _CarsSpawnConfig;
};

{
   _x call fnc_spawnCar;
} foreach _CarsSpawnConfig;

3. Создаем по пути: "MPMissions\dayz_Auto.ChernarusPlus\"  папку "scripts" , и в ней файл с именем "compiles.sqf" . Если такая папка у вас уже имеются, просто не создавайте ее,  а перейдите в нее. Если файл с там именем уже имеется у вас, то не создавайте его, а допишите информацию со следующего пункта инструкции в конец файла!
4. Вставляем в файл следующую строку:

init_spawn_cars = compile preprocessFileLineNumbers "scripts\custom\SpawnCars.sqf";

5. Открываем по указанному далее пути файл в "Notepad++": "MPMissions\dayz_Auto.ChernarusPlus\init.sqf". Находим в файле строки с

call compile preprocessFileLineNumbers

5. Вставляем после всех "call compile preprocessFileLineNumbers" следующее:

call compile preprocessFileLineNumbers "scripts\compiles.sqf";
_Enable_SPAWNER_CARS = true; // Кастомный скрипт спавна транспорта (true - включить, false - выключить)

6. В этом же файле находим строки:

simulWeatherSync;
dbInitEconomy [true];
setTimeForScripts 0.03;

7. Добавляем после них:

if (_Enable_SPAWNER_CARS) then {
	Call init_spawn_cars; 
};

Вот и все.

 

ВАЖНО:

Перед активацией скрипта отключите официальный спавнер транспорта сервера из официальной системы сервера игры. Инструкция есть тут:

 

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

_Enable_SPAWNER_CARS = false; // Кастомный скрипт спавна транспорта (true - включить, false - выключить)

Все настройки по спавну транспорта есть в самом файле скрипта, который в п. 2 инструкции вы и создавали. Надеюсь, сложности с его настройкой не возникнет, пояснения там имеются.

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites







Create an account or sign in to comment

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

Create an account

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

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By 123new
      Много вопросов на данную тему наблюдаю от новичков, попробую прояснить немного сей вопрос.
       
      Предположим. что вы уже знаете на каких координатах вам надо спавнить определенное здание или объект\животное\бота, с каким углом поворота. И так. эта тема для вас.
       
      Сразу делаю пометку, метод, который добавили нам разработчики игры в патче 1.15, очень хорошо описал наш товарищ в сообщении форума:
      Рекоммендую вам использовать именно его!
      Ниже опубликованы старые методы.
       
      Если вы с расставили их с модифицированной версии Offline (Offline by Arksenor это называется), то вы получили и нашли код вида:
      GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13260.040039 0.0 3670.984131").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13262.756836 0.0 3645.180176").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13265.441406 0.0 3619.531982").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13268.124023 0.0 3593.995361").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13270.844727 0.0 3568.186523").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13273.514648 0.0 3542.561279").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13276.195313 0.0 3517.048828").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13278.399414 0.0 3496.097900").SetOrientation("-96.000000 0.000000 0.000000"); Здесь (по примеру первой строки) 1 значение в скобках - id постройки/объекта, 2 значение - координаты в формате X Y Z, разделенные пробелом, 3 - значение поворота примерно в том же формате.
      Как это делать в Offline - статья от автора Offine:
      https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Add-custom-objects-to-your-server-or-mission
       
      И так, инструкция:
      1. Добавляем в начало init.c файла в вашей mpmissions следующий код:
      #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\spawn_buildings.c" 2. Создаем в папке вашей активной mpmissions файлик spawn_buildings.c и заполняем его следующей информацией.
      void SpawnObject( string type, vector position, vector orientation ) { private string NameBlockLog = "[CreateObject] "; private string InfoLog = ""; if(type != "") { auto obj = GetGame().CreateObject( type, "0 0 0" ); if(obj) { if ((position[0] != 0) && (position[1] != 0) && (position[2] != 0)) { obj.SetPosition( position ); obj.SetOrientation( orientation ); obj.Update(); if (obj.CanAffectPathgraph()) { obj.SetAffectPathgraph(true, false); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(GetGame().UpdatePathgraphRegionByObject, 100, false, obj); } InfoLog = "[Type: '" + obj.GetType() + "' Position: '" + obj.GetPosition().ToString() + "' Orientation: '" + obj.GetOrientation().ToString() + "']"; Write_Log(NameBlockLog + " Object has been created successfully! Info " + InfoLog); } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed position. Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed type. Info " + InfoLog); } } void Write_Log(string message) { Print(String(message)); } 3. Открываем созданный нами файл,  и в конце файла дописываем следующее:
      void SpawnAirfeeldBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } void SpawnKrasnoBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } Где после void - название функции идет, а между открытыми скобками вызов спавна самих зданий на указанных координатах.
      На примере 1 строки:
      Land_CementWorks_ExpeditionB - id постройки (type)
      13251.875000 0.0 3748.525879 - координаты в формате X Y Z
      -96.000000 0.000000 0.000000 - значение поворота в формате X Y Z
      Внимание: id постройки и координаты в примере указаны не верные и требуют подключения дополнительной модификации для корректной работы!!! Координаты не соответствуют названию функции!!!
      4. открываем в MpMissions в папке с вашей активной миссией init.c и перед ЗАКРЫВАЮЩЕЙ скобкой '}' дописываем нужную нам функцию (это будет активация спавна на карте):
      SpawnAirfeeldBuildings(); 5. Готово, Запускайте сервер, и в scripts.log вы увидите процедуру спавна ваших зданий и увидите, спавнятся ли они на карте или нет.
      Можно написать конечно и более готовую, универсальную систему спавна на карте со считыванием конфигурации из файла, но я считаю это лишним.
       
      Как заполнить добавленные здания лутом на карте:
      вариант 1:
      https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Enable-loot-for-custom-placed-objects
      вариант 2: вручную заполнить xml-файл  mapgrouppos.xml в mpmssions данными о местоположении зданий, где rpy - значение поворота здания в формате Z Y X
       
      С помощью данной статьи вы можете разместить любой элемент игры(постройку, животное, зомби, бота), доступный к спавну через любую модификацию-админ. панель. Очень полезный мод в этом смысле BuilderItems, с его помощью можно творить поистину интересные локации!
    • By Venom21
      Появилась такая проблема, нужно закрыть некоторые слоты под одежду, когда на определённый слот одет предмет…
      пример: возьмём экзоскелет от Фидова, там есть две версии которая одеваеться как на тело и ноги, и есть которая одеваться на разгрузку и пояс, так вот, нужно например чтобы при одетом экзаче на тело и ноги слоты под пояс и разгрузку блокировались, либо только под определенные предметы, если есть интерес то цену можем в личке обсудить…
      P.S. Разрешение от Фидова на переделку и переупаковку есть)
    • By CubeIn
      Здарова, уважаемые знатоки, вопрос.
      Мне скриптер скинул скрипт и сказал закинуть её в северную часть, но не указал куда именно. Подскажите пожалуйста, куда мне её деть? 
    • By CubeIn
      Здарова всем!
      У меня срочный вопрос опытным хозяинам серверостроения. Есть ли возможность настроить холод на карте Namalsk? А то слишком холодновато игрокам, а где это настраивать...
    • By BorizzK
      Накатал по быстрому для себя и своих ребят от нефиг делать, тк в командировке и дейзить возможности нет, только удаленно ковырять сервер
      Внутри настройки через переменные
      путь к базе сервера и инстанс ид берет из конфига сервера (нужно настроить имя файла и путь в файле)
      Мониторит сервер по названию окна, сохранив pid
      При вылете в 90% случаев корректно убивает процесс
      При перезапуске так же
      При каждом старте с 0 и при перезапусках делает бэкапы баз/настроек/
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
  • Our picks

×
×
  • Create New...

Important Information

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