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

◆ IsPlayerInside()

override bool bsbDebugPrint::IsPlayerInside ( PlayerBase player,
string selection )
protected

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

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