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

◆ IsDeployable()

override bool bsbDebugPrint::IsDeployable ( )
protected

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

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