public override void OnPoll(int value, int x, int y, int z, int pollPass)
 {
     if (m_isRotEnabled)
     {
         int   num       = Terrain.ExtractContents(value);
         Block block     = BlocksManager.Blocks[num];
         int   rotPeriod = block.GetRotPeriod(value);
         if (rotPeriod > 0 && pollPass % rotPeriod == 0)
         {
             int num2 = block.GetDamage(value) + 1;
             value = ((num2 > 1) ? block.GetDamageDestructionValue(value) : block.SetDamage(value, num2));
             base.SubsystemTerrain.ChangeCell(x, y, z, value);
         }
     }
 }
Exemple #2
0
        public static int DamageItem(int value, int damageCount)
        {
            int   num   = Terrain.ExtractContents(value);
            Block block = Blocks[num];

            if (block.Durability >= 0)
            {
                int num2 = block.GetDamage(value) + damageCount;
                if (num2 <= block.Durability)
                {
                    return(block.SetDamage(value, num2));
                }
                return(block.GetDamageDestructionValue(value));
            }
            return(value);
        }
        public void ItemsScanned(ReadOnlyList <ScannedItemData> items)
        {
            int num = (int)((m_subsystemGameInfo.TotalElapsedGameTime - m_lastRotTime) / 60.0);

            if (num > 0)
            {
                if (m_isRotEnabled)
                {
                    foreach (ScannedItemData item in items)
                    {
                        int   num2      = Terrain.ExtractContents(item.Value);
                        Block block     = BlocksManager.Blocks[num2];
                        int   rotPeriod = block.GetRotPeriod(item.Value);
                        if (rotPeriod > 0)
                        {
                            int num3 = block.GetDamage(item.Value);
                            for (int i = 0; i < num; i++)
                            {
                                if (num3 > 1)
                                {
                                    break;
                                }
                                if ((i + m_rotStep) % rotPeriod == 0)
                                {
                                    num3++;
                                }
                            }
                            if (num3 <= 1)
                            {
                                m_subsystemItemsScanner.TryModifyItem(item, block.SetDamage(item.Value, num3));
                            }
                            else
                            {
                                m_subsystemItemsScanner.TryModifyItem(item, block.GetDamageDestructionValue(item.Value));
                            }
                        }
                    }
                }
                m_rotStep     += num;
                m_lastRotTime += (float)num * 60f;
            }
        }