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); }
public static CraftingRecipe GetAdHocCraftingRecipe(int index, SubsystemTerrain subsystemTerrain, string[] ingredients, float heatLevel) { if (heatLevel < 1f) { return(null); } int i = 0, num = 0; var array = new string[2]; for (; i < ingredients.Length; i++) { if (!string.IsNullOrEmpty(ingredients[i])) { if (num > 1) { return(null); } array[num] = ingredients[i]; num++; } } if (num != 2) { return(null); } num = 0; int num2 = 0; int num3 = 0; for (i = 0; i < array.Length; i++) { string item = array[i]; CraftingRecipesManager.DecodeIngredient(item, out string craftingId, out int?data); int d = data ?? 0; if (craftingId == BlocksManager.Blocks[index].CraftingId) { num3 = Terrain.MakeBlockValue(index, 0, d); } else if (craftingId == BlocksManager.Blocks[129].CraftingId) { num = Terrain.MakeBlockValue(129, 0, d); } else if (craftingId == BlocksManager.Blocks[128].CraftingId) { num2 = Terrain.MakeBlockValue(128, 0, d); } } if (num != 0 && num3 != 0) { int num4 = GetColor(Terrain.ExtractData(num3)); int color = PaintBucketBlock.GetColor(Terrain.ExtractData(num)); int num5 = PaintBucketBlock.CombineColors(num4, color); if (num5 != num4) { return(new CraftingRecipe { ResultCount = 1, ResultValue = Terrain.MakeBlockValue(index, 0, SetColor(Terrain.ExtractData(num3), num5)), RemainsCount = 1, RemainsValue = BlocksManager.DamageItem(Terrain.MakeBlockValue(129, 0, color), BlocksManager.Blocks[129].GetDamage(num) + 1), RequiredHeatLevel = 1f, Description = "Dye tool " + SubsystemPalette.GetName(subsystemTerrain, color, null), Ingredients = (string[])ingredients.Clone() }); } } if (num2 != 0 && num3 != 0) { if (GetColor(num3) != 0) { return(new CraftingRecipe { ResultCount = 1, ResultValue = Terrain.MakeBlockValue(index, 0, SetColor(Terrain.ExtractData(num3), 0)), RemainsCount = 1, RemainsValue = BlocksManager.DamageItem(128, BlocksManager.Blocks[128].GetDamage(num2) + 1), RequiredHeatLevel = 1f, Description = "Undye tool", Ingredients = (string[])ingredients.Clone() }); } } return(null); }
public override CraftingRecipe GetAdHocCraftingRecipe(SubsystemTerrain subsystemTerrain, 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[208].CraftingId) { num3 = Terrain.MakeBlockValue(208, 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 num4 = Terrain.ExtractData(num3); int color = PaintBucketBlock.GetColor(Terrain.ExtractData(num)); int damage = BlocksManager.Blocks[129].GetDamage(num); Block block = BlocksManager.Blocks[129]; int num5 = PaintBucketBlock.CombineColors(num4, color); if (num5 != num4) { return(new CraftingRecipe { ResultCount = 1, ResultValue = Terrain.MakeBlockValue(208, 0, num5), RemainsCount = 1, RemainsValue = BlocksManager.DamageItem(Terrain.MakeBlockValue(129, 0, color), damage + MathUtils.Max(block.Durability / 4, 1)), RequiredHeatLevel = 1f, Description = $"Dye carpet {SubsystemPalette.GetName(subsystemTerrain, color, null)}", Ingredients = (string[])ingredients.Clone() }); } } if (num2 != 0 && num3 != 0) { int num6 = Terrain.ExtractData(num3); int damage2 = BlocksManager.Blocks[128].GetDamage(num2); Block block2 = BlocksManager.Blocks[128]; if (num6 != 0) { return(new CraftingRecipe { ResultCount = 1, ResultValue = Terrain.MakeBlockValue(208, 0, 0), RemainsCount = 1, RemainsValue = BlocksManager.DamageItem(Terrain.MakeBlockValue(128, 0, 0), damage2 + MathUtils.Max(block2.Durability / 4, 1)), RequiredHeatLevel = 1f, Description = "Undye carpet", Ingredients = (string[])ingredients.Clone() }); } } } return(null); }
public override bool OnUse(Ray3 ray, ComponentMiner componentMiner) { IInventory inventory = componentMiner.Inventory; int activeBlockValue = componentMiner.ActiveBlockValue; int num = Terrain.ExtractContents(activeBlockValue); if (num == 90) { object obj = componentMiner.Raycast(ray, RaycastMode.Gathering); if (obj is TerrainRaycastResult) { CellFace cellFace = ((TerrainRaycastResult)obj).CellFace; int cellValue = base.SubsystemTerrain.Terrain.GetCellValue(cellFace.X, cellFace.Y, cellFace.Z); int num2 = Terrain.ExtractContents(cellValue); int data = Terrain.ExtractData(cellValue); Block block = BlocksManager.Blocks[num2]; if (block is WaterBlock && FluidBlock.GetLevel(data) == 0) { int value = Terrain.ReplaceContents(activeBlockValue, 91); inventory.RemoveSlotItems(inventory.ActiveSlotIndex, inventory.GetSlotCount(inventory.ActiveSlotIndex)); if (inventory.GetSlotCount(inventory.ActiveSlotIndex) == 0) { inventory.AddSlotItems(inventory.ActiveSlotIndex, value, 1); } base.SubsystemTerrain.DestroyCell(0, cellFace.X, cellFace.Y, cellFace.Z, 0, noDrop: false, noParticleSystem: false); return(true); } if (block is MagmaBlock && FluidBlock.GetLevel(data) == 0) { int value2 = Terrain.ReplaceContents(activeBlockValue, 93); inventory.RemoveSlotItems(inventory.ActiveSlotIndex, inventory.GetSlotCount(inventory.ActiveSlotIndex)); if (inventory.GetSlotCount(inventory.ActiveSlotIndex) == 0) { inventory.AddSlotItems(inventory.ActiveSlotIndex, value2, 1); } base.SubsystemTerrain.DestroyCell(0, cellFace.X, cellFace.Y, cellFace.Z, 0, noDrop: false, noParticleSystem: false); return(true); } } else if (obj is BodyRaycastResult) { ComponentUdder componentUdder = ((BodyRaycastResult)obj).ComponentBody.Entity.FindComponent <ComponentUdder>(); if (componentUdder != null && componentUdder.Milk(componentMiner)) { int value3 = Terrain.ReplaceContents(activeBlockValue, 110); inventory.RemoveSlotItems(inventory.ActiveSlotIndex, inventory.GetSlotCount(inventory.ActiveSlotIndex)); if (inventory.GetSlotCount(inventory.ActiveSlotIndex) == 0) { inventory.AddSlotItems(inventory.ActiveSlotIndex, value3, 1); } m_subsystemAudio.PlaySound("Audio/Milked", 1f, 0f, ray.Position, 2f, autoDelay: true); } return(true); } } if (num == 91) { TerrainRaycastResult?terrainRaycastResult = componentMiner.Raycast <TerrainRaycastResult>(ray, RaycastMode.Interaction); if (terrainRaycastResult.HasValue && componentMiner.Place(terrainRaycastResult.Value, Terrain.MakeBlockValue(18))) { inventory.RemoveSlotItems(inventory.ActiveSlotIndex, 1); if (inventory.GetSlotCount(inventory.ActiveSlotIndex) == 0) { int value4 = Terrain.ReplaceContents(activeBlockValue, 90); inventory.AddSlotItems(inventory.ActiveSlotIndex, value4, 1); } return(true); } } if (num == 93) { TerrainRaycastResult?terrainRaycastResult2 = componentMiner.Raycast <TerrainRaycastResult>(ray, RaycastMode.Interaction); if (terrainRaycastResult2.HasValue) { if (componentMiner.Place(terrainRaycastResult2.Value, Terrain.MakeBlockValue(92))) { inventory.RemoveSlotItems(inventory.ActiveSlotIndex, 1); if (inventory.GetSlotCount(inventory.ActiveSlotIndex) == 0) { int value5 = Terrain.ReplaceContents(activeBlockValue, 90); inventory.AddSlotItems(inventory.ActiveSlotIndex, value5, 1); } } return(true); } } switch (num) { case 110: case 245: return(true); case 251: case 252: return(true); case 128: case 129: { TerrainRaycastResult?terrainRaycastResult3 = componentMiner.Raycast <TerrainRaycastResult>(ray, RaycastMode.Digging); if (terrainRaycastResult3.HasValue) { CellFace cellFace2 = terrainRaycastResult3.Value.CellFace; int cellValue2 = base.SubsystemTerrain.Terrain.GetCellValue(cellFace2.X, cellFace2.Y, cellFace2.Z); int num3 = Terrain.ExtractContents(cellValue2); Block block2 = BlocksManager.Blocks[num3]; if (block2 is IPaintableBlock) { Vector3 normal = CellFace.FaceToVector3(terrainRaycastResult3.Value.CellFace.Face); Vector3 position = terrainRaycastResult3.Value.HitPoint(); int? num4 = (num == 128) ? null : new int?(PaintBucketBlock.GetColor(Terrain.ExtractData(activeBlockValue))); Color color = num4.HasValue ? SubsystemPalette.GetColor(base.SubsystemTerrain, num4) : new Color(128, 128, 128, 128); int value6 = ((IPaintableBlock)block2).Paint(base.SubsystemTerrain, cellValue2, num4); base.SubsystemTerrain.ChangeCell(cellFace2.X, cellFace2.Y, cellFace2.Z, value6); componentMiner.DamageActiveTool(1); m_subsystemAudio.PlayRandomSound("Audio/Paint", 0.4f, m_random.Float(-0.1f, 0.1f), componentMiner.ComponentCreature.ComponentBody.Position, 2f, autoDelay: true); m_subsystemParticles.AddParticleSystem(new PaintParticleSystem(base.SubsystemTerrain, position, normal, color)); } return(true); } break; } } return(false); }