Обсуждение: создание автомобиля

Аватара пользователя
Oskar
Администратор
Сообщения: 237
Зарегистрирован: 28 апр 2016, 11:23
Откуда: Санкт-Петербург

Обсуждение: создание автомобиля

Сообщение Oskar » 30 июл 2017, 17:06

Den, на сколько я знаю - никакая. Есть параметр "fuelCapacity" - объем бака, а расход высчитывается скорей всего движком от параметров двигателя, и возможно веса

Аватара пользователя
Den
Пользователь
Пользователь
Сообщения: 147
Зарегистрирован: 05 июн 2016, 03:57

Обсуждение: создание автомобиля

Сообщение Den » 31 июл 2017, 03:57

Oskar, Спасибо.

Аватара пользователя
Den
Пользователь
Пользователь
Сообщения: 147
Зарегистрирован: 05 июн 2016, 03:57

Обсуждение: создание автомобиля

Сообщение Den » 14 авг 2017, 18:35

Может кому пригодится нарыл строку в конфиге которая отвечает за расход топлива "fuelConsumptionRate"

Аватара пользователя
Den
Пользователь
Пользователь
Сообщения: 147
Зарегистрирован: 05 июн 2016, 03:57

Обсуждение: создание автомобиля

Сообщение Den » 14 авг 2017, 21:43

Народ вопрос такой, допустим создаю авто с кунгом (в сам кунг войти нельзя нет внутрянки) как сделать что-бы стекла не просвечивались и при нанесении урона был слышен звук разбивающегося стекла ? Может я вопрос не правильно поставил но к примеру в ванильной ARME в ремонтный zamak нельзя войти, но при нанесении урона, звук от бьющихся стекол слышен но они не исчезают, в общем как это сделать?

Аватара пользователя
Oskar
Администратор
Сообщения: 237
Зарегистрирован: 28 апр 2016, 11:23
Откуда: Санкт-Петербург

Обсуждение: создание автомобиля

Сообщение Oskar » 15 авг 2017, 13:52

Den, чтоб стекла не просвечивались - убери альфу)))
Возьми к примеру стандартный мат стекла, разбинарь его, и выкрути в 0 параметр альфы. Либо просто на текстуре удалить альфу.
А за звуки попаданий пуль отвечает ЛОД Fire Geometry - обводишь все стекла отдельными "кубиками" (компонентами), и присваиваешь какой нибудь стандартный материал стекла, который находится по пути "P:\A3\data_f\penetration"

П.С.
Материал стекла присваиваемый в цифровых ЛОДах, и материал который отвечает за звуки в Fire Geometry - разные материалы, хоть оба и .rvmat

П.С.2
Если делаешь стекла в Fire Geometry - тогда надо всю геометрию для машины делать, иначе пули сквозь пролетать будут. Либо можно стекла сделать в простом Geometry, но тогда нужно удалить ЛОД Fire Geometry, и не забыть добавить боксам вес и номер компонента

Fire Geometry:
UAZ_FireGeometry.jpg
Geometry:
UAZ_Geometry.jpg
За "fuelConsumptionRate" - спасибо, не знал

Аватара пользователя
Den
Пользователь
Пользователь
Сообщения: 147
Зарегистрирован: 05 июн 2016, 03:57

Обсуждение: создание автомобиля

Сообщение Den » 16 авг 2017, 20:48

Oskar, спасибо. Как всегда оперативно.

Аватара пользователя
Den
Пользователь
Пользователь
Сообщения: 147
Зарегистрирован: 05 июн 2016, 03:57

Обсуждение: создание автомобиля

Сообщение Den » 16 авг 2017, 20:59

Я уже когда то задавал подобный вопрос но задам еще раз мало ли может кто и ответит. Вопрос по "sounds.hpp" а именно интересует как правильно сделать звуки двигателя? Я так понимаю там все зависит от RPM (оборотов двигателя) вот как там правильно выставить значения и что за что отвечает?

Аватара пользователя
Oskar
Администратор
Сообщения: 237
Зарегистрирован: 28 апр 2016, 11:23
Откуда: Санкт-Петербург

Обсуждение: создание автомобиля

Сообщение Oskar » 16 авг 2017, 21:28

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

Аватара пользователя
Den
Пользователь
Пользователь
Сообщения: 147
Зарегистрирован: 05 июн 2016, 03:57

Обсуждение: создание автомобиля

Сообщение Den » 30 авг 2017, 16:10

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

Аватара пользователя
Oskar
Администратор
Сообщения: 237
Зарегистрирован: 28 апр 2016, 11:23
Откуда: Санкт-Петербург

Обсуждение: создание автомобиля

Сообщение Oskar » 05 сен 2017, 09:36

Den, пока не могу конкретно ответить, надо разобраться, у меня получалось разделить кабину и кузов, но как я это сделал - не совсем понимаю) Как разберусь скину решение.

Аватара пользователя
berkuthawk
Пользователь
Пользователь
Сообщения: 19
Зарегистрирован: 24 сен 2017, 14:23
Откуда: Санкт-Петербург

Обсуждение: создание автомобиля

Сообщение berkuthawk » 25 сен 2017, 17:58

добрый вечер. не могли бы подробней рассказать где взять pbo прокси? я прогуглил и к примеру driver_mid01 лежит в забинаренном файле в корне армы. Пытаться разбинарить или где-то можно взять полностью все прокси водил?

Аватара пользователя
Oskar
Администратор
Сообщения: 237
Зарегистрирован: 28 апр 2016, 11:23
Откуда: Санкт-Петербург

Обсуждение: создание автомобиля

Сообщение Oskar » 25 сен 2017, 18:53

berkuthawk, все прокси лежат в A3\data_F, их нужно распаковать на диск P:\ по соответствующему пути. Лучше распакуй всю папку data_f - там и маты стекол, и маты для Fire Geometry и много чего еще полезного.
Прокси просто вставляешь в оксиген "Create ->Proxy" и выбираешь нужную, тот же driver_mid01.
В бульдозере уже у тебя вместо треугольника появляется человек в соответствующей позе - садишь его как надо двигая в окси проксю и альт-табаясь обратно в бульдозер.
ЧТоб быстрей грузилось можно скрыть ненужные объекты в сцене, отключить тени и подхват model.cfg
Прокси водителей\пассажиров\стрелков и т.п. - это не анимация - это просто там лежит для удобства, саму анимацию укаываешь в config.cpp
Это все есть в статьях - читай.

