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

◆ GetDamageSystemVersionChange()

override int bsbDebugPrint::GetDamageSystemVersionChange ( )
protected

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

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