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

◆ PlayActionLoopSound()

void BuildShelterFromShelterSiteLambda::PlayActionLoopSound ( ActionData action_data)
protected

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

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