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

◆ OnStart()

override void BuildShelterFromShelterSiteLambda::OnStart ( ActionData action_data)
protected

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

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