DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ SetupAction()

override bool GetInputType::SetupAction ( PlayerBase player,
ActionTarget target,
ItemBase item,
out ActionData action_data,
Param extra_data = NULL )

См. определение в файле ActionBuildPart.c строка 344

344 : ActionReciveData
345{
346 string m_PartType;
347}
348
349class BuildPartActionData : ActionData
350{
351 string m_PartType;
352};
353
355{
356 override void CreateActionComponent()
357 {
358 float time = SetCallbackDuration(m_ActionData.m_MainItem);
359 m_ActionData.m_ActionComponent = new CAContinuousTime(time);
360 }
361
362 float SetCallbackDuration(ItemBase item)
363 {
364 return UATimeSpent.BASEBUILDING_CONSTRUCT_MEDIUM;
365 }
366};
367
369{
370 void ActionBuildPart()
371 {
372 m_CallbackClass = ActionBuildPartCB;
373 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
374 m_FullBody = true;
375 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
376
377 m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_HIGH;
378 m_Text = "#build";
379 }
380
381 override void CreateConditionComponents()
382 {
383 m_ConditionItem = new CCINonRuined;
384 m_ConditionTarget = new CCTNone;
385 }
386
387 override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
388 {
389 ConstructionActionData construction_action_data = player.GetConstructionActionData();
390 ConstructionPart constrution_part = construction_action_data.GetBuildPartAtIndex(m_VariantID);
391
392 if (constrution_part)
393 {
394 m_Text = "#build " + constrution_part.GetName();
395 }
396 }
397
398 override bool CanBeUsedLeaning()
399 {
400 return false;
401 }
402
403 override bool CanBeUsedInFreelook()
404 {
405 return false;
406 }
407
408 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
409 {
410 if (player.IsPlacingLocal() || player.IsPlacingServer())
411 return false;
412
413 //Action not allowed if player has broken legs
414 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
415 return false;
416
417 //gate..
418 if (target.GetObject() && (!target.GetObject().CanUseConstructionBuild() || target.GetObject().CanUseHandConstruction()))
419 return false;
420
421 if ((!GetGame().IsDedicatedServer()))
422 {
423 if (MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID))
424 {
425 return true;
426 }
427 return false;
428 }
429 return true;
430 }
431
432 override bool ActionConditionContinue(ActionData action_data)
433 {
434 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
435 Construction construction = base_building.GetConstruction();
436 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
437 CollisionCheckData check_data = new CollisionCheckData;
438
439 check_data.m_PartName = part_name;
440 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
441
442 bool canBuild = construction.CanBuildPart(part_name, action_data.m_MainItem, true);
443 if (GetGame().IsServer())
444 {
445 bool collides = construction.IsCollidingEx(check_data);
446
447 return !collides && canBuild;
448 }
449 else
450 {
451 return canBuild;
452 }
453 }
454
455 override void OnFinishProgressServer(ActionData action_data)
456 {
457 BaseBuildingBase base_building = BaseBuildingBase.Cast(action_data.m_Target.GetObject());
458 Construction construction = base_building.GetConstruction();
459
460 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
461 CollisionCheckData check_data = new CollisionCheckData;
462
463 check_data.m_PartName = part_name;
464 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
465
466 if (!construction.IsCollidingEx(check_data) && construction.CanBuildPart(part_name, action_data.m_MainItem, true)) //redundant at this point?
467 {
468 //build
469 construction.BuildPartServer(action_data.m_Player, part_name, AT_BUILD_PART);
470 //add damage to tool
471 action_data.m_MainItem.DecreaseHealth(UADamageApplied.BUILD, false);
472 }
473 }
474
475 override string GetSoundCategory(ActionData action_data)
476 {
477 return "Base_building";
478 }
479
481 {
482 BuildPartActionData action_data = new BuildPartActionData;
483 return action_data;
484 }
485
486 //setup
487 override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
488 {
489 if (super.SetupAction(player, target, item, action_data, extra_data))
490 {
492
493 if (!GetGame().IsDedicatedServer())
494 {
495 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
496 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartAtIndex(m_VariantID).GetPartName();
497 }
498 return true;
499 }
500
501 return false;
502 }
503
504 protected void SetBuildingAnimation(ItemBase item)
505 {
506 switch (item.Type())
507 {
508 case Pickaxe:
509 case Shovel:
510 case FarmingHoe:
511 case FieldShovel:
512 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DIG;
513 break;
514 case Pliers:
515 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
516 break;
517 case SledgeHammer:
518 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_MINEROCK;
519 break;
520 default:
521 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_ASSEMBLE;
522 break;
523 }
524 }
525
526 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
527 {
528 super.WriteToContext(ctx, action_data);
529
530 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
531 }
532
533 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
534 {
535 action_recive_data = new BuildPartActionReciveData;
536 super.ReadFromContext(ctx, action_recive_data);
537
538 string part_type;
539 if (ctx.Read(part_type))
540 {
541 BuildPartActionReciveData.Cast(action_recive_data).m_PartType = part_type;
542 return true;
543 }
544 else
545 {
546 return false;
547 }
548 }
549
550 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
551 {
552 super.HandleReciveData(action_recive_data, action_data);
553
554 BuildPartActionData.Cast(action_data).m_PartType = BuildPartActionReciveData.Cast(action_recive_data).m_PartType;
555 }
556
557 override string GetAdminLogMessage(ActionData action_data)
558 {
559 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
560 string partName = BuildPartActionData.Cast(action_data).m_PartType;
561
562 string message = string.Format("Built %1 on %2 with %3", partName, action_data.m_Target.GetObject().GetDisplayName(), action_data.m_MainItem.GetDisplayName());
563 return message;
564 }
565}
566
567class ActionActionBuildPartNoTool: ActionBuildPart
568{
569 override typename GetInputType()
570 {
571 return ContinuousInteractActionInput;
572 }
573
574 override bool UseMainItem()
575 {
576 return false;
577 }
578
579 override bool HasProgress()
580 {
581 return true;
582 }
583
584 override bool HasAlternativeInterrupt()
585 {
586 return false;
587 }
588}
const int AT_BUILD_PART
Определения _constants.c:6
ActionBase ActionData
Определения ActionBase.c:30
BuildPartActionReciveData m_PartType
override bool HasProgress()
Определения ActionBuildPart.c:236
override bool UseMainItem()
Определения ActionBuildPart.c:231
class ActionTargets ActionTarget
void BaseBuildingBase()
Определения BaseBuildingBase.c:1328
void CollisionCheckData()
Определения Construction.c:1329
void Construction(BaseBuildingBase parent)
Определения Construction.c:26
eBrokenLegs
Определения EBrokenLegs.c:2
class GP5GasMask extends MaskBase ItemBase
float m_SpecialtyWeight
Определения ActionBase.c:77
int m_StanceMask
Определения ActionBase.c:62
string m_Text
Определения ActionBase.c:58
int m_VariantID
Определения ActionBase.c:68
ref CCIBase m_ConditionItem
Определения ActionBase.c:64
bool m_FullBody
Определения ActionBase.c:61
ref CCTBase m_ConditionTarget
Определения ActionBase.c:65
ActionData m_ActionData
Определения AnimatedActionBase.c:3
void ActionBuildPart()
Определения ActionBuildPart.c:27
override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
Определения ActionBuildPart.c:144
override bool CanBeUsedInFreelook()
Определения ActionBuildPart.c:60
override bool CanBeUsedLeaning()
Определения ActionBuildPart.c:55
override void CreateConditionComponents()
Определения ActionBuildPart.c:38
override string GetSoundCategory(ActionData action_data)
Определения ActionBuildPart.c:132
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Определения ActionBuildPart.c:190
void SetBuildingAnimation(ItemBase item)
Определения ActionBuildPart.c:161
override bool ActionConditionContinue(ActionData action_data)
Определения ActionBuildPart.c:89
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBuildPart.c:65
override ActionData CreateActionData()
Определения ActionBuildPart.c:137
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Определения ActionBuildPart.c:183
override string GetAdminLogMessage(ActionData action_data)
Определения ActionBuildPart.c:214
override void OnFinishProgressServer(ActionData action_data)
Определения ActionBuildPart.c:112
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения ActionBuildPart.c:207
override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBuildPart.c:44
float SetCallbackDuration(ItemBase item)
Определения ActionBuildPart.c:19
override void CreateActionComponent()
Определения ActionBuildPart.c:13
override GetInputType()
Определения ActionContinuousBase.c:179
bool HasAlternativeInterrupt()
Определения ActionContinuousBase.c:147
int m_CommandUID
Определения AnimatedActionBase.c:143
ConstructionPart GetBuildPartAtIndex(int idx)
Определения ConstructionActionData.c:184
string GetPartName()
Определения ConstructionPart.c:30
string GetName()
Определения ConstructionPart.c:24
proto bool Write(void value_out)
proto bool Read(void value_in)
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16
proto void Insert(int index, string input)
Inserts a string into the n-th index, increasing the string length by the size of the input.