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