Аватара пользователя
Den
Пользователь
Пользователь
Сообщения: 147
Зарегистрирован: 05 июн 2016, 03:57

Обсуждение: создание автомобиля

Сообщение Den » 26 сен 2017, 04:05

Oskar, подскажи пожалуйста как сделать что бы в авто было много окон (ну например как в автобусе).
Я брал конфиги с армовских примеров и я так понимаю там прописаны шесть стекол, вот что и где нужно добавить в конфигах что бы к примеру на пятнадцать стекол накладывались материалы поврежден и уничтожен?
Я тут сам пробовал но чет ни фига не работает:
.срр

Код: Выделить всё

#include "kraz258_basicdefines_A3.hpp"
class DefaultEventhandlers;

#include "kraz258_CfgPatches.hpp"

class CfgEditorCategories
{
	class MyCategory // создаем класс нашей категории
	{
		displayName = "$STR_my_name1"; // название вашей категории
	};
};	

class CfgEditorSubcategories
{
	class MySubcategory // создаем класс нашей подкатегории
	{
		displayName = "$STR_my_name2"; // и так же название подкатегории
	};
};				
 
class CfgVehicles
{
	class Car;
	    class Car_F: Car
	    {
			class AnimationSources;
			class UserActions;
		    class HitPoints   //мы хотим использовать hitpoints, предопределенный для всех автомобилей
		    {
			    class HitLFWheel;
			    class HitLBWheel;
			    class HitLMWheel;
			    class HitLF2Wheel;

			    class HitRFWheel;
			    class HitRBWheel;
			    class HitRMWheel;
			    class HitRF2Wheel;
				
			    class HitBody;

			    class HitGlass1;
			    class HitGlass2;
			    class HitGlass3;
			    class HitGlass4;
			    class HitGlass5;
			    class HitGlass6;
				class HitGlass7;
				class HitGlass8;
				class HitGlass9;
				class HitGlass10;
				class HitGlass11;
		    };
	    };

	class kraz258: Car_F // Создаем базовый класс нашего автомобиля, в котором задаем все необходимые параметры
	{
		model 	= "kraz258\258_15.p3d"; // Путь до нашей модели
		picture	= "\A3\Weapons_F\Data\placeholder_co.paa"; // Путь до картинки (превьюшки машины)
		Icon	= "\A3\Weapons_F\Data\placeholder_co.paa"; // Эта иконка обозначает нашу машину на карте
		editorCategory = "MyCategory"; // указываем класс нашей категории
        editorSubcategory = "MySubcategory"; // и класс подкатегории
		priority = 2;
        side = 3; // на стороне гражданских
		scope = 2; // при значении 2 техника отображается в арсенале, редакторе, при значении 0 нет, но ее можно призвать по классу
		crew = "C_man_w_worker_F"; // класснейм солдата, который будет по умолчанию спавниться в машине при ее спавне
		displayName = "$STR_my_name3";
		
		fuelConsumptionRate     = 38;        /// рсход топлива
		terrainCoef 	= 5; 	// Коэффициент сцепления колес с поверхностью. Слишком высокое значение затруднит движение на мягких поверхностях (песок, грязь)
		turnCoef 		= 3.7; 	// Радиус поворота колес (для легковых лучше оставить по умолчанию)
		precision 		= 2; 	// Как точно AI ориентируется по вайпоинтам. Меньше значение означает более точные ориентиры, но при этом скорость их будет ниже.
		brakeDistance 	= 20; 	// За какое расстояние до вайпоинта AI начинает торможение (?)
		acceleration 	= 10; 	// Как быстро AI ускоряется на авто (?)
		
		fireResistance 	= 5; 	// Сопротивление урону от огня (оружие)
		armor 			= 32; 	// Тоже самое, но от ракет, столкновений и взрывов
		cost			= 50000; // На сколько приоритетна цель для противника
		
		transportMaxBackpacks 	= 1; // Максимальное количество рюкзаков, вмещаемых в инвентарь транспорта
		transportSoldier 		= 1; // Максимальное количество пассажиров (кроме водителя)
        
		
		wheelDamageRadiusCoef 	= 0.9; 			// На какой процент уменшится колесо при повреждении
		wheelDestroyRadiusCoef 	= 0.4;			// Тоже самое, но для уничтоженного коеса
		maxFordingDepth 		= 1;			// Высота (в метрах ?), при котором вода начинает повреждать двигатель
		waterResistance 		= 1;			// Время, по истечении которого двигатель начинает получать повреждения
		crewCrashProtection		= 2.75;			// Коэффициент защиты для пассижиров транспорта (?)
		driverLeftHandAnimName 	= "drivewheel"; // Название кости водителя для анимации поворота руля рукой DrivingWheel
		driverRightHandAnimName = "drivewheel";	// Тоже самое для правой руки. (вместо руля может быть ручка КПП)
		
        class AnimationSources : AnimationSources
		
		{
			class opora 
			{
				source = "opora_anim";
				animPeriod = 3.5;
				initPhase = 0;
			};
		};
		
		class UserActions : UserActions
		{
             class zamok_otkr 
			{
				position = "action_zamok";
				radius = 1;
				onlyforplayer = "true";
				statement = "this animate[""zamok"",1]";
				condition = "this animationPhase ""zamok"" < 0.8 ";
				displayName = "$STR_zamok_otkr";
			};
			
			class zamok_zakr : zamok_otkr 
			{
				condition = "this animationPhase ""zamok"" > 0.5 ";
				statement = "this animate[""zamok"",0]";
				displayName = "$STR_zamok_zakr";
			};
		};
		
		class TransportItems // Класс инвентаря транспортного средства
		{
			class _xx_FirstAidKit // Добавляем аптечку
			{ 
				name = "FirstAidKit";
				count = 1; // Количество
			};
			class _xx_ToolKit // НАбор инструментов
			{ 
				name = "ToolKit";
				count = 1;
			};
			class _xx_ItemGPS //GPS
			{ 
				name = "ItemGPS";
				count = 0;
			};
			class _xx_ItemWatch // Часы
			{ 
				name = "ItemWatch";
				count = 0 ;
			};
			class _xx_ItemMap // Карта
			{ 
				name = "ItemMap";
				count = 0;
			};
		};
		
