DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionDismantlePart.c
См. документацию.
2{
3 override void CreateActionComponent()
4 {
5 float time = SetCallbackDuration(m_ActionData.m_MainItem);
6 m_ActionData.m_ActionComponent = new CAContinuousTime(time);
7 }
8
10 {
11 #ifdef DIAG_DEVELOPER
12 if (m_ActionData.m_Player.GetConstructionActionData().GetFastConstructionMode() == EConstructionDebugModes.FAST)
13 return 1;
14 #endif
15
16 if (item) //TODO: configure and evaluate item suitability?
18 else
20 }
21};
22
24{
26 {
28 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DISASSEMBLE;
29 m_FullBody = true;
30 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
31
32 m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_HIGH;
33 m_LockTargetOnUse = false;
34 m_Text = "#dismantle";
35 }
36
42
43 override void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
44 {
45 ConstructionActionData cad = player.GetConstructionActionData();
47 if (part)
48 {
49 string overrideText = part.GetDismantleTextOverride();
50 if (overrideText == string.Empty)
51 m_Text = "#dismantle "+ part.GetName();
52 else
53 m_Text = overrideText;
54
55 #ifdef DIAG_DEVELOPER
56 if (DiagMenu.GetBool(DiagMenuIDs.BASEBUILDING_FULLDEBUG))
57 {
58 m_Text = "dbgDismantle | part classname: " + part.GetPartName();
59 }
60 #endif
61 }
62 }
63
64 override bool CanBeUsedLeaning()
65 {
66 return false;
67 }
68
69 override bool CanBeUsedInFreelook()
70 {
71 return false;
72 }
73
74 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
75 {
76 #ifdef DIAG_DEVELOPER
77 if (player.GetConstructionActionData().GetFastConstructionMode() == EConstructionDebugModes.INSTANT)
78 return false;
79 #endif
80
81 if ( player.IsPlacingLocal() )
82 return false;
83
84 //Action not allowed if player has broken legs
85 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
86 return false;
87
88 return DismantleCondition( player, target, item, true ) && player.m_MovementState.m_iStanceIdx != DayZPlayerConstants.STANCEIDX_PRONE;
89 }
90
91 override bool ActionConditionContinue( ActionData action_data )
92 {
93 return DismantleCondition( action_data.m_Player, action_data.m_Target, action_data.m_MainItem , false ) && action_data.m_Player.m_MovementState.m_iStanceIdx != DayZPlayerConstants.STANCEIDX_PRONE;
94 }
95
96 override void OnFinishProgressServer( ActionData action_data )
97 {
98 EntityAI ent = EntityAI.Cast(action_data.m_Target.GetObject());
99 ConstructionBase construction = ConstructionBase.Cast(ent.GetConstructionBasic());
100
101 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
102 ConstructionPart construction_part = construction_action_data.GetTargetPart();
103
104 if ( construction.CanDismantlePart( construction_part.GetPartName(), action_data.m_MainItem ) )
105 {
106 //build
107 construction.DismantlePartServerEx( action_data.m_Player, construction_part.GetPartName(), AT_DISMANTLE_PART );
108
109 //add damage to tool
110 if (action_data.m_MainItem)
111 action_data.m_MainItem.DecreaseHealth(UADamageApplied.DISMANTLE, false);
112 }
113 }
114
115 //setup
116 override bool SetupAction( PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL )
117 {
118 if ( super.SetupAction( player, target, item, action_data, extra_data ) )
119 {
120 SetBuildingAnimation( item );
121
122 return true;
123 }
124
125 return false;
126 }
127
128 protected void SetBuildingAnimation( ItemBase item )
129 {
130 switch ( item.Type() )
131 {
132 case Pickaxe:
133 case Shovel:
134 case FarmingHoe:
135 case FieldShovel:
136 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
137 break;
138 case Pliers:
139 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
140 break;
141 default:
142 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DISASSEMBLE;
143 break;
144 }
145 }
146
147 protected bool DismantleCondition(PlayerBase player, ActionTarget target, ItemBase item, bool camera_check)
148 {
149 if (player && !player.IsPlacingLocal() && !player.IsPlacingServer())
150 {
151 EntityAI targetEntity;
152 if (Class.CastTo(targetEntity,target.GetObject()) && targetEntity.CanUseConstruction())
153 {
154 if (targetEntity.FindAttachmentBySlotName("Material_FPole_Flag"))
155 return false;
156
157 BaseBuildingBase baseBuilding = BaseBuildingBase.Cast(targetEntity);
158 ConstructionBase construction = ConstructionBase.Cast(targetEntity.GetConstructionBasic());
159 string partName;
160 ConstructionPart constructionPart;
161
162 array<string> compNames = new array<string>();
163 targetEntity.GetActionComponentNameList(target.GetComponentIndex(), compNames);
164 int count = compNames.Count();
165 for (int i = 0; i < count; ++i)
166 {
167 partName = compNames[i];
168 constructionPart = construction.GetConstructionPartToDismantle(partName, item);
169 if (constructionPart)
170 break;
171 }
172
173 if (constructionPart)
174 {
175 //invalid on gate if the gate is opened
176 if (baseBuilding && constructionPart.IsGate() && baseBuilding.IsOpened())
177 return false;
178
179 if (constructionPart.HasEssentialAttachmentSlots())
180 {
181 array<string> slots = constructionPart.GetEssentialAttachmentSlots();
182 foreach(string slotName: slots)
183 {
184 EntityAI attachment = targetEntity.FindAttachmentBySlotName(slotName);
185 if (attachment)
186 {
187 #ifdef DIAG_DEVELOPER
188 if (DiagMenu.GetBool(DiagMenuIDs.BASEBUILDING_FULLDEBUG))
189 {
190 DbgPrintFailure(constructionPart, "essential attachment " + attachment.GetType() + " attached in slot: " + slotName);
191 }
192 #endif
193 return false;
194 }
195 }
196 }
197
198 //camera and position checks
199 bool checked = false;
200
201 if (constructionPart.IsBase())
202 checked = true;
203
204 if (!checked && targetEntity.IsPlayerInsideEx(player, partName))
205 {
206 //Camera check (client-only)
207 if (camera_check)
208 {
209 if (g_Game && (!g_Game.IsDedicatedServer()))
210 {
211 if (targetEntity.IsFacingCamera(partName))
212 {
213 #ifdef DIAG_DEVELOPER
214 if (DiagMenu.GetBool(DiagMenuIDs.BASEBUILDING_FULLDEBUG))
215 {
216 DbgPrintFailure(constructionPart, "!IsFacingCamera");
217 }
218 #endif
219 return false;
220 }
221 }
222 }
223
224 checked = true;
225 }
226
227 //directional checks first
228 if (!construction.ConstructionDirectionCheck(player, constructionPart, EConstructionDirCheckType.INDOORS))
229 {
230 #ifdef DIAG_DEVELOPER
231 if (DiagMenu.GetBool(DiagMenuIDs.BASEBUILDING_FULLDEBUG))
232 {
233 DbgPrintFailure(constructionPart, "ConstructionDirectionCheck failing, type: EConstructionDirCheckType.INDOORS");
234 }
235 #endif
236 return false;
237 }
238
239 //Also checks for the reversible parts
240 if (constructionPart.IsReversible() && (constructionPart.IsReversedLocal() != construction.ConstructionDirectionCheck(player, constructionPart, EConstructionDirCheckType.REFERENCE_DIRECTION)))
241 {
242 #ifdef DIAG_DEVELOPER
243 if (DiagMenu.GetBool(DiagMenuIDs.BASEBUILDING_FULLDEBUG))
244 {
245 DbgPrintFailure(constructionPart, "ConstructionDirectionCheck failing, type: EConstructionDirCheckType.REFERENCE_DIRECTION");
246 }
247 #endif
248 return false;
249 }
250
251 if (!construction.ConstructionInsiderBoxCheck(player, constructionPart))
252 {
253 #ifdef DIAG_DEVELOPER
254 if (DiagMenu.GetBool(DiagMenuIDs.BASEBUILDING_FULLDEBUG))
255 {
256 DbgPrintFailure(constructionPart, "ConstructionInsiderBoxCheck failing");
257 //Debug.Draw
258 }
259 #endif
260 return false;
261 }
262
263 if (checked)
264 {
265 ConstructionActionData constructionActionData = player.GetConstructionActionData();
266 constructionActionData.SetTargetPart(constructionPart);
267
268 return true;
269 }
270 }
271 }
272 }
273
274 return false;
275 }
276
277 override string GetAdminLogMessage(ActionData action_data)
278 {
279 ConstructionActionData cad = action_data.m_Player.GetConstructionActionData();
280 ConstructionPart constructionPart = cad.GetTargetPart();
281
282 string itemName = "hands";
283 if (action_data.m_MainItem)
284 itemName = action_data.m_MainItem.GetDisplayName();
285
286 string message = string.Format("Dismantled %1 from %2 with %3", constructionPart.GetName(), action_data.m_Target.GetObject().GetDisplayName(), itemName);
287 return message;
288 }
289
290 #ifdef DIAG_DEVELOPER
291 protected void DbgPrintFailure(ConstructionPart part, string reason)
292 {
293 ActionDismantleDebugData data = new ActionDismantleDebugData();
294 data.partName = part.GetPartName();
295 data.reason = reason;
296 ConstructionDebug.SetActionDismantleData(data);
297 }
298 #endif
299}
const int AT_DISMANTLE_PART
bool m_FullBody
Определения ActionBase.c:60
string m_Text
Определения ActionBase.c:57
bool m_LockTargetOnUse
Определения ActionBase.c:59
ref CCIBase m_ConditionItem
Определения ActionBase.c:63
float m_SpecialtyWeight
Определения ActionBase.c:77
ref CCTBase m_ConditionTarget
Определения ActionBase.c:64
int m_StanceMask
Определения ActionBase.c:61
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:125
PlayerSpawnPreset slotName
void ConstructionBase(EntityAI parent)
Определения ConstructionBase.c:58
DayZGame g_Game
Определения DayZGame.c:4074
eBrokenLegs
Определения EBrokenLegs.c:2
DiagMenuIDs
Определения EDiagMenuIDs.c:2
Empty
Определения Hand_States.c:14
ActionData m_ActionData
Определения AnimatedActionBase.c:3
void ActionContinuousBase()
Определения ActionContinuousBase.c:124
PlayerBase m_Player
Определения ActionBase.c:40
ref ActionTarget m_Target
Определения ActionBase.c:39
ItemBase m_MainItem
Определения ActionBase.c:35
Определения ActionBase.c:22
override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionDismantlePart.c:43
bool DismantleCondition(PlayerBase player, ActionTarget target, ItemBase item, bool camera_check)
Определения ActionDismantlePart.c:147
override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
Определения ActionDismantlePart.c:116
void SetBuildingAnimation(ItemBase item)
Определения ActionDismantlePart.c:128
override bool CanBeUsedLeaning()
Определения ActionDismantlePart.c:64
override void OnFinishProgressServer(ActionData action_data)
Определения ActionDismantlePart.c:96
override void CreateConditionComponents()
Определения ActionDismantlePart.c:37
override bool CanBeUsedInFreelook()
Определения ActionDismantlePart.c:69
override string GetAdminLogMessage(ActionData action_data)
Определения ActionDismantlePart.c:277
override bool ActionConditionContinue(ActionData action_data)
Определения ActionDismantlePart.c:91
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionDismantlePart.c:74
void ActionDismantlePart()
Определения ActionDismantlePart.c:25
float SetCallbackDuration(ItemBase item)
Определения ActionDismantlePart.c:9
override void CreateActionComponent()
Определения ActionDismantlePart.c:3
int m_CommandUID
Определения AnimatedActionBase.c:147
override bool IsOpened()
Определения Fence.c:122
Определения Fence.c:2
Определения CCINonRuined.c:2
Определения CCTCursor.c:2
Super root of all classes in Enforce script.
Определения EnScript.c:11
ConstructionPart GetTargetPart()
Определения ConstructionActionData.c:126
void SetTargetPart(ConstructionPart target_part)
Определения ConstructionActionData.c:121
bool IsReversible()
Определения ConstructionPart.c:351
bool IsGate()
Определения ConstructionPart.c:278
bool HasEssentialAttachmentSlots()
Определения ConstructionPart.c:263
string GetPartName()
Определения ConstructionPart.c:198
array< string > GetEssentialAttachmentSlots()
Определения ConstructionPart.c:305
bool IsBase()
Определения ConstructionPart.c:273
string GetName()
Определения ConstructionPart.c:193
string GetDismantleTextOverride()
Определения ConstructionPart.c:320
bool IsReversedLocal()
Определения ConstructionPart.c:356
Instanced construction part data classes for dynamic data, statics now stored on EntityType level in ...
Определения ConstructionPart.c:4
Определения EnDebug.c:241
Определения FarmingHoe.c:2
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Определения param.c:12
Определения PlayerBaseClient.c:2
const float DISMANTLE
Определения ActionConstants.c:152
const float BASEBUILDING_CONSTRUCT_SLOW
Определения ActionConstants.c:63
const float BASEBUILDING_CONSTRUCT_MEDIUM
Определения ActionConstants.c:62
Определения ActionConstants.c:28
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
static proto bool GetBool(int id, bool reverse=false)
Get value as bool from the given script id.
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.