FirearmActionBase.c
class FirearmActionBase : ActionBase
{
void FirearmActionBase();
override int GetStanceMask(PlayerBase player)
{
return DayZPlayerConstants.STANCEMASK_ALL;
}
override int GetActionCategory()
{
return AC_SINGLE_USE;
}
override typename GetInputType()
{
return DefaultActionInput;
}
override bool ActionConditionContinue(ActionData action_data)
{
Weapon_Base wpn = Weapon_Base.Cast(action_data.m_MainItem);
return !wpn.IsIdle();
}
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
{
Weapon_Base wpn = Weapon_Base.Cast(item);
return wpn && wpn.CanProcessWeaponEvents() && !player.GetDayZPlayerInventory().IsProcessing();
}
override void Start(ActionData action_data)
{
super.Start(action_data);
action_data.m_State = UA_PROCESSING;
}
override bool CanBePerformedFromInventory()
{
return true;
}
override bool CanBeUsedOnBack()
{
return true;
}
override bool CanBeUsedRaised()
{
return true;
}
override void OnUpdate(ActionData action_data)
{
super.OnUpdate(action_data);
Weapon_Base wpn = Weapon_Base.Cast(action_data.m_MainItem);
if (!wpn || action_data.m_Player.GetItemInHands() != wpn || !action_data.m_Player.GetWeaponManager().IsRunning())
{
End(action_data);
}
}
override float GetProgress(ActionData action_data)
{
return -1;
}
override bool AddActionJuncture(ActionData action_data)
{
bool accepted;
accepted = super.AddActionJuncture(action_data);
Weapon_Base wpn = Weapon_Base.Cast(action_data.m_MainItem);
if (wpn)
{
Magazine mag = wpn.GetMagazine(wpn.GetCurrentMuzzle());
if (mag)
{
InventoryLocation magIl = new InventoryLocation();
mag.GetInventory().GetCurrentInventoryLocation(magIl);
if (!g_Game.AddInventoryJunctureEx(action_data.m_Player, mag, magIl, true, 10000, action_data))
{
accepted = false;
ClearActionJuncture(action_data);
}
else
{
action_data.m_ReservedInventoryLocations.Insert(magIl);
}
}
}
return accepted;
}
}