		class Turrets{};   //  не имеет никакого стрелка, ни командующего
		class HitPoints: HitPoints // Включаем класс хитпоинтов (повреждения)
		{
			
			
			class HitLFWheel:HitLFWheel	{armor=0.400; passThrough=0;}; // Повреждения колес. armor- значение защиты колес, passThrough- считается от об
			class HitLF2Wheel:HitLF2Wheel{armor=0.400; passThrough=0;};
			class HitLMWheel:HitLMWheel{armor=0.400; passThrough=0;};
			class HitLBWheel:HitLBWheel{armor=0.400; passThrough=0;};
 
			class HitRFWheel:HitRFWheel	{armor=0.400; passThrough=0;};
			class HitRF2Wheel:HitRF2Wheel{armor=0.400; passThrough=0;};
			class HitRMWheel:HitRMWheel	{armor=0.400; passThrough=0;};
			class HitRBWheel:HitRBWheel	{armor=0.400; passThrough=0;};

			class HitFuel 			{armor=0.50; material=-1; name="fueltank"; visual=""; passThrough=0.2;}; // name= Указываем точки в ЛОДе "Memory" отвечающие за бак
			class HitEngine 		{armor=0.50; material=-1; name="engine"; visual=""; passThrough=0.2;}; // Точки двигателя
			class HitBody: HitBody 	{name = "body"; visual="Camo1"; passThrough=1;}; // visual= при повреждении кузова по точкам "body" - накладывается текстура повреждения на селекш "camo1"
			class HitBody1: HitBody {name = "body1"; visual="Camo2"; passThrough=1;}; // visual= при повреждении кузова по точкам "body" - накладывается текстура повреждения на селекш "camo1"
            class HitBody2: HitBody {name = "body2"; visual="Camo3"; passThrough=1;};
			class HitBody3: HitBody {name = "body3"; visual="Camo4"; passThrough=1;};
			
			class HitGlass1:HitGlass1 {armor=0.14;}; // Броня стекол 
			class HitGlass2:HitGlass2 {armor=0.14;};
			class HitGlass3:HitGlass3 {armor=0.14;};
			class HitGlass4:HitGlass4 {armor=0.14;};
			class HitGlass5:HitGlass5 {armor=0.14;};
			class HitGlass6:HitGlass6 {armor=0.14;};
			class HitGlass7:HitGlass7 {armor=0.14;};
			class HitGlass8:HitGlass8 {armor=0.14;};
			class HitGlass9:HitGlass9 {armor=0.14;};
			class HitGlass10:HitGlass10 {armor=0.14;};
			class HitGlass11:HitGlass11 {armor=0.14;};
		};
	
		driverAction 		= driver_offroad01; // Анимация водителя за рулем
		cargoAction[] 		= {passenger_low01, passenger_generic01_leanleft, passenger_generic01_foldhands}; // Массив анимаций для пассажиров, перечисляющихся через запятую
		getInAction         = GetInMRAP_01; 		// Анимация водителя при посадке в транспортное средство
		getOutAction        = GetOutLow; 		// Анимация высадки из него
		cargoGetInAction[] = {"GetInMRAP_01","GetInMRAP_01","GetInHemttBack"};	// Тоже самое для пассажиров
		cargoGetOutAction[] = {"GetOutLow","GetOutLow","GetOutHighZamak"};
		
		#include "kraz258_sounds.hpp"	// Подключаем отдельный конфиг звуков
		#include "kraz258_pip.hpp"		// Заркал
		#include "kraz258_physx.hpp"
		
		// По этим точкам в ЛОДе "memory" рисуются следы от колес на земле
		
		// переднее левое колесо, левая точка
		memoryPointTrackFLL = "TrackFLL"; 
		// переднее левое, правая точка
		memoryPointTrackFLR = "TrackFLR"; 
		// заднее левое, левая точка
		memoryPointTrackBLL = "TrackBLL"; 
		// заднее левое, правая точка
		memoryPointTrackBLR = "TrackBLR"; 
		// переднее правое, левая точка
		memoryPointTrackFRL = "TrackFRL"; 
		// переднее правое, правая точка
		memoryPointTrackFRR = "TrackFRR"; 
		// заднее правое, левая точка
		memoryPointTrackBRL = "TrackBRL"; 
		// заднее правое, правая точка
		memoryPointTrackBRR = "TrackBRR"; 		

		class Damage // определяем класс визуального повреждения
		{
			tex[]={};
			mat[]=
			{
				
				
				"A3\data_f\glass_veh.rvmat", 		// Материал для целого стекла авто. Должно быть указано как в самой модели
				"A3\data_f\Glass_veh_damage.rvmat", 	// Материал поврежденного стекла (при достижения половины значения из хитпоинтов "armor=0.25")
				"A3\data_f\Glass_veh_damage.rvmat",		// Материал разбитого стекла
			
				"kraz258\data\kraz258_kabina.rvmat",	// В первой строчке должен указываться материал, который пренадлежит селекшену "camo1" (краска, кузов авто)
				"kraz258\data\damage\truck_02_kab_damage.rvmat",	// Вторая строка присваевает материал повреждения вместо первого (для нормального отображения UV-шка должна быть правильной формы)
				"kraz258\data\damage\truck_02_kab_destruct.rvmat",	     // Материал взорванной машины
			
				"kraz258\data\kraz258_chassis.rvmat",	// В первой строчке должен указываться материал, который пренадлежит селекшену "camo1" (краска, кузов авто)
				"kraz258\data\damage\truck_02_kab_damage.rvmat",	// Вторая строка присваевает материал повреждения вместо первого (для нормального отображения UV-шка должна быть правильной формы)
				"kraz258\data\damage\truck_02_kab_destruct.rvmat",
			
				"kraz258\data\Ky3oB.rvmat",	// В первой строчке должен указываться материал, который пренадлежит селекшену "camo1" (краска, кузов авто)
				"kraz258\data\damage\Ky3oB_damage.rvmat",	// Вторая строка присваевает материал повреждения вместо первого (для нормального отображения UV-шка должна быть правильной формы)
				"kraz258\data\damage\Ky3oB_destruct.rvmat",
				
				"kraz258\data\BOPT_257.rvmat",	// В первой строчке должен указываться материал, который пренадлежит селекшену "camo1" (краска, кузов авто)
				"kraz258\data\damage\BOPT_257_damage.rvmat",	// Вторая строка присваевает материал повреждения вместо первого (для нормального отображения UV-шка должна быть правильной формы)
				"kraz258\data\damage\BOPT_257_destruct.rvmat"
				
			};
			hiddenSelections[] = {"Camo1","Camo2","Camo3","Camo4"}; // Селекшн цвета кузова машины
		    hiddenSelectionsTextures[] = {"kraz258\data\kraz258_ca.paa","kraz258\data\kraz258_ca.paa","kraz258\data\Ky3oB.paa","kraz258\data\BOPT_257_ca.paa"};
		};
		
		
		
