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

◆ GetDismantleSoundByMaterial()

string bsbDebugPrint::GetDismantleSoundByMaterial ( string part_name)
protected

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

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

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