DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionDeployObject.c
См. документацию.
14
15 override bool ActionUsesHologram()
16 {
17 return true;
18 }
19
21 {
22 return true;
23 }
24
25 override bool IsDeploymentAction()
26 {
27 return true;
28 }
29
31 {
32 return false;
33 }
34
35 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
36 {
37 //Client
38 if (!GetGame().IsDedicatedServer())
39 {
40 if (player.IsPlacingLocal())
41 {
42 if (!player.GetHologramLocal().IsColliding())
43 {
44 if (item.CanBePlaced(player, player.GetHologramLocal().GetProjectionEntity().GetPosition()))
45 {
46 return true;
47 }
48 }
49 }
50 return false;
51 }
52 //Server
53 return true;
54 }
55
56 override bool ActionConditionContinue(ActionData action_data)
57 {
58 //Server
59 if (GetGame().IsDedicatedServer())
60 {
61 if (action_data.m_Player.IsPlacingServer())
62 {
63 if (GetGame().IsMultiplayer())
64 action_data.m_Player.GetHologramServer().EvaluateCollision(action_data.m_MainItem);
65
66 if (!action_data.m_Player.GetHologramServer().IsColliding())
67 {
68 if (action_data.m_MainItem.CanBePlaced(action_data.m_Player, action_data.m_Player.GetHologramServer().GetProjectionEntity().GetPosition()))
69 return true;
70 }
71 return false;
72 }
73 return false;
74 }
75 return true;
76 }
77
78 override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
79 {
80 if (super.SetupAction(player, target, item, action_data, extra_data))
81 {
82 PlaceObjectActionData poActionData = PlaceObjectActionData.Cast(action_data);
83 if (!poActionData)
84 return false;
85
86 poActionData.m_AlreadyPlaced = false;
87
88 if (!GetGame().IsDedicatedServer())
89 {
90 player.GetHologramLocal().SetUpdatePosition(false);
91
92 Hologram hologram = player.GetHologramLocal();
93 if (hologram)
94 {
95 poActionData.m_Position = hologram.GetProjectionPosition();
96 poActionData.m_Orientation = hologram.GetProjectionOrientation();
97
98 poActionData.m_Player.SetLocalProjectionPosition(poActionData.m_Position);
99 poActionData.m_Player.SetLocalProjectionOrientation(poActionData.m_Orientation);
100 }
101 else
102 {
103 return false;
104 }
105 }
106
107 if (!poActionData.m_MainItem)
108 return false;
109
110 SetupAnimation(poActionData.m_MainItem);
111 return true;
112 }
113 return false;
114 }
115
116 override void OnStartClient(ActionData action_data)
117 {
118 PlaceObjectActionData poActionData = PlaceObjectActionData.Cast(action_data);
119 if (!poActionData)
120 return;
121
122 if (GetGame().IsMultiplayer())
123 poActionData.m_Player.PlacingCompleteLocal();
124 }
125
126 override void OnStartServer(ActionData action_data)
127 {
128 super.OnStartServer(action_data);
129
130 PlaceObjectActionData poActionData = PlaceObjectActionData.Cast(action_data);
131 if (!poActionData)
132 return;
133
134 if (GetGame().IsMultiplayer())
135 {
136 EntityAI entity_for_placing = poActionData.m_MainItem;
137 poActionData.m_Player.SetLocalProjectionPosition(poActionData.m_Position);
138 poActionData.m_Player.SetLocalProjectionOrientation(poActionData.m_Orientation);
139
140 if (poActionData.m_MainItem)
141 {
142 poActionData.m_Player.PlacingStartServer(poActionData.m_MainItem);
143
144 GetGame().AddActionJuncture(poActionData.m_Player, entity_for_placing, 10000);
145 poActionData.m_MainItem.SetIsBeingPlaced(true);
146 }
147 }
148 else
149 {
150 //local singleplayer
151 poActionData.m_Player.PlacingStartServer(poActionData.m_MainItem);
152 poActionData.m_MainItem.SetIsBeingPlaced(true);
153 }
154
155 if (poActionData.m_MainItem.GetPlaceSoundset() != string.Empty)
156 poActionData.m_MainItem.StartItemSoundServer(SoundConstants.ITEM_PLACE);
157
158 if (poActionData.m_MainItem.GetLoopDeploySoundset() != string.Empty)
159 poActionData.m_MainItem.StartItemSoundServer(SoundConstants.ITEM_DEPLOY_LOOP);
160 }
161
162 override void OnFinishProgressClient(ActionData action_data)
163 {
164 PlaceObjectActionData poActionData = PlaceObjectActionData.Cast(action_data);
165 if (!poActionData)
166 return;
167
168 EntityAI entity_for_placing = poActionData.m_MainItem;
169 vector position = poActionData.m_Player.GetLocalProjectionPosition();
170 vector orientation = poActionData.m_Player.GetLocalProjectionOrientation();
171
172 poActionData.m_AlreadyPlaced = true;
173
174 entity_for_placing.OnPlacementComplete(poActionData.m_Player, position, orientation);
175 }
176
177 override void OnFinishProgressServer(ActionData action_data)
178 {
179 super.OnFinishProgressServer(action_data);
180
181 if (action_data.m_MainItem.GetDeploySoundset() != string.Empty)
182 action_data.m_MainItem.StartItemSoundServer(SoundConstants.ITEM_DEPLOY);
183 if (action_data.m_MainItem.GetLoopDeploySoundset() != string.Empty)
184 action_data.m_MainItem.StopItemSoundServer(SoundConstants.ITEM_DEPLOY_LOOP);
185 }
186
187 override void OnEndClient(ActionData action_data)
188 {
189 super.OnEndClient(action_data);
190
191 PlaceObjectActionData poActionData = PlaceObjectActionData.Cast(action_data);
192 if (!poActionData)
193 return;
194
195 if (!poActionData.m_AlreadyPlaced)
196 {
197 poActionData.m_Player.PlacingCancelLocal();
198
199 //action terminated locally, send cancel to server
200 poActionData.m_Player.GetActionManager().RequestEndAction();
201 if (poActionData.m_Player.GetHologramLocal())
202 poActionData.m_Player.GetHologramLocal().SetUpdatePosition(true);
203
205 if (poActionData.m_MainItem.GetInventory().GetCurrentInventoryLocation(source) && source.GetType() == InventoryLocationType.GROUND)
206 {
207 poActionData.m_Player.PredictiveTakeEntityToHands(poActionData.m_MainItem);
208 }
209 }
210 }
211
212 override void OnEndServer(ActionData action_data)
213 {
214 super.OnEndServer(action_data);
215
216 PlaceObjectActionData poActionData = PlaceObjectActionData.Cast(action_data);
217 if (!poActionData || !poActionData.m_MainItem)
218 return;
219
220 if (!poActionData.m_AlreadyPlaced)
221 {
222 GetGame().ClearJunctureEx(poActionData.m_Player, poActionData.m_MainItem);
223 poActionData.m_MainItem.SetIsBeingPlaced(false);
224
225 if (GetGame().IsMultiplayer())
226 {
227 poActionData.m_Player.PlacingCancelServer();
228 }
229 else
230 {
231 //local singleplayer
232 poActionData.m_Player.PlacingCancelLocal();
233 poActionData.m_Player.PlacingCancelServer();
234 }
235 }
236 else
237 {
238 if (poActionData.m_MainItem.IsBasebuildingKit())
239 {
240 poActionData.m_MainItem.Delete();
241 }
242 else
243 {
244 GetGame().ClearJunctureEx(poActionData.m_Player, poActionData.m_MainItem);
245 }
246 }
247
248 if (poActionData.m_MainItem.GetLoopDeploySoundset() != string.Empty)
249 poActionData.m_MainItem.StopItemSoundServer(SoundConstants.ITEM_DEPLOY_LOOP);
250 }
251
252 override void OnStartAnimationLoop(ActionData action_data)
253 {
254 if (!GetGame().IsDedicatedServer())
255 {
256 if (action_data.m_Player.GetItemInHands())
257 ActiondeployObjectCB.Cast(action_data.m_Callback).DropDuringPlacing(); //legacy stuff
258
259 if (HasProgress()) // if object has no progress, it is moved directly when action finishes
260 {
261 ClearInventoryReservationEx(action_data); // Clear reservation as we put the main item from hands on ground
262 DropDuringPlacing(action_data.m_Player);
263 }
264 }
265 }
266
267 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
268 {
269 super.WriteToContext(ctx, action_data);
270
271 PlaceObjectActionData poActionData = PlaceObjectActionData.Cast(action_data);
272 if (!poActionData)
273 return;
274
275 ctx.Write(poActionData.m_Position);
276 ctx.Write(poActionData.m_Orientation);
277 }
278
279 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
280 {
281 if (!action_recive_data)
282 action_recive_data = new PlaceObjectActionReciveData;
283
284 super.ReadFromContext(ctx, action_recive_data);
285 PlaceObjectActionReciveData recive_data_po = PlaceObjectActionReciveData.Cast(action_recive_data);
286
287 vector entity_position = "0 0 0";
288 vector entity_orientation = "0 0 0";
289 if (!ctx.Read(entity_position))
290 return false;
291 if (!ctx.Read(entity_orientation))
292 return false;
293
294 recive_data_po.m_Position = entity_position;
295 recive_data_po.m_Orientation = entity_orientation;
296
297 return true;
298 }
299
300 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
301 {
302 super.HandleReciveData(action_recive_data, action_data);
303
304 PlaceObjectActionReciveData recive_data_po = PlaceObjectActionReciveData.Cast(action_recive_data);
305 PlaceObjectActionData action_data_po = PlaceObjectActionData.Cast(action_data);
306
307 action_data_po.m_Position = recive_data_po.m_Position;
308 action_data_po.m_Orientation = recive_data_po.m_Orientation;
309
310 #ifdef DEVELOPER
311 if (IsCLIParam("hologramLogs"))
312 {
313 Debug.Log(string.Format("HandleReciveData | received pos: %1", action_data_po.m_Position), "hologramLogs");
314 }
315 #endif
316 }
317
319 {
320 if (item.IsDeployable())
321 {
322 if (item.IsHeavyBehaviour())
323 {
324 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DEPLOY_HEAVY;
325 }
326 else if (item.IsOneHandedBehaviour())
327 {
328 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DEPLOY_1HD;
329 }
330 else if (item.IsTwoHandedBehaviour())
331 {
332 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DEPLOY_2HD;
333 }
334 else
335 {
336 Debug.Log("Error: check " + item + " behaviour");
337 }
338 }
339 else
340 {
341 if (item.IsHeavyBehaviour())
342 {
343 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_PLACING_HEAVY;
344 }
345 else if (item.IsOneHandedBehaviour())
346 {
347 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_PLACING_1HD;
348 }
349 else if (item.IsTwoHandedBehaviour())
350 {
351 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_PLACING_2HD;
352 }
353 else
354 {
355 Debug.Log("Error: check " + item + " behaviour");
356 }
357 }
358 }
359};
override void OnFinishProgressServer(ActionData action_data)
Определения ActionActivateTrap.c:116
override void OnStartAnimationLoop(ActionData action_data)
Определения ActionActivateTrap.c:76
override bool HasProgress()
Определения ActionActivateTrap.c:41
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionActivateTrap.c:46
override void OnEndServer(ActionData action_data)
Определения ActionArmExplosive.c:67
override void OnStartServer(ActionData action_data)
Определения ActionArmExplosive.c:58
override bool ActionConditionContinue(ActionData action_data)
Определения ActionAttachExplosivesTrigger.c:27
override void OnFinishProgressClient(ActionData action_data)
int m_CommandUID
Определения ActionBase.c:31
int m_StanceMask
Определения ActionBase.c:33
ActionBase ActionData
Определения ActionBase.c:30
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения ActionBuildPart.c:407
override bool HasAlternativeInterrupt()
Определения ActionBuildPart.c:241
override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
Определения ActionBuildPart.c:344
void DropDuringPlacing()
DEPRECATED.
PlaceObjectActionReciveData ActionReciveData ActionDeployObject()
Определения ActionDeployObject.c:9
override bool CanBeUsedWithBrokenLegs()
Определения ActionDeployObject.c:30
override bool IsDeploymentAction()
Определения ActionDeployObject.c:25
void SetupAnimation(ItemBase item)
Определения ActionDeployObject.c:318
override bool ActionUsesHologram()
Определения ActionDeployObject.c:15
override void OnStartClient(ActionData action_data)
Определения ActionRaiseMegaphone.c:73
override void OnEndClient(ActionData action_data)
Определения ActionRaiseMegaphone.c:79
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:121
void ReadFromContext(ParamsReadContext ctx)
Определения Hand_Events.c:70
void WriteToContext(ParamsWriteContext ctx)
Определения Hand_Events.c:72
InventoryLocationType
types of Inventory Location
Определения InventoryLocation.c:4
bool ClearJunctureEx(Man player, notnull EntityAI item)
Определения Global/game.c:762
proto native bool AddActionJuncture(Man player, notnull EntityAI item, int timeout_ms)
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.
Определения 3_Game/tools/Debug.c:122
Определения 3_Game/tools/Debug.c:2
vector GetProjectionOrientation()
Определения Hologram.c:1453
vector GetProjectionPosition()
Определения Hologram.c:1445
Определения Hologram.c:2
proto native int GetType()
returns type of InventoryLocation
InventoryLocation.
Определения InventoryLocation.c:29
override bool CanBePlaced(Man player, vector position)
Определения TentBase.c:947
override bool IsDeployable()
Определения BaseBuildingBase.c:365
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Определения param.c:12
vector m_Orientation
Определения ActionDeployBase.c:4
bool m_AlreadyPlaced
Определения ActionDeployBase.c:5
vector m_Position
Определения ActionDeployBase.c:3
vector m_Orientation
Определения ActionDeployObject.c:4
Определения PlayerBaseClient.c:2
proto bool Write(void value_out)
proto bool Read(void value_in)
Определения EnConvert.c:106
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16
proto native bool IsCLIParam(string param)
Returns if command line argument is present.