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
BorizzK

Спавн машин с проверкой общего кол-ва машин на сервере и рядом с координатами

Recommended Posts

Накрапал функций (по мотивам того что делали для 0.62 когда-то)

Проверяем сколько машин на сервере (кстати, кому известны координаты центра Черноруси и макс полезный радиус от центра где могут располагаться объекты?)

Если машин данного типа достаточно на карте, не спавним

Если не хватает, перед спавном проверяем нет ли машины рядом (что бы не заспавнить внутрь другой)

Если все норм, спавним

 

	int CheckNearObjects(vector pos, int radius, string objectClass) //Проверка обьектов поблизости
	{
		array<Object> nearest_objects = new array<Object>;
		array<CargoBase> proxy_cargos = new array<CargoBase>;
		Object object;
		string className;
		int objectcount = 0;
		
		GetGame().GetObjectsAtPosition(pos, radius, nearest_objects, proxy_cargos); 
		Print("::: SpawnCars.c ::: CheckNearObjects (EntityAI m_Object, int radius) ::: Radius: " + radius.ToString() + ", all nearest_objects: " + nearest_objects.Count().ToString());
		for ( int i = 0; i < nearest_objects.Count(); i++ )
		{
			object = nearest_objects.Get(i);
			className = object.GetType();
			if ( className == objectClass )
			{
					objectcount++;
					Print( "::: SpawnCars.c ::: CheckNearestObjects: found object " + objectcount.ToString() + ": " + object.ToString() + ", Type/Class: " + className + " !!!");
			}
		}
		return objectcount;
	}

	int SpawnCar(string m_Car_Class, TVectorArray spawn_Points, int max_Car_Count, float min_Car_Health, float max_Car_Health, bool damageallow) //Спавн машины по заданным параметрам
	{
		Print("::: SpawnCars.c ::: SpawnCar(" + m_Car_Class + ", " + spawn_Points.ToString() + ") :::");
		vector m_Car_Pos;
		EntityAI m_Car;
		int n_Car_Count = 0;
		int all_Car_Count = 0;
		int s_Car_Count = 0;
		array<string> m_Car_Equip_Array = new array<string>;
		
		if (m_Car_Class == "OffroadHatchback")
		{
				/* Так то же можно
				m_Car_Equip_Array.Insert("HatchbackWheel");
				m_Car_Equip_Array.Insert("HatchbackWheel");
				m_Car_Equip_Array.Insert("HatchbackWheel");
				m_Car_Equip_Array.Insert("HatchbackWheel");
				m_Car_Equip_Array.Insert("CarBattery");
				m_Car_Equip_Array.Insert("SparkPlug");
				m_Car_Equip_Array.Insert("EngineBelt");
				m_Car_Equip_Array.Insert("CarRadiator");
				m_Car_Equip_Array.Insert("HatchbackDoors_Driver");
				m_Car_Equip_Array.Insert("HatchbackDoors_CoDriver");
				m_Car_Equip_Array.Insert("HatchbackHood");
				m_Car_Equip_Array.Insert("HatchbackTrunk");
				*/
				//И так можно
				m_Car_Equip_Array = {"HatchbackWheel","HatchbackWheel","HatchbackWheel","HatchbackWheel","CarBattery","SparkPlug","SparkPlug","EngineBelt","CarRadiator","HatchbackDoors_Driver","HatchbackDoors_CoDriver","HatchbackHood","HatchbackTrunk"};
				//Проверяем
				m_Car_Equip_Array.Debug();
		}
		/*
		else if (m_Car_Class == "M3S")
		{
			//Тут заполняем массив комплектующими M3S
		}
		*/
		else
		{
			Print("::: SpawnCars.c ::: SpawnCar() ::: NO CAR / WRONG CLASS SPECIFIED :::");
			return s_Car_Count;
		}
		
		all_Car_Count = CheckNearObjects("7000 0 7000", 20000, m_Car_Class); //Можно отключить если сервер глючит при старте, тогда присовойте all_Car_Count значение - all_Car_Count = 1; (см ниже)
      	//all_Car_Count = 1;

		for ( int i = 0; i < spawn_Points.Count(); i++ )
		{
			m_Car_Pos = spawn_Points.Get(i);
			n_Car_Count = CheckNearObjects(m_Car_Pos, 10, m_Car_Class);
			
			Print("::: SpawnCars.c ::: n_Car_Count = " + n_Car_Count.ToString());
			
			if (s_Car_Count + all_Car_Count < max_Car_Count)
			{
				if (n_Car_Count < 1)
				{	
					m_Car = EntityAI.Cast(GetGame().CreateObject(m_Car_Class, m_Car_Pos, false, true));
					
					for ( int e = 0; e < m_Car_Equip_Array.Count(); e++ )
					{
						m_Car.GetInventory().CreateAttachment( m_Car_Equip_Array.Get(e) ); 
					}
						
					m_Car.SetAllowDamage(damageallow);
					m_Car.SetHealth("","",Math.RandomInt(min_Car_Health,max_Car_Health));
					Print("::: SpawnCars.c ::: Spawned car: " + m_Car.ToString() + ", Position: " + m_Car.GetPosition().ToString());
					if (m_Car)
					{
						s_Car_Count++;
					}
				}
				else
				{
					Print("::: SpawnCars.c ::: Car spawn not allowed at position: " + m_Car_Pos.ToString() + ", becouse nearest car with same class " + m_Car_Class + " found.");
				}
			}
			else
			{
				Print("::: SpawnCars.c ::: Car spawn not allowed becouse cars with same class " + m_Car_Class + " >= " + max_Car_Count.ToString());
			}
		}
		return s_Car_Count;
	}

 

Подключение

 

Правим по своему вкусу

Помещаем код в файл и размещаем в папке доступной серверу

 

В самом начале init.c

#include "$CurrentDir:\\путь\\путь\\имя файла с кодом.c

 

Далее в функции main вызываем спавн

 

		TVectorArray spawn_Points_Niva = {"6063 0 7871"}; //array with positions, for more cars write more positios in to array
		int SpawnCarsCarsCount = SpawnCar("OffroadHatchback", spawn_Points_Niva, 32, 100, 100, false); //Class, Positions, Max count, min health, max health, damage allow - true/false
		Print("::: SpawnCars.c ::: SpawnCars() ::: Spawned cars: " + SpawnCarsCarsCount.ToString()); //это просто каммент

 

Или просто

int SpawnCarsCarsCount;

