Перейти к содержимому


Фотография

Civilian ambient engine


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 27

#1 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 30 September 2014 - 01:12

 
Приветствую вас, уважаемые коллеги !
 
Решил я продолжить свои изыскания в теме реализации лайфа цивилов на карте, и мне удалось изыскать очень даже такой, не стандартный подход. Во всяком случае мне ещё не попадалась такая технология реализации этой темы. А такой подход, по моему мнению, имеет в себе очень даже большой потенциал.
Так вот, во время размышлений о реализации функционала, мне пришла в голову мысль, вот ползают вокруг игрока по карте гады ползучие, скачут твари ушастые, летает там что то, стрекочет, и почему бы к этому ещё не добавить двуногих прямо ходящих! И какая прелесть), всё это за нас будет делать движок Армы.
 
Что понадобится сделать для этого
 
1 - Как ни крути) это будет аддон.
2 - В этом аддоне мы будем производить конфигурацию требуемых для реализации объектов и переконфигурацию мира АЛТИС
3 - Так же нам понадобится немножечко так функций
 
И ещё несколько слов о Ambient в Арме. Реализация для сингла вообще стоит смешного, а вот для мультика пришлось пойти на хитрость, и дело вот в чём, вся окружающая живность спавнится локально на клиенте, я пробовал передать выделенному серверу ссылку на бота, сервер послал меня на фиг) и сказал нет такого зверя. Но я всё так нашёл ещё одно не стандартное решение и этой проблемы, что бы и мультик тоже был кошерный. Я решил подсунуть движку пустышки который движок и будет спавнить, а те в свою очередь при инициализации будут спавнить нам правильных ботов, что нам и нужно.
 
И так, нам понадобится 2 объекта которые будет спавнить движок, один рабочий, другой для теста. Это у нас будет лежать в файле CfgVehicles.hpp
class CfgVehicles {

	class Sign_sphere10cm_F;
	
	class Logic_ambient_test : Sign_sphere10cm_F {	//	объект для тестов, это те красный фиговины над головами ботов
	
		displayName = "Logic ambient test";
		
		class EventHandlers {
			init = "(_this select 0) spawn ptm_fnc_initCivilianAmbient";
		};
	};
	
	class Logic_ambient: Logic_ambient_test {	//	правильный объект)
		displayName = "Logic ambient";
		model = "\A3\Weapons_F\empty.p3d";
	};
};
Далее нам надо отредактировать сам мир, а конкретно класс AmbientA3, и сделаем мы это в файле CfgWorlds.
ВНИМАНИЕ!!! Из полей копировать не стоит, потому что я буду делать сокращения, сам аддон прилагается, всё там.
class CfgWorlds {
	class DefaultWorld {
		class Weather {
			class Overcast;
		};
	};
	
	class CAWorld : DefaultWorld {
		class Grid {};
		class DayLightingBrightAlmost;
		class DayLightingRainy;
		class DefaultClutter;
		
		class Weather : Weather {
			class Lighting;
			
			class Overcast : Overcast {
				class Weather1;
				class Weather2;
				class Weather3;
				class Weather4;
				class Weather5;
				class Weather6;
			};
		};
	};
	class DefaultLighting;
	
	class Altis : CAWorld {
		class AmbientA3 {
			maxCost = 1500;
			
			/* Civilian Ambient */

			/*
			//	Рабочая конфигурация
			class Radius400_600 {
				areaSpawnRadius = 400.0;
				areaMaxRadius = 600.0;
				spawnCircleRadius = 30.0;
				spawnInterval = 4.7;
				
				class Species {
					class Logic_ambient {
						maxCircleCount = "(10 * houses)";
						maxWorldCount = 200;
						cost = 5;
						spawnCount = 1;
						groupSpawnRadius = 5;
						maxAlt = 900;
						minAlt = -5;
					};
				};
			};
			*/
			
			//	Тестовая конфигурация
			class Radius10_30 {
				areaSpawnRadius = 10.0;
				areaMaxRadius = 30.0;
				spawnCircleRadius = 1.0;
				spawnInterval = 2.0;
				
