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
  • 0
DonFalkone

Не есть ни пить при помехе на лице

Всем привет) Да вот возник вопрос о устранении одной нелепости в DayZ, всё жду пока сделают разработчики, ну да это у ни не в приоретете, ну да ладно, вот о чём речь, возможно ли сделать так, что бы персонаж не мог кушать и пить если на лице повязка(но пока они не надеваются), маска, мотоциклетный шлем, вообщем помеха которая не позволяет это делать по логике?!

 

 

 

Share this post


Link to post
Share on other sites

Recommended Posts










  • 0

BorizzK Дайка списочек итемов которые рот закрывают)

Через свой массив можешь написать)

Edited by Equadro (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Опять же, если делать только на сервере, это блокировка анимации как в DestroyDisable.

Share this post


Link to post
Share on other sites
  • 0

Equadro Ну как бы это понятно

Давай начнем с GASMask

Как мне видится (жаль времени нет сейчас поковырять) это нужно моддить Actions

А именно ActionDrink*** и ActionEat***

 

 

 

Share this post


Link to post
Share on other sites
  • 0

BorizzK я вкурсе, на болезнях натренировался)

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

Equadro А в жизни ты как с маской/противогазом жрать/пить собрался?

Не - ну можно наверное протереть через фильтр :joy:

 

Это как помыться в ОЗК ))))))))))))))))

Share this post


Link to post
Share on other sites
  • 0

BorizzK ну жизнь это одно, в игре то накой это делать.

Share this post


Link to post
Share on other sites
  • 0

Equadro Ну как бы более реалистично

Или возникает вопрос - нафига болезни в игре итд итп?

 

Share this post


Link to post
Share on other sites
  • 0

BorizzK ActionEat не обрабатывает ActionCondition. А вот ActionEatCan и Fruit все ровно.

Share this post


Link to post
Share on other sites
  • 0

Equadro Я в курсе

ActionEat это базовый класс и не более, как и ActionDrink...

я там потому *** и указал

 

Эх, я бы ща Action Drink...Drink.... (крушовице, 5литров)

 

да блин работа и Дейзи этот гребанный

 

Share this post


Link to post
Share on other sites
  • 0

Это работает, а вот с фруктами трабла. Позже гляну, а то времени сейчас нет.

modded class ActionEatCan: ActionEat
{
	override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
	{	
		ItemBase HeadGear,Mask;
		HeadGear = player.GetHumanInventory().FindAttachment(InventorySlots.HEADGEAR);
		Mask     = player.GetHumanInventory().FindAttachment(InventorySlots.MASK);

		if(HeadGear || Mask)
		{	
			if(HeadGear.GetType().Contains("Mask") || HeadGear.GetType().Contains("Moto"))
			return false;
		}

		return true;
	}
};

 

Share this post


Link to post
Share on other sites
  • 0

Equadro Ошибочка у тебя

if(HeadGear.GetType().Contains("Mask") || HeadGear.GetType().Contains("Moto"))

надо

if(Mask.GetType().Contains("Mask") || HeadGear.GetType().Contains("Moto"))

кроме того

некоторые виды питья и еды работают без проверки ActionCondition

 

Но я решил пойти по другому

Мы ловим процесс еды или питья ВООБЩЕ

И ловим в class ActionContinuousBaseCB

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

Ну те любые Continuous Actions

 

ИТОГ:

 

scripts_modded\4_World\Classes\UserActionsComponent\Actions\ActionContinuousBase_Modded.c

 

modded class ActionContinuousBaseCB : ActionBaseCB
{	
	bool m_ActionsDebug = true;

	override bool CancelCondition()
	{
		if ( !m_ActionData )
		{
			return DefaultCancelCondition();
		}

		string strAction = ActionContinuousBase.Cast(m_ActionData.m_Action).ToString();
		if (strAction.Contains("ActionDrink") || strAction.Contains("ActionEat") || strAction.Contains("ActionForceDrink") || strAction.Contains("ActionForceFeed"))
		{
			PlayerBase player = NULL;
			if (!m_ActionData.m_Target.GetObject())
			{
				player = m_ActionData.m_Player;
			}
			else
			{
				player = PlayerBase.Cast(m_ActionData.m_Target.GetObject());
			}
			
			if (CheckMaskHeadGear(player))
			{
				m_ActionData.m_Callback.Interrupt();
				return false;
			}
		}
		return super.CancelCondition();
	}
	
	bool CheckMaskHeadGear(PlayerBase player)
	{
		ItemBase MaskHeadGear = NULL;
		MaskHeadGear     = player.GetHumanInventory().FindAttachment(InventorySlots.MASK);
		if (!MaskHeadGear) MaskHeadGear = player.GetHumanInventory().FindAttachment(InventorySlots.HEADGEAR);
		if (MaskHeadGear)
		{	
			if (MaskHeadGear.GetType().Contains("Mask") || MaskHeadGear.GetType().Contains("Moto") || MaskHeadGear.GetType().Contains("GreatHelm"))
			{
				return true;
			}
		}
		return false;
	}
}

