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

◆ HasProgress()

override bool BuildShelterFromShelterSiteLambda::HasProgress ( )
protected

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

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