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

◆ IsIgnoredByConstruction()

override bool bsbDebugPrint::IsIgnoredByConstruction ( )
protected

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

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