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

◆ PlayActionStartSound()

void BuildShelterFromShelterSiteLambda::PlayActionStartSound ( ActionData action_data)
protected

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

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