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

◆ GetDamageSystemVersionChange()

override int bsbDebugPrint::GetDamageSystemVersionChange ( )
protected

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

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