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

◆ DestroyAreaDamage()

void bsbDebugPrint::DestroyAreaDamage ( string slot_name)
protected

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

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