Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Explosives v0.1.1
plugins\Explosives.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using Explosives.Mono; using FireSpreads; using HarmonyLib; using Jotunn; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Explosives")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Explosives")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")] [assembly: AssemblyFileVersion("0.0.1.0")] [assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.1.0")] namespace Explosives { [BepInPlugin("org.bepinex.plugins.bid.Explosives", "Explosives", "0.1.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class Explosives : BaseUnityPlugin { public const string PluginGUID = "org.bepinex.plugins.bid.Explosives"; public const string PluginName = "Explosives"; public const string PluginVersion = "0.1.1"; private readonly Harmony harmony = new Harmony("org.bepinex.plugins.bid.Explosives"); public static HashSet<string> s_explosives = new HashSet<string>(); public static readonly string s_explosionPrefab = "bid_explosion"; public static readonly string s_explosionFxPrefab = "bid_explosion_fx"; public static readonly string s_explosionDigPrefab = "bid_explosion_dig"; public static ConfigEntry<string> ExplosivesConfig; public static ConfigEntry<float> MaxChopDamageConfig; public static ConfigEntry<float> MaxPickaxeDamageConfig; public static ConfigEntry<float> MaxFireDamageConfig; public static ConfigEntry<float> MaxExplosionRangeConfig; public static ConfigEntry<float> MaxHeatWaveRangeConfig; public static ConfigEntry<float> TinderBarrelHealthConfig; public static GameObject[] s_explosions = (GameObject[])(object)new GameObject[5]; public static GameObject s_explosionSpawner = null; public static Piece m_barrelPiece = null; public static Piece m_barrelTrapPiece = null; private void Awake() { Logger.LogInfo((object)"Explosives has landed"); CreateConfigValues(); PrefabManager.OnVanillaPrefabsAvailable += AddClonedItems; PieceManager.OnPiecesRegistered += MakeIcons; harmony.PatchAll(); } private void OnDestroy() { harmony.UnpatchSelf(); } private void MakeIcons() { ((MonoBehaviour)this).StartCoroutine(RenderSprites()); } private static IEnumerator RenderSprites() { yield return null; m_barrelPiece.m_icon = RenderManager.Instance.Render(new RenderRequest(((Component)m_barrelPiece).gameObject) { Width = 64, Height = 64, Rotation = RenderManager.IsometricRotation * Quaternion.Euler(0f, -180f, 0f), ParticleSimulationTime = 10f }); m_barrelTrapPiece.m_icon = RenderManager.Instance.Render(new RenderRequest(((Component)m_barrelTrapPiece).gameObject) { Width = 64, Height = 64, Rotation = RenderManager.IsometricRotation * Quaternion.Euler(0f, -180f, 0f), ParticleSimulationTime = 10f }); } private void CreateConfigValues() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected O, but got Unknown //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Expected O, but got Unknown //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Expected O, but got Unknown //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Expected O, but got Unknown //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Expected O, but got Unknown //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Expected O, but got Unknown //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Expected O, but got Unknown //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Expected O, but got Unknown //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Expected O, but got Unknown //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Expected O, but got Unknown ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; ExplosivesConfig = ((BaseUnityPlugin)this).Config.Bind<string>("1 - General", "Explosives", "Resin,SurtlingCore,SulfurStone,BlackCore,MoltenCore", new ConfigDescription("itemdrops that count as explosives", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); MaxChopDamageConfig = ((BaseUnityPlugin)this).Config.Bind<float>("1 - General", "MaxChopDamage", 250f, new ConfigDescription("max chop damage caused by explosion per stack. damage calculated: (max damage * (stack/maxStackSize))", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); MaxPickaxeDamageConfig = ((BaseUnityPlugin)this).Config.Bind<float>("1 - General", "MaxPickaxeDamage", 250f, new ConfigDescription("max pickaxe damage caused by explosion per stack. damage calculated: (max damage * (stack/maxStackSize))", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); MaxFireDamageConfig = ((BaseUnityPlugin)this).Config.Bind<float>("1 - General", "MaxFireDamage", 250f, new ConfigDescription("max fire damage caused by explosion per stack. damage calculated: (max damage * (stack/maxStackSize))", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); MaxExplosionRangeConfig = ((BaseUnityPlugin)this).Config.Bind<float>("1 - General", "MaxExplosionRange", 4f, new ConfigDescription("maximum range of the explosion calculated: (max range * (stack/maxStackSize))", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); MaxHeatWaveRangeConfig = ((BaseUnityPlugin)this).Config.Bind<float>("1 - General", "MaxHeatWaveRange", 6f, new ConfigDescription("maximum range of the heat wave calculated: (max range * (stack/maxStackSize))", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); TinderBarrelHealthConfig = ((BaseUnityPlugin)this).Config.Bind<float>("1 - General", "TinderBarrelhealth", 20f, new ConfigDescription("health of tinder barrel", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); ParseExplosivesConfig(); SynchronizationManager.OnConfigurationSynchronized += delegate { ParseExplosivesConfig(); }; } public void ParseExplosivesConfig() { s_explosives.Clear(); string[] array = ExplosivesConfig.Value.Split(new char[1] { ',' }); foreach (string text in array) { s_explosives.Add(text.Trim()); } } public static void SetLayerRecursively(GameObject obj, int layer) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)obj == (Object)null) { return; } obj.layer = layer; foreach (Transform item in obj.transform) { SetLayerRecursively(((Component)item).gameObject, layer); } } private void AddBarrel() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Expected O, but got Unknown //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0225: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Expected O, but got Unknown //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Expected O, but got Unknown //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Expected O, but got Unknown //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Expected O, but got Unknown GameObject val = PrefabManager.Instance.CreateClonedPrefab("bid_piece_flammable_barrel", "piece_chest_barrel"); SetLayerRecursively(val, 0); MeshRenderer[] componentsInChildren = val.GetComponentsInChildren<MeshRenderer>(); for (int i = 0; i < componentsInChildren.Length; i++) { ((Renderer)componentsInChildren[i]).sharedMaterial.SetColor("_EmissionColor", FireController.s_burningColor * 0.3f); } WearNTear component = val.GetComponent<WearNTear>(); component.m_supports = false; component.m_noSupportWear = false; component.m_health = TinderBarrelHealthConfig.Value; m_barrelPiece = val.GetComponent<Piece>(); m_barrelPiece.m_name = "$piece_barrel_flammable"; m_barrelPiece.m_description = "$piece_barrel_flammable_description"; val.AddComponent<Rigidbody>(); ZSyncTransform obj = val.AddComponent<ZSyncTransform>(); obj.m_syncPosition = true; obj.m_syncRotation = true; obj.m_syncBodyVelocity = true; Floating obj2 = val.AddComponent<Floating>(); obj2.m_waterLevelOffset = 0.65f; obj2.m_forceDistance = 1f; obj2.m_force = 0.5f; obj2.m_balanceForceFraction = 0.02f; obj2.m_damping = 0.05f; val.AddComponent<Flammable>(); ImpactEffect obj3 = val.AddComponent<ImpactEffect>(); obj3.m_minVelocity = 1f; obj3.m_maxVelocity = 5f; obj3.m_damagePlayers = true; obj3.m_damageToSelf = true; obj3.m_damageFish = true; obj3.m_damages.m_fire = 3f; obj3.m_damages.m_blunt = 1f; obj3.m_damages.m_chop = 1f; obj3.m_damages.m_pickaxe = 0f; obj3.m_interval = 0.25f; obj3.m_toolTier = 0; obj3.m_hitType = (HitType)13; obj3.m_triggerMask = LayerMask.op_Implicit(LayerMask.GetMask(new string[8] { "Default", "character", "piece", "terrain", "static_solid", "Default_small", "character_net", "vehicle" })); PieceManager instance = PieceManager.Instance; PieceConfig val2 = new PieceConfig(); val2.PieceTable = "Hammer"; val2.Category = PieceCategories.Misc; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig { Item = "Wood", Recover = true, Amount = 10 }, new RequirementConfig { Item = "BarrelRings", Recover = true, Amount = 1 }, new RequirementConfig { Item = "Resin", Recover = true, Amount = 1 } }; instance.AddPiece(new CustomPiece(val, true, val2)); } private void AddBarrelTrap() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Expected O, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Expected O, but got Unknown //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Expected O, but got Unknown //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Expected O, but got Unknown GameObject val = PrefabManager.Instance.CreateClonedPrefab("bid_piece_flammable_barreltrap", "bid_piece_flammable_barrel"); MeshRenderer[] componentsInChildren = val.GetComponentsInChildren<MeshRenderer>(); for (int i = 0; i < componentsInChildren.Length; i++) { ((Renderer)componentsInChildren[i]).sharedMaterial.SetColor("_EmissionColor", FireController.s_burningColor * 0.5f); } val.GetComponent<WearNTear>().m_health = 1f; Object.Destroy((Object)(object)val.GetComponent<ImpactEffect>()); m_barrelTrapPiece = val.GetComponent<Piece>(); m_barrelTrapPiece.m_name = "$piece_barrel_trap"; m_barrelTrapPiece.m_description = "$piece_barrel_trap_description"; val.AddComponent<IgniteAndDestroyOnMove>(); PieceManager instance = PieceManager.Instance; PieceConfig val2 = new PieceConfig(); val2.PieceTable = "Hammer"; val2.Category = PieceCategories.Misc; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig { Item = "Wood", Recover = true, Amount = 10 }, new RequirementConfig { Item = "BarrelRings", Recover = true, Amount = 1 }, new RequirementConfig { Item = "Resin", Recover = true, Amount = 2 } }; instance.AddPiece(new CustomPiece(val, true, val2)); } private void AddClonedItems() { AddBarrel(); AddBarrelTrap(); s_explosions[4] = CreateScaledPrefab(1f); s_explosions[3] = CreateScaledPrefab(0.79f); s_explosions[2] = CreateScaledPrefab(0.59f); s_explosions[1] = CreateScaledPrefab(0.39f); s_explosions[0] = CreateScaledPrefab(0.19f); s_explosionSpawner = PrefabManager.Instance.CreateClonedPrefab("bid_explosion_spawner", "Spawner_Blob"); Object.Destroy((Object)(object)s_explosionSpawner.GetComponent<CreatureSpawner>()); s_explosionSpawner.AddComponent<Spawner>().m_prefab = s_explosions[4]; PrefabManager.Instance.AddPrefab(s_explosionSpawner); PrefabManager.OnVanillaPrefabsAvailable -= AddClonedItems; } public float GetScaleIndex(float scale) { return (int)Mathf.Clamp(scale * 5f, 0f, 4f); } public string GetScaledName(float scale) { return s_explosionPrefab + "_" + GetScaleIndex(scale); } public string GetScaledFxName(float scale) { return s_explosionFxPrefab + "_" + GetScaleIndex(scale); } public string GetScaledDigName(float scale) { return s_explosionDigPrefab + "_" + GetScaleIndex(scale); } public GameObject CreateScaledFxPrefab(float scale) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) GameObject val = PrefabManager.Instance.CreateClonedPrefab(GetScaledFxName(scale), "fx_unstablelavarock_explosion"); ParticleSystem[] componentsInChildren = val.GetComponentsInChildren<ParticleSystem>(); foreach (ParticleSystem obj in componentsInChildren) { MainModule main = obj.main; ((MainModule)(ref main)).startSizeMultiplier = ((MainModule)(ref main)).startSizeMultiplier * scale; ((MainModule)(ref main)).startSpeedMultiplier = ((MainModule)(ref main)).startSpeedMultiplier * scale; ((MainModule)(ref main)).startLifetimeMultiplier = ((MainModule)(ref main)).startLifetimeMultiplier * scale; ShapeModule shape = obj.shape; ((ShapeModule)(ref shape)).scale = ((ShapeModule)(ref shape)).scale * scale; EmissionModule emission = obj.emission; ((EmissionModule)(ref emission)).rateOverTimeMultiplier = ((EmissionModule)(ref emission)).rateOverTimeMultiplier * scale; ((EmissionModule)(ref emission)).rateOverDistanceMultiplier = ((EmissionModule)(ref emission)).rateOverDistanceMultiplier * scale; SizeOverLifetimeModule sizeOverLifetime = obj.sizeOverLifetime; if (((SizeOverLifetimeModule)(ref sizeOverLifetime)).enabled) { ((SizeOverLifetimeModule)(ref sizeOverLifetime)).sizeMultiplier = ((SizeOverLifetimeModule)(ref sizeOverLifetime)).sizeMultiplier * scale; } VelocityOverLifetimeModule velocityOverLifetime = obj.velocityOverLifetime; if (((VelocityOverLifetimeModule)(ref velocityOverLifetime)).enabled) { ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).xMultiplier = ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).xMultiplier * scale; ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).yMultiplier = ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).yMultiplier * scale; ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).zMultiplier = ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).zMultiplier * scale; } } PrefabManager.Instance.AddPrefab(val); return val; } public GameObject CreateScaledPrefab(float scale) { GameObject val = PrefabManager.Instance.CreateClonedPrefab(GetScaledName(scale), "UnstableLavaRock_explosion"); Aoe component = val.GetComponent<Aoe>(); component.m_damage.m_fire = MaxFireDamageConfig.Value; component.m_damage.m_chop = MaxChopDamageConfig.Value; component.m_damage.m_pickaxe = MaxPickaxeDamageConfig.Value; component.m_radius = MaxExplosionRangeConfig.Value; component.m_damage.m_damage = 0f; Aoe obj = val.AddComponent<Aoe>(); obj.m_damage.m_fire = 0f; obj.m_toolTier = FireSpreads.FireToolTier; obj.m_damage.m_damage = 1f; obj.m_radius = MaxHeatWaveRangeConfig.Value; obj.m_hitCharacters = true; obj.m_hitEnemy = true; obj.m_hitProps = true; CamShaker obj2 = val.AddComponent<CamShaker>(); obj2.m_strength = 1f; obj2.m_range = 50f; obj2.m_continous = true; obj2.m_delay = 0f; obj2.m_continousDuration = 0.8f; component.m_initiateEffect.m_effectPrefabs[0].m_prefab = CreateScaledFxPrefab(scale); component.m_spawnOnHitTerrain = CreateScaledDigPrefab(scale); PrefabManager.Instance.AddPrefab(val); return val; } public GameObject CreateScaledDigPrefab(float scale) { GameObject val = PrefabManager.Instance.CreateClonedPrefab(GetScaledDigName(scale), "digg_UnstableLavaRock"); TerrainOp component = val.GetComponent<TerrainOp>(); Settings settings = component.m_settings; settings.m_levelRadius *= scale; Settings settings2 = component.m_settings; settings2.m_raiseRadius *= scale; Settings settings3 = component.m_settings; settings3.m_raisePower *= scale; Settings settings4 = component.m_settings; settings4.m_raiseDelta *= scale; Settings settings5 = component.m_settings; settings5.m_smoothRadius *= scale; Settings settings6 = component.m_settings; settings6.m_smoothPower *= scale; Settings settings7 = component.m_settings; settings7.m_paintRadius *= scale; component.m_chanceToSpawn *= scale; PrefabManager.Instance.AddPrefab(val); return val; } } } namespace Explosives.Patches { [HarmonyPatch(typeof(Container), "OnDestroyed", new Type[] { })] internal class Container_OnDestroyed_patch { private static void Prefix(ref Container __instance) { //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) if (!FireController.Instance.IsBurning(__instance.m_nview)) { return; } List<ItemData> list = new List<ItemData>(); float num = 0f; foreach (ItemData item in __instance.m_inventory.m_inventory) { if (Explosives.s_explosives.Any((string name) => ((Object)item.m_dropPrefab).name == name)) { list.Add(item); num += (float)item.m_stack / (float)item.m_shared.m_maxStackSize; } } foreach (ItemData item2 in list) { __instance.m_inventory.RemoveItem(item2); } Vector3 val = ((Component)__instance).transform.position; FireState fireState = FireController.Instance.GetFireState(((Component)__instance).gameObject); if (fireState != null) { if (FireController.s_hasRigidBody.TryGetValue(Utils.GetPrefabName(((Component)__instance).gameObject), out var value) && value) { fireState.SetupBoundsConnected(); } val = GetRandomPosition(fireState.m_bounds, fireState.m_bounds_rotation); } Spawner component = Object.Instantiate<GameObject>(Explosives.s_explosionSpawner, val, Quaternion.identity).GetComponent<Spawner>(); component.m_damageMulitplier = num; component.m_prefab = Explosives.s_explosions[(int)Math.Floor(Mathf.Clamp(component.m_damageMulitplier * 5f, 0f, 4f))]; component.m_time = 0f; } public static Vector3 GetRandomPosition(Bounds bounds, Quaternion rotation) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) float num = Random.Range(((Bounds)(ref bounds)).min.x, ((Bounds)(ref bounds)).max.x); float num2 = Random.Range(((Bounds)(ref bounds)).min.y, ((Bounds)(ref bounds)).max.y); float num3 = Random.Range(((Bounds)(ref bounds)).min.z, ((Bounds)(ref bounds)).max.z); Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(num, num2, num3); return rotation * (val - ((Bounds)(ref bounds)).center) + ((Bounds)(ref bounds)).center; } } } namespace Explosives.Mono { public class IgniteAndDestroyOnMove : MonoBehaviour { public float m_movementThreshold = 0.1f; public float m_rotationThreshold = 5f; private Rigidbody m_rb; private ZNetView m_nview; private IDestructible m_destructible; private float m_time; public void Awake() { m_rb = ((Component)this).GetComponent<Rigidbody>(); m_nview = ((Component)this).GetComponent<ZNetView>(); m_destructible = ((Component)this).GetComponent<IDestructible>(); m_time = Time.realtimeSinceStartup; } private void Update() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (!((Object)(object)m_nview == (Object)null) && m_nview.IsOwner() && !(Time.realtimeSinceStartup - m_time < 1f) && IsMovingSlightly()) { HitData val = new HitData(); val.m_damage.m_fire = 1f; val.m_toolTier = (short)FireSpreads.FireToolTier; m_destructible.Damage(val); } } private bool IsMovingSlightly() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_rb == (Object)null) { return false; } Vector3 val = m_rb.velocity; if (!(((Vector3)(ref val)).magnitude > m_movementThreshold)) { val = m_rb.angularVelocity; return ((Vector3)(ref val)).magnitude > m_rotationThreshold; } return true; } } public class Spawner : MonoBehaviour { public GameObject m_prefab; public ZNetView m_nview; public float m_damageMulitplier = 1f; public float m_time; public void Awake() { m_nview = ((Component)this).GetComponent<ZNetView>(); ((MonoBehaviour)this).InvokeRepeating("UpdateSpawner", Random.Range(0f, m_time), 1f); } public void UpdateSpawner() { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_nview == (Object)null || !m_nview.IsOwner() || (Object)(object)m_prefab == (Object)null) { return; } int num = 0; float num2 = Mathf.Clamp(m_damageMulitplier, 0f, 1f); GameObject val = Object.Instantiate<GameObject>(m_prefab, ((Component)this).transform.position, Quaternion.identity); Aoe[] components = val.GetComponents<Aoe>(); foreach (Aoe val2 in components) { num++; val2.m_damage.m_pickaxe = Explosives.MaxPickaxeDamageConfig.Value * m_damageMulitplier; val2.m_damage.m_chop = Explosives.MaxChopDamageConfig.Value * m_damageMulitplier; if (num == 1) { val2.m_radius = Explosives.MaxExplosionRangeConfig.Value * num2; val2.m_damage.m_fire = Explosives.MaxFireDamageConfig.Value * m_damageMulitplier; } else { val2.m_radius = Mathf.Max(Explosives.MaxHeatWaveRangeConfig.Value * num2, 1f); val2.m_damage.m_fire = 0f; val2.m_damage.m_chop = 0f; val2.m_damage.m_pickaxe = 0f; } val.GetComponent<CamShaker>().m_range = 150f * m_damageMulitplier; } val.transform.localScale = new Vector3(num2, num2, num2); ZNetScene.instance.Destroy(((Component)this).gameObject); } } } namespace FireSpreads { public class Flammable : MonoBehaviour { public float m_fireresists = 1f; public void Awake() { ZNetView component = ((Component)this).GetComponent<ZNetView>(); if (!((Object)(object)component == (Object)null) && component.IsValid() && component.IsOwner()) { FireController.Instance.SetFireResist(component, m_fireresists, true); Object.Destroy((Object)(object)this); } } } }