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

◆ GetDismantleSoundByMaterial()

string bsbDebugPrint::GetDismantleSoundByMaterial ( string part_name)
protected

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

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

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