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

◆ InitItemSounds()

override void bsbDebugPrint::InitItemSounds ( )
protected

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

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