123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- class ActionDigGardenPlotCB : ActiondeployObjectCB
- {
- override void CreateActionComponent()
- {
- m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.DIG_GARDEN);
- }
- };
- class ActionDigGardenPlot: ActionDeployObject
- {
- GardenPlot m_GardenPlot;
-
- void ActionDigGardenPlot()
- {
- m_CallbackClass = ActionDigGardenPlotCB;
- m_FullBody = true;
- m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
- m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_LOW;
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIGMANIPULATE;
-
- m_Text = "#make_garden_plot";
- }
-
- override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
- {
- //Client
- if (!GetGame().IsDedicatedServer())
- {
- //Action not allowed if player has broken legs
- if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS || player.GetInColdArea())
- return false;
-
- if (player.IsPlacingLocal())
- {
- Hologram hologram = player.GetHologramLocal();
- GardenPlot item_GP;
- Class.CastTo(item_GP, hologram.GetProjectionEntity());
- CheckSurfaceBelowGardenPlot(player, item_GP, hologram);
-
- if (!hologram.IsColliding())
- {
- return true;
- }
- }
- return false;
- }
- //Server
- return true;
- }
- override void SetupAnimation(ItemBase item)
- {
- if (item)
- {
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
- }
- }
-
- void CheckSurfaceBelowGardenPlot(PlayerBase player, GardenPlot item_GP, Hologram hologram)
- {
- vector min_max[2];
- item_GP.GetCollisionBox(min_max);
- float offset = min_max[1][1] - min_max[0][1];
- //Print(offset);
- vector pos_adjusted = item_GP.GetPosition();
- pos_adjusted[1] = pos_adjusted[1] + offset;
-
- if (item_GP.CanBePlaced(player, /*item_GP.GetPosition()*/pos_adjusted) )
- {
- if (item_GP.CanBePlaced(NULL, item_GP.CoordToParent(hologram.GetLeftCloseProjectionVector())))
- {
- if (item_GP.CanBePlaced(NULL, item_GP.CoordToParent(hologram.GetRightCloseProjectionVector())))
- {
- if (item_GP.CanBePlaced(NULL, item_GP.CoordToParent(hologram.GetLeftFarProjectionVector())))
- {
- if (item_GP.CanBePlaced(NULL, item_GP.CoordToParent(hologram.GetRightFarProjectionVector())))
- {
- hologram.SetIsCollidingGPlot(false);
-
- return;
- }
- }
- }
- }
- }
-
- hologram.SetIsCollidingGPlot(true);
- }
-
- override void DropDuringPlacing(PlayerBase player)
- {
- }
-
- override void OnFinishProgressClient(ActionData action_data)
- {
- PlaceObjectActionData poActionData;
- poActionData = PlaceObjectActionData.Cast(action_data);
- poActionData.m_AlreadyPlaced = true;
- }
-
- override void OnFinishProgressServer(ActionData action_data)
- {
- PlaceObjectActionData poActionData;
- poActionData = PlaceObjectActionData.Cast(action_data);
- EntityAI entity_for_placing = action_data.m_MainItem;
- vector position = action_data.m_Player.GetLocalProjectionPosition();
- vector orientation = action_data.m_Player.GetLocalProjectionOrientation();
-
- if (GetGame().IsMultiplayer())
- {
- m_GardenPlot = GardenPlot.Cast(action_data.m_Player.GetHologramServer().PlaceEntity(entity_for_placing));
- m_GardenPlot.SetOrientation(orientation);
- action_data.m_Player.GetHologramServer().CheckPowerSource();
- action_data.m_Player.PlacingCompleteServer();
-
- m_GardenPlot.OnPlacementComplete(action_data.m_Player);
- }
-
- //local singleplayer
- if (!GetGame().IsMultiplayer())
- {
- m_GardenPlot = GardenPlot.Cast(action_data.m_Player.GetHologramLocal().PlaceEntity(entity_for_placing));
- m_GardenPlot.SetOrientation(orientation);
- action_data.m_Player.PlacingCompleteServer();
- action_data.m_Player.PlacingCompleteLocal();
-
- m_GardenPlot.OnPlacementComplete(action_data.m_Player);
- }
-
- GetGame().ClearJuncture(action_data.m_Player, entity_for_placing);
- action_data.m_MainItem.SetIsBeingPlaced(false);
- poActionData.m_AlreadyPlaced = true;
- action_data.m_MainItem.SoundSynchRemoteReset();
-
- MiscGameplayFunctions.DealEvinronmentAdjustedDmg(action_data.m_MainItem, action_data.m_Player, 10);
-
- }
- };
|