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

◆ CalcDamageAreaRotation()

void bsbDebugPrint::CalcDamageAreaRotation ( float angle_deg,
out vector center,
out vector orientation )
protected

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

2404{
2405 const string ANIMATION_DEPLOYED = "Deployed";
2406
2407 float m_ConstructionKitHealth; //stored health value for used construction kit
2408
2410
2411 bool m_HasBase;
2412 //variables for synchronization of base building parts (2x31 is the current limit)
2413 int m_SyncParts01; //synchronization for already built parts (31 parts)
2414 int m_SyncParts02; //synchronization for already built parts (+31 parts)
2415 int m_SyncParts03; //synchronization for already built parts (+31 parts)
2416 int m_InteractedPartId; //construction part id that an action was performed on
2417 int m_PerformedActionId; //action id that was performed on a construction part
2418
2419 //Sounds
2420 //build
2421 const string SOUND_BUILD_WOOD_LOG = "putDown_WoodLog_SoundSet";
2422 const string SOUND_BUILD_WOOD_PLANK = "putDown_WoodPlank_SoundSet";
2423 const string SOUND_BUILD_WOOD_STAIRS = "putDown_WoodStairs_SoundSet";
2424 const string SOUND_BUILD_METAL = "putDown_MetalPlank_SoundSet";
2425 const string SOUND_BUILD_WIRE = "putDown_BarbedWire_SoundSet";
2426 //dismantle
2427 const string SOUND_DISMANTLE_WOOD_LOG = "Crash_WoodPlank_SoundSet";
2428 const string SOUND_DISMANTLE_WOOD_PLANK = "Crash_WoodPlank_SoundSet";
2429 const string SOUND_DISMANTLE_WOOD_STAIRS = "Crash_WoodPlank_SoundSet";
2430 const string SOUND_DISMANTLE_METAL = "Crash_MetalPlank_SoundSet";
2431 const string SOUND_DISMANTLE_WIRE = "putDown_BarbedWire_SoundSet";
2432
2433 protected EffectSound m_Sound;
2434
2438
2439 // Constructor
2440 void BaseBuildingBase()
2441 {
2443
2444 //synchronized variables
2445 RegisterNetSyncVariableInt( "m_SyncParts01" );
2446 RegisterNetSyncVariableInt( "m_SyncParts02" );
2447 RegisterNetSyncVariableInt( "m_SyncParts03" );
2448 RegisterNetSyncVariableInt( "m_InteractedPartId" );
2449 RegisterNetSyncVariableInt( "m_PerformedActionId" );
2450 RegisterNetSyncVariableBool( "m_HasBase" );
2451
2452 //Construction init
2454
2455 if (ConfigIsExisting("hybridAttachments"))
2456 {
2458 ConfigGetTextArray("hybridAttachments", m_HybridAttachments);
2459 }
2460 if (ConfigIsExisting("mountables"))
2461 {
2463 ConfigGetTextArray("mountables", m_Mountables);
2464 }
2465
2466 ProcessInvulnerabilityCheck(GetInvulnerabilityTypeString());
2467 }
2468
2469 override void EEDelete(EntityAI parent)
2470 {
2471 super.EEDelete(parent);
2472
2473 foreach (AreaDamageManager areaDamage : m_DamageTriggers)
2474 {
2475 areaDamage.Destroy();
2476 }
2477
2478 }
2479
2480 override string GetInvulnerabilityTypeString()
2481 {
2482 return "disableBaseDamage";
2483 }
2484
2485 override bool CanObstruct()
2486 {
2487 return true;
2488 }
2489
2490 override int GetHideIconMask()
2491 {
2492 return EInventoryIconVisibility.HIDE_VICINITY;
2493 }
2494
2495 // --- SYNCHRONIZATION
2497 {
2498 if ( GetGame().IsServer() )
2499 {
2500 SetSynchDirty();
2501 }
2502 }
2503
2504 override void OnVariablesSynchronized()
2505 {
2506 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnVariablesSynchronized");
2507 super.OnVariablesSynchronized();
2508
2510 }
2511
2512 protected void OnSynchronizedClient()
2513 {
2514 //update parts
2516
2517 //update action on part
2519
2520 //update visuals (client)
2521 UpdateVisuals();
2522 }
2523
2524 //parts synchronization
2525 void RegisterPartForSync( int part_id )
2526 {
2527 //part_id must starts from index = 1
2528 int offset;
2529 int mask;
2530
2531 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2532 {
2533 offset = part_id - 1;
2534 mask = 1 << offset;
2535
2536 m_SyncParts01 = m_SyncParts01 | mask;
2537 }
2538 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2539 {
2540 offset = ( part_id % 32 );
2541 mask = 1 << offset;
2542
2543 m_SyncParts02 = m_SyncParts02 | mask;
2544 }
2545 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2546 {
2547 offset = ( part_id % 63 );
2548 mask = 1 << offset;
2549
2550 m_SyncParts03 = m_SyncParts03 | mask;
2551 }
2552 }
2553
2554 void UnregisterPartForSync( int part_id )
2555 {
2556 //part_id must starts from index = 1
2557 int offset;
2558 int mask;
2559
2560 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2561 {
2562 offset = part_id - 1;
2563 mask = 1 << offset;
2564
2565 m_SyncParts01 = m_SyncParts01 & ~mask;
2566 }
2567 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2568 {
2569 offset = ( part_id % 32 );
2570 mask = 1 << offset;
2571
2572 m_SyncParts02 = m_SyncParts02 & ~mask;
2573 }
2574 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2575 {
2576 offset = ( part_id % 63 );
2577 mask = 1 << offset;
2578
2579 m_SyncParts03 = m_SyncParts03 & ~mask;
2580 }
2581 }
2582
2583 bool IsPartBuildInSyncData( int part_id )
2584 {
2585 //part_id must starts from index = 1
2586 int offset;
2587 int mask;
2588
2589 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2590 {
2591 offset = part_id - 1;
2592 mask = 1 << offset;
2593
2594 if ( ( m_SyncParts01 & mask ) > 0 )
2595 {
2596 return true;
2597 }
2598 }
2599 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2600 {
2601 offset = ( part_id % 32 );
2602 mask = 1 << offset;
2603
2604 if ( ( m_SyncParts02 & mask ) > 0 )
2605 {
2606 return true;
2607 }
2608 }
2609 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2610 {
2611 offset = ( part_id % 63 );
2612 mask = 1 << offset;
2613
2614 if ( ( m_SyncParts03 & mask ) > 0 )
2615 {
2616 return true;
2617 }
2618 }
2619
2620 return false;
2621 }
2622
2623 protected void RegisterActionForSync( int part_id, int action_id )
2624 {
2625 m_InteractedPartId = part_id;
2626 m_PerformedActionId = action_id;
2627 }
2628
2629 protected void ResetActionSyncData()
2630 {
2631 //reset data
2632 m_InteractedPartId = -1;
2634 }
2635
2636 protected void SetActionFromSyncData()
2637 {
2638 if ( m_InteractedPartId > -1 && m_PerformedActionId > -1 )
2639 {
2641 int build_action_id = m_PerformedActionId;
2642
2643 switch( build_action_id )
2644 {
2645 case AT_BUILD_PART : OnPartBuiltClient( constrution_part.GetPartName(), build_action_id ); break;
2646 case AT_DISMANTLE_PART : OnPartDismantledClient( constrution_part.GetPartName(), build_action_id ); break;
2647 case AT_DESTROY_PART : OnPartDestroyedClient( constrution_part.GetPartName(), build_action_id ); break;
2648 }
2649 }
2650 }
2651 //------
2652
2654 {
2655 string key = part.m_PartName;
2656 bool is_base = part.IsBase();
2657 bool is_part_built_sync = IsPartBuildInSyncData( part.GetId() );
2658 bsbDebugSpam("[bsb] " + GetDebugName(this) + " SetPartFromSyncData try to sync: built=" + is_part_built_sync + " key=" + key + " part=" + part.GetPartName() + " part_built=" + part.IsBuilt());
2659 if ( is_part_built_sync )
2660 {
2661 if ( !part.IsBuilt() )
2662 {
2663 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData +++ " + key);
2664 GetConstruction().AddToConstructedParts( key );
2665 GetConstruction().ShowConstructionPartPhysics(part.GetPartName());
2666
2667 if (is_base)
2668 {
2670 RemoveProxyPhysics( ANIMATION_DEPLOYED );
2671 }
2672 }
2673 }
2674 else
2675 {
2676 if ( part.IsBuilt() )
2677 {
2678 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData --- " + key);
2679 GetConstruction().RemoveFromConstructedParts( key );
2680 GetConstruction().HideConstructionPartPhysics(part.GetPartName());
2681
2682 if (is_base)
2683 {
2685 AddProxyPhysics( ANIMATION_DEPLOYED );
2686 }
2687 }
2688 }
2689
2690 //check slot lock for material attachments
2691 GetConstruction().SetLockOnAttachedMaterials( part.GetPartName(), part.IsBuilt() ); //failsafe for corrupted sync/storage data
2692 }
2693
2694 //set construction parts based on synchronized data
2696 {
2697 Construction construction = GetConstruction();
2698 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
2699
2700 for ( int i = 0; i < construction_parts.Count(); ++i )
2701 {
2702 string key = construction_parts.GetKey( i );
2703 ConstructionPart value = construction_parts.Get( key );
2704 SetPartFromSyncData(value);
2705 }
2706
2707 //regenerate navmesh
2708 UpdateNavmesh();
2709 }
2710
2711 protected ConstructionPart GetConstructionPartById( int id )
2712 {
2713 Construction construction = GetConstruction();
2714 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
2715
2716 for ( int i = 0; i < construction_parts.Count(); ++i )
2717 {
2718 string key = construction_parts.GetKey( i );
2719 ConstructionPart value = construction_parts.Get( key );
2720
2721 if ( value.GetId() == id )
2722 {
2723 return value;
2724 }
2725 }
2726
2727 return NULL;
2728 }
2729 //
2730
2731 //Base
2732 bool HasBase()
2733 {
2734 return m_HasBase;
2735 }
2736
2737 void SetBaseState( bool has_base )
2738 {
2739 m_HasBase = has_base;
2740 }
2741
2742 override bool IsDeployable()
2743 {
2744 return true;
2745 }
2746
2747 bool IsOpened()
2748 {
2749 return false;
2750 }
2751
2752 //--- CONSTRUCTION KIT
2754 {
2755 ItemBase construction_kit = ItemBase.Cast( GetGame().CreateObjectEx( GetConstructionKitType(), GetKitSpawnPosition(), ECE_PLACE_ON_SURFACE ) );
2756 if ( m_ConstructionKitHealth > 0 )
2757 {
2758 construction_kit.SetHealth( m_ConstructionKitHealth );
2759 }
2760
2761 return construction_kit;
2762 }
2763
2764 void CreateConstructionKitInHands(notnull PlayerBase player)
2765 {
2766 ItemBase construction_kit = ItemBase.Cast(player.GetHumanInventory().CreateInHands(GetConstructionKitType()));
2767 if ( m_ConstructionKitHealth > 0 )
2768 {
2769 construction_kit.SetHealth( m_ConstructionKitHealth );
2770 }
2771 }
2772
2773 protected vector GetKitSpawnPosition()
2774 {
2775 return GetPosition();
2776 }
2777
2778 protected string GetConstructionKitType()
2779 {
2780 return "";
2781 }
2782
2783 void DestroyConstructionKit( ItemBase construction_kit )
2784 {
2785 m_ConstructionKitHealth = construction_kit.GetHealth();
2786 GetGame().ObjectDelete( construction_kit );
2787 }
2788
2789 //--- CONSTRUCTION
2790 void DestroyConstruction()
2791 {
2792 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " DestroyConstruction");
2793 GetGame().ObjectDelete( this );
2794 }
2795
2796 // --- EVENTS
2797 override void OnStoreSave( ParamsWriteContext ctx )
2798 {
2799 super.OnStoreSave( ctx );
2800
2801 //sync parts 01
2802 ctx.Write( m_SyncParts01 );
2803 ctx.Write( m_SyncParts02 );
2804 ctx.Write( m_SyncParts03 );
2805
2806 ctx.Write( m_HasBase );
2807 }
2808
2809 override bool OnStoreLoad( ParamsReadContext ctx, int version )
2810 {
2811 if ( !super.OnStoreLoad( ctx, version ) )
2812 return false;
2813
2814 //--- Base building data ---
2815 //Restore synced parts data
2816 if ( !ctx.Read( m_SyncParts01 ) )
2817 {
2818 m_SyncParts01 = 0; //set default
2819 return false;
2820 }
2821 if ( !ctx.Read( m_SyncParts02 ) )
2822 {
2823 m_SyncParts02 = 0; //set default
2824 return false;
2825 }
2826 if ( !ctx.Read( m_SyncParts03 ) )
2827 {
2828 m_SyncParts03 = 0; //set default
2829 return false;
2830 }
2831
2832 //has base
2833 if ( !ctx.Read( m_HasBase ) )
2834 {
2835 m_HasBase = false;
2836 return false;
2837 }
2838 //---
2839
2840 return true;
2841 }
2842
2843 override void AfterStoreLoad()
2844 {
2845 super.AfterStoreLoad();
2846
2848 {
2850 }
2851 }
2852
2854 {
2855 //update server data
2857
2858 //set base state
2859 ConstructionPart construction_part = GetConstruction().GetBaseConstructionPart();
2860 SetBaseState( construction_part.IsBuilt() ) ;
2861
2862 //synchronize after load
2864 }
2865
2866 override void OnCreatePhysics()
2867 {
2868 super.OnCreatePhysics();
2871 }
2872
2873 override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
2874 {
2876 return;
2877
2878 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
2879
2880 if (GetGame().IsMultiplayer() && !GetGame().IsServer())
2881 return;
2882
2883 Construction construction = GetConstruction();
2884 string part_name = zone;
2885 part_name.ToLower();
2886
2887 if ( newLevel == GameConstants.STATE_RUINED )
2888 {
2889 ConstructionPart construction_part = construction.GetConstructionPart( part_name );
2890
2891 if ( construction_part && construction.IsPartConstructed( part_name ) )
2892 {
2893 construction.DestroyPartServer( null, part_name, AT_DESTROY_PART );
2894 construction.DestroyConnectedParts(part_name);
2895 }
2896
2897 //barbed wire handling (hack-ish)
2898 if ( part_name.Contains("barbed") )
2899 {
2900 BarbedWire barbed_wire = BarbedWire.Cast( FindAttachmentBySlotName( zone ) );
2901 if (barbed_wire)
2902 barbed_wire.SetMountedState( false );
2903 }
2904 }
2905 }
2906
2907 override void EEOnAfterLoad()
2908 {
2910 {
2912 }
2913
2914 super.EEOnAfterLoad();
2915 }
2916
2917 override void EEInit()
2918 {
2919 super.EEInit();
2920
2921 // init visuals and physics
2922 InitBaseState();
2923
2924 //debug
2925 #ifdef DEVELOPER
2927 #endif
2928 }
2929
2930 override void EEItemAttached( EntityAI item, string slot_name )
2931 {
2932 super.EEItemAttached( item, slot_name );
2933
2934 CheckForHybridAttachments( item, slot_name );
2935 UpdateVisuals();
2936 UpdateAttachmentPhysics( slot_name, false );
2937 }
2938
2939 override void EEItemDetached( EntityAI item, string slot_name )
2940 {
2941 super.EEItemDetached( item, slot_name );
2942
2943 UpdateVisuals();
2944 UpdateAttachmentPhysics( slot_name, false );
2945 }
2946
2947 protected void OnSetSlotLock( int slotId, bool locked, bool was_locked )
2948 {
2949 string slot_name = InventorySlots.GetSlotName( slotId );
2950 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint( "inv: OnSetSlotLock " + GetDebugName( this ) + " slot=" + slot_name + " locked=" + locked + " was_locked=" + was_locked );
2951
2952 UpdateAttachmentVisuals( slot_name, locked );
2953 UpdateAttachmentPhysics( slot_name, locked );
2954 }
2955
2956 //ignore out of reach condition
2957 override bool IgnoreOutOfReachCondition()
2958 {
2959 return true;
2960 }
2961
2962 //CONSTRUCTION EVENTS
2963 //Build
2964 void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
2965 {
2966 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
2967
2968 //check base state
2969 if (construtionPart.IsBase())
2970 {
2971 SetBaseState(true);
2972
2973 //spawn kit
2975 }
2976
2977 //register constructed parts for synchronization
2978 RegisterPartForSync(construtionPart.GetId());
2979
2980 //register action that was performed on part
2981 RegisterActionForSync(construtionPart.GetId(), action_id);
2982
2983 //synchronize
2985
2986 SetPartFromSyncData(construtionPart); // server part of sync, client will be synced from SetPartsFromSyncData
2987
2988 UpdateNavmesh();
2989
2990 //update visuals
2991 UpdateVisuals();
2992
2993 //reset action sync data
2995 }
2996
2997 void OnPartBuiltClient(string part_name, int action_id)
2998 {
2999 //play sound
3000 SoundBuildStart( part_name );
3001 }
3002
3003 //Dismantle
3004 void OnPartDismantledServer(notnull Man player, string part_name, int action_id)
3005 {
3006 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDismantledServer " + part_name);
3007 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
3008
3009 //register constructed parts for synchronization
3010 UnregisterPartForSync(construtionPart.GetId());
3011
3012 //register action that was performed on part
3013 RegisterActionForSync(construtionPart.GetId(), action_id);
3014
3015 //synchronize
3017
3018 // server part of sync, client will be synced from SetPartsFromSyncData
3019 SetPartFromSyncData(construtionPart);
3020
3021 UpdateNavmesh();
3022
3023 //update visuals
3024 UpdateVisuals();
3025
3026 //reset action sync data
3028
3029 //check base state
3030 if (construtionPart.IsBase())
3031 {
3032 //Destroy construction
3034 }
3035
3036 if (GetGame().IsServer())
3037 HandleItemFalling(construtionPart);
3038 }
3039
3040 void OnPartDismantledClient( string part_name, int action_id )
3041 {
3042 //play sound
3043 SoundDismantleStart( part_name );
3044 }
3045
3046 //Destroy
3047 void OnPartDestroyedServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part = false)
3048 {
3049 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDestroyedServer " + part_name);
3050 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
3051
3052 //register constructed parts for synchronization
3053 UnregisterPartForSync(construtionPart.GetId());
3054
3055 //register action that was performed on part
3056 RegisterActionForSync(construtionPart.GetId(), action_id);
3057
3058 //synchronize
3060
3061 // server part of sync, client will be synced from SetPartsFromSyncData
3062 SetPartFromSyncData(construtionPart);
3063
3064 UpdateNavmesh();
3065
3066 //update visuals
3067 UpdateVisuals();
3068
3069 //reset action sync data
3071
3072 //check base state
3073 if (construtionPart.IsBase())
3074 {
3075 //Destroy construction
3077 }
3078
3079 if (GetGame().IsServer())
3080 HandleItemFalling(construtionPart);
3081 }
3082
3083 void OnPartDestroyedClient( string part_name, int action_id )
3084 {
3085 //play sound
3086 SoundDestroyStart( part_name );
3087 }
3088
3089 protected void HandleItemFalling(ConstructionPart part)
3090 {
3091 bool process = false;
3092
3093 //TODO: add a parameter to parts' config classes?
3094 process |= part.m_PartName.Contains("_roof");
3095 process |= part.m_PartName.Contains("_platform");
3096 process |= part.m_PartName.Contains("_stair");
3097
3098 if (process)
3099 {
3100 if (!MemoryPointExists(part.m_PartName + "_min") || !MemoryPointExists(part.m_PartName + "_max"))
3101 {
3102 Debug.Log("min/max memory points do not exist for part: " + part.m_PartName);
3103 return;
3104 }
3105
3106 vector mins, maxs;
3107 mins = ModelToWorld(GetMemoryPointPos(part.m_PartName + "_min"));
3108 maxs = ModelToWorld(GetMemoryPointPos(part.m_PartName + "_max"));
3109
3110 //sanitize minmaxs
3111 vector minTmp, maxTmp;
3112 minTmp[0] = Math.Min(mins[0],maxs[0]);
3113 maxTmp[0] = Math.Max(mins[0],maxs[0]);
3114 minTmp[1] = Math.Min(mins[1],maxs[1]);
3115 maxTmp[1] = Math.Max(mins[1],maxs[1]);
3116 minTmp[2] = Math.Min(mins[2],maxs[2]);
3117 maxTmp[2] = Math.Max(mins[2],maxs[2]);
3118 mins = minTmp;
3119 maxs = maxTmp;
3120
3121 maxs[1] = maxs[1] + 0.35; //reach a little above..
3122
3123 ItemFall(mins,maxs);
3124 }
3125 }
3126
3127 protected void ItemFall(vector min, vector max)
3128 {
3129 array<EntityAI> foundEntities = new array<EntityAI>();
3130 DayZPlayerUtils.PhysicsGetEntitiesInBox(min,max,foundEntities);
3131
3132 //filtering
3133 ItemBase item;
3134 foreach (EntityAI entity : foundEntities)
3135 {
3136 if (Class.CastTo(item,entity) && !item.CanUseConstruction()) //BB items?
3137 item.ThrowPhysically(null,vector.Zero);
3138 }
3139 }
3140
3141 // --- UPDATE
3142 void InitBaseState()
3143 {
3144 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::InitBaseState ");
3145
3146 InitVisuals();
3147 UpdateNavmesh(); //regenerate navmesh
3148 GetConstruction().InitBaseState();
3149 }
3150
3151 void InitVisuals()
3152 {
3153 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " InitVisuals");
3154 //check base
3155 if ( !HasBase() )
3156 {
3157 SetAnimationPhase( ANIMATION_DEPLOYED, 0 );
3158 }
3159 else
3160 {
3161 SetAnimationPhase( ANIMATION_DEPLOYED, 1 );
3162 }
3163
3164 GetConstruction().UpdateVisuals();
3165 }
3166
3167 void UpdateVisuals()
3168 {
3169 array<string> attachmentSlots = new array<string>;
3170
3171 GetAttachmentSlots(this, attachmentSlots);
3172 foreach (string slotName : attachmentSlots)
3173 {
3175 }
3176
3177 //check base
3178 if (!HasBase())
3179 SetAnimationPhase(ANIMATION_DEPLOYED, 0);
3180 else
3181 SetAnimationPhase(ANIMATION_DEPLOYED, 1);
3182
3183 GetConstruction().UpdateVisuals();
3184 }
3185
3186 void UpdateAttachmentVisuals(string slot_name, bool is_locked)
3187 {
3188 string slotNameMounted = slot_name + "_Mounted";
3189 EntityAI attachment = FindAttachmentBySlotName(slot_name);
3190
3191 if (attachment)
3192 {
3193 BarbedWire barbedWire = BarbedWire.Cast(attachment);
3194 if (barbedWire && barbedWire.IsMounted())
3195 CreateAreaDamage(slotNameMounted);
3196 else
3197 DestroyAreaDamage(slotNameMounted);
3198
3199 if (is_locked)
3200 {
3201 SetAnimationPhase(slotNameMounted, 0);
3202 SetAnimationPhase(slot_name, 1);
3203 }
3204 else
3205 {
3206 SetAnimationPhase(slotNameMounted, 1);
3207 SetAnimationPhase(slot_name, 0);
3208 }
3209 }
3210 else
3211 {
3212 SetAnimationPhase(slotNameMounted, 1);
3213 SetAnimationPhase(slot_name, 1);
3214
3215 DestroyAreaDamage(slotNameMounted);
3216 }
3217 }
3218
3219 // avoid calling this function on frequent occasions, it's a massive performance hit
3220 void UpdatePhysics()
3221 {
3223 bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::UpdatePhysics");
3224
3225 array<string> attachmentSlots = new array<string>;
3226 GetAttachmentSlots(this, attachmentSlots);
3227
3229 bsbDebugPrint("[bsb] " + GetDebugName(this) + " att_cnt=" + attachmentSlots.Count());
3230
3231 foreach (string slotName : attachmentSlots)
3232 {
3234 }
3235
3236 //check base
3237 if (!HasBase())
3238 {
3240 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " ADD");
3241
3242 AddProxyPhysics(ANIMATION_DEPLOYED);
3243 }
3244 else
3245 {
3247 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " RM");
3248
3249 RemoveProxyPhysics(ANIMATION_DEPLOYED);
3250 }
3251
3252 GetConstruction().UpdatePhysics();
3253 UpdateNavmesh();
3254 }
3255
3256 void UpdateAttachmentPhysics( string slot_name, bool is_locked )
3257 {
3258 //checks for invalid appends; hotfix
3259 if ( !m_Mountables || m_Mountables.Find(slot_name) == -1 )
3260 return;
3261 //----------------------------------
3262 string slot_name_mounted = slot_name + "_Mounted";
3263 EntityAI attachment = FindAttachmentBySlotName( slot_name );
3264
3265 //remove proxy physics
3266 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Removing ATT SLOT=" + slot_name + " RM / RM");
3267 RemoveProxyPhysics( slot_name_mounted );
3268 RemoveProxyPhysics( slot_name );
3269
3270 if ( attachment )
3271 {
3272 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Adding ATT=" + Object.GetDebugName(attachment));
3273 if ( is_locked )
3274 {
3275 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " RM / RM");
3276 AddProxyPhysics( slot_name_mounted );
3277 }
3278 else
3279 {
3280 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " ADD");
3281 AddProxyPhysics( slot_name );
3282 }
3283 }
3284 }
3285
3286 protected void UpdateNavmesh()
3287 {
3288 SetAffectPathgraph( true, false );
3289 GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( GetGame().UpdatePathgraphRegionByObject, 100, false, this );
3290 }
3291
3292 override bool CanUseConstruction()
3293 {
3294 return true;
3295 }
3296
3297 override bool CanUseConstructionBuild()
3298 {
3299 return true;
3300 }
3301
3302 protected bool IsAttachmentSlotLocked( EntityAI attachment )
3303 {
3304 if ( attachment )
3305 {
3306 InventoryLocation inventory_location = new InventoryLocation;
3307 attachment.GetInventory().GetCurrentInventoryLocation( inventory_location );
3308
3309 return GetInventory().GetSlotLock( inventory_location.GetSlot() );
3310 }
3311
3312 return false;
3313 }
3314
3315 protected bool IsAttachmentSlotLocked( string slot_name )
3316 {
3317 return GetInventory().GetSlotLock( InventorySlots.GetSlotIdFromString( slot_name ) );
3318 }
3319
3320 //--- ATTACHMENT SLOTS
3321 void GetAttachmentSlots( EntityAI entity, out array<string> attachment_slots )
3322 {
3323 string config_path = "CfgVehicles" + " " + entity.GetType() + " " + "attachments";
3324 if ( GetGame().ConfigIsExisting( config_path ) )
3325 {
3326 GetGame().ConfigGetTextArray( config_path, attachment_slots );
3327 }
3328 }
3329
3330 bool CheckSlotVerticalDistance( int slot_id, PlayerBase player )
3331 {
3332 return true;
3333 }
3334
3335 protected bool CheckMemoryPointVerticalDistance( float max_dist, string selection, PlayerBase player )
3336 {
3337 return true;
3338 }
3339
3340 protected bool CheckLevelVerticalDistance( float max_dist, string selection, PlayerBase player )
3341 {
3342 return true;
3343 }
3344
3345 // --- INIT
3346 void ConstructionInit()
3347 {
3348 if ( !m_Construction )
3349 {
3350 m_Construction = new Construction( this );
3351 }
3352
3353 GetConstruction().Init();
3354 }
3355
3357 {
3358 return m_Construction;
3359 }
3360
3361 //--- INVENTORY/ATTACHMENTS CONDITIONS
3362 //attachments
3363 override bool CanReceiveAttachment( EntityAI attachment, int slotId )
3364 {
3365 return super.CanReceiveAttachment(attachment, slotId);
3366 }
3367
3369 {
3370 int attachment_count = GetInventory().AttachmentCount();
3371 if ( attachment_count > 0 )
3372 {
3373 if ( HasBase() && attachment_count == 1 )
3374 {
3375 return false;
3376 }
3377
3378 return true;
3379 }
3380
3381 return false;
3382 }
3383
3384 override bool ShowZonesHealth()
3385 {
3386 return true;
3387 }
3388
3389 override bool IsTakeable()
3390 {
3391 return false;
3392 }
3393
3394 //this into/outo parent.Cargo
3395 override bool CanPutInCargo( EntityAI parent )
3396 {
3397 return false;
3398 }
3399
3400 override bool CanRemoveFromCargo( EntityAI parent )
3401 {
3402 return false;
3403 }
3404
3405 //hands
3406 override bool CanPutIntoHands( EntityAI parent )
3407 {
3408 return false;
3409 }
3410
3411 //--- ACTION CONDITIONS
3412 //direction
3413 override bool IsFacingPlayer( PlayerBase player, string selection )
3414 {
3415 return true;
3416 }
3417
3418 override bool IsPlayerInside( PlayerBase player, string selection )
3419 {
3420 return true;
3421 }
3422
3425 {
3426 return false;
3427 }
3428
3429 //camera direction check
3430 bool IsFacingCamera( string selection )
3431 {
3432 return true;
3433 }
3434
3435 //roof check
3436 bool PerformRoofCheckForBase( string partName, PlayerBase player, out bool result )
3437 {
3438 return false;
3439 }
3440
3441 //selection->player distance check
3442 bool HasProperDistance( string selection, PlayerBase player )
3443 {
3444 return true;
3445 }
3446
3447 //folding
3449 {
3450 if ( HasBase() || GetInventory().AttachmentCount() > 0 )
3451 {
3452 return false;
3453 }
3454
3455 return true;
3456 }
3457
3459 {
3462
3463 return item;
3464 }
3465
3466 //Damage triggers (barbed wire)
3467 void CreateAreaDamage( string slot_name, float rotation_angle = 0 )
3468 {
3469 if ( GetGame() && GetGame().IsServer() )
3470 {
3471 //destroy area damage if some already exists
3472 DestroyAreaDamage( slot_name );
3473
3474 //create new area damage
3476 areaDamage.SetDamageComponentType(AreaDamageComponentTypes.HITZONE);
3477
3478 vector min_max[2];
3479 if ( MemoryPointExists( slot_name + "_min" ) )
3480 {
3481 min_max[0] = GetMemoryPointPos( slot_name + "_min" );
3482 }
3483 if ( MemoryPointExists( slot_name + "_max" ) )
3484 {
3485 min_max[1] = GetMemoryPointPos( slot_name + "_max" );
3486 }
3487
3488 //get proper trigger extents (min<max)
3489 vector extents[2];
3490 GetConstruction().GetTriggerExtents( min_max, extents );
3491
3492 //get box center
3493 vector center;
3494 center = GetConstruction().GetBoxCenter( min_max );
3495 center = ModelToWorld( center );
3496
3497 //rotate center if needed
3498 vector orientation = GetOrientation();;
3499 CalcDamageAreaRotation( rotation_angle, center, orientation );
3500
3501 areaDamage.SetExtents( extents[0], extents[1] );
3502 areaDamage.SetAreaPosition( center );
3503 areaDamage.SetAreaOrientation( orientation );
3504 areaDamage.SetLoopInterval( 1.0 );
3505 areaDamage.SetDeferDuration( 0.2 );
3506 areaDamage.SetHitZones( { "Torso","LeftHand","LeftLeg","LeftFoot","RightHand","RightLeg","RightFoot" } );
3507 areaDamage.SetAmmoName( "BarbedWireHit" );
3508 areaDamage.Spawn();
3509
3510 m_DamageTriggers.Insert( slot_name, areaDamage );
3511 }
3512 }
3513
3514 void CalcDamageAreaRotation( float angle_deg, out vector center, out vector orientation )
3515 {
3516 if ( angle_deg != 0 )
3517 {
3518 //orientation
3519 orientation[0] = orientation[0] - angle_deg;
3520
3521 //center
3522 vector rotate_axis;
3523 if ( MemoryPointExists( "rotate_axis" ) )
3524 {
3525 rotate_axis = ModelToWorld( GetMemoryPointPos( "rotate_axis" ) );
3526 }
3527 float r_center_x = ( Math.Cos( angle_deg * Math.DEG2RAD ) * ( center[0] - rotate_axis[0] ) ) - ( Math.Sin( angle_deg * Math.DEG2RAD ) * ( center[2] - rotate_axis[2] ) ) + rotate_axis[0];
3528 float r_center_z = ( Math.Sin( angle_deg * Math.DEG2RAD ) * ( center[0] - rotate_axis[0] ) ) + ( Math.Cos( angle_deg * Math.DEG2RAD ) * ( center[2] - rotate_axis[2] ) ) + rotate_axis[2];
3529 center[0] = r_center_x;
3530 center[2] = r_center_z;
3531 }
3532 }
3533
3534 void DestroyAreaDamage( string slot_name )
3535 {
3536 if (GetGame() && GetGame().IsServer())
3537 {
3539 if (m_DamageTriggers.Find(slot_name, areaDamage))
3540 {
3541 if (areaDamage)
3542 {
3543 areaDamage.Destroy();
3544 }
3545
3546 m_DamageTriggers.Remove( slot_name );
3547 }
3548 }
3549 }
3550
3551 override bool IsIgnoredByConstruction()
3552 {
3553 return true;
3554 }
3555
3556 //================================================================
3557 // SOUNDS
3558 //================================================================
3559 protected void SoundBuildStart( string part_name )
3560 {
3561 PlaySoundSet( m_Sound, GetBuildSoundByMaterial( part_name ), 0.1, 0.1 );
3562 }
3563
3564 protected void SoundDismantleStart( string part_name )
3565 {
3566 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
3567 }
3568
3569 protected void SoundDestroyStart( string part_name )
3570 {
3571 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
3572 }
3573
3574 protected string GetBuildSoundByMaterial( string part_name )
3575 {
3576 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
3577
3578 switch ( material_type )
3579 {
3580 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_BUILD_WOOD_LOG;
3581 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_BUILD_WOOD_PLANK;
3582 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_BUILD_WOOD_STAIRS;
3583 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_BUILD_METAL;
3584 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_BUILD_WIRE;
3585 }
3586
3587 return "";
3588 }
3589
3590 protected string GetDismantleSoundByMaterial( string part_name )
3591 {
3592 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
3593
3594 switch ( material_type )
3595 {
3596 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_DISMANTLE_WOOD_LOG;
3597 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_DISMANTLE_WOOD_PLANK;
3598 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_DISMANTLE_WOOD_STAIRS;
3599 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_DISMANTLE_METAL;
3600 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_DISMANTLE_WIRE;
3601 }
3602
3603 return "";
3604 }
3605
3606 //misc
3607 void CheckForHybridAttachments( EntityAI item, string slot_name )
3608 {
3609 if (!GetGame().IsMultiplayer() || GetGame().IsServer())
3610 {
3611 //if this is a hybrid attachment, set damage of appropriate damage zone. Zone name must match slot name...WIP
3612 if (m_HybridAttachments && m_HybridAttachments.Find(slot_name) != -1)
3613 {
3614 SetHealth(slot_name,"Health",item.GetHealth());
3615 }
3616 }
3617 }
3618
3619 override int GetDamageSystemVersionChange()
3620 {
3621 return 111;
3622 }
3623
3624 override void SetActions()
3625 {
3626 super.SetActions();
3627
3631 }
3632
3633 //================================================================
3634 // DEBUG
3635 //================================================================
3636 protected void DebugCustomState()
3637 {
3638 }
3639
3642 {
3643 return null;
3644 }
3645
3646 override void OnDebugSpawn()
3647 {
3648 FullyBuild();
3649 }
3650
3651 void FullyBuild()
3652 {
3654 array<ConstructionPart> parts = GetConstruction().GetConstructionParts().GetValueArray();
3655
3656 Man p;
3657
3658 #ifdef SERVER
3659 array<Man> players = new array<Man>;
3660 GetGame().GetWorld().GetPlayerList(players);
3661 if (players.Count())
3662 p = players[0];
3663 #else
3664 p = GetGame().GetPlayer();
3665 #endif
3666
3667 foreach (ConstructionPart part : parts)
3668 {
3669 bool excluded = false;
3670 string partName = part.GetPartName();
3671 if (excludes)
3672 {
3673 foreach (string exclude : excludes)
3674 {
3675 if (partName.Contains(exclude))
3676 {
3677 excluded = true;
3678 break;
3679 }
3680 }
3681 }
3682
3683 if (!excluded)
3684 {
3685 OnPartBuiltServer(p, partName, AT_BUILD_PART);
3686 }
3687 }
3688
3689 GetConstruction().UpdateVisuals();
3690 }
3691}
3692
3693void bsbDebugPrint (string s)
3694{
3695#ifdef BSB_DEBUG
3696 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
3697#else
3698 //Print("" + s); // comment/uncomment to hide/see debug logs
3699#endif
3700}
3701void bsbDebugSpam (string s)
3702{
3703#ifdef BSB_DEBUG_SPAM
3704 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
3705#else
3706 //Print("" + s); // comment/uncomment to hide/see debug logs
3707#endif
3708}
const int AT_DISMANTLE_PART
Определения _constants.c:7
const int AT_DESTROY_PART
Определения _constants.c:8
const int AT_BUILD_PART
Определения _constants.c:6
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
void RemoveAction(typename actionName)
Определения AdvancedCommunication.c:252
vector GetOrientation()
Определения AreaDamageManager.c:306
void AreaDamageManager(EntityAI parent)
Определения AreaDamageManager.c:22
void OnPartDismantledClient(string part_name, int action_id)
Определения BaseBuildingBase.c:1928
const string ANIMATION_DEPLOYED
Определения BaseBuildingBase.c:1293
override int GetHideIconMask()
Определения BaseBuildingBase.c:1378
override void OnStoreSave(ParamsWriteContext ctx)
Определения BaseBuildingBase.c:1685
void FullyBuild()
Определения BaseBuildingBase.c:2539
void UpdateVisuals()
Определения BaseBuildingBase.c:2055
void SetActionFromSyncData()
Определения BaseBuildingBase.c:1524
int m_SyncParts01
Определения BaseBuildingBase.c:1301
void UpdateNavmesh()
Определения BaseBuildingBase.c:2174
bool CheckMemoryPointVerticalDistance(float max_dist, string selection, PlayerBase player)
Определения BaseBuildingBase.c:2223
override void OnDebugSpawn()
Определения BaseBuildingBase.c:2534
array< string > OnDebugSpawnBuildExcludes()
Excludes certain parts from being built by OnDebugSpawn, uses Contains to compare.
Определения BaseBuildingBase.c:2529
void SoundDestroyStart(string part_name)
Определения BaseBuildingBase.c:2457
const string SOUND_BUILD_WOOD_LOG
Определения BaseBuildingBase.c:1309
void SoundBuildStart(string part_name)
Определения BaseBuildingBase.c:2447
void UpdateAttachmentVisuals(string slot_name, bool is_locked)
Определения BaseBuildingBase.c:2074
void CalcDamageAreaRotation(float angle_deg, out vector center, out vector orientation)
Определения BaseBuildingBase.c:2402
override bool CanObstruct()
Определения BaseBuildingBase.c:1373
bool HasAttachmentsBesidesBase()
Определения BaseBuildingBase.c:2256
void RegisterPartForSync(int part_id)
Определения BaseBuildingBase.c:1413
const string SOUND_DISMANTLE_METAL
Определения BaseBuildingBase.c:1318
void InitBaseState()
Определения BaseBuildingBase.c:2030
override bool CanReceiveAttachment(EntityAI attachment, int slotId)
Определения BaseBuildingBase.c:2251
void BaseBuildingBase()
Определения BaseBuildingBase.c:1328
void SetPartsAfterStoreLoad()
Определения BaseBuildingBase.c:1741
void DestroyConstruction()
Определения BaseBuildingBase.c:1678
ref array< string > m_HybridAttachments
Определения BaseBuildingBase.c:1324
int m_InteractedPartId
Определения BaseBuildingBase.c:1304
bool m_HasBase
Определения BaseBuildingBase.c:1299
string GetDismantleSoundByMaterial(string part_name)
Определения BaseBuildingBase.c:2478
bool IsAttachmentSlotLocked(EntityAI attachment)
Определения BaseBuildingBase.c:2190
void UpdatePhysics()
Определения BaseBuildingBase.c:2108
override bool IsFacingPlayer(PlayerBase player, string selection)
Определения BaseBuildingBase.c:2301
void OnPartBuiltClient(string part_name, int action_id)
Определения BaseBuildingBase.c:1885
bool HasProperDistance(string selection, PlayerBase player)
Определения BaseBuildingBase.c:2330
override void OnCreatePhysics()
Определения BaseBuildingBase.c:1754
void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
Определения BaseBuildingBase.c:1852
void RegisterActionForSync(int part_id, int action_id)
Определения BaseBuildingBase.c:1511
const string SOUND_BUILD_WOOD_PLANK
Определения BaseBuildingBase.c:1310
void SetPartsFromSyncData()
Определения BaseBuildingBase.c:1583
ref array< string > m_Mountables
Определения BaseBuildingBase.c:1325
const string SOUND_BUILD_WIRE
Определения BaseBuildingBase.c:1313
int m_SyncParts03
Определения BaseBuildingBase.c:1303
void ResetActionSyncData()
Определения BaseBuildingBase.c:1517
override string GetInvulnerabilityTypeString()
Определения BaseBuildingBase.c:1368
void OnPartDismantledServer(notnull Man player, string part_name, int action_id)
Определения BaseBuildingBase.c:1892
void CheckForHybridAttachments(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:2495
override void EEOnAfterLoad()
Определения BaseBuildingBase.c:1795
override void EEItemDetached(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:1827
vector GetKitSpawnPosition()
Определения BaseBuildingBase.c:1661
ref Construction m_Construction
Определения BaseBuildingBase.c:1297
bool IsFacingCamera(string selection)
Определения BaseBuildingBase.c:2318
bool CheckSlotVerticalDistance(int slot_id, PlayerBase player)
Определения BaseBuildingBase.c:2218
void GetAttachmentSlots(EntityAI entity, out array< string > attachment_slots)
Определения BaseBuildingBase.c:2209
override bool IsDeployable()
Определения BaseBuildingBase.c:1630
void OnPartDestroyedClient(string part_name, int action_id)
Определения BaseBuildingBase.c:1971
override void EEInit()
Определения BaseBuildingBase.c:1805
void UnregisterPartForSync(int part_id)
Определения BaseBuildingBase.c:1442
void bsbDebugSpam(string s)
Определения BaseBuildingBase.c:1300
override void OnVariablesSynchronized()
Определения BaseBuildingBase.c:1392
bool PerformRoofCheckForBase(string partName, PlayerBase player, out bool result)
Определения BaseBuildingBase.c:2324
Construction GetConstruction()
Определения BaseBuildingBase.c:2244
void SoundDismantleStart(string part_name)
Определения BaseBuildingBase.c:2452
void DebugCustomState()
Определения BaseBuildingBase.c:2524
ConstructionPart GetConstructionPartById(int id)
Определения BaseBuildingBase.c:1599
string GetConstructionKitType()
Определения BaseBuildingBase.c:1666
bool CheckLevelVerticalDistance(float max_dist, string selection, PlayerBase player)
Определения BaseBuildingBase.c:2228
void OnPartDestroyedServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part=false)
Определения BaseBuildingBase.c:1935
bool CanFoldBaseBuildingObject()
Определения BaseBuildingBase.c:2336
override int GetDamageSystemVersionChange()
Определения BaseBuildingBase.c:2507
const string SOUND_DISMANTLE_WOOD_PLANK
Определения BaseBuildingBase.c:1316
override void EEItemAttached(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:1818
const string SOUND_DISMANTLE_WOOD_LOG
Определения BaseBuildingBase.c:1315
void InitVisuals()
Определения BaseBuildingBase.c:2039
class BaseBuildingBase extends ItemBase bsbDebugPrint(string s)
Определения BaseBuildingBase.c:1292
const string SOUND_BUILD_WOOD_STAIRS
Определения BaseBuildingBase.c:1311
ItemBase FoldBaseBuildingObject()
Определения BaseBuildingBase.c:2346
override bool CanPutInCargo(EntityAI parent)
Определения BaseBuildingBase.c:2283
override bool CanUseConstruction()
Определения BaseBuildingBase.c:2180
override void AfterStoreLoad()
Определения BaseBuildingBase.c:1731
void SetPartFromSyncData(ConstructionPart part)
Определения BaseBuildingBase.c:1541
override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
Определения BaseBuildingBase.c:1761
override bool IgnoreOutOfReachCondition()
Определения BaseBuildingBase.c:1845
override bool OnStoreLoad(ParamsReadContext ctx, int version)
Определения BaseBuildingBase.c:1697
override bool ShowZonesHealth()
Определения BaseBuildingBase.c:2272
void UpdateAttachmentPhysics(string slot_name, bool is_locked)
Определения BaseBuildingBase.c:2144
override bool IsPlayerInside(PlayerBase player, string selection)
Определения BaseBuildingBase.c:2306
string GetBuildSoundByMaterial(string part_name)
Определения BaseBuildingBase.c:2462
ItemBase CreateConstructionKit()
Определения BaseBuildingBase.c:1641
const string SOUND_DISMANTLE_WIRE
Определения BaseBuildingBase.c:1319
bool MustBeBuiltFromOutside()
Some buildings can only be built from outside.
Определения BaseBuildingBase.c:2312
override bool IsTakeable()
Определения BaseBuildingBase.c:2277
float m_ConstructionKitHealth
Определения BaseBuildingBase.c:1295
override void EEDelete(EntityAI parent)
Определения BaseBuildingBase.c:1357
override void SetActions()
Определения BaseBuildingBase.c:2512
void HandleItemFalling(ConstructionPart part)
Определения BaseBuildingBase.c:1977
void DestroyConstructionKit(ItemBase construction_kit)
Определения BaseBuildingBase.c:1671
void CreateConstructionKitInHands(notnull PlayerBase player)
Определения BaseBuildingBase.c:1652
bool IsOpened()
Определения BaseBuildingBase.c:1635
void ItemFall(vector min, vector max)
Определения BaseBuildingBase.c:2015
int m_PerformedActionId
Определения BaseBuildingBase.c:1305
override bool CanUseConstructionBuild()
Определения BaseBuildingBase.c:2185
bool HasBase()
Определения BaseBuildingBase.c:1620
void OnSynchronizedClient()
Определения BaseBuildingBase.c:1400
void SynchronizeBaseState()
Определения BaseBuildingBase.c:1384
override bool IsIgnoredByConstruction()
Определения BaseBuildingBase.c:2439
ref map< string, ref AreaDamageManager > m_DamageTriggers
Определения BaseBuildingBase.c:1323
void SetBaseState(bool has_base)
Определения BaseBuildingBase.c:1625
const string SOUND_BUILD_METAL
Определения BaseBuildingBase.c:1312
void OnSetSlotLock(int slotId, bool locked, bool was_locked)
Определения BaseBuildingBase.c:1835
override bool CanPutIntoHands(EntityAI parent)
Определения BaseBuildingBase.c:2294
bool IsPartBuildInSyncData(int part_id)
Определения BaseBuildingBase.c:1471
override bool CanRemoveFromCargo(EntityAI parent)
Определения BaseBuildingBase.c:2288
void ConstructionInit()
Определения BaseBuildingBase.c:2234
int m_SyncParts02
Определения BaseBuildingBase.c:1302
const string SOUND_DISMANTLE_WOOD_STAIRS
Определения BaseBuildingBase.c:1317
const int ECE_PLACE_ON_SURFACE
Определения CentralEconomy.c:37
PlayerSpawnPreset slotName
ConstructionMaterialType
Определения Construction.c:2
void Construction(BaseBuildingBase parent)
Определения Construction.c:26
map
Определения ControlsXboxNew.c:4
void DayZPlayerUtils()
cannot be instantiated
Определения DayZPlayerUtils.c:465
void DestroyAreaDamage()
Определения FireplaceBase.c:2338
void CreateAreaDamage()
Определения FireplaceBase.c:2322
EffectSound m_Sound
Определения HungerSoundHandler.c:18
bool m_FixDamageSystemInit
Определения ItemBase.c:4835
Определения ActionTakeItem.c:7
const int HITZONE
Определения AreaDamageManager.c:4
override void SetLoopInterval(float time)
Определения AreaDamageLooped.c:32
A particular version of the deferred loop used to not damage players inside vehicles.
override void SetDeferDuration(float time)
Определения AreaDamageLoopedDeferred.c:7
proto native World GetWorld()
override ScriptCallQueue GetCallQueue(int call_category)
Определения DayZGame.c:1187
proto native void ConfigGetTextArray(string path, out TStringArray values)
Get array of strings from config on path.
proto native DayZPlayer GetPlayer()
proto native void ObjectDelete(Object obj)
Super root of all classes in Enforce script.
Определения EnScript.c:11
int GetId()
Определения ConstructionPart.c:40
string GetPartName()
Определения ConstructionPart.c:30
bool IsBase()
Определения ConstructionPart.c:65
bool IsBuilt()
Определения ConstructionPart.c:45
string m_PartName
Определения ConstructionPart.c:5
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
Определения Debug.c:122
Определения Debug.c:2
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
Определения Building.c:6
Определения constants.c:659
proto native int GetSlot()
returns slot id if current type is Attachment
InventoryLocation.
Определения InventoryLocation.c:29
static proto native int GetSlotIdFromString(string slot_name)
converts string to slot_id
static proto native owned string GetSlotName(int id)
converts slot_id to string
provides access to slot configuration
Определения InventorySlots.c:6
override bool CanUseConstruction()
Определения BaseBuildingBase.c:891
Определения InventoryItem.c:731
static bool IsBaseBuildingLogEnable()
Определения Debug.c:698
Определения Debug.c:594
Определения EnMath.c:7
Определения ObjectTyped.c:2
Определения PlayerBaseClient.c:2
proto void CallLater(func fn, int delay=0, bool repeat=false, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
adds call into the queue with given parameters and arguments (arguments are held in memory until the ...
proto bool Write(void value_out)
proto bool Read(void value_in)
proto native void GetPlayerList(out array< Man > players)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static const vector Zero
Определения EnConvert.c:110
Определения EnConvert.c:106
override string GetDebugName()
Определения dayzplayer.c:1170
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16
proto void PrintToRPT(void var)
Prints content of variable to RPT file (performance warning - each write means fflush!...
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
const int STATE_RUINED
Определения constants.c:846
static proto float Max(float x, float y)
Returns bigger of two given values.
static proto float Min(float x, float y)
Returns smaller of two given values.
static proto float Cos(float angle)
Returns cosinus of angle in radians.
static proto float Sin(float angle)
Returns sinus of angle in radians.
static const float DEG2RAD
Определения EnMath.c:17
class JsonUndergroundAreaTriggerData GetPosition
Определения UndergroundAreaLoader.c:9
bool Contains(string sample)
Returns true if sample is substring of string.
Определения EnString.c:286
proto int ToLower()
Changes string to lowercase. Returns length.
const int CALL_CATEGORY_GAMEPLAY
Определения tools.c:10
const int CALL_CATEGORY_SYSTEM
Определения tools.c:8

Используется в ItemBase::CreateAreaDamage().