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

◆ HasProperDistance()

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

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

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