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

◆ CreateConditionComponents()

override void BuildShelterFromShelterSiteLambda::CreateConditionComponents ( )
protected

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

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