				class Species {
					class Logic_ambient_test {
						maxCircleCount = "(10 * houses)";
						maxWorldCount = 200;
						cost = 5;
						spawnCount = 1;
						groupSpawnRadius = 3;
						maxAlt = 900;
						minAlt = -5;
					};
				};
			};
			
			/* ----------------- */
			
		};
	};
};
Сразу предупрежу, господа, здесь я излагаю концепцию, и над конфигурацией желательно поработать!
 
Далее те немножечко функций
 
Функция ptm_fnc_initCivilianAmbient, лежит в файле fn_initCivilianAmbient.sqf, эту функцию инициализирует объект Logic_ambient отспавненый движком, эта функция инициализирует спавн бота
_lgAgent 	= _this;
_lgAgentPos	= getPosATL _lgAgent;
_debug 		= true;

_agent = createAgent ["C_man_1", [0,0,0], [], 0, "NONE"];

_agent switchMove "";
waitUntil { !isNull _agent };

if (_debug) then {	
	systemChat format["CA: Spawn: %1", _agent];
};

if (!isNull _agent || !isNull _lgAgent) then {

	[[_agent], "ptm_fnc_randomizeCiv1", false] spawn BIS_fnc_MP;

	_agent setDir (random 360);
	_agent setPosATL _lgAgentPos;

	sleep 0.01;

	_lgAgent attachTo [_agent, [0,0,2]];

	[_agent, _lgAgent] spawn ptm_fnc_agentMove;

} else {
	deleteVehicle _agent;
};
Функция ptm_fnc_randomizeCiv1, лежит в файле fn_randomizeCiv1.sqf, приятнее наблюдать немножечко по разному одетых ботов, найдёте в аддоне.
И функция ptm_fnc_agentMove, лежит в файле fn_agentMove.sqf, что бы боты не таращились на нас тупо стоя на месте, а делали вид что у них очень много неотложных дел. Найдёте там же)
 
И всё! Коллеги! До безобразного неприличия просто!
 
Ссылки:

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

 
Прикрепленный файл  CivilianAmbientEngine.rar   7.88К   35 Количество загрузок:

  • 2

#2 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 02 October 2014 - 01:20

Укуренный средиземноморский товарищ за рулём.

Логика армы управляющая ботами с фанатичным упорством сводит их к столкновению.

Бот за рулём даже в чистом поле найдёт то единственное обо что он будет долго и с удовольствием биться лбом.

 


  • 1

#3 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 06 October 2014 - 02:54


  • 0

#4 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 21 October 2014 - 02:16

Приветствую вас коллеги!

 

В своих изысканиях я натолкнулся на очень интересную тему.

Она скорее всего будет полезна тем, кто создаёт сингл миссии, и сам же в них потом играет, есть кошерный способ, поддать производительности вашему клиенту, и добавить, скажем так, по больше красок, в вашу игру.

 

Краткая суть такова

 

Ваш сингл должен лежать в папке MPmission

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

Далее запускаете Headless Client, после запуска он будет ожидать старта сервера, если сервер ещё не запущен, и подключится автоматически.

 

Стартуете сервер

 

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

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

 

В результате, на видео, был реализован сценарий

 

Ботов спавнит клиент, он же сервер, и они остаются его же собственностью. Лучше так, на пальцах объяснять почему именно так, не айс), практические наблюдения, скажем так.

 

А контроль над ситуацией, и проведение всех необходимых расчётов передаётся Безголовому клиенту, от которого клиент-сервер получает уже готовые результаты произведённых вычислений, и применяет их к ботам.

 

И при таком сценарии мы упрёмся только в производительность видео карты.

 

Образец для подражания прикладывается.

 

ТТХ того на чём писалось видео

 

i7 - 920 - 2.66

12 gb

gtx-580

 

 

Прикрепленный файл  A3BM_HClients.rar   5.57К   56 Количество загрузок:

 


  • 3

#5 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 13 January 2015 - 23:01

Просто?!))) Кхе - кхе.

Я так понял это все для экономии FPS!? По сути дела тут есть и мой интерес из темы про "Спавн Юнитов"! Так как, если заменить "Цивилов" на одну из вражеских сторон, движок будет спавнить врагов в определенном радиусе? Так? 


  • 0

