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

◆ DestroyConstructionKit()

void bsbDebugPrint::DestroyConstructionKit ( ItemBase construction_kit)
protected

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

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