SpawnCarsCarsCount = SpawnCar("M3S", {"6000 0 6000", "7000 0 8000"}, 44, 100, 100, false);

 

Но для M3S нужно прописать комплектуху в SpawnCar() в массив m_Car_Equip_Array

 

Ну вобщем разберетесь )))

 

 

Добавлено:

Альтернативный вариант от комьюнити:

 

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites



Заправка мащины полностью под завязку

 

Car car = Car.Cast(m_Car); //даункастим сущность машины в класс Сar
car.Fill(CarFluid.FUEL, 100); //заливаем топливо - первй параметр тип жижи, второй обьем
car.Fill(CarFluid.COOLANT, 100); //заливаем антифирз
car.Fill(CarFluid.OIL, 100); //заливаем масло
car.Fill(CarFluid.BRAKE, 100); //заливаем тормозуху

 

обьемы считаются в тысячных

от 1 (1.000 - максимум) до 0.001 (минимум)

Но я на всяк случай указал 100

 

Теперь все заврдится, ездит

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

Доработал чуть-чуть скрипт/функции

 


	int CheckNearObjects(vector pos, int radius, string objectClass) //Проверка обьектов поблизости
	{
		array<Object> nearest_objects = new array<Object>;
		array<CargoBase> proxy_cargos = new array<CargoBase>;
		Object object;
		string className;
		int objectcount = 0;
		pos[1] = GetGame().SurfaceY( pos[0], pos[2] );
		GetGame().GetObjectsAtPosition(pos, radius, nearest_objects, proxy_cargos); 
		Print("::: CheckNearObjects (vector pos, int radius, string objectClass) ::: Radius: " + radius.ToString() + ", all nearest_objects: " + nearest_objects.Count().ToString());
		for ( int i = 0; i < nearest_objects.Count(); i++ )
		{
			object = nearest_objects.Get(i);
			className = object.GetType();
			if ( className == objectClass )
			{
					objectcount++;
					Print( "::: CheckNearestObjects: found object " + objectcount.ToString() + ": " + object.ToString() + ", Type/Class: " + className + ", Pos: " + object.GetPosition().ToString());
			}
		}
		return objectcount;
	}

	int SpawnCar(string m_Car_Class, TVectorArray spawn_Points, int max_Car_Count, float min_Car_Health, float max_Car_Health, bool damageallow) //Спавн машины по заданным параметрам
	{
		Print("::: SpawnCars.c ::: SpawnCar(" + m_Car_Class + ", " + spawn_Points.ToString() + ") :::");
		vector m_Car_Pos;
		EntityAI m_Car;
		int n_Car_Count = 0;
		int all_Car_Count = 0;
		int s_Car_Count = 0;
		array<string> m_Car_Equip_Array = new array<string>;
		array<string> m_Car_Adds_Array = new array<string>;
		float amount =0;
		
		if (m_Car_Class == "OffroadHatchback")
		{
				m_Car_Equip_Array = {"HatchbackWheel","HatchbackWheel","HatchbackWheel","HatchbackWheel","CarBattery","SparkPlug","SparkPlug","EngineBelt","CarRadiator","HatchbackDoors_Driver","HatchbackDoors_CoDriver","HatchbackHood","HatchbackTrunk","HeadlightH7","HeadlightH7"};
				m_Car_Adds_Array = {"CanisterGasoline"};
				//Проверяем
				m_Car_Equip_Array.Debug();
				m_Car_Adds_Array.Debug();
				amount = 1;
		}
		else if (m_Car_Class == "M3S")
		{
			//Тут заполняем массив комплектующими M3S
		}
		else
		{
			Print("::: SpawnCars.c ::: SpawnCar() ::: NO CAR / WRONG CLASS SPECIFIED :::");
			return s_Car_Count;
		}
		if (m_Car_Equip_Array.Count() <= 0)
			return s_Car_Count;
		
		all_Car_Count = CheckNearObjects("7500 0 7500", 15000, m_Car_Class);
		Print("::: SpawnCars.c ::: SpawnCar() ::: All cars " + m_Car_Class + " on server: " + all_Car_Count.ToString());
		
		for ( int i = 0; i < spawn_Points.Count(); i++ )
		{
			m_Car_Pos = spawn_Points.Get(i);
			n_Car_Count = CheckNearObjects(m_Car_Pos, 30, m_Car_Class);
			
			Print("::: SpawnCars.c ::: Near cars " + m_Car_Class + " at selected pos " + m_Car_Pos.ToString() + ": " + n_Car_Count.ToString());
			
			if (s_Car_Count + all_Car_Count < max_Car_Count)
			{
				if (n_Car_Count < 1)
				{	
					Print("::: SpawnCars.c ::: Spawn: " + m_Car_Class);
					m_Car = EntityAI.Cast(GetGame().CreateObject(m_Car_Class, m_Car_Pos, false, true));
					
					for ( int e = 0; e < m_Car_Equip_Array.Count(); e++ ) //Attachments
					{
						m_Car.GetInventory().CreateAttachment( m_Car_Equip_Array.Get(e) ); 
					}
					
					for ( int a = 0; a < m_Car_Adds_Array.Count(); a++ ) //Adds //TEST
					{
						m_Car.GetInventory().CreateAttachment( m_Car_Adds_Array.Get(a) ); 
					}
					
					if (m_Car)
					{
						Car car = Car.Cast(m_Car); 
						car.Fill(CarFluid.FUEL, 1000); //add fuel
						car.Fill(CarFluid.COOLANT, 1000); //add antifreeze
						car.Fill(CarFluid.OIL, 1000); //add engine oil
						car.Fill(CarFluid.BRAKE, 1000);//add brake fluid
						m_Car.SetAllowDamage(damageallow);
						m_Car.SetHealth("","",Math.RandomInt(min_Car_Health,max_Car_Health));
						s_Car_Count++;
						Print("::: SpawnCars.c ::: Spawned car " + s_Car_Count.ToString() + ": " + m_Car.ToString() + ", Position: " + m_Car.GetPosition().ToString());
						Print("::: SpawnCars.c ::: Spawned car " + s_Car_Count.ToString() + ": FUEL amount   : " + car.GetFluidFraction( CarFluid.FUEL ).ToString());
						Print("::: SpawnCars.c ::: Spawned car " + s_Car_Count.ToString() + ": COOLANT amount: " + car.GetFluidFraction( CarFluid.COOLANT ).ToString());
						Print("::: SpawnCars.c ::: Spawned car " + s_Car_Count.ToString() + ": OIL amount    : " + car.GetFluidFraction( CarFluid.OIL ).ToString());
						Print("::: SpawnCars.c ::: Spawned car " + s_Car_Count.ToString() + ": BRAKE amount  : " + car.GetFluidFraction( CarFluid.BRAKE ).ToString());
					}
				}
				else
				{
					Print("::: SpawnCars.c ::: Car spawn not allowed at position: " + m_Car_Pos.ToString() + ", becouse nearest car with same class " + m_Car_Class + " found.");
				}
			}
			else
			{
				Print("::: SpawnCars.c ::: Car spawn not allowed becouse cars with same class " + m_Car_Class + " >= " + max_Car_Count.ToString());
			}
		}
		return s_Car_Count;
	}

	void SpawnCars() //Вызов спавна машин
	{
		TVectorArray spawn_Points_Niva = {"6063 0 7871"}; //array with positions, for more cars write more positios in to array
		int SpawnCarsCarsCount = SpawnCar("OffroadHatchback", spawn_Points_Niva, 32, 100, 100, false); //Class, Positions, Max count, min health, max health, damage allow - true/false
		Print("::: SpawnCars.c ::: SpawnCars() ::: Spawned cars: " + SpawnCarsCarsCount.ToString());
		SpawnCarsCarsCount = SpawnCar("M3S", {"6000 0 6000"}, 30, 100, 100, false); //Class, Positions, Max count, min health, max health, damage allow - true/false
		Print("::: SpawnCars.c ::: SpawnCars() ::: Spawned cars: " + SpawnCarsCarsCount.ToString());
	}

 