#6 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 13 January 2015 - 23:54

Просто?!))) Кхе - кхе.

Я так понял это все для экономии FPS!? По сути дела тут есть и мой интерес из темы про "Спавн Юнитов"! Так как, если заменить "Цивилов" на одну из вражеских сторон, движок будет спавнить врагов в определенном радиусе? Так? 

не важно на кого, поройся в миссии, там вся логика, для примера.


  • 0

#7 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 14 January 2015 - 00:11

Если в кратко, то

 

эта часть кода из файла agentLoiter.inc

	if (!isNil "HC_present") then {
		[[[_agent, _this select 0, _this select 1, 120], {
			[_this, "ptm_fnc_agentLoiter", (owner HeadlessClientController)] call BIS_fnc_MP;
		}], "BIS_fnc_spawn", false] call BIS_fnc_MP;
	} else {;
	
		[_agent, _this select 0, _this select 1, 120] spawn ptm_fnc_agentLoiter;
	};

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

 

Эта часть кода из файла fn_agentLoiter.sqf

		if (!isNil "HC_present") then {
		
			[[[_agent, (1 + (round random 2)), _movePos], {
				(_this select 0) forceSpeed (_this select 1);
				(_this select 0) MoveTo (_this select 2);
			}], "BIS_fnc_spawn", false] call BIS_fnc_MP;
		} else {
		
			_agent forceSpeed (1 + (round random 2));
			_agent MoveTo _movePos;
		};

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


Сообщение отредактировал SteelRat: 14 January 2015 - 00:12

  • 0

#8 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 14 January 2015 - 00:20

Блин - Аддон бы убрать.


  • 0

#9 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 14 January 2015 - 00:28

Блин - Аддон бы убрать.

В смысле, аддон?


 

Я так понял это все для экономии FPS!?

Можно сказать и так.

 

Ввиду того, что БИСам влом запилить движок отвечающий сегодняшним временам, они сделали этот костыль, который позволяет задействовать тот вычислительный ресурс, который не использует арма. Это если на одном компе.

 

А по сути тема полезная в том плане, что можно поднять сервер, который по факту будет состоять из нескольких физических компов, а вот это уже реальный кул!


Сообщение отредактировал SteelRat: 14 January 2015 - 00:31

  • 0

#10 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 14 January 2015 - 00:41

1 - Как ни крути) это будет аддон.

 

2 - В этом аддоне мы будем производить конфигурацию требуемых для реализации объектов и переконфигурацию мира АЛТИС
 
Map_Altis_Ambient - Аддон?

Сообщение отредактировал D_Donskoy: 14 January 2015 - 00:51

  • 0

#11 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 14 January 2015 - 00:50

/* Functions */

ptm_fnc_getUnitTypes = {

 

PTm_UNITS_MEN_AFRO = [];

PTm_UNITS_MEN_ASIA = [];

PTm_UNITS_MEN_EURO = [];

PTm_UNITS_MEN_CIVILIAN = [];

PTm_UNITS_MEN_WEST = [];

PTm_UNITS_MEN_EAST = [];

PTm_UNITS_MEN_INDEPENDENT = [];

 

{

switch getText(configfile >> "CfgVehicles" >> _x >> "vehicleClass") do {

case "Men" : { 

switch getNumber(configfile >> "CfgVehicles" >> _x >> "side") do {

case 1 : {PTm_UNITS_MEN_WEST SET [count PTm_UNITS_MEN_WEST, _x];};

case 0 : {PTm_UNITS_MEN_EAST SET [count PTm_UNITS_MEN_EAST, _x];};

case 2 : {PTm_UNITS_MEN_INDEPENDENT SET [count PTm_UNITS_MEN_INDEPENDENT, _x];};

case 3 : {PTm_UNITS_MEN_CIVILIAN SET [count PTm_UNITS_MEN_CIVILIAN, _x];};

};

};

case "Afroamerican" : { PTm_UNITS_MEN_AFRO SET [count PTm_UNITS_MEN_AFRO, _x];};

case "Asian" : { PTm_UNITS_MEN_ASIA SET [count PTm_UNITS_MEN_ASIA, _x];};

case "European" : { PTm_UNITS_MEN_EURO SET [count PTm_UNITS_MEN_EURO, _x];};

};

} forEach ((configfile >> "CfgVehicles") call Bis_fnc_getCfgSubClasses); - это нужные классы которые можно заменить на врагов?

 

PTM_UNIT_TYPES = [];

{

_i = _x;

{

PTM_UNIT_TYPES pushBack _x;

} foreach _i;

} foreach [PTm_UNITS_MEN_AFRO, PTm_UNITS_MEN_ASIA, PTm_UNITS_MEN_EURO, PTm_UNITS_MEN_CIVILIAN];

}; - а вот это длдя чего?


  • 0

#12 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 14 January 2015 - 00:57

 

1 - Как ни крути) это будет аддон.

 

2 - В этом аддоне мы будем производить конфигурацию требуемых для реализации объектов и переконфигурацию мира АЛТИС
 
Аддон?

 

 

А вон про что, тут да, конфигурировать виртуальную реальность можно только через аддон.

 

А то о чём мы беседуем этого не требует, берёте миссию, и изучаете, если желаете то запускаете)


/* Functions */

ptm_fnc_getUnitTypes = {

 

PTm_UNITS_MEN_AFRO = [];

PTm_UNITS_MEN_ASIA = [];

PTm_UNITS_MEN_EURO = [];

PTm_UNITS_MEN_CIVILIAN = [];

PTm_UNITS_MEN_WEST = [];

PTm_UNITS_MEN_EAST = [];

PTm_UNITS_MEN_INDEPENDENT = [];

 

{

switch getText(configfile >> "CfgVehicles" >> _x >> "vehicleClass") do {

case "Men" : { 

switch getNumber(configfile >> "CfgVehicles" >> _x >> "side") do {

case 1 : {PTm_UNITS_MEN_WEST SET [count PTm_UNITS_MEN_WEST, _x];};

case 0 : {PTm_UNITS_MEN_EAST SET [count PTm_UNITS_MEN_EAST, _x];};

case 2 : {PTm_UNITS_MEN_INDEPENDENT SET [count PTm_UNITS_MEN_INDEPENDENT, _x];};

case 3 : {PTm_UNITS_MEN_CIVILIAN SET [count PTm_UNITS_MEN_CIVILIAN, _x];};

};

};

case "Afroamerican" : { PTm_UNITS_MEN_AFRO SET [count PTm_UNITS_MEN_AFRO, _x];};

case "Asian" : { PTm_UNITS_MEN_ASIA SET [count PTm_UNITS_MEN_ASIA, _x];};

case "European" : { PTm_UNITS_MEN_EURO SET [count PTm_UNITS_MEN_EURO, _x];};

};

} forEach ((configfile >> "CfgVehicles") call Bis_fnc_getCfgSubClasses); - это нужные классы которые можно заменить на врагов?

 

PTM_UNIT_TYPES = [];

{

_i = _x;

{

PTM_UNIT_TYPES pushBack _x;

} foreach _i;

} foreach [PTm_UNITS_MEN_AFRO, PTm_UNITS_MEN_ASIA, PTm_UNITS_MEN_EURO, PTm_UNITS_MEN_CIVILIAN];

}; - а вот это длдя чего?

 

Коллега! Аяй яй! Неужели то что большими буквами вам не о чём не говорит!

 

Эта функция вытаскивает из конфига армы классы юнитов.


PTm_UNITS_MEN_AFRO = [];			// Негры, они и в африке негры)
PTm_UNITS_MEN_ASIA = [];			// Азиаты
PTm_UNITS_MEN_EURO = [];			// Европейцы
PTm_UNITS_MEN_CIVILIAN = [];		        // Цивилы
PTm_UNITS_MEN_WEST = [];			// Синие
PTm_UNITS_MEN_EAST = [];			// Красные
PTm_UNITS_MEN_INDEPENDENT = [];		        // Независимые

Из этого можно составлять комбинации.


  • 0

#13 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 14 January 2015 - 00:58

... ...  8)

Дружище я конечно не чайник - но до этой глубины у меня воздуха пока не хватает)))


  • 0

#14 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 14 January 2015 - 00:59


PTM_UNIT_TYPES = [];

{

_i = _x;

{

PTM_UNIT_TYPES pushBack _x;

} foreach _i;

} foreach [PTm_UNITS_MEN_AFRO, PTm_UNITS_MEN_ASIA, PTm_UNITS_MEN_EURO, PTm_UNITS_MEN_CIVILIAN];

}; - а вот это длдя чего?

А вот это частный случай

Просто все свалены в одну кучу


Сообщение отредактировал SteelRat: 14 January 2015 - 01:00

  • 0

#15 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 14 January 2015 - 01:09

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

Модуль "Side" - конечно крутой модуль, но! Что если сделать сделать так чтобы он добавлял специфики в размещение юнитов. 

Например:

Вместо одного юнита он ставил АГС на высоких ногах на вышки и  на крыши штабных так сказать зданий. И заодно добавлял модуль "АЛЛОВУ ГЕТ ИН" к этим самым юнитам и АГСам.

И если уж он - модуль способен определять типы здания и направления юнитов по отношению к ним, то может он будет способен распознавать навесы под которые заодно он спавнил бы определенную технику и заодно добавлял модуль "АЛЛОВУ ГЕТ ИН".

О как!!!

Сам не смогу - прошу и предлогаю вам!)


  • 0

#16 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 14 January 2015 - 01:16

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

Модуль "Side" - конечно крутой модуль, но! Что если сделать сделать так чтобы он добавлял специфики в размещение юнитов. 

Например:

Вместо одного юнита он ставил АГС на высоких ногах на вышки и  на крыши штабных так сказать зданий. И заодно добавлял модуль "АЛЛОВУ ГЕТ ИН" к этим самым юнитам и АГСам.

И если уж он - модуль способен определять типы здания и направления юнитов по отношению к ним, то может он будет способен распознавать навесы под которые заодно он спавнил бы определенную технику и заодно добавлял модуль "АЛЛОВУ ГЕТ ИН".

О как!!!

Сам не смогу - прошу и предлогаю вам!)

 

Да я уже ковырялся с ним, вот это видео как раз продукт этого ковыряния

http://arma3.ru/foru...atform/?p=27889

Доделал цивилов, заготовки там лежат, но модуль не доступен.


  • 0

#17 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 14 January 2015 - 01:26

Круто)

Осталось разделить Цивилов по регионам - типа:

Рыбаки в порту

Гонщики у трасс

пилоты на аэродромах

ну и т.д.)

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


Сообщение отредактировал D_Donskoy: 14 January 2015 - 01:27

  • 0

#18 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 14 January 2015 - 01:34

Круто)

Осталось разделить Цивилов по регионам - типа:

Рыбаки в порту

Гонщики у трасс

пилоты на аэродромах

ну и т.д.)

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

По поводу именно цивилов, там норм амбиент, рыбаки на пирсах и портах, рабочие на рабочих местах, и цивильный сервис тоже в наличии, только там работёнки ещё хватает, я задействовал что готово, там даже имеются классы объектов, которых в арме ещё нет)


  • 0

#19 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 14 January 2015 - 01:47

Я заметил)

Не хватает военной тематики - типа военных на базах и диктатуры типа комменданского часа и беспредела военных типа расстрела на улицах)

И будет супер платформа)))


Идет патруль - хопа цивил криво посмотрел - расстрелять(УЖАС КОНЕЧНО) - за то по улицам просто так не погуляешь)))

Ну а потом освободительное движение сепаратисты и так далее! - круть. 

Как тебе идея?)))


Сообщение отредактировал D_Donskoy: 14 January 2015 - 01:48

  • 0

#20 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 14 January 2015 - 01:53

Я заметил)

Не хватает военной тематики - типа военных на базах и диктатуры типа комменданского часа и беспредела военных типа расстрела на улицах)

И будет супер платформа)))

 

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

 

Вот оригинальная функция оккупации билдингов, не широкий выхлоп, я скажу, и хватит забот по определению всяких цифирок)

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


  • 0




Яндекс.Метрика