Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
actiontakearrowtohands.c
Go to the documentation of this file.
2{
4 {
5 m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS;
6 m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS;
7 m_Text = "#take_to_hands";
8 }
9
10 override void CreateConditionComponents()
11 {
14 }
15
16 override bool HasProneException()
17 {
18 return true;
19 }
20
21 override typename GetInputType()
22 {
24 }
25
26 override bool HasProgress()
27 {
28 return false;
29 }
30
31 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
32 {
33 EntityAI targetEntity = EntityAI.Cast(target.GetObject());
34 if (!targetEntity || (targetEntity && targetEntity.IsManagingArrows() && !targetEntity.IsDamageDestroyed()))
35 return false;
36
37 ArrowManagerBase arrowManager = targetEntity.GetArrowManager();
38 if (arrowManager)
39 {
40 ItemBase arrow = ItemBase.Cast(arrowManager.GetFirstArrow());
41 if (arrow && !arrow.IsSetForDeletion())
42 {
43 if (player.GetInventory().CanAddEntityIntoHands(arrow))
44 return true;
45 }
46 }
47
48 return false;
49 }
50
51 override Object GetDisplayInteractObject(PlayerBase player, ActionTarget target)
52 {
53 EntityAI targetEntity = EntityAI.Cast(target.GetObject());
54 if (!targetEntity || (targetEntity && targetEntity.IsManagingArrows() && !targetEntity.IsDamageDestroyed()))
55 return null;
56
57 ArrowManagerBase arrowManager = targetEntity.GetArrowManager();
58 if (arrowManager)
59 {
60 return arrowManager.GetFirstArrow();
61 }
62
63 return null;
64 }
65
66 override bool CanContinue(ActionData action_data)
67 {
68 return true;
69 }
70
71 override bool InventoryReservation(ActionData action_data)
72 {
73 bool success = true;
74
76
77 EntityAI targetEntity;
78 if (EntityAI.CastTo(targetEntity, action_data.m_Target.GetObject()))
79 {
80 ArrowManagerBase arrowManager = targetEntity.GetArrowManager();
81 if (arrowManager)
82 {
83 ItemBase targetArrow = ItemBase.Cast(arrowManager.GetFirstArrow());
84 if (targetArrow)
85 {
86 il.SetHands(action_data.m_Player,targetArrow);
87 if (action_data.m_Player.GetInventory().HasInventoryReservation(targetArrow, il))
88 {
89 success = false;
90 }
91 else
92 {
93 action_data.m_Player.GetInventory().AddInventoryReservationEx(targetArrow, il, GameInventory.c_InventoryReservationTimeoutMS);
94 }
95 }
96 }
97 }
98
99 if (success)
100 {
101 if (il)
102 action_data.m_ReservedInventoryLocations.Insert(il);
103 }
104
105 return success;
106 }
107
108
109 override void OnExecute(ActionData action_data)
110 {
111 if (GetGame().IsDedicatedServer())
112 {
113 ClearActionJuncture(action_data);
114 return;
115 }
116
117 InventoryLocation il = action_data.m_ReservedInventoryLocations.Get(0);
118
119 ItemBase arrow = ItemBase.Cast(il.GetItem());
120 ClearInventoryReservationEx(action_data);
121
122 float stackable = arrow.GetTargetQuantityMax(-1);
123
124 if (stackable == 0 || stackable >= arrow.GetQuantity())
125 {
126 action_data.m_Player.PredictiveTakeEntityToHands(arrow);
127 }
128 else
129 {
130 arrow.SplitIntoStackMaxToInventoryLocationClient(il);
131 }
132 }
133
134 override void CreateAndSetupActionCallback(ActionData action_data)
135 {
136 EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject());
137 if (!target)
138 return;
139
140 ActionBaseCB callback;
141
142 if (target.IsHeavyBehaviour())
143 {
144 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(), DayZPlayerConstants.STANCEMASK_ERECT));
145 }
146 else
147 {
148 if (action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT))
149 {
150 Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(m_CommandUID,GetCallbackClassTypename()));
151 }
152 else
153 {
154 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(m_CommandUIDProne,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_PRONE));
155 }
156 }
157
158 callback.SetActionData(action_data);
159 callback.InitActionComponent();
160 action_data.m_Callback = callback;
161 }
162
163
164 override bool CanBeUsedOnBack()
165 {
166 return true;
167 }
168}
void SetActionData(ActionData action_data)
void ClearActionJuncture(ActionData action_data)
string m_Text
Definition actionbase.c:58
ref CCIBase m_ConditionItem
Definition actionbase.c:64
void ClearInventoryReservationEx(ActionData action_data)
ref CCTBase m_ConditionTarget
Definition actionbase.c:65
EntityAI GetFirstArrow()
Super root of all classes in Enforce script.
Definition enscript.c:11
script counterpart to engine's class Inventory
Definition inventory.c:79
const int c_InventoryReservationTimeoutMS
reservations
Definition inventory.c:712
InventoryLocation.
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
proto native CGame GetGame()