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

◆ DestroyAreaDamage()

void bsbDebugPrint::DestroyAreaDamage ( string slot_name)
protected

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

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