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

◆ GetConstructionKitType()

string bsbDebugPrint::GetConstructionKitType ( )
protected

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

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