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

◆ GetLoopFoldSoundset()

string SpawnItemOnLocation::GetLoopFoldSoundset ( )
protected

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

1424{
1425 const string ANIMATION_DEPLOYED = "Deployed";
1426
1427 float m_ConstructionKitHealth; //stored health value for used construction kit
1428
1430
1431 bool m_HasBase;
1432 //variables for synchronization of base building parts (2x31 is the current limit)
1433 int m_SyncParts01; //synchronization for already built parts (31 parts)
1434 int m_SyncParts02; //synchronization for already built parts (+31 parts)
1435 int m_SyncParts03; //synchronization for already built parts (+31 parts)
1436 int m_InteractedPartId; //construction part id that an action was performed on
1437 int m_PerformedActionId; //action id that was performed on a construction part
1438
1439 //Sounds
1440 //build
1441 const string SOUND_BUILD_WOOD_LOG = "putDown_WoodLog_SoundSet";
1442 const string SOUND_BUILD_WOOD_PLANK = "putDown_WoodPlank_SoundSet";
1443 const string SOUND_BUILD_WOOD_STAIRS = "putDown_WoodStairs_SoundSet";
1444 const string SOUND_BUILD_METAL = "putDown_MetalPlank_SoundSet";
1445 const string SOUND_BUILD_WIRE = "putDown_BarbedWire_SoundSet";
1446 //dismantle
1447 const string SOUND_DISMANTLE_WOOD_LOG = "Crash_WoodPlank_SoundSet";
1448 const string SOUND_DISMANTLE_WOOD_PLANK = "Crash_WoodPlank_SoundSet";
1449 const string SOUND_DISMANTLE_WOOD_STAIRS = "Crash_WoodPlank_SoundSet";
1450 const string SOUND_DISMANTLE_METAL = "Crash_MetalPlank_SoundSet";
1451 const string SOUND_DISMANTLE_WIRE = "putDown_BarbedWire_SoundSet";
1452
1453 protected EffectSound m_Sound;
1454
1458
1459 // Constructor
1460 void BaseBuildingBase()
1461 {
1463
1464 //synchronized variables
1465 RegisterNetSyncVariableInt( "m_SyncParts01" );
1466 RegisterNetSyncVariableInt( "m_SyncParts02" );
1467 RegisterNetSyncVariableInt( "m_SyncParts03" );
1468 RegisterNetSyncVariableInt( "m_InteractedPartId" );
1469 RegisterNetSyncVariableInt( "m_PerformedActionId" );
1470 RegisterNetSyncVariableBool( "m_HasBase" );
1471
1472 //Construction init
1474
1475 if (ConfigIsExisting("hybridAttachments"))
1476 {
1478 ConfigGetTextArray("hybridAttachments", m_HybridAttachments);
1479 }
1480 if (ConfigIsExisting("mountables"))
1481 {
1483 ConfigGetTextArray("mountables", m_Mountables);
1484 }
1485
1486 ProcessInvulnerabilityCheck(GetInvulnerabilityTypeString());
1487 }
1488
1489 override void EEDelete(EntityAI parent)
1490 {
1491 super.EEDelete(parent);
1492
1493 foreach (AreaDamageManager areaDamage : m_DamageTriggers)
1494 {
1495 areaDamage.Destroy();
1496 }
1497
1498 }
1499
1500 override string GetInvulnerabilityTypeString()
1501 {
1502 return "disableBaseDamage";
1503 }
1504
1505 override bool CanObstruct()
1506 {
1507 return true;
1508 }
1509
1510 override int GetHideIconMask()
1511 {
1512 return EInventoryIconVisibility.HIDE_VICINITY;
1513 }
1514
1515 override void InitItemSounds()
1516 {
1517 super.InitItemSounds();
1518
1520 SoundParameters params = new SoundParameters();
1521 params.m_Loop = true;
1522
1523 if (GetFoldSoundset() != string.Empty)
1524 handler.AddSound(SoundConstants.ITEM_FOLD, GetFoldSoundset());
1525 if (GetLoopFoldSoundset() != string.Empty)
1526 handler.AddSound(SoundConstants.ITEM_FOLD_LOOP, GetLoopFoldSoundset(), params);
1527 }
1528
1529 override string GetFoldSoundset()
1530 {
1531 return "putDown_FenceKit_SoundSet";
1532 }
1533
1534 override string GetLoopFoldSoundset()
1535 {
1536 return "Shelter_Site_Build_Loop_SoundSet";
1537 }
1538
1539 // --- SYNCHRONIZATION
1541 {
1542 if ( GetGame().IsServer() )
1543 {
1544 SetSynchDirty();
1545 }
1546 }
1547
1548 override void OnVariablesSynchronized()
1549 {
1550 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnVariablesSynchronized");
1551 super.OnVariablesSynchronized();
1552
1554 }
1555
1556 protected void OnSynchronizedClient()
1557 {
1558 //update parts
1560
1561 //update action on part
1563
1564 //update visuals (client)
1565 UpdateVisuals();
1566 }
1567
1568 //parts synchronization
1569 void RegisterPartForSync( int part_id )
1570 {
1571 //part_id must starts from index = 1
1572 int offset;
1573 int mask;
1574
1575 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
1576 {
1577 offset = part_id - 1;
1578 mask = 1 << offset;
1579
1580 m_SyncParts01 = m_SyncParts01 | mask;
1581 }
1582 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
1583 {
1584 offset = ( part_id % 32 );
1585 mask = 1 << offset;
1586
1587 m_SyncParts02 = m_SyncParts02 | mask;
1588 }
1589 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
1590 {
1591 offset = ( part_id % 63 );
1592 mask = 1 << offset;
1593
1594 m_SyncParts03 = m_SyncParts03 | mask;
1595 }
1596 }
1597
1598 void UnregisterPartForSync( int part_id )
1599 {
1600 //part_id must starts from index = 1
1601 int offset;
1602 int mask;
1603
1604 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
1605 {
1606 offset = part_id - 1;
1607 mask = 1 << offset;
1608
1609 m_SyncParts01 = m_SyncParts01 & ~mask;
1610 }
1611 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
1612 {
1613 offset = ( part_id % 32 );
1614 mask = 1 << offset;
1615
1616 m_SyncParts02 = m_SyncParts02 & ~mask;
1617 }
1618 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
1619 {
1620 offset = ( part_id % 63 );
1621 mask = 1 << offset;
1622
1623 m_SyncParts03 = m_SyncParts03 & ~mask;
1624 }
1625 }
1626
1627 bool IsPartBuildInSyncData( int part_id )
1628 {
1629 //part_id must starts from index = 1
1630 int offset;
1631 int mask;
1632
1633 if ( part_id >= 1 && part_id <= 31 ) //<1,31> (31 parts)
1634 {
1635 offset = part_id - 1;
1636 mask = 1 << offset;
1637
1638 if ( ( m_SyncParts01 & mask ) > 0 )
1639 {
1640 return true;
1641 }
1642 }
1643 else if ( part_id >= 32 && part_id <= 62 ) //<32,62> (31 parts)
1644 {
1645 offset = ( part_id % 32 );
1646 mask = 1 << offset;
1647
1648 if ( ( m_SyncParts02 & mask ) > 0 )
1649 {
1650 return true;
1651 }
1652 }
1653 else if ( part_id >= 63 && part_id <= 93 ) //<63,93> (31 parts)
1654 {
1655 offset = ( part_id % 63 );
1656 mask = 1 << offset;
1657
1658 if ( ( m_SyncParts03 & mask ) > 0 )
1659 {
1660 return true;
1661 }
1662 }
1663
1664 return false;
1665 }
1666
1667 protected void RegisterActionForSync( int part_id, int action_id )
1668 {
1669 m_InteractedPartId = part_id;
1670 m_PerformedActionId = action_id;
1671 }
1672
1673 protected void ResetActionSyncData()
1674 {
1675 //reset data
1676 m_InteractedPartId = -1;
1678 }
1679
1680 protected void SetActionFromSyncData()
1681 {
1682 if ( m_InteractedPartId > -1 && m_PerformedActionId > -1 )
1683 {
1685 int build_action_id = m_PerformedActionId;
1686
1687 switch( build_action_id )
1688 {
1689 case AT_BUILD_PART : OnPartBuiltClient( constrution_part.GetPartName(), build_action_id ); break;
1690 case AT_DISMANTLE_PART : OnPartDismantledClient( constrution_part.GetPartName(), build_action_id ); break;
1691 case AT_DESTROY_PART : OnPartDestroyedClient( constrution_part.GetPartName(), build_action_id ); break;
1692 }
1693 }
1694 }
1695 //------
1696
1698 {
1699 string key = part.m_PartName;
1700 bool is_base = part.IsBase();
1701 bool is_part_built_sync = IsPartBuildInSyncData( part.GetId() );
1702 bsbDebugSpam("[bsb] " + GetDebugName(this) + " SetPartFromSyncData try to sync: built=" + is_part_built_sync + " key=" + key + " part=" + part.GetPartName() + " part_built=" + part.IsBuilt());
1703 if ( is_part_built_sync )
1704 {
1705 if ( !part.IsBuilt() )
1706 {
1707 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData +++ " + key);
1708 GetConstruction().AddToConstructedParts( key );
1709 GetConstruction().ShowConstructionPartPhysics(part.GetPartName());
1710
1711 if (is_base)
1712 {
1714 RemoveProxyPhysics( ANIMATION_DEPLOYED );
1715 }
1716 }
1717 }
1718 else
1719 {
1720 if ( part.IsBuilt() )
1721 {
1722 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " SetPartsFromSyncData --- " + key);
1723 GetConstruction().RemoveFromConstructedParts( key );
1724 GetConstruction().HideConstructionPartPhysics(part.GetPartName());
1725
1726 if (is_base)
1727 {
1729 AddProxyPhysics( ANIMATION_DEPLOYED );
1730 }
1731 }
1732 }
1733
1734 //check slot lock for material attachments
1735 GetConstruction().SetLockOnAttachedMaterials( part.GetPartName(), part.IsBuilt() ); //failsafe for corrupted sync/storage data
1736 }
1737
1738 //set construction parts based on synchronized data
1740 {
1741 Construction construction = GetConstruction();
1742 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
1743
1744 for ( int i = 0; i < construction_parts.Count(); ++i )
1745 {
1746 string key = construction_parts.GetKey( i );
1747 ConstructionPart value = construction_parts.Get( key );
1748 SetPartFromSyncData(value);
1749 }
1750
1751 //regenerate navmesh
1752 UpdateNavmesh();
1753 }
1754
1755 protected ConstructionPart GetConstructionPartById( int id )
1756 {
1757 Construction construction = GetConstruction();
1758 map<string, ref ConstructionPart> construction_parts = construction.GetConstructionParts();
1759
1760 for ( int i = 0; i < construction_parts.Count(); ++i )
1761 {
1762 string key = construction_parts.GetKey( i );
1763 ConstructionPart value = construction_parts.Get( key );
1764
1765 if ( value.GetId() == id )
1766 {
1767 return value;
1768 }
1769 }
1770
1771 return NULL;
1772 }
1773 //
1774
1775 //Base
1776 bool HasBase()
1777 {
1778 return m_HasBase;
1779 }
1780
1781 void SetBaseState( bool has_base )
1782 {
1783 m_HasBase = has_base;
1784 }
1785
1786 override bool IsDeployable()
1787 {
1788 return true;
1789 }
1790
1791 bool IsOpened()
1792 {
1793 return false;
1794 }
1795
1796 //--- CONSTRUCTION KIT
1798 {
1799 ItemBase construction_kit = ItemBase.Cast( GetGame().CreateObjectEx( GetConstructionKitType(), GetKitSpawnPosition(), ECE_PLACE_ON_SURFACE ) );
1800 if ( m_ConstructionKitHealth > 0 )
1801 {
1802 construction_kit.SetHealth( m_ConstructionKitHealth );
1803 }
1804
1805 return construction_kit;
1806 }
1807
1808 void CreateConstructionKitInHands(notnull PlayerBase player)
1809 {
1810 ItemBase construction_kit = ItemBase.Cast(player.GetHumanInventory().CreateInHands(GetConstructionKitType()));
1811 if ( m_ConstructionKitHealth > 0 )
1812 {
1813 construction_kit.SetHealth( m_ConstructionKitHealth );
1814 }
1815 }
1816
1817 protected vector GetKitSpawnPosition()
1818 {
1819 return GetPosition();
1820 }
1821
1822 protected string GetConstructionKitType()
1823 {
1824 return "";
1825 }
1826
1827 void DestroyConstructionKit( ItemBase construction_kit )
1828 {
1829 m_ConstructionKitHealth = construction_kit.GetHealth();
1830 GetGame().ObjectDelete( construction_kit );
1831 }
1832
1833 //--- CONSTRUCTION
1834 void DestroyConstruction()
1835 {
1836 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " DestroyConstruction");
1837 GetGame().ObjectDelete( this );
1838 }
1839
1840 // --- EVENTS
1841 override void OnStoreSave( ParamsWriteContext ctx )
1842 {
1843 super.OnStoreSave( ctx );
1844
1845 //sync parts 01
1846 ctx.Write( m_SyncParts01 );
1847 ctx.Write( m_SyncParts02 );
1848 ctx.Write( m_SyncParts03 );
1849
1850 ctx.Write( m_HasBase );
1851 }
1852
1853 override bool OnStoreLoad( ParamsReadContext ctx, int version )
1854 {
1855 if ( !super.OnStoreLoad( ctx, version ) )
1856 return false;
1857
1858 //--- Base building data ---
1859 //Restore synced parts data
1860 if ( !ctx.Read( m_SyncParts01 ) )
1861 {
1862 m_SyncParts01 = 0; //set default
1863 return false;
1864 }
1865 if ( !ctx.Read( m_SyncParts02 ) )
1866 {
1867 m_SyncParts02 = 0; //set default
1868 return false;
1869 }
1870 if ( !ctx.Read( m_SyncParts03 ) )
1871 {
1872 m_SyncParts03 = 0; //set default
1873 return false;
1874 }
1875
1876 //has base
1877 if ( !ctx.Read( m_HasBase ) )
1878 {
1879 m_HasBase = false;
1880 return false;
1881 }
1882 //---
1883
1884 return true;
1885 }
1886
1887 override void AfterStoreLoad()
1888 {
1889 super.AfterStoreLoad();
1890
1892 {
1894 }
1895 }
1896
1898 {
1899 //update server data
1901
1902 //set base state
1903 ConstructionPart construction_part = GetConstruction().GetBaseConstructionPart();
1904 SetBaseState( construction_part.IsBuilt() ) ;
1905
1906 //synchronize after load
1908 }
1909
1910 override void OnCreatePhysics()
1911 {
1912 super.OnCreatePhysics();
1915 }
1916
1917 override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
1918 {
1920 return;
1921
1922 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
1923
1924 if (GetGame().IsMultiplayer() && !GetGame().IsServer())
1925 return;
1926
1927 Construction construction = GetConstruction();
1928 string part_name = zone;
1929 part_name.ToLower();
1930
1931 if ( newLevel == GameConstants.STATE_RUINED )
1932 {
1933 ConstructionPart construction_part = construction.GetConstructionPart( part_name );
1934
1935 if ( construction_part && construction.IsPartConstructed( part_name ) )
1936 {
1937 construction.DestroyPartServer( null, part_name, AT_DESTROY_PART );
1938 construction.DestroyConnectedParts(part_name);
1939 }
1940
1941 //barbed wire handling (hack-ish)
1942 if ( part_name.Contains("barbed") )
1943 {
1944 BarbedWire barbed_wire = BarbedWire.Cast( FindAttachmentBySlotName( zone ) );
1945 if (barbed_wire)
1946 barbed_wire.SetMountedState( false );
1947 }
1948 }
1949 }
1950
1951 override void EEOnAfterLoad()
1952 {
1954 {
1956 }
1957
1958 super.EEOnAfterLoad();
1959 }
1960
1961 override void EEInit()
1962 {
1963 super.EEInit();
1964
1965 // init visuals and physics
1966 InitBaseState();
1967
1968 //debug
1969 #ifdef DEVELOPER
1971 #endif
1972 }
1973
1974 override void EEItemAttached( EntityAI item, string slot_name )
1975 {
1976 super.EEItemAttached( item, slot_name );
1977
1978 CheckForHybridAttachments( item, slot_name );
1979 UpdateVisuals();
1980 UpdateAttachmentPhysics( slot_name, false );
1981 }
1982
1983 override void EEItemDetached( EntityAI item, string slot_name )
1984 {
1985 super.EEItemDetached( item, slot_name );
1986
1987 UpdateVisuals();
1988 UpdateAttachmentPhysics( slot_name, false );
1989 }
1990
1991 protected void OnSetSlotLock( int slotId, bool locked, bool was_locked )
1992 {
1993 string slot_name = InventorySlots.GetSlotName( slotId );
1994 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint( "inv: OnSetSlotLock " + GetDebugName( this ) + " slot=" + slot_name + " locked=" + locked + " was_locked=" + was_locked );
1995
1996 UpdateAttachmentVisuals( slot_name, locked );
1997 UpdateAttachmentPhysics( slot_name, locked );
1998 }
1999
2000 //ignore out of reach condition
2001 override bool IgnoreOutOfReachCondition()
2002 {
2003 return true;
2004 }
2005
2006 //CONSTRUCTION EVENTS
2007 //Build
2008 void OnPartBuiltServer(notnull Man player, string part_name, int action_id)
2009 {
2010 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
2011
2012 //check base state
2013 if (construtionPart.IsBase())
2014 {
2015 SetBaseState(true);
2016
2017 //spawn kit
2019 }
2020
2021 //register constructed parts for synchronization
2022 RegisterPartForSync(construtionPart.GetId());
2023
2024 //register action that was performed on part
2025 RegisterActionForSync(construtionPart.GetId(), action_id);
2026
2027 //synchronize
2029
2030 SetPartFromSyncData(construtionPart); // server part of sync, client will be synced from SetPartsFromSyncData
2031
2032 UpdateNavmesh();
2033
2034 //update visuals
2035 UpdateVisuals();
2036
2037 //reset action sync data
2039 }
2040
2041 void OnPartBuiltClient(string part_name, int action_id)
2042 {
2043 //play sound
2044 SoundBuildStart( part_name );
2045 }
2046
2047 //Dismantle
2048 void OnPartDismantledServer(notnull Man player, string part_name, int action_id)
2049 {
2050 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDismantledServer " + part_name);
2051 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
2052
2053 //register constructed parts for synchronization
2054 UnregisterPartForSync(construtionPart.GetId());
2055
2056 //register action that was performed on part
2057 RegisterActionForSync(construtionPart.GetId(), action_id);
2058
2059 //synchronize
2061
2062 // server part of sync, client will be synced from SetPartsFromSyncData
2063 SetPartFromSyncData(construtionPart);
2064
2065 UpdateNavmesh();
2066
2067 //update visuals
2068 UpdateVisuals();
2069
2070 //reset action sync data
2072
2073 //check base state
2074 if (construtionPart.IsBase())
2075 {
2076 //Destroy construction
2078 }
2079 }
2080
2081 void OnPartDismantledClient( string part_name, int action_id )
2082 {
2083 //play sound
2084 SoundDismantleStart( part_name );
2085 }
2086
2087 //Destroy
2088 void OnPartDestroyedServer(Man player, string part_name, int action_id, bool destroyed_by_connected_part = false)
2089 {
2090 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " OnPartDestroyedServer " + part_name);
2091 ConstructionPart construtionPart = GetConstruction().GetConstructionPart(part_name);
2092
2093 //register constructed parts for synchronization
2094 UnregisterPartForSync(construtionPart.GetId());
2095
2096 //register action that was performed on part
2097 RegisterActionForSync(construtionPart.GetId(), action_id);
2098
2099 //synchronize
2101
2102 // server part of sync, client will be synced from SetPartsFromSyncData
2103 SetPartFromSyncData(construtionPart);
2104
2105 UpdateNavmesh();
2106
2107 //update visuals
2108 UpdateVisuals();
2109
2110 //reset action sync data
2112
2113 //check base state
2114 if (construtionPart.IsBase())
2115 {
2116 //Destroy construction
2118 }
2119 }
2120
2121 void OnPartDestroyedClient( string part_name, int action_id )
2122 {
2123 //play sound
2124 SoundDestroyStart( part_name );
2125 }
2126
2128 protected void HandleItemFalling(ConstructionPart part)
2129 {
2130 bool process = false;
2131
2132 //TODO: add a parameter to parts' config classes?
2133 process |= part.m_PartName.Contains("_roof");
2134 process |= part.m_PartName.Contains("_platform");
2135 process |= part.m_PartName.Contains("_stair");
2136
2137 if (process)
2138 {
2139 if (!MemoryPointExists(part.m_PartName + "_min") || !MemoryPointExists(part.m_PartName + "_max"))
2140 {
2141 Debug.Log("min/max memory points do not exist for part: " + part.m_PartName);
2142 return;
2143 }
2144
2145 vector mins, maxs;
2146 mins = ModelToWorld(GetMemoryPointPos(part.m_PartName + "_min"));
2147 maxs = ModelToWorld(GetMemoryPointPos(part.m_PartName + "_max"));
2148
2149 //sanitize minmaxs
2150 vector minTmp, maxTmp;
2151 minTmp[0] = Math.Min(mins[0],maxs[0]);
2152 maxTmp[0] = Math.Max(mins[0],maxs[0]);
2153 minTmp[1] = Math.Min(mins[1],maxs[1]);
2154 maxTmp[1] = Math.Max(mins[1],maxs[1]);
2155 minTmp[2] = Math.Min(mins[2],maxs[2]);
2156 maxTmp[2] = Math.Max(mins[2],maxs[2]);
2157 mins = minTmp;
2158 maxs = maxTmp;
2159
2160 maxs[1] = maxs[1] + 0.35; //reach a little above..
2161
2162 ItemFall(mins,maxs);
2163 }
2164 }
2165
2167 protected void ItemFall(vector min, vector max)
2168 {
2169 array<EntityAI> foundEntities = new array<EntityAI>();
2170 DayZPlayerUtils.PhysicsGetEntitiesInBox(min,max,foundEntities);
2171
2172 //filtering
2173 ItemBase item;
2174 foreach (EntityAI entity : foundEntities)
2175 {
2176 if (Class.CastTo(item,entity) && !item.CanUseConstruction()) //BB items?
2177 item.ThrowPhysically(null,vector.Zero);
2178 }
2179 }
2180
2181 // --- UPDATE
2182 void InitBaseState()
2183 {
2184 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::InitBaseState ");
2185
2186 InitVisuals();
2187 UpdateNavmesh(); //regenerate navmesh
2188 GetConstruction().InitBaseState();
2189 }
2190
2191 void InitVisuals()
2192 {
2193 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " InitVisuals");
2194 //check base
2195 if ( !HasBase() )
2196 {
2197 SetAnimationPhase( ANIMATION_DEPLOYED, 0 );
2198 }
2199 else
2200 {
2201 SetAnimationPhase( ANIMATION_DEPLOYED, 1 );
2202 }
2203
2204 GetConstruction().UpdateVisuals();
2205 }
2206
2207 void UpdateVisuals()
2208 {
2209 array<string> attachmentSlots = new array<string>;
2210
2211 GetAttachmentSlots(this, attachmentSlots);
2212 foreach (string slotName : attachmentSlots)
2213 {
2215 }
2216
2217 //check base
2218 if (!HasBase())
2219 SetAnimationPhase(ANIMATION_DEPLOYED, 0);
2220 else
2221 SetAnimationPhase(ANIMATION_DEPLOYED, 1);
2222
2223 GetConstruction().UpdateVisuals();
2224 }
2225
2226 void UpdateAttachmentVisuals(string slot_name, bool is_locked)
2227 {
2228 string slotNameMounted = slot_name + "_Mounted";
2229 EntityAI attachment = FindAttachmentBySlotName(slot_name);
2230
2231 if (attachment)
2232 {
2233 BarbedWire barbedWire = BarbedWire.Cast(attachment);
2234 if (barbedWire && barbedWire.IsMounted())
2235 CreateAreaDamage(slotNameMounted);
2236 else
2237 DestroyAreaDamage(slotNameMounted);
2238
2239 if (is_locked)
2240 {
2241 SetAnimationPhase(slotNameMounted, 0);
2242 SetAnimationPhase(slot_name, 1);
2243 }
2244 else
2245 {
2246 SetAnimationPhase(slotNameMounted, 1);
2247 SetAnimationPhase(slot_name, 0);
2248 }
2249 }
2250 else
2251 {
2252 SetAnimationPhase(slotNameMounted, 1);
2253 SetAnimationPhase(slot_name, 1);
2254
2255 DestroyAreaDamage(slotNameMounted);
2256 }
2257 }
2258
2259 // avoid calling this function on frequent occasions, it's a massive performance hit
2260 void UpdatePhysics()
2261 {
2263 bsbDebugPrint("[bsb] " + GetDebugName(this) + " BaseBuildingBase::UpdatePhysics");
2264
2265 array<string> attachmentSlots = new array<string>;
2266 GetAttachmentSlots(this, attachmentSlots);
2267
2269 bsbDebugPrint("[bsb] " + GetDebugName(this) + " att_cnt=" + attachmentSlots.Count());
2270
2271 foreach (string slotName : attachmentSlots)
2272 {
2274 }
2275
2276 //check base
2277 if (!HasBase())
2278 {
2280 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " ADD");
2281
2282 AddProxyPhysics(ANIMATION_DEPLOYED);
2283 }
2284 else
2285 {
2287 bsbDebugPrint("[bsb] " + GetDebugName(this) + ANIMATION_DEPLOYED + " RM");
2288
2289 RemoveProxyPhysics(ANIMATION_DEPLOYED);
2290 }
2291
2292 GetConstruction().UpdatePhysics();
2293 UpdateNavmesh();
2294 }
2295
2296 void UpdateAttachmentPhysics( string slot_name, bool is_locked )
2297 {
2298 //checks for invalid appends; hotfix
2299 if ( !m_Mountables || m_Mountables.Find(slot_name) == -1 )
2300 return;
2301 //----------------------------------
2302 string slot_name_mounted = slot_name + "_Mounted";
2303 EntityAI attachment = FindAttachmentBySlotName( slot_name );
2304
2305 //remove proxy physics
2306 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Removing ATT SLOT=" + slot_name + " RM / RM");
2307 RemoveProxyPhysics( slot_name_mounted );
2308 RemoveProxyPhysics( slot_name );
2309
2310 if ( attachment )
2311 {
2312 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " Adding ATT=" + Object.GetDebugName(attachment));
2313 if ( is_locked )
2314 {
2315 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " RM / RM");
2316 AddProxyPhysics( slot_name_mounted );
2317 }
2318 else
2319 {
2320 if (LogManager.IsBaseBuildingLogEnable()) bsbDebugPrint("[bsb] " + GetDebugName(this) + " ADD");
2321 AddProxyPhysics( slot_name );
2322 }
2323 }
2324 }
2325
2326 protected void UpdateNavmesh()
2327 {
2328 SetAffectPathgraph( true, false );
2329 GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( GetGame().UpdatePathgraphRegionByObject, 100, false, this );
2330 }
2331
2332 override bool CanUseConstruction()
2333 {
2334 return true;
2335 }
2336
2337 override bool CanUseConstructionBuild()
2338 {
2339 return true;
2340 }
2341
2342 protected bool IsAttachmentSlotLocked( EntityAI attachment )
2343 {
2344 if ( attachment )
2345 {
2346 InventoryLocation inventory_location = new InventoryLocation;
2347 attachment.GetInventory().GetCurrentInventoryLocation( inventory_location );
2348
2349 return GetInventory().GetSlotLock( inventory_location.GetSlot() );
2350 }
2351
2352 return false;
2353 }
2354
2355 protected bool IsAttachmentSlotLocked( string slot_name )
2356 {
2357 return GetInventory().GetSlotLock( InventorySlots.GetSlotIdFromString( slot_name ) );
2358 }
2359
2360 //--- ATTACHMENT SLOTS
2361 void GetAttachmentSlots( EntityAI entity, out array<string> attachment_slots )
2362 {
2363 string config_path = "CfgVehicles" + " " + entity.GetType() + " " + "attachments";
2364 if ( GetGame().ConfigIsExisting( config_path ) )
2365 {
2366 GetGame().ConfigGetTextArray( config_path, attachment_slots );
2367 }
2368 }
2369
2370 bool CheckSlotVerticalDistance( int slot_id, PlayerBase player )
2371 {
2372 return true;
2373 }
2374
2375 protected bool CheckMemoryPointVerticalDistance( float max_dist, string selection, PlayerBase player )
2376 {
2377 return true;
2378 }
2379
2380 protected bool CheckLevelVerticalDistance( float max_dist, string selection, PlayerBase player )
2381 {
2382 return true;
2383 }
2384
2385 // --- INIT
2386 void ConstructionInit()
2387 {
2388 if ( !m_Construction )
2389 {
2390 m_Construction = new Construction( this );
2391 }
2392
2393 GetConstruction().Init();
2394 }
2395
2397 {
2398 return m_Construction;
2399 }
2400
2401 //--- INVENTORY/ATTACHMENTS CONDITIONS
2402 //attachments
2403 override bool CanReceiveAttachment( EntityAI attachment, int slotId )
2404 {
2405 return super.CanReceiveAttachment(attachment, slotId);
2406 }
2407
2409 {
2410 int attachment_count = GetInventory().AttachmentCount();
2411 if ( attachment_count > 0 )
2412 {
2413 if ( HasBase() && attachment_count == 1 )
2414 {
2415 return false;
2416 }
2417
2418 return true;
2419 }
2420
2421 return false;
2422 }
2423
2424 override bool ShowZonesHealth()
2425 {
2426 return true;
2427 }
2428
2429 override bool IsTakeable()
2430 {
2431 return false;
2432 }
2433
2434 //this into/outo parent.Cargo
2435 override bool CanPutInCargo( EntityAI parent )
2436 {
2437 return false;
2438 }
2439
2440 override bool CanRemoveFromCargo( EntityAI parent )
2441 {
2442 return false;
2443 }
2444
2445 //hands
2446 override bool CanPutIntoHands( EntityAI parent )
2447 {
2448 return false;
2449 }
2450
2451 //--- ACTION CONDITIONS
2452 //direction
2453 override bool IsFacingPlayer( PlayerBase player, string selection )
2454 {
2455 return true;
2456 }
2457
2458 override bool IsPlayerInside( PlayerBase player, string selection )
2459 {
2460 return true;
2461 }
2462
2465 {
2466 return false;
2467 }
2468
2469 //camera direction check
2470 bool IsFacingCamera( string selection )
2471 {
2472 return true;
2473 }
2474
2475 //roof check
2476 bool PerformRoofCheckForBase( string partName, PlayerBase player, out bool result )
2477 {
2478 return false;
2479 }
2480
2481 //selection->player distance check
2482 bool HasProperDistance( string selection, PlayerBase player )
2483 {
2484 return true;
2485 }
2486
2487 //folding
2489 {
2490 if ( HasBase() || GetInventory().AttachmentCount() > 0 )
2491 {
2492 return false;
2493 }
2494
2495 return true;
2496 }
2497
2499 {
2502
2503 return item;
2504 }
2505
2506 //Damage triggers (barbed wire)
2507 void CreateAreaDamage( string slot_name, float rotation_angle = 0 )
2508 {
2509 if ( GetGame() && GetGame().IsServer() )
2510 {
2511 //destroy area damage if some already exists
2512 DestroyAreaDamage( slot_name );
2513
2514 //create new area damage
2516 areaDamage.SetDamageComponentType(AreaDamageComponentTypes.HITZONE);
2517
2518 vector min_max[2];
2519 if ( MemoryPointExists( slot_name + "_min" ) )
2520 {
2521 min_max[0] = GetMemoryPointPos( slot_name + "_min" );
2522 }
2523 if ( MemoryPointExists( slot_name + "_max" ) )
2524 {
2525 min_max[1] = GetMemoryPointPos( slot_name + "_max" );
2526 }
2527
2528 //get proper trigger extents (min<max)
2529 vector extents[2];
2530 GetConstruction().GetTriggerExtents( min_max, extents );
2531
2532 //get box center
2533 vector center;
2534 center = GetConstruction().GetBoxCenter( min_max );
2535 center = ModelToWorld( center );
2536
2537 //rotate center if needed
2538 vector orientation = GetOrientation();;
2539 CalcDamageAreaRotation( rotation_angle, center, orientation );
2540
2541 areaDamage.SetExtents( extents[0], extents[1] );
2542 areaDamage.SetAreaPosition( center );
2543 areaDamage.SetAreaOrientation( orientation );
2544 areaDamage.SetLoopInterval( 1.0 );
2545 areaDamage.SetDeferDuration( 0.2 );
2546 areaDamage.SetHitZones( { "Torso","LeftHand","LeftLeg","LeftFoot","RightHand","RightLeg","RightFoot" } );
2547 areaDamage.SetAmmoName( "BarbedWireHit" );
2548 areaDamage.Spawn();
2549
2550 m_DamageTriggers.Insert( slot_name, areaDamage );
2551 }
2552 }
2553
2554 void CalcDamageAreaRotation( float angle_deg, out vector center, out vector orientation )
2555 {
2556 if ( angle_deg != 0 )
2557 {
2558 //orientation
2559 orientation[0] = orientation[0] - angle_deg;
2560
2561 //center
2562 vector rotate_axis;
2563 if ( MemoryPointExists( "rotate_axis" ) )
2564 {
2565 rotate_axis = ModelToWorld( GetMemoryPointPos( "rotate_axis" ) );
2566 }
2567 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];
2568 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];
2569 center[0] = r_center_x;
2570 center[2] = r_center_z;
2571 }
2572 }
2573
2574 void DestroyAreaDamage( string slot_name )
2575 {
2576 if (GetGame() && GetGame().IsServer())
2577 {
2579 if (m_DamageTriggers.Find(slot_name, areaDamage))
2580 {
2581 if (areaDamage)
2582 {
2583 areaDamage.Destroy();
2584 }
2585
2586 m_DamageTriggers.Remove( slot_name );
2587 }
2588 }
2589 }
2590
2591 override bool IsIgnoredByConstruction()
2592 {
2593 return true;
2594 }
2595
2596 //================================================================
2597 // SOUNDS
2598 //================================================================
2599 protected void SoundBuildStart( string part_name )
2600 {
2601 PlaySoundSet( m_Sound, GetBuildSoundByMaterial( part_name ), 0.1, 0.1 );
2602 }
2603
2604 protected void SoundDismantleStart( string part_name )
2605 {
2606 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
2607 }
2608
2609 protected void SoundDestroyStart( string part_name )
2610 {
2611 PlaySoundSet( m_Sound, GetDismantleSoundByMaterial( part_name ), 0.1, 0.1 );
2612 }
2613
2614 protected string GetBuildSoundByMaterial( string part_name )
2615 {
2616 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
2617
2618 switch ( material_type )
2619 {
2620 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_BUILD_WOOD_LOG;
2621 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_BUILD_WOOD_PLANK;
2622 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_BUILD_WOOD_STAIRS;
2623 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_BUILD_METAL;
2624 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_BUILD_WIRE;
2625 }
2626
2627 return "";
2628 }
2629
2630 protected string GetDismantleSoundByMaterial( string part_name )
2631 {
2632 ConstructionMaterialType material_type = GetConstruction().GetMaterialType( part_name );
2633
2634 switch ( material_type )
2635 {
2636 case ConstructionMaterialType.MATERIAL_LOG: return SOUND_DISMANTLE_WOOD_LOG;
2637 case ConstructionMaterialType.MATERIAL_WOOD: return SOUND_DISMANTLE_WOOD_PLANK;
2638 case ConstructionMaterialType.MATERIAL_STAIRS: return SOUND_DISMANTLE_WOOD_STAIRS;
2639 case ConstructionMaterialType.MATERIAL_METAL: return SOUND_DISMANTLE_METAL;
2640 case ConstructionMaterialType.MATERIAL_WIRE: return SOUND_DISMANTLE_WIRE;
2641 }
2642
2643 return "";
2644 }
2645
2646 //misc
2647 void CheckForHybridAttachments( EntityAI item, string slot_name )
2648 {
2649 if (!GetGame().IsMultiplayer() || GetGame().IsServer())
2650 {
2651 //if this is a hybrid attachment, set damage of appropriate damage zone. Zone name must match slot name...WIP
2652 if (m_HybridAttachments && m_HybridAttachments.Find(slot_name) != -1)
2653 {
2654 SetHealth(slot_name,"Health",item.GetHealth());
2655 }
2656 }
2657 }
2658
2659 override int GetDamageSystemVersionChange()
2660 {
2661 return 111;
2662 }
2663
2664 override void SetActions()
2665 {
2666 super.SetActions();
2667
2671 }
2672
2673 //================================================================
2674 // DEBUG
2675 //================================================================
2676 protected void DebugCustomState()
2677 {
2678 }
2679
2682 {
2683 return null;
2684 }
2685
2686 override void OnDebugSpawn()
2687 {
2688 FullyBuild();
2689 }
2690
2691 void FullyBuild()
2692 {
2694 array<ConstructionPart> parts = GetConstruction().GetConstructionParts().GetValueArray();
2695
2696 Man p;
2697
2698 #ifdef SERVER
2699 array<Man> players = new array<Man>;
2700 GetGame().GetWorld().GetPlayerList(players);
2701 if (players.Count())
2702 p = players[0];
2703 #else
2704 p = GetGame().GetPlayer();
2705 #endif
2706
2707 foreach (ConstructionPart part : parts)
2708 {
2709 bool excluded = false;
2710 string partName = part.GetPartName();
2711 if (excludes)
2712 {
2713 foreach (string exclude : excludes)
2714 {
2715 if (partName.Contains(exclude))
2716 {
2717 excluded = true;
2718 break;
2719 }
2720 }
2721 }
2722
2723 if (!excluded)
2724 {
2725 OnPartBuiltServer(p, partName, AT_BUILD_PART);
2726 }
2727 }
2728
2729 GetConstruction().UpdateVisuals();
2730 }
2731}
2732
2733void bsbDebugPrint (string s)
2734{
2735#ifdef BSB_DEBUG
2736 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
2737#else
2738 //Print("" + s); // comment/uncomment to hide/see debug logs
2739#endif
2740}
2741void bsbDebugSpam (string s)
2742{
2743#ifdef BSB_DEBUG_SPAM
2744 PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
2745#else
2746 //Print("" + s); // comment/uncomment to hide/see debug logs
2747#endif
2748}
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

Используется в ItemBase::InitItemSounds().