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

◆ IsFacingPlayer()

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

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

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