ActionDisarmExplosiveWithRemoteDetonator.c
class ActionDisarmExplosiveWithRemoteDetonatorCB : ActionDisarmExplosiveCB
{
override void CreateActionComponent()
{
m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.DISARM_EXPLOSIVE_REMOTE_PAIRED);
}
}
class ActionDisarmExplosiveWithRemoteDetonator : ActionDisarmExplosive
{
void ActionDisarmExplosiveWithRemoteDetonator()
{
m_CallbackClass = ActionDisarmExplosiveWithRemoteDetonatorCB;
m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH;
m_FullBody = true;
m_Text = "#disarm";
}
override void CreateConditionComponents()
{
m_ConditionItem = new CCINonRuined();
m_ConditionTarget = new CCTNonRuined();
}
override bool CanBeSetFromInventory()
{
return true;
}
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
{
if (!target)
return false;
ExplosivesBase explosive = ExplosivesBase.Cast(target.GetObject());
if (!explosive)
return false;
if (explosive.IsRuined() || !explosive.GetArmed() || !explosive.CanBeDisarmed())
return false;
if (explosive.GetAttachmentByType(KitchenTimer) || explosive.GetAttachmentByType(AlarmClock_ColorBase))
return false;
RemoteDetonatorTrigger rdt = RemoteDetonatorTrigger.Cast(item);
if (rdt && rdt.IsConnected())
{
if (explosive != rdt.GetControlledDevice())
return false;
ExplosivesBase controlledDevice = ExplosivesBase.Cast(rdt.GetControlledDevice());
if (controlledDevice && !controlledDevice.IsRuined() && controlledDevice.GetArmed())
return true;
}
return false;
}
override void OnFinishProgressServer(ActionData action_data)
{
ExplosivesBase explosive = ExplosivesBase.Cast(action_data.m_Target.GetObject());
ItemBase detonator = ItemBase.Cast(action_data.m_MainItem);
explosive.OnBeforeDisarm();
//! claymore has integrated detonator
if (explosive.IsInherited(ClaymoreMine))
{
explosive.Disarm();
explosive.SetTakeable(true);
detonator.Delete();
return;
}
ReplaceDetonatorItemOnDisarmLambda lambda = new ReplaceDetonatorItemOnDisarmLambda(detonator, "RemoteDetonator");
MiscGameplayFunctions.TurnItemIntoItemEx(action_data.m_Player, lambda);
//! refresh IK, item changed
action_data.m_Player.GetItemAccessor().OnItemInHandsChanged();
}
}