И это работает

 

думаю надо  раньше перехватывать но глубже не рыл

 

P.S. Если применять непосредственно к конкретным Actions

 

То при попытке сожрать в ActionCondition

 

		ItemBase MaskHeadGear = NULL;
		MaskHeadGear = player.GetHumanInventory().FindAttachment(InventorySlots.MASK);
		if (!MaskHeadGear) MaskHeadGear = player.GetHumanInventory().FindAttachment(InventorySlots.HEADGEAR);
		if (MaskHeadGear)
		{	
			if (MaskHeadGear.GetType().Contains("Mask") || MaskHeadGear.GetType().Contains("Moto") || MaskHeadGear.GetType().Contains("GreatHelm"))
			{
				return false;
			}
		}

 

А при попытке покормить (там есть одна такая)... на напоить там неот обработки Condition

 

		PlayerBase targetplayer = NULL;
		targetplayer = PlayerBase.Cast(target.GetObject());

		ItemBase MaskHeadGear = NULL;
		MaskHeadGear = targetplayer.GetHumanInventory().FindAttachment(InventorySlots.MASK);
		if (!MaskHeadGear) MaskHeadGear = targetplayer.GetHumanInventory().FindAttachment(InventorySlots.HEADGEAR);
		if (MaskHeadGear)
		{	
			if (MaskHeadGear.GetType().Contains("Mask") || MaskHeadGear.GetType().Contains("Moto") || MaskHeadGear.GetType().Contains("GreatHelm"))
			{
				return false;
			}
		}

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Equadro На самом деле и тут у меня проверка бошки и маски не совсем корректна

Просто если в слоте Mask что-то есть бошка не проверится

А в слоте маск может быть что-то что позволяет пить-жрать а на бошке не позволяет

Чисто гипотетически такая ситуация вполне возможна

Нужно переделать

Но сейчас писать лень

Share this post


Link to post
Share on other sites
  • 0

Вот так проверять в данном случае лучше

 

	bool CheckMaskHeadGear(PlayerBase player)
	{
		ItemBase MaskHeadGear = NULL;
		bool condition = false;
		
		MaskHeadGear = player.GetHumanInventory().FindAttachment(InventorySlots.MASK);
		if (MaskHeadGear)
		{
			if (MaskHeadGear.GetType().Contains("Mask")) condition = true;
		}
		if (!condition) 
		{
			MaskHeadGear = player.GetHumanInventory().FindAttachment(InventorySlots.HEADGEAR);
			if (MaskHeadGear) 
			{
				if (MaskHeadGear.GetType().Contains("Moto") || MaskHeadGear.GetType().Contains("GreatHelm") || MaskHeadGear.GetType().Contains("Tactical_Helmet")) condition = true;
			}
		}
		
		return condition;
	}

 

Share this post


Link to post
Share on other sites
  • 0

Блин придется болячки из кондишина в финиш переносить, а то не пьешь и болезнь появляется)))

Share this post


Link to post
Share on other sites
  • 0

Equadro я это еще не рыл

Лучше в финишь конечно

Про мод

Я нашел еще более интересный вариант обработки,  днем проверю

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 0

BorizzK 

ref array<string> items = {"Moto", "Mask", "Bike", "GorkaHelmetComplete", "GreatHelm", "Balaclava", "Helmet"};
ItemBase Mask = player.GetHumanInventory().FindAttachment(InventorySlots.MASK);
ItemBase Head = player.GetHumanInventory().FindAttachment(InventorySlots.HEADGEAR);
if (items.Find(Mask.GetType()) > -1 || items.Find(Head.GetType()) > -1)
	condition = true;

Может сие чудо? Кстати Helmet нужно менять на конкретное имя, а то там есть всякие шлемы не закрывающие рот.

Share this post


Link to post
Share on other sites
  • 0

Equadro балаклавы все с mask 

Tactical_helmet

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

Все что с маск закрывает рот

Вариант с массивом красивше, но жрет памяти на 1кб большеи в процессе 

 

И обработку походу надо в другое место переносить...

А болячку, да, переделывать

 

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

×
×
  • 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.