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 MoreShrines v1.5.3
BetterShrines.dll
Decompiled 4 months ago
The result has been truncated due to the large size, download it to view full contents!
using 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; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using HarmonyLib; using IL.RoR2; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using MonoMod.RuntimeDetour; using On.RoR2; using On.RoR2.Artifacts; using On.RoR2.UI; using R2API; using RoR2; using RoR2.CharacterAI; using RoR2.Navigation; using RoR2.UI; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.UI; [assembly: AssemblyTitle("BetterShrines")] [assembly: AssemblyProduct("BetterShrines")] [assembly: AssemblyInformationalVersion("1.0.0+364c7330755885cfd8e361bfc72642ffacb39a2d")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyCompany("BetterShrines")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [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] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] [Microsoft.CodeAnalysis.Embedded] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Evaisa.MoreShrines { internal class CustomDirector : NetworkBehaviour { public class CardPool { public int cost = 0; public List<DirectorCard> cards = new List<DirectorCard>(); } private List<CardPool> finalSpawnOrder = new List<CardPool>(); private bool cardPoolInitialized = false; public int countToSpawn = 0; private CombatDirector director; public void Awake() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown CombatDirector.AttemptSpawnOnTarget += new hook_AttemptSpawnOnTarget(AttemptSpawnOnTarget); director = ((Component)this).gameObject.GetComponent<CombatDirector>(); } private void OnDestroy() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown CombatDirector.AttemptSpawnOnTarget -= new hook_AttemptSpawnOnTarget(AttemptSpawnOnTarget); } public bool AttemptSpawnOnTarget(orig_AttemptSpawnOnTarget orig, CombatDirector self, Transform spawnTarget, PlacementMode placementMode) { //IL_040a: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_0323: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_0331: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Expected O, but got Unknown //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Expected O, but got Unknown //IL_0398: 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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)((Component)self).gameObject == (Object)(object)((Component)this).gameObject) { float monsterCredit = self.monsterCredit; DirectorCardCategorySelection monsterCards = self.monsterCards; if (!cardPoolInitialized) { List<CardPool> list = new List<CardPool>(); Category[] categories = monsterCards.categories; foreach (Category val in categories) { DirectorCard[] cards = val.cards; foreach (DirectorCard card in cards) { if (list.Any((CardPool pool) => pool.cost == card.cost)) { list.Find((CardPool pool) => pool.cost == card.cost).cards.Add(card); continue; } CardPool cardPool = new CardPool(); cardPool.cost = card.cost; cardPool.cards.Add(card); list.Add(cardPool); } } cardPoolInitialized = true; list.Sort((CardPool item1, CardPool item2) => item1.cost.CompareTo(item2.cost)); int num = 0; CardPool cardPool2 = list[0]; foreach (CardPool item4 in list) { if ((float)(item4.cost * countToSpawn) < monsterCredit) { cardPool2 = item4; num++; continue; } break; } MoreShrines.Print("Preparing to spawn " + countToSpawn + " monsters."); CardPool item3 = list[0]; int num2 = 0; for (int k = 0; k < countToSpawn; k++) { int num3 = countToSpawn - k; if (list.Count > num + 1 && (float)((countToSpawn - num3) * cardPool2.cost + num3 * list[num + 1].cost) < monsterCredit) { item3 = list[num + 1]; num2++; } } for (int l = 0; l < countToSpawn - num2; l++) { finalSpawnOrder.Add(cardPool2); } for (int m = 0; m < num2; m++) { finalSpawnOrder.Add(item3); } } if (finalSpawnOrder.Count > 0) { self.currentMonsterCard = finalSpawnOrder[0].cards[Random.Range(0, finalSpawnOrder[0].cards.Count - 1)]; SpawnCard spawnCard = self.currentMonsterCard.spawnCard; DirectorPlacementRule val2 = new DirectorPlacementRule { placementMode = placementMode, spawnOnTarget = spawnTarget, preventOverhead = self.currentMonsterCard.preventOverhead }; DirectorCore.GetMonsterSpawnDistance(self.currentMonsterCard.spawnDistance, ref val2.minDistance, ref val2.maxDistance); val2.minDistance *= self.spawnDistanceMultiplier; DirectorSpawnRequest val3 = new DirectorSpawnRequest(spawnCard, val2, self.rng); val3.ignoreTeamMemberLimit = self.ignoreTeamSizeLimit; val3.teamIndexOverride = self.teamIndex; val3.onSpawnedServer = onCardSpawned; if (!Object.op_Implicit((Object)(object)DirectorCore.instance.TrySpawnObject(val3))) { ((Behaviour)self).enabled = false; return false; } self.spawnCountInCurrentWave++; return true; } ((Behaviour)self).enabled = false; return false; } return orig.Invoke(self, spawnTarget, placementMode); } internal void onCardSpawned(SpawnResult result) { //IL_0001: 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_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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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_00b4: Expected O, but got Unknown //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) if (!result.success) { return; } CharacterMaster component = result.spawnedInstance.GetComponent<CharacterMaster>(); GameObject bodyObject = component.GetBodyObject(); if (Object.op_Implicit((Object)(object)director.combatSquad)) { director.combatSquad.AddMember(component); } if (Object.op_Implicit((Object)(object)director.spawnEffectPrefab) && NetworkServer.active) { Vector3 origin = result.position; CharacterBody component2 = bodyObject.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component2)) { origin = component2.corePosition; } EffectManager.SpawnEffect(director.spawnEffectPrefab, new EffectData { origin = origin }, true); } ((UnityEvent<GameObject>)(object)director.onSpawnedServer)?.Invoke(result.spawnedInstance); } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } public class ImpMarkerKiller : MonoBehaviour { public void Update() { PositionIndicator component = ((Component)this).GetComponent<PositionIndicator>(); if (!Object.op_Implicit((Object)(object)component.targetTransform)) { MoreShrines.Print("Destroyed indicator!"); Object.DestroyImmediate((Object)(object)((Component)this).gameObject); } } } internal class InitBuffs { [CompilerGenerated] private static class <>O { public static StatHookEventHandler <0>__RecalculateHP; public static hook_BeginAdvanceStage <1>__Stage_BeginAdvanceStage; public static hook_UpdateIcon <2>__BuffIcon_UpdateIcon; } public static BuffDef maxHPDown; public static BuffDef maxHPDownStage; public static List<CharacterBody> players = new List<CharacterBody>(); public static void Add() { //IL_0045: 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_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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: 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_00ef: 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_0110: Expected O, but got Unknown maxHPDown = ScriptableObject.CreateInstance<BuffDef>(); ((Object)maxHPDown).name = "Max HP Down"; maxHPDown.isDebuff = true; maxHPDown.canStack = true; maxHPDown.iconSprite = EvaResources.HPDebuffIcon; maxHPDown.buffColor = Color.red; ContentAddition.AddBuffDef(maxHPDown); maxHPDownStage = ScriptableObject.CreateInstance<BuffDef>(); ((Object)maxHPDownStage).name = "Stage Max HP Down"; maxHPDownStage.isDebuff = true; maxHPDownStage.canStack = true; maxHPDownStage.iconSprite = EvaResources.HPDebuffIcon; maxHPDownStage.buffColor = Color.red; ContentAddition.AddBuffDef(maxHPDownStage); object obj = <>O.<0>__RecalculateHP; if (obj == null) { StatHookEventHandler val = RecalculateHP; <>O.<0>__RecalculateHP = val; obj = (object)val; } RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj; object obj2 = <>O.<1>__Stage_BeginAdvanceStage; if (obj2 == null) { hook_BeginAdvanceStage val2 = Stage_BeginAdvanceStage; <>O.<1>__Stage_BeginAdvanceStage = val2; obj2 = (object)val2; } Stage.BeginAdvanceStage += (hook_BeginAdvanceStage)obj2; object obj3 = <>O.<2>__BuffIcon_UpdateIcon; if (obj3 == null) { hook_UpdateIcon val3 = BuffIcon_UpdateIcon; <>O.<2>__BuffIcon_UpdateIcon = val3; obj3 = (object)val3; } BuffIcon.UpdateIcon += (hook_UpdateIcon)obj3; } private static void RecalculateHP(CharacterBody sender, StatHookEventArgs args) { if (Object.op_Implicit((Object)(object)sender)) { int buffCount = sender.GetBuffCount(maxHPDownStage); int buffCount2 = sender.GetBuffCount(maxHPDown); args.healthTotalMult *= 1f - (float)buffCount / 100f; args.healthTotalMult *= 1f - (float)buffCount2 / 100f; } } private static void BuffIcon_UpdateIcon(orig_UpdateIcon orig, BuffIcon self) { //IL_0076: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)self.buffDef)) { self.iconImage.sprite = null; } else if ((Object)(object)self.buffDef == (Object)(object)maxHPDown || (Object)(object)self.buffDef == (Object)(object)maxHPDownStage) { self.iconImage.sprite = self.buffDef.iconSprite; ((Graphic)self.iconImage).color = self.buffDef.buffColor; if (self.buffDef.canStack) { BuffIcon.sharedStringBuilder.Clear(); StringBuilderExtensions.AppendInt(BuffIcon.sharedStringBuilder, self.buffCount, 1u, uint.MaxValue); BuffIcon.sharedStringBuilder.Append("%"); ((Behaviour)self.stackCount).enabled = true; ((TMP_Text)self.stackCount).SetText(BuffIcon.sharedStringBuilder); } else { ((Behaviour)self.stackCount).enabled = false; } } else { orig.Invoke(self); } } private static void Stage_BeginAdvanceStage(orig_BeginAdvanceStage orig, Stage self, SceneDef destinationStage) { foreach (CharacterBody player in players) { for (int i = 0; i < player.GetBuffCount(maxHPDownStage); i++) { player.RemoveBuff(maxHPDownStage); } } orig.Invoke(self, destinationStage); } } [BepInPlugin("com.evaisa.moreshrines", "More Shrines", "1.1.9")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class MoreShrines : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Action<List<CostTypeDef>> <>9__33_0; public static Func<Instruction, bool> <>9__33_2; public static Func<int, int> <>9__33_3; public static Func<Instruction, bool> <>9__33_5; public static Func<Instruction, bool> <>9__33_6; public static Func<Instruction, bool> <>9__33_7; public static Func<Instruction, bool> <>9__33_8; public static Func<Instruction, bool> <>9__33_9; public static Func<Instruction, bool> <>9__33_10; public static Func<MonoBehaviour, bool> <>9__33_11; public static Manipulator <>9__33_4; public static IsAffordableDelegate <>9__35_0; public static PayCostDelegate <>9__35_1; public static IsAffordableDelegate <>9__36_0; public static PayCostDelegate <>9__36_1; public static IsAffordableDelegate <>9__37_0; public static PayCostDelegate <>9__37_1; public static IsAffordableDelegate <>9__38_0; public static PayCostDelegate <>9__38_1; public static IsAffordableDelegate <>9__39_0; public static PayCostDelegate <>9__39_1; public static IsAffordableDelegate <>9__40_0; public static PayCostDelegate <>9__40_1; public static IsAffordableDelegate <>9__41_0; public static PayCostDelegate <>9__41_1; internal void <.ctor>b__33_0(List<CostTypeDef> list) { if (costTypeDefShrineDisorder != null) { list.Add(costTypeDefShrineDisorder); } if (costTypeDefShrineFallen != null) { list.Add(costTypeDefShrineFallen); } if (costTypeDefShrineHeresy != null) { list.Add(costTypeDefShrineHeresy); } if (costTypeDefWispGreen != null) { list.Add(costTypeDefWispGreen); } if (costTypeDefWispRed != null) { list.Add(costTypeDefWispRed); } if (costTypeDefWispWhite != null) { list.Add(costTypeDefWispWhite); } } internal bool <.ctor>b__33_2(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdcI4(x, ref num); } internal int <.ctor>b__33_3(int c) { return c + 10; } internal void <.ctor>b__33_4(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); ILLabel val2 = val.DefineLabel(); val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 3), (Instruction x) => ILPatternMatchingExt.MatchNop(x), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 3) }); int index = val.Index + 2; val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchNop(x), (Instruction x) => ILPatternMatchingExt.MatchNop(x), (Instruction x) => ILPatternMatchingExt.MatchNop(x) }); val.MarkLabel(val2); val.Index = index; val.Emit(OpCodes.Ldloc, 3); val.EmitDelegate<Func<MonoBehaviour, bool>>((Func<MonoBehaviour, bool>)((MonoBehaviour x) => (Object)(object)x == (Object)null)); val.Emit(OpCodes.Brtrue, (object)val2); } internal bool <.ctor>b__33_5(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, 3); } internal bool <.ctor>b__33_6(Instruction x) { return ILPatternMatchingExt.MatchNop(x); } internal bool <.ctor>b__33_7(Instruction x) { return ILPatternMatchingExt.MatchLdloc(x, 3); } internal bool <.ctor>b__33_8(Instruction x) { return ILPatternMatchingExt.MatchNop(x); } internal bool <.ctor>b__33_9(Instruction x) { return ILPatternMatchingExt.MatchNop(x); } internal bool <.ctor>b__33_10(Instruction x) { return ILPatternMatchingExt.MatchNop(x); } internal bool <.ctor>b__33_11(MonoBehaviour x) { return (Object)(object)x == (Object)null; } internal bool <CreateCostDefWispWhite>b__35_0(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { Inventory inventory = component.inventory; if (Object.op_Implicit((Object)(object)inventory)) { return inventory.GetTotalItemCountOfTier((ItemTier)0) > 0; } } return false; } internal void <CreateCostDefWispWhite>b__35_1(PayCostContext context, PayCostResults results) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 //IL_0059: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return; } Inventory inventory = component.inventory; List<ItemDef> list = new List<ItemDef>(); foreach (ItemIndex item in inventory.itemAcquisitionOrder) { if ((int)ItemCatalog.GetItemDef(item).tier == 0) { list.Add(ItemCatalog.GetItemDef(item)); } } ItemDef val = list[Random.Range(0, list.Count)]; context.purchasedObject.GetComponent<ShrineWispBehaviour>().wispItem = val; inventory.RemoveItem(val, 1); } internal bool <CreateCostDefWispGreen>b__36_0(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { Inventory inventory = component.inventory; if (Object.op_Implicit((Object)(object)inventory)) { return inventory.GetTotalItemCountOfTier((ItemTier)1) > 0; } } return false; } internal void <CreateCostDefWispGreen>b__36_1(PayCostContext context, PayCostResults results) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 //IL_0059: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return; } Inventory inventory = component.inventory; List<ItemDef> list = new List<ItemDef>(); foreach (ItemIndex item in inventory.itemAcquisitionOrder) { if ((int)ItemCatalog.GetItemDef(item).tier == 1) { list.Add(ItemCatalog.GetItemDef(item)); } } ItemDef val = list[Random.Range(0, list.Count)]; context.purchasedObject.GetComponent<ShrineWispBehaviour>().wispItem = val; inventory.RemoveItem(val, 1); } internal bool <CreateCostDefWispRed>b__37_0(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { Inventory inventory = component.inventory; if (Object.op_Implicit((Object)(object)inventory)) { return inventory.GetTotalItemCountOfTier((ItemTier)2) > 0; } } return false; } internal void <CreateCostDefWispRed>b__37_1(PayCostContext context, PayCostResults results) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 //IL_0059: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return; } Inventory inventory = component.inventory; List<ItemDef> list = new List<ItemDef>(); foreach (ItemIndex item in inventory.itemAcquisitionOrder) { if ((int)ItemCatalog.GetItemDef(item).tier == 2) { list.Add(ItemCatalog.GetItemDef(item)); } } ItemDef val = list[Random.Range(0, list.Count)]; context.purchasedObject.GetComponent<ShrineWispBehaviour>().wispItem = val; inventory.RemoveItem(val, 1); } internal bool <CreateCostDefShrineFallen>b__38_0(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { int buffCount = component.GetBuffCount(InitBuffs.maxHPDownStage); int num = (int)Mathf.Ceil((100f - (float)component.GetBuffCount(InitBuffs.maxHPDownStage)) / 100f * (float)context.cost); return buffCount + num < 100 && ShrineFallenBehaviour.IsAnyoneDead(); } return false; } internal void <CreateCostDefShrineFallen>b__38_1(PayCostContext context, PayCostResults results) { CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { int buffCount = component.GetBuffCount(InitBuffs.maxHPDownStage); int num = (int)Mathf.Ceil((100f - (float)component.GetBuffCount(InitBuffs.maxHPDownStage)) / 100f * (float)context.cost); for (int i = 0; i < num; i++) { component.AddBuff(InitBuffs.maxHPDownStage); } } } internal bool <CreateCostDefShrineFallenAlt>b__39_0(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: 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) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { CharacterMaster master = component.master; if (Object.op_Implicit((Object)(object)master)) { return (ulong)master.money >= (ulong)context.cost && ShrineFallenBehaviour.IsAnyoneDead(); } } return false; } internal void <CreateCostDefShrineFallenAlt>b__39_1(PayCostContext context, PayCostResults results) { if (Object.op_Implicit((Object)(object)context.activatorMaster)) { CharacterMaster activatorMaster = context.activatorMaster; activatorMaster.money -= (uint)context.cost; } } internal bool <CreateCostDefShrineDisorder>b__40_0(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //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_0062: 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_011e: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { bool flag = false; Inventory inventory = component.inventory; { IEnumerator enumerator = Enum.GetValues(typeof(ItemTier)).GetEnumerator(); try { while (enumerator.MoveNext()) { <>c__DisplayClass40_0 CS$<>8__locals0 = new <>c__DisplayClass40_0 { tier = (ItemTier)enumerator.Current }; int num = int.MaxValue; IEnumerable<ItemDef> enumerable = ((IEnumerable<ItemDef>)(object)ItemCatalog.allItemDefs).Where((ItemDef x) => x.tier == CS$<>8__locals0.tier); foreach (ItemDef item in enumerable) { int itemCount = inventory.GetItemCount(item); num = Math.Min(num, itemCount); if (itemCount - num > 1) { flag = true; } } } } finally { IDisposable disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } } NetworkUser val = Util.LookUpBodyNetworkUser(((Component)context.activator).gameObject); return Object.op_Implicit((Object)(object)val) && (ulong)val.lunarCoins >= (ulong)context.cost && flag; } return false; } internal void <CreateCostDefShrineDisorder>b__40_1(PayCostContext context, PayCostResults results) { NetworkUser val = Util.LookUpBodyNetworkUser(((Component)context.activator).gameObject); if (Object.op_Implicit((Object)(object)val)) { val.DeductLunarCoins((uint)context.cost); } } internal bool <CreateCostDefShrineHeresy>b__41_0(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { bool flag = false; Inventory inventory = component.inventory; if (component.inventory.GetItemCount(Items.LunarPrimaryReplacement.itemIndex) <= 0 || component.inventory.GetItemCount(Items.LunarSecondaryReplacement.itemIndex) <= 0 || component.inventory.GetItemCount(Items.LunarUtilityReplacement.itemIndex) <= 0 || component.inventory.GetItemCount(Items.LunarSpecialReplacement.itemIndex) <= 0) { flag = true; } NetworkUser val = Util.LookUpBodyNetworkUser(((Component)context.activator).gameObject); return Object.op_Implicit((Object)(object)val) && (ulong)val.lunarCoins >= (ulong)context.cost && flag; } return false; } internal void <CreateCostDefShrineHeresy>b__41_1(PayCostContext context, PayCostResults results) { NetworkUser val = Util.LookUpBodyNetworkUser(((Component)context.activator).gameObject); if (Object.op_Implicit((Object)(object)val)) { val.DeductLunarCoins((uint)context.cost); } } } [CompilerGenerated] private sealed class <>c__DisplayClass40_0 { public ItemTier tier; internal bool <CreateCostDefShrineDisorder>b__2(ItemDef x) { //IL_0001: 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) return x.tier == tier; } } private const string ModVer = "1.1.9"; private const string ModName = "More Shrines"; private const string ModGuid = "com.evaisa.moreshrines"; public static MoreShrines instance; public static Xoroshiro128Plus EvaRng; public static CharacterSpawnCard impSpawnCard; public static ConfigEntry<bool> impShrineEnabled; public static ConfigEntry<int> impShrineWeight; public static ConfigEntry<bool> impCountScale; public static ConfigEntry<int> impShrineTime; public static ConfigEntry<bool> itemRarityBasedOnSpeed; public static ConfigEntry<bool> dropItemForEveryPlayer; public static ConfigEntry<int> extraItemCount; public static ConfigEntry<bool> fallenShrineEnabled; public static ConfigEntry<int> fallenShrineWeight; public static ConfigEntry<int> fallenShrineHPPenalty; public static ConfigEntry<bool> fallenShrineMoney; public static ConfigEntry<int> fallenShrineMoneyCost; public static ConfigEntry<bool> disorderShrineEnabled; public static ConfigEntry<int> disorderShrineWeight; public static ConfigEntry<bool> heresyShrineEnabled; public static ConfigEntry<int> heresyShrineWeight; public static ConfigEntry<bool> wispShrineEnabled; public static ConfigEntry<bool> wispShrineScaleDifficulty; public static ConfigEntry<int> wispShrineWeight; public static CostTypeDef costTypeDefShrineFallen; public static CostTypeDef costTypeDefShrineDisorder; public static CostTypeDef costTypeDefShrineHeresy; public static CostTypeDef costTypeDefWispWhite; public static CostTypeDef costTypeDefWispGreen; public static CostTypeDef costTypeDefWispRed; public static GameObject debugPrefab; public static bool debugMode; public MoreShrines() { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Expected O, but got Unknown //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Expected O, but got Unknown //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_020e: Expected O, but got Unknown //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Expected O, but got Unknown instance = this; DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); int num = (int)(DateTime.UtcNow - dateTime).TotalSeconds; EvaResources.Init(); EvaRng = new Xoroshiro128Plus((ulong)num); RegisterConfig(); RegisterLanguageTokens(); InitBuffs.Add(); if (fallenShrineMoney.Value) { CreateCostDefShrineFallenAlt(); } else { CreateCostDefShrineFallen(); } CreateCostDefShrineDisorder(); CreateCostDefShrineHeresy(); CreateCostDefWispWhite(); CreateCostDefWispGreen(); CreateCostDefWispRed(); GenerateTinyImp(); if (fallenShrineEnabled.Value) { GenerateFallenShrine(); } if (disorderShrineEnabled.Value) { GenerateDisorderShrine(); } if (heresyShrineEnabled.Value) { GenerateHeresyShrine(); } if (impShrineEnabled.Value) { GenerateImpShrine(); } if (wispShrineEnabled.Value) { GenerateWispShrine(); } SwarmsArtifactManager.OnSpawnCardOnSpawnedServerGlobal += new hook_OnSpawnCardOnSpawnedServerGlobal(SwarmsArtifactManager_OnSpawnCardOnSpawnedServerGlobal); CostTypeCatalog.modHelper.getAdditionalEntries += delegate(List<CostTypeDef> list) { if (costTypeDefShrineDisorder != null) { list.Add(costTypeDefShrineDisorder); } if (costTypeDefShrineFallen != null) { list.Add(costTypeDefShrineFallen); } if (costTypeDefShrineHeresy != null) { list.Add(costTypeDefShrineHeresy); } if (costTypeDefWispGreen != null) { list.Add(costTypeDefWispGreen); } if (costTypeDefWispRed != null) { list.Add(costTypeDefWispRed); } if (costTypeDefWispWhite != null) { list.Add(costTypeDefWispWhite); } }; CostTypeCatalog.Init += (Manipulator)delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val6 = new ILCursor(il); int num2 = default(int); if (val6.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, ref num2) })) { int index2 = val6.Index; val6.Index = index2 + 1; val6.EmitDelegate<Func<int, int>>((Func<int, int>)((int c) => c + 10)); } else { ((BaseUnityPlugin)this).Logger.LogError((object)"Failed to apply CostTypeCatalog IL hook"); } }; if (!Chainloader.PluginInfos.ContainsKey("com.themysticsword.mysticsitems")) { return; } PluginInfo val = Chainloader.PluginInfos["com.themysticsword.mysticsitems"]; Assembly assembly = ((object)val.Instance).GetType().Assembly; MethodInfo methodInfo = AccessTools.Method(assembly.GetType("MysticsItems.Items.ExtraShrineUse"), "UpdateShrine", new Type[2] { assembly.GetType("MysticsItems.Items.ExtraShrineUse/MysticsItemsExtraShrineUseBehaviour"), typeof(int) }, (Type[])null); object obj = <>c.<>9__33_4; if (obj == null) { Manipulator val2 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) ILCursor val4 = new ILCursor(il); ILLabel val5 = val4.DefineLabel(); val4.TryGotoNext((MoveType)0, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 3), (Instruction x) => ILPatternMatchingExt.MatchNop(x), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 3) }); int index = val4.Index + 2; val4.TryGotoNext((MoveType)2, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchNop(x), (Instruction x) => ILPatternMatchingExt.MatchNop(x), (Instruction x) => ILPatternMatchingExt.MatchNop(x) }); val4.MarkLabel(val5); val4.Index = index; val4.Emit(OpCodes.Ldloc, 3); val4.EmitDelegate<Func<MonoBehaviour, bool>>((Func<MonoBehaviour, bool>)((MonoBehaviour x) => (Object)(object)x == (Object)null)); val4.Emit(OpCodes.Brtrue, (object)val5); }; <>c.<>9__33_4 = val2; obj = (object)val2; } ILHook val3 = new ILHook((MethodBase)methodInfo, (Manipulator)obj); } private void Update() { } public void CreateCostDefWispWhite() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_0074: 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_0068: Expected O, but got Unknown costTypeDefWispWhite = new CostTypeDef(); costTypeDefWispWhite.costStringFormatToken = "COST_ITEM_FORMAT"; CostTypeDef obj = costTypeDefWispWhite; object obj2 = <>c.<>9__35_0; if (obj2 == null) { IsAffordableDelegate val = delegate(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) CharacterBody component2 = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component2)) { Inventory inventory2 = component2.inventory; if (Object.op_Implicit((Object)(object)inventory2)) { return inventory2.GetTotalItemCountOfTier((ItemTier)0) > 0; } } return false; }; <>c.<>9__35_0 = val; obj2 = (object)val; } obj.isAffordable = (IsAffordableDelegate)obj2; CostTypeDef obj3 = costTypeDefWispWhite; object obj4 = <>c.<>9__35_1; if (obj4 == null) { PayCostDelegate val2 = delegate(PayCostContext context, PayCostResults results) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 //IL_0059: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { Inventory inventory = component.inventory; List<ItemDef> list = new List<ItemDef>(); foreach (ItemIndex item in inventory.itemAcquisitionOrder) { if ((int)ItemCatalog.GetItemDef(item).tier == 0) { list.Add(ItemCatalog.GetItemDef(item)); } } ItemDef val3 = list[Random.Range(0, list.Count)]; context.purchasedObject.GetComponent<ShrineWispBehaviour>().wispItem = val3; inventory.RemoveItem(val3, 1); } }; <>c.<>9__35_1 = val2; obj4 = (object)val2; } obj3.payCost = (PayCostDelegate)obj4; costTypeDefWispWhite.colorIndex = (ColorIndex)1; } public void CreateCostDefWispGreen() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown //IL_007f: 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_0073: Expected O, but got Unknown costTypeDefWispGreen = new CostTypeDef(); costTypeDefWispGreen.costStringFormatToken = "COST_ITEM_FORMAT"; costTypeDefWispGreen.saturateWorldStyledCostString = true; CostTypeDef obj = costTypeDefWispGreen; object obj2 = <>c.<>9__36_0; if (obj2 == null) { IsAffordableDelegate val = delegate(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) CharacterBody component2 = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component2)) { Inventory inventory2 = component2.inventory; if (Object.op_Implicit((Object)(object)inventory2)) { return inventory2.GetTotalItemCountOfTier((ItemTier)1) > 0; } } return false; }; <>c.<>9__36_0 = val; obj2 = (object)val; } obj.isAffordable = (IsAffordableDelegate)obj2; CostTypeDef obj3 = costTypeDefWispGreen; object obj4 = <>c.<>9__36_1; if (obj4 == null) { PayCostDelegate val2 = delegate(PayCostContext context, PayCostResults results) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 //IL_0059: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { Inventory inventory = component.inventory; List<ItemDef> list = new List<ItemDef>(); foreach (ItemIndex item in inventory.itemAcquisitionOrder) { if ((int)ItemCatalog.GetItemDef(item).tier == 1) { list.Add(ItemCatalog.GetItemDef(item)); } } ItemDef val3 = list[Random.Range(0, list.Count)]; context.purchasedObject.GetComponent<ShrineWispBehaviour>().wispItem = val3; inventory.RemoveItem(val3, 1); } }; <>c.<>9__36_1 = val2; obj4 = (object)val2; } obj3.payCost = (PayCostDelegate)obj4; costTypeDefWispGreen.colorIndex = (ColorIndex)2; } public void CreateCostDefWispRed() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown //IL_007f: 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_0073: Expected O, but got Unknown costTypeDefWispRed = new CostTypeDef(); costTypeDefWispRed.costStringFormatToken = "COST_ITEM_FORMAT"; costTypeDefWispRed.saturateWorldStyledCostString = true; CostTypeDef obj = costTypeDefWispRed; object obj2 = <>c.<>9__37_0; if (obj2 == null) { IsAffordableDelegate val = delegate(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) CharacterBody component2 = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component2)) { Inventory inventory2 = component2.inventory; if (Object.op_Implicit((Object)(object)inventory2)) { return inventory2.GetTotalItemCountOfTier((ItemTier)2) > 0; } } return false; }; <>c.<>9__37_0 = val; obj2 = (object)val; } obj.isAffordable = (IsAffordableDelegate)obj2; CostTypeDef obj3 = costTypeDefWispRed; object obj4 = <>c.<>9__37_1; if (obj4 == null) { PayCostDelegate val2 = delegate(PayCostContext context, PayCostResults results) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 //IL_0059: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { Inventory inventory = component.inventory; List<ItemDef> list = new List<ItemDef>(); foreach (ItemIndex item in inventory.itemAcquisitionOrder) { if ((int)ItemCatalog.GetItemDef(item).tier == 2) { list.Add(ItemCatalog.GetItemDef(item)); } } ItemDef val3 = list[Random.Range(0, list.Count)]; context.purchasedObject.GetComponent<ShrineWispBehaviour>().wispItem = val3; inventory.RemoveItem(val3, 1); } }; <>c.<>9__37_1 = val2; obj4 = (object)val2; } obj3.payCost = (PayCostDelegate)obj4; costTypeDefWispRed.colorIndex = (ColorIndex)3; } public void CreateCostDefShrineFallen() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_008b: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown costTypeDefShrineFallen = new CostTypeDef(); costTypeDefShrineFallen.costStringFormatToken = "COST_PERCENTMAXHEALTH_ROUND_FORMAT"; costTypeDefShrineFallen.saturateWorldStyledCostString = false; costTypeDefShrineFallen.darkenWorldStyledCostString = true; CostTypeDef obj = costTypeDefShrineFallen; object obj2 = <>c.<>9__38_0; if (obj2 == null) { IsAffordableDelegate val = delegate(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) CharacterBody component2 = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component2)) { int buffCount2 = component2.GetBuffCount(InitBuffs.maxHPDownStage); int num2 = (int)Mathf.Ceil((100f - (float)component2.GetBuffCount(InitBuffs.maxHPDownStage)) / 100f * (float)context.cost); return buffCount2 + num2 < 100 && ShrineFallenBehaviour.IsAnyoneDead(); } return false; }; <>c.<>9__38_0 = val; obj2 = (object)val; } obj.isAffordable = (IsAffordableDelegate)obj2; CostTypeDef obj3 = costTypeDefShrineFallen; object obj4 = <>c.<>9__38_1; if (obj4 == null) { PayCostDelegate val2 = delegate(PayCostContext context, PayCostResults results) { CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { int buffCount = component.GetBuffCount(InitBuffs.maxHPDownStage); int num = (int)Mathf.Ceil((100f - (float)component.GetBuffCount(InitBuffs.maxHPDownStage)) / 100f * (float)context.cost); for (int i = 0; i < num; i++) { component.AddBuff(InitBuffs.maxHPDownStage); } } }; <>c.<>9__38_1 = val2; obj4 = (object)val2; } obj3.payCost = (PayCostDelegate)obj4; costTypeDefShrineFallen.colorIndex = (ColorIndex)9; } public void CreateCostDefShrineFallenAlt() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_008a: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown costTypeDefShrineFallen = new CostTypeDef(); costTypeDefShrineFallen.costStringFormatToken = "COST_MONEY_FORMAT"; costTypeDefShrineFallen.saturateWorldStyledCostString = true; costTypeDefShrineFallen.darkenWorldStyledCostString = false; CostTypeDef obj = costTypeDefShrineFallen; object obj2 = <>c.<>9__39_0; if (obj2 == null) { IsAffordableDelegate val = delegate(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: 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) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { CharacterMaster master = component.master; if (Object.op_Implicit((Object)(object)master)) { return (ulong)master.money >= (ulong)context.cost && ShrineFallenBehaviour.IsAnyoneDead(); } } return false; }; <>c.<>9__39_0 = val; obj2 = (object)val; } obj.isAffordable = (IsAffordableDelegate)obj2; CostTypeDef obj3 = costTypeDefShrineFallen; object obj4 = <>c.<>9__39_1; if (obj4 == null) { PayCostDelegate val2 = delegate(PayCostContext context, PayCostResults results) { if (Object.op_Implicit((Object)(object)context.activatorMaster)) { CharacterMaster activatorMaster = context.activatorMaster; activatorMaster.money -= (uint)context.cost; } }; <>c.<>9__39_1 = val2; obj4 = (object)val2; } obj3.payCost = (PayCostDelegate)obj4; costTypeDefShrineFallen.colorIndex = (ColorIndex)8; } public void CreateCostDefShrineDisorder() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_008b: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown costTypeDefShrineDisorder = new CostTypeDef(); costTypeDefShrineDisorder.costStringFormatToken = "COST_LUNARCOIN_FORMAT"; costTypeDefShrineDisorder.saturateWorldStyledCostString = false; costTypeDefShrineDisorder.darkenWorldStyledCostString = true; CostTypeDef obj = costTypeDefShrineDisorder; object obj2 = <>c.<>9__40_0; if (obj2 == null) { IsAffordableDelegate val = delegate(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //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_0062: 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_011e: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { bool flag = false; Inventory inventory = component.inventory; foreach (ItemTier tier in Enum.GetValues(typeof(ItemTier))) { int num = int.MaxValue; IEnumerable<ItemDef> enumerable = ((IEnumerable<ItemDef>)(object)ItemCatalog.allItemDefs).Where((ItemDef x) => x.tier == tier); foreach (ItemDef item in enumerable) { int itemCount = inventory.GetItemCount(item); num = Math.Min(num, itemCount); if (itemCount - num > 1) { flag = true; } } } NetworkUser val4 = Util.LookUpBodyNetworkUser(((Component)context.activator).gameObject); return Object.op_Implicit((Object)(object)val4) && (ulong)val4.lunarCoins >= (ulong)context.cost && flag; } return false; }; <>c.<>9__40_0 = val; obj2 = (object)val; } obj.isAffordable = (IsAffordableDelegate)obj2; CostTypeDef obj3 = costTypeDefShrineDisorder; object obj4 = <>c.<>9__40_1; if (obj4 == null) { PayCostDelegate val2 = delegate(PayCostContext context, PayCostResults results) { NetworkUser val3 = Util.LookUpBodyNetworkUser(((Component)context.activator).gameObject); if (Object.op_Implicit((Object)(object)val3)) { val3.DeductLunarCoins((uint)context.cost); } }; <>c.<>9__40_1 = val2; obj4 = (object)val2; } obj3.payCost = (PayCostDelegate)obj4; costTypeDefShrineDisorder.colorIndex = (ColorIndex)12; } public void CreateCostDefShrineHeresy() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_008b: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown costTypeDefShrineHeresy = new CostTypeDef(); costTypeDefShrineHeresy.costStringFormatToken = "COST_LUNARCOIN_FORMAT"; costTypeDefShrineHeresy.saturateWorldStyledCostString = false; costTypeDefShrineHeresy.darkenWorldStyledCostString = true; CostTypeDef obj = costTypeDefShrineHeresy; object obj2 = <>c.<>9__41_0; if (obj2 == null) { IsAffordableDelegate val = delegate(CostTypeDef costTypeDef, IsAffordableContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { bool flag = false; Inventory inventory = component.inventory; if (component.inventory.GetItemCount(Items.LunarPrimaryReplacement.itemIndex) <= 0 || component.inventory.GetItemCount(Items.LunarSecondaryReplacement.itemIndex) <= 0 || component.inventory.GetItemCount(Items.LunarUtilityReplacement.itemIndex) <= 0 || component.inventory.GetItemCount(Items.LunarSpecialReplacement.itemIndex) <= 0) { flag = true; } NetworkUser val4 = Util.LookUpBodyNetworkUser(((Component)context.activator).gameObject); return Object.op_Implicit((Object)(object)val4) && (ulong)val4.lunarCoins >= (ulong)context.cost && flag; } return false; }; <>c.<>9__41_0 = val; obj2 = (object)val; } obj.isAffordable = (IsAffordableDelegate)obj2; CostTypeDef obj3 = costTypeDefShrineHeresy; object obj4 = <>c.<>9__41_1; if (obj4 == null) { PayCostDelegate val2 = delegate(PayCostContext context, PayCostResults results) { NetworkUser val3 = Util.LookUpBodyNetworkUser(((Component)context.activator).gameObject); if (Object.op_Implicit((Object)(object)val3)) { val3.DeductLunarCoins((uint)context.cost); } }; <>c.<>9__41_1 = val2; obj4 = (object)val2; } obj3.payCost = (PayCostDelegate)obj4; costTypeDefShrineHeresy.colorIndex = (ColorIndex)12; } public void RegisterLanguageTokens() { LanguageAPI.Add("SHRINE_IMP_USE_MESSAGE", "<style=cShrine>{0} inspected the vase and tiny imps appeared!</style>"); LanguageAPI.Add("SHRINE_IMP_USE_MESSAGE_2P", "<style=cShrine>You inspected the vase and tiny imps appeared!</style>"); LanguageAPI.Add("SHRINE_IMP_COMPLETED", "<style=cIsHealing>You killed all the imps and found some items!</style>"); LanguageAPI.Add("SHRINE_IMP_COMPLETED_2P", "<style=cIsHealing>{0} killed all the imps and found some items!</style>"); LanguageAPI.Add("SHRINE_IMP_FAILED", "<style=cIsHealth>You failed to kill all the imps in time!</style>"); LanguageAPI.Add("SHRINE_IMP_FAILED_2P", "<style=cIsHealth>{0} failed to kill all the imps in time!</style>"); LanguageAPI.Add("SHRINE_IMP_NAME", "Shrine of Imps"); LanguageAPI.Add("SHRINE_IMP_CONTEXT", "Inspect the vase."); LanguageAPI.Add("SHRINE_FALLEN_NAME", "Shrine of the Fallen"); LanguageAPI.Add("SHRINE_FALLEN_CONTEXT", "Offer to Shrine of the Fallen"); LanguageAPI.Add("SHRINE_FALLEN_USED", "<style=cIsHealing>{0} offered to the Shrine of the Fallen and revived {1}!</style>"); LanguageAPI.Add("SHRINE_FALLEN_USED_2P", "<style=cIsHealing>You offer to the Shrine of the Fallen and revived {1}!</style>"); LanguageAPI.Add("OBJECTIVE_KILL_TINY_IMPS", "Kill the <color={0}>tiny imps</color> ({1}/{2}) in {3} seconds!"); LanguageAPI.Add("COST_PERCENTMAXHEALTH_FORMAT", "{0}% MAX HP"); LanguageAPI.Add("COST_PERCENTMAXHEALTH_ROUND_FORMAT", "{0}% STAGE MAX HP"); LanguageAPI.Add("SHRINE_DISORDER_NAME", "Shrine of Disorder"); LanguageAPI.Add("SHRINE_DISORDER_CONTEXT", "Offer to Shrine of Disorder"); LanguageAPI.Add("SHRINE_DISORDER_USE_MESSAGE_2P", "<style=cShrine>Your order has been disturbed.</style>"); LanguageAPI.Add("SHRINE_DISORDER_USE_MESSAGE", "<style=cShrine>{0}'s order has been disturbed.</style>"); LanguageAPI.Add("SHRINE_HERESY_NAME", "Shrine of Heresy"); LanguageAPI.Add("SHRINE_HERESY_CONTEXT", "Offer to Shrine of Heresy"); LanguageAPI.Add("SHRINE_HERESY_USE_MESSAGE_2P", "<style=cShrine>You have taken a step towards heresy.</style>"); LanguageAPI.Add("SHRINE_HERESY_USE_MESSAGE", "<style=cShrine>{0} has taken a step towards heresy.</style>"); LanguageAPI.Add("SHRINE_WISP_NAME", "Shrine of Wisps"); LanguageAPI.Add("SHRINE_WISP_CONTEXT", "Offer to the tree"); LanguageAPI.Add("SHRINE_WISP_ACCEPT_MESSAGE_2P", "<style=cShrine>The tree accepted your <color=#{1}>{2}</color> and ghostly Wisps appeared.</style>"); LanguageAPI.Add("SHRINE_WISP_ACCEPT_MESSAGE", "<style=cShrine>The tree accepted {0}'s <color=#{1}>{2}</color> and ghostly Wisps appeared.</style>"); LanguageAPI.Add("SHRINE_WISP_DENY_MESSAGE_2P", "<style=cIsDamage>The tree rejected your <color=#{1}>{2}</color> and angry Wisps appeared..</style>"); LanguageAPI.Add("SHRINE_WISP_DENY_MESSAGE", "<style=cIsDamage>The tree rejected {0}'s <color=#{1}>{2}</color> and angry Wisps appeared..</style>"); LanguageAPI.Add("SHRINE_SHIELDING_NAME", "Shrine of Hardening"); LanguageAPI.Add("SHRINE_SHIELDING_CONTEXT", "Touch the shield."); LanguageAPI.Add("SHRINE_SHIELDING_USE_MESSAGE_2P", "<style=cShrine>You feel protected.</style>"); LanguageAPI.Add("SHRINE_SHIELDING_USE_MESSAGE", "<style=cShrine>{0} feels protected.</style>"); } public void RegisterConfig() { impShrineEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Shrine of Imps", "Enable", true, "Enable the Shrine of Imps."); impShrineWeight = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of Imps", "Weight", 2, "The spawn weight of this shrine, lower is more rare."); impCountScale = ((BaseUnityPlugin)this).Config.Bind<bool>("Shrine of Imps", "Count Scale", true, "Scale the maximum amount of imps with stage difficulty."); impShrineTime = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of Imps", "Time", 30, "The amount of time you get to finish a Shrine of Imps."); itemRarityBasedOnSpeed = ((BaseUnityPlugin)this).Config.Bind<bool>("Shrine of Imps", "Item Rarity Based On Speed", true, "Increase item rarity based on how fast you killed all the imps."); dropItemForEveryPlayer = ((BaseUnityPlugin)this).Config.Bind<bool>("Shrine of Imps", "Drop for every player", true, "Drop a item for every player in the session."); extraItemCount = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of Imps", "Extra Item Count", 0, "Drop X extra items along with the base amount when a Shrine of Imps is beaten."); fallenShrineEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Shrine of the Fallen", "Enable", false, "Enable the Shrine of the Fallen."); fallenShrineWeight = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of the Fallen", "Weight", 2, "The spawn weight of this shrine, lower is more rare."); fallenShrineHPPenalty = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of the Fallen", "HP Penalty", 40, "The max HP penalty the user takes for the rest of the stage when this shrine is used."); fallenShrineMoney = ((BaseUnityPlugin)this).Config.Bind<bool>("Shrine of the Fallen", "Use Money", false, "Shrine of the Fallen costs money rather than a HP penalty."); fallenShrineMoneyCost = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of the Fallen", "Money Base Cost", 300, "The base cost for the shrine. (only applicable if 'Use Money' is enabled)"); disorderShrineEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Shrine of Disorder", "Enable", true, "Enable the Shrine of Disorder."); disorderShrineWeight = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of Disorder", "Weight", 1, "The spawn weight of this shrine, lower is more rare."); heresyShrineEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Shrine of Heresy", "Enable", true, "Enable the Shrine of Heresy."); heresyShrineWeight = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of Heresy", "Weight", 1, "The spawn weight of this shrine, lower is more rare."); wispShrineEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Shrine of Wisps", "Enable", true, "Enable the Shrine of Wisps."); wispShrineScaleDifficulty = ((BaseUnityPlugin)this).Config.Bind<bool>("Shrine of Wisps", "Scale Count With Difficulty", true, "Scale the number of wisps spawned with difficulty."); wispShrineWeight = ((BaseUnityPlugin)this).Config.Bind<int>("Shrine of Wisps", "Weight", 2, "The spawn weight of this shrine, lower is more rare."); } public void GenerateTinyImp() { //IL_001c: 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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: 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) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Expected O, but got Unknown CharacterSpawnCard val = ScriptableObject.CreateInstance<CharacterSpawnCard>(); CharacterSpawnCard val2 = Resources.Load<CharacterSpawnCard>("SpawnCards/CharacterSpawnCards/cscImp"); ((SpawnCard)val).directorCreditCost = 10; ((SpawnCard)val).forbiddenFlags = (NodeFlags)0; ((SpawnCard)val).hullSize = (HullClassification)0; ((SpawnCard)val).nodeGraphType = (GraphType)0; ((SpawnCard)val).occupyPosition = false; ((SpawnCard)val).requiredFlags = (NodeFlags)0; ((SpawnCard)val).sendOverNetwork = true; val.forbiddenAsBoss = true; GameObject val3 = PrefabAPI.InstantiateClone(((SpawnCard)val2).prefab, "TinyImpMaster"); CharacterMaster component = val3.GetComponent<CharacterMaster>(); GameObject val4 = (component.bodyPrefab = PrefabAPI.InstantiateClone(component.bodyPrefab, "TinyImpBody")); CharacterBody component2 = val4.GetComponent<CharacterBody>(); component2.baseNameToken = "IMP_TINY_BODY_NAME"; Transform modelTransform = val4.GetComponent<ModelLocator>().modelTransform; modelTransform.localScale /= 2f; AISkillDriver[] components = val3.GetComponents<AISkillDriver>(); component2.baseMaxHealth /= 2f; component2.levelMaxHealth /= 2f; component2.baseJumpPower /= 5f; component2.levelJumpPower = 0f; component2.baseMoveSpeed *= 1.5f; AISkillDriver[] array = components; foreach (AISkillDriver val5 in array) { Object.Destroy((Object)(object)val5); } AISkillDriver val6 = val3.AddComponent<AISkillDriver>(); val6.minDistance = 0f; val6.maxDistance = 500f; val6.aimType = (AimType)4; val6.ignoreNodeGraph = false; val6.moveTargetType = (TargetType)0; val6.shouldSprint = true; val6.movementType = (MovementType)3; val6.moveInputScale = 1f; val6.driverUpdateTimerOverride = -1f; val6.skillSlot = (SkillSlot)(-1); val3.AddComponent<TinyImp>(); val3.GetComponent<BaseAI>().localNavigator.allowWalkOffCliff = false; ContentAddition.AddMaster(val3); ContentAddition.AddBody(val4); ContentAddition.AddNetworkedObject(val4); ContentAddition.AddNetworkedObject(val3); LocalNavigator.Update += new hook_Update(LocalNavigator_Update); ((SpawnCard)val).prefab = val3; impSpawnCard = val; } private void LocalNavigator_Update(orig_Update orig, LocalNavigator self, float deltaTime) { if (Object.op_Implicit((Object)(object)self.bodyComponents.body) && Object.op_Implicit((Object)(object)self.bodyComponents.body.master) && Object.op_Implicit((Object)(object)((Component)self.bodyComponents.body.master).gameObject) && Object.op_Implicit((Object)(object)((Component)self.bodyComponents.body.master).gameObject.GetComponent<TinyImp>())) { self.allowWalkOffCliff = false; } orig.Invoke(self, deltaTime); } private void SwarmsArtifactManager_OnSpawnCardOnSpawnedServerGlobal(orig_OnSpawnCardOnSpawnedServerGlobal orig, SpawnResult result) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0013: 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) bool flag = true; if (Object.op_Implicit((Object)(object)result.spawnedInstance) && Object.op_Implicit((Object)(object)result.spawnedInstance.GetComponent<TinyImp>())) { flag = false; } if (flag) { orig.Invoke(result); } } private WeightedSelection<DirectorCard> SceneDirector_GenerateInteractableCardSelection(orig_GenerateInteractableCardSelection orig, SceneDirector self) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: 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_004d: Unknown result type (might be due to invalid IL or missing references) WeightedSelection<DirectorCard> val = orig.Invoke(self); ChoiceInfo<DirectorCard>[] choices = val.choices; for (int i = 0; i < choices.Length; i++) { ChoiceInfo<DirectorCard> val2 = choices[i]; DirectorCard value = val2.value; Print("Card Name: " + ((value != null) ? ((Object)value.spawnCard).name : null)); DirectorCard value2 = val2.value; object obj; if (value2 == null) { obj = null; } else { SpawnCard spawnCard = value2.spawnCard; if (spawnCard == null) { obj = null; } else { GameObject prefab = spawnCard.prefab; obj = ((prefab != null) ? ((Object)prefab).name : null); } } Print("Name: " + (string?)obj); Print("Weight: " + val2.weight); } return val; } public static void Print(string printString) { Debug.Log((object)("[Better Shrines] " + printString)); } public void GenerateFallenShrine() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Expected O, but got Unknown SpawnCard val = Resources.Load<SpawnCard>("SpawnCards/InteractableSpawnCard/iscShrineHealing"); ShrineAPI.ShrineInfo shrineInfo = new ShrineAPI.ShrineInfo(ShrineAPI.ShrineBaseType.Order, new Color(1f, 0.8549f, 0.7647f, 1f), (GameObject)EvaResources.ShrineFallenPrefab); Transform symbolTransform = shrineInfo.shrinePrefab.transform.Find("Symbol"); Transform modelTransform = shrineInfo.modelTransform; GameObject shrinePrefab = shrineInfo.shrinePrefab; PurchaseInteraction component = shrinePrefab.GetComponent<PurchaseInteraction>(); int num = fallenShrineHPPenalty.Value; if (num > 99) { num = 99; } else if (num < 0) { num = 0; } if (fallenShrineMoney.Value) { component.Networkcost = fallenShrineMoneyCost.Value; component.cost = fallenShrineMoneyCost.Value; } else { component.Networkcost = num; component.cost = num; } component.setUnavailableOnTeleporterActivated = false; if (fallenShrineMoney.Value) { component.automaticallyScaleCostWithDifficulty = true; } else { component.automaticallyScaleCostWithDifficulty = false; } ShrineFallenBehaviour shrineFallenBehaviour = shrinePrefab.AddComponent<ShrineFallenBehaviour>(); shrineFallenBehaviour.shrineEffectColor = new Color(0.384f, 0.874f, 0.435f); shrineFallenBehaviour.symbolTransform = symbolTransform; shrineFallenBehaviour.maxUses = 1; InteractableSpawnCard val2 = ScriptableObject.CreateInstance<InteractableSpawnCard>(); DirectorCard val3 = new DirectorCard(); ((SpawnCard)val2).prefab = shrinePrefab; val2.slightlyRandomizeOrientation = false; val3.selectionWeight = fallenShrineWeight.Value; val3.spawnCard = (SpawnCard)(object)val2; Helpers.AddNewInteractable(val3, (InteractableCategory)4); } public void GenerateHeresyShrine() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown SpawnCard val = Resources.Load<SpawnCard>("SpawnCards/InteractableSpawnCard/iscShrineRestack"); ShrineAPI.ShrineInfo shrineInfo = new ShrineAPI.ShrineInfo(ShrineAPI.ShrineBaseType.Order, new Color(1f, 0.8549f, 0.7647f, 1f), (GameObject)EvaResources.ShrineHeresyPrefab); Transform symbolTransform = shrineInfo.shrinePrefab.transform.Find("Symbol"); Transform modelTransform = shrineInfo.modelTransform; GameObject shrinePrefab = shrineInfo.shrinePrefab; ShrineHeresyBehaviour shrineHeresyBehaviour = shrinePrefab.AddComponent<ShrineHeresyBehaviour>(); shrineHeresyBehaviour.shrineEffectColor = new Color(1f, 0.23f, 0.6337214f); shrineHeresyBehaviour.symbolTransform = symbolTransform; InteractableSpawnCard val2 = ScriptableObject.CreateInstance<InteractableSpawnCard>(); DirectorCard val3 = new DirectorCard(); ((SpawnCard)val2).prefab = shrinePrefab; val2.slightlyRandomizeOrientation = false; val3.selectionWeight = heresyShrineWeight.Value; val3.spawnCard = (SpawnCard)(object)val2; ((SpawnCard)val2).directorCreditCost = 30; val2.maxSpawnsPerStage = 1; Helpers.AddNewInteractable(val3, (InteractableCategory)4); } public void GenerateDisorderShrine() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown SpawnCard val = Resources.Load<SpawnCard>("SpawnCards/InteractableSpawnCard/iscShrineRestack"); ShrineAPI.ShrineInfo shrineInfo = new ShrineAPI.ShrineInfo(ShrineAPI.ShrineBaseType.Order, new Color(1f, 0.8549f, 0.7647f, 1f), (GameObject)EvaResources.ShrineDisorderPrefab); Transform symbolTransform = shrineInfo.shrinePrefab.transform.Find("Symbol"); Transform modelTransform = shrineInfo.modelTransform; GameObject shrinePrefab = shrineInfo.shrinePrefab; ShrineDisorderBehaviour shrineDisorderBehaviour = shrinePrefab.AddComponent<ShrineDisorderBehaviour>(); shrineDisorderBehaviour.shrineEffectColor = new Color(1f, 0.23f, 0.6337214f); shrineDisorderBehaviour.symbolTransform = symbolTransform; shrineDisorderBehaviour.modelBase = ((Component)modelTransform).transform; InteractableSpawnCard val2 = ScriptableObject.CreateInstance<InteractableSpawnCard>(); DirectorCard val3 = new DirectorCard(); ((SpawnCard)val2).prefab = shrinePrefab; val2.slightlyRandomizeOrientation = false; val3.selectionWeight = disorderShrineWeight.Value; val3.spawnCard = (SpawnCard)(object)val2; ((SpawnCard)val2).directorCreditCost = 30; val2.maxSpawnsPerStage = 1; Helpers.AddNewInteractable(val3, (InteractableCategory)4); } public void GenerateImpShrine() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Expected O, but got Unknown SpawnCard val = Resources.Load<SpawnCard>("SpawnCards/InteractableSpawnCard/iscShrineHealing"); ShrineAPI.ShrineInfo shrineInfo = new ShrineAPI.ShrineInfo(ShrineAPI.ShrineBaseType.Healing, new Color(1f, 0.8549f, 0.7647f, 1f), (GameObject)EvaResources.ShrineImpPrefab); Transform symbolTransform = shrineInfo.shrinePrefab.transform.Find("Symbol"); GameObject shrinePrefab = shrineInfo.shrinePrefab; DirectorCard val2 = new DirectorCard(); val2.spawnCard = (SpawnCard)(object)impSpawnCard; val2.selectionWeight = 10; val2.spawnDistance = (MonsterSpawnDistance)0; val2.preventOverhead = false; val2.minimumStageCompletions = 0; CombatDirector component = shrinePrefab.GetComponent<CombatDirector>(); DirectorCardCategorySelection val3 = ScriptableObject.CreateInstance<DirectorCardCategorySelection>(); val3.AddCategory("Imps", 10f); val3.AddCard(0, val2); component.monsterCards = val3; ShrineImpBehaviour shrineImpBehaviour = shrinePrefab.AddComponent<ShrineImpBehaviour>(); shrineImpBehaviour.shrineEffectColor = new Color(0.6661001f, 0.5333304f, 85f / 106f); shrineImpBehaviour.symbolTransform = symbolTransform; shrineImpBehaviour.directorCard = val2; CustomDirector customDirector = shrinePrefab.AddComponent<CustomDirector>(); InteractableSpawnCard val4 = ScriptableObject.CreateInstance<InteractableSpawnCard>(); DirectorCard val5 = new DirectorCard(); ((SpawnCard)val4).prefab = shrinePrefab; val4.slightlyRandomizeOrientation = false; ((SpawnCard)val4).directorCreditCost = 20; val4.maxSpawnsPerStage = 2; val5.selectionWeight = impShrineWeight.Value; val5.spawnCard = (SpawnCard)(object)val4; Helpers.AddNewInteractable(val5, (InteractableCategory)4); } public void GenerateWispShrine() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00bf: 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_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Expected O, but got Unknown //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) SpawnCard val = Resources.Load<SpawnCard>("SpawnCards/InteractableSpawnCard/iscShrineBlood"); GameObject prefab = val.prefab; ShrineAPI.ShrineInfo shrineInfo = new ShrineAPI.ShrineInfo(ShrineAPI.ShrineBaseType.Blood, new Color(1f, 0.8549f, 0.7647f, 1f), (GameObject)EvaResources.ShrineWispPrefab); Transform symbolTransform = shrineInfo.shrinePrefab.transform.Find("Symbol"); Transform modelTransform = shrineInfo.modelTransform; GameObject shrinePrefab = shrineInfo.shrinePrefab; DirectorCard val2 = new DirectorCard(); val2.spawnCard = (SpawnCard)(object)Resources.Load<CharacterSpawnCard>("spawncards/characterspawncards/cscLesserWisp"); val2.selectionWeight = 10; val2.spawnDistance = (MonsterSpawnDistance)0; val2.preventOverhead = false; val2.minimumStageCompletions = 0; DirectorCard val3 = new DirectorCard(); val3.spawnCard = (SpawnCard)(object)Resources.Load<CharacterSpawnCard>("spawncards/characterspawncards/cscGreaterWisp"); val3.selectionWeight = 3; val3.spawnDistance = (MonsterSpawnDistance)0; val3.preventOverhead = false; val3.minimumStageCompletions = 0; CombatDirector component = shrinePrefab.GetComponent<CombatDirector>(); DirectorCardCategorySelection val4 = ScriptableObject.CreateInstance<DirectorCardCategorySelection>(); val4.AddCategory("Imps", 13f); val4.AddCard(0, val2); val4.AddCard(0, val3); component.monsterCards = val4; ShrineWispBehaviour shrineWispBehaviour = shrinePrefab.AddComponent<ShrineWispBehaviour>(); shrineWispBehaviour.shrineEffectColor = new Color(0.6661001f, 0.5333304f, 85f / 106f); shrineWispBehaviour.symbolTransform = symbolTransform; InteractableSpawnCard val5 = ScriptableObject.CreateInstance<InteractableSpawnCard>(); DirectorCard val6 = new DirectorCard(); ((SpawnCard)val5).prefab = shrinePrefab; val5.slightlyRandomizeOrientation = false; val6.selectionWeight = wispShrineWeight.Value; val6.spawnCard = (SpawnCard)(object)val5; ((SpawnCard)val5).directorCreditCost = 15; val5.maxSpawnsPerStage = 2; Stage[] array = (Stage[])(object)new Stage[2] { (Stage)256, (Stage)64 }; Stage[] array2 = array; foreach (Stage val7 in array2) { Helpers.AddNewInteractableToStage(val6, (InteractableCategory)4, val7, ""); } } } public static class EvaResources { public static bool Loaded { get; private set; } public static Object ShrineFallenPrefab { get; private set; } public static Object ShrineImpPrefab { get; private set; } public static Object ShrineDisorderPrefab { get; private set; } public static Object ShrineWispPrefab { get; private set; } public static Object ShrineHeresyPrefab { get; private set; } public static Object ShrineShieldPrefab { get; private set; } public static Sprite HPDebuffIcon { get; private set; } public static Sprite ShieldBar { get; private set; } public static void Init() { //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) if (!Loaded) { Loaded = true; AssetBundle val = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("BetterShrines.dll", "bettershrines")); val.LoadAllAssets(); if ((Object)(object)val != (Object)null) { MoreShrines.Print("Bundle data: " + (object)val); MoreShrines.Print("Asset bundle loaded."); ShrineFallenPrefab = val.LoadAsset<Object>("Assets/BetterShrines/ShrineOfTheFallen/ShrineFallen.prefab"); ShrineImpPrefab = val.LoadAsset<Object>("Assets/BetterShrines/ImpShrine/ShrineImp.prefab"); ShrineDisorderPrefab = val.LoadAsset<Object>("Assets/BetterShrines/ShrineOfDisorder/ShrineDisorder.prefab"); ShrineHeresyPrefab = val.LoadAsset<Object>("Assets/BetterShrines/ShrineOfHeresy/ShrineHeresy.prefab"); ShrineWispPrefab = val.LoadAsset<Object>("Assets/BetterShrines/WispShrine/ShrineWisp.prefab"); ShrineShieldPrefab = val.LoadAsset<Object>("Assets/BetterShrines/ShrineOfShielding/ShrineShielding.prefab"); ShieldBar = val.LoadAsset<Sprite>("Assets/BetterShrines/textures/texUINonsegmentedHealthbar.png"); Texture2D val2 = val.LoadAsset<Texture2D>("Assets/BetterShrines/Buffs/texBuffHealthDownIcon.png"); MoreShrines.Print("Bundle assets loaded."); HPDebuffIcon = Sprite.Create(val2, new Rect(0f, 0f, (float)((Texture)val2).width, (float)((Texture)val2).height), new Vector2(0.5f, 0.5f)); } } } } internal class ShrineAPI { public enum ShrineBaseType { Chance, Healing, Order, Blood, Combat, Gold, None } public class ShrineInfo { public GameObject shrinePrefab; public CombatDirector combatDirector; public Transform modelTransform; public Transform symbolTransform; public void Create(ShrineBaseType baseShrine, GameObject shrinePrefab, Color? symbolColor = null, Shader overrideShader = null, Color? materialColor = null) { //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Expected O, but got Unknown //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_010b: 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) SpawnCard val = Resources.Load<SpawnCard>(shrineDict[baseShrine]); GameObject prefab = val.prefab; Transform val2 = prefab.transform.Find("Symbol"); MeshRenderer component = ((Component)val2).GetComponent<MeshRenderer>(); Material material = ((Renderer)component).material; if (Object.op_Implicit((Object)(object)shrinePrefab.GetComponent<ModelLocator>())) { modelTransform = shrinePrefab.GetComponent<ModelLocator>().modelTransform; MeshRenderer[] componentsInChildren = ((Component)modelTransform).GetComponentsInChildren<MeshRenderer>(); foreach (MeshRenderer val3 in componentsInChildren) { if ((Object)(object)overrideShader != (Object)null) { ((Renderer)val3).material.shader = overrideShader; } else { ((Renderer)val3).material.shader = Shader.Find("Hopoo Games/Deferred/Standard"); } } MeshRenderer[] componentsInChildren2 = ((Component)modelTransform).GetComponentsInChildren<MeshRenderer>(); foreach (MeshRenderer val4 in componentsInChildren2) { if (materialColor.HasValue) { ((Renderer)val4).material.color = materialColor.Value; } else { ((Renderer)val4).material.color = Color.white; } } } if (Object.op_Implicit((Object)(object)shrinePrefab.GetComponent<CombatDirector>())) { combatDirector = shrinePrefab.GetComponent<CombatDirector>(); } if (Object.op_Implicit((Object)(object)shrinePrefab.transform.Find("Symbol"))) { symbolTransform = shrinePrefab.transform.Find("Symbol"); if (Object.op_Implicit((Object)(object)((Component)symbolTransform).GetComponent<MeshRenderer>())) { MeshRenderer component2 = ((Component)symbolTransform).gameObject.GetComponent<MeshRenderer>(); Texture mainTexture = ((Renderer)component2).material.mainTexture; ((Renderer)component2).material = new Material(material.shader); ((Renderer)component2).material.CopyPropertiesFromMaterial(material); ((Renderer)component2).material.mainTexture = mainTexture; if (symbolColor.HasValue) { ((Renderer)component2).material.SetColor("_TintColor", symbolColor.Value); } } } this.shrinePrefab = shrinePrefab; ContentAddition.AddNetworkedObject(shrinePrefab); PrefabAPI.RegisterNetworkPrefab(shrinePrefab); } public ShrineInfo(ShrineBaseType baseShrine, GameObject shrinePrefab, Color symbolColor, Shader overrideShader, Color materialColor) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) Create(baseShrine, shrinePrefab, symbolColor, overrideShader, materialColor); } public ShrineInfo(ShrineBaseType baseShrine, GameObject shrinePrefab, Shader overrideShader, Color materialColor) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) Create(baseShrine, shrinePrefab, null, overrideShader, materialColor); } public ShrineInfo(ShrineBaseType baseShrine, Color materialColor, GameObject shrinePrefab) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) Create(baseShrine, shrinePrefab, null, null, materialColor); } public ShrineInfo(ShrineBaseType baseShrine, GameObject shrinePrefab, Color symbolColor, Shader overrideShader) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) Create(baseShrine, shrinePrefab, symbolColor, overrideShader); } public ShrineInfo(ShrineBaseType baseShrine, GameObject shrinePrefab, Color symbolColor) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) Create(baseShrine, shrinePrefab, symbolColor); } public ShrineInfo(ShrineBaseType baseShrine, GameObject shrinePrefab) { Create(baseShrine, shrinePrefab); } } private static Dictionary<ShrineBaseType, string> shrineDict = new Dictionary<ShrineBaseType, string> { { ShrineBaseType.Chance, "spawncards/interactablespawncard/iscShrineChance" }, { ShrineBaseType.Healing, "spawncards/interactablespawncard/iscShrineHealing" }, { ShrineBaseType.Order, "spawncards/interactablespawncard/iscShrineRestack" }, { ShrineBaseType.Blood, "spawncards/interactablespawncard/iscShrineBlood" }, { ShrineBaseType.Combat, "spawncards/interactablespawncard/iscShrineCombat" }, { ShrineBaseType.Gold, "spawncards/interactablespawncard/iscShrineGoldshoresAccess" }, { ShrineBaseType.None, "spawncards/interactablespawncard/iscShrineChance" } }; } [RequireComponent(typeof(PurchaseInteraction))] public class ShrineDisorderBehaviour : NetworkBehaviour { public Transform symbolTransform; public Transform modelBase; public Color shrineEffectColor; public PurchaseInteraction purchaseInteraction; private ItemTier[] tiersToCheck; private static int kRpcRpcAddShrineStackClient; public void Awake() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) purchaseInteraction = ((Component)this).GetComponent<PurchaseInteraction>(); purchaseInteraction.costType = (CostTypeIndex)Array.IndexOf(CostTypeCatalog.costTypeDefs, MoreShrines.costTypeDefShrineDisorder); purchaseInteraction.cost = 1; purchaseInteraction.Networkcost = 1; ((UnityEvent<Interactor>)(object)purchaseInteraction.onPurchase).AddListener((UnityAction<Interactor>)delegate(Interactor interactor) { AddShrineStack(interactor); }); } [ClientRpc] public void RpcAddShrineStackClient() { ((Component)symbolTransform).gameObject.SetActive(false); Rigidbody[] componentsInChildren = ((Component)((Component)modelBase).transform).GetComponentsInChildren<Rigidbody>(); foreach (Rigidbody val in componentsInChildren) { val.isKinematic = false; } } public void AddShrineStack(Interactor interactor) { //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_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Expected O, but got Unknown //IL_0058: 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_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_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown CallRpcAddShrineStackClient(); if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'System.Void RoR2.TeleporterInteraction::AddShrineStack()' called on client"); return; } CharacterBody component = ((Component)interactor).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.inventory)) { ItemTier[] array = tiersToCheck; foreach (ItemTier itemTier in array) { FlattenInventory(component.inventory, itemTier); } Chat.SendBroadcastChat((ChatMessageBase)new SubjectFormatChatMessage { subjectAsCharacterBody = component, baseToken = "SHRINE_DISORDER_USE_MESSAGE" }); } EffectManager.SpawnEffect(Resources.Load<GameObject>("Prefabs/Effects/ShrineUseEffect"), new EffectData { origin = ((Component)this).transform.position, rotation = Quaternion.identity, scale = 1f, color = Color32.op_Implicit(shrineEffectColor) }, true); } public void FlattenInventory(Inventory inventory, ItemTier itemTier) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: 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_0121: Unknown result type (might be due to invalid IL or missing references) ItemDef[] array = ((IEnumerable<ItemDef>)(object)ItemCatalog.allItemDefs).Where((ItemDef x) => x.tier == itemTier && Run.instance.IsItemAvailable(x.itemIndex)).ToArray(); int[] array2 = new int[array.Length]; int num = int.MaxValue; ItemDef[] array3 = array; foreach (ItemDef val in array3) { num = Math.Min(inventory.GetItemCount(val), num); if (num == 0) { break; } } int num2 = num + 1; int num3 = 0; WeightedSelection<ItemDef> val2 = new WeightedSelection<ItemDef>(8); ItemDef[] array4 = array; foreach (ItemDef val3 in array4) { int itemCount = inventory.GetItemCount(val3); if (itemCount > num2) { int num4 = itemCount - num2; num3 += num4; inventory.RemoveItem(val3, num4); } else { val2.AddChoice(val3, 1f); } } int num5 = 0; while (num3 > 0) { if (val2.Count > 0) { num3--; int num6 = val2.EvaluateToChoiceIndex(Random.value); array2[Array.IndexOf(array, val2.GetChoice(num6).value)]++; val2.RemoveChoice(num6); continue; } num5 = num3 / array.Length; num3 -= num5 * array.Length; ItemDef[] array5 = array; foreach (ItemDef val4 in array5) { val2.AddChoice(val4, 1f); } } for (int l = 0; l < array.Length; l++) { int num7 = num5 + array2[l]; if (num7 > 0) { inventory.GiveItem(array[l], num7); } } } public ShrineDisorderBehaviour() { ItemTier[] array = new ItemTier[5]; RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/); tiersToCheck = (ItemTier[])(object)array; ((NetworkBehaviour)this)..ctor(); } private void UNetVersion() { } protected static void InvokeRpcRpcAddShrineStackClient(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcAddShrineStackClient called on server."); } else { ((ShrineDisorderBehaviour)(object)obj).RpcAddShrineStackClient(); } } public void CallRpcAddShrineStackClient() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogError((object)"RPC Function RpcAddShrineStackClient called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kRpcRpcAddShrineStackClient); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcAddShrineStackClient"); } static ShrineDisorderBehaviour() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown kRpcRpcAddShrineStackClient = 2035029055; NetworkBehaviour.RegisterRpcDelegate(typeof(ShrineDisorderBehaviour), kRpcRpcAddShrineStackClient, new CmdDelegate(InvokeRpcRpcAddShrineStackClient)); NetworkCRC.RegisterBehaviour("ShrineDisorderBehaviour", 0); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } [RequireComponent(typeof(PurchaseInteraction))] public class ShrineFallenBehaviour : NetworkBehaviour { public Interactor whoInteracted; public Transform symbolTransform; public Color shrineEffectColor; public int maxUses = 1; public List<CharacterMaster> playersToRespawn = new List<CharacterMaster>(); [SyncVar] public int timesUsed = 0; public float wait = 2f; [SyncVar] public float stopwatch; public PurchaseInteraction purchaseInteraction; [SyncVar] public bool inUse = false; [SyncVar] public bool isAvailable = true; private static int kRpcRpcAddShrineStackClient; public int NetworktimesUsed { get { return timesUsed; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<int>(value, ref timesUsed, 1u); } } public float Networkstopwatch { get { return stopwatch; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<float>(value, ref stopwatch, 2u); } } public bool NetworkinUse { get { return inUse; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<bool>(value, ref inUse, 4u); } } public bool NetworkisAvailable { get { return isAvailable; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<bool>(value, ref isAvailable, 8u); } } public void Awake() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown purchaseInteraction = ((Component)this).GetComponent<PurchaseInteraction>(); purchaseInteraction.costType = (CostTypeIndex)Array.IndexOf(CostTypeCatalog.costTypeDefs, MoreShrines.costTypeDefShrineFallen); ((UnityEvent<Interactor>)(object)purchaseInteraction.onPurchase).AddListener((UnityAction<Interactor>)delegate(Interactor interactor) { AddShrineStack(interactor); }); CharacterMaster.RespawnExtraLife += new hook_RespawnExtraLife(CharacterMaster_RespawnExtraLife); } private void CharacterMaster_RespawnExtraLife(orig_RespawnExtraLife orig, CharacterMaster self) { orig.Invoke(self); if (!playersToRespawn.Contains(self)) { return; } playersToRespawn.Remove(self); CharacterBody body = self.GetBody(); CharacterBody val = body; if (!Object.op_Implicit((Object)(object)val)) { return; } int buffCount = val.GetBuffCount(InitBuffs.maxHPDownStage); int num = (int)Mathf.Ceil((100f - (float)val.GetBuffCount(InitBuffs.maxHPDownStage)) / 100f * (float)purchaseInteraction.cost); if (buffCount + num < 100) { for (int i = 0; i < num; i++) { val.AddBuff(InitBuffs.maxHPDownStage); } } } public void Update() { if (timesUsed < maxUses) { if (inUse) { Networkstopwatch = stopwatch - Time.deltaTime; if (stopwatch < 0f) { NetworkinUse = false; } } else if (IsAnyoneDead()) { ((Component)symbolTransform).gameObject.SetActive(true); NetworkisAvailable = true; } else { ((Component)symbolTransform).gameObject.SetActive(false); NetworkisAvailable = false; } } else { ((Component)symbolTransform).gameObject.SetActive(false); NetworkisAvailable = false; if (NetworkServer.active) { purchaseInteraction.SetAvailable(false); } } } [ClientRpc] public void RpcAddShrineStackClient() { ((Component)symbolTransform).gameObject.SetActive(false); } public void AddShrineStack(Interactor interactor) { //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_0091: Unknown resu