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

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

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

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

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

Использовать класс несколько раз

Вечер добрый, друзья ?
Подскажите пожалуйста, может кто-то сталкивался?!
У меня в конфиге есть класс "Resources", содержит в себе:

class Resources
		{
			class AM_1_AmmoBox_545x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
			class AM_2_AmmoBox_545x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
};

Суть в том, что нельзя использовать один и тот же класс, к примеру я не могу 2 раза использовать "AmmoBox_545x39_20Rnd", приходится всячески изворачиваться создавая дублирующие классы, просто переназывая их. Можно как то по другому обойти данную систему? Или сразу задать количество
Заранее благодарю кто поможет, доброй ночи

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

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


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

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

  • 0

Обновил код! Данный код позволяет выдавать вещи в ранд. количестве

modded class ActionUnpackBox
{
    override void OnFinishProgressServer( ActionData action_data )
	{
		if ( action_data.m_MainItem && action_data.m_MainItem.GetHierarchyRootPlayer() == action_data.m_Player )
		{
			string path = "CfgVehicles " + action_data.m_MainItem.GetType();
			string box = action_data.m_MainItem.GetType();
			string child_name = "";
			int count;
			float rand;
			rand = Math.RandomInt(5,10); //КОЛИЧЕСТВО ВЫДОВАЕМЫХ ПАТРОН(ОТ 5 ДО 10)
			array<string> resources = new array<string>;
			
			if( GetGame().ConfigIsExisting( path ) && GetGame().ConfigIsExisting( path + " Resources") )
			{
				path = path + " Resources";
				count = GetGame().ConfigGetChildrenCount ( path );
				for (int i = 0; i < count; i++)
				{
					GetGame().ConfigGetChildName ( path, i, child_name );
					
					if ( GetGame().ConfigGetInt( path + " " + child_name + " value" ) )
					{
						resources.Insert( child_name );
					}
				}
                //GetGame().ObjectDelete(action_data.m_Player.GetItemInHands());
				//TODO modify to allow for multiple ammo types spawning (if needed??)
				string itemType = resources.Get(0);
				int itemCount = GetGame().ConfigGetInt( path + " " + itemType + " value" );
				
				UnboxLambda lambda = new UnboxLambda(action_data.m_MainItem, itemType, action_data.m_Player, itemCount);
				action_data.m_Player.ServerReplaceItemInHandsWithNew(lambda);

                for (int j=1;j<resources.Count();j++)
                {
                    itemType = resources.Get(j);
                    itemCount = GetGame().ConfigGetInt( path + " " + itemType + " value" );
					
									ItemBase itm2 = ItemBase.Cast(GetGame().CreateObject(itemType,action_data.m_Player.GetPosition(),false));
									if (itemCount)
									itm2.SetQuantity(itemCount);
                }
				if (box.IndexOf("SU_AmmoBox") > -1)
								{
									for (int y = 0; y < rand; y++)
										{
											ItemBase itm = ItemBase.Cast(GetGame().CreateObject(itemType,action_data.m_Player.GetPosition(),false));
											if (itemCount)
											itm.SetQuantity(itemCount);
										}
										ItemBase itemsukapadla = ItemBase.Cast( GetGame().CreateObject("SU_Zinc", action_data.m_Player.GetPosition(), false) );
								}
								else
								{
								//spawns wrapping Paper
									ItemBase paper = ItemBase.Cast( GetGame().CreateObject("Paper", action_data.m_Player.GetPosition(), false) );	
								}
				
				action_data.m_Player.GetSoftSkillsManager().AddSpecialty( m_SpecialtyWeight );
			}
		}
	}
}

 

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


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

Впоподробней плиз - как делаешь что делаешь как ругается итд итп

с примерами и тп

а то нихрена не понятно

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 минуты назад, BorizzK сказал:

Впоподробней плиз - как делаешь что делаешь как ругается итд итп

с примерами и тп

а то нихрена не понятно

Делаю так:

class AmmoBox_545x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
class AmmoBox_545x39_20Rnd
			{
				value=330;
				variable="quantity";
			};

Вывод - Никак не ругается, но выдается всего в количестве 1, хоть и 2 класса(1 Класс = 1 предмет)

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


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

Понятно что так не выйдет

