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