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

◆ CanPutIntoHands()

override bool bsbDebugPrint::CanPutIntoHands ( EntityAI parent)
protected

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

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