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

◆ HasProperDistance()

bool bsbDebugPrint::HasProperDistance ( string selection,
PlayerBase player )
protected

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

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