Да и непонятно, для чего это нужно

Что хочешь в итоге?

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
19 минут назад, BorizzK сказал:

Понятно что так не выйдет

Да и непонятно, для чего это нужно

Что хочешь в итоге?

Что бы выдало 10-20 пачек патронов

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


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

Использовать один и тот же класс нельзя, это запрещено игровым ограничение движка игры и скриптами.
А вот использовать другой класс но с другим именем можно, игра ничего не скажет в итоге.
То что ты делаешь  сделать из одной и той же пачки патронов 5,45 чтобы выпало 2 раза по 330 патронов ни к чему не приведет, только к логической ошибки.

Задать количество выпадаемых патронов сразу можно и просто.
class AmmoBox_545x39_20Rnd : Box_Base {

class Resources {
            class Ammo_545x39 {
                value = 330;
                variable = "quantity";
            };
        };

};

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, AKuznecov сказал:

Использовать один и тот же класс нельзя, это запрещено игровым ограничение движка игры и скриптами.
А вот использовать другой класс но с другим именем можно, игра ничего не скажет в итоге.
То что ты делаешь  сделать из одной и той же пачки патронов 5,45 чтобы выпало 2 раза по 330 патронов ни к чему не приведет, только к логической ошибки.

Задать количество выпадаемых патронов сразу можно и просто.
class AmmoBox_545x39_20Rnd : Box_Base {

class Resources {
            class Ammo_545x39 {
                value = 330;
                variable = "quantity";
            };
        };

};

Значение value - это не количество!

Вы не правильно поняли тему

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, AKuznecov сказал:

То что ты делаешь  сделать из одной и той же пачки патронов 5,45 чтобы выпало 2 раза по 330 патронов ни к чему не приведет, только к логической ошибки.

 

7 часов назад, Mixxe73 сказал:

 

class AmmoBox_545x39_20Rnd { value=330; variable="quantity"; }; class AmmoBox_545x39_20Rnd { value=330; variable="quantity"; };

Вывод - Никак не ругается, но выдается всего в количестве 1, хоть и 2 класса(1 Класс = 1 предмет)

 

-----------НЕМНОГО ПОЯСНЮ-----------

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

Вот как это выглядит

class SU_AmmoBox_762x39_200Rnd: Box_Base
	{
		scope=2;
		displayName="ТЕСТ";
		descriptionShort="ТЕСТ";
		model="\dz\gear\containers\300RoundBox.p3d";
		weight=3100;
		absorbency=0.80000001;
		itemSize[]={6,4};
		class Resources
		{
			class AmmoBox_762x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
			class AM_2_AmmoBox_762x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
			class AM_3_AmmoBox_762x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
			class AM_4_AmmoBox_762x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
			class AM_5_AmmoBox_762x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
			class AM_6_AmmoBox_762x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
			class AM_7_AmmoBox_762x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
			class AM_8_AmmoBox_762x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
			class AM_9_AmmoBox_762x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
			class AM_10_AmmoBox_762x39_20Rnd
			{
				value=330;
				variable="quantity";
			};
		};
		class AnimEvents
		{
			class SoundWeapon
			{
				class interact
				{
					soundset="ammoboxUnpack_SoundSet";
					id=70;
				};
			};
		};
	};
	class AM_2_AmmoBox_762x39_20Rnd: AmmoBox_762x39_20Rnd
	{
		scope=2;
	};
	class AM_3_AmmoBox_762x39_20Rnd: AmmoBox_762x39_20Rnd
	{
		scope=2;
	};
	class AM_4_AmmoBox_762x39_20Rnd: AmmoBox_762x39_20Rnd
	{
		scope=2;
	};
	class AM_5_AmmoBox_762x39_20Rnd: AmmoBox_762x39_20Rnd
	{
		scope=2;
	};
	class AM_6_AmmoBox_762x39_20Rnd: AmmoBox_762x39_20Rnd
	{
		scope=2;
	};
	class AM_7_AmmoBox_762x39_20Rnd: AmmoBox_762x39_20Rnd
	{
		scope=2;
	};
	class AM_8_AmmoBox_762x39_20Rnd: AmmoBox_762x39_20Rnd
	{
		scope=2;
		
	};
	class AM_9_AmmoBox_762x39_20Rnd: AmmoBox_762x39_20Rnd
	{
		scope=2;
		
	};
	class AM_10_AmmoBox_762x39_20Rnd: AmmoBox_762x39_20Rnd
	{
		scope=2;
		
	};

 

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

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


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

