Dayz 1.25
Dayz Code Explorer by KGB
Загрузка...
Поиск...
Не найдено
Файл ActionBuildPart.c

См. исходные тексты.

Структуры данных

class  BuildPartActionReciveData
 
class  ActionBuildPartCB
 
class  ActionBuildPart
 

Функции

ActionBuildPart ActionContinuousBase GetInputType ()
 
void ActionBuildPart ()
 
override void CreateConditionComponents ()
 
override void OnActionInfoUpdate (PlayerBase player, ActionTarget target, ItemBase item)
 
override bool CanBeUsedLeaning ()
 
override bool ActionCondition (PlayerBase player, ActionTarget target, ItemBase item)
 
override bool ActionConditionContinue (ActionData action_data)
 
override void OnFinishProgressServer (ActionData action_data)
 
override string GetSoundCategory (ActionData action_data)
 
override ActionData CreateActionData ()
 
override bool SetupAction (PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
 
void SetBuildingAnimation (ItemBase item)
 
override void WriteToContext (ParamsWriteContext ctx, ActionData action_data)
 
override bool ReadFromContext (ParamsReadContext ctx, out ActionReciveData action_recive_data)
 
override void HandleReciveData (ActionReciveData action_recive_data, ActionData action_data)
 
override string GetAdminLogMessage (ActionData action_data)
 
override bool UseMainItem ()
 
override bool HasProgress ()
 
override bool HasAlternativeInterrupt ()
 

Переменные

BuildPartActionReciveData m_PartType
 

Функции

◆ ActionBuildPart()

void ActionBuildPart ( )
223 {
225 }
226
227 override bool UseMainItem()
228 {
229 return false;
230 }
231
232 override bool HasProgress()
override bool HasProgress()
Definition ActionBuildPart.c:232
override bool UseMainItem()
Definition ActionBuildPart.c:227
Definition ActionInput.c:522

◆ ActionCondition()

override bool ActionCondition ( PlayerBase player,
ActionTarget target,
ItemBase item )
256 : ActionReciveData
257{
258 string m_PartType;
259}
260
262{
263 string m_PartType;
264};
265
267{
268 override void CreateActionComponent()
269 {
272 }
273
275 {
277 }
278};
279
281{
282 void ActionBuildPart()
283 {
285 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
286 m_FullBody = true;
287 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
288
290 m_Text = "#build";
291 }
292
293 override void CreateConditionComponents()
294 {
297 }
298
299 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
300 {
301 ConstructionActionData construction_action_data = player.GetConstructionActionData();
303
305 {
306 m_Text = "#build " + constrution_part.GetName();
307 }
308 }
309
310 override bool CanBeUsedLeaning()
311 {
312 return false;
313 }
314
315 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
316 {
317 if (player.IsPlacingLocal() || player.IsPlacingServer())
318 return false;
319
320 //Action not allowed if player has broken legs
321 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
322 return false;
323
324 //gate..
325 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
326 return false;
327
328 if ((!GetGame().IsDedicatedServer()))
329 {
330 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
331 {
332 return true;
333 }
334 return false;
335 }
336 return true;
337 }
338
340 {
341 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
342 Construction construction = base_building.GetConstruction();
343 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
345
346 check_data.m_PartName = part_name;
347 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
348
349 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
350 if (GetGame().IsServer())
351 {
352 bool collides = construction.IsCollidingEx(check_data);
353
354 return !collides && canBuild;
355 }
356 else
357 {
358 return canBuild;
359 }
360 }
361
363 {
364 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
365 Construction construction = base_building.GetConstruction();
366
367 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
369
370 check_data.m_PartName = part_name;
371 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
372
373 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
374 {
375 //build
376 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
377 //add damage to tool
378 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
379 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
380 }
381 }
382
384 {
385 return "Base_building";
386 }
387
389 {
391 return action_data;
392 }
393
394 //setup
396 {
397 if (super.SetupAction(player, target, item, action_data, extra_data))
398 {
400
401 if (!GetGame().IsDedicatedServer())
402 {
403 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
404 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
405 }
406 return true;
407 }
408
409 return false;
410 }
411
412 protected void SetBuildingAnimation(ItemBase item)
413 {
414 switch (item.Type())
415 {
416 case Pickaxe:
417 case Shovel:
418 case FarmingHoe:
419 case FieldShovel:
420 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
421 break;
422 case Pliers:
423 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
424 break;
425 case SledgeHammer:
426 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
427 break;
428 default:
429 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
430 break;
431 }
432 }
433
435 {
436 super.WriteToContext(ctx, action_data);
437
438 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
439 }
440
441 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
442 {
444 super.ReadFromContext(ctx, action_recive_data);
445
446 string part_type;
447 if (ctx.Read(part_type))
448 {
450 return true;
451 }
452 else
453 {
454 return false;
455 }
456 }
457
458 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
459 {
460 super.HandleReciveData(action_recive_data, action_data);
461
463 }
464
466 {
467 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
468 string partName = BuildPartActionData.Cast(action_data).m_PartType;
469
470 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
471 return message;
472 }
473}
474
476{
477 override typename GetInputType()
478 {
480 }
481
482 override bool UseMainItem()
483 {
484 return false;
485 }
486
487 override bool HasProgress()
488 {
489 return true;
490 }
491
492 override bool HasAlternativeInterrupt()
493 {
494 return false;
495 }
496}
const int AT_BUILD_PART
Definition _constants.c:6
bool m_FullBody
Definition ActionBase.c:52
string m_Text
Definition ActionBase.c:49
int m_VariantID
Definition ActionBase.c:59
GetInputType()
Definition ActionBase.c:203
ref CCIBase m_ConditionItem
Definition ActionBase.c:55
float m_SpecialtyWeight
Definition ActionBase.c:68
ref CCTBase m_ConditionTarget
Definition ActionBase.c:56
bool UseMainItem()
Definition ActionBase.c:357
int m_StanceMask
Definition ActionBase.c:53
bool HasProgress()
For UI: hiding of progress bar.
Definition ActionBase.c:238
BuildPartActionReciveData m_PartType
override bool HasAlternativeInterrupt()
Definition ActionBuildPart.c:237
void CollisionCheckData()
Definition Construction.c:1310
void Construction(BaseBuildingBase parent)
Definition Construction.c:26
eBrokenLegs
Definition EBrokenLegs.c:2
ActionData m_ActionData
Definition AnimatedActionBase.c:3
Definition ActionBuildPart.c:12
float SetCallbackDuration(ItemBase item)
Definition ActionBuildPart.c:19
override void CreateActionComponent()
Definition ActionBuildPart.c:13
Definition ActionBuildPart.c:26
override void OnFinishProgressServer(ActionData action_data)
Definition ActionBuildPart.c:107
override bool CanBeUsedLeaning()
Definition ActionBuildPart.c:55
override bool ActionConditionContinue(ActionData action_data)
Definition ActionBuildPart.c:84
override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
Definition ActionBuildPart.c:44
void SetBuildingAnimation(ItemBase item)
Definition ActionBuildPart.c:157
override string GetAdminLogMessage(ActionData action_data)
Definition ActionBuildPart.c:210
override ActionData CreateActionData()
Definition ActionBuildPart.c:133
override void CreateConditionComponents()
Definition ActionBuildPart.c:38
void ActionBuildPart()
Definition ActionBuildPart.c:27
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Definition ActionBuildPart.c:186
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Definition ActionBuildPart.c:60
override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
Definition ActionBuildPart.c:140
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Definition ActionBuildPart.c:179
override string GetSoundCategory(ActionData action_data)
Definition ActionBuildPart.c:128
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Definition ActionBuildPart.c:203
Definition ActionContinuousBase.c:2
Definition ActionContinuousBase.c:133
Definition ActionBase.c:21
ItemBase m_MainItem
Definition ActionBase.c:28
ref CABase m_ActionComponent
Definition ActionBase.c:30
int m_CommandUID
Definition AnimatedActionBase.c:135
m_CallbackClass
Definition AnimatedActionBase.c:137
Definition Fence.c:2
Definition ActionBuildPart.c:2
string m_PartType
Definition ActionBuildPart.c:3
Definition CAContinuousTime.c:2
Definition CCINonRuined.c:2
Definition CCTNone.c:2
Definition ConstructionActionData.c:2
Definition ConstructionPart.c:2
Definition FarmingHoe.c:2
Definition InventoryItem.c:731
Definition EntityAI.c:95
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Definition param.c:12
Definition PlayerBaseClient.c:2
Serialization general interface. Serializer API works with:
Definition Serializer.c:56
Definition ActionConstants.c:131
const float BUILD
Definition ActionConstants.c:132
Definition ActionConstants.c:119
const float ROUGH_HIGH
Definition ActionConstants.c:122
Definition ActionConstants.c:27
const float BASEBUILDING_CONSTRUCT_MEDIUM
Definition ActionConstants.c:60
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
proto native CGame GetGame()

◆ ActionConditionContinue()

override bool ActionConditionContinue ( ActionData action_data)
280 : ActionReciveData
281{
282 string m_PartType;
283}
284
286{
287 string m_PartType;
288};
289
291{
292 override void CreateActionComponent()
293 {
296 }
297
299 {
301 }
302};
303
305{
306 void ActionBuildPart()
307 {
309 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
310 m_FullBody = true;
311 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
312
314 m_Text = "#build";
315 }
316
317 override void CreateConditionComponents()
318 {
321 }
322
323 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
324 {
325 ConstructionActionData construction_action_data = player.GetConstructionActionData();
327
329 {
330 m_Text = "#build " + constrution_part.GetName();
331 }
332 }
333
334 override bool CanBeUsedLeaning()
335 {
336 return false;
337 }
338
339 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
340 {
341 if (player.IsPlacingLocal() || player.IsPlacingServer())
342 return false;
343
344 //Action not allowed if player has broken legs
345 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
346 return false;
347
348 //gate..
349 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
350 return false;
351
352 if ((!GetGame().IsDedicatedServer()))
353 {
354 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
355 {
356 return true;
357 }
358 return false;
359 }
360 return true;
361 }
362
364 {
365 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
366 Construction construction = base_building.GetConstruction();
367 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
369
370 check_data.m_PartName = part_name;
371 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
372
373 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
374 if (GetGame().IsServer())
375 {
376 bool collides = construction.IsCollidingEx(check_data);
377
378 return !collides && canBuild;
379 }
380 else
381 {
382 return canBuild;
383 }
384 }
385
387 {
388 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
389 Construction construction = base_building.GetConstruction();
390
391 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
393
394 check_data.m_PartName = part_name;
395 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
396
397 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
398 {
399 //build
400 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
401 //add damage to tool
402 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
403 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
404 }
405 }
406
408 {
409 return "Base_building";
410 }
411
413 {
415 return action_data;
416 }
417
418 //setup
420 {
421 if (super.SetupAction(player, target, item, action_data, extra_data))
422 {
424
425 if (!GetGame().IsDedicatedServer())
426 {
427 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
428 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
429 }
430 return true;
431 }
432
433 return false;
434 }
435
436 protected void SetBuildingAnimation(ItemBase item)
437 {
438 switch (item.Type())
439 {
440 case Pickaxe:
441 case Shovel:
442 case FarmingHoe:
443 case FieldShovel:
444 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
445 break;
446 case Pliers:
447 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
448 break;
449 case SledgeHammer:
450 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
451 break;
452 default:
453 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
454 break;
455 }
456 }
457
459 {
460 super.WriteToContext(ctx, action_data);
461
462 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
463 }
464
465 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
466 {
468 super.ReadFromContext(ctx, action_recive_data);
469
470 string part_type;
471 if (ctx.Read(part_type))
472 {
474 return true;
475 }
476 else
477 {
478 return false;
479 }
480 }
481
482 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
483 {
484 super.HandleReciveData(action_recive_data, action_data);
485
487 }
488
490 {
491 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
492 string partName = BuildPartActionData.Cast(action_data).m_PartType;
493
494 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
495 return message;
496 }
497}
498
500{
501 override typename GetInputType()
502 {
504 }
505
506 override bool UseMainItem()
507 {
508 return false;
509 }
510
511 override bool HasProgress()
512 {
513 return true;
514 }
515
516 override bool HasAlternativeInterrupt()
517 {
518 return false;
519 }
520}

◆ CanBeUsedLeaning()

override bool CanBeUsedLeaning ( )
251 : ActionReciveData
252{
253 string m_PartType;
254}
255
257{
258 string m_PartType;
259};
260
262{
263 override void CreateActionComponent()
264 {
267 }
268
270 {
272 }
273};
274
276{
277 void ActionBuildPart()
278 {
280 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
281 m_FullBody = true;
282 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
283
285 m_Text = "#build";
286 }
287
288 override void CreateConditionComponents()
289 {
292 }
293
294 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
295 {
296 ConstructionActionData construction_action_data = player.GetConstructionActionData();
298
300 {
301 m_Text = "#build " + constrution_part.GetName();
302 }
303 }
304
305 override bool CanBeUsedLeaning()
306 {
307 return false;
308 }
309
310 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
311 {
312 if (player.IsPlacingLocal() || player.IsPlacingServer())
313 return false;
314
315 //Action not allowed if player has broken legs
316 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
317 return false;
318
319 //gate..
320 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
321 return false;
322
323 if ((!GetGame().IsDedicatedServer()))
324 {
325 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
326 {
327 return true;
328 }
329 return false;
330 }
331 return true;
332 }
333
335 {
336 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
337 Construction construction = base_building.GetConstruction();
338 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
340
341 check_data.m_PartName = part_name;
342 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
343
344 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
345 if (GetGame().IsServer())
346 {
347 bool collides = construction.IsCollidingEx(check_data);
348
349 return !collides && canBuild;
350 }
351 else
352 {
353 return canBuild;
354 }
355 }
356
358 {
359 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
360 Construction construction = base_building.GetConstruction();
361
362 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
364
365 check_data.m_PartName = part_name;
366 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
367
368 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
369 {
370 //build
371 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
372 //add damage to tool
373 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
374 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
375 }
376 }
377
379 {
380 return "Base_building";
381 }
382
384 {
386 return action_data;
387 }
388
389 //setup
391 {
392 if (super.SetupAction(player, target, item, action_data, extra_data))
393 {
395
396 if (!GetGame().IsDedicatedServer())
397 {
398 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
399 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
400 }
401 return true;
402 }
403
404 return false;
405 }
406
407 protected void SetBuildingAnimation(ItemBase item)
408 {
409 switch (item.Type())
410 {
411 case Pickaxe:
412 case Shovel:
413 case FarmingHoe:
414 case FieldShovel:
415 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
416 break;
417 case Pliers:
418 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
419 break;
420 case SledgeHammer:
421 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
422 break;
423 default:
424 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
425 break;
426 }
427 }
428
430 {
431 super.WriteToContext(ctx, action_data);
432
433 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
434 }
435
436 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
437 {
439 super.ReadFromContext(ctx, action_recive_data);
440
441 string part_type;
442 if (ctx.Read(part_type))
443 {
445 return true;
446 }
447 else
448 {
449 return false;
450 }
451 }
452
453 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
454 {
455 super.HandleReciveData(action_recive_data, action_data);
456
458 }
459
461 {
462 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
463 string partName = BuildPartActionData.Cast(action_data).m_PartType;
464
465 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
466 return message;
467 }
468}
469
471{
472 override typename GetInputType()
473 {
475 }
476
477 override bool UseMainItem()
478 {
479 return false;
480 }
481
482 override bool HasProgress()
483 {
484 return true;
485 }
486
487 override bool HasAlternativeInterrupt()
488 {
489 return false;
490 }
491}

◆ CreateActionData()

override ActionData CreateActionData ( )
329 : ActionReciveData
330{
331 string m_PartType;
332}
333
335{
336 string m_PartType;
337};
338
340{
341 override void CreateActionComponent()
342 {
345 }
346
348 {
350 }
351};
352
354{
355 void ActionBuildPart()
356 {
358 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
359 m_FullBody = true;
360 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
361
363 m_Text = "#build";
364 }
365
366 override void CreateConditionComponents()
367 {
370 }
371
372 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
373 {
374 ConstructionActionData construction_action_data = player.GetConstructionActionData();
376
378 {
379 m_Text = "#build " + constrution_part.GetName();
380 }
381 }
382
383 override bool CanBeUsedLeaning()
384 {
385 return false;
386 }
387
388 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
389 {
390 if (player.IsPlacingLocal() || player.IsPlacingServer())
391 return false;
392
393 //Action not allowed if player has broken legs
394 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
395 return false;
396
397 //gate..
398 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
399 return false;
400
401 if ((!GetGame().IsDedicatedServer()))
402 {
403 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
404 {
405 return true;
406 }
407 return false;
408 }
409 return true;
410 }
411
413 {
414 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
415 Construction construction = base_building.GetConstruction();
416 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
418
419 check_data.m_PartName = part_name;
420 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
421
422 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
423 if (GetGame().IsServer())
424 {
425 bool collides = construction.IsCollidingEx(check_data);
426
427 return !collides && canBuild;
428 }
429 else
430 {
431 return canBuild;
432 }
433 }
434
436 {
437 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
438 Construction construction = base_building.GetConstruction();
439
440 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
442
443 check_data.m_PartName = part_name;
444 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
445
446 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
447 {
448 //build
449 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
450 //add damage to tool
451 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
452 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
453 }
454 }
455
457 {
458 return "Base_building";
459 }
460
462 {
464 return action_data;
465 }
466
467 //setup
469 {
470 if (super.SetupAction(player, target, item, action_data, extra_data))
471 {
473
474 if (!GetGame().IsDedicatedServer())
475 {
476 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
477 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
478 }
479 return true;
480 }
481
482 return false;
483 }
484
485 protected void SetBuildingAnimation(ItemBase item)
486 {
487 switch (item.Type())
488 {
489 case Pickaxe:
490 case Shovel:
491 case FarmingHoe:
492 case FieldShovel:
493 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
494 break;
495 case Pliers:
496 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
497 break;
498 case SledgeHammer:
499 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
500 break;
501 default:
502 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
503 break;
504 }
505 }
506
508 {
509 super.WriteToContext(ctx, action_data);
510
511 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
512 }
513
514 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
515 {
517 super.ReadFromContext(ctx, action_recive_data);
518
519 string part_type;
520 if (ctx.Read(part_type))
521 {
523 return true;
524 }
525 else
526 {
527 return false;
528 }
529 }
530
531 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
532 {
533 super.HandleReciveData(action_recive_data, action_data);
534
536 }
537
539 {
540 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
541 string partName = BuildPartActionData.Cast(action_data).m_PartType;
542
543 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
544 return message;
545 }
546}
547
549{
550 override typename GetInputType()
551 {
553 }
554
555 override bool UseMainItem()
556 {
557 return false;
558 }
559
560 override bool HasProgress()
561 {
562 return true;
563 }
564
565 override bool HasAlternativeInterrupt()
566 {
567 return false;
568 }
569}

◆ CreateConditionComponents()

override void CreateConditionComponents ( )
238 {

◆ GetAdminLogMessage()

override string GetAdminLogMessage ( ActionData action_data)
protected
406 : ActionReciveData
407{
408 string m_PartType;
409}
410
412{
413 string m_PartType;
414};
415
417{
418 override void CreateActionComponent()
419 {
422 }
423
425 {
427 }
428};
429
431{
432 void ActionBuildPart()
433 {
435 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
436 m_FullBody = true;
437 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
438
440 m_Text = "#build";
441 }
442
443 override void CreateConditionComponents()
444 {
447 }
448
449 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
450 {
451 ConstructionActionData construction_action_data = player.GetConstructionActionData();
453
455 {
456 m_Text = "#build " + constrution_part.GetName();
457 }
458 }
459
460 override bool CanBeUsedLeaning()
461 {
462 return false;
463 }
464
465 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
466 {
467 if (player.IsPlacingLocal() || player.IsPlacingServer())
468 return false;
469
470 //Action not allowed if player has broken legs
471 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
472 return false;
473
474 //gate..
475 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
476 return false;
477
478 if ((!GetGame().IsDedicatedServer()))
479 {
480 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
481 {
482 return true;
483 }
484 return false;
485 }
486 return true;
487 }
488
490 {
491 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
492 Construction construction = base_building.GetConstruction();
493 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
495
496 check_data.m_PartName = part_name;
497 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
498
499 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
500 if (GetGame().IsServer())
501 {
502 bool collides = construction.IsCollidingEx(check_data);
503
504 return !collides && canBuild;
505 }
506 else
507 {
508 return canBuild;
509 }
510 }
511
513 {
514 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
515 Construction construction = base_building.GetConstruction();
516
517 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
519
520 check_data.m_PartName = part_name;
521 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
522
523 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
524 {
525 //build
526 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
527 //add damage to tool
528 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
529 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
530 }
531 }
532
534 {
535 return "Base_building";
536 }
537
539 {
541 return action_data;
542 }
543
544 //setup
546 {
547 if (super.SetupAction(player, target, item, action_data, extra_data))
548 {
550
551 if (!GetGame().IsDedicatedServer())
552 {
553 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
554 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
555 }
556 return true;
557 }
558
559 return false;
560 }
561
562 protected void SetBuildingAnimation(ItemBase item)
563 {
564 switch (item.Type())
565 {
566 case Pickaxe:
567 case Shovel:
568 case FarmingHoe:
569 case FieldShovel:
570 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
571 break;
572 case Pliers:
573 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
574 break;
575 case SledgeHammer:
576 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
577 break;
578 default:
579 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
580 break;
581 }
582 }
583
585 {
586 super.WriteToContext(ctx, action_data);
587
588 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
589 }
590
591 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
592 {
594 super.ReadFromContext(ctx, action_recive_data);
595
596 string part_type;
597 if (ctx.Read(part_type))
598 {
600 return true;
601 }
602 else
603 {
604 return false;
605 }
606 }
607
608 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
609 {
610 super.HandleReciveData(action_recive_data, action_data);
611
613 }
614
616 {
617 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
618 string partName = BuildPartActionData.Cast(action_data).m_PartType;
619
620 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
621 return message;
622 }
623}
624
626{
627 override typename GetInputType()
628 {
630 }
631
632 override bool UseMainItem()
633 {
634 return false;
635 }
636
637 override bool HasProgress()
638 {
639 return true;
640 }
641
642 override bool HasAlternativeInterrupt()
643 {
644 return false;
645 }
646}

◆ GetInputType()

223 {
225 }

◆ GetSoundCategory()

override string GetSoundCategory ( ActionData action_data)
324 : ActionReciveData
325{
326 string m_PartType;
327}
328
330{
331 string m_PartType;
332};
333
335{
336 override void CreateActionComponent()
337 {
340 }
341
343 {
345 }
346};
347
349{
350 void ActionBuildPart()
351 {
353 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
354 m_FullBody = true;
355 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
356
358 m_Text = "#build";
359 }
360
361 override void CreateConditionComponents()
362 {
365 }
366
367 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
368 {
369 ConstructionActionData construction_action_data = player.GetConstructionActionData();
371
373 {
374 m_Text = "#build " + constrution_part.GetName();
375 }
376 }
377
378 override bool CanBeUsedLeaning()
379 {
380 return false;
381 }
382
383 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
384 {
385 if (player.IsPlacingLocal() || player.IsPlacingServer())
386 return false;
387
388 //Action not allowed if player has broken legs
389 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
390 return false;
391
392 //gate..
393 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
394 return false;
395
396 if ((!GetGame().IsDedicatedServer()))
397 {
398 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
399 {
400 return true;
401 }
402 return false;
403 }
404 return true;
405 }
406
408 {
409 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
410 Construction construction = base_building.GetConstruction();
411 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
413
414 check_data.m_PartName = part_name;
415 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
416
417 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
418 if (GetGame().IsServer())
419 {
420 bool collides = construction.IsCollidingEx(check_data);
421
422 return !collides && canBuild;
423 }
424 else
425 {
426 return canBuild;
427 }
428 }
429
431 {
432 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
433 Construction construction = base_building.GetConstruction();
434
435 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
437
438 check_data.m_PartName = part_name;
439 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
440
441 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
442 {
443 //build
444 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
445 //add damage to tool
446 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
447 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
448 }
449 }
450
452 {
453 return "Base_building";
454 }
455
457 {
459 return action_data;
460 }
461
462 //setup
464 {
465 if (super.SetupAction(player, target, item, action_data, extra_data))
466 {
468
469 if (!GetGame().IsDedicatedServer())
470 {
471 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
472 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
473 }
474 return true;
475 }
476
477 return false;
478 }
479
480 protected void SetBuildingAnimation(ItemBase item)
481 {
482 switch (item.Type())
483 {
484 case Pickaxe:
485 case Shovel:
486 case FarmingHoe:
487 case FieldShovel:
488 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
489 break;
490 case Pliers:
491 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
492 break;
493 case SledgeHammer:
494 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
495 break;
496 default:
497 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
498 break;
499 }
500 }
501
503 {
504 super.WriteToContext(ctx, action_data);
505
506 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
507 }
508
509 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
510 {
512 super.ReadFromContext(ctx, action_recive_data);
513
514 string part_type;
515 if (ctx.Read(part_type))
516 {
518 return true;
519 }
520 else
521 {
522 return false;
523 }
524 }
525
526 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
527 {
528 super.HandleReciveData(action_recive_data, action_data);
529
531 }
532
534 {
535 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
536 string partName = BuildPartActionData.Cast(action_data).m_PartType;
537
538 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
539 return message;
540 }
541}
542
544{
545 override typename GetInputType()
546 {
548 }
549
550 override bool UseMainItem()
551 {
552 return false;
553 }
554
555 override bool HasProgress()
556 {
557 return true;
558 }
559
560 override bool HasAlternativeInterrupt()
561 {
562 return false;
563 }
564}

◆ HandleReciveData()

override void HandleReciveData ( ActionReciveData action_recive_data,
ActionData action_data )
protected
399 : ActionReciveData
400{
401 string m_PartType;
402}
403
405{
406 string m_PartType;
407};
408
410{
411 override void CreateActionComponent()
412 {
415 }
416
418 {
420 }
421};
422
424{
425 void ActionBuildPart()
426 {
428 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
429 m_FullBody = true;
430 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
431
433 m_Text = "#build";
434 }
435
436 override void CreateConditionComponents()
437 {
440 }
441
442 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
443 {
444 ConstructionActionData construction_action_data = player.GetConstructionActionData();
446
448 {
449 m_Text = "#build " + constrution_part.GetName();
450 }
451 }
452
453 override bool CanBeUsedLeaning()
454 {
455 return false;
456 }
457
458 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
459 {
460 if (player.IsPlacingLocal() || player.IsPlacingServer())
461 return false;
462
463 //Action not allowed if player has broken legs
464 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
465 return false;
466
467 //gate..
468 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
469 return false;
470
471 if ((!GetGame().IsDedicatedServer()))
472 {
473 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
474 {
475 return true;
476 }
477 return false;
478 }
479 return true;
480 }
481
483 {
484 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
485 Construction construction = base_building.GetConstruction();
486 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
488
489 check_data.m_PartName = part_name;
490 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
491
492 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
493 if (GetGame().IsServer())
494 {
495 bool collides = construction.IsCollidingEx(check_data);
496
497 return !collides && canBuild;
498 }
499 else
500 {
501 return canBuild;
502 }
503 }
504
506 {
507 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
508 Construction construction = base_building.GetConstruction();
509
510 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
512
513 check_data.m_PartName = part_name;
514 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
515
516 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
517 {
518 //build
519 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
520 //add damage to tool
521 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
522 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
523 }
524 }
525
527 {
528 return "Base_building";
529 }
530
532 {
534 return action_data;
535 }
536
537 //setup
539 {
540 if (super.SetupAction(player, target, item, action_data, extra_data))
541 {
543
544 if (!GetGame().IsDedicatedServer())
545 {
546 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
547 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
548 }
549 return true;
550 }
551
552 return false;
553 }
554
555 protected void SetBuildingAnimation(ItemBase item)
556 {
557 switch (item.Type())
558 {
559 case Pickaxe:
560 case Shovel:
561 case FarmingHoe:
562 case FieldShovel:
563 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
564 break;
565 case Pliers:
566 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
567 break;
568 case SledgeHammer:
569 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
570 break;
571 default:
572 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
573 break;
574 }
575 }
576
578 {
579 super.WriteToContext(ctx, action_data);
580
581 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
582 }
583
584 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
585 {
587 super.ReadFromContext(ctx, action_recive_data);
588
589 string part_type;
590 if (ctx.Read(part_type))
591 {
593 return true;
594 }
595 else
596 {
597 return false;
598 }
599 }
600
601 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
602 {
603 super.HandleReciveData(action_recive_data, action_data);
604
606 }
607
609 {
610 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
611 string partName = BuildPartActionData.Cast(action_data).m_PartType;
612
613 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
614 return message;
615 }
616}
617
619{
620 override typename GetInputType()
621 {
623 }
624
625 override bool UseMainItem()
626 {
627 return false;
628 }
629
630 override bool HasProgress()
631 {
632 return true;
633 }
634
635 override bool HasAlternativeInterrupt()
636 {
637 return false;
638 }
639}

◆ HasAlternativeInterrupt()

override bool HasAlternativeInterrupt ( )
238 {
239 return false;
240 }

◆ HasProgress()

override bool HasProgress ( )
233 {
234 return true;
235 }

◆ OnActionInfoUpdate()

override void OnActionInfoUpdate ( PlayerBase player,
ActionTarget target,
ItemBase item )

◆ OnFinishProgressServer()

override void OnFinishProgressServer ( ActionData action_data)
303 : ActionReciveData
304{
305 string m_PartType;
306}
307
309{
310 string m_PartType;
311};
312
314{
315 override void CreateActionComponent()
316 {
319 }
320
322 {
324 }
325};
326
328{
329 void ActionBuildPart()
330 {
332 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
333 m_FullBody = true;
334 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
335
337 m_Text = "#build";
338 }
339
340 override void CreateConditionComponents()
341 {
344 }
345
346 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
347 {
348 ConstructionActionData construction_action_data = player.GetConstructionActionData();
350
352 {
353 m_Text = "#build " + constrution_part.GetName();
354 }
355 }
356
357 override bool CanBeUsedLeaning()
358 {
359 return false;
360 }
361
362 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
363 {
364 if (player.IsPlacingLocal() || player.IsPlacingServer())
365 return false;
366
367 //Action not allowed if player has broken legs
368 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
369 return false;
370
371 //gate..
372 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
373 return false;
374
375 if ((!GetGame().IsDedicatedServer()))
376 {
377 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
378 {
379 return true;
380 }
381 return false;
382 }
383 return true;
384 }
385
387 {
388 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
389 Construction construction = base_building.GetConstruction();
390 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
392
393 check_data.m_PartName = part_name;
394 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
395
396 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
397 if (GetGame().IsServer())
398 {
399 bool collides = construction.IsCollidingEx(check_data);
400
401 return !collides && canBuild;
402 }
403 else
404 {
405 return canBuild;
406 }
407 }
408
410 {
411 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
412 Construction construction = base_building.GetConstruction();
413
414 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
416
417 check_data.m_PartName = part_name;
418 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
419
420 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
421 {
422 //build
423 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
424 //add damage to tool
425 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
426 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
427 }
428 }
429
431 {
432 return "Base_building";
433 }
434
436 {
438 return action_data;
439 }
440
441 //setup
443 {
444 if (super.SetupAction(player, target, item, action_data, extra_data))
445 {
447
448 if (!GetGame().IsDedicatedServer())
449 {
450 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
451 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
452 }
453 return true;
454 }
455
456 return false;
457 }
458
459 protected void SetBuildingAnimation(ItemBase item)
460 {
461 switch (item.Type())
462 {
463 case Pickaxe:
464 case Shovel:
465 case FarmingHoe:
466 case FieldShovel:
467 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
468 break;
469 case Pliers:
470 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
471 break;
472 case SledgeHammer:
473 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
474 break;
475 default:
476 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
477 break;
478 }
479 }
480
482 {
483 super.WriteToContext(ctx, action_data);
484
485 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
486 }
487
488 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
489 {
491 super.ReadFromContext(ctx, action_recive_data);
492
493 string part_type;
494 if (ctx.Read(part_type))
495 {
497 return true;
498 }
499 else
500 {
501 return false;
502 }
503 }
504
505 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
506 {
507 super.HandleReciveData(action_recive_data, action_data);
508
510 }
511
513 {
514 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
515 string partName = BuildPartActionData.Cast(action_data).m_PartType;
516
517 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
518 return message;
519 }
520}
521
523{
524 override typename GetInputType()
525 {
527 }
528
529 override bool UseMainItem()
530 {
531 return false;
532 }
533
534 override bool HasProgress()
535 {
536 return true;
537 }
538
539 override bool HasAlternativeInterrupt()
540 {
541 return false;
542 }
543}

◆ ReadFromContext()

override bool ReadFromContext ( ParamsReadContext ctx,
out ActionReciveData action_recive_data )
protected
382 : ActionReciveData
383{
384 string m_PartType;
385}
386
388{
389 string m_PartType;
390};
391
393{
394 override void CreateActionComponent()
395 {
398 }
399
401 {
403 }
404};
405
407{
408 void ActionBuildPart()
409 {
411 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
412 m_FullBody = true;
413 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
414
416 m_Text = "#build";
417 }
418
419 override void CreateConditionComponents()
420 {
423 }
424
425 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
426 {
427 ConstructionActionData construction_action_data = player.GetConstructionActionData();
429
431 {
432 m_Text = "#build " + constrution_part.GetName();
433 }
434 }
435
436 override bool CanBeUsedLeaning()
437 {
438 return false;
439 }
440
441 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
442 {
443 if (player.IsPlacingLocal() || player.IsPlacingServer())
444 return false;
445
446 //Action not allowed if player has broken legs
447 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
448 return false;
449
450 //gate..
451 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
452 return false;
453
454 if ((!GetGame().IsDedicatedServer()))
455 {
456 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
457 {
458 return true;
459 }
460 return false;
461 }
462 return true;
463 }
464
466 {
467 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
468 Construction construction = base_building.GetConstruction();
469 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
471
472 check_data.m_PartName = part_name;
473 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
474
475 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
476 if (GetGame().IsServer())
477 {
478 bool collides = construction.IsCollidingEx(check_data);
479
480 return !collides && canBuild;
481 }
482 else
483 {
484 return canBuild;
485 }
486 }
487
489 {
490 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
491 Construction construction = base_building.GetConstruction();
492
493 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
495
496 check_data.m_PartName = part_name;
497 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
498
499 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
500 {
501 //build
502 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
503 //add damage to tool
504 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
505 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
506 }
507 }
508
510 {
511 return "Base_building";
512 }
513
515 {
517 return action_data;
518 }
519
520 //setup
522 {
523 if (super.SetupAction(player, target, item, action_data, extra_data))
524 {
526
527 if (!GetGame().IsDedicatedServer())
528 {
529 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
530 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
531 }
532 return true;
533 }
534
535 return false;
536 }
537
538 protected void SetBuildingAnimation(ItemBase item)
539 {
540 switch (item.Type())
541 {
542 case Pickaxe:
543 case Shovel:
544 case FarmingHoe:
545 case FieldShovel:
546 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
547 break;
548 case Pliers:
549 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
550 break;
551 case SledgeHammer:
552 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
553 break;
554 default:
555 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
556 break;
557 }
558 }
559
561 {
562 super.WriteToContext(ctx, action_data);
563
564 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
565 }
566
567 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
568 {
570 super.ReadFromContext(ctx, action_recive_data);
571
572 string part_type;
573 if (ctx.Read(part_type))
574 {
576 return true;
577 }
578 else
579 {
580 return false;
581 }
582 }
583
584 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
585 {
586 super.HandleReciveData(action_recive_data, action_data);
587
589 }
590
592 {
593 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
594 string partName = BuildPartActionData.Cast(action_data).m_PartType;
595
596 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
597 return message;
598 }
599}
600
602{
603 override typename GetInputType()
604 {
606 }
607
608 override bool UseMainItem()
609 {
610 return false;
611 }
612
613 override bool HasProgress()
614 {
615 return true;
616 }
617
618 override bool HasAlternativeInterrupt()
619 {
620 return false;
621 }
622}

◆ SetBuildingAnimation()

void SetBuildingAnimation ( ItemBase item)
protected
353 : ActionReciveData
354{
355 string m_PartType;
356}
357
359{
360 string m_PartType;
361};
362
364{
365 override void CreateActionComponent()
366 {
369 }
370
372 {
374 }
375};
376
378{
379 void ActionBuildPart()
380 {
382 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
383 m_FullBody = true;
384 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
385
387 m_Text = "#build";
388 }
389
390 override void CreateConditionComponents()
391 {
394 }
395
396 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
397 {
398 ConstructionActionData construction_action_data = player.GetConstructionActionData();
400
402 {
403 m_Text = "#build " + constrution_part.GetName();
404 }
405 }
406
407 override bool CanBeUsedLeaning()
408 {
409 return false;
410 }
411
412 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
413 {
414 if (player.IsPlacingLocal() || player.IsPlacingServer())
415 return false;
416
417 //Action not allowed if player has broken legs
418 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
419 return false;
420
421 //gate..
422 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
423 return false;
424
425 if ((!GetGame().IsDedicatedServer()))
426 {
427 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
428 {
429 return true;
430 }
431 return false;
432 }
433 return true;
434 }
435
437 {
438 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
439 Construction construction = base_building.GetConstruction();
440 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
442
443 check_data.m_PartName = part_name;
444 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
445
446 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
447 if (GetGame().IsServer())
448 {
449 bool collides = construction.IsCollidingEx(check_data);
450
451 return !collides && canBuild;
452 }
453 else
454 {
455 return canBuild;
456 }
457 }
458
460 {
461 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
462 Construction construction = base_building.GetConstruction();
463
464 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
466
467 check_data.m_PartName = part_name;
468 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
469
470 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
471 {
472 //build
473 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
474 //add damage to tool
475 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
476 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
477 }
478 }
479
481 {
482 return "Base_building";
483 }
484
486 {
488 return action_data;
489 }
490
491 //setup
493 {
494 if (super.SetupAction(player, target, item, action_data, extra_data))
495 {
497
498 if (!GetGame().IsDedicatedServer())
499 {
500 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
501 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
502 }
503 return true;
504 }
505
506 return false;
507 }
508
509 protected void SetBuildingAnimation(ItemBase item)
510 {
511 switch (item.Type())
512 {
513 case Pickaxe:
514 case Shovel:
515 case FarmingHoe:
516 case FieldShovel:
517 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
518 break;
519 case Pliers:
520 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
521 break;
522 case SledgeHammer:
523 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
524 break;
525 default:
526 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
527 break;
528 }
529 }
530
532 {
533 super.WriteToContext(ctx, action_data);
534
535 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
536 }
537
538 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
539 {
541 super.ReadFromContext(ctx, action_recive_data);
542
543 string part_type;
544 if (ctx.Read(part_type))
545 {
547 return true;
548 }
549 else
550 {
551 return false;
552 }
553 }
554
555 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
556 {
557 super.HandleReciveData(action_recive_data, action_data);
558
560 }
561
563 {
564 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
565 string partName = BuildPartActionData.Cast(action_data).m_PartType;
566
567 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
568 return message;
569 }
570}
571
573{
574 override typename GetInputType()
575 {
577 }
578
579 override bool UseMainItem()
580 {
581 return false;
582 }
583
584 override bool HasProgress()
585 {
586 return true;
587 }
588
589 override bool HasAlternativeInterrupt()
590 {
591 return false;
592 }
593}

◆ SetupAction()

override bool SetupAction ( PlayerBase player,
ActionTarget target,
ItemBase item,
out ActionData action_data,
Param extra_data = NULL )
336 : ActionReciveData
337{
338 string m_PartType;
339}
340
342{
343 string m_PartType;
344};
345
347{
348 override void CreateActionComponent()
349 {
352 }
353
355 {
357 }
358};
359
361{
362 void ActionBuildPart()
363 {
365 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
366 m_FullBody = true;
367 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
368
370 m_Text = "#build";
371 }
372
373 override void CreateConditionComponents()
374 {
377 }
378
379 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
380 {
381 ConstructionActionData construction_action_data = player.GetConstructionActionData();
383
385 {
386 m_Text = "#build " + constrution_part.GetName();
387 }
388 }
389
390 override bool CanBeUsedLeaning()
391 {
392 return false;
393 }
394
395 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
396 {
397 if (player.IsPlacingLocal() || player.IsPlacingServer())
398 return false;
399
400 //Action not allowed if player has broken legs
401 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
402 return false;
403
404 //gate..
405 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
406 return false;
407
408 if ((!GetGame().IsDedicatedServer()))
409 {
410 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
411 {
412 return true;
413 }
414 return false;
415 }
416 return true;
417 }
418
420 {
421 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
422 Construction construction = base_building.GetConstruction();
423 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
425
426 check_data.m_PartName = part_name;
427 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
428
429 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
430 if (GetGame().IsServer())
431 {
432 bool collides = construction.IsCollidingEx(check_data);
433
434 return !collides && canBuild;
435 }
436 else
437 {
438 return canBuild;
439 }
440 }
441
443 {
444 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
445 Construction construction = base_building.GetConstruction();
446
447 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
449
450 check_data.m_PartName = part_name;
451 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
452
453 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
454 {
455 //build
456 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
457 //add damage to tool
458 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
459 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
460 }
461 }
462
464 {
465 return "Base_building";
466 }
467
469 {
471 return action_data;
472 }
473
474 //setup
476 {
477 if (super.SetupAction(player, target, item, action_data, extra_data))
478 {
480
481 if (!GetGame().IsDedicatedServer())
482 {
483 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
484 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
485 }
486 return true;
487 }
488
489 return false;
490 }
491
492 protected void SetBuildingAnimation(ItemBase item)
493 {
494 switch (item.Type())
495 {
496 case Pickaxe:
497 case Shovel:
498 case FarmingHoe:
499 case FieldShovel:
500 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
501 break;
502 case Pliers:
503 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
504 break;
505 case SledgeHammer:
506 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
507 break;
508 default:
509 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
510 break;
511 }
512 }
513
515 {
516 super.WriteToContext(ctx, action_data);
517
518 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
519 }
520
521 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
522 {
524 super.ReadFromContext(ctx, action_recive_data);
525
526 string part_type;
527 if (ctx.Read(part_type))
528 {
530 return true;
531 }
532 else
533 {
534 return false;
535 }
536 }
537
538 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
539 {
540 super.HandleReciveData(action_recive_data, action_data);
541
543 }
544
546 {
547 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
548 string partName = BuildPartActionData.Cast(action_data).m_PartType;
549
550 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
551 return message;
552 }
553}
554
556{
557 override typename GetInputType()
558 {
560 }
561
562 override bool UseMainItem()
563 {
564 return false;
565 }
566
567 override bool HasProgress()
568 {
569 return true;
570 }
571
572 override bool HasAlternativeInterrupt()
573 {
574 return false;
575 }
576}

◆ UseMainItem()

override bool UseMainItem ( )
228 {
229 return false;
230 }

◆ WriteToContext()

override void WriteToContext ( ParamsWriteContext ctx,
ActionData action_data )
protected
375 : ActionReciveData
376{
377 string m_PartType;
378}
379
381{
382 string m_PartType;
383};
384
386{
387 override void CreateActionComponent()
388 {
391 }
392
394 {
396 }
397};
398
400{
401 void ActionBuildPart()
402 {
404 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
405 m_FullBody = true;
406 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
407
409 m_Text = "#build";
410 }
411
412 override void CreateConditionComponents()
413 {
416 }
417
418 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
419 {
420 ConstructionActionData construction_action_data = player.GetConstructionActionData();
422
424 {
425 m_Text = "#build " + constrution_part.GetName();
426 }
427 }
428
429 override bool CanBeUsedLeaning()
430 {
431 return false;
432 }
433
434 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
435 {
436 if (player.IsPlacingLocal() || player.IsPlacingServer())
437 return false;
438
439 //Action not allowed if player has broken legs
440 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
441 return false;
442
443 //gate..
444 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
445 return false;
446
447 if ((!GetGame().IsDedicatedServer()))
448 {
449 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
450 {
451 return true;
452 }
453 return false;
454 }
455 return true;
456 }
457
459 {
460 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
461 Construction construction = base_building.GetConstruction();
462 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
464
465 check_data.m_PartName = part_name;
466 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
467
468 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
469 if (GetGame().IsServer())
470 {
471 bool collides = construction.IsCollidingEx(check_data);
472
473 return !collides && canBuild;
474 }
475 else
476 {
477 return canBuild;
478 }
479 }
480
482 {
483 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
484 Construction construction = base_building.GetConstruction();
485
486 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
488
489 check_data.m_PartName = part_name;
490 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
491
492 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
493 {
494 //build
495 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
496 //add damage to tool
497 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
498 action_data.m_Player.GetSoftSkillsManager().AddSpecialty(m_SpecialtyWeight);
499 }
500 }
501
503 {
504 return "Base_building";
505 }
506
508 {
510 return action_data;
511 }
512
513 //setup
515 {
516 if (super.SetupAction(player, target, item, action_data, extra_data))
517 {
519
520 if (!GetGame().IsDedicatedServer())
521 {
522 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
523 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
524 }
525 return true;
526 }
527
528 return false;
529 }
530
531 protected void SetBuildingAnimation(ItemBase item)
532 {
533 switch (item.Type())
534 {
535 case Pickaxe:
536 case Shovel:
537 case FarmingHoe:
538 case FieldShovel:
539 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
540 break;
541 case Pliers:
542 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
543 break;
544 case SledgeHammer:
545 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
546 break;
547 default:
548 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
549 break;
550 }
551 }
552
554 {
555 super.WriteToContext(ctx, action_data);
556
557 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
558 }
559
560 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
561 {
563 super.ReadFromContext(ctx, action_recive_data);
564
565 string part_type;
566 if (ctx.Read(part_type))
567 {
569 return true;
570 }
571 else
572 {
573 return false;
574 }
575 }
576
577 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
578 {
579 super.HandleReciveData(action_recive_data, action_data);
580
582 }
583
585 {
586 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
587 string partName = BuildPartActionData.Cast(action_data).m_PartType;
588
589 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
590 return message;
591 }
592}
593
595{
596 override typename GetInputType()
597 {
599 }
600
601 override bool UseMainItem()
602 {
603 return false;
604 }
605
606 override bool HasProgress()
607 {
608 return true;
609 }
610
611 override bool HasAlternativeInterrupt()
612 {
613 return false;
614 }
615}

Переменные

◆ m_PartType