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

◆ PlayActionFinishSound()

void BuildShelterFromShelterSiteLambda::PlayActionFinishSound ( ActionData action_data)
protected

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

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