DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionCreateGreenhouseGardenPlot.c
См. документацию.
8
10{
11 GardenPlot m_GardenPlot;
12 private const float CAMERA_PITCH_THRESHOLD = -30;
13
15 {
17 m_FullBody = true;
18 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIGMANIPULATE;
19 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
20 m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_LOW;
21 m_Text = "#make_garden_plot";
22 }
23
29
30 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
31 {
32 if ( !target )
33 return false;
34
35 if ( player.IsPlacingLocal() )
36 return false;
37
38 if (!CfgGameplayHandler.GetDisableColdAreaPlacementCheck() && player.GetInColdArea())
39 return false;
40
41 Object target_object = target.GetObject();
42
43 Land_Misc_Greenhouse greenHouse = Land_Misc_Greenhouse.Cast( target_object );
44 Land_Misc_Polytunnel polytunnel = Land_Misc_Polytunnel.Cast( target_object) ;
45
46 if ( target_object && ( greenHouse || polytunnel ) )
47 {
48 string action_selection = target_object.GetActionComponentName( target.GetComponentIndex() );
49 //Update selections in model, name the desired part Soil to improve action condition check
50 if ( action_selection != "soil" )
51 return false;
52
53 //check if there is any gardenplot objects in the current building
54 ref array<Object> nearest_objects = new array<Object>;
55 ref array<CargoBase> proxy_cargos = new array<CargoBase>;
56 vector pos = target_object.GetPosition();
57 pos[1] = pos[1] - 1; //Lower by one meter for check if plot already present
58 GetGame().GetObjectsAtPosition3D( pos, 2, nearest_objects, proxy_cargos );
59
60 for ( int i = 0; i < nearest_objects.Count(); ++i )
61 {
62 Object object = nearest_objects.Get( i );
63
64 if ( object.IsInherited( GardenPlot ) )
65 {
66 return false;
67 }
68 }
69
70 return true;
71 }
72
73 return false;
74 }
75
76 override void OnFinishProgressServer( ActionData action_data )
77 {
78 PlaceObjectActionData poActionData;
79 poActionData = PlaceObjectActionData.Cast(action_data);
80 EntityAI entity_for_placing = action_data.m_MainItem;
81 Object targetObject = action_data.m_Target.GetObject();
82
83 vector position = targetObject.GetPosition();
84
85 //Depending on where we dig the required height offset is not the same
86 Land_Misc_Greenhouse greenHouse = Land_Misc_Greenhouse.Cast( targetObject );
87 Land_Misc_Polytunnel polytunnel = Land_Misc_Polytunnel.Cast( targetObject) ;
88
89 if ( polytunnel )
90 position[1] = position[1] - 1.15; //Lower Y position by roughly 1 meter to compensate for spawning location offset
91 else
92 position[1] = position[1] - 1.05;
93
94 vector orientation = targetObject.GetOrientation();
95
97 if (GetGame().IsMultiplayer())
98 {
99 tunnel = Land_Misc_Polytunnel.Cast(action_data.m_Target.GetObject());
100 if (tunnel)
101 {
102 m_GardenPlot = GardenPlot.Cast(GetGame().CreateObjectEx("GardenPlotPolytunnel", position, ECE_KEEPHEIGHT));
103 }
104 else
105 {
106 m_GardenPlot = GardenPlot.Cast(GetGame().CreateObjectEx("GardenPlotGreenhouse", position, ECE_KEEPHEIGHT));
107 }
108
109 m_GardenPlot.SetOrientation(orientation);
110 m_GardenPlot.OnPlacementComplete(action_data.m_Player);
111 }
112
113 //local singleplayer
114 if (!GetGame().IsMultiplayer())
115 {
116 tunnel = Land_Misc_Polytunnel.Cast(action_data.m_Target.GetObject());
117 if (tunnel)
118 {
119 m_GardenPlot = GardenPlot.Cast(GetGame().CreateObjectEx("GardenPlotPolytunnel", position, ECE_KEEPHEIGHT));
120 }
121 else
122 {
123 m_GardenPlot = GardenPlot.Cast(GetGame().CreateObjectEx("GardenPlotGreenhouse", position, ECE_KEEPHEIGHT));
124 }
125
126 m_GardenPlot.SetOrientation(orientation);
127 m_GardenPlot.OnPlacementComplete(action_data.m_Player);
128 }
129 }
130
131 override bool IsLockTargetOnUse()
132 {
133 return false;
134 }
135}
ActionBase ActionData
Определения ActionBase.c:30
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:121
const int ECE_KEEPHEIGHT
Определения CentralEconomy.c:27
class Land_Misc_Greenhouse extends BuildingSuper Land_Misc_Polytunnel()
Определения Land_Misc_Greenhouse.c:11
void Land_Misc_Greenhouse()
Определения Land_Misc_Greenhouse.c:12
float m_SpecialtyWeight
Определения ActionBase.c:77
int m_StanceMask
Определения ActionBase.c:62
string m_Text
Определения ActionBase.c:58
ref CCIBase m_ConditionItem
Определения ActionBase.c:64
bool m_FullBody
Определения ActionBase.c:61
ref CCTBase m_ConditionTarget
Определения ActionBase.c:65
ActionData m_ActionData
Определения AnimatedActionBase.c:3
void ActionContinuousBase()
Определения ActionContinuousBase.c:124
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override void OnFinishProgressServer(ActionData action_data)
override void CreateConditionComponents()
int m_CommandUID
Определения AnimatedActionBase.c:143
Определения CCINonRuined.c:2
Определения CCTCursor.c:2
proto native void GetObjectsAtPosition3D(vector pos, float radius, out array< Object > objects, out array< CargoBase > proxyCargos)
Returns list of all objects in sphere "radius" around position "pos".
static bool GetDisableColdAreaPlacementCheck()
Определения CfgGameplayHandler.c:342
Определения ObjectTyped.c:2
Определения PlayerBaseClient.c:2
const float DIG_GARDEN
Определения ActionConstants.c:77
Определения ActionConstants.c:28
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения EnConvert.c:106
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
proto native CGame GetGame()