public void Hit(ComponentBody componentBody, Vector3 hitPoint, Vector3 hitDirection) { if (Hit1 != null) { Hit1(componentBody, hitPoint, hitDirection); return; } if (!(m_subsystemTime.GameTime - m_lastHitTime > 0.6600000262260437)) { return; } m_lastHitTime = m_subsystemTime.GameTime; Block block = BlocksManager.Blocks[Terrain.ExtractContents(ActiveBlockValue)]; if (!CanUseTool(ActiveBlockValue)) { ComponentPlayer?.ComponentGui.DisplaySmallMessage(string.Format(LanguageControl.Get(fName, 1), block.PlayerLevelRequired, block.GetDisplayName(m_subsystemTerrain, ActiveBlockValue)), Color.White, blinking: true, playNotificationSound: true); Poke(forceRestart: false); return; } float num = 0f; float num2 = 1f; if (ActiveBlockValue != 0) { num = block.GetMeleePower(ActiveBlockValue) * AttackPower * m_random.Float(0.8f, 1.2f); num2 = block.GetMeleeHitProbability(ActiveBlockValue); } else { num = AttackPower * m_random.Float(0.8f, 1.2f); num2 = 0.66f; } bool flag; if (ComponentPlayer != null) { m_subsystemAudio.PlaySound("Audio/Swoosh", 1f, m_random.Float(-0.2f, 0.2f), componentBody.Position, 3f, autoDelay: false); flag = m_random.Bool(num2); num *= ComponentPlayer.ComponentLevel.StrengthFactor; } else { flag = true; } if (flag) { AttackBody(componentBody, ComponentCreature, hitPoint, hitDirection, num, isMeleeAttack: true); DamageActiveTool(1); } else if (ComponentCreature is ComponentPlayer) { HitValueParticleSystem particleSystem = new HitValueParticleSystem(hitPoint + 0.75f * hitDirection, 1f * hitDirection + ComponentCreature.ComponentBody.Velocity, Color.White, LanguageControl.Get(fName, 2)); base.Project.FindSubsystem <SubsystemParticles>(throwOnError: true).AddParticleSystem(particleSystem); } if (ComponentCreature.PlayerStats != null) { ComponentCreature.PlayerStats.MeleeAttacks++; if (flag) { ComponentCreature.PlayerStats.MeleeHits++; } } Poke(forceRestart: false); }
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); }