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

◆ OnDebugSpawn()

override void bsbDebugPrint::OnDebugSpawn ( )
protected

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

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