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

◆ GetSoundCategory()

override string BuildShelterFromShelterSiteLambda::GetSoundCategory ( ActionData action_data)
protected

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

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