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

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

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

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

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

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

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

 

 

 

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


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

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






  • 0

DonFalkone могу сделать на серверной стороне.

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


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

BorizzK ыть)

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


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

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

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

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

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


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

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

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


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

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

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

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

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

 

 

 

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


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

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

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


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

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

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


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

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

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

 

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

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


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

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

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


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

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

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

 

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


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

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

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


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

Хотя вроде косяк нашел

Не нашел =(

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

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


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

Equadro Я в курсе

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

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

 

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

 

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

 

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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;
	}
};

 

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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;
			}
		}

 

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

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


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

BorizzK ну у них все через жопу

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


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

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

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

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

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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;
	}

 

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


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

BorizzK мод мутим в стим?

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


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

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

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


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

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

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

Про мод

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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 нужно менять на конкретное имя, а то там есть всякие шлемы не закрывающие рот.

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


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

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

Tactical_helmet

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

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

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

 

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

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

 

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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