		class Exhausts // Определяем класс эффектов выхлопных газов d8e1eb
		{
			class Exhaust1 // Класс первой выхлопной
			{
				position 	= "exhaust1_pos";  		// Точка в ЛОДе "memory" - позиция источника выхода газов
				direction 	= "exhaust1_dir";	// Точка направления выхода газов
				effect 		= "ExhaustEffectHTruck";	// Класс вызиульного эффекта
			};
		};		
		class Reflectors	// Определяем класс отражателей для фар (рекомендуется делать таким методом только передние фары, во избежании падения FPS)
		{
			class LightCarLeft 	// Определяем левую фару
			{
				color[] 		= {1900, 1800, 1700};		// Цвет источника света
				ambient[]		= {5, 5, 5};				// Цвет амбиента (окружения)
				position 		= "light_l";		        // Точка памяти источника света
				direction 		= "light_l_end";	        // Точка памяти направления света
				hitpoint 		= "light_l";				// Точка в ЛОДе "hitpoint" для определения повреждения фары
				selection 		= "light_l";				// Селекшн левой фары, который исчезает при повреждении лампочки
				size 			= 1;						// Размер световой точки видимой с расстояния (?)
				innerAngle 		= 60;						// Внешний угол света
				outerAngle 		= 85;						// Внутренний угол света
				coneFadeCoef 	= 10;						// Ослабление света между вышеуказанными углами
				intensity 		= 1;						// Интенсивность света
				useFlare 		= 0;						// Использовать флаер (яркая точка в центре источника света)
				dayLight 		= false;					// Будет ли гореть свет днем (при активировании нагружает CPU)
				flareSize 		= 1.0;						// Размер флаера (не понятно в каких единицах)
				
				class Attenuation // Более гибкие параметры затухание света
				{
					start 			= 1.0;	// (?)
					constant 		= 0; 	// (?)
					linear 			= 0; 	// (?)
					quadratic 		= 0.25; 	// (?)
					hardLimitStart 	= 30;		// Расстоняие, на котором свет достигает полной своей силы (че?)
					hardLimitEnd 	= 60;		// (?)
				};
			};	

			
			class LightCarRight : LightCarLeft // Правая фара имеет те же самые параметры, поэтому наследуемся от левой
			{
				position 	= "light_r"; // И выбираем точки для правой фары
				direction 	= "light_r_end";
				selection 	= "light_r";
				hitpoint 	= "Light_r";		
			};
			
			class LeftFlare : LightCarLeft // создаю специально класс, что бы эффект засвечивания брался от отдельной точки "light_l_flare"
			{
				position = "light_l_flare";
				useFlare = true;
				flareSize = 1;
			};
			class RightFlare : LightCarRight
			{
				position = "light_r_flare";
				useFlare = true;
				flareSize = 1;
			};	
			
		};
		aggregateReflectors[] = {{"LightCarLeft","LightCarRight"}}; // Идет объединение двух источников света в один, до тех пор, пока не погаснет одна из ламп
	}; 
	class kraz256 : kraz258 // Создаем класс основной машины, и наследуемся от базовой. Таким образом можно
							// создать несколько классов, и в каждые внести изменения в какой либо параметр
	{	
	    model 	= "\kraz258\kraz256.p3d"; // Путь до нашей модели
		displayName = "$STR_my_name4"; // Имя отображаемое в редакторе
		hiddenSelectionsTextures[] = {"My_vehicles\My_car_one\body_paint1.paa"};	 /// we could use any texture to cover the car
		editorCategory = "MyCategory"; // указываем класс нашей категории
        editorSubcategory = "MySubcategory"; // и класс подкатегории
		priority = 2;
        side = 3; // на стороне гражданских
		scope = 2; // при значении 2 техника отображается в арсенале, редакторе, при значении 0 нет, но ее можно призвать по классу
		crew = "C_man_w_worker_F"; // класснейм солдата, который будет по умолчанию спавниться в машине при ее спавне
		
		units[]	= {"kraz256"}; // имя .p3d файла
		fuelCapacity = 165;       ///  вместимость топливных баков
		transportMaxBackpacks 	= 20; // Максимальное количество рюкзаков, вмещаемых в инвентарь транспорта
		
	};
    class kraz257 : kraz258 // Создаем класс основной машины, и наследуемся от базовой. Таким образом можно
							// создать несколько классов, и в каждые внести изменения в какой либо параметр
	{	
	    model 	= "\kraz258\kraz257.p3d"; // Путь до нашей модели
		displayName = "$STR_my_name5"; // Имя отображаемое в редакторе
		hiddenSelectionsTextures[] = {"My_vehicles\My_car_one\body_paint1.paa"};	 /// we could use any texture to cover the car
		editorCategory = "MyCategory"; // указываем класс нашей категории
        editorSubcategory = "MySubcategory"; // и класс подкатегории
		priority = 2;
        side = 3; // на стороне гражданских
		scope = 2; // при значении 2 техника отображается в арсенале, редакторе, при значении 0 нет, но ее можно призвать по классу
		crew = "C_man_w_worker_F"; // класснейм солдата, который будет по умолчанию спавниться в машине при ее спавне
		
		units[]	= {"kraz257"}; // имя .p3d файла
		transportMaxBackpacks 	= 20; // Максимальное количество рюкзаков, вмещаемых в инвентарь транспорта
		
	};
	class kc4561 : kraz258 // Создаем класс основной машины, и наследуемся от базовой. Таким образом можно
							// создать несколько классов, и в каждые внести изменения в какой либо параметр
	{
		model 	= "\kraz258\kc4561.p3d"; // Путь до нашей модели
		displayName = "$STR_kc4561"; // Имя отображаемое в редакторе
		units[]	= {"kc4561"}; // имя .p3d файла
		transportMaxBackpacks 	= 3; // Максимальное количество рюкзаков, вмещаемых в инвентарь транспорта
		transportSoldier 		= 2; // Максимальное количество пассажиров (кроме водителя)
		memoryPointsGetInCargo[] = {"pos Cargo R","pos Cargo L","pos Cargo L","pos Cargo R"};
		memoryPointsGetInCargoDir[] = {"pos Cargo dir R","pos Cargo dir L","pos Cargo dir L","pos Cargo dir R"};
	};	
	
};
cfg

