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

◆ GetKitSpawnPosition()

vector bsbDebugPrint::GetKitSpawnPosition ( )
protected

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

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