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

◆ IsIgnoredByConstruction()

override bool bsbDebugPrint::IsIgnoredByConstruction ( )
protected

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

2441{
2442 const string ANIMATION_DEPLOYED = "Deployed";
2443
2444 float m_ConstructionKitHealth; //stored health value for used construction kit
2445
2447
2448 bool m_HasBase;
2449 //variables for synchronization of base building parts (2x31 is the current limit)
2450 int m_SyncParts01; //synchronization for already built parts (31 parts)
2451 int m_SyncParts02; //synchronization for already built parts (+31 parts)
2452 int m_SyncParts03; //synchronization for already built parts (+31 parts)
2453 int m_InteractedPartId; //construction part id that an action was performed on
2454 int m_PerformedActionId; //action id that was performed on a construction part
2455
2456 //Sounds
2457 //build
2458 const string SOUND_BUILD_WOOD_LOG = "putDown_WoodLog_SoundSet";
2459 const string SOUND_BUILD_WOOD_PLANK = "putDown_WoodPlank_SoundSet";
2460 const string SOUND_BUILD_WOOD_STAIRS = "putDown_WoodStairs_SoundSet";
2461 const string SOUND_BUILD_METAL = "putDown_MetalPlank_SoundSet";
2462 const string SOUND_BUILD_WIRE = "putDown_BarbedWire_SoundSet";
2463 //dismantle
2464 const string SOUND_DISMANTLE_WOOD_LOG = "Crash_WoodPlank_SoundSet";
2465 const string SOUND_DISMANTLE_WOOD_PLANK = "Crash_WoodPlank_SoundSet";
2466 const string SOUND_DISMANTLE_WOOD_STAIRS = "Crash_WoodPlank_SoundSet";
2467 const string SOUND_DISMANTLE_METAL = "Crash_MetalPlank_SoundSet";
2468 const string SOUND_DISMANTLE_WIRE = "putDown_BarbedWire_SoundSet";
2469
2470 protected EffectSound m_Sound;
2471
2475
2476 // Constructor
2477 void BaseBuildingBase()
2478 {
2480
2481 //synchronized variables
2482 RegisterNetSyncVariableInt( "m_SyncParts01" );
2483 RegisterNetSyncVariableInt( "m_SyncParts02" );
2484 RegisterNetSyncVariableInt( "m_SyncParts03" );
2485 RegisterNetSyncVariableInt( "m_InteractedPartId" );
2486 RegisterNetSyncVariableInt( "m_PerformedActionId" );
2487 RegisterNetSyncVariableBool( "m_HasBase" );
2488
2489 //Construction init
2491
2492 if (ConfigIsExisting("hybridAttachments"))
2493 {
2495 ConfigGetTextArray("hybridAttachments", m_HybridAttachments);
2496 }
2497 if (ConfigIsExisting("mountables"))
2498 {
2500 ConfigGetTextArray("mountables", m_Mountables);
2501 }
2502
2503 ProcessInvulnerabilityCheck(GetInvulnerabilityTypeString());
2504 }
2505
2506 override void EEDelete(EntityAI parent)
2507 {
2508 super.EEDelete(parent);
2509
2510 foreach (AreaDamageManager areaDamage : m_DamageTriggers)
2511 {
2512 areaDamage.Destroy();
2513 }
2514
2515 }
2516
2517 override string GetInvulnerabilityTypeString()
2518 {
2519 return "disableBaseDamage";
2520 }
2521
2522 override bool CanObstruct()
2523 {
2524 return true;
2525 }
2526
2527 override int GetHideIconMask()
2528 {
2529 return EInventoryIconVisibility.HIDE_VICINITY;
2530 }
2531
2532 // --- SYNCHRONIZATION
2534 {
2535 if ( GetGame().IsServer() )
2536 {
2537 SetSynchDirty();
2538 }
2539 }
2540
2541 override void OnVariablesSynchronized()
2542 {
2543 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnVariablesSynchronized");
2544 super.OnVariablesSynchronized();
2545
2547 }
2548
2549 protected void OnSynchronizedClient()
2550 {
2551 //update parts
2553
2554 //update action on part
2556
2557 //update visuals (client)
2558 UpdateVisuals();
2559 }
2560
2561 //parts synchronization
2562 void RegisterPartForSync( int part_id )
2563 {
2564 //part_id must starts from index = 1
2565 int offset;
2566 int mask;
2567
2568 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2569 {
2570 offset = part_id - 1;
2571 mask = 1 << offset;
2572
2573 m_SyncParts01 = m_SyncParts01 | mask;
2574 }
2575 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2576 {
2577 offset = ( part_id % 32 );
2578 mask = 1 << offset;
2579
2580 m_SyncParts02 = m_SyncParts02 | mask;
2581 }
2582 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2583 {
2584 offset = ( part_id % 63 );
2585 mask = 1 << offset;
2586
2587 m_SyncParts03 = m_SyncParts03 | mask;
2588 }
2589 }
2590
2591 void UnregisterPartForSync( int part_id )
2592 {
2593 //part_id must starts from index = 1
2594 int offset;
2595 int mask;
2596
2597 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2598 {
2599 offset = part_id - 1;
2600 mask = 1 << offset;
2601
2602 m_SyncParts01 = m_SyncParts01 & ~mask;
2603 }
2604 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2605 {
2606 offset = ( part_id % 32 );
2607 mask = 1 << offset;
2608
2609 m_SyncParts02 = m_SyncParts02 & ~mask;
2610 }
2611 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2612 {
2613 offset = ( part_id % 63 );
2614 mask = 1 << offset;
2615
2616 m_SyncParts03 = m_SyncParts03 & ~mask;
2617 }
2618 }
2619
2620 bool IsPartBuildInSyncData( int part_id )
2621 {
2622 //part_id must starts from index = 1
2623 int offset;
2624 int mask;
2625
2626 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2627 {
2628 offset = part_id - 1;
2629 mask = 1 << offset;
2630
2631 if ( ( m_SyncParts01 & mask ) > 0 )
2632 {
2633 return true;
2634 }
2635 }
2636 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2637 {
2638 offset = ( part_id % 32 );
2639 mask = 1 << offset;
2640
2641 if ( ( m_SyncParts02 & mask ) > 0 )
2642 {
2643 return true;
2644 }
2645 }
2646 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2647 {
2648 offset = ( part_id % 63 );
2649 mask = 1 << offset;
2650
2651 if ( ( m_SyncParts03 & mask ) > 0 )
2652 {
2653 return true;
2654 }
2655 }
2656
2657 return false;
2658 }
2659
2660 protected void RegisterActionForSync( int part_id, int action_id )
2661 {
2662 m_InteractedPartId = part_id;
2663 m_PerformedActionId = action_id;
2664 }
2665
2666 protected void ResetActionSyncData()
2667 {
2668 //reset data
2669 m_InteractedPartId = -1;
2671 }
2672
2673 protected void SetActionFromSyncData()
2674 {
2675 if ( m_InteractedPartId > -1 && m_PerformedActionId > -1 )
2676 {
2678 int build_action_id = m_PerformedActionId;
2679
2680 switch( build_action_id )
2681 {
2682 case AT_BUILD_PART : OnPartBuiltClient( constrution_part.GetPartName(), build_action_id ); break;
2683 case AT_DISMANTLE_PART : OnPartDismantledClient( constrution_part.GetPartName(), build_action_id ); break;
2684 case AT_DESTROY_PART : OnPartDestroyedClient( constrution_part.GetPartName(), build_action_id ); break;
2685 }
2686 }
2687 }
2688 //------
2689
2691 {
2692 string key = part.m_PartName;
2693 bool is_base = part.IsBase();
2694 bool is_part_built_sync = IsPartBuildInSyncData( part.GetId() );
2695 bsbDebugSpam("[bsb] " + GetDebugName(this) + " SetPartFromSyncData try to sync: built=" + is_part_built_sync + " key=" + key + " part=" + part.GetPartName() + " part_built=" + part.IsBuilt());
2696 if ( is_part_built_sync )
2697 {
2698 if ( !part.IsBuilt() )
2699 {
2700 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData +++ " + key);
2701 GetConstruction().AddToConstructedParts( key );
2702 GetConstruction().ShowConstructionPartPhysics(part.GetPartName());
2703
2704 if (is_base)
2705 {
2707 RemoveProxyPhysics( ANIMATION_DEPLOYED );
2708 }
2709 }
2710 }
2711 else
2712 {
2713 if ( part.IsBuilt() )
2714 {
2715 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData --- " + key);
2716 GetConstruction().RemoveFromConstructedParts( key );
2717 GetConstruction().HideConstructionPartPhysics(part.GetPartName());
2718
2719 if (is_base)
2720 {
2722 AddProxyPhysics( ANIMATION_DEPLOYED );
2723 }
2724 }
2725 }
2726
2727 //check slot lock for material attachments
2728 GetConstruction().SetLockOnAttachedMaterials( part.GetPartName(), part.IsBuilt() ); //failsafe for corrupted sync/storage data
2729 }
2730
2731 //set construction parts based on synchronized data
2733 {
2734 Construction construction = GetConstruction();
2735 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
2736
2737 for ( int i = 0; i < construction_parts.Count(); ++i )
2738 {
2739 string key = construction_parts.GetKey( i );
2740 ConstructionPart value = construction_parts.Get( key );
2741 SetPartFromSyncData(value);
2742 }
2743
2744 //regenerate navmesh
2745 UpdateNavmesh();
2746 }
2747
2748 protected ConstructionPart GetConstructionPartById( int id )
2749 {
2750 Construction construction = GetConstruction();
2751 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
2752
2753 for ( int i = 0; i < construction_parts.Count(); ++i )
2754 {
2755 string key = construction_parts.GetKey( i );
2756 ConstructionPart value = construction_parts.Get( key );
2757
2758 if ( value.GetId() == id )
2759 {
2760 return value;
2761 }
2762 }
2763
2764 return NULL;
2765 }
2766 //
2767
2768 //Base
2769 bool HasBase()
2770 {
2771 return m_HasBase;
2772 }
2773
2774 void SetBaseState( bool has_base )
2775 {
2776 m_HasBase = has_base;
2777 }
2778
2779 override bool IsDeployable()
2780 {
2781 return true;
2782 }
2783
2784 bool IsOpened()
2785 {
2786 return false;
2787 }
2788
2789 //--- CONSTRUCTION KIT
2791 {
2792 ItemBase construction_kit = ItemBase.Cast( GetGame().CreateObjectEx( GetConstructionKitType(), GetKitSpawnPosition(), ECE_PLACE_ON_SURFACE ) );
2793 if ( m_ConstructionKitHealth > 0 )
2794 {
2795 construction_kit.SetHealth( m_ConstructionKitHealth );
2796 }
2797
2798 return construction_kit;
2799 }
2800
2801 void CreateConstructionKitInHands(notnull PlayerBase player)
2802 {
2803 ItemBase construction_kit = ItemBase.Cast(player.GetHumanInventory().CreateInHands(GetConstructionKitType()));
2804 if ( m_ConstructionKitHealth > 0 )
2805 {
2806 construction_kit.SetHealth( m_ConstructionKitHealth );
2807 }
2808 }
2809
2810 protected vector GetKitSpawnPosition()
2811 {
2812 return GetPosition();
2813 }
2814
2815 protected string GetConstructionKitType()
2816 {
2817 return "";
2818 }
2819
2820 void DestroyConstructionKit( ItemBase construction_kit )
2821 {
2822 m_ConstructionKitHealth = construction_kit.GetHealth();
2823 GetGame().ObjectDelete( construction_kit );
2824 }
2825
2826 //--- CONSTRUCTION
2827 void DestroyConstruction()
2828 {
2829 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " DestroyConstruction");
2830 GetGame().ObjectDelete( this );
2831 }
2832
2833 // --- EVENTS
2834 override void OnStoreSave( ParamsWriteContext ctx )
2835 {
2836 super.OnStoreSave( ctx );
2837
2838 //sync parts 01
2839 ctx.Write( m_SyncParts01 );
2840 ctx.Write( m_SyncParts02 );
2841 ctx.Write( m_SyncParts03 );
2842
2843 ctx.Write( m_HasBase );
2844 }
2845
2846 override bool OnStoreLoad( ParamsReadContext ctx, int version )
2847 {
2848 if ( !super.OnStoreLoad( ctx, version ) )
2849 return false;
2850
2851 //--- Base building data ---
2852 //Restore synced parts data
2853 if ( !ctx.Read( m_SyncParts01 ) )
2854 {
2855 m_SyncParts01 = 0; //set default
2856 return false;
2857 }
2858 if ( !ctx.Read( m_SyncParts02 ) )
2859 {
2860 m_SyncParts02 = 0; //set default
2861 return false;
2862 }
2863 if ( !ctx.Read( m_SyncParts03 ) )
2864 {
2865 m_SyncParts03 = 0; //set default
2866 return false;
2867 }
2868
2869 //has base
2870 if ( !ctx.Read( m_HasBase ) )
2871 {
2872 m_HasBase = false;
2873 return false;
2874 }
2875 //---
2876
2877 return true;
2878 }
2879
2880 override void AfterStoreLoad()
2881 {
2882 super.AfterStoreLoad();
2883
2885 {
2887 }
2888 }
2889
2891 {
2892 //update server data
2894
2895 //set base state
2896 ConstructionPart construction_part = GetConstruction().GetBaseConstructionPart();
2897 SetBaseState( construction_part.IsBuilt() ) ;
2898
2899 //synchronize after load
2901 }
2902
2903 override void OnCreatePhysics()
2904 {
2905 super.OnCreatePhysics();
2908 }
2909
2910 override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
2911 {
2913 return;
2914
2915 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
2916
2917 if (GetGame().IsMultiplayer() && !GetGame().IsServer())
2918 return;
2919
2920 Construction construction = GetConstruction();
2921 string part_name = zone;
2922 part_name.ToLower();
2923
2924 if ( newLevel == GameConstants.STATE_RUINED )
2925 {
2926 ConstructionPart construction_part = construction.GetConstructionPart( part_name );
2927
2928 if ( construction_part && construction.IsPartConstructed( part_name ) )
2929 {
2930 construction.DestroyPartServer( null, part_name, AT_DESTROY_PART );
2931 construction.DestroyConnectedParts(part_name);
2932 }
2933
2934 //barbed wire handling (hack-ish)
2935 if ( part_name.Contains("barbed") )
2936 {
2937 BarbedWire barbed_wire = BarbedWire.Cast( FindAttachmentBySlotName( zone ) );
2938 if (barbed_wire)
2939 barbed_wire.SetMountedState( false );
2940 }
2941 }
2942 }
2943
2944 override void EEOnAfterLoad()
2945 {
2947 {
2949 }
2950
2951 super.EEOnAfterLoad();
2952 }
2953
2954 override void EEInit()
2955 {
2956 super.EEInit();
2957
2958 // init visuals and physics
2959 InitBaseState();
2960
2961 //debug
2962 #ifdef DEVELOPER
2964 #endif
2965 }
2966
2967 override void EEItemAttached( EntityAI item, string slot_name )
2968 {
2969 super.EEItemAttached( item, slot_name );
2970
2971 CheckForHybridAttachments( item, slot_name );
2972 UpdateVisuals();
2973 UpdateAttachmentPhysics( slot_name, false );
2974 }
2975
2976 override void EEItemDetached( EntityAI item, string slot_name )
2977 {
2978 super.EEItemDetached( item, slot_name );
2979
2980 UpdateVisuals();
2981 UpdateAttachmentPhysics( slot_name, false );
2982 }
2983
2984 protected void OnSetSlotLock( int slotId, bool locked, bool was_locked )
2985 {
2986 string slot_name = InventorySlots.GetSlotName( slotId );
2987 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint( "inv: OnSetSlotLock " + GetDebugName( this ) + " slot=" + slot_name + " locked=" + locked + " was_locked=" + was_locked );
2988
2989 UpdateAttachmentVisuals( slot_name, locked );
2990 UpdateAttachmentPhysics( slot_name, locked );
2991 }
2992
2993 //ignore out of reach condition
2994 override bool IgnoreOutOfReachCondition()
2995 {
2996 return true;
2997 }
2998
2999 //CONSTRUCTION EVENTS
3000 //Build
3001 void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
3002 {
3003 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
3004
3005 //check base state
3006 if (construtionPart.IsBase())
3007 {
3008 SetBaseState(true);
3009
3010 //spawn kit
3012 }
3013
3014 //register constructed parts for synchronization
3015 RegisterPartForSync(construtionPart.GetId());
3016
3017 //register action that was performed on part
3018 RegisterActionForSync(construtionPart.GetId(), action_id);
3019
3020 //synchronize
3022
3023 SetPartFromSyncData(construtionPart); // server part of sync, client will be synced from SetPartsFromSyncData
3024
3025 UpdateNavmesh();
3026
3027 //update visuals
3028 UpdateVisuals();
3029
3030 //reset action sync data
3032 }
3033
3034 void OnPartBuiltClient(string part_name, int action_id)
3035 {
3036 //play sound
3037 SoundBuildStart( part_name );
3038 }
3039
3040 //Dismantle
3041 void OnPartDismantledServer(notnull Man player, string part_name, int action_id)
3042 {
3043 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDismantledServer " + part_name);
3044 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
3045
3046 //register constructed parts for synchronization
3047 UnregisterPartForSync(construtionPart.GetId());
3048
3049 //register action that was performed on part
3050 RegisterActionForSync(construtionPart.GetId(), action_id);
3051
3052 //synchronize
3054
3055 // server part of sync, client will be synced from SetPartsFromSyncData
3056 SetPartFromSyncData(construtionPart);
3057
3058 UpdateNavmesh();
3059
3060 //update visuals
3061 UpdateVisuals();
3062
3063 //reset action sync data
3065
3066 //check base state
3067 if (construtionPart.IsBase())
3068 {
3069 //Destroy construction
3071 }
3072
3073 if (GetGame().IsServer())
3074 HandleItemFalling(construtionPart);
3075 }
3076
3077 void OnPartDismantledClient( string part_name, int action_id )
3078 {
3079 //play sound
3080 SoundDismantleStart( part_name );
3081 }
3082
3083 //Destroy
3084 void OnPartDestroyedServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part = false)
3085 {
3086 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDestroyedServer " + part_name);
3087 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
3088
3089 //register constructed parts for synchronization
3090 UnregisterPartForSync(construtionPart.GetId());
3091
3092 //register action that was performed on part
3093 RegisterActionForSync(construtionPart.GetId(), action_id);
3094
3095 //synchronize
3097
3098 // server part of sync, client will be synced from SetPartsFromSyncData
3099 SetPartFromSyncData(construtionPart);
3100
3101 UpdateNavmesh();
3102
3103 //update visuals
3104 UpdateVisuals();
3105
3106 //reset action sync data
3108
3109 //check base state
3110 if (construtionPart.IsBase())
3111 {
3112 //Destroy construction
3114 }
3115
3116 if (GetGame().IsServer())
3117 HandleItemFalling(construtionPart);
3118 }
3119
3120 void OnPartDestroyedClient( string part_name, int action_id )
3121 {
3122 //play sound
3123 SoundDestroyStart( part_name );
3124 }
3125
3126 protected void HandleItemFalling(ConstructionPart part)
3127 {
3128 bool process = false;
3129
3130 //TODO: add a parameter to parts' config classes?
3131 process |= part.m_PartName.Contains("_roof");
3132 process |= part.m_PartName.Contains("_platform");
3133 process |= part.m_PartName.Contains("_stair");
3134
3135 if (process)
3136 {
3137 if (!MemoryPointExists(part.m_PartName + "_min") || !MemoryPointExists(part.m_PartName + "_max"))
3138 {
3139 Debug.Log("min/max memory points do not exist for part: " + part.m_PartName);
3140 return;
3141 }
3142
3143 vector mins, maxs;
3144 mins = ModelToWorld(GetMemoryPointPos(part.m_PartName + "_min"));
3145 maxs = ModelToWorld(GetMemoryPointPos(part.m_PartName + "_max"));
3146
3147 //sanitize minmaxs
3148 vector minTmp, maxTmp;
3149 minTmp[0] = Math.Min(mins[0],maxs[0]);
3150 maxTmp[0] = Math.Max(mins[0],maxs[0]);
3151 minTmp[1] = Math.Min(mins[1],maxs[1]);
3152 maxTmp[1] = Math.Max(mins[1],maxs[1]);
3153 minTmp[2] = Math.Min(mins[2],maxs[2]);
3154 maxTmp[2] = Math.Max(mins[2],maxs[2]);
3155 mins = minTmp;
3156 maxs = maxTmp;
3157
3158 maxs[1] = maxs[1] + 0.35; //reach a little above..
3159
3160 ItemFall(mins,maxs);
3161 }
3162 }
3163
3164 protected void ItemFall(vector min, vector max)
3165 {
3166 array<EntityAI> foundEntities = new array<EntityAI>();
3167 DayZPlayerUtils.PhysicsGetEntitiesInBox(min,max,foundEntities);
3168
3169 //filtering
3170 ItemBase item;
3171 foreach (EntityAI entity : foundEntities)
3172 {
3173 if (Class.CastTo(item,entity) && !item.CanUseConstruction()) //BB items?
3174 item.ThrowPhysically(null,vector.Zero);
3175 }
3176 }
3177
3178 // --- UPDATE
3179 void InitBaseState()
3180 {
3181 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::InitBaseState ");
3182
3183 InitVisuals();
3184 UpdateNavmesh(); //regenerate navmesh
3185 GetConstruction().InitBaseState();
3186 }
3187
3188 void InitVisuals()
3189 {
3190 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " InitVisuals");
3191 //check base
3192 if ( !HasBase() )
3193 {
3194 SetAnimationPhase( ANIMATION_DEPLOYED, 0 );
3195 }
3196 else
3197 {
3198 SetAnimationPhase( ANIMATION_DEPLOYED, 1 );
3199 }
3200
3201 GetConstruction().UpdateVisuals();
3202 }
3203
3204 void UpdateVisuals()
3205 {
3206 array<string> attachmentSlots = new array<string>;
3207
3208 GetAttachmentSlots(this, attachmentSlots);
3209 foreach (string slotName : attachmentSlots)
3210 {
3212 }
3213
3214 //check base
3215 if (!HasBase())
3216 SetAnimationPhase(ANIMATION_DEPLOYED, 0);
3217 else
3218 SetAnimationPhase(ANIMATION_DEPLOYED, 1);
3219
3220 GetConstruction().UpdateVisuals();
3221 }
3222
3223 void UpdateAttachmentVisuals(string slot_name, bool is_locked)
3224 {
3225 string slotNameMounted = slot_name + "_Mounted";
3226 EntityAI attachment = FindAttachmentBySlotName(slot_name);
3227
3228 if (attachment)
3229 {
3230 BarbedWire barbedWire = BarbedWire.Cast(attachment);
3231 if (barbedWire && barbedWire.IsMounted())
3232 CreateAreaDamage(slotNameMounted);
3233 else
3234 DestroyAreaDamage(slotNameMounted);
3235
3236 if (is_locked)
3237 {
3238 SetAnimationPhase(slotNameMounted, 0);
3239 SetAnimationPhase(slot_name, 1);
3240 }
3241 else
3242 {
3243 SetAnimationPhase(slotNameMounted, 1);
3244 SetAnimationPhase(slot_name, 0);
3245 }
3246 }
3247 else
3248 {
3249 SetAnimationPhase(slotNameMounted, 1);
3250 SetAnimationPhase(slot_name, 1);
3251
3252 DestroyAreaDamage(slotNameMounted);
3253 }
3254 }
3255
3256 // avoid calling this function on frequent occasions, it's a massive performance hit
3257 void UpdatePhysics()
3258 {
3260 bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::UpdatePhysics");
3261
3262 array<string> attachmentSlots = new array<string>;
3263 GetAttachmentSlots(this, attachmentSlots);
3264
3266 bsbDebugPrint("[bsb] " + GetDebugName(this) + " att_cnt=" + attachmentSlots.Count());
3267
3268 foreach (string slotName : attachmentSlots)
3269 {
3271 }
3272
3273 //check base
3274 if (!HasBase())
3275 {
3277 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " ADD");
3278
3279 AddProxyPhysics(ANIMATION_DEPLOYED);
3280 }
3281 else
3282 {
3284 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " RM");
3285
3286 RemoveProxyPhysics(ANIMATION_DEPLOYED);
3287 }
3288
3289 GetConstruction().UpdatePhysics();
3290 UpdateNavmesh();
3291 }
3292
3293 void UpdateAttachmentPhysics( string slot_name, bool is_locked )
3294 {
3295 //checks for invalid appends; hotfix
3296 if ( !m_Mountables || m_Mountables.Find(slot_name) == -1 )
3297 return;
3298 //----------------------------------
3299 string slot_name_mounted = slot_name + "_Mounted";
3300 EntityAI attachment = FindAttachmentBySlotName( slot_name );
3301
3302 //remove proxy physics
3303 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Removing ATT SLOT=" + slot_name + " RM / RM");
3304 RemoveProxyPhysics( slot_name_mounted );
3305 RemoveProxyPhysics( slot_name );
3306
3307 if ( attachment )
3308 {
3309 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Adding ATT=" + Object.GetDebugName(attachment));
3310 if ( is_locked )
3311 {
3312 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " RM / RM");
3313 AddProxyPhysics( slot_name_mounted );
3314 }
3315 else
3316 {
3317 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " ADD");
3318 AddProxyPhysics( slot_name );
3319 }
3320 }
3321 }
3322
3323 protected void UpdateNavmesh()
3324 {
3325 SetAffectPathgraph( true, false );
3326 GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( GetGame().UpdatePathgraphRegionByObject, 100, false, this );
3327 }
3328
3329 override bool CanUseConstruction()
3330 {
3331 return true;
3332 }
3333
3334 override bool CanUseConstructionBuild()
3335 {
3336 return true;
3337 }
3338
3339 protected bool IsAttachmentSlotLocked( EntityAI attachment )
3340 {
3341 if ( attachment )
3342 {
3343 InventoryLocation inventory_location = new InventoryLocation;
3344 attachment.GetInventory().GetCurrentInventoryLocation( inventory_location );
3345
3346 return GetInventory().GetSlotLock( inventory_location.GetSlot() );
3347 }
3348
3349 return false;
3350 }
3351
3352 protected bool IsAttachmentSlotLocked( string slot_name )
3353 {
3354 return GetInventory().GetSlotLock( InventorySlots.GetSlotIdFromString( slot_name ) );
3355 }
3356
3357 //--- ATTACHMENT SLOTS
3358 void GetAttachmentSlots( EntityAI entity, out array<string> attachment_slots )
3359 {
3360 string config_path = "CfgVehicles" + " " + entity.GetType() + " " + "attachments";
3361 if ( GetGame().ConfigIsExisting( config_path ) )
3362 {
3363 GetGame().ConfigGetTextArray( config_path, attachment_slots );
3364 }
3365 }
3366
3367 bool CheckSlotVerticalDistance( int slot_id, PlayerBase player )
3368 {
3369 return true;
3370 }
3371
3372 protected bool CheckMemoryPointVerticalDistance( float max_dist, string selection, PlayerBase player )
3373 {
3374 return true;
3375 }
3376
3377 protected bool CheckLevelVerticalDistance( float max_dist, string selection, PlayerBase player )
3378 {
3379 return true;
3380 }
3381
3382 // --- INIT
3383 void ConstructionInit()
3384 {
3385 if ( !m_Construction )
3386 {
3387 m_Construction = new Construction( this );
3388 }
3389
3390 GetConstruction().Init();
3391 }
3392
3394 {
3395 return m_Construction;
3396 }
3397
3398 //--- INVENTORY/ATTACHMENTS CONDITIONS
3399 //attachments
3400 override bool CanReceiveAttachment( EntityAI attachment, int slotId )
3401 {
3402 return super.CanReceiveAttachment(attachment, slotId);
3403 }
3404
3406 {
3407 int attachment_count = GetInventory().AttachmentCount();
3408 if ( attachment_count > 0 )
3409 {
3410 if ( HasBase() && attachment_count == 1 )
3411 {
3412 return false;
3413 }
3414
3415 return true;
3416 }
3417
3418 return false;
3419 }
3420
3421 override bool ShowZonesHealth()
3422 {
3423 return true;
3424 }
3425
3426 override bool IsTakeable()
3427 {
3428 return false;
3429 }
3430
3431 //this into/outo parent.Cargo
3432 override bool CanPutInCargo( EntityAI parent )
3433 {
3434 return false;
3435 }
3436
3437 override bool CanRemoveFromCargo( EntityAI parent )
3438 {
3439 return false;
3440 }
3441
3442 //hands
3443 override bool CanPutIntoHands( EntityAI parent )
3444 {
3445 return false;
3446 }
3447
3448 //--- ACTION CONDITIONS
3449 //direction
3450 override bool IsFacingPlayer( PlayerBase player, string selection )
3451 {
3452 return true;
3453 }
3454
3455 override bool IsPlayerInside( PlayerBase player, string selection )
3456 {
3457 return true;
3458 }
3459
3462 {
3463 return false;
3464 }
3465
3466 //camera direction check
3467 bool IsFacingCamera( string selection )
3468 {
3469 return true;
3470 }
3471
3472 //roof check
3473 bool PerformRoofCheckForBase( string partName, PlayerBase player, out bool result )
3474 {
3475 return false;
3476 }
3477
3478 //selection->player distance check
3479 bool HasProperDistance( string selection, PlayerBase player )
3480 {
3481 return true;
3482 }
3483
3484 //folding
3486 {
3487 if ( HasBase() || GetInventory().AttachmentCount() > 0 )
3488 {
3489 return false;
3490 }
3491
3492 return true;
3493 }
3494
3496 {
3499
3500 return item;
3501 }
3502
3503 //Damage triggers (barbed wire)
3504 void CreateAreaDamage( string slot_name, float rotation_angle = 0 )
3505 {
3506 if ( GetGame() && GetGame().IsServer() )
3507 {
3508 //destroy area damage if some already exists
3509 DestroyAreaDamage( slot_name );
3510
3511 //create new area damage
3513 areaDamage.SetDamageComponentType(AreaDamageComponentTypes.HITZONE);
3514
3515 vector min_max[2];
3516 if ( MemoryPointExists( slot_name + "_min" ) )
3517 {
3518 min_max[0] = GetMemoryPointPos( slot_name + "_min" );
3519 }
3520 if ( MemoryPointExists( slot_name + "_max" ) )
3521 {
3522 min_max[1] = GetMemoryPointPos( slot_name + "_max" );
3523 }
3524
3525 //get proper trigger extents (min<max)
3526 vector extents[2];
3527 GetConstruction().GetTriggerExtents( min_max, extents );
3528
3529 //get box center
3530 vector center;
3531 center = GetConstruction().GetBoxCenter( min_max );
3532 center = ModelToWorld( center );
3533
3534 //rotate center if needed
3535 vector orientation = GetOrientation();;
3536 CalcDamageAreaRotation( rotation_angle, center, orientation );
3537
3538 areaDamage.SetExtents( extents[0], extents[1] );
3539 areaDamage.SetAreaPosition( center );
3540 areaDamage.SetAreaOrientation( orientation );
3541 areaDamage.SetLoopInterval( 1.0 );
3542 areaDamage.SetDeferDuration( 0.2 );
3543 areaDamage.SetHitZones( { "Torso","LeftHand","LeftLeg","LeftFoot","RightHand","RightLeg","RightFoot" } );
3544 areaDamage.SetAmmoName( "BarbedWireHit" );
3545 areaDamage.Spawn();
3546
3547 m_DamageTriggers.Insert( slot_name, areaDamage );
3548 }
3549 }
3550
3551 void CalcDamageAreaRotation( float angle_deg, out vector center, out vector orientation )
3552 {
3553 if ( angle_deg != 0 )
3554 {
3555 //orientation
3556 orientation[0] = orientation[0] - angle_deg;
3557
3558 //center
3559 vector rotate_axis;
3560 if ( MemoryPointExists( "rotate_axis" ) )
3561 {
3562 rotate_axis = ModelToWorld( GetMemoryPointPos( "rotate_axis" ) );
3563 }
3564 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];
3565 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];
3566 center[0] = r_center_x;
3567 center[2] = r_center_z;
3568 }
3569 }
3570
3571 void DestroyAreaDamage( string slot_name )
3572 {
3573 if (GetGame() && GetGame().IsServer())
3574 {
3576 if (m_DamageTriggers.Find(slot_name, areaDamage))
3577 {
3578 if (areaDamage)
3579 {
3580 areaDamage.Destroy();
3581 }
3582
3583 m_DamageTriggers.Remove( slot_name );
3584 }
3585 }
3586 }
3587
3588 override bool IsIgnoredByConstruction()
3589 {
3590 return true;
3591 }
3592
3593 //================================================================
3594 // SOUNDS
3595 //================================================================
3596 protected void SoundBuildStart( string part_name )
3597 {
3598 PlaySoundSet( m_Sound, GetBuildSoundByMaterial( part_name ), 0.1, 0.1 );
3599 }
3600
3601 protected void SoundDismantleStart( string part_name )
3602 {
3603 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
3604 }
3605
3606 protected void SoundDestroyStart( string part_name )
3607 {
3608 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
3609 }
3610
3611 protected string GetBuildSoundByMaterial( string part_name )
3612 {
3613 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
3614
3615 switch ( material_type )
3616 {
3617 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_BUILD_WOOD_LOG;
3618 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_BUILD_WOOD_PLANK;
3619 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_BUILD_WOOD_STAIRS;
3620 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_BUILD_METAL;
3621 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_BUILD_WIRE;
3622 }
3623
3624 return "";
3625 }
3626
3627 protected string GetDismantleSoundByMaterial( string part_name )
3628 {
3629 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
3630
3631 switch ( material_type )
3632 {
3633 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_DISMANTLE_WOOD_LOG;
3634 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_DISMANTLE_WOOD_PLANK;
3635 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_DISMANTLE_WOOD_STAIRS;
3636 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_DISMANTLE_METAL;
3637 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_DISMANTLE_WIRE;
3638 }
3639
3640 return "";
3641 }
3642
3643 //misc
3644 void CheckForHybridAttachments( EntityAI item, string slot_name )
3645 {
3646 if (!GetGame().IsMultiplayer() || GetGame().IsServer())
3647 {
3648 //if this is a hybrid attachment, set damage of appropriate damage zone. Zone name must match slot name...WIP
3649 if (m_HybridAttachments && m_HybridAttachments.Find(slot_name) != -1)
3650 {
3651 SetHealth(slot_name,"Health",item.GetHealth());
3652 }
3653 }
3654 }
3655
3656 override int GetDamageSystemVersionChange()
3657 {
3658 return 111;
3659 }
3660
3661 override void SetActions()
3662 {
3663 super.SetActions();
3664
3668 }
3669
3670 //================================================================
3671 // DEBUG
3672 //================================================================
3673 protected void DebugCustomState()
3674 {
3675 }
3676
3679 {
3680 return null;
3681 }
3682
3683 override void OnDebugSpawn()
3684 {
3685 FullyBuild();
3686 }
3687
3688 void FullyBuild()
3689 {
3691 array<ConstructionPart> parts = GetConstruction().GetConstructionParts().GetValueArray();
3692
3693 Man p;
3694
3695 #ifdef SERVER
3696 array<Man> players = new array<Man>;
3697 GetGame().GetWorld().GetPlayerList(players);
3698 if (players.Count())
3699 p = players[0];
3700 #else
3701 p = GetGame().GetPlayer();
3702 #endif
3703
3704 foreach (ConstructionPart part : parts)
3705 {
3706 bool excluded = false;
3707 string partName = part.GetPartName();
3708 if (excludes)
3709 {
3710 foreach (string exclude : excludes)
3711 {
3712 if (partName.Contains(exclude))
3713 {
3714 excluded = true;
3715 break;
3716 }
3717 }
3718 }
3719
3720 if (!excluded)
3721 {
3722 OnPartBuiltServer(p, partName, AT_BUILD_PART);
3723 }
3724 }
3725
3726 GetConstruction().UpdateVisuals();
3727 }
3728}
3729
3730void bsbDebugPrint (string s)
3731{
3732#ifdef BSB_DEBUG
3733 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
3734#else
3735 //Print("" + s); // comment/uncomment to hide/see debug logs
3736#endif
3737}
3738void bsbDebugSpam (string s)
3739{
3740#ifdef BSB_DEBUG_SPAM
3741 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
3742#else
3743 //Print("" + s); // comment/uncomment to hide/see debug logs
3744#endif
3745}
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