Код: Выделить всё

class Rotation
{
	type = "rotation";
	memory = 1;
	minValue = 0;
	maxValue = 1;
	angle0 = 0;
	angle1 = 1;
};
class CfgSkeletons
{
	class Default
	{
		isDiscrete = 1;
		skeletonInherit = "";
		skeletonBones[] = {};
	};
	class Vehicle : Default {};
	class Car : Vehicle 
{
		skeletonBones[]=
		{
			"drivewheel","",
			

			"wheel_1_1_damper_land","",
			"wheel_1_2_damper_land","",
			"wheel_1_3_damper_land","",
			"wheel_1_4_damper_land","",

			"wheel_2_1_damper_land","",
			"wheel_2_2_damper_land","",
			"wheel_2_3_damper_land","",
			"wheel_2_4_damper_land","",

			"wheel_1_1_damper","wheel_1_1_damper_land",
			"wheel_1_2_damper","wheel_1_2_damper_land",
			"wheel_1_3_damper","wheel_1_3_damper_land",
			"wheel_1_4_damper","wheel_1_4_damper_land",

			"wheel_2_1_damper","wheel_2_1_damper_land",
			"wheel_2_2_damper","wheel_2_2_damper_land",
			"wheel_2_3_damper","wheel_2_3_damper_land",
			"wheel_2_4_damper","wheel_2_4_damper_land",

			"wheel_1_1_steering","wheel_1_1_damper",
			"wheel_1_2_steering","wheel_1_2_damper",
			"wheel_1_3_steering","wheel_1_3_damper",
			"wheel_1_4_steering","wheel_1_4_damper",

			"wheel_2_1_steering","wheel_2_1_damper",
			"wheel_2_2_steering","wheel_2_2_damper",
			"wheel_2_3_steering","wheel_2_3_damper",
			"wheel_2_4_steering","wheel_2_4_damper",

			"wheel_1_1","wheel_1_1_steering",
			"wheel_1_2","wheel_1_2_steering",
			"wheel_1_3","wheel_1_3_steering",
			"wheel_1_4","wheel_1_4_steering",

			"wheel_2_1","wheel_2_1_steering",
			"wheel_2_2","wheel_2_2_steering",
			"wheel_2_3","wheel_2_3_steering",
			"wheel_2_4","wheel_2_4_steering",

			"wheel_1_1_unhide","wheel_1_1",
			"wheel_1_2_unhide","wheel_1_2",
			"wheel_1_3_unhide","wheel_1_3",
			"wheel_1_4_unhide","wheel_1_4",

			"wheel_2_1_unhide","wheel_2_1",
			"wheel_2_2_unhide","wheel_2_2",
			"wheel_2_3_unhide","wheel_2_3",
			"wheel_2_4_unhide","wheel_2_4",

			"wheel_1_1_hide","wheel_1_1",
			"wheel_1_2_hide","wheel_1_2",
			"wheel_1_3_hide","wheel_1_3",
			"wheel_1_4_hide","wheel_1_4",

			"wheel_2_1_hide","wheel_2_1",
			"wheel_2_2_hide","wheel_2_2",
			"wheel_2_3_hide","wheel_2_3",
			"wheel_2_4_hide","wheel_2_4",

			"OtocVez","",
			"OtocHlaven","OtocVez",

			"damageHide","",
			"damageVez","OtocVez",
			"damageHlaven","OtocHlaven",

			"ukaz_rychlo","",
			"ukaz_rychlo2","",
			"ukaz_rpm","",
			"mph","",
			"rpm","",
			"fuel","",
			"fuel_1","",
			"fuel_01","",
			"fuel_2","",
			"fuel_3","",
			"prop_01","",
			"prop_02","",
			"prop_2","",
			"prop_1","",
			"glass1","damageHide",
			"glass2","damageHide",
			"glass3","damageHide",
			"glass4","damageHide",
			"glass5","damageHide",
			"glass6","damageHide",
			"glass7","damageHide",
			"glass8","damageHide",
			"glass9","damageHide",
			"glass10","damageHide",
			"glass11","damageHide",
			"zamok","",
			"alarms","",
			"ALARM","alarms"
		};
	};
	class civil_car: Car
	{
		skeletonInherit="Car";
		skeletonBones[]=
		{
			"reverse_light","",
			"daylights","damageHide",
			"door1","",
			"door2","",
			"zamok",""
		};
	};
	
};

class CfgModels
{
	class Default
	{
		sectionsInherit = "";
		sections[] = {};
		skeletonName = "";
	};
	class Vehicle: Default
	{
		sections[] =
		{
			"cislo",
			"grupa",
			"side",
			"sektor",
			"clan",
			"clan_sign",
			"podsvit pristroju",
			"poskozeni",
			"L svetlo",
			"P svetlo",
			"zasleh"
		};
	};	
	
	class Car: Vehicle
	{
		htMin = 60;		// Minimum half-cooling time (in seconds)
		htMax = 180;	// Maximum half-cooling time (in seconds)
		afMax = 100;	// Maximum temperature in case the model is alive (in celsius)
		mfMax = 8;		// Maximum temperature when the model is moving (in celsius)
		mFact = 1;		// Metabolism factor - number from interval <0, 1> (0 - metabolism has no influence, 1 - metabolism has full influence (no other temperature source will be considered)).
		tBody = 150;	// Metabolism temperature of the model (in celsius)

