DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionDeployObject.c
Go to the documentation of this file.
1class PlaceObjectActionReciveData : ActionReciveData
2{
5}
6
8{
10 {
11 m_CommandUID = 0;
12 m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT;
13 }
14
16 {
17 return true;
18 }
19
20 override bool IsDeploymentAction()
21 {
22 return true;
23 }
24
25 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
26 {
27 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
28 return false;
29
30 //Client
31 if (!GetGame().IsDedicatedServer())
32 {
33 if (player.IsPlacingLocal())
34 {
35 if (!player.GetHologramLocal().IsColliding())
36 {
37 if (item.CanBePlaced(player, player.GetHologramLocal().GetProjectionEntity().GetPosition()))
38 {
39 return true;
40 }
41 }
42 }
43 return false;
44 }
45 //Server
46 return true;
47 }
48
49 override bool ActionConditionContinue(ActionData action_data)
50 {
51 if (action_data.m_Player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
52 return false;
53
54 //Server
55 if (GetGame().IsDedicatedServer())
56 {
57 if (action_data.m_Player.IsPlacingServer())
58 {
59 if (GetGame().IsMultiplayer())
60 action_data.m_Player.GetHologramServer().EvaluateCollision(action_data.m_MainItem);
61
62 if (!action_data.m_Player.GetHologramServer().IsColliding())
63 {
64 if (action_data.m_MainItem.CanBePlaced(action_data.m_Player, action_data.m_Player.GetHologramServer().GetProjectionEntity().GetPosition()))
65 return true;
66 }
67 return false;
68 }
69 return false;
70 }
71 return true;
72 }
73
74 override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
75 {
76 if (super.SetupAction(player, target, item, action_data, extra_data))
77 {
78 PlaceObjectActionData poActionData;
79 poActionData = PlaceObjectActionData.Cast(action_data);
80 poActionData.m_AlreadyPlaced = false;
81 if (!GetGame().IsDedicatedServer())
82 {
83 player.GetHologramLocal().SetUpdatePosition(false);
84
85 Hologram hologram = player.GetHologramLocal();
86 if (hologram)
87 {
88 poActionData.m_Position = player.GetHologramLocal().GetProjectionPosition();
89 poActionData.m_Orientation = player.GetHologramLocal().GetProjectionOrientation();
90
91 poActionData.m_Player.SetLocalProjectionPosition(poActionData.m_Position);
92 poActionData.m_Player.SetLocalProjectionOrientation(poActionData.m_Orientation);
93 }
94 else
95 {
96 return false;
97 }
98 }
99
100 if (!action_data.m_MainItem)
101 return false;
102
103 SetupAnimation(action_data.m_MainItem);
104 return true;
105 }
106 return false;
107 }
108
109 override void OnStartClient(ActionData action_data)
110 {
111 PlaceObjectActionData poActionData;
112 poActionData = PlaceObjectActionData.Cast(action_data);
113
114 if (!poActionData)
115 return;
116
117 if (GetGame().IsMultiplayer())
118 action_data.m_Player.PlacingCompleteLocal();
119 }
120
121 override void OnStartServer(ActionData action_data)
122 {
123 if (GetGame().IsMultiplayer())
124 {
125 PlaceObjectActionData poActionData;
126 poActionData = PlaceObjectActionData.Cast(action_data);
127
128 if (!poActionData)
129 return;
130
131 EntityAI entity_for_placing = action_data.m_MainItem;
132 poActionData.m_Player.SetLocalProjectionPosition(poActionData.m_Position);
133 poActionData.m_Player.SetLocalProjectionOrientation(poActionData.m_Orientation);
134
135 if (action_data.m_MainItem)
136 {
137 poActionData.m_Player.PlacingStartServer(action_data.m_MainItem);
138
139 GetGame().AddActionJuncture(action_data.m_Player, entity_for_placing, 10000);
140 action_data.m_MainItem.SetIsBeingPlaced(true);
141 }
142 }
143 else
144 {
145 //local singleplayer
146 action_data.m_Player.PlacingStartServer(action_data.m_MainItem);
147 action_data.m_MainItem.SetIsBeingPlaced(true);
148 }
149 }
150
151 override void OnFinishProgressClient(ActionData action_data)
152 {
153 PlaceObjectActionData poActionData;
154 poActionData = PlaceObjectActionData.Cast(action_data);
155
156 if (!poActionData)
157 return;
158
159 EntityAI entity_for_placing = action_data.m_MainItem;
160 vector position = action_data.m_Player.GetLocalProjectionPosition();
161 vector orientation = action_data.m_Player.GetLocalProjectionOrientation();
162
163 poActionData.m_AlreadyPlaced = true;
164
165 entity_for_placing.OnPlacementComplete(action_data.m_Player, position, orientation);
166 }
167
168 override void OnEndClient(ActionData action_data)
169 {
170 PlaceObjectActionData poActionData;
171 poActionData = PlaceObjectActionData.Cast(action_data);
172 if (!poActionData.m_AlreadyPlaced)
173 {
174 action_data.m_Player.PlacingCancelLocal();
175
176 //action terminated locally, send cancel to server
177 poActionData.m_Player.GetActionManager().RequestEndAction();
178 if (action_data.m_Player.GetHologramLocal())
179 action_data.m_Player.GetHologramLocal().SetUpdatePosition(true);
180
182 if (action_data.m_MainItem.GetInventory().GetCurrentInventoryLocation(source) && source.GetType() == InventoryLocationType.GROUND)
183 {
184 action_data.m_Player.PredictiveTakeEntityToHands(action_data.m_MainItem);
185 }
186 }
187 }
188
189 override void OnEndServer(ActionData action_data)
190 {
191 if (!action_data || !action_data.m_MainItem)
192 return;
193
194 PlaceObjectActionData poActionData;
195 poActionData = PlaceObjectActionData.Cast(action_data);
196 if (!poActionData.m_AlreadyPlaced)
197 {
198 GetGame().ClearJunctureEx(action_data.m_Player, action_data.m_MainItem);
199 action_data.m_MainItem.SetIsBeingPlaced(false);
200
201 if (GetGame().IsMultiplayer())
202 {
203 action_data.m_Player.PlacingCancelServer();
204 action_data.m_MainItem.SoundSynchRemoteReset();
205 }
206 else
207 {
208 //local singleplayer
209 action_data.m_Player.PlacingCancelLocal();
210 action_data.m_Player.PlacingCancelServer();
211 }
212 }
213 else
214 {
215 action_data.m_MainItem.SetIsDeploySound(false);
216 action_data.m_MainItem.SetIsPlaceSound(false);
217 action_data.m_MainItem.SoundSynchRemoteReset();
218
219 if (action_data.m_MainItem.IsBasebuildingKit())
220 {
221 action_data.m_MainItem.Delete();
222 }
223 else
224 {
225 GetGame().ClearJunctureEx(action_data.m_Player, action_data.m_MainItem);
226 }
227 }
228 }
229
230 override void OnStartAnimationLoop(ActionData action_data)
231 {
232 if (!GetGame().IsDedicatedServer())
233 {
234 if (action_data.m_Player.GetItemInHands())
235 ActiondeployObjectCB.Cast(action_data.m_Callback).DropDuringPlacing(); //legacy stuff
236
237 DropDuringPlacing(action_data.m_Player);
238 }
239 }
240
241 override void OnExecuteServer(ActionData action_data)
242 {
243 action_data.m_MainItem.SoundSynchRemote();
244 }
245
246 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
247 {
248 super.WriteToContext(ctx, action_data);
249
250 PlaceObjectActionData poActionData;
251 poActionData = PlaceObjectActionData.Cast(action_data);
252
253 ctx.Write(poActionData.m_Position);
254 ctx.Write(poActionData.m_Orientation);
255 }
256
257 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
258 {
259 if (!action_recive_data)
260 {
261 action_recive_data = new PlaceObjectActionReciveData;
262 }
263 super.ReadFromContext(ctx, action_recive_data);
264 PlaceObjectActionReciveData action_data_po = PlaceObjectActionReciveData.Cast(action_recive_data);
265
266 vector entity_position = "0 0 0";
267 vector entity_orientation = "0 0 0";
268 if (!ctx.Read(entity_position))
269 return false;
270 if (!ctx.Read(entity_orientation))
271 return false;
272
273 action_data_po.m_Position = entity_position;
274 action_data_po.m_Orientation = entity_orientation;
275
276 return true;
277 }
278
279 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
280 {
281 super.HandleReciveData(action_recive_data, action_data);
282
283 PlaceObjectActionReciveData recive_data_po = PlaceObjectActionReciveData.Cast(action_recive_data);
284 PlaceObjectActionData action_data_po = PlaceObjectActionData.Cast(action_data);
285
286 action_data_po.m_Position = recive_data_po.m_Position;
287 action_data_po.m_Orientation = recive_data_po.m_Orientation;
288 }
289
291 {
292 if (item.IsDeployable())
293 {
294 if (item.IsHeavyBehaviour())
295 {
296 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DEPLOY_HEAVY;
297 }
298 else if (item.IsOneHandedBehaviour())
299 {
300 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DEPLOY_1HD;
301 }
302 else if (item.IsTwoHandedBehaviour())
303 {
304 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DEPLOY_2HD;
305 }
306 else
307 {
308 Debug.Log("Error: check " + item + " behaviour");
309 }
310 }
311 else
312 {
313 if (item.IsHeavyBehaviour())
314 {
315 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_PLACING_HEAVY;
316 }
317 else if (item.IsOneHandedBehaviour())
318 {
319 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_PLACING_1HD;
320 }
321 else if (item.IsTwoHandedBehaviour())
322 {
323 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_PLACING_2HD;
324 }
325 else
326 {
327 Debug.Log("Error: check " + item + " behaviour");
328 }
329 }
330 }
331};
void OnEndServer(ActionData action_data)
void OnStartClient(ActionData action_data)
void OnStartServer(ActionData action_data)
bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
Definition ActionBase.c:144
void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Definition ActionBase.c:517
bool IsDeploymentAction()
Is an action directly related to deployment/advanced placing.
Definition ActionBase.c:352
protected int m_StanceMask
Definition ActionBase.c:53
void OnEndClient(ActionData action_data)
void DropDuringPlacing()
DEPRECATED.
PlaceObjectActionReciveData ActionReciveData ActionDeployObject()
void SetupAnimation(ItemBase item)
class ActionTargets ActionTarget
eBrokenLegs
Definition EBrokenLegs.c:2
void ReadFromContext(ParamsReadContext ctx)
Definition Hand_Events.c:63
void WriteToContext(ParamsWriteContext ctx)
Definition Hand_Events.c:65
InventoryLocationType
types of Inventory Location
void OnStartAnimationLoop(ActionData action_data)
protected void OnFinishProgressClient(ActionData action_data)
ItemBase m_MainItem
Definition ActionBase.c:28
PlayerBase m_Player
Definition ActionBase.c:33
ActionBaseCB m_Callback
Definition ActionBase.c:29
protected void OnExecuteServer(ActionData action_data)
override bool ActionConditionContinue(ActionData action_data)
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
proto native bool AddActionJuncture(Man player, notnull EntityAI item, int timeout_ms)
bool ClearJunctureEx(Man player, notnull EntityAI item)
Definition Game.c:735
Definition Debug.c:14
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
Definition Debug.c:133
InventoryLocation.
proto native int GetType()
returns type of InventoryLocation
override bool IsBasebuildingKit()
Definition KitBase.c:17
override bool CanBePlaced(Man player, vector position)
Definition TentBase.c:1023
override bool IsDeployable()
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Definition param.c:12
Serialization general interface. Serializer API works with:
Definition Serializer.c:56
proto bool Write(void value_out)
proto bool Read(void value_in)
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
proto native CGame GetGame()