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

◆ IsOpened()

bool bsbDebugPrint::IsOpened ( )
protected

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

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

Используется в PluginBase::EditorToggle(), PluginBase::EditorUpdate(), LayoutHolder::Toggle() и ClosableContainer::UpdateInterval().