		sections[]=
		{ 
			"ammo",
			"zadni svetlo",
			"brzdove svetlo",
			"spz",
			"motor",
			"body",
			"body1",
			"body2",
			"body3",
			"clan",
			"clan_sign",
			"zasleh",
			"Light_R",
			"Light_L",
			"podsvit pristroju",
			"glass1",
			"glass2",
			"glass3",
			"glass4",
			"glass5",
			"glass6",
			"glass7",
			"glass8",
			"glass9",
			"glass10",
			"glass11"
		};
		skeletonName="Car";
		class Animations
		{
			// destruct START
			class damageHide
			{
				type="hide";
				source="damage";
				selection="damageHide";
				hideValue=1.0;
			};
			class damageHideVez:damageHide
			{
				selection="OtocVez";
			};
			class damageHideHlaven:damageHide
			{
				selection="OtocHlaven";
			};

			// Wheels START
			// Wheels Complete Destruct START
			class wheel_1_1_destruct
			{
				type="hide";
				selection="wheel_1_1_hide";
				source="HitLFWheel";
				minValue = 0; // upravit na 0.99
				maxValue = 1; // upravit na 1.0
				hidevalue = 0.99999;
			};
			class wheel_1_2_destruct: wheel_1_1_destruct {source="HitLBWheel";selection="wheel_1_2_hide";};
			class wheel_1_3_destruct: wheel_1_1_destruct {source="HitLMWheel";selection="wheel_1_3_hide";};
			class wheel_1_4_destruct: wheel_1_1_destruct {source="HitLF2Wheel";selection="wheel_1_4_hide";};

			class wheel_2_1_destruct: wheel_1_1_destruct {source="HitRFWheel";selection="wheel_2_1_hide";};
			class wheel_2_2_destruct: wheel_1_1_destruct {source="HitRBWheel";selection="wheel_2_2_hide";};
			class wheel_2_3_destruct: wheel_1_1_destruct {source="HitRMWheel";selection="wheel_2_3_hide";};
			class wheel_2_4_destruct: wheel_1_1_destruct {source="HitRF2Wheel";selection="wheel_2_4_hide";};

			class wheel_1_1_destruct_unhide
			{
				type="hide";
				selection="wheel_1_1_unhide";
				source="HitLFWheel";
				minValue = 0; 
				maxValue = 1; 
				hidevalue = 0.00000;
				UnHidevalue = 1.00000;
			};
			class wheel_1_2_destruct_unhide: wheel_1_1_destruct_unhide {source="HitLBWheel";selection="wheel_1_2_unhide";};
			class wheel_1_3_destruct_unhide: wheel_1_1_destruct_unhide {source="HitLMWheel";selection="wheel_1_3_unhide";};
			class wheel_1_4_destruct_unhide: wheel_1_1_destruct_unhide {source="HitLF2Wheel";selection="wheel_1_4_unhide";};

			class wheel_2_1_destruct_unhide: wheel_1_1_destruct_unhide {source="HitRFWheel";selection="wheel_2_1_unhide";};
			class wheel_2_2_destruct_unhide: wheel_1_1_destruct_unhide {source="HitRBWheel";selection="wheel_2_2_unhide";};
			class wheel_2_3_destruct_unhide: wheel_1_1_destruct_unhide {source="HitRMWheel";selection="wheel_2_3_unhide";};
			class wheel_2_4_destruct_unhide: wheel_1_1_destruct_unhide {source="HitRF2Wheel";selection="wheel_2_4_unhide";};

			// Wheels Complete Destruct END

			#define DamageOffset 0.2

			// Wheels Damage START
			class wheel_1_1_Damage: wheel_1_1_destruct
			{
				type="translation";
				axis="Basic_Damper_Destruct_Axis";
				memory=1;
				selection="wheel_1_1_damper";
				source="HitLFWheel";
				minValue = 0.0;
				maxValue = 1;
				offset0 = 0;
				offset1 = DamageOffset;
			};
			class wheel_1_2_Damage: wheel_1_1_Damage {source="HitLBWheel";selection="wheel_1_2_damper";};
			class wheel_1_3_Damage: wheel_1_1_Damage {source="HitLMWheel";selection="wheel_1_3_damper";};
			class wheel_1_4_Damage: wheel_1_1_Damage {source="HitLF2Wheel";selection="wheel_1_4_damper";};

			class wheel_2_1_Damage: wheel_1_1_Damage {source="HitRFWheel";selection="wheel_2_1_damper";};
			class wheel_2_2_Damage: wheel_1_1_Damage {source="HitRBWheel";selection="wheel_2_2_damper";};
			class wheel_2_3_Damage: wheel_1_1_Damage {source="HitRMWheel";selection="wheel_2_3_damper";};
			class wheel_2_4_Damage: wheel_1_1_Damage {source="HitRF2Wheel";selection="wheel_2_4_damper";};


			class wheel_1_1_Damper_Damage_BackAnim: wheel_1_1_Damage {selection="wheel_1_1_damper";offset1 = -1.2*DamageOffset;};
			class wheel_1_2_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitLBWheel";selection="wheel_1_2_damper";};
			class wheel_1_3_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitLMWheel";selection="wheel_1_3_damper";};
			class wheel_1_4_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitLF2Wheel";selection="wheel_1_4_damper";};

			class wheel_2_1_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitRFWheel";selection="wheel_2_1_damper";};
			class wheel_2_2_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitRBWheel";selection="wheel_2_2_damper";};
			class wheel_2_3_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitRMWheel";selection="wheel_2_3_damper";};
			class wheel_2_4_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim {source="HitRF2Wheel";selection="wheel_2_4_damper";};

			// Wheels Damage END
			// Wheels END

