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

◆ ReadFromContext()

override bool BuildShelterFromShelterSiteLambda::ReadFromContext ( ParamsReadContext ctx,
out ActionReciveData action_recive_data )
protected

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

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