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

◆ OnFinishProgressClient()

override void BuildShelterFromShelterSiteLambda::OnFinishProgressClient ( ActionData action_data)
protected

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

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