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

◆ IsPlayerInside()

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

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

2228{
2229 const string ANIMATION_DEPLOYED = "Deployed";
2230
2231 float m_ConstructionKitHealth; //stored health value for used construction kit
2232
2233 bool m_HasBase;
2234 //variables for synchronization of base building parts (2x31 is the current limit)
2235 int m_SyncParts01; //synchronization for already built parts (31 parts)
2236 int m_SyncParts02; //synchronization for already built parts (+31 parts)
2237 int m_SyncParts03; //synchronization for already built parts (+31 parts)
2238 int m_InteractedPartId; //construction part id that an action was performed on
2239 int m_PerformedActionId; //action id that was performed on a construction part
2240 protected ref ConstructionBasic m_Construction;
2241
2242 //Sounds
2243 //build
2244 const string SOUND_BUILD_WOOD_LOG = "putDown_WoodLog_SoundSet";
2245 const string SOUND_BUILD_WOOD_PLANK = "putDown_WoodPlank_SoundSet";
2246 const string SOUND_BUILD_WOOD_STAIRS = "putDown_WoodStairs_SoundSet";
2247 const string SOUND_BUILD_METAL = "putDown_MetalPlank_SoundSet";
2248 const string SOUND_BUILD_WIRE = "putDown_BarbedWire_SoundSet";
2249 //dismantle
2250 const string SOUND_DISMANTLE_WOOD_LOG = "Crash_WoodPlank_SoundSet";
2251 const string SOUND_DISMANTLE_WOOD_PLANK = "Crash_WoodPlank_SoundSet";
2252 const string SOUND_DISMANTLE_WOOD_STAIRS = "Crash_WoodPlank_SoundSet";
2253 const string SOUND_DISMANTLE_METAL = "Crash_MetalPlank_SoundSet";
2254 const string SOUND_DISMANTLE_WIRE = "putDown_BarbedWire_SoundSet";
2255
2256 protected EffectSound m_Sound;
2257
2261
2262 // Constructor
2263 void BaseBuildingBase()
2264 {
2266
2267 //synchronized variables
2268 RegisterNetSyncVariableInt( "m_SyncParts01" );
2269 RegisterNetSyncVariableInt( "m_SyncParts02" );
2270 RegisterNetSyncVariableInt( "m_SyncParts03" );
2271 RegisterNetSyncVariableInt( "m_InteractedPartId" );
2272 RegisterNetSyncVariableInt( "m_PerformedActionId" );
2273 RegisterNetSyncVariableBool( "m_HasBase" );
2274
2275 //Construction init
2276 ConstructionInit();
2277
2278 if (ConfigIsExisting("hybridAttachments"))
2279 {
2281 ConfigGetTextArray("hybridAttachments", m_HybridAttachments);
2282 }
2283 if (ConfigIsExisting("mountables"))
2284 {
2286 ConfigGetTextArray("mountables", m_Mountables);
2287 }
2288
2289 ProcessInvulnerabilityCheck(GetInvulnerabilityTypeString());
2290 SetAllowDamage(true);
2291 }
2292
2293 override string GetInvulnerabilityTypeString()
2294 {
2295 return "disableBaseDamage";
2296 }
2297
2298 override bool CanObstruct()
2299 {
2300 return true;
2301 }
2302
2303 override int GetHideIconMask()
2304 {
2305 return EInventoryIconVisibility.HIDE_VICINITY;
2306 }
2307
2308 override void InitItemSounds()
2309 {
2310 super.InitItemSounds();
2311
2313 SoundParameters params = new SoundParameters();
2314 params.m_Loop = true;
2315
2316 if (GetFoldSoundset() != string.Empty)
2317 handler.AddSound(SoundConstants.ITEM_FOLD, GetFoldSoundset());
2318 if (GetLoopFoldSoundset() != string.Empty)
2319 handler.AddSound(SoundConstants.ITEM_FOLD_LOOP, GetLoopFoldSoundset(), params);
2320 }
2321
2322 override string GetFoldSoundset()
2323 {
2324 return "putDown_FenceKit_SoundSet";
2325 }
2326
2327 override string GetLoopFoldSoundset()
2328 {
2329 return "Shelter_Site_Build_Loop_SoundSet";
2330 }
2331
2332 // --- SYNCHRONIZATION
2334 {
2335 if ( g_Game.IsServer() )
2336 {
2337 SetSynchDirty();
2338 }
2339 }
2340
2341 override void OnVariablesSynchronized()
2342 {
2343 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnVariablesSynchronized");
2344 super.OnVariablesSynchronized();
2345
2346 g_Game.GetCallQueue( CALL_CATEGORY_GAMEPLAY ).CallLater( OnSynchronizedClient, 100, false );
2347 }
2348
2349 protected void OnSynchronizedClient()
2350 {
2351 //update parts
2353
2354 //update action on part
2356
2357 //update visuals (client)
2358 UpdateVisuals();
2359 }
2360
2361 //parts synchronization
2362 void RegisterPartForSync( int part_id )
2363 {
2364 //part_id must starts from index = 1
2365 int offset;
2366 int mask;
2367
2368 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2369 {
2370 offset = part_id - 1;
2371 mask = 1 << offset;
2372
2373 m_SyncParts01 = m_SyncParts01 | mask;
2374 }
2375 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2376 {
2377 offset = ( part_id % 32 );
2378 mask = 1 << offset;
2379
2380 m_SyncParts02 = m_SyncParts02 | mask;
2381 }
2382 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2383 {
2384 offset = ( part_id % 63 );
2385 mask = 1 << offset;
2386
2387 m_SyncParts03 = m_SyncParts03 | mask;
2388 }
2389 }
2390
2391 void UnregisterPartForSync( int part_id )
2392 {
2393 //part_id must starts from index = 1
2394 int offset;
2395 int mask;
2396
2397 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2398 {
2399 offset = part_id - 1;
2400 mask = 1 << offset;
2401
2402 m_SyncParts01 = m_SyncParts01 & ~mask;
2403 }
2404 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2405 {
2406 offset = ( part_id % 32 );
2407 mask = 1 << offset;
2408
2409 m_SyncParts02 = m_SyncParts02 & ~mask;
2410 }
2411 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2412 {
2413 offset = ( part_id % 63 );
2414 mask = 1 << offset;
2415
2416 m_SyncParts03 = m_SyncParts03 & ~mask;
2417 }
2418 }
2419
2420 bool IsPartBuildInSyncData( int part_id )
2421 {
2422 //part_id must starts from index = 1
2423 int offset;
2424 int mask;
2425
2426 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2427 {
2428 offset = part_id - 1;
2429 mask = 1 << offset;
2430
2431 if ( ( m_SyncParts01 & mask ) > 0 )
2432 {
2433 return true;
2434 }
2435 }
2436 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2437 {
2438 offset = ( part_id % 32 );
2439 mask = 1 << offset;
2440
2441 if ( ( m_SyncParts02 & mask ) > 0 )
2442 {
2443 return true;
2444 }
2445 }
2446 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2447 {
2448 offset = ( part_id % 63 );
2449 mask = 1 << offset;
2450
2451 if ( ( m_SyncParts03 & mask ) > 0 )
2452 {
2453 return true;
2454 }
2455 }
2456
2457 return false;
2458 }
2459
2460 protected void RegisterActionForSync( int part_id, int action_id )
2461 {
2462 m_InteractedPartId = part_id;
2463 m_PerformedActionId = action_id;
2464 }
2465
2466 protected void ResetActionSyncData()
2467 {
2468 //reset data
2469 m_InteractedPartId = -1;
2471 }
2472
2473 protected void SetActionFromSyncData()
2474 {
2475 if ( m_InteractedPartId > -1 && m_PerformedActionId > -1 )
2476 {
2478 int build_action_id = m_PerformedActionId;
2479
2480 switch( build_action_id )
2481 {
2482 case AT_BUILD_PART : OnPartBuiltClient( constrution_part.GetPartName(), build_action_id ); break;
2483 case AT_DISMANTLE_PART : OnPartDismantledClient( constrution_part.GetPartName(), build_action_id ); break;
2484 case AT_DESTROY_PART : OnPartDestroyedClient( constrution_part.GetPartName(), build_action_id ); break;
2485 }
2486 }
2487 }
2488 //------
2489
2491 {
2492 string key = part.GetPartName();
2493 bool is_base = part.IsBase();
2494 bool is_part_built_sync = IsPartBuildInSyncData( part.GetId() );
2495 bsbDebugSpam("[bsb] " + GetDebugName(this) + " SetPartFromSyncData try to sync: built=" + is_part_built_sync + " key=" + key + " part=" + part.GetPartName() + " part_built=" + part.IsBuilt());
2496 if ( is_part_built_sync )
2497 {
2498 if ( !part.IsBuilt() )
2499 {
2500 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData +++ " + key);
2501 GetConstruction().AddToConstructedParts( key );
2502 GetConstruction().ShowConstructionPartPhysics(part.GetPartName());
2503
2504 if (is_base)
2505 {
2507 RemoveProxyPhysics( ANIMATION_DEPLOYED );
2508 }
2509 }
2510 }
2511 else
2512 {
2513 if ( part.IsBuilt() )
2514 {
2515 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData --- " + key);
2516 GetConstruction().RemoveFromConstructedParts( key );
2517 GetConstruction().HideConstructionPartPhysics(part.GetPartName());
2518
2519 if (is_base)
2520 {
2522 AddProxyPhysics( ANIMATION_DEPLOYED );
2523 }
2524 }
2525 }
2526
2527 //check slot lock for material attachments
2528 GetConstruction().SetLockOnAttachedMaterials( part.GetPartName(), part.IsBuilt() ); //failsafe for corrupted sync/storage data
2529 }
2530
2531 //set construction parts based on synchronized data
2533 {
2534 Construction construction = GetConstruction();
2535 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
2536
2537 for ( int i = 0; i < construction_parts.Count(); ++i )
2538 {
2539 string key = construction_parts.GetKey( i );
2540 ConstructionPart value = construction_parts.Get( key );
2541 SetPartFromSyncData(value);
2542 }
2543
2544 //regenerate navmesh
2545 UpdateNavmesh();
2546 }
2547
2548 protected ConstructionPart GetConstructionPartById( int id )
2549 {
2550 Construction construction = GetConstruction();
2551 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
2552
2553 for ( int i = 0; i < construction_parts.Count(); ++i )
2554 {
2555 string key = construction_parts.GetKey( i );
2556 ConstructionPart value = construction_parts.Get( key );
2557
2558 if ( value.GetId() == id )
2559 {
2560 return value;
2561 }
2562 }
2563
2564 return NULL;
2565 }
2566 //
2567
2568 //Base
2569 bool HasBase()
2570 {
2571 return m_HasBase;
2572 }
2573
2574 void SetBaseState( bool has_base )
2575 {
2576 m_HasBase = has_base;
2577 }
2578
2579 override bool IsDeployable()
2580 {
2581 return true;
2582 }
2583
2584 bool IsOpened()
2585 {
2586 return false;
2587 }
2588
2589 //--- CONSTRUCTION KIT
2591 {
2592 ItemBase construction_kit = ItemBase.Cast( g_Game.CreateObjectEx( GetConstructionKitType(), GetKitSpawnPosition(), ECE_PLACE_ON_SURFACE ) );
2593 if ( m_ConstructionKitHealth > 0 )
2594 {
2595 construction_kit.SetHealth( m_ConstructionKitHealth );
2596 }
2597
2598 return construction_kit;
2599 }
2600
2601 void CreateConstructionKitInHands(notnull PlayerBase player)
2602 {
2603 ItemBase construction_kit = ItemBase.Cast(player.GetHumanInventory().CreateInHands(GetConstructionKitType()));
2604 if ( m_ConstructionKitHealth > 0 )
2605 {
2606 construction_kit.SetHealth( m_ConstructionKitHealth );
2607 }
2608 }
2609
2610 protected vector GetKitSpawnPosition()
2611 {
2612 return GetPosition();
2613 }
2614
2615 protected string GetConstructionKitType()
2616 {
2617 return "";
2618 }
2619
2620 void DestroyConstructionKit( ItemBase construction_kit )
2621 {
2622 m_ConstructionKitHealth = construction_kit.GetHealth();
2623 g_Game.ObjectDelete( construction_kit );
2624 }
2625
2626 //--- CONSTRUCTION
2627 void DestroyConstruction()
2628 {
2629 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " DestroyConstruction");
2630 g_Game.ObjectDelete( this );
2631 }
2632
2633 // --- EVENTS
2634 override void EEDelete(EntityAI parent)
2635 {
2636 super.EEDelete(parent);
2637
2638 foreach (AreaDamageManager areaDamage : m_DamageTriggers)
2639 {
2640 areaDamage.Destroy();
2641 }
2642
2643 }
2644
2645 override void OnStoreSave( ParamsWriteContext ctx )
2646 {
2647 super.OnStoreSave( ctx );
2648
2649 //sync parts 01
2650 ctx.Write( m_SyncParts01 );
2651 ctx.Write( m_SyncParts02 );
2652 ctx.Write( m_SyncParts03 );
2653
2654 ctx.Write( m_HasBase );
2655 }
2656
2657 override bool OnStoreLoad( ParamsReadContext ctx, int version )
2658 {
2659 if ( !super.OnStoreLoad( ctx, version ) )
2660 return false;
2661
2662 //--- Base building data ---
2663 //Restore synced parts data
2664 if ( !ctx.Read( m_SyncParts01 ) )
2665 {
2666 m_SyncParts01 = 0; //set default
2667 return false;
2668 }
2669 if ( !ctx.Read( m_SyncParts02 ) )
2670 {
2671 m_SyncParts02 = 0; //set default
2672 return false;
2673 }
2674 if ( !ctx.Read( m_SyncParts03 ) )
2675 {
2676 m_SyncParts03 = 0; //set default
2677 return false;
2678 }
2679
2680 //has base
2681 if ( !ctx.Read( m_HasBase ) )
2682 {
2683 m_HasBase = false;
2684 return false;
2685 }
2686 //---
2687
2688 return true;
2689 }
2690
2691 override void AfterStoreLoad()
2692 {
2693 super.AfterStoreLoad();
2694
2696 {
2698 }
2699 }
2700
2702 {
2703 //update server data
2705
2706 //set base state
2707 ConstructionPart part = GetConstruction().GetBaseConstructionPart();
2708 SetBaseState( part.IsBuilt() ) ;
2709
2710 //synchronize after load
2712 }
2713
2714 override void OnCreatePhysics()
2715 {
2716 super.OnCreatePhysics();
2717
2718 ConstructionInit();
2720 }
2721
2722 override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
2723 {
2725 return;
2726
2727 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
2728 }
2729
2730 override void EEOnAfterLoad()
2731 {
2733 {
2734 g_Game.GetCallQueue( CALL_CATEGORY_GAMEPLAY ).CallLater( SetPartsAfterStoreLoad, 500, false, this ); //todo: check damage system config presence and 'HasDamageSystem' instead?
2735 }
2736
2737 super.EEOnAfterLoad();
2738 }
2739
2740 override void EEItemAttached( EntityAI item, string slot_name )
2741 {
2742 super.EEItemAttached( item, slot_name );
2743
2744 CheckForHybridAttachments( item, slot_name );
2745 UpdateVisuals();
2746 UpdateAttachmentPhysics( slot_name, false );
2747 }
2748
2749 override void EEItemDetached( EntityAI item, string slot_name )
2750 {
2751 super.EEItemDetached( item, slot_name );
2752
2753 UpdateVisuals();
2754 UpdateAttachmentPhysics( slot_name, false );
2755 }
2756
2757 protected void OnSetSlotLock( int slotId, bool locked, bool was_locked )
2758 {
2759 string slot_name = InventorySlots.GetSlotName( slotId );
2760 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint( "inv: OnSetSlotLock " + GetDebugName( this ) + " slot=" + slot_name + " locked=" + locked + " was_locked=" + was_locked );
2761
2762 UpdateAttachmentVisuals( slot_name, locked );
2763 UpdateAttachmentPhysics( slot_name, locked );
2764 }
2765
2766 //ignore out of reach condition
2767 override bool IgnoreOutOfReachCondition()
2768 {
2769 return true;
2770 }
2771
2772 //CONSTRUCTION EVENTS
2773 //Build
2774 void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
2775 {
2776 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
2777
2778 //check base state
2779 if (construtionPart.IsBase())
2780 {
2781 SetBaseState(true);
2782
2783 //spawn kit
2785 }
2786
2787 //register constructed parts for synchronization
2788 RegisterPartForSync(construtionPart.GetId());
2789
2790 //register action that was performed on part
2791 RegisterActionForSync(construtionPart.GetId(), action_id);
2792
2793 //synchronize
2795
2796 SetPartFromSyncData(construtionPart); // server part of sync, client will be synced from SetPartsFromSyncData
2797
2798 UpdateNavmesh();
2799
2800 //update visuals
2801 UpdateVisuals();
2802
2803 //reset action sync data
2804 g_Game.GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(ResetActionSyncData, 100, false, this);
2805 }
2806
2807 void OnPartBuiltClient(string part_name, int action_id)
2808 {
2809 //play sound
2810 SoundBuildStart( part_name );
2811 }
2812
2813 //Dismantle
2814 void OnPartDismantledServer(notnull Man player, string part_name, int action_id)
2815 {
2816 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDismantledServer " + part_name);
2817 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
2818
2819 //register constructed parts for synchronization
2820 UnregisterPartForSync(construtionPart.GetId());
2821
2822 //register action that was performed on part
2823 RegisterActionForSync(construtionPart.GetId(), action_id);
2824
2825 //synchronize
2827
2828 // server part of sync, client will be synced from SetPartsFromSyncData
2829 SetPartFromSyncData(construtionPart);
2830
2831 UpdateNavmesh();
2832
2833 //update visuals
2834 UpdateVisuals();
2835
2836 //reset action sync data
2837 g_Game.GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(ResetActionSyncData, 100, false, this);
2838
2839 //check base state
2840 if (construtionPart.IsBase())
2841 {
2842 //Destroy construction
2843 g_Game.GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(DestroyConstruction, 200, false, this);
2844 }
2845 }
2846
2847 void OnPartDismantledClient( string part_name, int action_id )
2848 {
2849 //play sound
2850 SoundDismantleStart( part_name );
2851 }
2852
2853 //Destroy
2854 void OnPartDestroyedServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part = false)
2855 {
2856 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDestroyedServer " + part_name);
2857 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
2858
2859 //register constructed parts for synchronization
2860 UnregisterPartForSync(construtionPart.GetId());
2861
2862 //register action that was performed on part
2863 RegisterActionForSync(construtionPart.GetId(), action_id);
2864
2865 //synchronize
2867
2868 // server part of sync, client will be synced from SetPartsFromSyncData
2869 SetPartFromSyncData(construtionPart);
2870
2871 UpdateNavmesh();
2872
2873 //update visuals
2874 UpdateVisuals();
2875
2876 //reset action sync data
2877 g_Game.GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(ResetActionSyncData, 100, false, this);
2878
2879 //check base state
2880 if (construtionPart.IsBase())
2881 {
2882 //Destroy construction
2883 g_Game.GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(DestroyConstruction, 200, false, this);
2884 }
2885 }
2886
2887 void OnPartDestroyedClient( string part_name, int action_id )
2888 {
2889 //play sound
2890 SoundDestroyStart( part_name );
2891 }
2892
2893 // --- UPDATE
2894 void InitBaseState()
2895 {
2896 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::InitBaseState ");
2897
2898 InitVisuals();
2899 UpdateNavmesh(); //regenerate navmesh
2900 }
2901
2902 void InitVisuals()
2903 {
2904 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " InitVisuals");
2905 //check base
2906 if ( !HasBase() )
2907 {
2908 SetAnimationPhase( ANIMATION_DEPLOYED, 0 );
2909 }
2910 else
2911 {
2912 SetAnimationPhase( ANIMATION_DEPLOYED, 1 );
2913 }
2914
2915 GetConstruction().InitVisuals();
2916 }
2917
2918 void UpdateVisuals()
2919 {
2920 array<string> attachmentSlots = new array<string>;
2921
2922 GetAttachmentSlots(this, attachmentSlots);
2923 foreach (string slotName : attachmentSlots)
2924 {
2926 }
2927
2928 //check base
2929 if (!HasBase())
2930 SetAnimationPhase(ANIMATION_DEPLOYED, 0);
2931 else
2932 SetAnimationPhase(ANIMATION_DEPLOYED, 1);
2933
2934 GetConstruction().UpdateVisuals();
2935 }
2936
2937 void UpdateAttachmentVisuals(string slot_name, bool is_locked)
2938 {
2939 string slotNameMounted = slot_name + "_Mounted";
2940 EntityAI attachment = FindAttachmentBySlotName(slot_name);
2941
2942 if (attachment)
2943 {
2944 BarbedWire barbedWire = BarbedWire.Cast(attachment);
2945 if (barbedWire && barbedWire.IsMounted())
2946 CreateAreaDamage(slotNameMounted);
2947 else
2948 DestroyAreaDamage(slotNameMounted);
2949
2950 if (is_locked)
2951 {
2952 SetAnimationPhase(slotNameMounted, 0);
2953 SetAnimationPhase(slot_name, 1);
2954 }
2955 else
2956 {
2957 SetAnimationPhase(slotNameMounted, 1);
2958 SetAnimationPhase(slot_name, 0);
2959 }
2960 }
2961 else
2962 {
2963 SetAnimationPhase(slotNameMounted, 1);
2964 SetAnimationPhase(slot_name, 1);
2965
2966 DestroyAreaDamage(slotNameMounted);
2967 }
2968 }
2969
2970 // avoid calling this function on frequent occasions, it's a massive performance hit
2971 void UpdatePhysics()
2972 {
2974 bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::UpdatePhysics");
2975
2976 array<string> attachmentSlots = new array<string>;
2977 GetAttachmentSlots(this, attachmentSlots);
2978
2980 bsbDebugPrint("[bsb] " + GetDebugName(this) + " att_cnt=" + attachmentSlots.Count());
2981
2982 foreach (string slotName : attachmentSlots)
2983 {
2985 }
2986
2987 //check base
2988 if (!HasBase())
2989 {
2991 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " ADD");
2992
2993 AddProxyPhysics(ANIMATION_DEPLOYED);
2994 }
2995 else
2996 {
2998 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " RM");
2999
3000 RemoveProxyPhysics(ANIMATION_DEPLOYED);
3001 }
3002
3003 GetConstruction().UpdatePhysics();
3004 UpdateNavmesh();
3005 }
3006
3007 void UpdateAttachmentPhysics( string slot_name, bool is_locked )
3008 {
3009 //checks for invalid appends; hotfix
3010 if ( !m_Mountables || m_Mountables.Find(slot_name) == -1 )
3011 return;
3012 //----------------------------------
3013 string slot_name_mounted = slot_name + "_Mounted";
3014 EntityAI attachment = FindAttachmentBySlotName( slot_name );
3015
3016 //remove proxy physics
3017 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Removing ATT SLOT=" + slot_name + " RM / RM");
3018 RemoveProxyPhysics( slot_name_mounted );
3019 RemoveProxyPhysics( slot_name );
3020
3021 if ( attachment )
3022 {
3023 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Adding ATT=" + Object.GetDebugName(attachment));
3024 if ( is_locked )
3025 {
3026 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " RM / RM");
3027 AddProxyPhysics( slot_name_mounted );
3028 }
3029 else
3030 {
3031 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " ADD");
3032 AddProxyPhysics( slot_name );
3033 }
3034 }
3035 }
3036
3037 protected void UpdateNavmesh()
3038 {
3039 SetAffectPathgraph( true, false );
3040 g_Game.GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( g_Game.UpdatePathgraphRegionByObject, 100, false, this );
3041 }
3042
3043 override bool CanUseConstruction()
3044 {
3045 return true;
3046 }
3047
3048 override bool CanUseConstructionBuild()
3049 {
3050 return true;
3051 }
3052
3053 protected bool IsAttachmentSlotLocked( EntityAI attachment )
3054 {
3055 if ( attachment )
3056 {
3057 InventoryLocation inventory_location = new InventoryLocation;
3058 attachment.GetInventory().GetCurrentInventoryLocation( inventory_location );
3059
3060 return GetInventory().GetSlotLock( inventory_location.GetSlot() );
3061 }
3062
3063 return false;
3064 }
3065
3066 protected bool IsAttachmentSlotLocked( string slot_name )
3067 {
3068 return GetInventory().GetSlotLock( InventorySlots.GetSlotIdFromString( slot_name ) );
3069 }
3070
3071 //--- ATTACHMENT SLOTS
3072 void GetAttachmentSlots( EntityAI entity, out array<string> attachment_slots )
3073 {
3074 string config_path = "CfgVehicles" + " " + entity.GetType() + " " + "attachments";
3075 if ( g_Game.ConfigIsExisting( config_path ) )
3076 {
3077 g_Game.ConfigGetTextArray( config_path, attachment_slots );
3078 }
3079 }
3080
3081 bool CheckSlotVerticalDistance( int slot_id, PlayerBase player )
3082 {
3083 return true;
3084 }
3085
3086 protected bool CheckMemoryPointVerticalDistance( float max_dist, string selection, PlayerBase player )
3087 {
3088 return true;
3089 }
3090
3091 protected bool CheckLevelVerticalDistance( float max_dist, string selection, PlayerBase player )
3092 {
3093 return true;
3094 }
3095
3096 // --- INIT
3098 {
3099 m_Construction = new Construction(this);
3100 return m_Construction;
3101 }
3102
3104 {
3105 return m_Construction;
3106 }
3107
3109 {
3110 return Construction.Cast(m_Construction);
3111 }
3112
3114 {
3115 int attachment_count = GetInventory().AttachmentCount();
3116 if ( attachment_count > 0 )
3117 {
3118 if ( HasBase() && attachment_count == 1 )
3119 {
3120 return false;
3121 }
3122
3123 return true;
3124 }
3125
3126 return false;
3127 }
3128
3129 override bool ShowZonesHealth()
3130 {
3131 return true;
3132 }
3133
3134 override bool IsTakeable()
3135 {
3136 return false;
3137 }
3138
3139 //this into/outo parent.Cargo
3140 override bool CanPutInCargo( EntityAI parent )
3141 {
3142 return false;
3143 }
3144
3145 override bool CanRemoveFromCargo( EntityAI parent )
3146 {
3147 return false;
3148 }
3149
3150 //hands
3151 override bool CanPutIntoHands( EntityAI parent )
3152 {
3153 return false;
3154 }
3155
3156 //--- ACTION CONDITIONS
3157 //direction
3158 override bool IsFacingPlayer( PlayerBase player, string selection )
3159 {
3160 return true;
3161 }
3162
3163 override bool IsPlayerInside( PlayerBase player, string selection )
3164 {
3165 return true;
3166 }
3167
3170 {
3171 return false;
3172 }
3173
3174 //roof check
3175 bool PerformRoofCheckForBase( string partName, PlayerBase player, out bool result )
3176 {
3177 return false;
3178 }
3179
3180 //selection->player distance check
3181 bool HasProperDistance( string selection, PlayerBase player )
3182 {
3183 return true;
3184 }
3185
3186 //folding
3188 {
3189 if ( HasBase() || GetInventory().AttachmentCount() > 0 )
3190 {
3191 return false;
3192 }
3193
3194 return true;
3195 }
3196
3198 {
3201
3202 return item;
3203 }
3204
3205 //Damage triggers (barbed wire)
3206 void CreateAreaDamage( string slot_name, float rotation_angle = 0 )
3207 {
3208 if ( g_Game && g_Game.IsServer() )
3209 {
3210 //destroy area damage if some already exists
3211 DestroyAreaDamage( slot_name );
3212
3213 //create new area damage
3215 areaDamage.SetDamageComponentType(AreaDamageComponentTypes.HITZONE);
3216
3217 vector min_max[2];
3218 if ( MemoryPointExists( slot_name + "_min" ) )
3219 {
3220 min_max[0] = GetMemoryPointPos( slot_name + "_min" );
3221 }
3222 if ( MemoryPointExists( slot_name + "_max" ) )
3223 {
3224 min_max[1] = GetMemoryPointPos( slot_name + "_max" );
3225 }
3226
3227 //get proper trigger extents (min<max)
3228 vector extents[2];
3229 GetConstruction().GetTriggerExtents( min_max, extents );
3230
3231 //get box center
3232 vector center;
3233 center = GetConstruction().GetBoxCenter( min_max );
3234 center = ModelToWorld( center );
3235
3236 //rotate center if needed
3238 CalcDamageAreaRotation( rotation_angle, center, orientation );
3239
3240 areaDamage.SetExtents( extents[0], extents[1] );
3241 areaDamage.SetAreaPosition( center );
3242 areaDamage.SetAreaOrientation( orientation );
3243 areaDamage.SetLoopInterval( 1.0 );
3244 areaDamage.SetDeferDuration( 0.2 );
3245 areaDamage.SetHitZones( { "Torso","LeftHand","LeftLeg","LeftFoot","RightHand","RightLeg","RightFoot" } );
3246 areaDamage.SetAmmoName( "BarbedWireHit" );
3247 areaDamage.Spawn();
3248
3249 m_DamageTriggers.Insert( slot_name, areaDamage );
3250 }
3251 }
3252
3253 void CalcDamageAreaRotation( float angle_deg, out vector center, out vector orientation )
3254 {
3255 if ( angle_deg != 0 )
3256 {
3257 //orientation
3258 orientation[0] = orientation[0] - angle_deg;
3259
3260 //center
3261 vector rotate_axis;
3262 if ( MemoryPointExists( "rotate_axis" ) )
3263 {
3264 rotate_axis = ModelToWorld( GetMemoryPointPos( "rotate_axis" ) );
3265 }
3266 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];
3267 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];
3268 center[0] = r_center_x;
3269 center[2] = r_center_z;
3270 }
3271 }
3272
3273 void DestroyAreaDamage( string slot_name )
3274 {
3275 if (g_Game && g_Game.IsServer())
3276 {
3278 if (m_DamageTriggers.Find(slot_name, areaDamage))
3279 {
3280 if (areaDamage)
3281 {
3282 areaDamage.Destroy();
3283 }
3284
3285 m_DamageTriggers.Remove( slot_name );
3286 }
3287 }
3288 }
3289
3290 override bool IsIgnoredByConstruction()
3291 {
3292 return true;
3293 }
3294
3295 //================================================================
3296 // SOUNDS
3297 //================================================================
3298 protected void SoundBuildStart( string part_name )
3299 {
3300 PlaySoundSet( m_Sound, GetBuildSoundByMaterial( part_name ), 0.1, 0.1 );
3301 }
3302
3303 protected void SoundDismantleStart( string part_name )
3304 {
3305 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
3306 }
3307
3308 protected void SoundDestroyStart( string part_name )
3309 {
3310 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
3311 }
3312
3313 protected string GetBuildSoundByMaterial( string part_name )
3314 {
3315 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
3316
3317 switch ( material_type )
3318 {
3319 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_BUILD_WOOD_LOG;
3320 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_BUILD_WOOD_PLANK;
3321 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_BUILD_WOOD_STAIRS;
3322 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_BUILD_METAL;
3323 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_BUILD_WIRE;
3324 }
3325
3326 return "";
3327 }
3328
3329 protected string GetDismantleSoundByMaterial( string part_name )
3330 {
3331 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
3332
3333 switch ( material_type )
3334 {
3335 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_DISMANTLE_WOOD_LOG;
3336 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_DISMANTLE_WOOD_PLANK;
3337 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_DISMANTLE_WOOD_STAIRS;
3338 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_DISMANTLE_METAL;
3339 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_DISMANTLE_WIRE;
3340 }
3341
3342 return "";
3343 }
3344
3345 //misc
3346 void CheckForHybridAttachments( EntityAI item, string slot_name )
3347 {
3348 if (!g_Game.IsMultiplayer() || g_Game.IsServer())
3349 {
3350 //if this is a hybrid attachment, set damage of appropriate damage zone. Zone name must match slot name...WIP
3351 if (m_HybridAttachments && m_HybridAttachments.Find(slot_name) != -1)
3352 {
3353 SetHealth(slot_name,"Health",item.GetHealth());
3354 }
3355 }
3356 }
3357
3358 override int GetDamageSystemVersionChange()
3359 {
3360 return 111;
3361 }
3362
3363 override void SetActions()
3364 {
3365 super.SetActions();
3366
3370 }
3371
3372 protected void DestroyConstructedParts()
3373 {
3374 Construction construction = GetConstruction();
3375 if (!construction)
3376 return;
3377
3378 map<string, ref ConstructionPart> constructionParts = construction.GetConstructionParts();
3379 for ( int i = constructionParts.Count() - 1; i >= 0; --i )
3380 {
3381 ConstructionPart part = constructionParts.GetElement(i);
3382 if (part && part.IsBuilt() && !part.IsUtilityPart())
3383 {
3384 construction.DestroyPartServer(null, part.GetPartName(), -1);
3385 }
3386 }
3387 }
3388
3389 protected void HandleFallingForConstructedParts()
3390 {
3391 Construction construction = GetConstruction();
3392 if (!construction)
3393 return;
3394
3395 map<string, ref ConstructionPart> constructionParts = construction.GetConstructionParts();
3396 for ( int i = constructionParts.Count() - 1; i >= 0; --i )
3397 {
3398 ConstructionPart part = constructionParts.GetElement(i);
3399 if (part && part.IsBuilt() && !part.IsUtilityPart())
3400 {
3401 construction.HandleEntityFalling(part.GetPartName());
3402 }
3403 }
3404 }
3405
3407 override void OnItemFallRebuilding()
3408 {
3409 if (!g_Game.IsServer())
3410 return;
3411
3414
3415 if (DestroyOnFall())
3416 {
3418 {
3420 }
3421 else
3422 {
3424 {
3426 }
3427 g_Game.GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(g_Game.ObjectDelete, 100, false, this);
3428 }
3429 }
3430 }
3431
3433 {
3434 if (HasAnyAttachmentsOrCargo())
3435 {
3437 MiscGameplayFunctions.ThrowAllItemsInInventoryEx(this, ThrowEntityFlags.NONE, vector.Zero);
3438 }
3439 }
3440
3441 //================================================================
3442 // DEBUG
3443 //================================================================
3444
3447 {
3448 return null;
3449 }
3450
3451 override void OnDebugSpawn()
3452 {
3453 FullyBuild();
3454 }
3455
3456 void FullyBuild()
3457 {
3459 array<ConstructionPart> parts = GetConstruction().GetConstructionParts().GetValueArray();
3460
3461 Man p;
3462
3463 #ifdef SERVER
3464 array<Man> players = new array<Man>;
3465 g_Game.GetWorld().GetPlayerList(players);
3466 if (players.Count())
3467 p = players[0];
3468 #else
3469 p = g_Game.GetPlayer();
3470 #endif
3471
3472 foreach (ConstructionPart part : parts)
3473 {
3474 bool excluded = false;
3475 string partName = part.GetPartName();
3476 if (excludes)
3477 {
3478 foreach (string exclude : excludes)
3479 {
3480 if (partName.Contains(exclude))
3481 {
3482 excluded = true;
3483 break;
3484 }
3485 }
3486 }
3487
3488 if (!excluded)
3489 {
3490 OnPartBuiltServer(p, partName, AT_BUILD_PART);
3491 }
3492 }
3493
3494 GetConstruction().UpdateVisuals();
3495 }
3496
3498 //Deprecated code playpen//
3500 [Obsolete("handled in the Construction component directly")]
3501 protected void HandleItemFalling(ConstructionPart part)
3502 {
3503 }
3504
3505 [Obsolete("handled in the Construction component directly")]
3506 protected void ItemFall(vector min, vector max)
3507 {
3508 }
3509
3510 [Obsolete("obsolete debug method")]
3511 protected void DebugCustomState()
3512 {
3513 }
3514}
3515
3516void bsbDebugPrint (string s)
3517{
3518#ifdef BSB_DEBUG
3519 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
3520#else
3521 //Print("" + s); // comment/uncomment to hide/see debug logs
3522#endif
3523}
3524void bsbDebugSpam (string s)
3525{
3526#ifdef BSB_DEBUG_SPAM
3527 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
3528#else
3529 //Print("" + s); // comment/uncomment to hide/see debug logs
3530#endif
3531}
const int AT_DISMANTLE_PART
const int AT_DESTROY_PART
const int AT_BUILD_PART
ref ConstructionBasic m_Construction
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:1910
const string ANIMATION_DEPLOYED
Определения BaseBuildingBase.c:1292
override int GetHideIconMask()
Определения BaseBuildingBase.c:1366
override void OnStoreSave(ParamsWriteContext ctx)
Определения BaseBuildingBase.c:1708
void FullyBuild()
Определения BaseBuildingBase.c:2519
void UpdateVisuals()
Определения BaseBuildingBase.c:1981
void SetActionFromSyncData()
Определения BaseBuildingBase.c:1536
int m_SyncParts01
Определения BaseBuildingBase.c:1298
void UpdateNavmesh()
Определения BaseBuildingBase.c:2100
bool CheckMemoryPointVerticalDistance(float max_dist, string selection, PlayerBase player)
Определения BaseBuildingBase.c:2149
override void OnDebugSpawn()
Определения BaseBuildingBase.c:2514
array< string > OnDebugSpawnBuildExcludes()
Excludes certain parts from being built by OnDebugSpawn, uses Contains to compare.
Определения BaseBuildingBase.c:2509
void DropAttachmentAndCargoItems()
Определения BaseBuildingBase.c:2495
void SoundDestroyStart(string part_name)
Определения BaseBuildingBase.c:2371
const string SOUND_BUILD_WOOD_LOG
Определения BaseBuildingBase.c:1307
void SoundBuildStart(string part_name)
Определения BaseBuildingBase.c:2361
void UpdateAttachmentVisuals(string slot_name, bool is_locked)
Определения BaseBuildingBase.c:2000
void CalcDamageAreaRotation(float angle_deg, out vector center, out vector orientation)
Определения BaseBuildingBase.c:2316
override bool CanObstruct()
Определения BaseBuildingBase.c:1361
bool HasAttachmentsBesidesBase()
Определения BaseBuildingBase.c:2176
override void InitItemSounds()
Определения BaseBuildingBase.c:1371
void RegisterPartForSync(int part_id)
Определения BaseBuildingBase.c:1425
ConstructionBasic CreateConstructionComponent()
Определения BaseBuildingBase.c:2160
const string SOUND_DISMANTLE_METAL
Определения BaseBuildingBase.c:1316
void InitBaseState()
Определения BaseBuildingBase.c:1957
void BaseBuildingBase()
Определения BaseBuildingBase.c:1326
void SetPartsAfterStoreLoad()
Определения BaseBuildingBase.c:1764
void DestroyConstruction()
Определения BaseBuildingBase.c:1690
ref array< string > m_HybridAttachments
Определения BaseBuildingBase.c:1322
int m_InteractedPartId
Определения BaseBuildingBase.c:1301
override string GetFoldSoundset()
Определения BaseBuildingBase.c:1385
bool m_HasBase
Определения BaseBuildingBase.c:1296
string GetDismantleSoundByMaterial(string part_name)
Определения BaseBuildingBase.c:2392
bool IsAttachmentSlotLocked(EntityAI attachment)
Определения BaseBuildingBase.c:2116
void UpdatePhysics()
Определения BaseBuildingBase.c:2034
override bool IsFacingPlayer(PlayerBase player, string selection)
Определения BaseBuildingBase.c:2221
void OnPartBuiltClient(string part_name, int action_id)
Определения BaseBuildingBase.c:1870
bool HasProperDistance(string selection, PlayerBase player)
Определения BaseBuildingBase.c:2244
override void OnCreatePhysics()
Определения BaseBuildingBase.c:1777
void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
Определения BaseBuildingBase.c:1837
void RegisterActionForSync(int part_id, int action_id)
Определения BaseBuildingBase.c:1523
const string SOUND_BUILD_WOOD_PLANK
Определения BaseBuildingBase.c:1308
void SetPartsFromSyncData()
Определения BaseBuildingBase.c:1595
ref array< string > m_Mountables
Определения BaseBuildingBase.c:1323
const string SOUND_BUILD_WIRE
Определения BaseBuildingBase.c:1311
int m_SyncParts03
Определения BaseBuildingBase.c:1300
void ResetActionSyncData()
Определения BaseBuildingBase.c:1529
override string GetInvulnerabilityTypeString()
Определения BaseBuildingBase.c:1356
void OnPartDismantledServer(notnull Man player, string part_name, int action_id)
Определения BaseBuildingBase.c:1877
void CheckForHybridAttachments(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:2409
override void EEOnAfterLoad()
Определения BaseBuildingBase.c:1793
override void EEItemDetached(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:1812
vector GetKitSpawnPosition()
Определения BaseBuildingBase.c:1673
override void OnItemFallRebuilding()
@Note for modders: This method and is subject to change!
Определения BaseBuildingBase.c:2470
bool CheckSlotVerticalDistance(int slot_id, PlayerBase player)
Определения BaseBuildingBase.c:2144
void GetAttachmentSlots(EntityAI entity, out array< string > attachment_slots)
Определения BaseBuildingBase.c:2135
override bool IsDeployable()
Определения BaseBuildingBase.c:1642
void OnPartDestroyedClient(string part_name, int action_id)
Определения BaseBuildingBase.c:1950
void UnregisterPartForSync(int part_id)
Определения BaseBuildingBase.c:1454
void bsbDebugSpam(string s)
Определения BaseBuildingBase.c:1299
override void OnVariablesSynchronized()
Определения BaseBuildingBase.c:1404
bool PerformRoofCheckForBase(string partName, PlayerBase player, out bool result)
Определения BaseBuildingBase.c:2238
Construction GetConstruction()
Определения BaseBuildingBase.c:2171
void SoundDismantleStart(string part_name)
Определения BaseBuildingBase.c:2366
void DebugCustomState()
Определения BaseBuildingBase.c:2574
ConstructionPart GetConstructionPartById(int id)
Определения BaseBuildingBase.c:1611
string GetConstructionKitType()
Определения BaseBuildingBase.c:1678
bool CheckLevelVerticalDistance(float max_dist, string selection, PlayerBase player)
Определения BaseBuildingBase.c:2154
void OnPartDestroyedServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part=false)
Определения BaseBuildingBase.c:1917
bool CanFoldBaseBuildingObject()
Определения BaseBuildingBase.c:2250
override int GetDamageSystemVersionChange()
Определения BaseBuildingBase.c:2421
const string SOUND_DISMANTLE_WOOD_PLANK
Определения BaseBuildingBase.c:1314
override void EEItemAttached(EntityAI item, string slot_name)
Определения BaseBuildingBase.c:1803
const string SOUND_DISMANTLE_WOOD_LOG
Определения BaseBuildingBase.c:1313
void InitVisuals()
Определения BaseBuildingBase.c:1965
class BaseBuildingBase extends ItemBase bsbDebugPrint(string s)
Определения BaseBuildingBase.c:1291
const string SOUND_BUILD_WOOD_STAIRS
Определения BaseBuildingBase.c:1309
ItemBase FoldBaseBuildingObject()
Определения BaseBuildingBase.c:2260
override ConstructionBasic GetConstructionBasic()
Определения BaseBuildingBase.c:2166
override bool CanPutInCargo(EntityAI parent)
Определения BaseBuildingBase.c:2203
override bool CanUseConstruction()
Определения BaseBuildingBase.c:2106
override void AfterStoreLoad()
Определения BaseBuildingBase.c:1754
void SetPartFromSyncData(ConstructionPart part)
Определения BaseBuildingBase.c:1553
override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
Определения BaseBuildingBase.c:1785
override bool IgnoreOutOfReachCondition()
Определения BaseBuildingBase.c:1830
override bool OnStoreLoad(ParamsReadContext ctx, int version)
Определения BaseBuildingBase.c:1720
override bool ShowZonesHealth()
Определения BaseBuildingBase.c:2192
void UpdateAttachmentPhysics(string slot_name, bool is_locked)
Определения BaseBuildingBase.c:2070
void HandleFallingForConstructedParts()
Определения BaseBuildingBase.c:2452
override bool IsPlayerInside(PlayerBase player, string selection)
Определения BaseBuildingBase.c:2226
string GetBuildSoundByMaterial(string part_name)
Определения BaseBuildingBase.c:2376
ItemBase CreateConstructionKit()
Определения BaseBuildingBase.c:1653
const string SOUND_DISMANTLE_WIRE
Определения BaseBuildingBase.c:1317
bool MustBeBuiltFromOutside()
Some buildings can only be built from outside.
Определения BaseBuildingBase.c:2232
override bool IsTakeable()
Определения BaseBuildingBase.c:2197
float m_ConstructionKitHealth
Определения BaseBuildingBase.c:1294
override void EEDelete(EntityAI parent)
Определения BaseBuildingBase.c:1697
override void SetActions()
Определения BaseBuildingBase.c:2426
void HandleItemFalling(ConstructionPart part)
Определения BaseBuildingBase.c:2564
void DestroyConstructionKit(ItemBase construction_kit)
Определения BaseBuildingBase.c:1683
void CreateConstructionKitInHands(notnull PlayerBase player)
Определения BaseBuildingBase.c:1664
bool IsOpened()
Определения BaseBuildingBase.c:1647
void ItemFall(vector min, vector max)
Определения BaseBuildingBase.c:2569
int m_PerformedActionId
Определения BaseBuildingBase.c:1302
override bool CanUseConstructionBuild()
Определения BaseBuildingBase.c:2111
bool HasBase()
Определения BaseBuildingBase.c:1632
void OnSynchronizedClient()
Определения BaseBuildingBase.c:1412
void SynchronizeBaseState()
Определения BaseBuildingBase.c:1396
override bool IsIgnoredByConstruction()
Определения BaseBuildingBase.c:2353
ref map< string, ref AreaDamageManager > m_DamageTriggers
Определения BaseBuildingBase.c:1321
void SetBaseState(bool has_base)
Определения BaseBuildingBase.c:1637
const string SOUND_BUILD_METAL
Определения BaseBuildingBase.c:1310
override string GetLoopFoldSoundset()
Определения BaseBuildingBase.c:1390
void OnSetSlotLock(int slotId, bool locked, bool was_locked)
Определения BaseBuildingBase.c:1820
override bool CanPutIntoHands(EntityAI parent)
Определения BaseBuildingBase.c:2214
bool IsPartBuildInSyncData(int part_id)
Определения BaseBuildingBase.c:1483
override bool CanRemoveFromCargo(EntityAI parent)
Определения BaseBuildingBase.c:2208
int m_SyncParts02
Определения BaseBuildingBase.c:1299
void DestroyConstructedParts()
Определения BaseBuildingBase.c:2435
const string SOUND_DISMANTLE_WOOD_STAIRS
Определения BaseBuildingBase.c:1315
const int ECE_PLACE_ON_SURFACE
Определения CentralEconomy.c:38
PlayerSpawnPreset slotName
ConstructionMaterialType
used to guide action sound selection, mostly. Could be also used for particles and stuff,...
Определения ConstructionBase.c:3
DayZGame g_Game
Определения DayZGame.c:4074
vector orientation
Определения DustKickupEffects.c:21
void DestroyAreaDamage()
Определения FireplaceBase.c:2363
void CreateAreaDamage()
Определения FireplaceBase.c:2347
Empty
Определения Hand_States.c:14
EffectSound m_Sound
Определения HungerSoundHandler.c:18
string GetLoopFoldSoundset()
Определения BaseBuildingBase.c:1390
ItemSoundHandler GetItemSoundHandler()
Определения ItemBase.c:4407
string GetFoldSoundset()
Определения BaseBuildingBase.c:1385
bool m_FixDamageSystemInit
Определения ItemBase.c:61
void ItemSoundHandler(ItemBase parent)
Определения ItemSoundHandler.c:31
ThrowEntityFlags
Определения MiscGameplayFunctions.c:208
Определения 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
static bool GetDisableRefundMaterialsOnFall()
Определения CfgGameplayHandler.c:362
static bool GetDisableDropAttachmentsOnFall()
Определения CfgGameplayHandler.c:357
static bool GetDisableItemFalling()
Определения CfgGameplayHandler.c:352
override void DestroyPartServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part=false)
Определения Construction.c:93
just declared for module 3 use
Определения Construction_Basic.c:3
Used in BBB objects.
Определения Construction.c:3
int GetId()
Определения ConstructionPart.c:208
string GetPartName()
Определения ConstructionPart.c:198
bool IsBase()
Определения ConstructionPart.c:273
bool IsBuilt()
Определения ConstructionPart.c:160
bool IsUtilityPart()
Определения ConstructionPart.c:233
Instanced construction part data classes for dynamic data, statics now stored on EntityType level in ...
Определения ConstructionPart.c:4
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:30
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
static bool IsBaseBuildingLogEnable()
Определения 3_Game/DayZ/tools/Debug.c:809
Определения EnMath.c:7
Определения ObjectTyped.c:2
Определения PlayerBaseClient.c:2
proto bool Write(void value_out)
proto bool Read(void value_in)
bool m_Loop
Определения ItemSoundHandler.c:5
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения Transport.c:70
static const vector Zero
Определения EnConvert.c:123
Определения EnConvert.c:119
override string GetDebugName()
Определения dayzplayer.c:1191
Serializer ParamsReadContext
Определения gameplay.c:15
Serializer ParamsWriteContext
Определения gameplay.c:16
proto void PrintToRPT(void var)
Prints content of variable to RPT file (performance warning - each write means fflush!...
void Obsolete(string msg="")
Определения EnScript.c:371
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
vector GetPosition()
Get the world position of the Effect.
Определения Effect.c:473
bool Contains(string sample)
Returns true if sample is substring of string.
Определения EnString.c:286
const int CALL_CATEGORY_GAMEPLAY
Определения 3_Game/DayZ/tools/tools.c:10
const int CALL_CATEGORY_SYSTEM
Определения 3_Game/DayZ/tools/tools.c:8