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

◆ GetBuildSoundByMaterial()

string bsbDebugPrint::GetBuildSoundByMaterial ( string part_name)
protected

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

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