Share this post


Link to post
Share on other sites

После подключения скрипта сервер при старте начинает жрать всю оперативку в ноль просто.

Share this post


Link to post
Share on other sites

HornetNova  жрет так как функция

all_Car_Count = CheckNearObjects("7500 0 7500", 15000, m_Car_Class);

грузит сервер крайне дико и сильно, т.е. функция выполняет поиск объектов от указанной точки по радиусу в указанном диапазоне, и если учесть, что в нее попадает вообще все (т.е. лут, здания, игроки, животные, зомби и т.п.), то поиск из этого огромного массива естественно будет выполняться долго.

нужна альтернатива для sqf как (AllMissionObjects "car"), но увы, в новом языке я даже похожего ничего не встречал.

Share this post


Link to post
Share on other sites

123new ничего подобного нет

Потому проверяем все обьекты

Знать бы точные координаты центра карты и макс радиус где обьекты могут быть, проверку можно было бы оптимизировать

 

Share this post


Link to post
Share on other sites

BorizzK боюсь, что в таком случае проверка будет пол часа проводиться.

Share this post


Link to post
Share on other sites
3 минуты назад, BorizzK сказал:

123new ничего подобного нет

Потому проверяем все обьекты

Знать бы точные координаты центра карты и макс радиус где обьекты могут быть, проверку можно было бы оптимизировать

 

В дайзе в данный момент только 1 массив содержит все объекты. - Проверять устанешь. Комп повиснет.

Share this post


Link to post
Share on other sites

NoNameUltima Я сервак запускаю на Core I7 7700 и Xeon E5-2650v4 + 32гиг памяти + ссд

Проверка дефолтных обьектов во время запуска сервера после 3го рестарта через сутки + еще натащили юзвери + я наспавнил  - занимает порядка 30-40 сек

Обьектов всего порядка 4млн

Так что не страшно

 

Можно запулить спавн машин и проверку в фоне после старта сервера и проверять секторами

Над будет заморочиться

 

PS Рад что ты не свалил с форума )))

 

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

BorizzK FX-6350, GTX970, 8GB оперативка. Знаю, железо далеко не серверное, но и не ставил цели запускать полноценный сервер на нем, исключительно для теста скриптов

Share this post


Link to post
Share on other sites

123new И сколько по времени занимает страт сервера с переборкой всех объектов после 3го рестарта?

При условии что клиент не запущен

Share this post


Link to post
Share on other sites

Вобщем проверил

 

1. Серв с 16 гиг памяти и core i7 7700

2. Диски SAS6 10000rpm 10 райд

3. Серв после 5го рестарта

5. 10 игроков в сумме чет там понастроили и тп

6. Нив 40 штук

7. Еще немного наспавлено всякой фигни для тестов

 

При проверке всех обьектов на сервере серверу надо около 8-9гиг памяти сверху

Те он отжирает сначала 6-7 затем во время проверки доходит до 13-14 и потом падает до тех же 6-7

Времени занимает  20-22 секунды

Переносил серв  на SSD - 21 секунду

На зеркало SATA 28 секунд

Нагрузка на проц при этом была больше на 2-3%

Затем память освобождалась и падала нагрузка до обычных значений

при этом если проводить проверку повторно, то она проходит в неск раз быстрей - 2-5секунд
Сколько проверок не запускай

ради интереса наспавнил 500 машин и еще порядка 25000 разных обьектов по всей карте

Тогда проверка заняла на 1-3 сек больше, но памяти сожрало столько же

 

Вобщем нормальному серверу дейз нужно не менее 12-16 гиг памяти

Ибо если начинает свапиться, будут те самые тормоза и зависоны

 

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

BorizzK не знаю что там после 3 рестарта, но ждать 10 минут после запуска сервера в первый раз, когда диспетчер задач даже с трудом вызывается, не стал, и наврядли любой хостинг обрадуется такой неожиданной нагрузке при запуске сервера на его машине.

Share this post


Link to post
Share on other sites

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

Однако в виртуалке 4 ядра

16 гиг памяти

20 сек при старте при первой проверке и 2-3 сек при каждой последующей - не вижу проблем

Кроме того на хостинге - любом тебе выделяют виртуалку и только ее ты мжешь загрузить

по опыту - хоть обзагружайся

повлиять на других ты не можешь - гипервизор не даст

потому выделили тебе 16 гиг памяти и 4 ядра по 2ггц - можешь хоть все время их на 100% грузить - ибо ОПЛАЧЕНО

Share this post


Link to post
Share on other sites

Щас бы сравнивать 16-20 гиг и 8 гиг оперативки, ага))

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

Share this post


Link to post
Share on other sites

123new Не заметил влияния

Ну и не замена эта оф спавнеру

Это допспавнер как бы

А про память - для дом компа сейчас норма 12-16

А для сервера от 16 и до потолка

