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

◆ ~ActionBuildShelter()

void BuildShelterFromShelterSiteLambda::~ActionBuildShelter ( )
protected

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

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