DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionAttachExplosivesTrigger.c
Go to the documentation of this file.
2{
3 override void CreateActionComponent()
4 {
6 }
7}
8
10{
12 {
13 m_CallbackClass = ActionAttachExplosivesTriggerCB;
14 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_CRAFTING;
15 m_FullBody = true;
17 m_Text = "#STR_ArmExplosive";
18 }
19
21 {
24 }
25
26 override bool ActionConditionContinue(ActionData action_data)
27 {
28 return true;
29 }
30
31 override bool CanBeSetFromInventory()
32 {
33 return true;
34 }
35
36 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
37 {
38 if (target.GetParent())
39 {
40 return false;
41 }
42
43 if (ClaymoreMine.Cast(target.GetObject()))
44 {
45 return false;
46 }
47
48 ExplosivesBase explosive = ExplosivesBase.Cast(target.GetObject());
49 if (explosive)
50 {
51 ClockBase timedTrigger;
52 if (ClockBase.CastTo(timedTrigger, item))
53 {
54 return timedTrigger.IsAlarmOn() && explosive.IsTimerDetonable() && explosive.CanBeArmed();
55 }
56
57 return explosive.CanBeArmed();
58 }
59
60
61 return false;
62 }
63
64 override void OnFinishProgressServer(ActionData action_data)
65 {
66 ClearInventoryReservationEx(action_data);
67
68 ExplosivesBase explosive = ExplosivesBase.Cast(action_data.m_Target.GetObject());
69 if (explosive)
70 {
71 explosive.UnlockTriggerSlots();
72 explosive.SetTakeable(false); //Ensures the item is not picked by server or remotes before arming
73 }
74
75 if (action_data.m_MainItem.IsInherited(RemoteDetonator))
76 {
78
79 return;
80 }
81 else
82 {
83 AttachItem(action_data);
84 }
85 }
86
87 override void OnFinishProgressClient(ActionData action_data)
88 {
89 ClearInventoryReservationEx(action_data);
90
91 ExplosivesBase explosive = ExplosivesBase.Cast(action_data.m_Target.GetObject());
92 if (explosive)
93 {
94 explosive.UnlockTriggerSlots();
95 explosive.SetTakeable(false); //Ensures the item is not picked by client before arming
96 }
97
98 if (!action_data.m_MainItem.IsInherited(RemoteDetonator))
99 {
100 AttachItem(action_data);
101 }
102 }
103
104 override void OnEndServer(ActionData action_data)
105 {
106 ExplosivesBase explosive = ExplosivesBase.Cast(action_data.m_Target.GetObject());
107
108 RemoteDetonatorTrigger trigger = RemoteDetonatorTrigger.Cast(action_data.m_Player.GetItemInHands());
109 if (trigger)
110 {
111 if (explosive)
112 {
113 explosive.PairWithDevice(trigger);
114 explosive.Arm();
115 }
116 }
117 }
118
120 {
121 ExplosivesBase explosive;
122 if (action_data.m_Target.IsProxy())
123 {
124 explosive = ExplosivesBase.Cast(action_data.m_Target.GetParent());
125 }
126 else
127 {
128 explosive = ExplosivesBase.Cast(action_data.m_Target.GetObject());
129 }
130
131 if (explosive && action_data.m_MainItem)
132 {
133 explosive.UnlockTriggerSlots();
134 ItemBase receiver = ItemBase.Cast(explosive.GetInventory().CreateAttachment("RemoteDetonatorReceiver"));
135 if (receiver)
136 {
137 MiscGameplayFunctions.TransferItemProperties(action_data.m_MainItem, receiver);
138 receiver.LockToParent();
140 }
141 }
142 }
143
144 protected void AttachItem(ActionData action_data)
145 {
146 EntityAI target_EAI;
147 if (action_data.m_Target.IsProxy())
148 {
149 target_EAI = EntityAI.Cast(action_data.m_Target.GetParent());
150 }
151 else
152 {
153 target_EAI = EntityAI.Cast(action_data.m_Target.GetObject());
154 }
155
156 if (target_EAI && action_data.m_MainItem)
157 {
158 int slot_id = InventorySlots.GetSlotIdFromString(action_data.m_MainItem.GetExplosiveTriggerSlotName());
159 action_data.m_Player.PredictiveTakeEntityToTargetAttachmentEx(target_EAI, action_data.m_MainItem, slot_id);
160 }
161 }
162}
ActionAttachExplosivesTriggerCB ActionContinuousBaseCB ActionAttachExplosivesTrigger()
protected void CreateRemoteDetonatorReceiverAsAttachment(ActionData action_data)
protected void AttachItem(ActionData action_data)
bool CanBeSetFromInventory()
Definition ActionBase.c:301
void CreateConditionComponents()
Definition ActionBase.c:218
void OnEndServer(ActionData action_data)
protected float m_SpecialtyWeight
Definition ActionBase.c:68
ref CCIBase m_ConditionItem
Definition ActionBase.c:55
ref CCTBase m_ConditionTarget
Definition ActionBase.c:56
void ClearInventoryReservationEx(ActionData action_data)
Definition ActionBase.c:861
protected string m_Text
Definition ActionBase.c:49
protected bool m_FullBody
Definition ActionBase.c:52
class ActionTargets ActionTarget
void ClockBase()
Definition ClockBase.c:27
void ExplosivesBase()
protected ActionData m_ActionData
protected void OnFinishProgressClient(ActionData action_data)
protected void OnFinishProgressServer(ActionData action_data)
ItemBase m_MainItem
Definition ActionBase.c:28
PlayerBase m_Player
Definition ActionBase.c:33
ref CABase m_ActionComponent
Definition ActionBase.c:30
ref ActionTarget m_Target
Definition ActionBase.c:32
override bool ActionConditionContinue(ActionData action_data)
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
provides access to slot configuration
static proto native int GetSlotIdFromString(string slot_name)
converts string to slot_id
static RemoteDetonatorTrigger SpawnInPlayerHands(notnull EntityAI pEntity)
const float DEFAULT
const float EXPLOSIVE_ARM
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602