Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of ShrineOfSwiftness v1.0.0
ShrineOfSwiftness.dll
Decompiled 4 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(); } } }