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

◆ CreateAreaDamage()

void bsbDebugPrint::CreateAreaDamage ( string slot_name,
float rotation_angle = 0 )
protected

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

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