В идеале хост под 2 игровых сервера - 32 гига (по 12 на виртуалку и 10 расшарено) - те каждая может пользовать при необходимости, ну это уже гипервизор разруливает) + еще от 1-2 гиг на гипервизор если это vmware vsphere и от 8 если hyper-v - итого около 40

 

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

BorizzK это кто же эти нормы установил? вот сижу я со своими 8 гигами и ни в ус не дую, все устраивает, и нахрен мне эти 12-18 гигов не сдались. Больше на подгон под общие стандарты подходит.

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites

123new ну вот у меня 32 на одном 16 на втором

на серваках (железных) 128, 256, есть и 1Тб
виртуалкам выделяю скок надо и без проблем

вчера коллеги активно пвпэшились и друзей позвали - собралось их аж 40 рыл, пришлось увеличивать кол-во игроков

так сервер в итоге на второй час почти 14 гиг жрал

и это без доспавна машин

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

123new Да ясно что костыль, но за неимением лучшего... Сам понимаешь...

Давай лучше подумаем насчет, что за косяк при создании стартового лута...

 

 

 

 

Share this post


Link to post
Share on other sites

Далее в функции main вызываем спавн

Это где? Мне вот с этого места не понятно

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 Troy1
      Всем привет. Подскжите ну или помогите пожалуйста решить вопрос.
      Вопрос звучит так. На сервере есть трейдер зоны и базы игроков. 
      Если в течение определённого времени, на пример 1 - 2 часа с машиной не кто не взаимодействует и машина не находится в зоне трейдера или на теретории базы, то машина отлетает в гараж или на штраф стоянку.
      На сервере используется TraderPlus.
       
      Есть такие решения у кого?
      За ранние благодарю.
    • By Troy1
      Всем привет. Подскжите ну или помогите пожалуйста решить вопрос.
      Вопрос звучит так. Нужно сделать так, что бы на всей карте был запрет на строительство. 
      Если нужно построить например базу с палатками, то нужно установить верстак или флаг, который установит зону для строительства с радиусом примерно 20-25 метров от центра и желательно что бы зона была квадратной.
      Есть такие решения у кого?
      За ранние благодарю.
    • By paranoyk
      ©(краткая ода как я выносил себе мозг с помощью лута)
      Настроить лут на сервере постарались сразу после релиза ибо многое "не там и не тут"....
      Первая фигура Марлезонского балета.
       
         Файлов которые отвечают за лут прямым и коственным образом,судя по всему мнго,но настройки которые нам доступны сосредоточены в папке mpmissions\dayzOffline.chernarusplus  и mpmissions\dayzOffline.chernarusplus\db
       
      cfglimitsdefinition.xml -файл в котором обозначены категории лута, тэги спавна, классы объектов для спавна и зоны спавна.(если я правельно понял,в информатике это называеться "заданием классов" или как то так). Даллее с чем я экспериментировал.
       
              <category name="......."/> Спавнящийся лут имеет (а может и не иметь) определенную категорию и только одну. Сюда можно вписать свою категорию и давать её предметам.(в файле тайпс)
         Тэги...  в ванили
              <tag name="floor"/>
              <tag name="shelves"/>
              <tag name="ground"/>
      Лут может иметь или не иметь, для более точного "определения" что и где должно спавнится. Можно вводить свои и потом в mapgroupproto.xml вставлять в нужном мест. Если нет-спавнятся везде, если для лута есть тэг, только в тех местах где тэг присутствует .("пол"," полка","земля"-всего лишь для удобства и понимания, можно назвать тэг хоть "мистер питкин", без кирилицы ебстестенно, вводится в другом файле о чём ниже)
         Классы объектов для спавна
              <usage name="......."/> Стационарные объекты имеют в своём обозначении один или несколько таких классов имён. Легко можно прописать свой и дать его категории стационарных объектов или объекту. (правда уникальных объектов на карте-раз,два и обчёлся). Опять таки используется в тайпс. Лут может иметь или нет. (насчёт нескольких-не проверял, но не советую).
      Прописав свой к примеру "MyBox"....и потом в mapgroupproto.xml у военных контейнеров убрав все классы и оставив только этот, в нём будут спавниться только те предметы которым вы в "тайпс" пропишите данную категорию. Так же есть на карте СЕ в виде пятен, минус в том что нанесены они небрежно, результат-спавн к примеру медпредметов в машинах и киосках больницы Черногорска. Любой объект попавший в ореол получит спавн только обозначенного ореола. (после патча 1.20 стало проблематично сразу ввести новый класс, мгновенно ломается вся экономика. Приходится несколько раз пробовать с разными именами)
         Зоны спавна
              <value name="....."/> Тиры и иже с ними. Глобальные зоны на карте для определения спавна. Лут может иметь несколько или ни одного. Будет спавнится только там, если не оговорено особые условия. см опис. тайпс) И как они нанесены на карту-опять таки СЕ редактор... (картинка устаревшая).

      Они могут накладыватся друг на друга. Так же их можно редактировать в редакторе СЕ.
       
      mapgrouppos.xml - Файл в котором определяться координаты точки "карты" лута для каждого обьекта.(мдя,чего я счас сморозил то)
      То есть указывает спавнеру "в этой точке будет спанится лут по "сетке" из файла mapgroupproto " и если там ЕСТЬ описание. Это не место спавна лута конкретно, а место спавна массива координат по которым спавнится лут. Проще всего это понять если у вас есть нормальный маппинг со спавном....и убрать маппинг-лут будет спавнится в старых местах и даже висеть в воздухе. (получить все точки для "спавна" можно с помощью команд в init )
      Пример:
          <group name="Land_Misc_FeedShack" pos="80.255409 113.792282 4422.158691" rpy="-0.000000 0.000000 -70.013718" a="160.013718" />
       
      Land_Misc_FeedShack - название обьекта из файла mapgroupproto ,его ID...Можно написать хоть "Мой генимальный спавн". И спавнер если найдёт в mapgroupproto объект с таким названием-заспавнит лут по сетке. (вот ещё способ как модифицировать спавн лута).
      pos="80.255409 113.792282 4422.158691" rpy="-0.000000 0.000000 -70.013718" - координаты центра "карты" лута для этого обьекта, совпадают с координатами обьекта
      формат записи X-Y-Z завал,наклон,поворот.
      a="........" Вектор поворота карты лута обьекта относительно самого обьекта.
      Как он определяется - экспериментально выяснил в принципе....(угол поворота объекта - 90)х(-1)...как то там ещё можно возиться переводить с +360, но я просто пишу полученное значение и всё работает.
      Да-да,именно тут прописывается что в вашей точке появляется лут и если он имеет прописанную сетку лута в mapgroupproto .(имееться ввиду в оффлайн редакторе поставив "француз"-тут вы пропишите в него лут,как прописать в он-лайн сам обьект-другая история под названием "возврат водяных колонок"). Сам объект НЕ НУЖЕН даже. Он всего лишь декорация карты и для спавна ка видите НЕ НУЖЕН.
       
      mapgroupproto.xml - Файл в котором прописана "карта" лута для объекта. Вначале идёт описание для "дефолта" ,то есть деревьев и растений,а также камней! (тут я не понял,но ...это нам и не нужно,яблоки падают и хорошо..)
      Пример:
              <group name="Land_Tisy_Barracks"> - название обьекта, ID ИЛИ придуманный вами обьект.
                      <usage name="Military" /> - класс имени обьекта,может быть не один. (а если вы ввели свои-писать именно сюда)
                      <container name="lootFloor" lootmax="8"> - имя "контейнера" и максимальное количество лута которое может там появиться.(количество лута может быть и не обозначено,но если есть-никогда не будет больше чем количество точек спавна что ниже. НЕ РАБОТАЕТ- можно даже не мучатся, есть подозрения что количество лута ни как не изменить именно этой переменной для обьекта. )
                              <category name="tools" /> - класс лута который будет спавниться в данном "контейнере" ,может быть не один.                      
                             <tag name="ground" /> - тэг лута который будет спавнится.(может быть несколько). Спавн лута с этим тэгом. Если у лута нет тэга-спавн ТОЖЕ.
                              <point pos="-2.429444 -3.799637 3.698242" range="1.199951" height="2.000000" flags="32" /> - точка спавна лута, расстояние по X-Y-Z от центральной точки "карты лута" (где она,можно выяснить только эксперементально для каждого обьекта или в редакторе или...с помощью мода).
      range="......." радиус спавна от заданной точки, то есть в этом "круге" будет спавниться лут.(не точно,если обьект имеет большие линейные размеры-не заспанится)
      height="........."-высота объекта спавна,как я понял....(не точно,если обьект имеет большие линейные размеры-не заспавнится)
      flags="32" -  указание что спавн лута будет на уровне земли игнорируя координаты по высоте. Грубо говоря к примеру если спавн вокруг елки рождественской -весь лут будет лежать на земле. Вокруг ёлки. Или округ "воображаемой точки", если надо.
      ниже всё тоже самое, но для своего "контейнера" данном здании.То есть обьект может иметь несколько контейнеров.
      </container> <container name="lootshelves" lootmax="8"> <category name="tools" /> <category name="containers" /> <category name="clothes" /> <tag name="shelves" /> <point pos="0.968751 -3.434326 7.507324" range="0.581250" height="0.532341" /> .................................................. </container> <container name="lootweapons" lootmax="8"> <category name="weapons" /> <category name="explosives" /> <point pos="3.985354 -3.434326 6.267576" range="0.478125" height="0.533684" /> ................................................... </container> </group>  
      cfgrandompresets.xml - Файл в котором мы найдём так называемые "грузы"-группы предметов спавнящихся в предметах,зомби и тому подобное....(судя по всему сделано для удобства)
              <cargo chance="0.35" name="foodVillage"> - шанс появления  и его название.
      Тут маленькое отступление. Поначалу я тоже думал что это какие то проценты, да так легче воспринимать. Но таки и немного не так. Просто опишу как спавнер "думает".
      "Обьект имеет спавна внутри, получаем псевдослучайное число от 0 до 1. Сравниваем. Псевдочисло больше-нет спавна, иначе-спавн есть". Будем привычно называть его "шанс" и обозначим его как проценты, но ещё раз это НЕ ПРОЦЕНТЫ в прямом смысле.
                      <item name="SodaCan_Cola" chance="0.11" /> - название (ID) предмета и его шанс выпадения
      .......................................................................
                      <item name="SpaghettiCan" chance="0.11" />
                      <item name="BakedBeansCan" chance="0.11" />
              </cargo>
       То есть "груз" foodVillage может выпасть в 35% случаев, если условее истинно,то может выпасть предмет из списка с вероятностью которая задана для предмета или ,если ни один предмет не прошёл-то опять таки ничего не выпадет. Выпадает только один предмет из списка, так и не выяснил,влияет ли очерёдность списка предметов или нет. То есть возможностей настройки тут-море,кто хорошо разбираеться в теорией вероятности поймёт данный раздел влёгкую.
      Дополненно. Судя по всему спавнер не перебирает все предметы,а выбирает "случайно" какой тоодин и проверяет его.
       
      Можно создавать свои собственные "миксы"....к примеру.
      </cargo> <cargo chance="1.0" name="mixOptics"> <item name="PUScopeOptic" chance="0.33" /> <item name="PSO1Optic" chance="0.33" /> <item name="HuntingOptic" chance="0.3" /> </cargo> То есть "микс" появиться стопроцентно в объекте из него может выпасть....с вероятностью 33% ...перечисленные вещи.
      Важно помнить,что если размер "контейнера" маленький (к примеру мишка),то в нём ни как не заспавниться ПСО-1. Размер имеет значение.
       
      cfgspawnabletypes.xml - Список тех вещей, "контейнеры" в которых спавняться наборы из прошлого файла.
      Так же можно прописать спавн в контейнер отдельной вещи.
      И самое важное!
      Именно тут можно указать степень износа заспавненых вещей по отдельности, если степень износа не указана-вещь будет иметь износ зданный в файле globals.xml, это строчки:
      "LootDamageMax" и "LootDamageMin" .
      Но это не относится что спавнится в них, то есть наборы грузов, аттачменты и сами грузы в контейнере всегда будут "идеальны".....(но контейнером может стать и обычная вещь!)
      Тут же прописывается аттачменты если они есть и вы хотите заспавнитьвещь с прикреплёным аттачем.
          <type name="ammobox"> - название (ID) вещи-контейнера.
          <damage min="0.0" max="0.0" /> - этой строчки может и не быть, тогда износ будет взят из "глобалс". Означает что лут будет иметь при спавне не меньше едениц урона и не больше. То есть если выствите
      min=0.2 то лут всегда будет всегда иметь при спвне 20% урона. Не меньше, максимальный урон это max, поставите к примеру 0,9 то вещи даже заруиненые будут спавнится.
      Пороги когда вещь считается неповреждённой,а когда поношеной и тк.дл.-в другом файле и меняется уже сервер модом.
           <cargo preset="optics" /> -название набора который может появиться внутри с шансом( как было описано выше)....
      ........................................
              <cargo preset="ammoArmy" />
          </type>
      То есть можно прописать несколько наборов и если из каждого заспавниться вещь,то ограничение только "размер" контейнера и вещей.
      Так же тут есть наборы аттачей для зомби, о них ниже, собраны примерно также.
       
      Вторая фигура Марлезонского балета.
       
      <type name="ZmbM_PatrolNormal_Autumn"> <cargo preset="foodArmy" /> <cargo preset="ammoArmy" /> </type>   Вот вам и первый "ходячий" контейнер.....Увеличив к примеру в cfgrandompresets.xml шанс выпадения данных наборов-получите "доставщиков пиццы на дом".
      Но не в каждом зомби такой набор и опять таки,вы можете их менять,добавлять,убирать....
      А так же для зомби тут прописано что них может быть одето в виде аттачей. Не все зомби такое могут,смотреть нужно по ванильным файлам.
      Пример:
      <type name="ZmbM_HunterOld_Winter">-наш подопытный <cargo preset="foodHermit" />-набор лута в зомби <cargo preset="toolsHermit" />-набор лута в зомби <attachments preset="glassesVillage" />-какой набор может прирепится на местоаттача (очки в данном случае) <attachments preset="hatsFarm" />-какой набор может прирепится на местоаттача (кепка в данном случае) <attachments preset="bagsHunter" />-какой набор может прирепится на местоаттача (рюкзак в данном случае) <attachments preset="vestsHunter" />-какой набор может прирепится на местоаттача (разгрузка\броник в данном случае) </type> (очки ни когда не прописывайте-не работают)
       
         А дальше-оружие...(так,дышите глубже)
       
          <type name="CZ61"> - ID оружия
              <attachments chance="0.10"> -Шанс что на нём будет прикреплён аттачмент 10%
                  <item name="AK_Suppressor" chance="1.00" /> - шанс появления самого аттачмента 100%
      (не факт что так и надо,просто так проще высчитыывать процент появления аттачементов на оружии)
              </attachments>
              <attachments chance="0.30"> -то же самое и для другого аттачмента,обратите внимание,что мы не смешиваем в одну кучу "глушители и магазины"...
                  <item name="Mag_CZ61_20Rnd" chance="1.00" />
              </attachments>
          </type>
      А если хочется "АКМ" что бы мог спавниться в полном обвесе?
      А легко...
      <type name="AKM"> <damage min="0.0" max="0.5" /> <attachments chance="1.00"> <item name="AK_WoodBttstck" chance="0.80" /> <item name="AK_PlasticBttstck" chance="0.30" /> <item name="AK_FoldingBttstck" chance="0.40" /> </attachments> <attachments chance="1.00"> <item name="AK_WoodHndgrd" chance="0.80" /> <item name="AK_PlasticHndgrd" chance="0.30" /> <item name="AK_RailHndgrd" chance="0.10" /> </attachments> <attachments chance="0.30"> <item name="Mag_AKM_30Rnd" chance="1.00" /> </attachments> <attachments chance="0.30"> <item name="AK_Suppressor" chance="0.50" /> </attachments> Видим что он может появляться с разными прикладами, цевьями, может с глушителем или без,с магазином или без....(хотите,можете и ПСО ему прописать).
       
      Как видитев в этом файле нет многих вещей, тут нет ни ИЖ18,ни МП133....и они,гады спавняться всегда как прописано в globals.....Стоит добавить
          <type name="Izh18">
               <damage min="0.0" max="0.2" />
          </type>
      .....и ИЖ18 будет спавниться с дамагом который вы установили!
      Думаете это всё?....Индейское жилище-фигвам!
      Машины!....
      <type name="OffroadHatchback"> <attachments chance="1.00"> <item name="HatchbackWheel" chance="0.60" /> </attachments> <attachments chance="1.00"> <item name="HatchbackWheel" chance="0.60" /> </attachments> <attachments chance="1.00"> <item name="HatchbackWheel" chance="0.40" /> </attachments> <attachments chance="1.00"> <item name="HatchbackWheel" chance="0.40" /> </attachments> <attachments chance="1.00"> <item name="HatchbackWheel" chance="0.20" /> </attachments> <attachments chance="1.00"> <item name="CarRadiator" chance="0.20" /> </attachments> <attachments chance="1.00"> <item name="CarBattery" chance="0.30" /> </attachments> <attachments chance="1.00"> <item name="HeadlightH7" chance="0.40" /> </attachments> <attachments chance="1.00"> <item name="HeadlightH7" chance="0.40" /> </attachments> <attachments chance="1.00"> <item name="HatchbackDoors_Driver" chance="0.30" /> </attachments> <attachments chance="1.00"> <item name="HatchbackDoors_CoDriver" chance="0.30" /> </attachments> <attachments chance="1.00"> <item name="HatchbackHood" chance="0.20" /> </attachments> <attachments chance="1.00"> <item name="HatchbackTrunk" chance="0.20" /> </attachments> </type> Это он так выглядит сейчас вроде...раньше было всё намного хуже...Машина стандартно спавнилась с ОДНИМ колесом.
      Можете изменить аттачментам шансы хоть до "1.00" что бы машина спавнилась сразу собранная.(залить в неё жидкости-знает Боррзик,описывал на форуме,ищите).
      Правда мы подло могЁм положить в машину.....бензин,масло...можно и ремкомплект.
       
              <attachments chance="1.00">
                  <item name="SparkPlug" chance="0.6" />
              </attachments>
              <attachments chance="1.00">
                  <item name="EngineOil" chance="0.5" />
              </attachments>
              <attachments chance="1.00">
                  <item name="EngineOil" chance="0.5" />
              </attachments>
              <attachments chance="1.00">
                  <item name="EngineOil" chance="0.5" />
              </attachments>
       
      (в этом же файле,ПОЗЖЕ,появились и рождественские наборы...но было уже поздно-бегемоты должны быть повешаны!)
      Дальше мы можем мелочь привесть к предметам,обычно это батарейка
      Но можно и "предмет в предмете"! Поле для извращений-огромно.
      Как пример:
       
      <type name="PersonalRadio"> <attachments chance="0.30"> <item name="Battery9V" chance="1.00" /> </attachments> </type> <type name="GPSReceiver"> <attachments chance="0.30"> <item name="Battery9V" chance="1.00" /> </attachments> </type> Файлы с названием по типу mapgroupcluster.xml -это тот же mapgrouppos для камней, грибов,яблок и прочего.
      Глыбжее,ширее,нижее. Преходим в папку db
       
      events.xml - файл в котором описаны "случайные"  события,такие как зомби,полицейская волга, хеликраш, адми...тоесть петух!, ну и прочие коровы и звери.
      Например
       
          <event name="AnimalCow"> -название ивента. Можно прописывать свои НО! Название ивента может начинатся ТОЛЬКО строго определенно.
      аnimal - события с животными.
      static - для спавна статичных ивентов типа Ми-8 или дома...
      item - Для различных игровых предметов,как пример в ванили - блок досток.
      Infected-зомби
      Trajectory - спавн грибов,ягод и прочих камней
       
      <nominal>10</nominal> - Колличество ивентов на карту единомоментно.То есть сразу. Именно ИВЕНТОВ. Десять машин, десять СТАЙ волков, десять ТОЧЕК спавна зомби....(может и меньше если невозможно заспавнить ивент из-за других условий, к примеру наличие игрока на спавне)

      <min>6</min> -  минимальное количество дочерних объектов указанных в <children> в ивенте
      <max>15</max> - максимальноеколичество дочерних объектов указанных в <children> в ивенте
      (обычно для стай волков и прочих живых организмов)
      Причем от 6 до 15 ВСЕХ вписанных <children>. А вот сколько конкретно каждого,это  уже в них настраивается

       <lifetime>180</lifetime> - "время жизни" события Именно СОБЫТИЯ. То есть заспавнаня ивентом машина-пока стоит на точке спавна-это СОБЫТИЕ,как только вы отехали-это уже лут и время её жизни будет считыватся с (не кночи будет помянут сей файл) тайпса.

       <restock>0</restock> - на сколько будет отложен спавн ивента до номинала, когда остальные условия для начала ивента выполнены.
      Думате если два хеликраша они исчезнут и заспавнятся одновременно? Ага,счасЗъ. Тут зависит от много,даже от взаимодействия с ними игрока.

      <saferadius>200</saferadius> - это расстояние от позиции игрока, на котором может возникнуть это событие.(поставте для интреса 50 для зомби:)))
       <distanceradius>0</distanceradius> - минимальное расстояние от другого события.(очень актульно для машин, решать вам)
      <cleanupradius>0</cleanupradius> - это расстояние от позиции игрока, на котором событие исчезнет после того, как время жизни закончится. (добвлено- для хеликрашей имхо лучше ставить ОЧЕНЬ большое,с хороший километр)
      <secondary>InfectedArmy</secondary> - это имя другого события, которое вы хотите вызвать одновременно с этим событием, например, чтобы вызвать зомби вокруг здания или предмета. Настраивается в дочернем событии.(можно создать свой, но смешать зомбей с волками-не получится, генетика не та)
      <flags deletable="0" init_random="0" remove_damaged="1" sec_spawner="0"/> -флаги настройки
      deletable 1/0 - ивент удалятеся согласно параметрам самого события или по истечению времени в тайпс (не точно)...ИМХО
      init_random 1/0 - ???
      remove_damaged 1/0 -  будет ли событие удаляться если достигла состояния "уничтожено" или останется лежать до истечения срока события.(актуально для машин...но ТОЛЬКО НА ТОЧКЕ СПАВНА!)
      sec_spawner="0" - сорри не знаю, а чего не знаю-не меняю.
      <position>fixed</position>
      <position>player</position> - позиция будет выбираться из зафиксированых в файле cfgeventspawns.xml или событие срабатывает "на игрока".

      <limit>.......</limit> - может быть следующии
      custom - относится к внешнему файлу, например, для территорий животных.
      child - событие будет обращатся к атрибутам min и max каждого дочернего элемента
      parent - lотносятся к минимальным и максимальным атрибутам самого события
      mixed -  будет учитыватся и дочерние и собсвенное min-max события
       
      <active>1/0</active> - включение и выключение события.(Вот она кнопка!)
       
       <children>
                  <child lootmax="0" lootmin="0" max="3" min="0" type="Animal_BosTaurusF_Brown"/>
      lootmax="0" lootmin="0" ....если предмет имеет сетку лута или контейнер -колличество лута при спавне (а теперь фокус, если в ивенте есть <secondary> с зомбями то их колличество будет равно.... мин + макс)
      max="3" min="0" ......минимальное и максимальное колличество дочерних обьектов. (к примеру-коров данного типа в стаде)
       
      types.xml-великий и ужасный.Содержит в себе данные о всём спавнещемся луте и контейнерах (хеликраши,машины,зомби-по сути-контейнеры).
      Всякий лут должен быть в этом файле иначе-нет его спавна на карте. Также и синтаксическая ошибка в этом файле приводит к исчезновению всего лута с карты.
      Если из него убрать что-то,(но этот предмет останеться лежать на земле до истечения срока)....и игрок его поднимет-краш.Так что файл требует трезвого ума и терпения.
       
          <type name="Canteen"> - Название ID предмета
              <nominal>30</nominal> -номинальное колличество спавна на карте к которому стремиться "спавнер".
              <lifetime>7200</lifetime> - время "лежания" предмета после спавна ( а также судя,по всему-время после падения на землю с игрока).в сек. (на параметр не влияет ускорение времени на сервере, но влияет параметр из скриптс-"колличество тактов в секунду")
              <restock>0</restock> - на сколько будет отложен спавн предмета до номинала, когда остальные условия для начала спавна выполнены. "задержка спавна".
              <min>20</min>- минимальное колличество предмета на карте после которого начинаеться работа спавнера.
              <quantmin>-1</quantmin> - если предмет "бутылка-магазин"-степень его наполнения минимальная - Для остальных значение -1
              <quantmax>-1</quantmax> - если предмет "бутылка-магазин"-степень его наполнения минимальная - Для остальных значение -1
             (теперь это значение работает и для оружия у котрого нет "сьёмного" магазина, типа СКС или 133 ружжа)
              <cost>100</cost> - приоритет спавна грубо говоря. чем меньше-тем ниже будет вещь в очереди.
              <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> -Флаги спавнера, они указывают в каких типах объектов считать nominal и min значения:
      count_in_cargo - считает все предметы в контейнерах, ящики, рюкзаки, включая автомобили
      count_in_hoarder - будет считаться в таких вещах как закопанные предметы, бочки, сундуки и всевозможные палатки
      count_in_map - объекты, размещенные на карте (здания)
      count_in_player - внутри инвентаря игроков, исключая руки (учёт для игроков онлайн, проверяется)
      crafted - указывает на то, что данный предмет может быть закрафчен игроками
      deloot - указывает что это объекты для спавна на динамических ивентах (событиях). (хеликрашыи, крушения поездов, дтп и прочее)
              <category name="food"/> -категория лута ,может быть ТОЛЬКО одна.
              <tag name="shelves"/> - тэги для настройки точек спавна
              <usage name="Military"/> - класс  лута может быть не один.
              <value name="Tier2"/>  - Зоны в каких будет спавниться лут
              <value name="Tier3"/>
              <value name="Tier4"/>
          </type>
      Если по простому,то "фляжка" будет спавниться в колличестве 30 штук постоянно в зонах 2-3-4 на военных обектах где возможно появление еды с использованием тэга shelves, то есть если в объекте совпадает в начале описания в mapgroupproto.xml,класс,категория,тэг -то предмет заспаниться в точке спавна,которые в этом же файле,для обьекта на карте из файла mapgrouppos.xml
      <type name="ACOGOptic"> <nominal>20</nominal> <lifetime>7200</lifetime> <restock>1800</restock> <min>15</min> <quantmin>-1</quantmin> <quantmax>-1</quantmax> <cost>100</cost> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> <category name="weapons"/> <usage name="Military"/> </type> <type name="AgaricusMushroom"> <lifetime>900</lifetime> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/> </type> как видите,есть даже грибы,которые спавняться динамически.
      И на закуску...
       
      (если вещевые или другие моды перезаписывают эти файлы,то следите за тем что бы они сливались в экстазе,а не выпихивали друг друга)
      По идее-ничего сложного,даже я разобрался.....почти.
       
      Третья фигура Марлезонского балета....
      Пара примеров....
      <type name="StartKitIV"> <nominal>50</nominal> <lifetime>7200</lifetime> <restock>0</restock> <min>40</min> <quantmin>-1</quantmin> <quantmax>-1</quantmax> <cost>100</cost> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> <category name="tools"/> <tag name="shelves"/> <value name="Tier1"/> <value name="Tier2"/> <value name="Tier3"/> <value name="Tier4"/> </type> Это "квадратик" или....гхм!. Что видим?Лут из категории "инструменты",спавниться постоянно в местах с тэгом,по всей карте....А какой он категории?А ни какой,вот и спавниться,хоть на лодках на берегу,хоть на вышке.
      Добавляем категорию...
      <type name="StartKitIV"> <nominal>50</nominal> <lifetime>7200</lifetime> <restock>0</restock> <min>20</min> <quantmin>-1</quantmin> <quantmax>-1</quantmax> <cost>100</cost> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> <category name="tools"/> <tag name="shelves"/> <usage name="Medic"/> <value name="Tier1"/> <value name="Tier2"/> <value name="Tier3"/> <value name="Tier4"/> </type> Всё,теперь только на обьектах с классом "медик"-как и положено. (бегемоты должны быть повешаны!)....
      Обьект радиовышка,кто лазил на неё,тот помнит что на ней спавнился полецейский лут. Почему?
      А смотрим mapgroupproto.xml
      <group name="Land_Tower_TC1"> <usage name="Village" /> <usage name="Industrial" /> <usage name="Police" /> <container name="lootFloor"> <category name="tools" /> <category name="containers" /> <category name="clothes" /> <category name="weapons" /> <category name="books" /> <category name="explosives" /> <point pos="-0.454809 14.404877 0.712779" range="0.314223" height="0.785558" /> <point pos="-0.582537 14.404785 0.034267" range="0.375000" height="0.913483" /> <point pos="0.773581 14.405716 0.067886" range="0.375000" height="0.915054" /> <point pos="-0.448550 14.404892 1.860424" range="0.432076" height="1.080190" /> <point pos="0.641068 14.405640 1.884647" range="0.512500" height="1.279480" /> <point pos="-1.132879 -1.965958 1.837671" range="0.581250" height="1.453125" /> <point pos="0.925214 -1.964554 -0.245559" range="0.821875" height="1.996796" /> <point pos="-0.880515 -1.965805 -0.105441" range="0.821875" height="2.000610" /> <point pos="0.998695 -1.964493 1.724339" range="0.890625" height="1.996490" /> </container> Лут категории "инструмент","контейнер"...."оружие" классов ...Да,"Полиция".....Удаляем нафинг полицию!
      <group name="Land_Tower_TC1"> <usage name="Village" /> <usage name="Industrial" /> <container name="lootFloor"> <category name="tools" /> <category name="containers" /> <category name="clothes" /> <category name="weapons" /> <category name="explosives" /> <point pos="-0.454809 14.404877 0.712779" range="0.314223" height="0.785558" /> <point pos="-0.582537 14.404785 0.034267" range="0.375000" height="0.913483" /> <point pos="0.773581 14.405716 0.067886" range="0.375000" height="0.915054" /> <point pos="-0.448550 14.404892 1.860424" range="0.432076" height="1.080190" /> <point pos="0.641068 14.405640 1.884647" range="0.512500" height="1.279480" /> <point pos="-1.132879 -1.965958 1.837671" range="0.581250" height="1.453125" /> <point pos="0.925214 -1.964554 -0.245559" range="0.821875" height="1.996796" /> <point pos="-0.880515 -1.965805 -0.105441" range="0.821875" height="2.000610" /> <point pos="0.998695 -1.964493 1.724339" range="0.890625" height="1.996490" /> </container> </group> Теперь в лучшем случае дробаш там будет.
       
      Ну,как то так....

      Запрещено копирование данной статьи без соглосование с Администрацией и автором на другие ресурсы. All Rights Reserved
    • By paranoyk
      Может кто подскажет как спавнить деревья и кустарник с которым можно взаимодействовать?
    • By BR0wi
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Подскажите как удалить точки спавна лута после удаления ванильных объектов через дейз эдитор. А то гадость какая-то получается, объектов нет, а лут спавнит.
      Пытался найти точки по примерным коордмнатам в файле mapgrouppos.xml, но что-то как-то не получается, да и объектов слишком много удалено, вручную так искать несколько дней уйдет. Кто-нибудь владеет информацией на этот счет?
      Заранее спасибо.
  • 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.