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

◆ DetermineConstructionSounds()

void BuildShelterFromShelterSiteLambda::DetermineConstructionSounds ( ActionData action_data)
protected

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

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