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

◆ SoundDestroyStart()

void bsbDebugPrint::SoundDestroyStart ( string part_name)
protected

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

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