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

◆ OnDebugSpawnBuildExcludes()

array< string > bsbDebugPrint::OnDebugSpawnBuildExcludes ( )
protected

Excludes certain parts from being built by OnDebugSpawn, uses Contains to compare.

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

2571{
2572 const string ANIMATION_DEPLOYED = "Deployed";
2573
2574 float m_ConstructionKitHealth; //stored health value for used construction kit
2575
2577
2578 bool m_HasBase;
2579 //variables for synchronization of base building parts (2x31 is the current limit)
2580 int m_SyncParts01; //synchronization for already built parts (31 parts)
2581 int m_SyncParts02; //synchronization for already built parts (+31 parts)
2582 int m_SyncParts03; //synchronization for already built parts (+31 parts)
2583 int m_InteractedPartId; //construction part id that an action was performed on
2584 int m_PerformedActionId; //action id that was performed on a construction part
2585
2586 //Sounds
2587 //build
2588 const string SOUND_BUILD_WOOD_LOG = "putDown_WoodLog_SoundSet";
2589 const string SOUND_BUILD_WOOD_PLANK = "putDown_WoodPlank_SoundSet";
2590 const string SOUND_BUILD_WOOD_STAIRS = "putDown_WoodStairs_SoundSet";
2591 const string SOUND_BUILD_METAL = "putDown_MetalPlank_SoundSet";
2592 const string SOUND_BUILD_WIRE = "putDown_BarbedWire_SoundSet";
2593 //dismantle
2594 const string SOUND_DISMANTLE_WOOD_LOG = "Crash_WoodPlank_SoundSet";
2595 const string SOUND_DISMANTLE_WOOD_PLANK = "Crash_WoodPlank_SoundSet";
2596 const string SOUND_DISMANTLE_WOOD_STAIRS = "Crash_WoodPlank_SoundSet";
2597 const string SOUND_DISMANTLE_METAL = "Crash_MetalPlank_SoundSet";
2598 const string SOUND_DISMANTLE_WIRE = "putDown_BarbedWire_SoundSet";
2599
2600 protected EffectSound m_Sound;
2601
2605
2606 // Constructor
2607 void BaseBuildingBase()
2608 {
2610
2611 //synchronized variables
2612 RegisterNetSyncVariableInt( "m_SyncParts01" );
2613 RegisterNetSyncVariableInt( "m_SyncParts02" );
2614 RegisterNetSyncVariableInt( "m_SyncParts03" );
2615 RegisterNetSyncVariableInt( "m_InteractedPartId" );
2616 RegisterNetSyncVariableInt( "m_PerformedActionId" );
2617 RegisterNetSyncVariableBool( "m_HasBase" );
2618
2619 //Construction init
2621
2622 if (ConfigIsExisting("hybridAttachments"))
2623 {
2625 ConfigGetTextArray("hybridAttachments", m_HybridAttachments);
2626 }
2627 if (ConfigIsExisting("mountables"))
2628 {
2630 ConfigGetTextArray("mountables", m_Mountables);
2631 }
2632
2633 ProcessInvulnerabilityCheck(GetInvulnerabilityTypeString());
2634 }
2635
2636 override void EEDelete(EntityAI parent)
2637 {
2638 super.EEDelete(parent);
2639
2640 foreach (AreaDamageManager areaDamage : m_DamageTriggers)
2641 {
2642 areaDamage.Destroy();
2643 }
2644
2645 }
2646
2647 override string GetInvulnerabilityTypeString()
2648 {
2649 return "disableBaseDamage";
2650 }
2651
2652 override bool CanObstruct()
2653 {
2654 return true;
2655 }
2656
2657 override int GetHideIconMask()
2658 {
2659 return EInventoryIconVisibility.HIDE_VICINITY;
2660 }
2661
2662 override void InitItemSounds()
2663 {
2664 super.InitItemSounds();
2665
2667 SoundParameters params = new SoundParameters();
2668 params.m_Loop = true;
2669
2670 if (GetFoldSoundset() != string.Empty)
2671 handler.AddSound(SoundConstants.ITEM_FOLD, GetFoldSoundset());
2672 if (GetLoopFoldSoundset() != string.Empty)
2673 handler.AddSound(SoundConstants.ITEM_FOLD_LOOP, GetLoopFoldSoundset(), params);
2674 }
2675
2676 override string GetFoldSoundset()
2677 {
2678 return "putDown_FenceKit_SoundSet";
2679 }
2680
2681 override string GetLoopFoldSoundset()
2682 {
2683 return "Shelter_Site_Build_Loop_SoundSet";
2684 }
2685
2686 // --- SYNCHRONIZATION
2688 {
2689 if ( GetGame().IsServer() )
2690 {
2691 SetSynchDirty();
2692 }
2693 }
2694
2695 override void OnVariablesSynchronized()
2696 {
2697 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnVariablesSynchronized");
2698 super.OnVariablesSynchronized();
2699
2701 }
2702
2703 protected void OnSynchronizedClient()
2704 {
2705 //update parts
2707
2708 //update action on part
2710
2711 //update visuals (client)
2712 UpdateVisuals();
2713 }
2714
2715 //parts synchronization
2716 void RegisterPartForSync( int part_id )
2717 {
2718 //part_id must starts from index = 1
2719 int offset;
2720 int mask;
2721
2722 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2723 {
2724 offset = part_id - 1;
2725 mask = 1 << offset;
2726
2727 m_SyncParts01 = m_SyncParts01 | mask;
2728 }
2729 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2730 {
2731 offset = ( part_id % 32 );
2732 mask = 1 << offset;
2733
2734 m_SyncParts02 = m_SyncParts02 | mask;
2735 }
2736 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2737 {
2738 offset = ( part_id % 63 );
2739 mask = 1 << offset;
2740
2741 m_SyncParts03 = m_SyncParts03 | mask;
2742 }
2743 }
2744
2745 void UnregisterPartForSync( int part_id )
2746 {
2747 //part_id must starts from index = 1
2748 int offset;
2749 int mask;
2750
2751 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2752 {
2753 offset = part_id - 1;
2754 mask = 1 << offset;
2755
2756 m_SyncParts01 = m_SyncParts01 & ~mask;
2757 }
2758 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2759 {
2760 offset = ( part_id % 32 );
2761 mask = 1 << offset;
2762
2763 m_SyncParts02 = m_SyncParts02 & ~mask;
2764 }
2765 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2766 {
2767 offset = ( part_id % 63 );
2768 mask = 1 << offset;
2769
2770 m_SyncParts03 = m_SyncParts03 & ~mask;
2771 }
2772 }
2773
2774 bool IsPartBuildInSyncData( int part_id )
2775 {
2776 //part_id must starts from index = 1
2777 int offset;
2778 int mask;
2779
2780 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2781 {
2782 offset = part_id - 1;
2783 mask = 1 << offset;
2784
2785 if ( ( m_SyncParts01 & mask ) > 0 )
2786 {
2787 return true;
2788 }
2789 }
2790 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2791 {
2792 offset = ( part_id % 32 );
2793 mask = 1 << offset;
2794
2795 if ( ( m_SyncParts02 & mask ) > 0 )
2796 {
2797 return true;
2798 }
2799 }
2800 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2801 {
2802 offset = ( part_id % 63 );
2803 mask = 1 << offset;
2804
2805 if ( ( m_SyncParts03 & mask ) > 0 )
2806 {
2807 return true;
2808 }
2809 }
2810
2811 return false;
2812 }
2813
2814 protected void RegisterActionForSync( int part_id, int action_id )
2815 {
2816 m_InteractedPartId = part_id;
2817 m_PerformedActionId = action_id;
2818 }
2819
2820 protected void ResetActionSyncData()
2821 {
2822 //reset data
2823 m_InteractedPartId = -1;
2825 }
2826
2827 protected void SetActionFromSyncData()
2828 {
2829 if ( m_InteractedPartId > -1 && m_PerformedActionId > -1 )
2830 {
2832 int build_action_id = m_PerformedActionId;
2833
2834 switch( build_action_id )
2835 {
2836 case AT_BUILD_PART : OnPartBuiltClient( constrution_part.GetPartName(), build_action_id ); break;
2837 case AT_DISMANTLE_PART : OnPartDismantledClient( constrution_part.GetPartName(), build_action_id ); break;
2838 case AT_DESTROY_PART : OnPartDestroyedClient( constrution_part.GetPartName(), build_action_id ); break;
2839 }
2840 }
2841 }
2842 //------
2843
2845 {
2846 string key = part.m_PartName;
2847 bool is_base = part.IsBase();
2848 bool is_part_built_sync = IsPartBuildInSyncData( part.GetId() );
2849 bsbDebugSpam("[bsb] " + GetDebugName(this) + " SetPartFromSyncData try to sync: built=" + is_part_built_sync + " key=" + key + " part=" + part.GetPartName() + " part_built=" + part.IsBuilt());
2850 if ( is_part_built_sync )
2851 {
2852 if ( !part.IsBuilt() )
2853 {
2854 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData +++ " + key);
2855 GetConstruction().AddToConstructedParts( key );
2856 GetConstruction().ShowConstructionPartPhysics(part.GetPartName());
2857
2858 if (is_base)
2859 {
2861 RemoveProxyPhysics( ANIMATION_DEPLOYED );
2862 }
2863 }
2864 }
2865 else
2866 {
2867 if ( part.IsBuilt() )
2868 {
2869 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData --- " + key);
2870 GetConstruction().RemoveFromConstructedParts( key );
2871 GetConstruction().HideConstructionPartPhysics(part.GetPartName());
2872
2873 if (is_base)
2874 {
2876 AddProxyPhysics( ANIMATION_DEPLOYED );
2877 }
2878 }
2879 }
2880
2881 //check slot lock for material attachments
2882 GetConstruction().SetLockOnAttachedMaterials( part.GetPartName(), part.IsBuilt() ); //failsafe for corrupted sync/storage data
2883 }
2884
2885 //set construction parts based on synchronized data
2887 {
2888 Construction construction = GetConstruction();
2889 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
2890
2891 for ( int i = 0; i < construction_parts.Count(); ++i )
2892 {
2893 string key = construction_parts.GetKey( i );
2894 ConstructionPart value = construction_parts.Get( key );
2895 SetPartFromSyncData(value);
2896 }
2897
2898 //regenerate navmesh
2899 UpdateNavmesh();
2900 }
2901
2902 protected ConstructionPart GetConstructionPartById( int id )
2903 {
2904 Construction construction = GetConstruction();
2905 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
2906
2907 for ( int i = 0; i < construction_parts.Count(); ++i )
2908 {
2909 string key = construction_parts.GetKey( i );
2910 ConstructionPart value = construction_parts.Get( key );
2911
2912 if ( value.GetId() == id )
2913 {
2914 return value;
2915 }
2916 }
2917
2918 return NULL;
2919 }
2920 //
2921
2922 //Base
2923 bool HasBase()
2924 {
2925 return m_HasBase;
2926 }
2927
2928 void SetBaseState( bool has_base )
2929 {
2930 m_HasBase = has_base;
2931 }
2932
2933 override bool IsDeployable()
2934 {
2935 return true;
2936 }
2937
2938 bool IsOpened()
2939 {
2940 return false;
2941 }
2942
2943 //--- CONSTRUCTION KIT
2945 {
2946 ItemBase construction_kit = ItemBase.Cast( GetGame().CreateObjectEx( GetConstructionKitType(), GetKitSpawnPosition(), ECE_PLACE_ON_SURFACE ) );
2947 if ( m_ConstructionKitHealth > 0 )
2948 {
2949 construction_kit.SetHealth( m_ConstructionKitHealth );
2950 }
2951
2952 return construction_kit;
2953 }
2954
2955 void CreateConstructionKitInHands(notnull PlayerBase player)
2956 {
2957 ItemBase construction_kit = ItemBase.Cast(player.GetHumanInventory().CreateInHands(GetConstructionKitType()));
2958 if ( m_ConstructionKitHealth > 0 )
2959 {
2960 construction_kit.SetHealth( m_ConstructionKitHealth );
2961 }
2962 }
2963
2964 protected vector GetKitSpawnPosition()
2965 {
2966 return GetPosition();
2967 }
2968
2969 protected string GetConstructionKitType()
2970 {
2971 return "";
2972 }
2973
2974 void DestroyConstructionKit( ItemBase construction_kit )
2975 {
2976 m_ConstructionKitHealth = construction_kit.GetHealth();
2977 GetGame().ObjectDelete( construction_kit );
2978 }
2979
2980 //--- CONSTRUCTION
2981 void DestroyConstruction()
2982 {
2983 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " DestroyConstruction");
2984 GetGame().ObjectDelete( this );
2985 }
2986
2987 // --- EVENTS
2988 override void OnStoreSave( ParamsWriteContext ctx )
2989 {
2990 super.OnStoreSave( ctx );
2991
2992 //sync parts 01
2993 ctx.Write( m_SyncParts01 );
2994 ctx.Write( m_SyncParts02 );
2995 ctx.Write( m_SyncParts03 );
2996
2997 ctx.Write( m_HasBase );
2998 }
2999
3000 override bool OnStoreLoad( ParamsReadContext ctx, int version )
3001 {
3002 if ( !super.OnStoreLoad( ctx, version ) )
3003 return false;
3004
3005 //--- Base building data ---
3006 //Restore synced parts data
3007 if ( !ctx.Read( m_SyncParts01 ) )
3008 {
3009 m_SyncParts01 = 0; //set default
3010 return false;
3011 }
3012 if ( !ctx.Read( m_SyncParts02 ) )
3013 {
3014 m_SyncParts02 = 0; //set default
3015 return false;
3016 }
3017 if ( !ctx.Read( m_SyncParts03 ) )
3018 {
3019 m_SyncParts03 = 0; //set default
3020 return false;
3021 }
3022
3023 //has base
3024 if ( !ctx.Read( m_HasBase ) )
3025 {
3026 m_HasBase = false;
3027 return false;
3028 }
3029 //---
3030
3031 return true;
3032 }
3033
3034 override void AfterStoreLoad()
3035 {
3036 super.AfterStoreLoad();
3037
3039 {
3041 }
3042 }
3043
3045 {
3046 //update server data
3048
3049 //set base state
3050 ConstructionPart construction_part = GetConstruction().GetBaseConstructionPart();
3051 SetBaseState( construction_part.IsBuilt() ) ;
3052
3053 //synchronize after load
3055 }
3056
3057 override void OnCreatePhysics()
3058 {
3059 super.OnCreatePhysics();
3062 }
3063
3064 override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
3065 {
3067 return;
3068
3069 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
3070
3071 if (GetGame().IsMultiplayer() && !GetGame().IsServer())
3072 return;
3073
3074 Construction construction = GetConstruction();
3075 string part_name = zone;
3076 part_name.ToLower();
3077
3078 if ( newLevel == GameConstants.STATE_RUINED )
3079 {
3080 ConstructionPart construction_part = construction.GetConstructionPart( part_name );
3081
3082 if ( construction_part && construction.IsPartConstructed( part_name ) )
3083 {
3084 construction.DestroyPartServer( null, part_name, AT_DESTROY_PART );
3085 construction.DestroyConnectedParts(part_name);
3086 }
3087
3088 //barbed wire handling (hack-ish)
3089 if ( part_name.Contains("barbed") )
3090 {
3091 BarbedWire barbed_wire = BarbedWire.Cast( FindAttachmentBySlotName( zone ) );
3092 if (barbed_wire)
3093 barbed_wire.SetMountedState( false );
3094 }
3095 }
3096 }
3097
3098 override void EEOnAfterLoad()
3099 {
3101 {
3103 }
3104
3105 super.EEOnAfterLoad();
3106 }
3107
3108 override void EEInit()
3109 {
3110 super.EEInit();
3111
3112 // init visuals and physics
3113 InitBaseState();
3114
3115 //debug
3116 #ifdef DEVELOPER
3118 #endif
3119 }
3120
3121 override void EEItemAttached( EntityAI item, string slot_name )
3122 {
3123 super.EEItemAttached( item, slot_name );
3124
3125 CheckForHybridAttachments( item, slot_name );
3126 UpdateVisuals();
3127 UpdateAttachmentPhysics( slot_name, false );
3128 }
3129
3130 override void EEItemDetached( EntityAI item, string slot_name )
3131 {
3132 super.EEItemDetached( item, slot_name );
3133
3134 UpdateVisuals();
3135 UpdateAttachmentPhysics( slot_name, false );
3136 }
3137
3138 protected void OnSetSlotLock( int slotId, bool locked, bool was_locked )
3139 {
3140 string slot_name = InventorySlots.GetSlotName( slotId );
3141 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint( "inv: OnSetSlotLock " + GetDebugName( this ) + " slot=" + slot_name + " locked=" + locked + " was_locked=" + was_locked );
3142
3143 UpdateAttachmentVisuals( slot_name, locked );
3144 UpdateAttachmentPhysics( slot_name, locked );
3145 }
3146
3147 //ignore out of reach condition
3148 override bool IgnoreOutOfReachCondition()
3149 {
3150 return true;
3151 }
3152
3153 //CONSTRUCTION EVENTS
3154 //Build
3155 void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
3156 {
3157 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
3158
3159 //check base state
3160 if (construtionPart.IsBase())
3161 {
3162 SetBaseState(true);
3163
3164 //spawn kit
3166 }
3167
3168 //register constructed parts for synchronization
3169 RegisterPartForSync(construtionPart.GetId());
3170
3171 //register action that was performed on part
3172 RegisterActionForSync(construtionPart.GetId(), action_id);
3173
3174 //synchronize
3176
3177 SetPartFromSyncData(construtionPart); // server part of sync, client will be synced from SetPartsFromSyncData
3178
3179 UpdateNavmesh();
3180
3181 //update visuals
3182 UpdateVisuals();
3183
3184 //reset action sync data
3186 }
3187
3188 void OnPartBuiltClient(string part_name, int action_id)
3189 {
3190 //play sound
3191 SoundBuildStart( part_name );
3192 }
3193
3194 //Dismantle
3195 void OnPartDismantledServer(notnull Man player, string part_name, int action_id)
3196 {
3197 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDismantledServer " + part_name);
3198 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
3199
3200 //register constructed parts for synchronization
3201 UnregisterPartForSync(construtionPart.GetId());
3202
3203 //register action that was performed on part
3204 RegisterActionForSync(construtionPart.GetId(), action_id);
3205
3206 //synchronize
3208
3209 // server part of sync, client will be synced from SetPartsFromSyncData
3210 SetPartFromSyncData(construtionPart);
3211
3212 UpdateNavmesh();
3213
3214 //update visuals
3215 UpdateVisuals();
3216
3217 //reset action sync data
3219
3220 //check base state
3221 if (construtionPart.IsBase())
3222 {
3223 //Destroy construction
3225 }
3226 }
3227
3228 void OnPartDismantledClient( string part_name, int action_id )
3229 {
3230 //play sound
3231 SoundDismantleStart( part_name );
3232 }
3233
3234 //Destroy
3235 void OnPartDestroyedServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part = false)
3236 {
3237 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDestroyedServer " + part_name);
3238 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
3239
3240 //register constructed parts for synchronization
3241 UnregisterPartForSync(construtionPart.GetId());
3242
3243 //register action that was performed on part
3244 RegisterActionForSync(construtionPart.GetId(), action_id);
3245
3246 //synchronize
3248
3249 // server part of sync, client will be synced from SetPartsFromSyncData
3250 SetPartFromSyncData(construtionPart);
3251
3252 UpdateNavmesh();
3253
3254 //update visuals
3255 UpdateVisuals();
3256
3257 //reset action sync data
3259
3260 //check base state
3261 if (construtionPart.IsBase())
3262 {
3263 //Destroy construction
3265 }
3266 }
3267
3268 void OnPartDestroyedClient( string part_name, int action_id )
3269 {
3270 //play sound
3271 SoundDestroyStart( part_name );
3272 }
3273
3275 protected void HandleItemFalling(ConstructionPart part)
3276 {
3277 bool process = false;
3278
3279 //TODO: add a parameter to parts' config classes?
3280 process |= part.m_PartName.Contains("_roof");
3281 process |= part.m_PartName.Contains("_platform");
3282 process |= part.m_PartName.Contains("_stair");
3283
3284 if (process)
3285 {
3286 if (!MemoryPointExists(part.m_PartName + "_min") || !MemoryPointExists(part.m_PartName + "_max"))
3287 {
3288 Debug.Log("min/max memory points do not exist for part: " + part.m_PartName);
3289 return;
3290 }
3291
3292 vector mins, maxs;
3293 mins = ModelToWorld(GetMemoryPointPos(part.m_PartName + "_min"));
3294 maxs = ModelToWorld(GetMemoryPointPos(part.m_PartName + "_max"));
3295
3296 //sanitize minmaxs
3297 vector minTmp, maxTmp;
3298 minTmp[0] = Math.Min(mins[0],maxs[0]);
3299 maxTmp[0] = Math.Max(mins[0],maxs[0]);
3300 minTmp[1] = Math.Min(mins[1],maxs[1]);
3301 maxTmp[1] = Math.Max(mins[1],maxs[1]);
3302 minTmp[2] = Math.Min(mins[2],maxs[2]);
3303 maxTmp[2] = Math.Max(mins[2],maxs[2]);
3304 mins = minTmp;
3305 maxs = maxTmp;
3306
3307 maxs[1] = maxs[1] + 0.35; //reach a little above..
3308
3309 ItemFall(mins,maxs);
3310 }
3311 }
3312
3314 protected void ItemFall(vector min, vector max)
3315 {
3316 array<EntityAI> foundEntities = new array<EntityAI>();
3317 DayZPlayerUtils.PhysicsGetEntitiesInBox(min,max,foundEntities);
3318
3319 //filtering
3320 ItemBase item;
3321 foreach (EntityAI entity : foundEntities)
3322 {
3323 if (Class.CastTo(item,entity) && !item.CanUseConstruction()) //BB items?
3324 item.ThrowPhysically(null,vector.Zero);
3325 }
3326 }
3327
3328 // --- UPDATE
3329 void InitBaseState()
3330 {
3331 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::InitBaseState ");
3332
3333 InitVisuals();
3334 UpdateNavmesh(); //regenerate navmesh
3335 GetConstruction().InitBaseState();
3336 }
3337
3338 void InitVisuals()
3339 {
3340 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " InitVisuals");
3341 //check base
3342 if ( !HasBase() )
3343 {
3344 SetAnimationPhase( ANIMATION_DEPLOYED, 0 );
3345 }
3346 else
3347 {
3348 SetAnimationPhase( ANIMATION_DEPLOYED, 1 );
3349 }
3350
3351 GetConstruction().UpdateVisuals();
3352 }
3353
3354 void UpdateVisuals()
3355 {
3356 array<string> attachmentSlots = new array<string>;
3357
3358 GetAttachmentSlots(this, attachmentSlots);
3359 foreach (string slotName : attachmentSlots)
3360 {
3362 }
3363
3364 //check base
3365 if (!HasBase())
3366 SetAnimationPhase(ANIMATION_DEPLOYED, 0);
3367 else
3368 SetAnimationPhase(ANIMATION_DEPLOYED, 1);
3369
3370 GetConstruction().UpdateVisuals();
3371 }
3372
3373 void UpdateAttachmentVisuals(string slot_name, bool is_locked)
3374 {
3375 string slotNameMounted = slot_name + "_Mounted";
3376 EntityAI attachment = FindAttachmentBySlotName(slot_name);
3377
3378 if (attachment)
3379 {
3380 BarbedWire barbedWire = BarbedWire.Cast(attachment);
3381 if (barbedWire && barbedWire.IsMounted())
3382 CreateAreaDamage(slotNameMounted);
3383 else
3384 DestroyAreaDamage(slotNameMounted);
3385
3386 if (is_locked)
3387 {
3388 SetAnimationPhase(slotNameMounted, 0);
3389 SetAnimationPhase(slot_name, 1);
3390 }
3391 else
3392 {
3393 SetAnimationPhase(slotNameMounted, 1);
3394 SetAnimationPhase(slot_name, 0);
3395 }
3396 }
3397 else
3398 {
3399 SetAnimationPhase(slotNameMounted, 1);
3400 SetAnimationPhase(slot_name, 1);
3401
3402 DestroyAreaDamage(slotNameMounted);
3403 }
3404 }
3405
3406 // avoid calling this function on frequent occasions, it's a massive performance hit
3407 void UpdatePhysics()
3408 {
3410 bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::UpdatePhysics");
3411
3412 array<string> attachmentSlots = new array<string>;
3413 GetAttachmentSlots(this, attachmentSlots);
3414
3416 bsbDebugPrint("[bsb] " + GetDebugName(this) + " att_cnt=" + attachmentSlots.Count());
3417
3418 foreach (string slotName : attachmentSlots)
3419 {
3421 }
3422
3423 //check base
3424 if (!HasBase())
3425 {
3427 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " ADD");
3428
3429 AddProxyPhysics(ANIMATION_DEPLOYED);
3430 }
3431 else
3432 {
3434 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " RM");
3435
3436 RemoveProxyPhysics(ANIMATION_DEPLOYED);
3437 }
3438
3439 GetConstruction().UpdatePhysics();
3440 UpdateNavmesh();
3441 }
3442
3443 void UpdateAttachmentPhysics( string slot_name, bool is_locked )
3444 {
3445 //checks for invalid appends; hotfix
3446 if ( !m_Mountables || m_Mountables.Find(slot_name) == -1 )
3447 return;
3448 //----------------------------------
3449 string slot_name_mounted = slot_name + "_Mounted";
3450 EntityAI attachment = FindAttachmentBySlotName( slot_name );
3451
3452 //remove proxy physics
3453 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Removing ATT SLOT=" + slot_name + " RM / RM");
3454 RemoveProxyPhysics( slot_name_mounted );
3455 RemoveProxyPhysics( slot_name );
3456
3457 if ( attachment )
3458 {
3459 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Adding ATT=" + Object.GetDebugName(attachment));
3460 if ( is_locked )
3461 {
3462 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " RM / RM");
3463 AddProxyPhysics( slot_name_mounted );
3464 }
3465 else
3466 {
3467 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " ADD");
3468 AddProxyPhysics( slot_name );
3469 }
3470 }
3471 }
3472
3473 protected void UpdateNavmesh()
3474 {
3475 SetAffectPathgraph( true, false );
3476 GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( GetGame().UpdatePathgraphRegionByObject, 100, false, this );
3477 }
3478
3479 override bool CanUseConstruction()
3480 {
3481 return true;
3482 }
3483
3484 override bool CanUseConstructionBuild()
3485 {
3486 return true;
3487 }
3488
3489 protected bool IsAttachmentSlotLocked( EntityAI attachment )
3490 {
3491 if ( attachment )
3492 {
3493 InventoryLocation inventory_location = new InventoryLocation;
3494 attachment.GetInventory().GetCurrentInventoryLocation( inventory_location );
3495
3496 return GetInventory().GetSlotLock( inventory_location.GetSlot() );
3497 }
3498
3499 return false;
3500 }
3501
3502 protected bool IsAttachmentSlotLocked( string slot_name )
3503 {
3504 return GetInventory().GetSlotLock( InventorySlots.GetSlotIdFromString( slot_name ) );
3505 }
3506
3507 //--- ATTACHMENT SLOTS
3508 void GetAttachmentSlots( EntityAI entity, out array<string> attachment_slots )
3509 {
3510 string config_path = "CfgVehicles" + " " + entity.GetType() + " " + "attachments";
3511 if ( GetGame().ConfigIsExisting( config_path ) )
3512 {
3513 GetGame().ConfigGetTextArray( config_path, attachment_slots );
3514 }
3515 }
3516
3517 bool CheckSlotVerticalDistance( int slot_id, PlayerBase player )
3518 {
3519 return true;
3520 }
3521
3522 protected bool CheckMemoryPointVerticalDistance( float max_dist, string selection, PlayerBase player )
3523 {
3524 return true;
3525 }
3526
3527 protected bool CheckLevelVerticalDistance( float max_dist, string selection, PlayerBase player )
3528 {
3529 return true;
3530 }
3531
3532 // --- INIT
3533 void ConstructionInit()
3534 {
3535 if ( !m_Construction )
3536 {
3537 m_Construction = new Construction( this );
3538 }
3539
3540 GetConstruction().Init();
3541 }
3542
3544 {
3545 return m_Construction;
3546 }
3547
3548 //--- INVENTORY/ATTACHMENTS CONDITIONS
3549 //attachments
3550 override bool CanReceiveAttachment( EntityAI attachment, int slotId )
3551 {
3552 return super.CanReceiveAttachment(attachment, slotId);
3553 }
3554
3556 {
3557 int attachment_count = GetInventory().AttachmentCount();
3558 if ( attachment_count > 0 )
3559 {
3560 if ( HasBase() && attachment_count == 1 )
3561 {
3562 return false;
3563 }
3564
3565 return true;
3566 }
3567
3568 return false;
3569 }
3570
3571 override bool ShowZonesHealth()
3572 {
3573 return true;
3574 }
3575
3576 override bool IsTakeable()
3577 {
3578 return false;
3579 }
3580
3581 //this into/outo parent.Cargo
3582 override bool CanPutInCargo( EntityAI parent )
3583 {
3584 return false;
3585 }
3586
3587 override bool CanRemoveFromCargo( EntityAI parent )
3588 {
3589 return false;
3590 }
3591
3592 //hands
3593 override bool CanPutIntoHands( EntityAI parent )
3594 {
3595 return false;
3596 }
3597
3598 //--- ACTION CONDITIONS
3599 //direction
3600 override bool IsFacingPlayer( PlayerBase player, string selection )
3601 {
3602 return true;
3603 }
3604
3605 override bool IsPlayerInside( PlayerBase player, string selection )
3606 {
3607 return true;
3608 }
3609
3612 {
3613 return false;
3614 }
3615
3616 //camera direction check
3617 bool IsFacingCamera( string selection )
3618 {
3619 return true;
3620 }
3621
3622 //roof check
3623 bool PerformRoofCheckForBase( string partName, PlayerBase player, out bool result )
3624 {
3625 return false;
3626 }
3627
3628 //selection->player distance check
3629 bool HasProperDistance( string selection, PlayerBase player )
3630 {
3631 return true;
3632 }
3633
3634 //folding
3636 {
3637 if ( HasBase() || GetInventory().AttachmentCount() > 0 )
3638 {
3639 return false;
3640 }
3641
3642 return true;
3643 }
3644
3646 {
3649
3650 return item;
3651 }
3652
3653 //Damage triggers (barbed wire)
3654 void CreateAreaDamage( string slot_name, float rotation_angle = 0 )
3655 {
3656 if ( GetGame() && GetGame().IsServer() )
3657 {
3658 //destroy area damage if some already exists
3659 DestroyAreaDamage( slot_name );
3660
3661 //create new area damage
3663 areaDamage.SetDamageComponentType(AreaDamageComponentTypes.HITZONE);
3664
3665 vector min_max[2];
3666 if ( MemoryPointExists( slot_name + "_min" ) )
3667 {
3668 min_max[0] = GetMemoryPointPos( slot_name + "_min" );
3669 }
3670 if ( MemoryPointExists( slot_name + "_max" ) )
3671 {
3672 min_max[1] = GetMemoryPointPos( slot_name + "_max" );
3673 }
3674
3675 //get proper trigger extents (min<max)
3676 vector extents[2];
3677 GetConstruction().GetTriggerExtents( min_max, extents );
3678
3679 //get box center
3680 vector center;
3681 center = GetConstruction().GetBoxCenter( min_max );
3682 center = ModelToWorld( center );
3683
3684 //rotate center if needed
3685 vector orientation = GetOrientation();;
3686 CalcDamageAreaRotation( rotation_angle, center, orientation );
3687
3688 areaDamage.SetExtents( extents[0], extents[1] );
3689 areaDamage.SetAreaPosition( center );
3690 areaDamage.SetAreaOrientation( orientation );
3691 areaDamage.SetLoopInterval( 1.0 );
3692 areaDamage.SetDeferDuration( 0.2 );
3693 areaDamage.SetHitZones( { "Torso","LeftHand","LeftLeg","LeftFoot","RightHand","RightLeg","RightFoot" } );
3694 areaDamage.SetAmmoName( "BarbedWireHit" );
3695 areaDamage.Spawn();
3696
3697 m_DamageTriggers.Insert( slot_name, areaDamage );
3698 }
3699 }
3700
3701 void CalcDamageAreaRotation( float angle_deg, out vector center, out vector orientation )
3702 {
3703 if ( angle_deg != 0 )
3704 {
3705 //orientation
3706 orientation[0] = orientation[0] - angle_deg;
3707
3708 //center
3709 vector rotate_axis;
3710 if ( MemoryPointExists( "rotate_axis" ) )
3711 {
3712 rotate_axis = ModelToWorld( GetMemoryPointPos( "rotate_axis" ) );
3713 }
3714 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];
3715 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];
3716 center[0] = r_center_x;
3717 center[2] = r_center_z;
3718 }
3719 }
3720
3721 void DestroyAreaDamage( string slot_name )
3722 {
3723 if (GetGame() && GetGame().IsServer())
3724 {
3726 if (m_DamageTriggers.Find(slot_name, areaDamage))
3727 {
3728 if (areaDamage)
3729 {
3730 areaDamage.Destroy();
3731 }
3732
3733 m_DamageTriggers.Remove( slot_name );
3734 }
3735 }
3736 }
3737
3738 override bool IsIgnoredByConstruction()
3739 {
3740 return true;
3741 }
3742
3743 //================================================================
3744 // SOUNDS
3745 //================================================================
3746 protected void SoundBuildStart( string part_name )
3747 {
3748 PlaySoundSet( m_Sound, GetBuildSoundByMaterial( part_name ), 0.1, 0.1 );
3749 }
3750
3751 protected void SoundDismantleStart( string part_name )
3752 {
3753 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
3754 }
3755
3756 protected void SoundDestroyStart( string part_name )
3757 {
3758 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
3759 }
3760
3761 protected string GetBuildSoundByMaterial( string part_name )
3762 {
3763 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
3764
3765 switch ( material_type )
3766 {
3767 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_BUILD_WOOD_LOG;
3768 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_BUILD_WOOD_PLANK;
3769 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_BUILD_WOOD_STAIRS;
3770 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_BUILD_METAL;
3771 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_BUILD_WIRE;
3772 }
3773
3774 return "";
3775 }
3776
3777 protected string GetDismantleSoundByMaterial( string part_name )
3778 {
3779 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
3780
3781 switch ( material_type )
3782 {
3783 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_DISMANTLE_WOOD_LOG;
3784 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_DISMANTLE_WOOD_PLANK;
3785 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_DISMANTLE_WOOD_STAIRS;
3786 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_DISMANTLE_METAL;
3787 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_DISMANTLE_WIRE;
3788 }
3789
3790 return "";
3791 }
3792
3793 //misc
3794 void CheckForHybridAttachments( EntityAI item, string slot_name )
3795 {
3796 if (!GetGame().IsMultiplayer() || GetGame().IsServer())
3797 {
3798 //if this is a hybrid attachment, set damage of appropriate damage zone. Zone name must match slot name...WIP
3799 if (m_HybridAttachments && m_HybridAttachments.Find(slot_name) != -1)
3800 {
3801 SetHealth(slot_name,"Health",item.GetHealth());
3802 }
3803 }
3804 }
3805
3806 override int GetDamageSystemVersionChange()
3807 {
3808 return 111;
3809 }
3810
3811 override void SetActions()
3812 {
3813 super.SetActions();
3814
3818 }
3819
3820 //================================================================
3821 // DEBUG
3822 //================================================================
3823 protected void DebugCustomState()
3824 {
3825 }
3826
3829 {
3830 return null;
3831 }
3832
3833 override void OnDebugSpawn()
3834 {
3835 FullyBuild();
3836 }
3837
3838 void FullyBuild()
3839 {
3841 array<ConstructionPart> parts = GetConstruction().GetConstructionParts().GetValueArray();
3842
3843 Man p;
3844
3845 #ifdef SERVER
3846 array<Man> players = new array<Man>;
3847 GetGame().GetWorld().GetPlayerList(players);
3848 if (players.Count())
3849 p = players[0];
3850 #else
3851 p = GetGame().GetPlayer();
3852 #endif
3853
3854 foreach (ConstructionPart part : parts)
3855 {
3856 bool excluded = false;
3857 string partName = part.GetPartName();
3858 if (excludes)
3859 {
3860 foreach (string exclude : excludes)
3861 {
3862 if (partName.Contains(exclude))
3863 {
3864 excluded = true;
3865 break;
3866 }
3867 }
3868 }
3869
3870 if (!excluded)
3871 {
3872 OnPartBuiltServer(p, partName, AT_BUILD_PART);
3873 }
3874 }
3875
3876 GetConstruction().UpdateVisuals();
3877 }
3878}
3879
3880void bsbDebugPrint (string s)
3881{
3882#ifdef BSB_DEBUG
3883 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
3884#else
3885 //Print("" + s); // comment/uncomment to hide/see debug logs
3886#endif
3887}
3888void bsbDebugSpam (string s)
3889{
3890#ifdef BSB_DEBUG_SPAM
3891 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
3892#else
3893 //Print("" + s); // comment/uncomment to hide/see debug logs
3894#endif
3895}
const int AT_DISMANTLE_PART
const int AT_DESTROY_PART
const int AT_BUILD_PART
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:1969
const string ANIMATION_DEPLOYED
Определения BaseBuildingBase.c:1313
override int GetHideIconMask()
Определения BaseBuildingBase.c:1398
override void OnStoreSave(ParamsWriteContext ctx)
Определения BaseBuildingBase.c:1729
void FullyBuild()
Определения BaseBuildingBase.c:2579
void UpdateVisuals()
Определения BaseBuildingBase.c:2095
void SetActionFromSyncData()
Определения BaseBuildingBase.c:1568
int m_SyncParts01
Определения BaseBuildingBase.c:1321
void UpdateNavmesh()
Определения BaseBuildingBase.c:2214
bool CheckMemoryPointVerticalDistance(float max_dist, string selection, PlayerBase player)
Определения BaseBuildingBase.c:2263
override void OnDebugSpawn()
Определения BaseBuildingBase.c:2574
array< string > OnDebugSpawnBuildExcludes()
Excludes certain parts from being built by OnDebugSpawn, uses Contains to compare.
Определения BaseBuildingBase.c:2569
void SoundDestroyStart(string part_name)
Определения BaseBuildingBase.c:2497
const string SOUND_BUILD_WOOD_LOG
Определения BaseBuildingBase.c:1329
void SoundBuildStart(string part_name)
Определения BaseBuildingBase.c:2487
void UpdateAttachmentVisuals(string slot_name, bool is_locked)
Определения BaseBuildingBase.c:2114
void CalcDamageAreaRotation(float angle_deg, out vector center, out vector orientation)
Определения BaseBuildingBase.c:2442
override bool CanObstruct()
Определения BaseBuildingBase.c:1393
bool HasAttachmentsBesidesBase()
Определения BaseBuildingBase.c:2296
override void InitItemSounds()
Определения BaseBuildingBase.c:1403
void RegisterPartForSync(int part_id)
Определения BaseBuildingBase.c:1457
const string SOUND_DISMANTLE_METAL
Определения BaseBuildingBase.c:1338
void InitBaseState()
Определения BaseBuildingBase.c:2070
override bool CanReceiveAttachment(EntityAI attachment, int slotId)
Определения BaseBuildingBase.c:2291
void BaseBuildingBase()
Определения BaseBuildingBase.c:1348
void SetPartsAfterStoreLoad()
Определения BaseBuildingBase.c:1785
void DestroyConstruction()
Определения BaseBuildingBase.c:1722
ref array< string > m_HybridAttachments
Определения BaseBuildingBase.c:1344
int m_InteractedPartId
Определения BaseBuildingBase.c:1324
override string GetFoldSoundset()
Определения BaseBuildingBase.c:1417
bool m_HasBase
Определения BaseBuildingBase.c:1319
string GetDismantleSoundByMaterial(string part_name)
Определения BaseBuildingBase.c:2518
bool IsAttachmentSlotLocked(EntityAI attachment)
Определения BaseBuildingBase.c:2230
void UpdatePhysics()
Определения BaseBuildingBase.c:2148
override bool IsFacingPlayer(PlayerBase player, string selection)
Определения BaseBuildingBase.c:2341
void OnPartBuiltClient(string part_name, int action_id)
Определения BaseBuildingBase.c:1929
bool HasProperDistance(string selection, PlayerBase player)
Определения BaseBuildingBase.c:2370
override void OnCreatePhysics()
Определения BaseBuildingBase.c:1798
void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
Определения BaseBuildingBase.c:1896
void RegisterActionForSync(int part_id, int action_id)
Определения BaseBuildingBase.c:1555
const string SOUND_BUILD_WOOD_PLANK
Определения BaseBuildingBase.c:1330
void SetPartsFromSyncData()
Определения BaseBuildingBase.c:1627
ref array< string > m_Mountables
Определения BaseBuildingBase.c:1345
const string SOUND_BUILD_WIRE
Определения BaseBuildingBase.c:1333
int m_SyncParts03
Определения BaseBuildingBase.c:1323
void ResetActionSyncData()
Определения BaseBuildingBase.c:1561
override string GetInvulnerabilityTypeString()
Определения BaseBuildingBase.c:1388
void OnPartDismantledServer(notnull Man player, string part_name, int action_id)
Определения BaseBuildingBase.c:1936
void CheckForHybridAttachments(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:2535
override void EEOnAfterLoad()
Определения BaseBuildingBase.c:1839
override void EEItemDetached(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:1871
vector GetKitSpawnPosition()
Определения BaseBuildingBase.c:1705
ref Construction m_Construction
Определения BaseBuildingBase.c:1317
bool IsFacingCamera(string selection)
Определения BaseBuildingBase.c:2358
bool CheckSlotVerticalDistance(int slot_id, PlayerBase player)
Определения BaseBuildingBase.c:2258
void GetAttachmentSlots(EntityAI entity, out array< string > attachment_slots)
Определения BaseBuildingBase.c:2249
override bool IsDeployable()
Определения BaseBuildingBase.c:1674
void OnPartDestroyedClient(string part_name, int action_id)
Определения BaseBuildingBase.c:2009
override void EEInit()
Определения BaseBuildingBase.c:1849
void UnregisterPartForSync(int part_id)
Определения BaseBuildingBase.c:1486
void bsbDebugSpam(string s)
Определения BaseBuildingBase.c:1320
override void OnVariablesSynchronized()
Определения BaseBuildingBase.c:1436
bool PerformRoofCheckForBase(string partName, PlayerBase player, out bool result)
Определения BaseBuildingBase.c:2364
Construction GetConstruction()
Определения BaseBuildingBase.c:2284
void SoundDismantleStart(string part_name)
Определения BaseBuildingBase.c:2492
void DebugCustomState()
Определения BaseBuildingBase.c:2564
ConstructionPart GetConstructionPartById(int id)
Определения BaseBuildingBase.c:1643
string GetConstructionKitType()
Определения BaseBuildingBase.c:1710
bool CheckLevelVerticalDistance(float max_dist, string selection, PlayerBase player)
Определения BaseBuildingBase.c:2268
void OnPartDestroyedServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part=false)
Определения BaseBuildingBase.c:1976
bool CanFoldBaseBuildingObject()
Определения BaseBuildingBase.c:2376
override int GetDamageSystemVersionChange()
Определения BaseBuildingBase.c:2547
const string SOUND_DISMANTLE_WOOD_PLANK
Определения BaseBuildingBase.c:1336
override void EEItemAttached(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:1862
const string SOUND_DISMANTLE_WOOD_LOG
Определения BaseBuildingBase.c:1335
void InitVisuals()
Определения BaseBuildingBase.c:2079
class BaseBuildingBase extends ItemBase bsbDebugPrint(string s)
Определения BaseBuildingBase.c:1312
const string SOUND_BUILD_WOOD_STAIRS
Определения BaseBuildingBase.c:1331
ItemBase FoldBaseBuildingObject()
Определения BaseBuildingBase.c:2386
override bool CanPutInCargo(EntityAI parent)
Определения BaseBuildingBase.c:2323
override bool CanUseConstruction()
Определения BaseBuildingBase.c:2220
override void AfterStoreLoad()
Определения BaseBuildingBase.c:1775
void SetPartFromSyncData(ConstructionPart part)
Определения BaseBuildingBase.c:1585
override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
Определения BaseBuildingBase.c:1805
override bool IgnoreOutOfReachCondition()
Определения BaseBuildingBase.c:1889
override bool OnStoreLoad(ParamsReadContext ctx, int version)
Определения BaseBuildingBase.c:1741
override bool ShowZonesHealth()
Определения BaseBuildingBase.c:2312
void UpdateAttachmentPhysics(string slot_name, bool is_locked)
Определения BaseBuildingBase.c:2184
override bool IsPlayerInside(PlayerBase player, string selection)
Определения BaseBuildingBase.c:2346
string GetBuildSoundByMaterial(string part_name)
Определения BaseBuildingBase.c:2502
ItemBase CreateConstructionKit()
Определения BaseBuildingBase.c:1685
const string SOUND_DISMANTLE_WIRE
Определения BaseBuildingBase.c:1339
bool MustBeBuiltFromOutside()
Some buildings can only be built from outside.
Определения BaseBuildingBase.c:2352
override bool IsTakeable()
Определения BaseBuildingBase.c:2317
float m_ConstructionKitHealth
Определения BaseBuildingBase.c:1315
override void EEDelete(EntityAI parent)
Определения BaseBuildingBase.c:1377
override void SetActions()
Определения BaseBuildingBase.c:2552
void HandleItemFalling(ConstructionPart part)
Disconnected temporarily.
Определения BaseBuildingBase.c:2016
void DestroyConstructionKit(ItemBase construction_kit)
Определения BaseBuildingBase.c:1715
void CreateConstructionKitInHands(notnull PlayerBase player)
Определения BaseBuildingBase.c:1696
bool IsOpened()
Определения BaseBuildingBase.c:1679
void ItemFall(vector min, vector max)
Disconnected temporarily.
Определения BaseBuildingBase.c:2055
int m_PerformedActionId
Определения BaseBuildingBase.c:1325
override bool CanUseConstructionBuild()
Определения BaseBuildingBase.c:2225
bool HasBase()
Определения BaseBuildingBase.c:1664
void OnSynchronizedClient()
Определения BaseBuildingBase.c:1444
void SynchronizeBaseState()
Определения BaseBuildingBase.c:1428
override bool IsIgnoredByConstruction()
Определения BaseBuildingBase.c:2479
ref map< string, ref AreaDamageManager > m_DamageTriggers
Определения BaseBuildingBase.c:1343
void SetBaseState(bool has_base)
Определения BaseBuildingBase.c:1669
const string SOUND_BUILD_METAL
Определения BaseBuildingBase.c:1332
override string GetLoopFoldSoundset()
Определения BaseBuildingBase.c:1422
void OnSetSlotLock(int slotId, bool locked, bool was_locked)
Определения BaseBuildingBase.c:1879
override bool CanPutIntoHands(EntityAI parent)
Определения BaseBuildingBase.c:2334
bool IsPartBuildInSyncData(int part_id)
Определения BaseBuildingBase.c:1515
override bool CanRemoveFromCargo(EntityAI parent)
Определения BaseBuildingBase.c:2328
void ConstructionInit()
Определения BaseBuildingBase.c:2274
int m_SyncParts02
Определения BaseBuildingBase.c:1322
const string SOUND_DISMANTLE_WOOD_STAIRS
Определения BaseBuildingBase.c:1337
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:2345
void CreateAreaDamage()
Определения FireplaceBase.c:2329
Empty
Определения Hand_States.c:14
EffectSound m_Sound
Определения HungerSoundHandler.c:18
string GetFoldSoundset()
Определения BaseBuildingBase.c:1417
string GetLoopFoldSoundset()
Определения BaseBuildingBase.c:1422
ItemSoundHandler GetItemSoundHandler()
Определения ItemBase.c:9229
bool m_FixDamageSystemInit
Определения ItemBase.c:4907
void ItemSoundHandler(ItemBase parent)
Определения ItemSoundHandler.c:31
Определения 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.
Определения 3_Game/tools/Debug.c:122
Определения 3_Game/tools/Debug.c:2
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
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:911
static bool IsBaseBuildingLogEnable()
Определения 3_Game/tools/Debug.c:698
Определения 3_Game/tools/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)
bool m_Loop
Определения ItemSoundHandler.c:5
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
Определения 3_Game/constants.c:848
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
Определения 3_Game/tools/tools.c:10
const int CALL_CATEGORY_SYSTEM
Определения 3_Game/tools/tools.c:8