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

◆ EEInit()

override void bsbDebugPrint::EEInit ( )
protected

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

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