				//Glass Damage START
				class Glass1_destruct
				{
					type="hide";
					selection="glass1";
					source="HitGlass1";
					minValue = 0; 
					maxValue = 1; 
					hidevalue = 0.99999;
				};
				class Glass2_destruct: Glass1_destruct {selection="glass2";source="HitGlass2";}; // Наследует стеклянный 1, только выбор и источник будут изменены
				class Glass3_destruct: Glass1_destruct {selection="glass3";source="HitGlass3";};
				class Glass4_destruct: Glass1_destruct {selection="glass4";source="HitGlass4";};
				class Glass5_destruct: Glass1_destruct {selection="glass5";source="HitGlass5";};
				class Glass6_destruct: Glass1_destruct {selection="glass6";source="HitGlass6";};
				class Glass7_destruct: Glass1_destruct {selection="glass7";source="HitGlass7";};
				class Glass8_destruct: Glass1_destruct {selection="glass8";source="HitGlass8";};
				class Glass9_destruct: Glass1_destruct {selection="glass9";source="HitGlass9";};
				class Glass10_destruct: Glass1_destruct {selection="glass10";source="HitGlass10";};
				class Glass11_destruct: Glass1_destruct {selection="glass11";source="HitGlass11";};
				//Glass Damage END

			// destruct END
			class Fuel: Rotation
			{
				source="fuel";
				selection="fuel";
				axis="fuel_axis";
				maxValue=1;
				memory=1;
				angle0="rad -110";
				angle1=0;
			};
			class IndicatorSpeed: Rotation
			{
				source="speed";
				selection="mph";
				axis="mph_axis";
				memory=1;
				maxValue=38.900002;
				angle1="rad -265";
			};
			class IndicatorFuel: Rotation
			{
				type="rotation";
				source="fuel";
				selection="fuel_1";
				axis="fuel_1_axis";
				memory=1;
				minValue=0.000000;
				maxValue=1.000000;
				angle0=-0.087266;
				angle1=-1.658063;
			};
			class IndicatorRPM: Rotation
			{
				source="rpm";
				selection="rpm";
				axis="rpm_axis";
				memory=1;
				angle1="rad 80";
			};
			class DrivingWheel: Rotation
			{
				source="drivingWheel";
				selection="drivewheel";
				axis="drivewheel_axis";
				minValue=-1;
				maxValue=1;
				angle0=(rad 80);
				angle1=(rad -80);
			};
			class Steering_1_1
			{
				type="rotationY";
				source="drivingWheel";
				selection="wheel_1_1_steering";
				axis="wheel_1_1_steering_axis";
				memory=1;
				minValue= -1;
				maxValue= 1;
				angle0=1.047198;
				angle1=-1.047198;
			};
			class Steering_2_1: Steering_1_1
			{
				selection="wheel_2_1_steering";
				axis="wheel_2_1_steering_axis";
			};
			class Wheel_1_1
			{
				type="rotationX";
				source="wheel";
				selection="wheel_1_1";
				axis="wheel_1_1_axis";
				memory=1;
				sourceAddress="loop";
				minValue=0;
				maxValue=1;
				angle0=0;
				angle1="rad -360";
			};
			class wheel_2_1: Wheel_1_1
			{
				selection="wheel_2_1";
				axis="wheel_2_1_axis";
			};
			class wheel_1_2: Wheel_1_1
			{
				selection="wheel_1_2";
				axis="wheel_1_2_axis";
			};
			class wheel_1_3: Wheel_1_1
			{
				selection="wheel_1_3";
				axis="wheel_1_3_axis";
			};
			class Wheel_2_2: Wheel_1_1
			{
				selection="wheel_2_2";
				axis="wheel_2_2_axis";
			};
			class Wheel_2_3: Wheel_1_1
			{
				selection="wheel_2_3";
				axis="wheel_2_3_axis";
			};
			class Wheel_1_4: Wheel_1_1
			{
				selection="wheel_1_4";
				axis="wheel_1_4_axis";
			};
			class Wheel_2_4: Wheel_1_1
			{
				selection="wheel_2_4";
				axis="wheel_2_4_axis";
			};
			class Wheel_1_1_Damper
			{
				type="translation";
				source="damper";
				selection="wheel_1_1_damper_land";
				axis="posun wheel_1_1";
				animPeriod = 1;
				minValue="0";
				maxValue="1";
				offset0= "0.5";
				offset1= "-0.5";
				memory=1;
			};
			class wheel_2_1_Damper: Wheel_1_1_Damper
			{
				selection="wheel_2_1_damper_land";
			};
			class wheel_1_2_Damper: Wheel_1_1_Damper
			{
				selection="wheel_1_2_damper_land";
			};
			
			class wheel_1_3_Damper: Wheel_1_1_Damper
			{
				selection="wheel_1_3_damper_land";
			};
			
			class Wheel_2_2_Damper: Wheel_1_1_Damper
			{
				selection="wheel_2_2_damper_land";
			};
			
			class Wheel_2_3_Damper: Wheel_1_1_Damper
			{
				selection="wheel_2_3_damper_land";
			};
			
			class daylights
			{
				type="hide";
				source="rpm";
				selection="daylights";
				minValue=-0.8;
				maxValue=0.2;
				unhidevalue=1;
				sourceAddress="clamp";
			};
			
			class reverse_light
			{
				type="Hide";
				selection="reverse_light";
				sourceAddress="clamp";
				source="Gear";
				minValue = -1;
				maxValue = 0;
				hideValue = "0.2";	
			};			
		};
	};
	
	class 258_15: Car
	{
		skeletonName = "civil_car";
		sectionsInherit = "Car";
		sections[]=
		{
			"Camo1",
			"Camo2",
			"Camo3",
			"Camo4",
			"body",
			"body1",
			"body2",
			"body3",
			"karoserie",
			"palivo"
		};
		class Animations: Animations
		{
			class wheel_1_1_Damage: wheel_1_1_Damage{offset1=0.18000001;};
			class wheel_1_2_Damage: wheel_1_2_Damage{offset1=0.18000001;};
			class wheel_2_1_Damage: wheel_2_1_Damage{offset1=0.18000001;};
			class wheel_2_2_Damage: wheel_2_2_Damage{offset1=0.18000001;};
			class wheel_1_3_Damage: wheel_1_3_Damage{offset1=0.18000001;};
			class wheel_2_3_Damage: wheel_2_3_Damage{offset1=0.18000001;};
			
			
			class wheel_1_1_Damper_Damage_BackAnim: wheel_1_1_Damper_Damage_BackAnim{offset1=-0.18000001;};
			class wheel_1_2_Damper_Damage_BackAnim: wheel_1_2_Damper_Damage_BackAnim{offset1=-0.18000001;};
			class wheel_1_3_Damper_Damage_BackAnim: wheel_1_3_Damper_Damage_BackAnim{offset1=-0.18000001;};
			class wheel_2_1_Damper_Damage_BackAnim: wheel_2_1_Damper_Damage_BackAnim{offset1=-0.18000001;};
			class wheel_2_2_Damper_Damage_BackAnim: wheel_2_2_Damper_Damage_BackAnim{offset1=-0.18000001;};
			class wheel_2_3_Damper_Damage_BackAnim: wheel_2_3_Damper_Damage_BackAnim{offset1=-0.18000001;};
			
