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 ShrineOfSwiftness v1.0.0
ShrineOfSwiftness.dll
Decompiled 10 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; 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 HG; using HG.Reflection; using Microsoft.CodeAnalysis; using R2API; using RoR2; using RoR2.Navigation; using RoR2.Networking; using RoR2.UI; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ShrineOfSwiftness")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+01dabd3420d0ebc2d2384d3ebc2f1937e0b2f617")] [assembly: AssemblyProduct("ShrineOfSwiftness")] [assembly: AssemblyTitle("ShrineOfSwiftness")] [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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ShrineOfSwiftness { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("HIFU.ShrineOfSwiftness", "ShrineOfSwiftness", "1.0.0")] public class Main : BaseUnityPlugin { public const string PluginGUID = "HIFU.ShrineOfSwiftness"; public const string PluginAuthor = "HIFU"; public const string PluginName = "ShrineOfSwiftness"; public const string PluginVersion = "1.0.0"; public static ManualLogSource sosLogger; public static AssetBundle bundle; public static ConfigEntry<int> baseCost; public static ConfigEntry<int> costIncreasePerActivation; public static ConfigEntry<int> maxActivations; public static ConfigEntry<string> stageWhitelist; public static ConfigEntry<string> itemWhitelist; public static List<string> stagesToAppearOn = new List<string>(); public static List<string> itemsToDrop = new List<string>(); public static List<ItemIndex> itemIndexList = new List<ItemIndex>(); public static Main Instance; public void Awake() { Instance = this; sosLogger = ((BaseUnityPlugin)this).Logger; bundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)Instance).Info.Location), "shrineofswiftness")); baseCost = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of Swiftness", "Base Cost", 25, "The base cost of the Shrine of Swiftness. For reference, a Chest is $25, and a Large Chest is $50."); costIncreasePerActivation = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of Swiftness", "Cost Increase per Activation", 25, ""); maxActivations = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of Swiftness", "Maximum Amount of Activations", 3, ""); stageWhitelist = ((BaseUnityPlugin)this).Config.Bind<string>("Shrine of Swiftness", "Stage Whitelist", "frozenwall | wispgraveyard | sulfurpools | habitat | habitatfall", "A list of internal stage names that Shrine of Swiftness can spawn on, separated by a space, following a pipe symbol and another space. Use the DebugToolkit mod and its list_stage command to see all internal stage names."); itemWhitelist = ((BaseUnityPlugin)this).Config.Bind<string>("Shrine of Swiftness", "Item Whitelist", "ITEM_HOOF_NAME | ITEM_SPRINTBONUS_NAME | ITEM_SPRINTOUTOFCOMBAT_NAME", "A list of internal item name tokens that Shrine of Swiftness can drop, separated by a space, following a pipe symbol and another space. Use the DebugToolkit mod and its list_item or item_list command to see all internal item names."); stagesToAppearOn = stageWhitelist.Value.Split(" | ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList(); itemsToDrop = itemWhitelist.Value.Split(" | ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList(); for (int i = 0; i < stagesToAppearOn.Count; i++) { string text = stagesToAppearOn[i]; } for (int j = 0; j < itemsToDrop.Count; j++) { string text2 = itemsToDrop[j]; } Prefabs.Init(); } [SystemInitializer(new Type[] { typeof(ItemCatalog) })] private static void GetItemIndices() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: 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) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) Enumerator<ItemDef> enumerator = ItemCatalog.allItemDefs.GetEnumerator(); try { while (enumerator.MoveNext()) { ItemDef current = enumerator.Current; if (itemsToDrop.Contains(current.nameToken)) { itemIndexList.Add(current.itemIndex); } } } finally { ((IDisposable)enumerator).Dispose(); } for (int i = 0; i < itemIndexList.Count; i++) { ItemIndex val = itemIndexList[i]; } } } public class Prefabs { public static GameObject shrinePrefab; public static InteractableSpawnCard interactableSpawnCard; public static GameObject shrineVFX; public static void Init() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Expected O, but got Unknown //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: 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) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Expected O, but got Unknown //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_0259: 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_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0266: Expected O, but got Unknown //IL_026b: Expected O, but got Unknown //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) shrineVFX = Addressables.LoadAssetAsync<GameObject>((object)"0fa235b9d7e778f4ba2cd8f2437f72d9").WaitForCompletion(); shrinePrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"8a681654848ac374980fea55c4cf55a7").WaitForCompletion(), "Shrine of Swiftness"); shrinePrefab.AddComponent<ShrineOfSwiftnessController>(); shrinePrefab.AddComponent<UnityJankMoment>(); Transform transform = shrinePrefab.transform; ModelLocator component = shrinePrefab.GetComponent<ModelLocator>(); Transform modelTransform = component._modelTransform; ((Object)modelTransform).name = "mdlShrineSwiftness"; MeshRenderer component2 = ((Component)modelTransform).GetComponent<MeshRenderer>(); Material val = new Material(Addressables.LoadAssetAsync<Material>((object)"0de2169c1f513a44a8b439821be523eb").WaitForCompletion()); val.SetTexture("_MainTex", (Texture)(object)Addressables.LoadAssetAsync<Texture2D>((object)"50576454418d775439d1c15ea6e3d694").WaitForCompletion()); val.SetColor("_TintColor", Color.white); val.SetFloat("_SpecularStrength", 1f); val.SetFloat("_SpecularExponent", 1.164457f); val.SetFloat("_SnowBias", -1f); val.SetFloat("_Depth", 0.9161675f); val.SetInt("_RampInfo", 4); ((Renderer)component2).material = val; MeshRenderer component3 = ((Component)transform.Find("Symbol")).GetComponent<MeshRenderer>(); MeshRenderer component4 = ((Component)component3).GetComponent<MeshRenderer>(); Material val2 = new Material(Addressables.LoadAssetAsync<Material>((object)"4f1b6f101f0d1cb42893fca3d83b9154").WaitForCompletion()); val2.SetTexture("_MainTex", (Texture)(object)Main.bundle.LoadAsset<Texture2D>("texShrineOfSwiftnessSymbol.png")); val2.SetColor("_TintColor", Color32.op_Implicit(new Color32((byte)130, (byte)188, (byte)232, byte.MaxValue))); ((Renderer)component4).material = val2; PurchaseInteraction component5 = shrinePrefab.GetComponent<PurchaseInteraction>(); component5.displayNameToken = "SHRINE_SWIFTNESS_NAME"; component5.contextToken = "SHRINE_SWIFTNESS_CONTEXT"; component5.cost = Main.baseCost.Value; component5.automaticallyScaleCostWithDifficulty = false; GenericDisplayNameProvider component6 = shrinePrefab.GetComponent<GenericDisplayNameProvider>(); component6.displayToken = "SHRINE_SWIFTNESS_NAME"; InspectDef val3 = ScriptableObject.CreateInstance<InspectDef>(); InspectInfo val4 = new InspectInfo { TitleToken = component6.displayToken, DescriptionToken = "SHRINE_SWIFTNESS_DESCRIPTION", FlavorToken = "shrine of swiftness flavor token", isConsumedItem = false, Visual = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texShrineIconOutlined.png").WaitForCompletion(), TitleColor = Color.white }; InspectInfo val5 = val4; val3.Info = val4; InspectInfo info = val5; shrinePrefab.GetComponent<GenericInspectInfoProvider>().InspectInfo = Object.Instantiate<InspectDef>(shrinePrefab.GetComponent<GenericInspectInfoProvider>().InspectInfo); shrinePrefab.GetComponent<GenericInspectInfoProvider>().InspectInfo.Info = info; Object.DestroyImmediate((Object)(object)shrinePrefab.GetComponent<ShrineChanceBehavior>()); PrefabAPI.RegisterNetworkPrefab(shrinePrefab); ContentAddition.AddNetworkedObject(shrinePrefab); interactableSpawnCard = ScriptableObject.CreateInstance<InteractableSpawnCard>(); ((SpawnCard)interactableSpawnCard).prefab = shrinePrefab; ((SpawnCard)interactableSpawnCard).sendOverNetwork = true; ((SpawnCard)interactableSpawnCard).hullSize = (HullClassification)1; ((SpawnCard)interactableSpawnCard).nodeGraphType = (GraphType)0; ((SpawnCard)interactableSpawnCard).requiredFlags = (NodeFlags)0; ((SpawnCard)interactableSpawnCard).directorCreditCost = 0; ((SpawnCard)interactableSpawnCard).occupyPosition = true; ((SpawnCard)interactableSpawnCard).eliteRules = (EliteRules)0; interactableSpawnCard.orientToFloor = false; interactableSpawnCard.slightlyRandomizeOrientation = false; interactableSpawnCard.skipSpawnWhenDevotionArtifactEnabled = true; interactableSpawnCard.weightScalarWhenSacrificeArtifactEnabled = 1f; interactableSpawnCard.skipSpawnWhenDevotionArtifactEnabled = false; interactableSpawnCard.maxSpawnsPerStage = 1; interactableSpawnCard.prismaticTrialSpawnChance = 1f; ((Object)interactableSpawnCard).name = "iscShrineSwiftness"; LanguageAPI.Add("SHRINE_SWIFTNESS_NAME", "Shrine of Swiftness"); LanguageAPI.Add("SHRINE_SWIFTNESS_CONTEXT", "Offer to Shrine of Swiftness"); LanguageAPI.Add("SHRINE_SWIFTNESS_USE_MESSAGE", "<style=cShrine>{0} offered to the shrine and received a gift of celerity.</style>"); LanguageAPI.Add("SHRINE_SWIFTNESS_USE_MESSAGE_2P", "<style=cShrine>You offer to the shrine and receive a gift of celerity.</style>"); LanguageAPI.Add("SHRINE_SWIFTNESS_DESCRIPTION", "When activated by a survivor the Shrine of Swiftness drops a random movement speed item."); SceneDirector.onPrePopulateSceneServer += OnPrePopulateSceneServer; } private static void OnPrePopulateSceneServer(SceneDirector director) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown if (Main.stagesToAppearOn.Contains(SceneCatalog.mostRecentSceneDef.cachedName)) { DirectorPlacementRule val = new DirectorPlacementRule { placementMode = (PlacementMode)4 }; GameObject val2 = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest((SpawnCard)(object)interactableSpawnCard, val, Run.instance.runRNG)); } } } public class UnityJankMoment : MonoBehaviour { public PurchaseInteraction purchaseInteraction; public ShrineOfSwiftnessController shrineOfSwiftnessController; public void Start() { shrineOfSwiftnessController = ((Component)this).GetComponent<ShrineOfSwiftnessController>(); purchaseInteraction = ((Component)this).GetComponent<PurchaseInteraction>(); ((UnityEvent<Interactor>)(object)purchaseInteraction.onPurchase).AddListener((UnityAction<Interactor>)SoTrue); } public void SoTrue(Interactor interactor) { shrineOfSwiftnessController.AddShrineStack(interactor); } } public class ShrineOfSwiftnessController : ShrineBehavior { public int maxPurchaseCount = Main.maxActivations.Value; public Transform symbolTransform; private PurchaseInteraction purchaseInteraction; private int purchaseCount = 0; private float refreshTimer; private const float refreshDuration = 2f; private bool waitingForRefresh; public Transform dropletOrigin; public Xoroshiro128Plus rng; public float cachedCostMultiplierPerPurchase; public override int GetNetworkChannel() { return QosChannelIndex.defaultReliable.intVal; } private void Start() { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown purchaseInteraction = ((Component)this).GetComponent<PurchaseInteraction>(); symbolTransform = ((Component)this).transform.Find("Symbol"); dropletOrigin = ((Component)this).transform.Find("DropletOrigin"); if (NetworkServer.active) { rng = new Xoroshiro128Plus(Run.instance.treasureRng.nextUlong); } purchaseInteraction.Networkcost = Run.instance.GetDifficultyScaledCost(Main.baseCost.Value); cachedCostMultiplierPerPurchase = Run.instance.GetDifficultyScaledCost(Main.costIncreasePerActivation.Value); } public void AddShrineStack(Interactor interactor) { //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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: 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_00f3: Expected O, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown if (NetworkServer.active) { waitingForRefresh = true; CharacterBody component = ((Component)interactor).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { Chat.SendBroadcastChat((ChatMessageBase)new SubjectFormatChatMessage { subjectAsCharacterBody = component, baseToken = "SHRINE_SWIFTNESS_USE_MESSAGE" }); } ItemIndex val = Main.itemIndexList[rng.RangeInt(0, Main.itemIndexList.Count)]; PickupIndex val2 = PickupCatalog.FindPickupIndex(val); PickupDropletController.CreatePickupDroplet(val2, dropletOrigin.position, dropletOrigin.forward * 20f); EffectManager.SpawnEffect(Prefabs.shrineVFX, new EffectData { origin = ((Component)this).transform.position, rotation = Quaternion.identity, scale = 1f, color = new Color32((byte)130, (byte)188, (byte)232, byte.MaxValue) }, true); Util.PlaySound("Play_mage_m2_iceSpear_shoot", ((Component)this).gameObject); Util.PlaySound("Play_ui_obj_lunarPool_activate", ((Component)this).gameObject); purchaseCount++; refreshTimer = 2f; if (purchaseCount >= maxPurchaseCount) { ((Component)symbolTransform).gameObject.SetActive(false); ((ShrineBehavior)this).CallRpcSetPingable(false); } } } public void FixedUpdate() { if (waitingForRefresh) { refreshTimer -= Time.fixedDeltaTime; if (refreshTimer <= 0f && purchaseCount < maxPurchaseCount) { purchaseInteraction.SetAvailable(true); purchaseInteraction.Networkcost = (int)((float)purchaseInteraction.cost + cachedCostMultiplierPerPurchase); waitingForRefresh = false; } } } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { return ((ShrineBehavior)this).OnSerialize(writer, forceAll); } public override void OnDeserialize(NetworkReader reader, bool initialState) { ((ShrineBehavior)this).OnDeserialize(reader, initialState); } public override void PreStartClient() { ((ShrineBehavior)this).PreStartClient(); } } }