Если пороетесть в оригинальных конфигах игры, то сделаете маленькое открытие. Суть существования некой конфигурации есть в том, что бы объявить игре о том что вы создаёте некую сущность, в данном случае контейнер который содержит нечто, в неком кол-ве. Движок не бабушка Ванга, что бы угадывать ваши желания, ему нужны конкретные и корректные данные. Если вы создаёте бокс на 200 патронов, то и нужно создать бокс в конфиге на 200 патронов, если нужен ещё и на 100 патронов, то естественно придётся создавать ещё один конфигурационный класс определяющий бокс на 100 патронов, и его имя естественно должно иметь отличие. И это не какие то там ограничения движка, а вполне адекватное требование, в противном случае как вы себе представляете выбор движком чего то из двух под одним и тем же именем, так не бывает.

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

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


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

PS

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

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


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

PS 2

А вообще если я правильно понял замысел автора данного топика, то реализуется желаемое подобным образом.

 

class CfgMagazines
{
	class Magazine_Base;
	class Ammunition_Base : Magazine_Base {};
	class Ammo_556x45 : Ammunition_Base {};
	
	class Ammo_556x45_2000Rnd : Ammo_556x45
	{
		displayName = "Стак патронов 556x45";
		weight = 40; // здесь я не понял самих разработчиков, распакованный стак патронов весит не соизмеримо меньше чем упакованный, что они имели этим сказать, моя не понимает)
		count = 2000;
	};
};

class CfgVehicles
{
	class Box_Base;
	class AmmoBox_556x45_20Rnd : Box_Base {};
	
	class AmmoBox_556x45_2000Rnd : AmmoBox_556x45_20Rnd
	{
		displayName = "Коробка патронов 556x45 2000шт";
		weight = 850;
		
		class Resources
		{
			class Ammo_556x45_2000Rnd
			{
				value = 2000;
				variable = "quantity";
			};
		};
	};
};

 

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


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

PS 3

Ну и на десерт.

И это чисто моё мнение.

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

 

 

 

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 часа назад, SteelRat сказал:

PS 2

А вообще если я правильно понял замысел автора данного топика, то реализуется желаемое подобным образом.

 

class CfgMagazines { class Magazine_Base; class Ammunition_Base : Magazine_Base {}; class Ammo_556x45 : Ammunition_Base {}; class Ammo_556x45_2000Rnd : Ammo_556x45 { displayName = "Стак патронов 556x45"; weight = 40; // здесь я не понял самих разработчиков, распакованный стак патронов весит не соизмеримо меньше чем упакованный, что они имели этим сказать, моя не понимает) count = 2000; }; }; class CfgVehicles { class Box_Base; class AmmoBox_556x45_20Rnd : Box_Base {}; class AmmoBox_556x45_2000Rnd : AmmoBox_556x45_20Rnd { displayName = "Коробка патронов 556x45 2000шт"; weight = 850; class Resources { class Ammo_556x45_2000Rnd { value = 2000; variable = "quantity"; }; }; }; };


class CfgMagazines
{
	class Magazine_Base;
	class Ammunition_Base : Magazine_Base {};
	class Ammo_556x45 : Ammunition_Base {};
	
	class Ammo_556x45_2000Rnd : Ammo_556x45
	{
		displayName = "Стак патронов 556x45";
		weight = 40; // здесь я не понял самих разработчиков, распакованный стак патронов весит не соизмеримо меньше чем упакованный, что они имели этим сказать, моя не понимает)
		count = 2000;
	};
};

class CfgVehicles
{
	class Box_Base;
	class AmmoBox_556x45_20Rnd : Box_Base {};
	
	class AmmoBox_556x45_2000Rnd : AmmoBox_556x45_20Rnd
	{
		displayName = "Коробка патронов 556x45 2000шт";
		weight = 850;
		
