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

◆ ActionCondition()

override bool BuildShelterFromShelterSiteLambda::ActionCondition ( PlayerBase player,
ActionTarget target,
ItemBase item )
protected

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

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