			class DrivingWheel
			{
				type="rotation";
				source="drivingWheel";
				selection="drivewheel";
				axis="drivewheel_axis";
				memory=1;
				minValue=-1;
				maxValue=1;
				angle0=(rad 70);
				angle1=(rad -70);
			};
			class Steering_1_1
			{
				type="rotationY";
				source="drivingWheel";
				selection="wheel_1_1_steering";
				axis="wheel_1_1_steering_axis";
				memory=1;
				minValue="rad -90";
				maxValue="rad +90";
				angle0=1.0471981;
				angle1=-1.0471981;
			};
			class Steering_2_1: Steering_1_1
			{
				selection="wheel_2_1_steering";
				axis="wheel_2_1_steering_axis";
				angle0=1.0471981;
				angle1=-1.0471981;
			};
			class IndicatorSpeed: Rotation
			{
				source="speed";
				selection="mph";
				axis="mph_axis";
				memory=1;
				maxValue=28;
				angle0=0.17453299;
				angle1=-3.141593;
			};
			class IndicatorRPM: Rotation
			{
				type="rotation";
				source="rpm";
				selection="rpm";
				axis="rpm_axis";
				memory=1;
				minValue=0;
				maxValue=2100;
				angle0=(rad 0);
				angle1=(rad -110);
			};				
			class fuel
			{
				type="rotation";
				source="fuel";
				selection="fuel";
				axis="fuel_axis";
				memory=1;
				minValue=0;
				maxValue=1;
				angle0=0;
				angle1="rad +55";
			};
			class prop_01
			{
				type="rotation";
				source="rpm";
				selection="prop_1";
				axis="prop_1_axis";
				memory=1;
				minValue=1000;
				maxValue=7000;
				angle0="rad 30";
				angle1="rad 35";
			};
			
			class daylights
			{
				type="hide";
				source="rpm";
				selection="daylights";
				minValue=-0.8;
				maxValue=0.2;
				unhidevalue=1;
				sourceAddress="clamp";
			};
			
			class reverse_light
			{
				type="Hide";
				selection="reverse_light";
				sourceAddress="clamp";
				source="Gear";
				minValue = -1;
				maxValue = 0;
				hideValue = "0.2";	
			};
			
			class damageHidedoor1: damageHide
			{
				selection="door1";
			};
			class damageHidedoor2: damageHide
			{
				selection="door2";
			};	
			
			class Glass5_destruct
			{
				type="hide";
				selection="glass5";
				source="HitGlass5";
				minValue = 0;
				maxValue = 1;
				hidevalue = 0.99999;
			};	
			class Wheel_1_1_Damper: Wheel_1_1_Damper
			{
				type="translation";
				source="damper";
				selection="wheel_1_1_damper_land";
				axis="posun wheel_1_1";
				animPeriod = 1;
				minValue="0";
				maxValue="1";
				offset0= "-0.5";
				offset1= "0.5";
				memory=1;
			};
			class wheel_2_1_Damper: Wheel_1_1_Damper
			{
				selection="wheel_2_1_damper_land";			
			};
			class wheel_1_2_Damper: Wheel_1_1_Damper
			{
				selection="wheel_1_2_damper_land";						
			};
			class wheel_1_3_Damper: Wheel_1_1_Damper
			{
				selection="wheel_1_3_damper_land";						
			};
			class Wheel_2_2_Damper: Wheel_1_1_Damper
			{
				selection="wheel_2_2_damper_land";		
			};
			class Wheel_2_3_Damper: Wheel_1_1_Damper
			{
				selection="wheel_2_3_damper_land";		
			};
			
			class AlarmStart
			{
				type="hide";
				hideValue=0;
				UnHidevalue = 1;
				minValue=0;
				maxValue=1;
				minPhase=0;
				maxPhase=1;
				source="alarmstart";
				sourceAddress=0;
				selection="alarms";
			};
			class Alarm
			{
				type="hide";
				source = "time";		
				animPeriod = 0;	
				sourceAddress = "loop";
				minValue = -0.50;
				maxValue = +0.50;
				hideValue = "0.1";
				UnhideValue = "0.5";		
				selection="ALARM";
			};
			class zamok 
			{
				type = "translation";
				source = "zamok_anim";
				selection = "zamok";
				axis = "zamok_axis";
				animPeriod = 1;
				minValue = "0";
				maxValue = "1";
				memory = 1;
				offset1 = 1;
				offset0 = -0.3;
			};
		};
	};
	class kraz256 : 258_15 {};
	class kraz257 : 258_15 {};
	class kc4561 : 258_15 {};
};

Аватара пользователя
cerroc
Новый Пользователь
Новый Пользователь
Сообщения: 6
Зарегистрирован: 06 окт 2016, 08:47

Обсуждение: создание автомобиля

Сообщение cerroc » 26 сен 2017, 11:10

Den, для машин расход никак не сделать, единственное что можно это уменьшить объем бака до размеров реального расхода топлива на сто километров

Аватара пользователя
Oskar
Администратор
Сообщения: 237
Зарегистрирован: 28 апр 2016, 11:23
Откуда: Санкт-Петербург

Обсуждение: создание автомобиля

Сообщение Oskar » 26 сен 2017, 11:19

cerroc, ай-яй-яй - 5 сообщений подряд, спасибо за добавление мне работы по чистке темы)

А прицепы не плохи, спасибо что поделился
На физическом на серваке поверял? Я когда делал - у меня все норм, а вот у других игроков все скачает.
На веревках полагаю такого быть не должно

P.S. Для этого стоило бы создать отдельую тему


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость