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); } } }
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; } }