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

◆ StopActionLoopSound()

void BuildShelterFromShelterSiteLambda::StopActionLoopSound ( )
protected

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

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