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

◆ GetFoldSoundset()

string SpawnItemOnLocation::GetFoldSoundset ( )
protected

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

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