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

◆ OnActionInfoUpdate()

override void BuildShelterFromShelterSiteLambda::OnActionInfoUpdate ( PlayerBase player,
ActionTarget target,
ItemBase item )
protected

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

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