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

◆ IgnoreOutOfReachCondition()

override bool bsbDebugPrint::IgnoreOutOfReachCondition ( )
protected

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

1891{
1892 const string ANIMATION_DEPLOYED = "Deployed";
1893
1894 float m_ConstructionKitHealth; //stored health value for used construction kit
1895
1897
1898 bool m_HasBase;
1899 //variables for synchronization of base building parts (2x31 is the current limit)
1900 int m_SyncParts01; //synchronization for already built parts (31 parts)
1901 int m_SyncParts02; //synchronization for already built parts (+31 parts)
1902 int m_SyncParts03; //synchronization for already built parts (+31 parts)
1903 int m_InteractedPartId; //construction part id that an action was performed on
1904 int m_PerformedActionId; //action id that was performed on a construction part
1905
1906 //Sounds
1907 //build
1908 const string SOUND_BUILD_WOOD_LOG = "putDown_WoodLog_SoundSet";
1909 const string SOUND_BUILD_WOOD_PLANK = "putDown_WoodPlank_SoundSet";
1910 const string SOUND_BUILD_WOOD_STAIRS = "putDown_WoodStairs_SoundSet";
1911 const string SOUND_BUILD_METAL = "putDown_MetalPlank_SoundSet";
1912 const string SOUND_BUILD_WIRE = "putDown_BarbedWire_SoundSet";
1913 //dismantle
1914 const string SOUND_DISMANTLE_WOOD_LOG = "Crash_WoodPlank_SoundSet";
1915 const string SOUND_DISMANTLE_WOOD_PLANK = "Crash_WoodPlank_SoundSet";
1916 const string SOUND_DISMANTLE_WOOD_STAIRS = "Crash_WoodPlank_SoundSet";
1917 const string SOUND_DISMANTLE_METAL = "Crash_MetalPlank_SoundSet";
1918 const string SOUND_DISMANTLE_WIRE = "putDown_BarbedWire_SoundSet";
1919
1920 protected EffectSound m_Sound;
1921
1925
1926 // Constructor
1927 void BaseBuildingBase()
1928 {
1930
1931 //synchronized variables
1932 RegisterNetSyncVariableInt( "m_SyncParts01" );
1933 RegisterNetSyncVariableInt( "m_SyncParts02" );
1934 RegisterNetSyncVariableInt( "m_SyncParts03" );
1935 RegisterNetSyncVariableInt( "m_InteractedPartId" );
1936 RegisterNetSyncVariableInt( "m_PerformedActionId" );
1937 RegisterNetSyncVariableBool( "m_HasBase" );
1938
1939 //Construction init
1941
1942 if (ConfigIsExisting("hybridAttachments"))
1943 {
1945 ConfigGetTextArray("hybridAttachments", m_HybridAttachments);
1946 }
1947 if (ConfigIsExisting("mountables"))
1948 {
1950 ConfigGetTextArray("mountables", m_Mountables);
1951 }
1952
1953 ProcessInvulnerabilityCheck(GetInvulnerabilityTypeString());
1954 }
1955
1956 override void EEDelete(EntityAI parent)
1957 {
1958 super.EEDelete(parent);
1959
1960 foreach (AreaDamageManager areaDamage : m_DamageTriggers)
1961 {
1962 areaDamage.Destroy();
1963 }
1964
1965 }
1966
1967 override string GetInvulnerabilityTypeString()
1968 {
1969 return "disableBaseDamage";
1970 }
1971
1972 override bool CanObstruct()
1973 {
1974 return true;
1975 }
1976
1977 override int GetHideIconMask()
1978 {
1979 return EInventoryIconVisibility.HIDE_VICINITY;
1980 }
1981
1982 override void InitItemSounds()
1983 {
1984 super.InitItemSounds();
1985
1987 SoundParameters params = new SoundParameters();
1988 params.m_Loop = true;
1989
1990 if (GetFoldSoundset() != string.Empty)
1991 handler.AddSound(SoundConstants.ITEM_FOLD, GetFoldSoundset());
1992 if (GetLoopFoldSoundset() != string.Empty)
1993 handler.AddSound(SoundConstants.ITEM_FOLD_LOOP, GetLoopFoldSoundset(), params);
1994 }
1995
1996 override string GetFoldSoundset()
1997 {
1998 return "putDown_FenceKit_SoundSet";
1999 }
2000
2001 override string GetLoopFoldSoundset()
2002 {
2003 return "Shelter_Site_Build_Loop_SoundSet";
2004 }
2005
2006 // --- SYNCHRONIZATION
2008 {
2009 if ( GetGame().IsServer() )
2010 {
2011 SetSynchDirty();
2012 }
2013 }
2014
2015 override void OnVariablesSynchronized()
2016 {
2017 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnVariablesSynchronized");
2018 super.OnVariablesSynchronized();
2019
2021 }
2022
2023 protected void OnSynchronizedClient()
2024 {
2025 //update parts
2027
2028 //update action on part
2030
2031 //update visuals (client)
2032 UpdateVisuals();
2033 }
2034
2035 //parts synchronization
2036 void RegisterPartForSync( int part_id )
2037 {
2038 //part_id must starts from index = 1
2039 int offset;
2040 int mask;
2041
2042 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2043 {
2044 offset = part_id - 1;
2045 mask = 1 << offset;
2046
2047 m_SyncParts01 = m_SyncParts01 | mask;
2048 }
2049 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2050 {
2051 offset = ( part_id % 32 );
2052 mask = 1 << offset;
2053
2054 m_SyncParts02 = m_SyncParts02 | mask;
2055 }
2056 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2057 {
2058 offset = ( part_id % 63 );
2059 mask = 1 << offset;
2060
2061 m_SyncParts03 = m_SyncParts03 | mask;
2062 }
2063 }
2064
2065 void UnregisterPartForSync( int part_id )
2066 {
2067 //part_id must starts from index = 1
2068 int offset;
2069 int mask;
2070
2071 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2072 {
2073 offset = part_id - 1;
2074 mask = 1 << offset;
2075
2076 m_SyncParts01 = m_SyncParts01 & ~mask;
2077 }
2078 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2079 {
2080 offset = ( part_id % 32 );
2081 mask = 1 << offset;
2082
2083 m_SyncParts02 = m_SyncParts02 & ~mask;
2084 }
2085 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2086 {
2087 offset = ( part_id % 63 );
2088 mask = 1 << offset;
2089
2090 m_SyncParts03 = m_SyncParts03 & ~mask;
2091 }
2092 }
2093
2094 bool IsPartBuildInSyncData( int part_id )
2095 {
2096 //part_id must starts from index = 1
2097 int offset;
2098 int mask;
2099
2100 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
2101 {
2102 offset = part_id - 1;
2103 mask = 1 << offset;
2104
2105 if ( ( m_SyncParts01 & mask ) > 0 )
2106 {
2107 return true;
2108 }
2109 }
2110 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
2111 {
2112 offset = ( part_id % 32 );
2113 mask = 1 << offset;
2114
2115 if ( ( m_SyncParts02 & mask ) > 0 )
2116 {
2117 return true;
2118 }
2119 }
2120 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
2121 {
2122 offset = ( part_id % 63 );
2123 mask = 1 << offset;
2124
2125 if ( ( m_SyncParts03 & mask ) > 0 )
2126 {
2127 return true;
2128 }
2129 }
2130
2131 return false;
2132 }
2133
2134 protected void RegisterActionForSync( int part_id, int action_id )
2135 {
2136 m_InteractedPartId = part_id;
2137 m_PerformedActionId = action_id;
2138 }
2139
2140 protected void ResetActionSyncData()
2141 {
2142 //reset data
2143 m_InteractedPartId = -1;
2145 }
2146
2147 protected void SetActionFromSyncData()
2148 {
2149 if ( m_InteractedPartId > -1 && m_PerformedActionId > -1 )
2150 {
2152 int build_action_id = m_PerformedActionId;
2153
2154 switch( build_action_id )
2155 {
2156 case AT_BUILD_PART : OnPartBuiltClient( constrution_part.GetPartName(), build_action_id ); break;
2157 case AT_DISMANTLE_PART : OnPartDismantledClient( constrution_part.GetPartName(), build_action_id ); break;
2158 case AT_DESTROY_PART : OnPartDestroyedClient( constrution_part.GetPartName(), build_action_id ); break;
2159 }
2160 }
2161 }
2162 //------
2163
2165 {
2166 string key = part.m_PartName;
2167 bool is_base = part.IsBase();
2168 bool is_part_built_sync = IsPartBuildInSyncData( part.GetId() );
2169 bsbDebugSpam("[bsb] " + GetDebugName(this) + " SetPartFromSyncData try to sync: built=" + is_part_built_sync + " key=" + key + " part=" + part.GetPartName() + " part_built=" + part.IsBuilt());
2170 if ( is_part_built_sync )
2171 {
2172 if ( !part.IsBuilt() )
2173 {
2174 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData +++ " + key);
2175 GetConstruction().AddToConstructedParts( key );
2176 GetConstruction().ShowConstructionPartPhysics(part.GetPartName());
2177
2178 if (is_base)
2179 {
2181 RemoveProxyPhysics( ANIMATION_DEPLOYED );
2182 }
2183 }
2184 }
2185 else
2186 {
2187 if ( part.IsBuilt() )
2188 {
2189 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData --- " + key);
2190 GetConstruction().RemoveFromConstructedParts( key );
2191 GetConstruction().HideConstructionPartPhysics(part.GetPartName());
2192
2193 if (is_base)
2194 {
2196 AddProxyPhysics( ANIMATION_DEPLOYED );
2197 }
2198 }
2199 }
2200
2201 //check slot lock for material attachments
2202 GetConstruction().SetLockOnAttachedMaterials( part.GetPartName(), part.IsBuilt() ); //failsafe for corrupted sync/storage data
2203 }
2204
2205 //set construction parts based on synchronized data
2207 {
2208 Construction construction = GetConstruction();
2209 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
2210
2211 for ( int i = 0; i < construction_parts.Count(); ++i )
2212 {
2213 string key = construction_parts.GetKey( i );
2214 ConstructionPart value = construction_parts.Get( key );
2215 SetPartFromSyncData(value);
2216 }
2217
2218 //regenerate navmesh
2219 UpdateNavmesh();
2220 }
2221
2222 protected ConstructionPart GetConstructionPartById( int id )
2223 {
2224 Construction construction = GetConstruction();
2225 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
2226
2227 for ( int i = 0; i < construction_parts.Count(); ++i )
2228 {
2229 string key = construction_parts.GetKey( i );
2230 ConstructionPart value = construction_parts.Get( key );
2231
2232 if ( value.GetId() == id )
2233 {
2234 return value;
2235 }
2236 }
2237
2238 return NULL;
2239 }
2240 //
2241
2242 //Base
2243 bool HasBase()
2244 {
2245 return m_HasBase;
2246 }
2247
2248 void SetBaseState( bool has_base )
2249 {
2250 m_HasBase = has_base;
2251 }
2252
2253 override bool IsDeployable()
2254 {
2255 return true;
2256 }
2257
2258 bool IsOpened()
2259 {
2260 return false;
2261 }
2262
2263 //--- CONSTRUCTION KIT
2265 {
2266 ItemBase construction_kit = ItemBase.Cast( GetGame().CreateObjectEx( GetConstructionKitType(), GetKitSpawnPosition(), ECE_PLACE_ON_SURFACE ) );
2267 if ( m_ConstructionKitHealth > 0 )
2268 {
2269 construction_kit.SetHealth( m_ConstructionKitHealth );
2270 }
2271
2272 return construction_kit;
2273 }
2274
2275 void CreateConstructionKitInHands(notnull PlayerBase player)
2276 {
2277 ItemBase construction_kit = ItemBase.Cast(player.GetHumanInventory().CreateInHands(GetConstructionKitType()));
2278 if ( m_ConstructionKitHealth > 0 )
2279 {
2280 construction_kit.SetHealth( m_ConstructionKitHealth );
2281 }
2282 }
2283
2284 protected vector GetKitSpawnPosition()
2285 {
2286 return GetPosition();
2287 }
2288
2289 protected string GetConstructionKitType()
2290 {
2291 return "";
2292 }
2293
2294 void DestroyConstructionKit( ItemBase construction_kit )
2295 {
2296 m_ConstructionKitHealth = construction_kit.GetHealth();
2297 GetGame().ObjectDelete( construction_kit );
2298 }
2299
2300 //--- CONSTRUCTION
2301 void DestroyConstruction()
2302 {
2303 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " DestroyConstruction");
2304 GetGame().ObjectDelete( this );
2305 }
2306
2307 // --- EVENTS
2308 override void OnStoreSave( ParamsWriteContext ctx )
2309 {
2310 super.OnStoreSave( ctx );
2311
2312 //sync parts 01
2313 ctx.Write( m_SyncParts01 );
2314 ctx.Write( m_SyncParts02 );
2315 ctx.Write( m_SyncParts03 );
2316
2317 ctx.Write( m_HasBase );
2318 }
2319
2320 override bool OnStoreLoad( ParamsReadContext ctx, int version )
2321 {
2322 if ( !super.OnStoreLoad( ctx, version ) )
2323 return false;
2324
2325 //--- Base building data ---
2326 //Restore synced parts data
2327 if ( !ctx.Read( m_SyncParts01 ) )
2328 {
2329 m_SyncParts01 = 0; //set default
2330 return false;
2331 }
2332 if ( !ctx.Read( m_SyncParts02 ) )
2333 {
2334 m_SyncParts02 = 0; //set default
2335 return false;
2336 }
2337 if ( !ctx.Read( m_SyncParts03 ) )
2338 {
2339 m_SyncParts03 = 0; //set default
2340 return false;
2341 }
2342
2343 //has base
2344 if ( !ctx.Read( m_HasBase ) )
2345 {
2346 m_HasBase = false;
2347 return false;
2348 }
2349 //---
2350
2351 return true;
2352 }
2353
2354 override void AfterStoreLoad()
2355 {
2356 super.AfterStoreLoad();
2357
2359 {
2361 }
2362 }
2363
2365 {
2366 //update server data
2368
2369 //set base state
2370 ConstructionPart construction_part = GetConstruction().GetBaseConstructionPart();
2371 SetBaseState( construction_part.IsBuilt() ) ;
2372
2373 //synchronize after load
2375 }
2376
2377 override void OnCreatePhysics()
2378 {
2379 super.OnCreatePhysics();
2382 }
2383
2384 override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
2385 {
2387 return;
2388
2389 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
2390
2391 if (GetGame().IsMultiplayer() && !GetGame().IsServer())
2392 return;
2393
2394 Construction construction = GetConstruction();
2395 string part_name = zone;
2396 part_name.ToLower();
2397
2398 if ( newLevel == GameConstants.STATE_RUINED )
2399 {
2400 ConstructionPart construction_part = construction.GetConstructionPart( part_name );
2401
2402 if ( construction_part && construction.IsPartConstructed( part_name ) )
2403 {
2404 construction.DestroyPartServer( null, part_name, AT_DESTROY_PART );
2405 construction.DestroyConnectedParts(part_name);
2406 }
2407
2408 //barbed wire handling (hack-ish)
2409 if ( part_name.Contains("barbed") )
2410 {
2411 BarbedWire barbed_wire = BarbedWire.Cast( FindAttachmentBySlotName( zone ) );
2412 if (barbed_wire)
2413 barbed_wire.SetMountedState( false );
2414 }
2415 }
2416 }
2417
2418 override void EEOnAfterLoad()
2419 {
2421 {
2423 }
2424
2425 super.EEOnAfterLoad();
2426 }
2427
2428 override void EEInit()
2429 {
2430 super.EEInit();
2431
2432 // init visuals and physics
2433 InitBaseState();
2434
2435 //debug
2436 #ifdef DEVELOPER
2438 #endif
2439 }
2440
2441 override void EEItemAttached( EntityAI item, string slot_name )
2442 {
2443 super.EEItemAttached( item, slot_name );
2444
2445 CheckForHybridAttachments( item, slot_name );
2446 UpdateVisuals();
2447 UpdateAttachmentPhysics( slot_name, false );
2448 }
2449
2450 override void EEItemDetached( EntityAI item, string slot_name )
2451 {
2452 super.EEItemDetached( item, slot_name );
2453
2454 UpdateVisuals();
2455 UpdateAttachmentPhysics( slot_name, false );
2456 }
2457
2458 protected void OnSetSlotLock( int slotId, bool locked, bool was_locked )
2459 {
2460 string slot_name = InventorySlots.GetSlotName( slotId );
2461 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint( "inv: OnSetSlotLock " + GetDebugName( this ) + " slot=" + slot_name + " locked=" + locked + " was_locked=" + was_locked );
2462
2463 UpdateAttachmentVisuals( slot_name, locked );
2464 UpdateAttachmentPhysics( slot_name, locked );
2465 }
2466
2467 //ignore out of reach condition
2468 override bool IgnoreOutOfReachCondition()
2469 {
2470 return true;
2471 }
2472
2473 //CONSTRUCTION EVENTS
2474 //Build
2475 void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
2476 {
2477 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
2478
2479 //check base state
2480 if (construtionPart.IsBase())
2481 {
2482 SetBaseState(true);
2483
2484 //spawn kit
2486 }
2487
2488 //register constructed parts for synchronization
2489 RegisterPartForSync(construtionPart.GetId());
2490
2491 //register action that was performed on part
2492 RegisterActionForSync(construtionPart.GetId(), action_id);
2493
2494 //synchronize
2496
2497 SetPartFromSyncData(construtionPart); // server part of sync, client will be synced from SetPartsFromSyncData
2498
2499 UpdateNavmesh();
2500
2501 //update visuals
2502 UpdateVisuals();
2503
2504 //reset action sync data
2506 }
2507
2508 void OnPartBuiltClient(string part_name, int action_id)
2509 {
2510 //play sound
2511 SoundBuildStart( part_name );
2512 }
2513
2514 //Dismantle
2515 void OnPartDismantledServer(notnull Man player, string part_name, int action_id)
2516 {
2517 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDismantledServer " + part_name);
2518 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
2519
2520 //register constructed parts for synchronization
2521 UnregisterPartForSync(construtionPart.GetId());
2522
2523 //register action that was performed on part
2524 RegisterActionForSync(construtionPart.GetId(), action_id);
2525
2526 //synchronize
2528
2529 // server part of sync, client will be synced from SetPartsFromSyncData
2530 SetPartFromSyncData(construtionPart);
2531
2532 UpdateNavmesh();
2533
2534 //update visuals
2535 UpdateVisuals();
2536
2537 //reset action sync data
2539
2540 //check base state
2541 if (construtionPart.IsBase())
2542 {
2543 //Destroy construction
2545 }
2546 }
2547
2548 void OnPartDismantledClient( string part_name, int action_id )
2549 {
2550 //play sound
2551 SoundDismantleStart( part_name );
2552 }
2553
2554 //Destroy
2555 void OnPartDestroyedServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part = false)
2556 {
2557 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDestroyedServer " + part_name);
2558 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
2559
2560 //register constructed parts for synchronization
2561 UnregisterPartForSync(construtionPart.GetId());
2562
2563 //register action that was performed on part
2564 RegisterActionForSync(construtionPart.GetId(), action_id);
2565
2566 //synchronize
2568
2569 // server part of sync, client will be synced from SetPartsFromSyncData
2570 SetPartFromSyncData(construtionPart);
2571
2572 UpdateNavmesh();
2573
2574 //update visuals
2575 UpdateVisuals();
2576
2577 //reset action sync data
2579
2580 //check base state
2581 if (construtionPart.IsBase())
2582 {
2583 //Destroy construction
2585 }
2586 }
2587
2588 void OnPartDestroyedClient( string part_name, int action_id )
2589 {
2590 //play sound
2591 SoundDestroyStart( part_name );
2592 }
2593
2595 protected void HandleItemFalling(ConstructionPart part)
2596 {
2597 bool process = false;
2598
2599 //TODO: add a parameter to parts' config classes?
2600 process |= part.m_PartName.Contains("_roof");
2601 process |= part.m_PartName.Contains("_platform");
2602 process |= part.m_PartName.Contains("_stair");
2603
2604 if (process)
2605 {
2606 if (!MemoryPointExists(part.m_PartName + "_min") || !MemoryPointExists(part.m_PartName + "_max"))
2607 {
2608 Debug.Log("min/max memory points do not exist for part: " + part.m_PartName);
2609 return;
2610 }
2611
2612 vector mins, maxs;
2613 mins = ModelToWorld(GetMemoryPointPos(part.m_PartName + "_min"));
2614 maxs = ModelToWorld(GetMemoryPointPos(part.m_PartName + "_max"));
2615
2616 //sanitize minmaxs
2617 vector minTmp, maxTmp;
2618 minTmp[0] = Math.Min(mins[0],maxs[0]);
2619 maxTmp[0] = Math.Max(mins[0],maxs[0]);
2620 minTmp[1] = Math.Min(mins[1],maxs[1]);
2621 maxTmp[1] = Math.Max(mins[1],maxs[1]);
2622 minTmp[2] = Math.Min(mins[2],maxs[2]);
2623 maxTmp[2] = Math.Max(mins[2],maxs[2]);
2624 mins = minTmp;
2625 maxs = maxTmp;
2626
2627 maxs[1] = maxs[1] + 0.35; //reach a little above..
2628
2629 ItemFall(mins,maxs);
2630 }
2631 }
2632
2634 protected void ItemFall(vector min, vector max)
2635 {
2636 array<EntityAI> foundEntities = new array<EntityAI>();
2637 DayZPlayerUtils.PhysicsGetEntitiesInBox(min,max,foundEntities);
2638
2639 //filtering
2640 ItemBase item;
2641 foreach (EntityAI entity : foundEntities)
2642 {
2643 if (Class.CastTo(item,entity) && !item.CanUseConstruction()) //BB items?
2644 item.ThrowPhysically(null,vector.Zero);
2645 }
2646 }
2647
2648 // --- UPDATE
2649 void InitBaseState()
2650 {
2651 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::InitBaseState ");
2652
2653 InitVisuals();
2654 UpdateNavmesh(); //regenerate navmesh
2655 GetConstruction().InitBaseState();
2656 }
2657
2658 void InitVisuals()
2659 {
2660 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " InitVisuals");
2661 //check base
2662 if ( !HasBase() )
2663 {
2664 SetAnimationPhase( ANIMATION_DEPLOYED, 0 );
2665 }
2666 else
2667 {
2668 SetAnimationPhase( ANIMATION_DEPLOYED, 1 );
2669 }
2670
2671 GetConstruction().UpdateVisuals();
2672 }
2673
2674 void UpdateVisuals()
2675 {
2676 array<string> attachmentSlots = new array<string>;
2677
2678 GetAttachmentSlots(this, attachmentSlots);
2679 foreach (string slotName : attachmentSlots)
2680 {
2682 }
2683
2684 //check base
2685 if (!HasBase())
2686 SetAnimationPhase(ANIMATION_DEPLOYED, 0);
2687 else
2688 SetAnimationPhase(ANIMATION_DEPLOYED, 1);
2689
2690 GetConstruction().UpdateVisuals();
2691 }
2692
2693 void UpdateAttachmentVisuals(string slot_name, bool is_locked)
2694 {
2695 string slotNameMounted = slot_name + "_Mounted";
2696 EntityAI attachment = FindAttachmentBySlotName(slot_name);
2697
2698 if (attachment)
2699 {
2700 BarbedWire barbedWire = BarbedWire.Cast(attachment);
2701 if (barbedWire && barbedWire.IsMounted())
2702 CreateAreaDamage(slotNameMounted);
2703 else
2704 DestroyAreaDamage(slotNameMounted);
2705
2706 if (is_locked)
2707 {
2708 SetAnimationPhase(slotNameMounted, 0);
2709 SetAnimationPhase(slot_name, 1);
2710 }
2711 else
2712 {
2713 SetAnimationPhase(slotNameMounted, 1);
2714 SetAnimationPhase(slot_name, 0);
2715 }
2716 }
2717 else
2718 {
2719 SetAnimationPhase(slotNameMounted, 1);
2720 SetAnimationPhase(slot_name, 1);
2721
2722 DestroyAreaDamage(slotNameMounted);
2723 }
2724 }
2725
2726 // avoid calling this function on frequent occasions, it's a massive performance hit
2727 void UpdatePhysics()
2728 {
2730 bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::UpdatePhysics");
2731
2732 array<string> attachmentSlots = new array<string>;
2733 GetAttachmentSlots(this, attachmentSlots);
2734
2736 bsbDebugPrint("[bsb] " + GetDebugName(this) + " att_cnt=" + attachmentSlots.Count());
2737
2738 foreach (string slotName : attachmentSlots)
2739 {
2741 }
2742
2743 //check base
2744 if (!HasBase())
2745 {
2747 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " ADD");
2748
2749 AddProxyPhysics(ANIMATION_DEPLOYED);
2750 }
2751 else
2752 {
2754 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " RM");
2755
2756 RemoveProxyPhysics(ANIMATION_DEPLOYED);
2757 }
2758
2759 GetConstruction().UpdatePhysics();
2760 UpdateNavmesh();
2761 }
2762
2763 void UpdateAttachmentPhysics( string slot_name, bool is_locked )
2764 {
2765 //checks for invalid appends; hotfix
2766 if ( !m_Mountables || m_Mountables.Find(slot_name) == -1 )
2767 return;
2768 //----------------------------------
2769 string slot_name_mounted = slot_name + "_Mounted";
2770 EntityAI attachment = FindAttachmentBySlotName( slot_name );
2771
2772 //remove proxy physics
2773 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Removing ATT SLOT=" + slot_name + " RM / RM");
2774 RemoveProxyPhysics( slot_name_mounted );
2775 RemoveProxyPhysics( slot_name );
2776
2777 if ( attachment )
2778 {
2779 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Adding ATT=" + Object.GetDebugName(attachment));
2780 if ( is_locked )
2781 {
2782 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " RM / RM");
2783 AddProxyPhysics( slot_name_mounted );
2784 }
2785 else
2786 {
2787 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " ADD");
2788 AddProxyPhysics( slot_name );
2789 }
2790 }
2791 }
2792
2793 protected void UpdateNavmesh()
2794 {
2795 SetAffectPathgraph( true, false );
2796 GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( GetGame().UpdatePathgraphRegionByObject, 100, false, this );
2797 }
2798
2799 override bool CanUseConstruction()
2800 {
2801 return true;
2802 }
2803
2804 override bool CanUseConstructionBuild()
2805 {
2806 return true;
2807 }
2808
2809 protected bool IsAttachmentSlotLocked( EntityAI attachment )
2810 {
2811 if ( attachment )
2812 {
2813 InventoryLocation inventory_location = new InventoryLocation;
2814 attachment.GetInventory().GetCurrentInventoryLocation( inventory_location );
2815
2816 return GetInventory().GetSlotLock( inventory_location.GetSlot() );
2817 }
2818
2819 return false;
2820 }
2821
2822 protected bool IsAttachmentSlotLocked( string slot_name )
2823 {
2824 return GetInventory().GetSlotLock( InventorySlots.GetSlotIdFromString( slot_name ) );
2825 }
2826
2827 //--- ATTACHMENT SLOTS
2828 void GetAttachmentSlots( EntityAI entity, out array<string> attachment_slots )
2829 {
2830 string config_path = "CfgVehicles" + " " + entity.GetType() + " " + "attachments";
2831 if ( GetGame().ConfigIsExisting( config_path ) )
2832 {
2833 GetGame().ConfigGetTextArray( config_path, attachment_slots );
2834 }
2835 }
2836
2837 bool CheckSlotVerticalDistance( int slot_id, PlayerBase player )
2838 {
2839 return true;
2840 }
2841
2842 protected bool CheckMemoryPointVerticalDistance( float max_dist, string selection, PlayerBase player )
2843 {
2844 return true;
2845 }
2846
2847 protected bool CheckLevelVerticalDistance( float max_dist, string selection, PlayerBase player )
2848 {
2849 return true;
2850 }
2851
2852 // --- INIT
2853 void ConstructionInit()
2854 {
2855 if ( !m_Construction )
2856 {
2857 m_Construction = new Construction( this );
2858 }
2859
2860 GetConstruction().Init();
2861 }
2862
2864 {
2865 return m_Construction;
2866 }
2867
2868 //--- INVENTORY/ATTACHMENTS CONDITIONS
2869 //attachments
2870 override bool CanReceiveAttachment( EntityAI attachment, int slotId )
2871 {
2872 return super.CanReceiveAttachment(attachment, slotId);
2873 }
2874
2876 {
2877 int attachment_count = GetInventory().AttachmentCount();
2878 if ( attachment_count > 0 )
2879 {
2880 if ( HasBase() && attachment_count == 1 )
2881 {
2882 return false;
2883 }
2884
2885 return true;
2886 }
2887
2888 return false;
2889 }
2890
2891 override bool ShowZonesHealth()
2892 {
2893 return true;
2894 }
2895
2896 override bool IsTakeable()
2897 {
2898 return false;
2899 }
2900
2901 //this into/outo parent.Cargo
2902 override bool CanPutInCargo( EntityAI parent )
2903 {
2904 return false;
2905 }
2906
2907 override bool CanRemoveFromCargo( EntityAI parent )
2908 {
2909 return false;
2910 }
2911
2912 //hands
2913 override bool CanPutIntoHands( EntityAI parent )
2914 {
2915 return false;
2916 }
2917
2918 //--- ACTION CONDITIONS
2919 //direction
2920 override bool IsFacingPlayer( PlayerBase player, string selection )
2921 {
2922 return true;
2923 }
2924
2925 override bool IsPlayerInside( PlayerBase player, string selection )
2926 {
2927 return true;
2928 }
2929
2932 {
2933 return false;
2934 }
2935
2936 //camera direction check
2937 bool IsFacingCamera( string selection )
2938 {
2939 return true;
2940 }
2941
2942 //roof check
2943 bool PerformRoofCheckForBase( string partName, PlayerBase player, out bool result )
2944 {
2945 return false;
2946 }
2947
2948 //selection->player distance check
2949 bool HasProperDistance( string selection, PlayerBase player )
2950 {
2951 return true;
2952 }
2953
2954 //folding
2956 {
2957 if ( HasBase() || GetInventory().AttachmentCount() > 0 )
2958 {
2959 return false;
2960 }
2961
2962 return true;
2963 }
2964
2966 {
2969
2970 return item;
2971 }
2972
2973 //Damage triggers (barbed wire)
2974 void CreateAreaDamage( string slot_name, float rotation_angle = 0 )
2975 {
2976 if ( GetGame() && GetGame().IsServer() )
2977 {
2978 //destroy area damage if some already exists
2979 DestroyAreaDamage( slot_name );
2980
2981 //create new area damage
2983 areaDamage.SetDamageComponentType(AreaDamageComponentTypes.HITZONE);
2984
2985 vector min_max[2];
2986 if ( MemoryPointExists( slot_name + "_min" ) )
2987 {
2988 min_max[0] = GetMemoryPointPos( slot_name + "_min" );
2989 }
2990 if ( MemoryPointExists( slot_name + "_max" ) )
2991 {
2992 min_max[1] = GetMemoryPointPos( slot_name + "_max" );
2993 }
2994
2995 //get proper trigger extents (min<max)
2996 vector extents[2];
2997 GetConstruction().GetTriggerExtents( min_max, extents );
2998
2999 //get box center
3000 vector center;
3001 center = GetConstruction().GetBoxCenter( min_max );
3002 center = ModelToWorld( center );
3003
3004 //rotate center if needed
3005 vector orientation = GetOrientation();;
3006 CalcDamageAreaRotation( rotation_angle, center, orientation );
3007
3008 areaDamage.SetExtents( extents[0], extents[1] );
3009 areaDamage.SetAreaPosition( center );
3010 areaDamage.SetAreaOrientation( orientation );
3011 areaDamage.SetLoopInterval( 1.0 );
3012 areaDamage.SetDeferDuration( 0.2 );
3013 areaDamage.SetHitZones( { "Torso","LeftHand","LeftLeg","LeftFoot","RightHand","RightLeg","RightFoot" } );
3014 areaDamage.SetAmmoName( "BarbedWireHit" );
3015 areaDamage.Spawn();
3016
3017 m_DamageTriggers.Insert( slot_name, areaDamage );
3018 }
3019 }
3020
3021 void CalcDamageAreaRotation( float angle_deg, out vector center, out vector orientation )
3022 {
3023 if ( angle_deg != 0 )
3024 {
3025 //orientation
3026 orientation[0] = orientation[0] - angle_deg;
3027
3028 //center
3029 vector rotate_axis;
3030 if ( MemoryPointExists( "rotate_axis" ) )
3031 {
3032 rotate_axis = ModelToWorld( GetMemoryPointPos( "rotate_axis" ) );
3033 }
3034 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];
3035 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];
3036 center[0] = r_center_x;
3037 center[2] = r_center_z;
3038 }
3039 }
3040
3041 void DestroyAreaDamage( string slot_name )
3042 {
3043 if (GetGame() && GetGame().IsServer())
3044 {
3046 if (m_DamageTriggers.Find(slot_name, areaDamage))
3047 {
3048 if (areaDamage)
3049 {
3050 areaDamage.Destroy();
3051 }
3052
3053 m_DamageTriggers.Remove( slot_name );
3054 }
3055 }
3056 }
3057
3058 override bool IsIgnoredByConstruction()
3059 {
3060 return true;
3061 }
3062
3063 //================================================================
3064 // SOUNDS
3065 //================================================================
3066 protected void SoundBuildStart( string part_name )
3067 {
3068 PlaySoundSet( m_Sound, GetBuildSoundByMaterial( part_name ), 0.1, 0.1 );
3069 }
3070
3071 protected void SoundDismantleStart( string part_name )
3072 {
3073 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
3074 }
3075
3076 protected void SoundDestroyStart( string part_name )
3077 {
3078 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
3079 }
3080
3081 protected string GetBuildSoundByMaterial( string part_name )
3082 {
3083 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
3084
3085 switch ( material_type )
3086 {
3087 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_BUILD_WOOD_LOG;
3088 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_BUILD_WOOD_PLANK;
3089 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_BUILD_WOOD_STAIRS;
3090 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_BUILD_METAL;
3091 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_BUILD_WIRE;
3092 }
3093
3094 return "";
3095 }
3096
3097 protected string GetDismantleSoundByMaterial( string part_name )
3098 {
3099 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
3100
3101 switch ( material_type )
3102 {
3103 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_DISMANTLE_WOOD_LOG;
3104 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_DISMANTLE_WOOD_PLANK;
3105 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_DISMANTLE_WOOD_STAIRS;
3106 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_DISMANTLE_METAL;
3107 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_DISMANTLE_WIRE;
3108 }
3109
3110 return "";
3111 }
3112
3113 //misc
3114 void CheckForHybridAttachments( EntityAI item, string slot_name )
3115 {
3116 if (!GetGame().IsMultiplayer() || GetGame().IsServer())
3117 {
3118 //if this is a hybrid attachment, set damage of appropriate damage zone. Zone name must match slot name...WIP
3119 if (m_HybridAttachments && m_HybridAttachments.Find(slot_name) != -1)
3120 {
3121 SetHealth(slot_name,"Health",item.GetHealth());
3122 }
3123 }
3124 }
3125
3126 override int GetDamageSystemVersionChange()
3127 {
3128 return 111;
3129 }
3130
3131 override void SetActions()
3132 {
3133 super.SetActions();
3134
3138 }
3139
3140 //================================================================
3141 // DEBUG
3142 //================================================================
3143 protected void DebugCustomState()
3144 {
3145 }
3146
3149 {
3150 return null;
3151 }
3152
3153 override void OnDebugSpawn()
3154 {
3155 FullyBuild();
3156 }
3157
3158 void FullyBuild()
3159 {
3161 array<ConstructionPart> parts = GetConstruction().GetConstructionParts().GetValueArray();
3162
3163 Man p;
3164
3165 #ifdef SERVER
3166 array<Man> players = new array<Man>;
3167 GetGame().GetWorld().GetPlayerList(players);
3168 if (players.Count())
3169 p = players[0];
3170 #else
3171 p = GetGame().GetPlayer();
3172 #endif
3173
3174 foreach (ConstructionPart part : parts)
3175 {
3176 bool excluded = false;
3177 string partName = part.GetPartName();
3178 if (excludes)
3179 {
3180 foreach (string exclude : excludes)
3181 {
3182 if (partName.Contains(exclude))
3183 {
3184 excluded = true;
3185 break;
3186 }
3187 }
3188 }
3189
3190 if (!excluded)
3191 {
3192 OnPartBuiltServer(p, partName, AT_BUILD_PART);
3193 }
3194 }
3195
3196 GetConstruction().UpdateVisuals();
3197 }
3198}
3199
3200void bsbDebugPrint (string s)
3201{
3202#ifdef BSB_DEBUG
3203 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
3204#else
3205 //Print("" + s); // comment/uncomment to hide/see debug logs
3206#endif
3207}
3208void bsbDebugSpam (string s)
3209{
3210#ifdef BSB_DEBUG_SPAM
3211 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
3212#else
3213 //Print("" + s); // comment/uncomment to hide/see debug logs
3214#endif
3215}
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