DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionBuildShelter.c
Go to the documentation of this file.
2{
7
9 {
11 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DEPLOY_2HD;
12 m_FullBody = true;
13 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
14 m_Text = "#build_shelter_leather";
15 }
16
18 {
20 }
21
23 {
26 }
27
28 override string GetText()
29 {
30 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
31 if ( player )
32 {
33 ConstructionActionData construction_action_data = player.GetConstructionActionData();
34 ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);
35
36 if ( constrution_part )
37 {
38 string ret = "";
39 switch (constrution_part.GetName())
40 {
41 case "leather":
42 ret = "#build_shelter_leather";
43 break;
44
45 case "fabric":
46 ret = "#build_shelter_fabric";
47 break;
48
49 case "stick":
50 ret = "#build_shelter_stick";
51 break;
52 }
53 }
54 }
55
56 return ret;
57 }
58
59 override void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
60 {
61 ConstructionActionData construction_action_data = player.GetConstructionActionData();
62 ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);
63
64 if ( constrution_part )
65 {
66 switch (constrution_part.GetName())
67 {
68 case "leather":
69 m_Text = "#build_shelter_leather";
70 break;
71
72 case "fabric":
73 m_Text = "#build_shelter_fabric";
74 break;
75
76 case "stick":
77 m_Text = "#build_shelter_stick";
78 break;
79 }
80 }
81 }
82
83 override bool CanBeUsedLeaning()
84 {
85 return false;
86 }
87
88 override typename GetInputType()
89 {
91 }
92
93 override bool UseMainItem()
94 {
95 return false;
96 }
97
98 override bool HasProgress()
99 {
100 return true;
101 }
102
104 {
105 return false;
106 }
107
108 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
109 {
110 //Action not allowed if player has broken legs
111 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
112 return false;
113
114 if (target.GetObject() && !target.GetObject().CanUseConstructionBuild())
115 return false;
116 if ( player.IsPlacingLocal() || player.IsPlacingServer() )
117 return false;
118
119 if ( (!GetGame().IsDedicatedServer()) )
120 {
121 if ( MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID ) )
122 {
123 return true;
124 }
125 return false;
126 }
127 return true;
128 }
129
130 //setup
131 override bool SetupAction( PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL )
132 {
133 if ( super.SetupAction( player, target, item, action_data, extra_data ) )
134 {
135 if ( !GetGame().IsDedicatedServer() )
136 {
137 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
138 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID).GetPartName();
139 }
140 return true;
141 }
142
143 return false;
144 }
145
147 {
148 BuildPartActionData action_data = new BuildPartActionData;
149 return action_data;
150 }
151
152 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
153 {
154 super.WriteToContext(ctx, action_data);
155
156 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
157 }
158
159 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
160 {
161 action_recive_data = new BuildPartActionReciveData;
162 super.ReadFromContext(ctx, action_recive_data);
163
164 string part_type;
165 if ( ctx.Read(part_type) )
166 {
167 BuildPartActionReciveData.Cast( action_recive_data ).m_PartType = part_type;
168 return true;
169 }
170 else
171 {
172 return false;
173 }
174 }
175
176 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
177 {
178 super.HandleReciveData(action_recive_data, action_data);
179
180 BuildPartActionData.Cast(action_data).m_PartType = BuildPartActionReciveData.Cast( action_recive_data ).m_PartType;
181 }
182
183 override bool ActionConditionContinue( ActionData action_data )
184 {
185 BaseBuildingBase base_building = BaseBuildingBase.Cast( action_data.m_Target.GetObject() );
186 Construction construction = base_building.GetConstruction();
187 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
188 CollisionCheckData check_data = new CollisionCheckData;
189
190 check_data.m_PartName = part_name;
191 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
192
193 return !construction.IsCollidingEx( check_data ) && construction.CanBuildPart( part_name, action_data.m_MainItem, false );
194 }
195
196 override void OnStart( ActionData action_data )
197 {
198 super.OnStart(action_data);
199 action_data.m_Player.TryHideItemInHands(true);
200 }
201
202 override void OnStartClient( ActionData action_data )
203 {
204 super.OnStartClient(action_data);
205
206 DetermineConstructionSounds(action_data);
207 PlayActionStartSound(action_data);
208 }
209
210 override void OnStartAnimationLoopClient( ActionData action_data )
211 {
212 super.OnStartAnimationLoopClient(action_data);
213
214 PlayActionLoopSound(action_data);
215 }
216
217 override void OnEnd( ActionData action_data )
218 {
219 super.OnEnd(action_data);
220 action_data.m_Player.TryHideItemInHands(false);
221 }
222
223 override void OnEndClient( ActionData action_data )
224 {
225 super.OnEndClient(action_data);
226
228 //DestroyActionLoopSound();
229 }
230
231 override void OnFinishProgressServer( ActionData action_data )
232 {
233 BaseBuildingBase base_building = BaseBuildingBase.Cast( action_data.m_Target.GetObject() );
234 Construction construction = base_building.GetConstruction();
235
236 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
237
238 if ( !construction.IsColliding( part_name ) && construction.CanBuildPart( part_name, action_data.m_MainItem, false ) )
239 {
240 //build
241 construction.BuildPartServer( action_data.m_Player, part_name, AT_BUILD_PART );
242 }
243
244 action_data.m_Player.GetSoftSkillsManager().AddSpecialty( m_SpecialtyWeight );
245 }
246
247 override void OnFinishProgressClient( ActionData action_data )
248 {
249 super.OnFinishProgressClient(action_data);
250
251 PlayActionFinishSound(action_data);
252 }
253
255 {
256 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
257 ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);;
258 if (constrution_part)
259 {
260 switch (constrution_part.GetName())
261 {
262 case "leather":
263 m_SoundsetBuildStart = "Shelter_Leather_Build_Start_SoundSet";
264 m_SoundsetBuildLoop = "Shelter_Leather_Build_Loop_SoundSet";
265 m_SoundsetBuildFinish = "Shelter_Leather_Build_Finish_SoundSet";
266 break;
267
268 case "fabric":
269 m_SoundsetBuildStart = "Shelter_Fabric_Build_Start_SoundSet";
270 m_SoundsetBuildLoop = "Shelter_Fabric_Build_Loop_SoundSet";
271 m_SoundsetBuildFinish = "Shelter_Fabric_Build_Finish_SoundSet";
272 break;
273
274 case "stick":
275 m_SoundsetBuildStart = "Shelter_Wooden_Stick_Build_Start_SoundSet";
276 m_SoundsetBuildLoop = "Shelter_Wooden_Stick_Build_Loop_SoundSet";
277 m_SoundsetBuildFinish = "Shelter_Wooden_Stick_Build_Finish_SoundSet";
278 break;
279
280 default:
284 break;
285 }
286 }
287 }
288
290 {
291 EffectSound sound = SEffectManager.PlaySound(m_SoundsetBuildStart, action_data.m_Target.GetObject().GetPosition());
292 sound.SetAutodestroy( true );
293 }
294
295 void PlayActionLoopSound( ActionData action_data )
296 {
298 {
299 m_BuildLoopSound = SEffectManager.PlaySound( m_SoundsetBuildLoop, action_data.m_Target.GetObject().GetPosition(), 0, 0, true );
300 }
301 }
302
304 {
306 {
309 }
310 }
311
313 {
315 }
316
318 {
319 EffectSound sound = SEffectManager.PlaySound(m_SoundsetBuildFinish, action_data.m_Target.GetObject().GetPosition());
320 sound.SetAutodestroy( true );
321 }
322}
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
class ActionTargets ActionTarget
void CollisionCheckData()
void Construction(BaseBuildingBase parent)
eBrokenLegs
Definition EBrokenLegs.c:2
PlayerBase GetPlayer()
override void OnFinishProgressServer(ActionData action_data)
override bool CanBeUsedLeaning()
override bool ActionConditionContinue(ActionData action_data)
void PlayActionStartSound(ActionData action_data)
override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
override void OnStartClient(ActionData action_data)
override ActionData CreateActionData()
override bool HasProgress()
override void CreateConditionComponents()
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
override bool HasAlternativeInterrupt()
void PlayActionLoopSound(ActionData action_data)
void PlayActionFinishSound(ActionData action_data)
override void OnEnd(ActionData action_data)
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override void OnFinishProgressClient(ActionData action_data)
override bool UseMainItem()
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 OnEndClient(ActionData action_data)
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
void DetermineConstructionSounds(ActionData action_data)
override void OnStartAnimationLoopClient(ActionData action_data)
override void OnStart(ActionData action_data)
override string GetText()
ref protected EffectSound m_BuildLoopSound
ItemBase m_MainItem
Definition ActionBase.c:28
PlayerBase m_Player
Definition ActionBase.c:33
ref ActionTarget m_Target
Definition ActionBase.c:32
ConstructionPart GetBuildPartNoToolAtIndex(int idx)
Wrapper class for managing sound through SEffectManager.
Definition EffectSound.c:5
bool IsSoundPlaying()
Get whether EffectSound is currently playing.
void SetSoundFadeOut(float fade_out)
Set the sound fade out duration.
void SoundStop()
Stops sound.
override void SetAutodestroy(bool auto_destroy)
Sets whether Effect automatically cleans up when it stops.
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Definition param.c:12
Manager class for managing Effect (EffectParticle, EffectSound)
static void DestroyEffect(Effect effect)
Unregisters, stops and frees the Effect.
static EffectSound PlaySound(string sound_set, vector position, float play_fade_in=0, float stop_fade_out=0, bool loop=false)
Create and play an EffectSound.
Serialization general interface. Serializer API works with:
Definition Serializer.c:56
proto bool Write(void value_out)
proto bool Read(void value_in)
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
proto native CGame GetGame()