70 override void CreateConditionComponents()
76 override bool HasTarget()
81 override bool HasProgress()
86 override bool HasAlternativeInterrupt()
91 override string GetText()
93 return "#deploy_object";
96 override bool ActionConditionContinue( ActionData action_data )
101 override ActionData CreateActionData()
107 override bool SetupAction(
PlayerBase player, ActionTarget target,
ItemBase item, out ActionData action_data,
Param extra_data = NULL)
109 if ( super.SetupAction(player, target, item, action_data, extra_data ))
113 poActionData.m_AlreadyPlaced =
false;
116 Hologram hologram = player.GetHologramLocal();
119 poActionData.m_Position = player.GetHologramLocal().GetProjectionPosition();
120 poActionData.m_Orientation = player.GetHologramLocal().GetProjectionOrientation();
122 poActionData.m_Player.SetLocalProjectionPosition( poActionData.m_Position );
123 poActionData.m_Player.SetLocalProjectionOrientation( poActionData.m_Orientation );
131 if ( !action_data.m_MainItem )
134 SetupAnimation( action_data.m_MainItem );
140 override bool ActionCondition(
PlayerBase player, ActionTarget target,
ItemBase item )
146 if ( player.IsPlacingLocal() )
149 if ( !player.GetHologramLocal().IsColliding() )
151 if ( item.
CanBePlaced(player, player.GetHologramLocal().GetProjectionEntity().GetPosition()) )
184 override void OnStartClient( ActionData action_data )
189 if ( !poActionData ) {
return; }
192 action_data.m_Player.PlacingCompleteLocal();
195 override void OnStartServer( ActionData action_data )
197 if (
GetGame().IsMultiplayer() )
202 if ( !poActionData ) {
return; }
204 EntityAI entity_for_placing = action_data.m_MainItem;
205 poActionData.m_Player.SetLocalProjectionPosition( poActionData.m_Position );
206 poActionData.m_Player.SetLocalProjectionOrientation( poActionData.m_Orientation );
208 if ( action_data.m_MainItem )
210 poActionData.m_Player.PlacingStartServer(action_data.m_MainItem);
212 GetGame().AddActionJuncture( action_data.m_Player, entity_for_placing, 10000 );
213 action_data.m_MainItem.SetIsBeingPlaced(
true );
219 action_data.m_Player.PlacingStartServer(action_data.m_MainItem);
220 action_data.m_Player.GetHologramLocal().SetUpdatePosition(
false );
221 action_data.m_MainItem.SetIsBeingPlaced(
true );
225 override void OnFinishProgressClient( ActionData action_data )
230 if ( !poActionData ) {
return; }
232 EntityAI entity_for_placing = action_data.m_MainItem;
233 vector position = action_data.m_Player.GetLocalProjectionPosition();
234 vector orientation = action_data.m_Player.GetLocalProjectionOrientation();
236 poActionData.m_AlreadyPlaced =
true;
238 entity_for_placing.OnPlacementComplete( action_data.m_Player, position, orientation);
241 override void OnFinishProgressServer( ActionData action_data )
246 if ( !poActionData ) {
return; }
247 if( !action_data.m_MainItem ) {
return; }
249 EntityAI entity_for_placing = action_data.m_MainItem;
250 vector position = action_data.m_Player.GetLocalProjectionPosition();
251 vector orientation = action_data.m_Player.GetLocalProjectionOrientation();
253 action_data.m_Player.GetHologramServer().EvaluateCollision(action_data.m_MainItem);
255 if (action_data.m_Player.GetHologramServer().IsColliding())
261 action_data.m_Player.GetHologramServer().PlaceEntity( entity_for_placing );
263 if (
GetGame().IsMultiplayer() )
264 action_data.m_Player.GetHologramServer().CheckPowerSource();
266 action_data.m_Player.PlacingCompleteServer();
267 entity_for_placing.OnPlacementComplete( action_data.m_Player, position, orientation );
269 MoveEntityToFinalPosition( action_data, position, orientation );
270 GetGame().ClearJuncture( action_data.m_Player, entity_for_placing );
271 action_data.m_MainItem.SetIsBeingPlaced(
false );
273 poActionData.m_AlreadyPlaced =
true;
274 action_data.m_MainItem.SoundSynchRemoteReset();
277 override void OnEndClient( ActionData action_data )
281 if ( !poActionData.m_AlreadyPlaced )
283 EntityAI entity_for_placing = action_data.m_MainItem;
284 action_data.m_Player.PlacingCancelLocal();
285 action_data.m_Player.PredictiveTakeEntityToHands( entity_for_placing );
286 action_data.m_Player.LockHandsUntilItemHeld();
290 override void OnEndServer( ActionData action_data )
292 if( !action_data || !action_data.m_MainItem )
297 if ( !poActionData.m_AlreadyPlaced )
299 EntityAI entity_for_placing = action_data.m_MainItem;
300 GetGame().ClearJuncture( action_data.m_Player, entity_for_placing );
301 action_data.m_MainItem.SetIsBeingPlaced(
false );
303 if (
GetGame().IsMultiplayer() )
305 action_data.m_Player.PlacingCancelServer();
307 action_data.m_MainItem.SoundSynchRemoteReset();
312 action_data.m_Player.PlacingCancelLocal();
313 action_data.m_Player.PlacingCancelServer();
318 if ( action_data.m_MainItem.GetInventory().GetCurrentInventoryLocation( source ) )
320 destination.SetHands( action_data.m_Player, action_data.m_MainItem );
321 action_data.m_Player.GetDayZPlayerInventory().RedirectToHandEvent(
InventoryMode.LOCAL, source, destination);
325 GetGame().ClearJuncture( action_data.m_Player, action_data.m_MainItem );
331 action_data.m_MainItem.SetIsDeploySound(
false );
332 action_data.m_MainItem.SetIsPlaceSound(
false );
333 action_data.m_MainItem.SoundSynchRemoteReset();
335 if ( action_data.m_MainItem.IsBasebuildingKit() )
337 action_data.m_MainItem.Delete();
341 GetGame().ClearJuncture( action_data.m_Player, action_data.m_MainItem );
346 override void OnStartAnimationLoop( ActionData action_data )
350 if ( action_data.m_Player.GetItemInHands() )
355 override void OnExecuteServer( ActionData action_data )
357 action_data.m_MainItem.SoundSynchRemote();
362 super.WriteToContext(ctx, action_data);
367 ctx.Write( poActionData.m_Position );
368 ctx.Write( poActionData.m_Orientation );
371 override bool ReadFromContext(
ParamsReadContext ctx, out ActionReciveData action_recive_data )
373 if(!action_recive_data)
377 super.ReadFromContext(ctx, action_recive_data );
380 vector entity_position =
"0 0 0";
381 vector entity_orientation =
"0 0 0";
382 if (!ctx.Read(entity_position))
384 if (!ctx.Read(entity_orientation))
387 action_data_po.m_Position = entity_position;
388 action_data_po.m_Orientation = entity_orientation;
393 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
395 super.HandleReciveData(action_recive_data, action_data);
400 action_data_po.m_Position = recive_data_po.m_Position;
401 action_data_po.m_Orientation = recive_data_po.m_Orientation;
404 void MoveEntityToFinalPosition( ActionData action_data,
vector position,
vector orientation )
406 if ( action_data.m_MainItem.IsBasebuildingKit() )
return;
408 EntityAI entity_for_placing = action_data.m_MainItem;
409 vector rotation_matrix[3];
414 Math3D.YawPitchRollMatrix( orientation, rotation_matrix );
415 Math3D.MatrixToQuat( rotation_matrix, direction );
417 if ( entity_for_placing.GetInventory().GetCurrentInventoryLocation( source ) )
419 destination.SetGroundEx( entity_for_placing, position, direction );
421 if (
GetGame().IsMultiplayer() )
423 action_data.m_Player.ServerTakeToDst(source, destination);
428 MoveEntityToFinalPositionSinglePlayer(action_data, source, destination);
435 action_data.m_Player.GetInventory().TakeToDst(
InventoryMode.LOCAL, source, destination);
438 void SetupAnimation(
ItemBase item )
442 if ( item.IsHeavyBehaviour() )
446 else if ( item.IsOneHandedBehaviour() )
450 else if ( item.IsTwoHandedBehaviour() )
456 Print(
"Error: check " + item +
" behaviour");
461 if ( item.IsHeavyBehaviour() )
465 else if ( item.IsOneHandedBehaviour() )
469 else if ( item.IsTwoHandedBehaviour() )
475 Print(
"Error: check " + item +
" behaviour");