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

◆ IsPlayerInside()

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

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

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