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

◆ GetHideIconMask()

override int bsbDebugPrint::GetHideIconMask ( )
protected

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

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