DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionBuildPart.c
Go to the documentation of this file.
1class BuildPartActionReciveData : ActionReciveData
2{
3 string m_PartType;
4}
5
6class BuildPartActionData : ActionData
7{
8 string m_PartType;
9};
10
12{
13 override void CreateActionComponent()
14 {
17 }
18
20 {
22 }
23};
24
26{
28 {
30 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
31 m_FullBody = true;
32 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
33
35 m_Text = "#build";
36 }
37
39 {
42 }
43
44 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
45 {
46 ConstructionActionData construction_action_data = player.GetConstructionActionData();
47 ConstructionPart constrution_part = construction_action_data.GetBuildPartAtIndex(m_VariantID);
48
49 if (constrution_part)
50 {
51 m_Text = "#build " + constrution_part.GetName();
52 }
53 }
54
55 override bool CanBeUsedLeaning()
56 {
57 return false;
58 }
59
60 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
61 {
62 if (player.IsPlacingLocal() || player.IsPlacingServer())
63 return false;
64
65 //Action not allowed if player has broken legs
66 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
67 return false;
68
69 //gate..
70 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
71 return false;
72
73 if ((!GetGame().IsDedicatedServer()))
74 {
75 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
76 {
77 return true;
78 }
79 return false;
80 }
81 return true;
82 }
83
84 override bool ActionConditionContinue(ActionData action_data)
85 {
86 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
87 Construction construction = base_building.GetConstruction();
88 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
90
91 check_data.m_PartName = part_name;
92 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
93
94 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
95 if (GetGame().IsServer())
96 {
97 bool collides = construction.IsCollidingEx(check_data);
98
99 return !collides && canBuild;
100 }
101 else
102 {
103 return canBuild;
104 }
105 }
106
107 override void OnFinishProgressServer(ActionData action_data)
108 {
109 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
110 Construction construction = base_building.GetConstruction();
111
112 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
113 CollisionCheckData check_data = new CollisionCheckData;
114
115 check_data.m_PartName = part_name;
116 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
117
118 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
119 {
120 //build
121 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
122 //add damage to tool
123 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
124 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
125 }
126 }
127
129 {
130 BuildPartActionData action_data = new BuildPartActionData;
131 return action_data;
132 }
133
134 //setup
135 override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
136 {
137 if (super.SetupAction(player, target, item, action_data, extra_data))
138 {
140
141 if (!GetGame().IsDedicatedServer())
142 {
143 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
144 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
145 }
146 return true;
147 }
148
149 return false;
150 }
151
152 protected void SetBuildingAnimation(ItemBase item)
153 {
154 switch (item.Type())
155 {
156 case Pickaxe:
157 case Shovel:
158 case FarmingHoe:
159 case FieldShovel:
160 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
161 break;
162 case Pliers:
163 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
164 break;
165 case SledgeHammer:
166 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
167 break;
168 default:
169 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
170 break;
171 }
172 }
173
174 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
175 {
176 super.WriteToContext(ctx, action_data);
177
178 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
179 }
180
181 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
182 {
183 action_recive_data = new BuildPartActionReciveData;
184 super.ReadFromContext(ctx, action_recive_data);
185
186 string part_type;
187 if (ctx.Read(part_type))
188 {
189 BuildPartActionReciveData.Cast(action_recive_data).m_PartType = part_type;
190 return true;
191 }
192 else
193 {
194 return false;
195 }
196 }
197
198 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
199 {
200 super.HandleReciveData(action_recive_data, action_data);
201
202 BuildPartActionData.Cast(action_data).m_PartType = BuildPartActionReciveData.Cast(action_recive_data).m_PartType;
203 }
204
205 override string GetAdminLogMessage(ActionData action_data)
206 {
207 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
208 string partName = BuildPartActionData.Cast(action_data).m_PartType;
209
210 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
211 return message;
212 }
213}
214
215class ActionActionBuildPartNoTool: ActionBuildPart
216{
217 override typename GetInputType()
220 }
221
222 override bool UseMainItem()
223 {
224 return false;
225 }
226
227 override bool HasProgress()
228 {
229 return true;
230 }
231
233 {
234 return false;
236}
const int AT_BUILD_PART
Definition _constants.c:6
protected float m_SpecialtyWeight
Definition ActionBase.c:68
ref CCIBase m_ConditionItem
Definition ActionBase.c:55
ref CCTBase m_ConditionTarget
Definition ActionBase.c:56
protected int m_VariantID
Definition ActionBase.c:59
protected string m_Text
Definition ActionBase.c:49
protected bool m_FullBody
Definition ActionBase.c:52
protected int m_StanceMask
Definition ActionBase.c:53
BuildPartActionReciveData m_PartType
override bool HasProgress()
override bool UseMainItem()
class ActionTargets ActionTarget
void CollisionCheckData()
void Construction(BaseBuildingBase parent)
eBrokenLegs
Definition EBrokenLegs.c:2
protected ActionData m_ActionData
float SetCallbackDuration(ItemBase item)
override void CreateActionComponent()
override void OnFinishProgressServer(ActionData action_data)
override bool CanBeUsedLeaning()
override bool ActionConditionContinue(ActionData action_data)
override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
protected void SetBuildingAnimation(ItemBase item)
override string GetAdminLogMessage(ActionData action_data)
override ActionData CreateActionData()
override void CreateConditionComponents()
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
ItemBase m_MainItem
Definition ActionBase.c:28
PlayerBase m_Player
Definition ActionBase.c:33
ref CABase m_ActionComponent
Definition ActionBase.c:30
ref ActionTarget m_Target
Definition ActionBase.c:32
ConstructionPart GetBuildPartAtIndex(int idx)
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Definition param.c:12
Serialization general interface. Serializer API works with:
Definition Serializer.c:56
proto bool Write(void value_out)
proto bool Read(void value_in)
const float BASEBUILDING_CONSTRUCT_MEDIUM
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
proto native CGame GetGame()