public override void OnExplosion(int value, int x, int y, int z, float damage) { int num = Terrain.ExtractContents(value); Block block = BlocksManager.Blocks[num]; if (block.GetExplosionPressure(value) > 0f && MathUtils.Saturate(damage / block.ExplosionResilience) > 0.01f && m_random.Float(0f, 1f) < 0.5f) { IgniteFuse(x, y, z); } }
public bool TryExplodeBlock(int x, int y, int z, int value) { int num = Terrain.ExtractContents(value); Block obj = BlocksManager.Blocks[num]; float explosionPressure = obj.GetExplosionPressure(value); bool explosionIncendiary = obj.GetExplosionIncendiary(value); if (explosionPressure > 0f) { AddExplosion(x, y, z, explosionPressure, explosionIncendiary, noExplosionSound: false); return(true); } return(false); }
public void Update(float dt) { Point3 coordinates = m_componentBlockEntity.Coordinates; if (m_heatLevel > 0f) { m_fireTimeRemaining = MathUtils.Max(0f, m_fireTimeRemaining - dt); if (m_fireTimeRemaining == 0f) { m_heatLevel = 0f; } } if (m_updateSmeltingRecipe) { m_updateSmeltingRecipe = false; float heatLevel = 0f; if (m_heatLevel > 0f) { heatLevel = m_heatLevel; } else { Slot slot = m_slots[FuelSlotIndex]; if (slot.Count > 0) { int num = Terrain.ExtractContents(slot.Value); heatLevel = BlocksManager.Blocks[num].FuelHeatLevel; } } CraftingRecipe craftingRecipe = FindSmeltingRecipe(heatLevel); if (craftingRecipe != m_smeltingRecipe) { m_smeltingRecipe = ((craftingRecipe != null && craftingRecipe.ResultValue != 0) ? craftingRecipe : null); m_smeltingProgress = 0f; } } if (m_smeltingRecipe == null) { m_heatLevel = 0f; m_fireTimeRemaining = 0f; } if (m_smeltingRecipe != null && m_fireTimeRemaining <= 0f) { Slot slot2 = m_slots[FuelSlotIndex]; if (slot2.Count > 0) { int num2 = Terrain.ExtractContents(slot2.Value); Block block = BlocksManager.Blocks[num2]; if (block.GetExplosionPressure(slot2.Value) > 0f) { slot2.Count = 0; m_subsystemExplosions.TryExplodeBlock(coordinates.X, coordinates.Y, coordinates.Z, slot2.Value); } else if (block.FuelHeatLevel > 0f) { slot2.Count--; m_fireTimeRemaining = block.FuelFireDuration; m_heatLevel = block.FuelHeatLevel; } } } if (m_fireTimeRemaining <= 0f) { m_smeltingRecipe = null; m_smeltingProgress = 0f; } if (m_smeltingRecipe != null) { m_smeltingProgress = MathUtils.Min(m_smeltingProgress + 0.15f * dt, 1f); if (m_smeltingProgress >= 1f) { for (int i = 0; i < m_furnaceSize; i++) { if (m_slots[i].Count > 0) { m_slots[i].Count--; } } m_slots[ResultSlotIndex].Value = m_smeltingRecipe.ResultValue; m_slots[ResultSlotIndex].Count += m_smeltingRecipe.ResultCount; if (m_smeltingRecipe.RemainsValue != 0 && m_smeltingRecipe.RemainsCount > 0) { m_slots[RemainsSlotIndex].Value = m_smeltingRecipe.RemainsValue; m_slots[RemainsSlotIndex].Count += m_smeltingRecipe.RemainsCount; } m_smeltingRecipe = null; m_smeltingProgress = 0f; m_updateSmeltingRecipe = true; } } TerrainChunk chunkAtCell = m_subsystemTerrain.Terrain.GetChunkAtCell(coordinates.X, coordinates.Z); if (chunkAtCell != null && chunkAtCell.State == TerrainChunkState.Valid) { int cellValue = m_subsystemTerrain.Terrain.GetCellValue(coordinates.X, coordinates.Y, coordinates.Z); m_subsystemTerrain.ChangeCell(coordinates.X, coordinates.Y, coordinates.Z, Terrain.ReplaceContents(cellValue, (m_heatLevel > 0f) ? 65 : 64)); } }
public Dictionary <string, string> GetBlockProperties(int value) { Dictionary <string, string> dictionary = new Dictionary <string, string>(); int num = Terrain.ExtractContents(value); Block block = BlocksManager.Blocks[num]; if (block.DefaultEmittedLightAmount > 0) { dictionary.Add(LanguageControl.Get(fName, 1), block.DefaultEmittedLightAmount.ToString()); } if (block.FuelFireDuration > 0f) { dictionary.Add(LanguageControl.Get(fName, 2), block.FuelFireDuration.ToString()); } dictionary.Add(LanguageControl.Get(fName, 3), (block.MaxStacking > 1) ? string.Format(LanguageControl.Get(fName, 4), block.MaxStacking.ToString()) : LanguageControl.Get("Usual", "no")); dictionary.Add(LanguageControl.Get(fName, 5), (block.FireDuration > 0f) ? LanguageControl.Get("Usual", "yes") : LanguageControl.Get("Usual", "no")); if (block.GetNutritionalValue(value) > 0f) { dictionary.Add(LanguageControl.Get(fName, 6), block.GetNutritionalValue(value).ToString()); } if (block.GetRotPeriod(value) > 0) { dictionary.Add(LanguageControl.Get(fName, 7), string.Format(LanguageControl.Get(fName, 25), $"{(2 * block.GetRotPeriod(value) * 60f / 1200f):0.0}")); } if (block.DigMethod != 0) { dictionary.Add(LanguageControl.Get(fName, 8), LanguageControl.Get("DigMethod", block.DigMethod.ToString())); dictionary.Add(LanguageControl.Get(fName, 9), block.DigResilience.ToString()); } if (block.ExplosionResilience > 0f) { dictionary.Add(LanguageControl.Get(fName, 10), block.ExplosionResilience.ToString()); } if (block.GetExplosionPressure(value) > 0f) { dictionary.Add(LanguageControl.Get(fName, 11), block.GetExplosionPressure(value).ToString()); } bool flag = false; if (block.GetMeleePower(value) > 1f) { dictionary.Add(LanguageControl.Get(fName, 12), block.GetMeleePower(value).ToString()); flag = true; } if (block.GetMeleePower(value) > 1f) { dictionary.Add(LanguageControl.Get(fName, 13), $"{100f * block.GetMeleeHitProbability(value):0}%"); flag = true; } if (block.GetProjectilePower(value) > 1f) { dictionary.Add(LanguageControl.Get(fName, 14), block.GetProjectilePower(value).ToString()); flag = true; } if (block.ShovelPower > 1f) { dictionary.Add(LanguageControl.Get(fName, 15), block.ShovelPower.ToString()); flag = true; } if (block.HackPower > 1f) { dictionary.Add(LanguageControl.Get(fName, 16), block.HackPower.ToString()); flag = true; } if (block.QuarryPower > 1f) { dictionary.Add(LanguageControl.Get(fName, 17), block.QuarryPower.ToString()); flag = true; } if (flag && block.Durability > 0) { dictionary.Add(LanguageControl.Get(fName, 18), block.Durability.ToString()); } if (block.DefaultExperienceCount > 0f) { dictionary.Add(LanguageControl.Get(fName, 19), block.DefaultExperienceCount.ToString()); } if (block is ClothingBlock) { ClothingData clothingData = ClothingBlock.GetClothingData(Terrain.ExtractData(value)); dictionary.Add(LanguageControl.Get(fName, 20), clothingData.CanBeDyed ? LanguageControl.Get("Usual", "yes") : LanguageControl.Get("Usual", "no")); dictionary.Add(LanguageControl.Get(fName, 21), $"{(int)(clothingData.ArmorProtection * 100f)}%"); dictionary.Add(LanguageControl.Get(fName, 22), clothingData.Sturdiness.ToString()); dictionary.Add(LanguageControl.Get(fName, 23), $"{clothingData.Insulation:0.0} clo"); dictionary.Add(LanguageControl.Get(fName, 24), $"{clothingData.MovementSpeedFactor * 100f:0}%"); } return(dictionary); }