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 QuestShrine v0.1.0
questshrine.dll
Decompiled 10 hours agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HG; using HG.Reflection; using IL.RoR2.UI; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.RoR2; using R2API; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.UI; using RoR2BepInExPack.GameAssetPaths.Version_1_35_0; using ShaderSwapper; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using questshrine.bases; using questshrine.content.componentns; [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyCompany("questshrine")] [assembly: AssemblyProduct("questshrine")] [assembly: AssemblyTitle("questshrine")] [assembly: AssemblyInformationalVersion("1.0.0+0a2ad724f155a843dbfc84f3fb31243d55e1cd84")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [Embedded] [CompilerGenerated] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace questshrine { internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [BepInPlugin("kina.questshrine", "questshrine", "0.1.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class questshrine : BaseUnityPlugin { private const string PluginGUID = "kina.questshrine"; private const string PluginAuthor = "kina"; private const string PluginName = "questshrine"; private const string PluginVersion = "0.1.0"; public static questshrine instance; public static AssetBundle bundle; private static Material shrineMat = Addressables.LoadAssetAsync<Material>((object)RoR2_Base_ShrineBlood.matShrineBlood_mat).WaitForCompletion(); private static GameObject notifPrefab; public readonly Dictionary<QuestBase, GameObject> questObjectCatalog = new Dictionary<QuestBase, GameObject>(); private static bool UHRInstalled => Chainloader.PluginInfos.ContainsKey("iDeathHD.UnityHotReload"); public void Awake() { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown Log.Init(((BaseUnityPlugin)this).Logger); instance = this; bundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "questshrinebundle")); ((MonoBehaviour)this).StartCoroutine(ShaderSwapper.UpgradeStubbedShadersAsync(bundle)); LoadBases(); LoadShrine(); notifPrefab = bundle.LoadAsset<GameObject>("NotificationPanel2"); NotificationUIController.SetUpNotification += new Manipulator(AddCustomNotificationIL); } public void AddCustomNotificationIL(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_00dd: 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_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); try { if (val.TryGotoNext(new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 0), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<Object>(x, "Instantiate"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<GameObject>(x, "GetComponent"), (Instruction x) => ILPatternMatchingExt.MatchStfld<NotificationUIController>(x, "currentNotification") })) { Log.Debug("matched !! yayy"); int index = val.Index; val.Index = index + 1; val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.Emit(OpCodes.Ldloc_S, (byte)0); val.EmitDelegate<Func<NotificationUIController, NotificationInfo, GameObject, GameObject>>((Func<NotificationUIController, NotificationInfo, GameObject, GameObject>)delegate(NotificationUIController notifUIControl, NotificationInfo notifInfo, GameObject prevNotifPrefab) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) if (notifInfo?.transformation?.transformationType != (TransformationType?)QuestBehaviorBase.notificationEnum) { return prevNotifPrefab; } notifUIControl.LowerPricedChestsRegenTransformationNotificationPrefab = notifPrefab; return notifPrefab; }); val.Emit(OpCodes.Stloc_0); val.Index += 4; val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldfld, typeof(NotificationUIController).GetField("currentNotification", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.GetProperty)); val.EmitDelegate<Action<NotificationUIController, NotificationInfo, GenericNotification>>((Action<NotificationUIController, NotificationInfo, GenericNotification>)delegate(NotificationUIController notifUIControl, NotificationInfo notifInfo, GenericNotification genericNotif) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) if (notifInfo?.transformation?.transformationType == (TransformationType?)QuestBehaviorBase.notificationEnum) { QuestBase questBase = notifInfo.data as QuestBase; genericNotif.titleText.token = Language.GetString(questBase.QuestTitle); genericNotif.descriptionText.token = Language.GetString(questBase.QuestDesc); genericNotif.iconImage.texture = (Texture)(object)questBase.QuestIcon.texture; } }); } else { Log.Error("fuck !!!!!!!!!!!!!!! couldnt match notifictation il .,. dlc4 probablys idk.,,..,"); QuestBehaviorBase.notificationEnum = 0; } } catch (Exception data) { Log.Error("error while il patching notifiction ! dlc4 probably killed me,.,."); Log.Error(data); QuestBehaviorBase.notificationEnum = 0; } } private void LoadBases() { foreach (Type item in from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(QuestBase)) select type) { QuestBase questBase = (QuestBase)Activator.CreateInstance(item); questBase.Init(((BaseUnityPlugin)this).Config); if (questBase.enabled) { GameObject val = PrefabAPI.CreateEmptyPrefab("quest prefab " + questBase.QuestName, true); val.AddComponent(questBase.Behavior); questObjectCatalog.Add(questBase, val); } } } private void LoadShrine() { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: 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_0097: Expected O, but got Unknown //IL_0097: 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_00a4: 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_00b0: Expected O, but got Unknown GameObject obj = bundle.LoadAsset<GameObject>("questshrineprefab"); ((Renderer)((Component)obj.transform.Find("chanceshrine").Find("shrine")).GetComponent<MeshRenderer>()).material = shrineMat; QuestShrineComponent questShrineComponent = obj.AddComponent<QuestShrineComponent>(); PurchaseInteraction component = obj.GetComponent<PurchaseInteraction>(); questShrineComponent.purchaseInteraction = component; ConfigEntry<int> val = ((BaseUnityPlugin)instance).Config.Bind<int>("Quest Shrine", "Shrine selection weight", 3, "selection weight of how common quest shrine should spawn .,., for reference mountain shrines are usually weight of 1 ,., chance a weight of 2 .,,. and combat a weight of 3 ,..,"); InteractableSpawnCard spawnCard = bundle.LoadAsset<InteractableSpawnCard>("questshrineisc"); DirectorCard card = new DirectorCard { selectionWeight = val.Value, spawnCard = (SpawnCard)(object)spawnCard }; Helpers.AddNewInteractable(new DirectorCardHolder { Card = card, InteractableCategory = (InteractableCategory)4 }); ContentAddition.AddNetworkedObject(obj); } private void Update() { } } public static class Utils { private static List<string> addedConfigs = new List<string>(); public static void SliderConfig(float min, float max, ConfigEntry<float> config) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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_001f: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown StepSliderConfig val = new StepSliderConfig { max = max, min = min, FormatString = "{0:0}" }; ModSettingsManager.AddOption((BaseOption)new StepSliderOption(config, val)); } public static ConfigEntry<int> SliderConfig(ConfigEntry<int> config, int min = -1, int max = -1) { //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown if (addedConfigs.Contains(((ConfigEntryBase)config).Definition.Key)) { return config; } addedConfigs.Add(((ConfigEntryBase)config).Definition.Key); if (min == -1) { min = (int)((ConfigEntryBase)config).DefaultValue / 2; } if (max == -1) { max = (int)((ConfigEntryBase)config).DefaultValue * 2; } IntSliderConfig val = new IntSliderConfig { max = max, min = min, formatString = "{0:0}" }; ModSettingsManager.AddOption((BaseOption)new IntSliderOption(config, val)); return config; } public static ConfigEntry<bool> CheckboxConfig(ConfigEntry<bool> config, bool restartRequired = false) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown if (addedConfigs.Contains(((ConfigEntryBase)config).Definition.Key)) { return config; } addedConfigs.Add(((ConfigEntryBase)config).Definition.Key); CheckBoxConfig val = new CheckBoxConfig(); ((BaseOptionConfig)val).restartRequired = restartRequired; ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(config, val)); return config; } public static void StringConfig(ConfigEntry<string> config) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown InputFieldConfig val = new InputFieldConfig(); ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(config, val)); } public static void KeyboardConfig(ConfigEntry<KeyboardShortcut> config) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown KeyBindConfig val = new KeyBindConfig(); ModSettingsManager.AddOption((BaseOption)new KeyBindOption(config, val)); } } } namespace questshrine.content.quests { public class DisableSkills : QuestBase<DisableSkills> { public static ConfigEntry<int> minTimer; public static ConfigEntry<int> maxTimer; public override string QuestName => "Disable Skills"; public override string QuestTitle => "<style=cWorldEvent>the planet sent out a freakings emp .,,..</style>"; public override string QuestDesc => "skills disabled for {0} seconds,.,."; public override string QuestDescRetired => "skills no longer disabled!!!"; public override Sprite QuestIcon => questshrine.bundle.LoadAsset<Sprite>("noskills"); public override string[] Tags => new string[1] { "noStack" }; public override Type Behavior => typeof(DisableSkillsBehaviorBase); public override void CreateConfig(ConfigFile config) { minTimer = Utils.SliderConfig(ConfigHelper("min timer value", 10, "minimum timer value for skills being disabled .,,.")); maxTimer = Utils.SliderConfig(ConfigHelper("max timer value", 25, "max timer value for skills being disabled .,,.")); } } public class DisableSkillsBehaviorBase : QuestBehaviorBase { [SyncVar] public float timer; [SyncVar] public float startingTime; public bool gaveReward; public override QuestBase QuestBase => QuestBase<DisableSkills>.instance; public override Type ObjectiveType => typeof(NoSkillsObjective); public float Networktimer { get { return timer; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<float>(value, ref timer, 4u); } } public float NetworkstartingTime { get { return startingTime; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<float>(value, ref startingTime, 8u); } } public override void StartQuest() { if (!NetworkServer.active) { base.StartQuest(); DisableSkillsForBody(base.body); return; } NetworkstartingTime = Run.instance.runRNG.RangeFloat((float)DisableSkills.minTimer.Value, (float)DisableSkills.maxTimer.Value) - 0.75f; Networktimer = startingTime + 2f; DisableSkillsForBody(base.body); charMaster.onBodyStart += DisableSkillsForBody; base.NetworkQuestDescInternal = string.Format(QuestBase<DisableSkills>.instance.QuestDesc, startingTime.ToString("0")); base.StartQuest(); } public void DisableSkillsForBody(CharacterBody charBody) { if (Object.op_Implicit((Object)(object)base.body.skillLocator)) { if (Object.op_Implicit((Object)(object)base.body.skillLocator.primary)) { base.body.skillLocator.primary.SetSkillOverride((object)this, CommonAssets.disabledSkill, (SkillOverridePriority)4); } if (Object.op_Implicit((Object)(object)base.body.skillLocator.secondary)) { base.body.skillLocator.secondary.SetSkillOverride((object)this, CommonAssets.disabledSkill, (SkillOverridePriority)4); } if (Object.op_Implicit((Object)(object)base.body.skillLocator.utility)) { base.body.skillLocator.utility.SetSkillOverride((object)this, CommonAssets.disabledSkill, (SkillOverridePriority)4); } if (Object.op_Implicit((Object)(object)base.body.skillLocator.special)) { base.body.skillLocator.special.SetSkillOverride((object)this, CommonAssets.disabledSkill, (SkillOverridePriority)4); } } } public override void OnDisable() { charMaster.onBodyStart -= DisableSkillsForBody; if (Object.op_Implicit((Object)(object)base.body.skillLocator)) { if (Object.op_Implicit((Object)(object)base.body.skillLocator.primary)) { base.body.skillLocator.primary.UnsetSkillOverride((object)this, CommonAssets.disabledSkill, (SkillOverridePriority)4); } if (Object.op_Implicit((Object)(object)base.body.skillLocator.secondary)) { base.body.skillLocator.secondary.UnsetSkillOverride((object)this, CommonAssets.disabledSkill, (SkillOverridePriority)4); } if (Object.op_Implicit((Object)(object)base.body.skillLocator.utility)) { base.body.skillLocator.utility.UnsetSkillOverride((object)this, CommonAssets.disabledSkill, (SkillOverridePriority)4); } if (Object.op_Implicit((Object)(object)base.body.skillLocator.special)) { base.body.skillLocator.special.UnsetSkillOverride((object)this, CommonAssets.disabledSkill, (SkillOverridePriority)4); } } base.OnDisable(); } public void FixedUpdate() { if (NetworkServer.active) { Networktimer = timer - Time.fixedDeltaTime; if ((double)timer < 0.5 && !gaveReward) { gaveReward = true; QuestBase<DisableSkills>.instance.GiveReward(base.body); base.CallRpcRetire(); } } } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = base.OnSerialize(writer, forceAll); if (forceAll) { writer.Write(timer); writer.Write(startingTime); return true; } bool flag2 = false; if ((((NetworkBehaviour)this).syncVarDirtyBits & 4) != 0) { if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag2 = true; } writer.Write(timer); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 8) != 0) { if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag2 = true; } writer.Write(startingTime); } if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); } return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { base.OnDeserialize(reader, initialState); if (initialState) { timer = reader.ReadSingle(); startingTime = reader.ReadSingle(); return; } int num = (int)reader.ReadPackedUInt32(); if ((num & 4) != 0) { timer = reader.ReadSingle(); } if ((num & 8) != 0) { startingTime = reader.ReadSingle(); } } } public class NoSkillsObjective : QuestObjectiveBase { private DisableSkillsBehaviorBase _disableSkillsQuest; public override string GenerateString() { if (!Object.op_Implicit((Object)(object)_disableSkillsQuest)) { _disableSkillsQuest = (DisableSkillsBehaviorBase)(object)((ObjectiveTracker)this).sourceDescriptor.source; questBehavior = _disableSkillsQuest; } string text = string.Format(QuestBase<DisableSkills>.instance.QuestDesc, _disableSkillsQuest.timer.ToString("0")); if (!((Behaviour)_disableSkillsQuest).enabled) { ((ObjectiveTracker)this).retired = true; text = QuestBase<DisableSkills>.instance.QuestDescRetired; Object.Destroy((Object)(object)_disableSkillsQuest); } return GetPlayerName() + text; } public override bool IsDirty() { return true; } } public class KillEnemies : QuestBase<KillEnemies> { public override string QuestName => "Kill Enemies"; public override string QuestTitle => "<style=cWorldEvent>the planet's malice grows .,,..</style>"; public override string QuestDesc => "kill {0} {1}{2},.,."; public override string QuestDescRetired => "killed {0} {1}{2}!!!"; public override Sprite QuestIcon => questshrine.bundle.LoadAsset<Sprite>("killenemies"); public override bool useListeners => true; public override Type Behavior => typeof(KillEnemiesBehaviorBase); public override void CreateConfig(ConfigFile config) { } } public class KillEnemiesBehaviorBase : QuestBehaviorBase { [SyncVar] public int bodyIndex; [SyncVar] public int killAmount; [SyncVar] public int startingKillAmount; public override QuestBase QuestBase => QuestBase<KillEnemies>.instance; public override Type ObjectiveType => typeof(KillEnemiesObjective); public int NetworkbodyIndex { get { return bodyIndex; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<int>(value, ref bodyIndex, 4u); } } public int NetworkkillAmount { get { return killAmount; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<int>(value, ref killAmount, 8u); } } public int NetworkstartingKillAmount { get { return startingKillAmount; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<int>(value, ref startingKillAmount, 16u); } } public override void StartQuest() { //IL_0063: 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_006a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Expected I4, but got Unknown //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { base.StartQuest(); return; } KilledOtherServer = (Action<DamageReport>)Delegate.Combine(KilledOtherServer, new Action<DamageReport>(OnKilledOtherServer)); ClassicStageInfo component = GameObject.Find("SceneInfo").GetComponent<ClassicStageInfo>(); List<ChoiceInfo<DirectorCard>> list = new List<ChoiceInfo<DirectorCard>>(); List<CharacterMaster> list2 = new List<CharacterMaster>(); ChoiceInfo<DirectorCard>[] choices = component.monsterSelection.choices; CharacterMaster val = default(CharacterMaster); for (int i = 0; i < choices.Length; i++) { ChoiceInfo<DirectorCard> item = choices[i]; if (item.value?.minimumStageCompletions > Run.instance.stageClearCount) { continue; } DirectorCard value = item.value; if (value != null) { SpawnCard spawnCard = value.spawnCard; bool? obj; if (spawnCard == null) { obj = null; } else { GameObject prefab = spawnCard.prefab; obj = ((prefab != null) ? new bool?(prefab.TryGetComponent<CharacterMaster>(ref val)) : ((bool?)null)); } bool? flag = obj; if (flag == true && !val.bodyPrefab.GetComponent<CharacterBody>().isChampion && item.value.cost <= 100) { list.Add(item); list2.Add(val); } } } WeightedSelection<CharacterMaster> val2 = new WeightedSelection<CharacterMaster>(8); for (int j = 0; j < list.Count; j++) { val2.AddChoice(list2[j], (float)list[j].value.cost); } CharacterMaster val3 = val2.Evaluate(Run.instance.runRNG.nextNormalizedFloat); NetworkbodyIndex = (int)BodyCatalog.FindBodyIndex(val3.bodyPrefab); NetworkkillAmount = (int)(50f / (float)list[list2.IndexOf(val3)].value.cost * Run.instance.runRNG.RangeFloat(1f, 2f)); if (killAmount <= 3) { NetworkkillAmount = killAmount + 2; } NetworkstartingKillAmount = killAmount; base.NetworkQuestDescInternal = string.Format(QuestBase<KillEnemies>.instance.QuestDesc, killAmount, Language.GetString(BodyCatalog.GetBodyPrefab((BodyIndex)bodyIndex).GetComponent<CharacterBody>().baseNameToken), (killAmount > 1) ? "s" : ""); base.StartQuest(); } public void OnKilledOtherServer(DamageReport damageReport) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Invalid comparison between Unknown and I4 if ((int)damageReport.victimBodyIndex == bodyIndex) { NetworkkillAmount = killAmount - 1; if (killAmount == 0) { QuestBase<KillEnemies>.instance.GiveReward(base.body); base.CallRpcRetire(); } } } public override void OnDisable() { KilledOtherServer = (Action<DamageReport>)Delegate.Combine(KilledOtherServer, new Action<DamageReport>(OnKilledOtherServer)); base.OnDisable(); } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = base.OnSerialize(writer, forceAll); if (forceAll) { writer.WritePackedUInt32((uint)bodyIndex); writer.WritePackedUInt32((uint)killAmount); writer.WritePackedUInt32((uint)startingKillAmount); return true; } bool flag2 = false; if ((((NetworkBehaviour)this).syncVarDirtyBits & 4) != 0) { if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag2 = true; } writer.WritePackedUInt32((uint)bodyIndex); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 8) != 0) { if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag2 = true; } writer.WritePackedUInt32((uint)killAmount); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 0x10) != 0) { if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag2 = true; } writer.WritePackedUInt32((uint)startingKillAmount); } if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); } return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { base.OnDeserialize(reader, initialState); if (initialState) { bodyIndex = (int)reader.ReadPackedUInt32(); killAmount = (int)reader.ReadPackedUInt32(); startingKillAmount = (int)reader.ReadPackedUInt32(); return; } int num = (int)reader.ReadPackedUInt32(); if ((num & 4) != 0) { bodyIndex = (int)reader.ReadPackedUInt32(); } if ((num & 8) != 0) { killAmount = (int)reader.ReadPackedUInt32(); } if ((num & 0x10) != 0) { startingKillAmount = (int)reader.ReadPackedUInt32(); } } } public class KillEnemiesObjective : QuestObjectiveBase { private KillEnemiesBehaviorBase _killEnemiesBehaviorBase; private int localKillAmount; private string name; public override string GenerateString() { if (!Object.op_Implicit((Object)(object)_killEnemiesBehaviorBase)) { _killEnemiesBehaviorBase = (KillEnemiesBehaviorBase)(object)((ObjectiveTracker)this).sourceDescriptor.source; questBehavior = _killEnemiesBehaviorBase; name = Language.GetString(BodyCatalog.GetBodyPrefab((BodyIndex)_killEnemiesBehaviorBase.bodyIndex).GetComponent<CharacterBody>().baseNameToken); } localKillAmount = _killEnemiesBehaviorBase.killAmount; string text = string.Format(QuestBase<KillEnemies>.instance.QuestDesc, _killEnemiesBehaviorBase.killAmount, name, (localKillAmount > 1) ? "s" : ""); if (!((Behaviour)_killEnemiesBehaviorBase).enabled) { ((ObjectiveTracker)this).retired = true; text = string.Format(QuestBase<KillEnemies>.instance.QuestDescRetired, _killEnemiesBehaviorBase.startingKillAmount, name, "s"); Object.Destroy((Object)(object)_killEnemiesBehaviorBase); } return GetPlayerName() + text; } public override bool IsDirty() { return true; } } public class NoDamage : QuestBase<NoDamage> { public static ConfigEntry<int> minTimer; public static ConfigEntry<int> maxTimer; public static ConfigEntry<bool> ss1Behavior; public override string QuestName => "No Damage"; public override string QuestTitle => "<style=cWorldEvent>the planet seeks entertainment .,,..</style>"; public override string QuestDesc => "take no damage for {0} seconds,.,."; public override string QuestDescRetired => "took no damage for {0} seconds !!"; public override Sprite QuestIcon => questshrine.bundle.LoadAsset<Sprite>("nodamage"); public override bool useListeners => true; public override string[] Tags => new string[1] { "noStack" }; public override Type Behavior => typeof(NoDamageBehaviorBase); public override void CreateConfig(ConfigFile config) { minTimer = Utils.SliderConfig(ConfigHelper("min timer value", 15, "minimum timer value for damage not being taken .,,.")); maxTimer = Utils.SliderConfig(ConfigHelper("max timer value", 45, "max timer value for damage not being taken .,,.")); ss1Behavior = Utils.CheckboxConfig(ConfigHelper("starstorm 1 behavior", value: true, "should use starstorm 1 behavior (reset timer on hit),., disabling will cause the quest to fail upon taking damage with no reward,.,.")); } } public class NoDamageBehaviorBase : QuestBehaviorBase { [SyncVar] public float timer; [SyncVar] public float startingTime; public bool gaveReward; public override QuestBase QuestBase => QuestBase<NoDamage>.instance; public override Type ObjectiveType => typeof(NoDamageObjective); public float Networktimer { get { return timer; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<float>(value, ref timer, 4u); } } public float NetworkstartingTime { get { return startingTime; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<float>(value, ref startingTime, 8u); } } public override void StartQuest() { if (!NetworkServer.active) { base.StartQuest(); return; } TakeDamageServer = (Action<DamageReport>)Delegate.Combine(TakeDamageServer, new Action<DamageReport>(OnTakeDamageServer)); NetworkstartingTime = Run.instance.runRNG.RangeFloat((float)NoDamage.minTimer.Value, (float)NoDamage.maxTimer.Value) - 0.75f; Networktimer = startingTime + 2f; base.NetworkQuestDescInternal = string.Format(QuestBase<NoDamage>.instance.QuestDesc, startingTime.ToString("0")); base.StartQuest(); } public void FixedUpdate() { if (NetworkServer.active) { Networktimer = timer - Time.fixedDeltaTime; if ((double)timer < 0.5 && !gaveReward) { gaveReward = true; QuestBase<NoDamage>.instance.GiveReward(base.body); base.CallRpcRetire(); } } } public void OnTakeDamageServer(DamageReport damageReport) { if (NoDamage.ss1Behavior.Value) { Networktimer = startingTime; } else { base.CallRpcRetire(); } } public override void OnDisable() { TakeDamageServer = (Action<DamageReport>)Delegate.Remove(TakeDamageServer, new Action<DamageReport>(OnTakeDamageServer)); base.OnDisable(); } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = base.OnSerialize(writer, forceAll); if (forceAll) { writer.Write(timer); writer.Write(startingTime); return true; } bool flag2 = false; if ((((NetworkBehaviour)this).syncVarDirtyBits & 4) != 0) { if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag2 = true; } writer.Write(timer); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 8) != 0) { if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag2 = true; } writer.Write(startingTime); } if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); } return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { base.OnDeserialize(reader, initialState); if (initialState) { timer = reader.ReadSingle(); startingTime = reader.ReadSingle(); return; } int num = (int)reader.ReadPackedUInt32(); if ((num & 4) != 0) { timer = reader.ReadSingle(); } if ((num & 8) != 0) { startingTime = reader.ReadSingle(); } } } public class NoDamageObjective : QuestObjectiveBase { private NoDamageBehaviorBase noDamageQuest; public override string GenerateString() { if (!Object.op_Implicit((Object)(object)noDamageQuest)) { noDamageQuest = (NoDamageBehaviorBase)(object)((ObjectiveTracker)this).sourceDescriptor.source; questBehavior = noDamageQuest; } string text = string.Format(QuestBase<NoDamage>.instance.QuestDesc, noDamageQuest.timer.ToString("0")); if (!((Behaviour)noDamageQuest).enabled) { ((ObjectiveTracker)this).retired = true; text = string.Format(QuestBase<NoDamage>.instance.QuestDescRetired, noDamageQuest.startingTime.ToString("0")); Object.Destroy((Object)(object)noDamageQuest); } return GetPlayerName() + text; } public override bool IsDirty() { return true; } } public class Scrap : QuestBase<Scrap> { public string questDescSpecific = "scrap a {0},.,."; public static ConfigEntry<bool> specificItem; public override string QuestName => "Scrap Item"; public override string QuestTitle => "<style=cWorldEvent>the planet hungers .,,..</style>"; public override string QuestDesc => "scrap a {0} item,.,."; public override string QuestDescRetired => "scrapped a {0} item !!!"; public string questDescSpecificRetired => "scrapped a {0} !!!"; public override Sprite QuestIcon => questshrine.bundle.LoadAsset<Sprite>("scrapper"); public override string[] Tags => new string[1] { "requireScrapper" }; public override Type Behavior => typeof(ScrapItemBehaviorBase); public override void CreateConfig(ConfigFile config) { specificItem = config.Bind<bool>("Quest Shrine - " + QuestName, "Should the quest be a specific item to scrap .,.,", false, ""); Utils.CheckboxConfig(specificItem); } public override void Hooks() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown ScrapperController.BeginScrapping_UniquePickup += new hook_BeginScrapping_UniquePickup(QuestScrapper); } private void QuestScrapper(orig_BeginScrapping_UniquePickup orig, ScrapperController self, UniquePickup pickuptotake) { //IL_0045: 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_0115: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Invalid comparison between I4 and Unknown //IL_00f7: 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_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Invalid comparison between I4 and Unknown Interactor interactor = self.interactor; object obj; if (interactor == null) { obj = null; } else { CharacterBody component = ((Component)interactor).gameObject.GetComponent<CharacterBody>(); obj = ((component != null) ? component.master : null); } CharacterMaster interactorMaster = (CharacterMaster)obj; if (!Object.op_Implicit((Object)(object)interactorMaster) || !NetworkServer.active) { orig.Invoke(self, pickuptotake); return; } QuestBehaviorBase[] array = QuestBehaviorBase.activeQuests.Where((QuestBehaviorBase quest) => (Object)(object)quest.charMaster == (Object)(object)interactorMaster && quest is ScrapItemBehaviorBase).ToArray(); if (array.Length == 0) { orig.Invoke(self, pickuptotake); return; } QuestBehaviorBase[] array2 = array; for (int num = 0; num < array2.Length; num++) { ScrapItemBehaviorBase scrapItemBehaviorBase = (ScrapItemBehaviorBase)array2[num]; if (specificItem.Value && scrapItemBehaviorBase.targetItemIndex != -1) { if (scrapItemBehaviorBase.targetItemIndex != (int)PickupCatalog.GetPickupDef(pickuptotake.pickupIndex).itemIndex) { continue; } } else if (scrapItemBehaviorBase.targetTier != (int)PickupCatalog.GetPickupDef(pickuptotake.pickupIndex).itemTier) { continue; } GiveReward(scrapItemBehaviorBase.body); ((QuestBehaviorBase)scrapItemBehaviorBase).CallRpcRetire(); int maxItemsToScrapAtATime = self.maxItemsToScrapAtATime; self.maxItemsToScrapAtATime = 1; orig.Invoke(self, pickuptotake); self.maxItemsToScrapAtATime = maxItemsToScrapAtATime; return; } orig.Invoke(self, pickuptotake); } } public class ScrapItemBehaviorBase : QuestBehaviorBase { [SyncVar] public int targetTier; [SyncVar] public int targetItemIndex = -1; public override QuestBase QuestBase => QuestBase<Scrap>.instance; public override Type ObjectiveType => typeof(ScrapItemObjective); public int NetworktargetTier { get { return targetTier; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<int>(value, ref targetTier, 4u); } } public int NetworktargetItemIndex { get { return targetItemIndex; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<int>(value, ref targetItemIndex, 8u); } } public override void StartQuest() { //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_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Expected I4, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected I4, but got Unknown //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Invalid comparison between Unknown and I4 //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Expected I4, but got Unknown //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Invalid comparison between Unknown and I4 //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Expected I4, but got Unknown //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { base.StartQuest(); return; } BasicPickupDropTable val = ScriptableObject.CreateInstance<BasicPickupDropTable>(); val.tier1Weight = 0f; val.tier2Weight = 0f; val.tier3Weight = 0f; ReadOnlySpan<ItemIndex> nonZeroIndicesSpan = ((ItemCollection)(ref base.body.inventory.effectiveItemStacks)).GetNonZeroIndicesSpan(); int i; for (i = 0; i < nonZeroIndicesSpan.Length; i++) { int num = (int)nonZeroIndicesSpan[i]; ItemDef itemDef = ItemCatalog.GetItemDef((ItemIndex)num); ItemTier tier = ItemCatalog.GetItemDef((ItemIndex)num).tier; if (itemDef.canRemove && !itemDef.hidden && !itemDef.ContainsTag((ItemTag)10) && !itemDef.ContainsTag((ItemTag)13)) { switch ((int)tier) { case 0: val.tier1Weight = 0.8f; break; case 1: val.tier2Weight = 0.2f; break; case 2: val.tier3Weight = 0.01f; break; } } } Log.Debug($"weights {val.tier1Weight} {val.tier2Weight} {val.tier3Weight}"); if (val.tier1Weight == 0f && val.tier2Weight == 0f && val.tier3Weight == 0f) { NetworktargetTier = 0; } else { NetworktargetTier = (int)PickupCatalog.GetPickupDef(((PickupDropTable)val).GeneratePickup(Run.instance.runRNG).pickupIndex).itemTier; } if (Scrap.specificItem.Value) { WeightedSelection<ItemIndex> val2 = new WeightedSelection<ItemIndex>(8); bool flag = false; ReadOnlySpan<ItemIndex> nonZeroIndicesSpan2 = ((ItemCollection)(ref base.body.inventory.effectiveItemStacks)).GetNonZeroIndicesSpan(); int num2 = default(int); for (i = 0; i < nonZeroIndicesSpan2.Length; i++) { ItemIndex val3 = nonZeroIndicesSpan2[i]; ItemDef itemDef2 = ItemCatalog.GetItemDef(val3); ItemTier tier2 = ItemCatalog.GetItemDef(val3).tier; if (((int)tier2 == 0 || (int)tier2 == 1 || (int)tier2 == 2) && itemDef2.canRemove && !itemDef2.hidden && itemDef2.DoesNotContainTag((ItemTag)10) && itemDef2.DoesNotContainTag((ItemTag)13)) { switch ((int)tier2) { case 0: num2 = 80; break; case 1: num2 = 20; break; case 2: num2 = 1; break; default: global::<PrivateImplementationDetails>.ThrowSwitchExpressionException(tier2); break; } int num3 = num2; val2.AddChoice(val3, (float)num3); flag = true; } } Log.Debug($"choice length {val2.choices.Length}"); if (flag) { NetworktargetItemIndex = (int)val2.Evaluate(Run.instance.treasureRng.nextNormalizedFloat); } } i = targetTier; string text = default(string); switch (i) { case 0: text = "Common"; break; case 1: text = "Uncommon"; break; case 2: text = "Legendary"; break; default: global::<PrivateImplementationDetails>.ThrowSwitchExpressionException(i); break; } string arg = text; base.NetworkQuestDescInternal = string.Format(QuestBase<Scrap>.instance.QuestDesc, arg); if (Scrap.specificItem.Value && targetItemIndex != -1) { base.NetworkQuestDescInternal = string.Format(QuestBase<Scrap>.instance.questDescSpecific, Language.GetString(ItemCatalog.GetItemDef((ItemIndex)targetItemIndex).nameToken)); } base.StartQuest(); } private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool flag = base.OnSerialize(writer, forceAll); if (forceAll) { writer.WritePackedUInt32((uint)targetTier); writer.WritePackedUInt32((uint)targetItemIndex); return true; } bool flag2 = false; if ((((NetworkBehaviour)this).syncVarDirtyBits & 4) != 0) { if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag2 = true; } writer.WritePackedUInt32((uint)targetTier); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 8) != 0) { if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag2 = true; } writer.WritePackedUInt32((uint)targetItemIndex); } if (!flag2) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); } return flag2 || flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { base.OnDeserialize(reader, initialState); if (initialState) { targetTier = (int)reader.ReadPackedUInt32(); targetItemIndex = (int)reader.ReadPackedUInt32(); return; } int num = (int)reader.ReadPackedUInt32(); if ((num & 4) != 0) { targetTier = (int)reader.ReadPackedUInt32(); } if ((num & 8) != 0) { targetItemIndex = (int)reader.ReadPackedUInt32(); } } } public class ScrapItemObjective : QuestObjectiveBase { private ScrapItemBehaviorBase scrapQuest; public override string GenerateString() { if (!Object.op_Implicit((Object)(object)scrapQuest)) { scrapQuest = (ScrapItemBehaviorBase)(object)((ObjectiveTracker)this).sourceDescriptor.source; questBehavior = scrapQuest; } int targetTier = scrapQuest.targetTier; string text = default(string); switch (targetTier) { case 0: text = "Common"; break; case 1: text = "Uncommon"; break; case 2: text = "Legendary"; break; default: global::<PrivateImplementationDetails>.ThrowSwitchExpressionException(targetTier); break; } string arg = text; string text2 = string.Format(QuestBase<Scrap>.instance.QuestDesc, arg); if (Scrap.specificItem.Value && scrapQuest.targetItemIndex != -1) { text2 = string.Format(QuestBase<Scrap>.instance.questDescSpecific, Language.GetString(ItemCatalog.GetItemDef((ItemIndex)scrapQuest.targetItemIndex).nameToken)); } if (!((Behaviour)scrapQuest).enabled) { ((ObjectiveTracker)this).retired = true; text2 = string.Format(QuestBase<Scrap>.instance.QuestDescRetired, arg); if (Scrap.specificItem.Value && scrapQuest.targetItemIndex != -1) { text2 = string.Format(QuestBase<Scrap>.instance.questDescSpecificRetired, Language.GetString(ItemCatalog.GetItemDef((ItemIndex)scrapQuest.targetItemIndex).nameToken)); } Object.Destroy((Object)(object)scrapQuest); } return GetPlayerName() + text2; } public override bool IsDirty() { return true; } } } namespace questshrine.content.componentns { public class QuestShrineComponent : NetworkBehaviour { private static readonly GameObject shrineUseEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/ShrineUseEffect.prefab").WaitForCompletion(); public PurchaseInteraction purchaseInteraction; public void Start() { if (NetworkServer.active && Object.op_Implicit((Object)(object)Run.instance)) { purchaseInteraction.SetAvailable(true); } ((UnityEvent<PayCostContext, PayCostResults>)(object)purchaseInteraction.onDetailedPurchaseServer).AddListener((UnityAction<PayCostContext, PayCostResults>)OnPurchase); } [Server] public void OnPurchase(PayCostContext context, PayCostResults payCostResults) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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_0048: 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) //IL_0052: 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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'System.Void questshrine.content.componentns.QuestShrineComponent::OnPurchase(RoR2.CostTypeDef/PayCostContext,RoR2.CostTypeDef/PayCostResults)' called on client"); return; } if (!NetworkServer.active) { Log.Warning("on purchase server called on client .,."); return; } EffectManager.SpawnEffect(shrineUseEffect, new EffectData { origin = ((Component)this).gameObject.transform.position, rotation = Quaternion.identity, scale = 3f, color = new Color32((byte)103, (byte)77, (byte)170, byte.MaxValue) }, true); purchaseInteraction.SetAvailable(false); ActivateQuest(context); } public void ActivateQuest(PayCostContext context) { WeightedSelection<QuestBase> val = new WeightedSelection<QuestBase>(8); QuestBase[] array = questshrine.instance.questObjectCatalog.Keys.ToArray(); foreach (QuestBase questBase in array) { float num = 10f; int num2 = QuestBehaviorBase.activeQuests.Count((QuestBehaviorBase quest) => quest.QuestBase == questBase && (Object)(object)quest.charMaster == (Object)(object)context.activatorMaster); Log.Debug(context.activatorMaster.GetBody().baseNameToken + " had " + num2 + " " + questBase.QuestName); for (int num3 = 0; num3 < num2; num3++) { num /= 2f; } if (questBase.Tags != null) { string[] tags = questBase.Tags; foreach (string text in tags) { if (!(text == "noStack")) { if (text == "requireScrapper" && !Object.op_Implicit((Object)(object)GameObject.Find("Scrapper(Clone)"))) { num = 0f; } } else if (num2 > 0) { num = 0f; } } } val.AddChoice(questBase, num); } QuestBase key = val.Evaluate(Run.instance.runRNG.nextNormalizedFloat); if (questshrine.instance.questObjectCatalog.TryGetValue(key, out var value)) { GameObject obj = Object.Instantiate<GameObject>(value); QuestBehaviorBase component = obj.GetComponent<QuestBehaviorBase>(); NetworkServer.Spawn(obj); component.NetworktargetMasterObject = ((Component)context.activatorMaster).gameObject; component.OnSyncTarget(((Component)context.activatorMaster).gameObject); } } 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) { } } } namespace questshrine.bases { public abstract class QuestBase<T> : QuestBase where T : QuestBase<T> { public static T instance { get; private set; } public QuestBase() { if (instance != null) { throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting QuestItemBase was instantiated twice"); } instance = this as T; } } public abstract class QuestBase { private static BasicPickupDropTable chest1DT = Addressables.LoadAssetAsync<BasicPickupDropTable>((object)RoR2_Base_Chest1.dtChest1_asset).WaitForCompletion(); public abstract string QuestName { get; } public abstract string QuestTitle { get; } public abstract string QuestDesc { get; } public virtual string QuestDescRetired => QuestDesc; public abstract Sprite QuestIcon { get; } public abstract Type Behavior { get; } public virtual bool useListeners { get; } public virtual string[] Tags { get; } public bool enabled => Utils.CheckboxConfig(((BaseUnityPlugin)questshrine.instance).Config.Bind<bool>("Quest Shrine - " + QuestName, "Enable " + QuestName, true, "")).Value; public virtual void Init(ConfigFile config) { if (enabled) { CreateConfig(config); Hooks(); } } public virtual void Hooks() { } public virtual void CreateConfig(ConfigFile config) { } public ConfigEntry<T> ConfigHelper<T>(string name, T value, string desc) { return ((BaseUnityPlugin)questshrine.instance).Config.Bind<T>("Quest Shrine - " + QuestName, name, value, desc); } public virtual void GiveReward(CharacterBody body) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_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_0064: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { PickupIndex pickupIndex = ((PickupDropTable)chest1DT).GeneratePickup(Run.instance.runRNG).pickupIndex; CreatePickupInfo val = default(CreatePickupInfo); ((CreatePickupInfo)(ref val)).pickup = new UniquePickup { pickupIndex = pickupIndex, decayValue = 0f }; PickupDropletController.CreatePickupDroplet(val, body.transform.position, Vector3.up * 20f); } } } public abstract class QuestBehaviorBase : NetworkBehaviour { public class QuestInterfaceListener : MonoBehaviour, IOnKilledOtherServerReceiver, IOnTakeDamageServerReceiver { public List<QuestBehaviorBase> questListeners = new List<QuestBehaviorBase>(); public void OnEnable() { ref IOnTakeDamageServerReceiver[] onTakeDamageReceivers = ref ((Component)this).gameObject.GetComponent<CharacterBody>().healthComponent.onTakeDamageReceivers; IOnTakeDamageServerReceiver val = (IOnTakeDamageServerReceiver)(object)this; ArrayUtils.ArrayAppend<IOnTakeDamageServerReceiver>(ref onTakeDamageReceivers, ref val); } public void OnKilledOtherServer(DamageReport damageReport) { foreach (QuestBehaviorBase questListener in questListeners) { questListener?.KilledOtherServer?.Invoke(damageReport); } } public void OnTakeDamageServer(DamageReport damageReport) { foreach (QuestBehaviorBase questListener in questListeners) { questListener?.TakeDamageServer?.Invoke(damageReport); } } } public static List<QuestBehaviorBase> activeQuests; public static int notificationEnum; [SyncVar] public string QuestDescInternal; [SyncVar(hook = "OnSyncTarget")] public GameObject targetMasterObject; public CharacterMaster charMaster; public QuestInterfaceListener listener; private int startingStage; private bool ranStart; protected Action<DamageReport> KilledOtherServer; protected Action<DamageReport> TakeDamageServer; private NetworkInstanceId ___targetMasterObjectNetId; private static int kRpcRpcStartQuest; private static int kRpcRpcRetire; private NetworkInstanceId ___targetMasterObjectNetId; private static int kRpcRpcStartQuest; private static int kRpcRpcRetire; private NetworkInstanceId ___targetMasterObjectNetId; private static int kRpcRpcStartQuest; private static int kRpcRpcRetire; private NetworkInstanceId ___targetMasterObjectNetId; private static int kRpcRpcStartQuest; private static int kRpcRpcRetire; private NetworkInstanceId ___targetMasterObjectNetId; private static int kRpcRpcStartQuest; private static int kRpcRpcRetire; public abstract QuestBase QuestBase { get; } public abstract Type ObjectiveType { get; } public CharacterBody body { get { if (Object.op_Implicit((Object)(object)charMaster)) { return charMaster.GetBody(); } if (Object.op_Implicit((Object)(object)targetMasterObject)) { charMaster = targetMasterObject.GetComponent<CharacterMaster>(); } CharacterMaster obj = charMaster; if (obj == null) { return null; } return obj.GetBody(); } } public string NetworkQuestDescInternal { get { return QuestDescInternal; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<string>(value, ref QuestDescInternal, 1u); } } public GameObject NetworktargetMasterObject { get { return targetMasterObject; } [param: In] set { ref GameObject reference = ref targetMasterObject; if (NetworkServer.localClientActive && !((NetworkBehaviour)this).syncVarHookGuard) { ((NetworkBehaviour)this).syncVarHookGuard = true; OnSyncTarget(value); ((NetworkBehaviour)this).syncVarHookGuard = false; } ((NetworkBehaviour)this).SetSyncVarGameObject(value, ref reference, 2u, ref this.___targetMasterObjectNetId); } } public string NetworkQuestDescInternal { get { return QuestDescInternal; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<string>(value, ref QuestDescInternal, 1u); } } public GameObject NetworktargetMasterObject { get { return targetMasterObject; } [param: In] set { ref GameObject reference = ref targetMasterObject; if (NetworkServer.localClientActive && !((NetworkBehaviour)this).syncVarHookGuard) { ((NetworkBehaviour)this).syncVarHookGuard = true; OnSyncTarget(value); ((NetworkBehaviour)this).syncVarHookGuard = false; } ((NetworkBehaviour)this).SetSyncVarGameObject(value, ref reference, 2u, ref this.___targetMasterObjectNetId); } } public string NetworkQuestDescInternal { get { return QuestDescInternal; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<string>(value, ref QuestDescInternal, 1u); } } public GameObject NetworktargetMasterObject { get { return targetMasterObject; } [param: In] set { ref GameObject reference = ref targetMasterObject; if (NetworkServer.localClientActive && !((NetworkBehaviour)this).syncVarHookGuard) { ((NetworkBehaviour)this).syncVarHookGuard = true; OnSyncTarget(value); ((NetworkBehaviour)this).syncVarHookGuard = false; } ((NetworkBehaviour)this).SetSyncVarGameObject(value, ref reference, 2u, ref this.___targetMasterObjectNetId); } } public string NetworkQuestDescInternal { get { return QuestDescInternal; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<string>(value, ref QuestDescInternal, 1u); } } public GameObject NetworktargetMasterObject { get { return targetMasterObject; } [param: In] set { ref GameObject reference = ref targetMasterObject; if (NetworkServer.localClientActive && !((NetworkBehaviour)this).syncVarHookGuard) { ((NetworkBehaviour)this).syncVarHookGuard = true; OnSyncTarget(value); ((NetworkBehaviour)this).syncVarHookGuard = false; } ((NetworkBehaviour)this).SetSyncVarGameObject(value, ref reference, 2u, ref this.___targetMasterObjectNetId); } } public string NetworkQuestDescInternal { get { return QuestDescInternal; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar<string>(value, ref QuestDescInternal, 1u); } } public GameObject NetworktargetMasterObject { get { return targetMasterObject; } [param: In] set { ref GameObject reference = ref targetMasterObject; if (NetworkServer.localClientActive && !((NetworkBehaviour)this).syncVarHookGuard) { ((NetworkBehaviour)this).syncVarHookGuard = true; OnSyncTarget(value); ((NetworkBehaviour)this).syncVarHookGuard = false; } ((NetworkBehaviour)this).SetSyncVarGameObject(value, ref reference, 2u, ref ___targetMasterObjectNetId); } } public void OnSyncTarget(GameObject newTarget) { this.NetworktargetMasterObject = newTarget; charMaster = (Object.op_Implicit((Object)(object)newTarget) ? newTarget.gameObject.GetComponent<CharacterMaster>() : null); Log.Debug($"syncing target {newTarget} {charMaster}"); if (!ranStart) { ranStart = true; StartQuest(); } } private void Awake() { activeQuests.Add(this); if (Object.op_Implicit((Object)(object)targetMasterObject)) { charMaster = targetMasterObject.GetComponent<CharacterMaster>(); } startingStage = Run.instance.stageClearCount; } [ClientRpc] public void RpcStartQuest() { Log.Debug("rpc ran"); } public virtual void StartQuest() { //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: 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: Expected O, but got Unknown //IL_00b8: Expected O, but got Unknown //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Expected O, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Expected O, but got Unknown Log.Debug(charMaster.GetBody().baseNameToken + " starting quest"); Log.Debug(LocalUserManager.GetFirstLocalUser().cachedMaster.GetBody().baseNameToken + " local player"); ObjectivePanelController.collectObjectiveSources += OnCollectObjectiveSources; CharacterMasterNotificationQueue notificationQueueForMaster = CharacterMasterNotificationQueue.GetNotificationQueueForMaster(charMaster); NotificationInfo val = new NotificationInfo((object)QuestBase, new TransformationInfo((TransformationType)notificationEnum, (object)null), new CustomOverrideInfo { titleText = QuestBase.QuestTitle, descriptionText = QuestDescInternal, iconColor = new Color(1f, 1f, 1f, 1f) }, false); if (Object.op_Implicit((Object)(object)notificationQueueForMaster)) { if (notificationQueueForMaster.notifications.Count != 0) { notificationQueueForMaster.notifications.Add(new TimedNotificationInfo { notification = val, startTime = Run.instance.fixedTime, duration = 3f }); } else { notificationQueueForMaster.PushNotification(val, 3f); } } charMaster.onBodyStart += AddListenersNewStageCheck; AddListenersNewStageCheck(body); } private void AddListenersNewStageCheck(CharacterBody body) { if (startingStage != Run.instance.stageClearCount) { Object.Destroy((Object)(object)this); } else if (QuestBase.useListeners) { if (((Component)body).gameObject.TryGetComponent<QuestInterfaceListener>(ref listener)) { listener.questListeners.Add(this); return; } listener = ((Component)body).gameObject.AddComponent<QuestInterfaceListener>(); listener.questListeners.Add(this); } } [ClientRpc] public void RpcRetire() { ((Behaviour)this).enabled = false; } public virtual void OnDisable() { ObjectivePanelController.collectObjectiveSources -= OnCollectObjectiveSources; if (QuestBase.useListeners) { listener.questListeners.Remove(this); if (listener.questListeners.Count == 0) { Object.Destroy((Object)(object)listener); } } charMaster.onBodyStart -= AddListenersNewStageCheck; activeQuests.Remove(this); } public virtual void OnCollectObjectiveSources(CharacterMaster master, List<ObjectiveSourceDescriptor> objectiveSourcesList) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0025: 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_0028: Unknown result type (might be due to invalid IL or missing references) ObjectiveSourceDescriptor item = new ObjectiveSourceDescriptor { master = master, objectiveType = ObjectiveType, source = (Object)(object)this }; objectiveSourcesList.Add(item); } static QuestBehaviorBase() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Expected O, but got Unknown //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Expected O, but got Unknown //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Expected O, but got Unknown //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Expected O, but got Unknown //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Expected O, but got Unknown //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Expected O, but got Unknown //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Expected O, but got Unknown activeQuests = new List<QuestBehaviorBase>(); notificationEnum = 1225; QuestBehaviorBase.kRpcRpcStartQuest = 1072638523; NetworkBehaviour.RegisterRpcDelegate(typeof(QuestBehaviorBase), QuestBehaviorBase.kRpcRpcStartQuest, new CmdDelegate(InvokeRpcRpcStartQuest)); QuestBehaviorBase.kRpcRpcRetire = -1981223370; NetworkBehaviour.RegisterRpcDelegate(typeof(QuestBehaviorBase), QuestBehaviorBase.kRpcRpcRetire, new CmdDelegate(InvokeRpcRpcRetire)); NetworkCRC.RegisterBehaviour("QuestBehaviorBase", 0); QuestBehaviorBase.kRpcRpcStartQuest = 1072638523; NetworkBehaviour.RegisterRpcDelegate(typeof(QuestBehaviorBase), QuestBehaviorBase.kRpcRpcStartQuest, new CmdDelegate(QuestBehaviorBase.InvokeRpcRpcStartQuest)); QuestBehaviorBase.kRpcRpcRetire = -1981223370; NetworkBehaviour.RegisterRpcDelegate(typeof(QuestBehaviorBase), QuestBehaviorBase.kRpcRpcRetire, new CmdDelegate(QuestBehaviorBase.InvokeRpcRpcRetire)); NetworkCRC.RegisterBehaviour("QuestBehaviorBase", 0); QuestBehaviorBase.kRpcRpcStartQuest = 1072638523; NetworkBehaviour.RegisterRpcDelegate(typeof(QuestBehaviorBase), QuestBehaviorBase.kRpcRpcStartQuest, new CmdDelegate(QuestBehaviorBase.InvokeRpcRpcStartQuest)); QuestBehaviorBase.kRpcRpcRetire = -1981223370; NetworkBehaviour.RegisterRpcDelegate(typeof(QuestBehaviorBase), QuestBehaviorBase.kRpcRpcRetire, new CmdDelegate(QuestBehaviorBase.InvokeRpcRpcRetire)); NetworkCRC.RegisterBehaviour("QuestBehaviorBase", 0); QuestBehaviorBase.kRpcRpcStartQuest = 1072638523; NetworkBehaviour.RegisterRpcDelegate(typeof(QuestBehaviorBase), QuestBehaviorBase.kRpcRpcStartQuest, new CmdDelegate(QuestBehaviorBase.InvokeRpcRpcStartQuest)); QuestBehaviorBase.kRpcRpcRetire = -1981223370; NetworkBehaviour.RegisterRpcDelegate(typeof(QuestBehaviorBase), QuestBehaviorBase.kRpcRpcRetire, new CmdDelegate(QuestBehaviorBase.InvokeRpcRpcRetire)); NetworkCRC.RegisterBehaviour("QuestBehaviorBase", 0); QuestBehaviorBase.kRpcRpcStartQuest = 1072638523; NetworkBehaviour.RegisterRpcDelegate(typeof(QuestBehaviorBase), QuestBehaviorBase.kRpcRpcStartQuest, new CmdDelegate(QuestBehaviorBase.InvokeRpcRpcStartQuest)); QuestBehaviorBase.kRpcRpcRetire = -1981223370; NetworkBehaviour.RegisterRpcDelegate(typeof(QuestBehaviorBase), QuestBehaviorBase.kRpcRpcRetire, new CmdDelegate(QuestBehaviorBase.InvokeRpcRpcRetire)); NetworkCRC.RegisterBehaviour("QuestBehaviorBase", 0); } private void UNetVersion() { } protected static void InvokeRpcRpcStartQuest(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcStartQuest called on server."); } else { ((QuestBehaviorBase)(object)obj).RpcStartQuest(); } } protected static void InvokeRpcRpcRetire(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcRetire called on server."); } else { ((QuestBehaviorBase)(object)obj).RpcRetire(); } } public void CallRpcStartQuest() { //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 RpcStartQuest called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)QuestBehaviorBase.kRpcRpcStartQuest); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcStartQuest"); } public void CallRpcRetire() { //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 RpcRetire called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)QuestBehaviorBase.kRpcRpcRetire); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcRetire"); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { if (forceAll) { writer.Write(QuestDescInternal); writer.Write(targetMasterObject); return true; } bool flag = false; if ((((NetworkBehaviour)this).syncVarDirtyBits & 1) != 0) { if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag = true; } writer.Write(QuestDescInternal); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 2) != 0) { if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag = true; } writer.Write(targetMasterObject); } if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); } return flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) if (initialState) { QuestDescInternal = reader.ReadString(); this.___targetMasterObjectNetId = reader.ReadNetworkId(); return; } int num = (int)reader.ReadPackedUInt32(); if ((num & 1) != 0) { QuestDescInternal = reader.ReadString(); } if ((num & 2) != 0) { OnSyncTarget(reader.ReadGameObject()); } } public override void PreStartClient() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) if (!((NetworkInstanceId)(ref this.___targetMasterObjectNetId)).IsEmpty()) { this.NetworktargetMasterObject = ClientScene.FindLocalObject(this.___targetMasterObjectNetId); } } protected static void InvokeRpcRpcStartQuest(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcStartQuest called on server."); } else { ((QuestBehaviorBase)(object)obj).RpcStartQuest(); } } protected static void InvokeRpcRpcRetire(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcRetire called on server."); } else { ((QuestBehaviorBase)(object)obj).RpcRetire(); } } public void CallRpcStartQuest() { //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 RpcStartQuest called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)QuestBehaviorBase.kRpcRpcStartQuest); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcStartQuest"); } public void CallRpcRetire() { //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 RpcRetire called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)QuestBehaviorBase.kRpcRpcRetire); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcRetire"); } protected static void InvokeRpcRpcStartQuest(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcStartQuest called on server."); } else { ((QuestBehaviorBase)(object)obj).RpcStartQuest(); } } protected static void InvokeRpcRpcRetire(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcRetire called on server."); } else { ((QuestBehaviorBase)(object)obj).RpcRetire(); } } public void CallRpcStartQuest() { //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 RpcStartQuest called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)QuestBehaviorBase.kRpcRpcStartQuest); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcStartQuest"); } public void CallRpcRetire() { //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 RpcRetire called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)QuestBehaviorBase.kRpcRpcRetire); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcRetire"); } protected static void InvokeRpcRpcStartQuest(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcStartQuest called on server."); } else { ((QuestBehaviorBase)(object)obj).RpcStartQuest(); } } protected static void InvokeRpcRpcRetire(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcRetire called on server."); } else { ((QuestBehaviorBase)(object)obj).RpcRetire(); } } public void CallRpcStartQuest() { //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 RpcStartQuest called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)QuestBehaviorBase.kRpcRpcStartQuest); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcStartQuest"); } public void CallRpcRetire() { //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 RpcRetire called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)QuestBehaviorBase.kRpcRpcRetire); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcRetire"); } protected static void InvokeRpcRpcStartQuest(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcStartQuest called on server."); } else { ((QuestBehaviorBase)(object)obj).RpcStartQuest(); } } protected static void InvokeRpcRpcRetire(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcRetire called on server."); } else { ((QuestBehaviorBase)(object)obj).RpcRetire(); } } public void CallRpcStartQuest() { //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 RpcStartQuest called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kRpcRpcStartQuest); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcStartQuest"); } public void CallRpcRetire() { //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 RpcRetire called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kRpcRpcRetire); val.Write(((Component)this).GetComponent<NetworkIdentity>().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcRetire"); } } public abstract class QuestObjectiveBase : ObjectiveTracker { public QuestBehaviorBase questBehavior; private string playerName; public string GetPlayerName() { if (playerName != null) { return playerName ?? ""; } QuestBehaviorBase questBehaviorBase = questBehavior; object obj; if (questBehaviorBase == null) { obj = null; } else { PlayerCharacterMasterController playerCharacterMasterController = questBehaviorBase.charMaster.playerCharacterMasterController; obj = ((playerCharacterMasterController != null) ? playerCharacterMasterController.GetDisplayName() : null); } playerName = (string)obj; if (LocalUserManager.GetFirstLocalUser().cachedMasterController.GetDisplayName() == playerName) { playerName = ""; } else { playerName = "(" + playerName + ") "; } return playerName ?? ""; } } }