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

◆ CreateActionData()

override ActionData BuildShelterFromShelterSiteLambda::CreateActionData ( )
protected

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

471 : driven by ActionBuildPart")]
472class ActionBuildShelter: ActionContinuousBase
473{
474 string m_SoundsetBuildStart;
475 string m_SoundsetBuildLoop;
476 string m_SoundsetBuildFinish;
477 ref protected EffectSound m_BuildLoopSound;
478
479 void ActionBuildShelter()
480 {
481 m_CallbackClass = ActionBuildPartCB;
482 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DEPLOY_2HD;
483 m_FullBody = true;
484 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
485 m_Text = "#build_shelter_leather";
486 }
487
488 void ~ActionBuildShelter()
489 {
490 DestroyActionLoopSound();
491 }
492
493 override void CreateConditionComponents()
494 {
495 m_ConditionItem = new CCINone;
496 m_ConditionTarget = new CCTCursor;
497 }
498
499 override string GetText()
500 {
501 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
502 if ( player )
503 {
504 ConstructionActionData construction_action_data = player.GetConstructionActionData();
505 ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);
506
507 if ( constrution_part )
508 {
509 string ret = "";
510 switch (constrution_part.GetName())
511 {
512 case "leather":
513 ret = "#build_shelter_leather";
514 break;
515
516 case "fabric":
517 ret = "#build_shelter_fabric";
518 break;
519
520 case "stick":
521 ret = "#build_shelter_stick";
522 break;
523 }
524 }
525 }
526
527 return ret;
528 }
529
530 override void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
531 {
532 ConstructionActionData construction_action_data = player.GetConstructionActionData();
533 ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);
534
535 if ( constrution_part )
536 {
537 switch (constrution_part.GetName())
538 {
539 case "leather":
540 m_Text = "#build_shelter_leather";
541 break;
542
543 case "fabric":
544 m_Text = "#build_shelter_fabric";
545 break;
546
547 case "stick":
548 m_Text = "#build_shelter_stick";
549 break;
550 }
551 }
552 }
553
554 override bool CanBeUsedLeaning()
555 {
556 return false;
557 }
558
559 override typename GetInputType()
560 {
561 return ContinuousInteractActionInput;
562 }
563
564 override bool UseMainItem()
565 {
566 return false;
567 }
568
569 override bool HasProgress()
570 {
571 return true;
572 }
573
574 override bool HasAlternativeInterrupt()
575 {
576 return false;
577 }
578
579 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
580 {
581 //Action not allowed if player has broken legs
582 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
583 return false;
584
585 if (target.GetObject() && !target.GetObject().CanUseConstructionBuild())
586 return false;
587 if ( player.IsPlacingLocal() || player.IsPlacingServer() )
588 return false;
589
590 if ( (!g_Game.IsDedicatedServer()) )
591 {
592 if ( MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID ) )
593 {
594 return true;
595 }
596 return false;
597 }
598 return true;
599 }
600
601 //setup
602 override bool SetupAction( PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL )
603 {
604 if ( super.SetupAction( player, target, item, action_data, extra_data ) )
605 {
606 if ( !g_Game.IsDedicatedServer() )
607 {
608 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
609 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID).GetPartName();
610 }
611 return true;
612 }
613
614 return false;
615 }
616
617 override ActionData CreateActionData()
618 {
619 BuildPartActionData action_data = new BuildPartActionData;
620 return action_data;
621 }
622
623 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
624 {
625 super.WriteToContext(ctx, action_data);
626
627 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
628 }
629
630 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
631 {
632 action_recive_data = new BuildPartActionReciveData;
633 super.ReadFromContext(ctx, action_recive_data);
634
635 string part_type;
636 if ( ctx.Read(part_type) )
637 {
638 BuildPartActionReciveData.Cast( action_recive_data ).m_PartType = part_type;
639 return true;
640 }
641 else
642 {
643 return false;
644 }
645 }
646
647 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
648 {
649 super.HandleReciveData(action_recive_data, action_data);
650
651 BuildPartActionData.Cast(action_data).m_PartType = BuildPartActionReciveData.Cast( action_recive_data ).m_PartType;
652 }
653
654 override bool ActionConditionContinue( ActionData action_data )
655 {
656 BaseBuildingBase base_building = BaseBuildingBase.Cast( action_data.m_Target.GetObject() );
657 Construction construction = base_building.GetConstruction();
658 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
659 CollisionCheckData check_data = new CollisionCheckData;
660
661 check_data.m_PartName = part_name;
662 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
663
664 return !construction.IsCollidingEx( check_data ) && construction.CanBuildPart( part_name, action_data.m_MainItem, false );
665 }
666
667 override void OnStart( ActionData action_data )
668 {
669 super.OnStart(action_data);
670 action_data.m_Player.TryHideItemInHands(true);
671 }
672
673 override void OnStartClient( ActionData action_data )
674 {
675 super.OnStartClient(action_data);
676
677 DetermineConstructionSounds(action_data);
678 PlayActionStartSound(action_data);
679 }
680
681 override void OnStartAnimationLoopClient( ActionData action_data )
682 {
683 super.OnStartAnimationLoopClient(action_data);
684
685 PlayActionLoopSound(action_data);
686 }
687
688 override void OnEnd( ActionData action_data )
689 {
690 super.OnEnd(action_data);
691 action_data.m_Player.TryHideItemInHands(false);
692 }
693
694 override void OnEndClient( ActionData action_data )
695 {
696 super.OnEndClient(action_data);
697
698 StopActionLoopSound();
699 //DestroyActionLoopSound();
700 }
701
702 override void OnFinishProgressServer( ActionData action_data )
703 {
704 BaseBuildingBase base_building = BaseBuildingBase.Cast( action_data.m_Target.GetObject() );
705 Construction construction = base_building.GetConstruction();
706
707 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
708
709 //build
710 construction.BuildPartServerEx( action_data.m_Player, part_name, AT_BUILD_PART );
711 }
712
713 override void OnFinishProgressClient( ActionData action_data )
714 {
715 super.OnFinishProgressClient(action_data);
716
717 PlayActionFinishSound(action_data);
718 }
719
720 void DetermineConstructionSounds( ActionData action_data )
721 {
722 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
723 ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);
724 if (constrution_part)
725 {
726 switch (constrution_part.GetName())
727 {
728 case "leather":
729 m_SoundsetBuildStart = "Shelter_Leather_Build_Start_SoundSet";
730 m_SoundsetBuildLoop = "Shelter_Leather_Build_Loop_SoundSet";
731 m_SoundsetBuildFinish = "Shelter_Leather_Build_Finish_SoundSet";
732 break;
733
734 case "fabric":
735 m_SoundsetBuildStart = "Shelter_Fabric_Build_Start_SoundSet";
736 m_SoundsetBuildLoop = "Shelter_Fabric_Build_Loop_SoundSet";
737 m_SoundsetBuildFinish = "Shelter_Fabric_Build_Finish_SoundSet";
738 break;
739
740 case "stick":
741 m_SoundsetBuildStart = "Shelter_Wooden_Stick_Build_Start_SoundSet";
742 m_SoundsetBuildLoop = "Shelter_Wooden_Stick_Build_Loop_SoundSet";
743 m_SoundsetBuildFinish = "Shelter_Wooden_Stick_Build_Finish_SoundSet";
744 break;
745
746 default:
747 m_SoundsetBuildStart = "";
748 m_SoundsetBuildLoop = "";
749 m_SoundsetBuildFinish = "";
750 break;
751 }
752 }
753 }
754
755 void PlayActionStartSound( ActionData action_data )
756 {
757 EffectSound sound = SEffectManager.PlaySound(m_SoundsetBuildStart, action_data.m_Target.GetObject().GetPosition());
758 sound.SetAutodestroy( true );
759 }
760
761 void PlayActionLoopSound( ActionData action_data )
762 {
763 if ( !m_BuildLoopSound || !m_BuildLoopSound.IsSoundPlaying() )
764 {
765 m_BuildLoopSound = SEffectManager.PlaySound( m_SoundsetBuildLoop, action_data.m_Target.GetObject().GetPosition(), 0, 0, true );
766 }
767 }
768
769 void StopActionLoopSound()
770 {
771 if (m_BuildLoopSound)
772 {
773 m_BuildLoopSound.SetSoundFadeOut(0.5);
774 m_BuildLoopSound.SoundStop();
775 }
776 }
777
778 void DestroyActionLoopSound()
779 {
780 SEffectManager.DestroyEffect( m_BuildLoopSound );
781 }
782
783 void PlayActionFinishSound( ActionData action_data )
784 {
785 EffectSound sound = SEffectManager.PlaySound(m_SoundsetBuildFinish, action_data.m_Target.GetObject().GetPosition());
786 sound.SetAutodestroy( true );
787 }
788
789 override string GetSoundCategory(ActionData action_data)
790 {
791 return "Base_building";
792 }
793}
794
795class BuildShelterFromShelterSiteLambda : ReplaceItemWithNewLambdaBase
796{
797 void BuildShelterFromShelterSiteLambda(EntityAI old_item, string new_item_type, PlayerBase player)
798 {
799 m_OldItem = old_item;
800 m_NewItemType = new_item_type;
801 }
802
803 override void CopyOldPropertiesToNew(notnull EntityAI old_item, EntityAI new_item)
804 {
805 super.CopyOldPropertiesToNew(old_item, new_item);
806
807 MiscGameplayFunctions.TransferItemProperties(old_item, new_item);
808 }
809}