using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Microsoft.CodeAnalysis; using PxntxrezStudio.TsarBomb; using REPOLib.Modules; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("Autodesk.Fbx")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("FbxBuildTestAssets")] [assembly: IgnoresAccessChecksTo("Klattersynth")] [assembly: IgnoresAccessChecksTo("Photon3Unity3D")] [assembly: IgnoresAccessChecksTo("PhotonChat")] [assembly: IgnoresAccessChecksTo("PhotonRealtime")] [assembly: IgnoresAccessChecksTo("PhotonUnityNetworking")] [assembly: IgnoresAccessChecksTo("PhotonUnityNetworking.Utilities")] [assembly: IgnoresAccessChecksTo("PhotonVoice.API")] [assembly: IgnoresAccessChecksTo("PhotonVoice")] [assembly: IgnoresAccessChecksTo("PhotonVoice.PUN")] [assembly: IgnoresAccessChecksTo("SingularityGroup.HotReload.Runtime")] [assembly: IgnoresAccessChecksTo("SingularityGroup.HotReload.Runtime.Public")] [assembly: IgnoresAccessChecksTo("Sirenix.OdinInspector.Attributes")] [assembly: IgnoresAccessChecksTo("Sirenix.Serialization.Config")] [assembly: IgnoresAccessChecksTo("Sirenix.Serialization")] [assembly: IgnoresAccessChecksTo("Sirenix.Utilities")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Formats.Fbx.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Postprocessing.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Antlr3.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Core")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Flow")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.State")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("websocket-sharp")] [assembly: AssemblyCompany("PxntxrezStudio")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("TsarBomb")] [assembly: AssemblyTitle("TsarBomb")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public class BarrelValuableTsarBomb : Trap { private ParticleScriptExplosionTsarBomb particleScriptExplosionTsarBomb; private int HitCount; private int MaxHitCount; public Transform Center; public override void Start() { ((Trap)this).Start(); particleScriptExplosionTsarBomb = ((Component)this).GetComponent(); MaxHitCount = TsarBomb.ConfigData.MaxHitCount.Value; } public void Explode() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) particleScriptExplosionTsarBomb.Spawn(Center.position, 1f, 50, 100); } public void PotentialExplode() { if (base.isLocal) { if (HitCount >= MaxHitCount - 1) { Explode(); } else { HitCount++; } } } } public class ParticleScriptExplosionTsarBomb : MonoBehaviour { public ExplosionPreset explosionPreset; private GameObject explosionPrefab; private void Start() { explosionPrefab = Resources.Load("Effects/Part Prefab Explosion"); } public ParticlePrefabExplosion Spawn(Vector3 position, float size, int damage, int enemyDamage, float forceMulti = 1f, bool onlyParticleEffect = false, bool disableSound = false, float shakeMultiplier = 3f) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_0312: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_0157: 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) if (size < 0.25f) { if (!disableSound) { explosionPreset.explosionSoundSmall.Play(position, 1f, 1f, 1f, 1f); explosionPreset.explosionSoundSmallGlobal.Play(position, 1f, 1f, 1f, 1f); } if (shakeMultiplier != 0f) { GameDirector.instance.CameraImpact.ShakeDistance(24f * shakeMultiplier, 22f, 20f, ((Component)this).transform.position, 0.2f); GameDirector.instance.CameraShake.ShakeDistance(24f * shakeMultiplier, 22f, 20f, ((Component)this).transform.position, 0.5f); } } else if (size < 0.5f) { if (!disableSound) { explosionPreset.explosionSoundMedium.Play(position, 1f, 1f, 1f, 1f); explosionPreset.explosionSoundMediumGlobal.Play(position, 1f, 1f, 1f, 1f); } if (shakeMultiplier != 0f) { GameDirector.instance.CameraImpact.ShakeDistance(14f * shakeMultiplier, 10f, 16f, ((Component)this).transform.position, 0.2f); GameDirector.instance.CameraShake.ShakeDistance(5f * shakeMultiplier, 10f, 16f, ((Component)this).transform.position, 0.5f); } } else { if (!disableSound) { explosionPreset.explosionSoundBig.Play(position, 1f, 1f, 1f, 1f); explosionPreset.explosionSoundBigGlobal.Play(position, 1f, 1f, 1f, 1f); } if (shakeMultiplier != 0f) { GameDirector.instance.CameraImpact.ShakeDistance(25f * shakeMultiplier, 18f, 26f, ((Component)this).transform.position, 0.2f); GameDirector.instance.CameraShake.ShakeDistance(15f * shakeMultiplier, 18f, 26f, ((Component)this).transform.position, 0.5f); } } ParticlePrefabExplosion component = Object.Instantiate(explosionPrefab, position, Quaternion.identity).GetComponent(); component.forceMultiplier = explosionPreset.explosionForceMultiplier * forceMulti; component.explosionSize = TsarBomb.ConfigData.ExplosionRadius.Value; component.explosionDamage = Mathf.RoundToInt((float)damage * TsarBomb.ConfigData.PlayerDamage.Value); component.explosionDamageEnemy = Mathf.RoundToInt((float)enemyDamage * TsarBomb.ConfigData.EnemyDamage.Value); component.lightColorOverTime = explosionPreset.lightColor; ColorOverLifetimeModule colorOverLifetime = component.particleFire.colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(explosionPreset.explosionColors); colorOverLifetime = component.particleSmoke.colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(explosionPreset.smokeColors); component.particleFire.Play(); component.particleSmoke.Play(); ((Behaviour)component.light).enabled = true; if (TsarBomb.ConfigData.CanExplodeThroughWalls.Value) { HurtCollider[] componentsInChildren = ((Component)component).GetComponentsInChildren(); foreach (HurtCollider val in componentsInChildren) { val.playerRayCast = false; val.enemyRayCast = false; val.physRayCast = false; } } else { HurtCollider[] componentsInChildren2 = ((Component)component).GetComponentsInChildren(); foreach (HurtCollider val2 in componentsInChildren2) { val2.playerRayCast = true; val2.enemyRayCast = true; val2.physRayCast = true; } } return component; } } namespace PxntxrezStudio.TsarBomb { [BepInPlugin("PxntxrezStudio.TsarBomb", "Tsar Bomb", "1.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class TsarBomb : BaseUnityPlugin { private const string modGUID = "PxntxrezStudio.TsarBomb"; private const string modName = "Tsar Bomb"; private const string modVersion = "1.0.1"; internal static TsarBomb instance; internal static GameObject BombPrefab; public ManualLogSource Log => ((BaseUnityPlugin)this).Logger; public static TsarBombConfig ConfigData { get; private set; } private void Awake() { if ((Object)(object)instance == (Object)null) { instance = this; ((BaseUnityPlugin)this).Logger.LogInfo((object)"PxntxrezStudio.TsarBomb v1.0.1: Instance set."); ConfigData = new TsarBombConfig(); ConfigData.Init(((BaseUnityPlugin)this).Config); ((BaseUnityPlugin)this).Logger.LogInfo((object)"PxntxrezStudio.TsarBomb v1.0.1: Config initialized."); string text = ((BaseUnityPlugin)this).Info.Location.Replace("TsarBomb.dll", "tsarbomb"); AssetBundle val = AssetBundle.LoadFromFile(text); if ((Object)(object)val == (Object)null) { ((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load asset bundle!"); return; } BombPrefab = val.LoadAsset("TsarBomb"); if ((Object)(object)BombPrefab == (Object)null) { ((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load TsarBomb prefab!"); return; } if ((Object)(object)BombPrefab.GetComponent() == (Object)null) { BombPrefab.AddComponent(); } Valuables.RegisterValuable(BombPrefab); ((BaseUnityPlugin)this).Logger.LogInfo((object)"PxntxrezStudio.TsarBomb v1.0.1: TsarBomb registered successfully."); } else { Object.Destroy((Object)(object)this); } } } public class TsarBombConfig { private const int MinLimit = 1000; private const int MaxLimit = 500000; private const float MinWeight = 0.1f; private const float MaxWeight = 20f; private const int MinExplosionRadius = 1; private const int MaxExplosionRadius = 100; private const float MinExplosionDamage = 1f; private const float MaxExplosionDamage = 500f; private const int MinMaxHitCount = 0; private const int MaxMaxHitCount = 12; public ConfigEntry MinValue { get; private set; } public ConfigEntry MaxValue { get; private set; } public ConfigEntry Weight { get; private set; } public ConfigEntry ExplosionRadius { get; private set; } public ConfigEntry PlayerDamage { get; private set; } public ConfigEntry EnemyDamage { get; private set; } public ConfigEntry CanExplodeThroughWalls { get; private set; } public ConfigEntry MaxHitCount { get; private set; } public void Init(ConfigFile config) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Expected O, but got Unknown //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Expected O, but got Unknown //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Expected O, but got Unknown //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Expected O, but got Unknown //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Expected O, but got Unknown //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Expected O, but got Unknown MinValue = config.Bind("Value", "Min Tsar Bomb Sell Price", 40000, new ConfigDescription("Minimum value of Tsar Bomb when sold.", (AcceptableValueBase)(object)new AcceptableValueRange(1000, 500000), Array.Empty())); MaxValue = config.Bind("Value", "Max Tsar Bomb Sell Price", 75000, new ConfigDescription("Maximum value of Tsar Bomb when sold.", (AcceptableValueBase)(object)new AcceptableValueRange(1000, 500000), Array.Empty())); Weight = config.Bind("Physics", "Weight", 8f, new ConfigDescription("Weight of Tsar Bomb (affects how heavy it feels).", (AcceptableValueBase)(object)new AcceptableValueRange(0.1f, 20f), Array.Empty())); ExplosionRadius = config.Bind("Explosion", "Explosion Radius", 15, new ConfigDescription("Explosion radius of Tsar Bomb. (For comparison: explosive grenade radius is 1)", (AcceptableValueBase)(object)new AcceptableValueRange(1, 100), Array.Empty())); PlayerDamage = config.Bind("Damage", "Player Damage", 50f, new ConfigDescription("Damage dealt to player by Tsar Bomb. Each increment of 1 increases the damage by 100 units.", (AcceptableValueBase)(object)new AcceptableValueRange(1f, 500f), Array.Empty())); EnemyDamage = config.Bind("Damage", "Enemy Damage", 50f, new ConfigDescription("Damage dealt to enemy by Tsar Bomb. Each increment of 1 increases the damage by 100 units.", (AcceptableValueBase)(object)new AcceptableValueRange(1f, 500f), Array.Empty())); CanExplodeThroughWalls = config.Bind("Walls", "Explosion goes through walls?", true, new ConfigDescription("Enable or disable the ability to explode through walls.", (AcceptableValueBase)null, Array.Empty())); MaxHitCount = config.Bind("Trigger", "Max Hits Before Explosion", 1, new ConfigDescription("The amount of heavy hits required to trigger the explosion. (0 means only explode on destroy)", (AcceptableValueBase)(object)new AcceptableValueRange(0, 12), Array.Empty())); } } public class TsarBombValuable : MonoBehaviour { private void Awake() { ValuableObject component = ((Component)this).GetComponent(); if ((Object)(object)component == (Object)null) { TsarBomb.instance.Log.LogError((object)"TsarBombValuable: ValuableObject component not found!"); return; } int value = TsarBomb.ConfigData.MinValue.Value; int value2 = TsarBomb.ConfigData.MaxValue.Value; Value val = ScriptableObject.CreateInstance(); val.valueMin = Mathf.Max(0, value); val.valueMax = Mathf.Max(val.valueMin, (float)value2); component.valuePreset = val; float value3 = TsarBomb.ConfigData.Weight.Value; PhysAttribute val2 = ScriptableObject.CreateInstance(); val2.mass = value3; component.physAttributePreset = val2; Rigidbody component2 = ((Component)this).GetComponent(); if ((Object)(object)component2 != (Object)null) { component2.mass = value3; TsarBomb.instance.Log.LogInfo((object)$"TsarBombValuable: Rigidbody.mass set to {component2.mass}"); } TsarBomb.instance.Log.LogInfo((object)$"TsarBombValuable: Set value {val.valueMin} - {val.valueMax}"); TsarBomb.instance.Log.LogInfo((object)$"TsarBombValuable: Set weight (via physAttributePreset) to {value3}"); } } }