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

◆ OnStartAnimationLoopClient()

override void BuildShelterFromShelterSiteLambda::OnStartAnimationLoopClient ( ActionData action_data)
protected

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

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