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

◆ ActionConditionContinue()

override bool BuildShelterFromShelterSiteLambda::ActionConditionContinue ( ActionData action_data)
protected

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

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