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;
}
}