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

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

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

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

    Там вы можете продать или купить
    Всё что касается игровых серверов
  • 0
DenisRef

Зараженные зоны в 0.63

Вопрос

Наткнулся в одной группе ВК на пост, где было написано, что создать зараженные зоны в 0.63 вполне реально через данные файлы на сервере dta/scripts.pbo/4_World/Classes/AreaDamage

Вопрос, сможет ли кто нибудь такое провернуть?

//Самый первый файлик в этой папочке

class AreaDamageBase
{
	EntityAI				m_ParentObject;
	AreaDamageTrigger		m_AreaDamageTrigger;
	AreaDamageType			m_AreaDamageType;

	float					m_LoopInterval;
	float					m_DeferredInterval;
	float					m_PlayerDamage;
	float					m_OthersDamage;
	ref TStringArray 		m_HitZones;
	ref TStringArray		m_RaycastSources;
	string					m_AmmoName;
	int 					m_DamageType;
	vector					m_ExtentMin;
	vector 					m_ExtentMax;
	
	void AreaDamageBase(EntityAI parent)
	{
		m_ParentObject		= parent;
		m_ExtentMin 		= Vector(0, 0, 0);
		m_ExtentMax 		= Vector(0, 0, 0);
		m_LoopInterval 		= 0.0;
		m_DeferredInterval	= 0.0;
		m_PlayerDamage		= 0.0;
		m_PlayerDamage		= 0.0;
		m_HitZones			= new TStringArray;
		m_HitZones.Insert("Head");
		m_HitZones.Insert("Lungs");
		m_HitZones.Insert("LeftHand");

		m_RaycastSources	= new TStringArray;
		m_RaycastSources.Insert("0.0 0.1 0.0");

		m_AmmoName			= "MeleeDamage";
		m_DamageType 		= 3;

		LoadConfigParams();
	}
	void ~AreaDamageBase() {}

	void Spawn()
	{
		CreateDamageTrigger();
	}
	
	void Destroy()
	{
		DestroyDamageTrigger();
	}
	
	void SetExtents( vector mins, vector maxs )
		{ m_ExtentMin = mins; m_ExtentMax = maxs; }
	void SetAreaDamageType( int area_dmg_type )
		{ m_AreaDamageType = area_dmg_type; }
	void SetHitZones( array<string> hitzones )
		{ m_HitZones = hitzones; }
	void SetRaycastSources( array<string> raycast_sources )
		{ m_RaycastSources = raycast_sources; }
	void SetAmmoName( string ammo_name )
		{ m_AmmoName = ammo_name; }
	void SetDamageType( int pDamageType )
		{ m_DamageType = pDamageType; }
	void SetLoopInterval( float time )
		{ m_LoopInterval = time; }
	void SetDeferInterval( float time )
		{ m_DeferredInterval = time; }
    void SetParentObject( EntityAI obj )
		{ m_ParentObject = obj };
	
	void CreateDamageTrigger()
	{
		if(Class.CastTo(m_AreaDamageTrigger, g_Game.CreateObject( "AreaDamageTrigger", m_ParentObject.GetPosition(), false, false, false )))
		{
			m_AreaDamageTrigger.SetOrientation( m_ParentObject.GetOrientation() );
			m_AreaDamageTrigger.SetExtents( m_ExtentMin, m_ExtentMax );
			m_AreaDamageTrigger.SetAreaDamageType( m_AreaDamageType );
			m_AreaDamageTrigger.SetHitZones( m_HitZones );
			m_AreaDamageTrigger.SetRaycastSources( m_RaycastSources );
			m_AreaDamageTrigger.SetAmmoName( m_AmmoName );
			m_AreaDamageTrigger.SetDamageType( m_DamageType );
			m_AreaDamageTrigger.SetLoopTime( m_LoopInterval );
			m_AreaDamageTrigger.SetDeferTime( m_DeferredInterval );
			m_AreaDamageTrigger.SetParentObject( m_ParentObject );
		}
	}
	
	void DestroyDamageTrigger()
	{
		if ( GetGame() && m_AreaDamageTrigger ) // It's necesarry to check if the game exists. Otherwise a crash occurs while quitting.
		{
			GetGame().ObjectDelete( m_AreaDamageTrigger );
			m_AreaDamageTrigger = NULL;
		}
	}

	protected void LoadConfigParams()
	{
		string areadamage_subcfg = "CfgVehicles " + m_ParentObject.GetType() + " " + ClassName() + " ";
		
		// Read all config parameters
		if ( ConfigParamExists(areadamage_subcfg, "extentMin") )
			{ m_ExtentMin = GetGame().ConfigGetVector(areadamage_subcfg + "extentMin"); }
		if ( ConfigParamExists(areadamage_subcfg, "extentMax") )
			{ m_ExtentMax = GetGame().ConfigGetVector(areadamage_subcfg + "extentMax"); }
		if ( ConfigParamExists(areadamage_subcfg, "loopInterval") )
			{ m_LoopInterval = GetGame().ConfigGetFloat(areadamage_subcfg + "loopInterval"); }
		if ( ConfigParamExists(areadamage_subcfg, "deferredInterval") )
			{ m_DeferredInterval = GetGame().ConfigGetFloat(areadamage_subcfg + "deferredInterval"); }
		if ( ConfigParamExists(areadamage_subcfg, "hitZones") )
			{ GetGame().ConfigGetTextArray(areadamage_subcfg + "hitZones", m_HitZones); }
		if ( ConfigParamExists(areadamage_subcfg, "raycastSources") )
			{ GetGame().ConfigGetTextArray(areadamage_subcfg + "raycastSources", m_RaycastSources); }
		if ( ConfigParamExists(areadamage_subcfg, "ammoName") )
			{ GetGame().ConfigGetText(areadamage_subcfg + "ammoName", m_AmmoName); }
		if ( ConfigParamExists(areadamage_subcfg, "damageType") )
			{ m_DamageType = GetGame().ConfigGetInt(areadamage_subcfg + "damageType"); }
	}
	
	protected bool ConfigParamExists(string path, string option)
	{
		return GetGame().ConfigIsExisting(path + option);
	}
}

 

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

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

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


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

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

Забронировать это рекламное место


  • 0

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

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


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

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

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

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