		class Resources
		{
			class Ammo_556x45_2000Rnd
			{
				value = 2000;
				variable = "quantity";
			};
		};
	};
};

 

Мне нужно не патроны а именно пачки патронов, а с ними такое не прокатит

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


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

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

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


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

Мне нужно не патроны а именно пачки патронов, а с ними такое не прокатит

это надо делать в скрипте

 

я, честно говоря нихрена не понял что Вы хотите

 

давайте в форме алгоритма распишем желаемое

 

есть то-то
делаем то-то

получаем то-то

 

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 часа назад, BorizzK сказал:

это надо делать в скрипте

 

я, честно говоря нихрена не понял что Вы хотите

 

давайте в форме алгоритма распишем желаемое

 

есть то-то
делаем то-то

получаем то-то

 

 

Я так и сделал

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


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

ТЕМА ЗАКРЫТА! РЕШЕНИЕ ЕСТЬ!

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Mixxe73 сказал:

ТЕМА ЗАКРЫТА! РЕШЕНИЕ ЕСТЬ!

Решение публиковать будем?

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
5 минут назад, BorizzK сказал:

Решение публиковать будем?

modded class ActionUnpackBox
{
    override void OnFinishProgressServer( ActionData action_data )
	{
		if ( action_data.m_MainItem && action_data.m_MainItem.GetHierarchyRootPlayer() == action_data.m_Player )
		{
			string path = "CfgVehicles " + action_data.m_MainItem.GetType();
			string box = action_data.m_MainItem.GetType();
			string child_name = "";
			int count;
			array<string> resources = new array<string>;
			
			if( GetGame().ConfigIsExisting( path ) && GetGame().ConfigIsExisting( path + " Resources") )
			{
				path = path + " Resources";
				count = GetGame().ConfigGetChildrenCount ( path );
				for (int i = 0; i < count; i++)
				{
					GetGame().ConfigGetChildName ( path, i, child_name );
					
					if ( GetGame().ConfigGetInt( path + " " + child_name + " value" ) )
					{
						resources.Insert( child_name );
					}
				}
                //GetGame().ObjectDelete(action_data.m_Player.GetItemInHands());
				//TODO modify to allow for multiple ammo types spawning (if needed??)
				string itemType = resources.Get(0);
				int itemCount = GetGame().ConfigGetInt( path + " " + itemType + " value" );
				
				UnboxLambda lambda = new UnboxLambda(action_data.m_MainItem, itemType, action_data.m_Player, itemCount);
				action_data.m_Player.ServerReplaceItemInHandsWithNew(lambda);

				//string message = itemType;
				//SendGlobalChatMessage(box);	
				//COTCreateLocalAdminNotification( new StringLocaliser( message ) );
                for (int j=1;j<resources.Count();j++)
                {
                    itemType = resources.Get(j);
					//SendGlobalChatMessage(itemType);	
					//COTCreateLocalAdminNotification( new StringLocaliser( itemType ) );
                    itemCount = GetGame().ConfigGetInt( path + " " + itemType + " value" );
					
							//	else
							//	{
									ItemBase itm2 = ItemBase.Cast(GetGame().CreateObject(itemType,action_data.m_Player.GetPosition(),false));
									if (itemCount)
									itm2.SetQuantity(itemCount);
									//spawns wrapping Paper
									//ItemBase paper = ItemBase.Cast( GetGame().CreateObject("Paper", action_data.m_Player.GetPosition(), false) );
							//	}
                }
				if (box.IndexOf("SU_AmmoBox") > -1)
								{
									for (int y = 0; y < 10; y++)
										{
											ItemBase itm = ItemBase.Cast(GetGame().CreateObject(itemType,action_data.m_Player.GetPosition(),false));
											if (itemCount)
											itm.SetQuantity(itemCount);
										}
										ItemBase itemsukapadla = ItemBase.Cast( GetGame().CreateObject("AmmoBox", action_data.m_Player.GetPosition(), false) );
								}
								else
								{
								//spawns wrapping Paper
									ItemBase paper = ItemBase.Cast( GetGame().CreateObject("Paper", action_data.m_Player.GetPosition(), false) );	
								}
				
				action_data.m_Player.GetSoftSkillsManager().AddSpecialty( m_SpecialtyWeight );
			}
		}
	}
}

 

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


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

Ну вот

Что и требовалось доказать

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


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

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

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

Универсально одним словом.

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

Поддержка