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

◆ CanRemoveFromCargo()

override bool bsbDebugPrint::CanRemoveFromCargo ( EntityAI parent)
protected

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

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