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; } }
public override CraftingRecipe GetAdHocCraftingRecipe(SubsystemTerrain terrain, string[] ingredients, float heatLevel, float playerLevel) { if (heatLevel < 1f) { return(null); } List <string> list = ingredients.Where((string i) => !string.IsNullOrEmpty(i)).ToList(); if (list.Count == 2) { int num = 0; int num2 = 0; int num3 = 0; foreach (string item in list) { CraftingRecipesManager.DecodeIngredient(item, out string craftingId, out int?data); if (craftingId == BlocksManager.Blocks[203].CraftingId) { num3 = Terrain.MakeBlockValue(203, 0, data.HasValue ? data.Value : 0); } else if (craftingId == BlocksManager.Blocks[129].CraftingId) { num = Terrain.MakeBlockValue(129, 0, data.HasValue ? data.Value : 0); } else if (craftingId == BlocksManager.Blocks[128].CraftingId) { num2 = Terrain.MakeBlockValue(128, 0, data.HasValue ? data.Value : 0); } } if (num != 0 && num3 != 0) { int data2 = Terrain.ExtractData(num3); int clothingColor = GetClothingColor(data2); int clothingIndex = GetClothingIndex(data2); bool canBeDyed = GetClothingData(data2).CanBeDyed; int damage = BlocksManager.Blocks[203].GetDamage(num3); int color = PaintBucketBlock.GetColor(Terrain.ExtractData(num)); int damage2 = BlocksManager.Blocks[129].GetDamage(num); Block block = BlocksManager.Blocks[129]; Block block2 = BlocksManager.Blocks[203]; if (!canBeDyed) { return(null); } int num4 = PaintBucketBlock.CombineColors(clothingColor, color); if (num4 != clothingColor) { return(new CraftingRecipe { ResultCount = 1, ResultValue = block2.SetDamage(Terrain.MakeBlockValue(203, 0, SetClothingIndex(SetClothingColor(0, num4), clothingIndex)), damage), RemainsCount = 1, RemainsValue = BlocksManager.DamageItem(Terrain.MakeBlockValue(129, 0, color), damage2 + MathUtils.Max(block.Durability / 4, 1)), RequiredHeatLevel = 1f, Description = $"{LanguageControl.Get("BlocksManager", "Dyed")} {SubsystemPalette.GetName(terrain, color, null)}", Ingredients = (string[])ingredients.Clone() }); } } if (num2 != 0 && num3 != 0) { int data3 = Terrain.ExtractData(num3); int clothingColor2 = GetClothingColor(data3); int clothingIndex2 = GetClothingIndex(data3); bool canBeDyed2 = GetClothingData(data3).CanBeDyed; int damage3 = BlocksManager.Blocks[203].GetDamage(num3); int damage4 = BlocksManager.Blocks[128].GetDamage(num2); Block block3 = BlocksManager.Blocks[128]; Block block4 = BlocksManager.Blocks[203]; if (!canBeDyed2) { return(null); } if (clothingColor2 != 0) { return(new CraftingRecipe { ResultCount = 1, ResultValue = block4.SetDamage(Terrain.MakeBlockValue(203, 0, SetClothingIndex(SetClothingColor(0, 0), clothingIndex2)), damage3), RemainsCount = 1, RemainsValue = BlocksManager.DamageItem(Terrain.MakeBlockValue(128, 0, 0), damage4 + MathUtils.Max(block3.Durability / 4, 1)), RequiredHeatLevel = 1f, Description = LanguageControl.Get("BlocksManager", "Not Dyed") + " " + LanguageControl.Get("BlocksManager", "Clothes"), Ingredients = (string[])ingredients.Clone() }); } } } return(null); }