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

◆ DestroyActionLoopSound()

void BuildShelterFromShelterSiteLambda::DestroyActionLoopSound ( )
protected

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

632 : driven by ActionBuildPart")]
633class ActionBuildShelter: ActionContinuousBase
634{
635 string m_SoundsetBuildStart;
636 string m_SoundsetBuildLoop;
637 string m_SoundsetBuildFinish;
638 ref protected EffectSound m_BuildLoopSound;
639
640 void ActionBuildShelter()
641 {
642 m_CallbackClass = ActionBuildPartCB;
643 m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DEPLOY_2HD;
644 m_FullBody = true;
645 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
646 m_Text = "#build_shelter_leather";
647 }
648
649 void ~ActionBuildShelter()
650 {
651 DestroyActionLoopSound();
652 }
653
654 override void CreateConditionComponents()
655 {
656 m_ConditionItem = new CCINone;
657 m_ConditionTarget = new CCTCursor;
658 }
659
660 override string GetText()
661 {
662 PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
663 if ( player )
664 {
665 ConstructionActionData construction_action_data = player.GetConstructionActionData();
666 ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);
667
668 if ( constrution_part )
669 {
670 string ret = "";
671 switch (constrution_part.GetName())
672 {
673 case "leather":
674 ret = "#build_shelter_leather";
675 break;
676
677 case "fabric":
678 ret = "#build_shelter_fabric";
679 break;
680
681 case "stick":
682 ret = "#build_shelter_stick";
683 break;
684 }
685 }
686 }
687
688 return ret;
689 }
690
691 override void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
692 {
693 ConstructionActionData construction_action_data = player.GetConstructionActionData();
694 ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);
695
696 if ( constrution_part )
697 {
698 switch (constrution_part.GetName())
699 {
700 case "leather":
701 m_Text = "#build_shelter_leather";
702 break;
703
704 case "fabric":
705 m_Text = "#build_shelter_fabric";
706 break;
707
708 case "stick":
709 m_Text = "#build_shelter_stick";
710 break;
711 }
712 }
713 }
714
715 override bool CanBeUsedLeaning()
716 {
717 return false;
718 }
719
720 override typename GetInputType()
721 {
722 return ContinuousInteractActionInput;
723 }
724
725 override bool UseMainItem()
726 {
727 return false;
728 }
729
730 override bool HasProgress()
731 {
732 return true;
733 }
734
735 override bool HasAlternativeInterrupt()
736 {
737 return false;
738 }
739
740 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
741 {
742 //Action not allowed if player has broken legs
743 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
744 return false;
745
746 if (target.GetObject() && !target.GetObject().CanUseConstructionBuild())
747 return false;
748 if ( player.IsPlacingLocal() || player.IsPlacingServer() )
749 return false;
750
751 if ( (!g_Game.IsDedicatedServer()) )
752 {
753 if ( MiscGameplayFunctions.ComplexBuildCollideCheckClient(player, target, item, m_VariantID ) )
754 {
755 return true;
756 }
757 return false;
758 }
759 return true;
760 }
761
762 //setup
763 override bool SetupAction( PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL )
764 {
765 if ( super.SetupAction( player, target, item, action_data, extra_data ) )
766 {
767 if ( !g_Game.IsDedicatedServer() )
768 {
769 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
770 BuildPartActionData.Cast(action_data).m_PartType = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID).GetPartName();
771 }
772 return true;
773 }
774
775 return false;
776 }
777
778 override ActionData CreateActionData()
779 {
780 BuildPartActionData action_data = new BuildPartActionData;
781 return action_data;
782 }
783
784 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
785 {
786 super.WriteToContext(ctx, action_data);
787
788 ctx.Write(BuildPartActionData.Cast(action_data).m_PartType);
789 }
790
791 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
792 {
793 action_recive_data = new BuildPartActionReciveData;
794 super.ReadFromContext(ctx, action_recive_data);
795
796 string part_type;
797 if ( ctx.Read(part_type) )
798 {
799 BuildPartActionReciveData.Cast( action_recive_data ).m_PartType = part_type;
800 return true;
801 }
802 else
803 {
804 return false;
805 }
806 }
807
808 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
809 {
810 super.HandleReciveData(action_recive_data, action_data);
811
812 BuildPartActionData.Cast(action_data).m_PartType = BuildPartActionReciveData.Cast( action_recive_data ).m_PartType;
813 }
814
815 override bool ActionConditionContinue( ActionData action_data )
816 {
817 BaseBuildingBase base_building = BaseBuildingBase.Cast( action_data.m_Target.GetObject() );
818 Construction construction = base_building.GetConstruction();
819 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
820 CollisionCheckData check_data = new CollisionCheckData;
821
822 check_data.m_PartName = part_name;
823 check_data.m_AdditionalExcludes.Insert(action_data.m_Player);
824
825 return !construction.IsCollidingEx( check_data ) && construction.CanBuildPart( part_name, action_data.m_MainItem, false );
826 }
827
828 override void OnStart( ActionData action_data )
829 {
830 super.OnStart(action_data);
831 action_data.m_Player.TryHideItemInHands(true);
832 }
833
834 override void OnStartClient( ActionData action_data )
835 {
836 super.OnStartClient(action_data);
837
838 DetermineConstructionSounds(action_data);
839 PlayActionStartSound(action_data);
840 }
841
842 override void OnStartAnimationLoopClient( ActionData action_data )
843 {
844 super.OnStartAnimationLoopClient(action_data);
845
846 PlayActionLoopSound(action_data);
847 }
848
849 override void OnEnd( ActionData action_data )
850 {
851 super.OnEnd(action_data);
852 action_data.m_Player.TryHideItemInHands(false);
853 }
854
855 override void OnEndClient( ActionData action_data )
856 {
857 super.OnEndClient(action_data);
858
859 StopActionLoopSound();
860 //DestroyActionLoopSound();
861 }
862
863 override void OnFinishProgressServer( ActionData action_data )
864 {
865 BaseBuildingBase base_building = BaseBuildingBase.Cast( action_data.m_Target.GetObject() );
866 Construction construction = base_building.GetConstruction();
867
868 string part_name = BuildPartActionData.Cast(action_data).m_PartType;
869
870 //build
871 construction.BuildPartServerEx( action_data.m_Player, part_name, AT_BUILD_PART );
872 }
873
874 override void OnFinishProgressClient( ActionData action_data )
875 {
876 super.OnFinishProgressClient(action_data);
877
878 PlayActionFinishSound(action_data);
879 }
880
881 void DetermineConstructionSounds( ActionData action_data )
882 {
883 ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
884 ConstructionPart constrution_part = construction_action_data.GetBuildPartNoToolAtIndex(m_VariantID);
885 if (constrution_part)
886 {
887 switch (constrution_part.GetName())
888 {
889 case "leather":
890 m_SoundsetBuildStart = "Shelter_Leather_Build_Start_SoundSet";
891 m_SoundsetBuildLoop = "Shelter_Leather_Build_Loop_SoundSet";
892 m_SoundsetBuildFinish = "Shelter_Leather_Build_Finish_SoundSet";
893 break;
894
895 case "fabric":
896 m_SoundsetBuildStart = "Shelter_Fabric_Build_Start_SoundSet";
897 m_SoundsetBuildLoop = "Shelter_Fabric_Build_Loop_SoundSet";
898 m_SoundsetBuildFinish = "Shelter_Fabric_Build_Finish_SoundSet";
899 break;
900
901 case "stick":
902 m_SoundsetBuildStart = "Shelter_Wooden_Stick_Build_Start_SoundSet";
903 m_SoundsetBuildLoop = "Shelter_Wooden_Stick_Build_Loop_SoundSet";
904 m_SoundsetBuildFinish = "Shelter_Wooden_Stick_Build_Finish_SoundSet";
905 break;
906
907 default:
908 m_SoundsetBuildStart = "";
909 m_SoundsetBuildLoop = "";
910 m_SoundsetBuildFinish = "";
911 break;
912 }
913 }
914 }
915
916 void PlayActionStartSound( ActionData action_data )
917 {
918 EffectSound sound = SEffectManager.PlaySound(m_SoundsetBuildStart, action_data.m_Target.GetObject().GetPosition());
919 sound.SetAutodestroy( true );
920 }
921
922 void PlayActionLoopSound( ActionData action_data )
923 {
924 if ( !m_BuildLoopSound || !m_BuildLoopSound.IsSoundPlaying() )
925 {
926 m_BuildLoopSound = SEffectManager.PlaySound( m_SoundsetBuildLoop, action_data.m_Target.GetObject().GetPosition(), 0, 0, true );
927 }
928 }
929
930 void StopActionLoopSound()
931 {
932 if (m_BuildLoopSound)
933 {
934 m_BuildLoopSound.SetSoundFadeOut(0.5);
935 m_BuildLoopSound.SoundStop();
936 }
937 }
938
939 void DestroyActionLoopSound()
940 {
941 SEffectManager.DestroyEffect( m_BuildLoopSound );
942 }
943
944 void PlayActionFinishSound( ActionData action_data )
945 {
946 EffectSound sound = SEffectManager.PlaySound(m_SoundsetBuildFinish, action_data.m_Target.GetObject().GetPosition());
947 sound.SetAutodestroy( true );
948 }
949
950 override string GetSoundCategory(ActionData action_data)
951 {
952 return "Base_building";
953 }
954}
955
956class BuildShelterFromShelterSiteLambda : ReplaceItemWithNewLambdaBase
957{
958 void BuildShelterFromShelterSiteLambda(EntityAI old_item, string new_item_type, PlayerBase player)
959 {
960 m_OldItem = old_item;
961 m_NewItemType = new_item_type;
962 }
963
964 override void CopyOldPropertiesToNew(notnull EntityAI old_item, EntityAI new_item)
965 {
966 super.CopyOldPropertiesToNew(old_item, new_item);
967
968 MiscGameplayFunctions.TransferItemProperties(old_item, new_item);
969 }
970}