using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.DroneCombiner;
using EntityStates.DroneScrapper;
using EntityStates.DroneVendor;
using EntityStates.Duplicator;
using EntityStates.MealPrep;
using EntityStates.Scrapper;
using Microsoft.CodeAnalysis;
using On.EntityStates.DroneVendor;
using On.EntityStates.Duplicator;
using On.RoR2;
using On.RoR2.EntityLogic;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.Components.Panel;
using RiskOfOptions.Options;
using RoR2;
using RoR2.EntityLogic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("ExchangeChanges")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+6d68c1d417bc55b8d1807356627973adbfda9a19")]
[assembly: AssemblyProduct("ExchangeChanges")]
[assembly: AssemblyTitle("ExchangeChanges")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace ExchangeChanges
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("FlyingComputer.ExchangeChanges", "ExchangeChanges", "1.1.4")]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
public class ExchangeChanges : BaseUnityPlugin
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_DropDroplet <>9__109_2;
public static hook_CallDelayed <>9__109_6;
internal void <Awake>b__109_2(orig_DropDroplet orig, Duplicating self)
{
orig.Invoke(self);
if (NetworkServer.active && self.hasDroppedDroplet)
{
((EntityState)self).GetComponent<PurchaseInteraction>().Networkavailable = true;
}
}
internal void <Awake>b__109_6(orig_CallDelayed orig, DelayedEvent self, float timer)
{
if (!((object)self).ToString().Contains("Duplicator"))
{
orig.Invoke(self, timer);
}
}
}
public const string PluginGUID = "FlyingComputer.ExchangeChanges";
public const string PluginAuthor = "FlyingComputer";
public const string PluginName = "ExchangeChanges";
public const string PluginVersion = "1.1.4";
private UnityAction ResetToDefault;
public static ConfigEntry<float> printerDelay { get; set; }
public static ConfigEntry<float> scrapperDelay { get; set; }
public static ConfigEntry<float> chanceDelay { get; set; }
public static ConfigEntry<float> mountainDelay { get; set; }
public static ConfigEntry<float> bazaarDelay { get; set; }
public static ConfigEntry<float> cleanseDelay { get; set; }
public static ConfigEntry<float> woodsDelay { get; set; }
public static ConfigEntry<float> bloodDelay { get; set; }
public static ConfigEntry<float> droneVendorDelay { get; set; }
public static ConfigEntry<float> droneScrapperStartupDelay { get; set; }
public static ConfigEntry<float> droneScrapperDelay { get; set; }
public static ConfigEntry<float> droneCombinerDelay { get; set; }
public static ConfigEntry<float> chefDelay { get; set; }
private static float baseDroneVendorDelay { get; set; }
private static float baseDroneVendorSpawnDelay { get; set; }
private static float baseDroneVendorIdleDelay { get; set; }
private static float baseDroneVendorTotalDelay { get; set; }
private static float baseDroneCombinerInitDelay { get; set; }
private static float baseDroneCombinerAbsorbDelay { get; set; }
private static float baseDroneCombinerAnimDelay { get; set; }
private static float baseDroneCombinerTotalDelay { get; set; }
private static float baseChefWaitDelay { get; set; }
private static float baseChefCookingDelay { get; set; }
private static float baseChefIdleDelay { get; set; }
private static float baseChefTotalDelay { get; set; }
private static bool hasGatheredDefaults { get; set; }
public void Awake()
{
//IL_0212: Unknown result type (might be due to invalid IL or missing references)
//IL_021c: Expected O, but got Unknown
//IL_0222: Unknown result type (might be due to invalid IL or missing references)
//IL_022c: Expected O, but got Unknown
//IL_0232: Unknown result type (might be due to invalid IL or missing references)
//IL_023c: Expected O, but got Unknown
//IL_0242: Unknown result type (might be due to invalid IL or missing references)
//IL_024c: Expected O, but got Unknown
//IL_0252: Unknown result type (might be due to invalid IL or missing references)
//IL_025c: Expected O, but got Unknown
//IL_0262: Unknown result type (might be due to invalid IL or missing references)
//IL_026c: Expected O, but got Unknown
//IL_0272: Unknown result type (might be due to invalid IL or missing references)
//IL_027c: Expected O, but got Unknown
//IL_0282: Unknown result type (might be due to invalid IL or missing references)
//IL_028c: Expected O, but got Unknown
//IL_0292: Unknown result type (might be due to invalid IL or missing references)
//IL_029c: Expected O, but got Unknown
//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
//IL_02ac: Expected O, but got Unknown
//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
//IL_02bc: Expected O, but got Unknown
//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
//IL_02cc: Expected O, but got Unknown
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02dc: Expected O, but got Unknown
//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
//IL_02ec: Expected O, but got Unknown
//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0304: Expected O, but got Unknown
//IL_0304: Unknown result type (might be due to invalid IL or missing references)
//IL_030e: Expected O, but got Unknown
//IL_0328: Unknown result type (might be due to invalid IL or missing references)
//IL_0332: Expected O, but got Unknown
//IL_0343: Unknown result type (might be due to invalid IL or missing references)
//IL_034d: Expected O, but got Unknown
//IL_0378: Unknown result type (might be due to invalid IL or missing references)
//IL_0382: Expected O, but got Unknown
//IL_0389: Unknown result type (might be due to invalid IL or missing references)
//IL_0393: Expected O, but got Unknown
//IL_039a: Unknown result type (might be due to invalid IL or missing references)
//IL_03a4: Expected O, but got Unknown
//IL_0361: Unknown result type (might be due to invalid IL or missing references)
//IL_0366: Unknown result type (might be due to invalid IL or missing references)
//IL_036c: Expected O, but got Unknown
//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
//IL_03d9: Expected O, but got Unknown
//IL_03e0: Unknown result type (might be due to invalid IL or missing references)
//IL_03ea: Expected O, but got Unknown
//IL_03f1: Unknown result type (might be due to invalid IL or missing references)
//IL_03fb: Expected O, but got Unknown
//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
//IL_03c3: Expected O, but got Unknown
ConfigEntry<float> printerDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Printer Delay", 0.6f, "Printer delay in seconds");
ConfigEntry<float> scrapperDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Scrapper Delay", 0.3f, "Scrapper startup delay in seconds");
ConfigEntry<float> scrapperItemDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Scrapper Item Delay", 0.3f, "Scrapper delay between item drops in seconds");
ConfigEntry<float> chanceDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Shrine of Chance Delay", 0.4f, "Shrine of Chance delay in seconds");
ConfigEntry<float> mountainDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Shrine of the Mountain Delay", 0.4f, "Shrine of the Mountain delay in seconds, for those with mods enabling more than one use");
ConfigEntry<float> bazaarDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Bazaar trade Delay", 0.5f, "Bazaar item trade delay in seconds");
ConfigEntry<float> cleanseDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Cleansing Pool Delay", 0.5f, "Cleansing Pool delay in seconds");
ConfigEntry<float> woodsDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Shrine of the Woods Delay", 0.5f, "Shrine of the Woods delay in seconds");
ConfigEntry<float> bloodDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Shrine of Blood Delay", 0.5f, "Shrine of Blood delay in seconds");
ConfigEntry<float> droneVendorDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Drone Vendor Delay", 1f, "Drone Vendor delay in seconds");
ConfigEntry<float> droneScrapperStartupDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Drone Scrapper Startup Delay", 0.1f, "Drone Scrapper startup delay in seconds");
ConfigEntry<float> droneScrapperDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Drone Scrapper Delay", 0.5f, "Drone Scrapper delay in seconds");
ConfigEntry<float> droneCombinerDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Drone Combiner Delay", 0.7f, "Drone Combiner Station delay in seconds");
ConfigEntry<float> chefDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Delay Settings", "Wandering Chef Delay", 0.5f, "Wandering Chef delay in seconds");
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(printerDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(scrapperDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(scrapperItemDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(chanceDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(mountainDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(bazaarDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(cleanseDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(woodsDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(bloodDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(droneVendorDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(droneScrapperStartupDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(droneScrapperDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(droneCombinerDelay));
ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(chefDelay));
ResetToDefault = (UnityAction)Delegate.Combine((Delegate?)(object)ResetToDefault, (Delegate?)(UnityAction)delegate
{
ModOptionPanelController obj3 = Object.FindObjectOfType<ModOptionPanelController>();
printerDelay.Value = 0.6f;
scrapperDelay.Value = 0.3f;
scrapperItemDelay.Value = 0.3f;
chanceDelay.Value = 0.4f;
mountainDelay.Value = 0.4f;
bazaarDelay.Value = 0.5f;
cleanseDelay.Value = 0.5f;
woodsDelay.Value = 0.5f;
bloodDelay.Value = 0.5f;
droneVendorDelay.Value = 1f;
droneScrapperStartupDelay.Value = 0.1f;
droneScrapperDelay.Value = 0.5f;
droneCombinerDelay.Value = 0.7f;
chefDelay.Value = 0.5f;
obj3.RevertChanges();
});
ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Reset delay settings to default:", "Delay Settings", "", "RESET", ResetToDefault));
ModSettingsManager.SetModDescription("Adjust the speed of repeatable interactions");
Stage.Start += (hook_Start)delegate(orig_Start orig, Stage self)
{
if (!hasGatheredDefaults)
{
baseDroneVendorDelay = DroneVendorDispatchState.duration;
baseDroneVendorSpawnDelay = DroneVendorDispatchState.spawnTime;
baseDroneVendorIdleDelay = DroneVendorAssumeIdle.duration;
baseDroneVendorTotalDelay = baseDroneVendorDelay + baseDroneVendorIdleDelay;
baseDroneCombinerInitDelay = DroneCombinerCombining.initialDelayDuration;
baseDroneCombinerAbsorbDelay = DroneCombinerCombining.droneAbsorbDelay;
baseDroneCombinerAnimDelay = DroneCombinerCombining.animDelayDuration;
baseDroneCombinerTotalDelay = baseDroneCombinerInitDelay + baseDroneCombinerAbsorbDelay + baseDroneCombinerAnimDelay;
baseChefWaitDelay = WaitToBeginCooking.duration;
baseChefCookingDelay = Cooking.duration;
baseChefIdleDelay = CookingToIdle.duration;
baseChefTotalDelay = baseChefWaitDelay + baseChefCookingDelay + baseChefIdleDelay;
hasGatheredDefaults = true;
}
Reflection.SetFieldValue<float>(typeof(Duplicating), "initialDelayDuration", printerDelay.Value / 2f);
Reflection.SetFieldValue<float>(typeof(Duplicating), "timeBetweenStartAndDropDroplet", printerDelay.Value / 2f);
Reflection.SetFieldValue<float>(typeof(WaitToBeginScrapping), "duration", scrapperDelay.Value / 2f);
Reflection.SetFieldValue<float>(typeof(Scrapping), "duration", scrapperDelay.Value / 2f);
Reflection.SetFieldValue<float>(typeof(ScrappingToIdle), "duration", scrapperItemDelay.Value * 2f);
DroneVendorDispatchState.duration = baseDroneVendorDelay / baseDroneVendorTotalDelay * droneVendorDelay.Value;
DroneVendorDispatchState.spawnTime = baseDroneVendorSpawnDelay / baseDroneVendorTotalDelay * droneVendorDelay.Value;
DroneVendorAssumeIdle.duration = baseDroneVendorIdleDelay / baseDroneVendorTotalDelay * droneVendorDelay.Value;
DroneScrapping.duration = droneScrapperDelay.Value;
WaitToBeginScrappingDrone.duration = droneScrapperStartupDelay.Value;
DroneCombinerCombining.initialDelayDuration = baseDroneCombinerInitDelay / baseDroneCombinerTotalDelay * droneCombinerDelay.Value;
DroneCombinerCombining.droneAbsorbDelay = baseDroneCombinerAbsorbDelay / baseDroneCombinerTotalDelay * droneCombinerDelay.Value;
DroneCombinerCombining.animDelayDuration = baseDroneCombinerAnimDelay / baseDroneCombinerTotalDelay * droneCombinerDelay.Value;
WaitToBeginCooking.duration = baseChefWaitDelay / baseChefTotalDelay * chefDelay.Value;
Cooking.duration = baseChefCookingDelay / baseChefTotalDelay * chefDelay.Value;
CookingToIdle.duration = baseChefIdleDelay / baseChefTotalDelay * chefDelay.Value;
return orig.Invoke(self);
};
object obj = <>c.<>9__109_2;
if (obj == null)
{
hook_DropDroplet val = delegate(orig_DropDroplet orig, Duplicating self)
{
orig.Invoke(self);
if (NetworkServer.active && self.hasDroppedDroplet)
{
((EntityState)self).GetComponent<PurchaseInteraction>().Networkavailable = true;
}
};
<>c.<>9__109_2 = val;
obj = (object)val;
}
Duplicating.DropDroplet += (hook_DropDroplet)obj;
PurchaseInteraction.OnInteractionBegin += (hook_OnInteractionBegin)delegate(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor interactor)
{
orig.Invoke(self, interactor);
if (self.displayNameToken == "SHRINE_BOSS_NAME")
{
((Component)self).GetComponent<ShrineBossBehavior>().refreshTimer = mountainDelay.Value;
}
if (self.displayNameToken == "SHRINE_CHANCE_NAME")
{
((Component)self).GetComponent<ShrineChanceBehavior>().refreshTimer = chanceDelay.Value;
}
};
ShrineHealingBehavior.AddShrineStack += (hook_AddShrineStack)delegate(orig_AddShrineStack orig, ShrineHealingBehavior self, Interactor interactor)
{
orig.Invoke(self, interactor);
self.refreshTimer = woodsDelay.Value;
};
ShrineBloodBehavior.AddShrineStack += (hook_AddShrineStack)delegate(orig_AddShrineStack orig, ShrineBloodBehavior self, Interactor interactor)
{
orig.Invoke(self, interactor);
self.refreshTimer = bloodDelay.Value;
};
object obj2 = <>c.<>9__109_6;
if (obj2 == null)
{
hook_CallDelayed val2 = delegate(orig_CallDelayed orig, DelayedEvent self, float timer)
{
if (!((object)self).ToString().Contains("Duplicator"))
{
orig.Invoke(self, timer);
}
};
<>c.<>9__109_6 = val2;
obj2 = (object)val2;
}
DelayedEvent.CallDelayed += (hook_CallDelayed)obj2;
TimerQueue.CreateTimer += (hook_CreateTimer)delegate(orig_CreateTimer orig, TimerQueue self, float time, Action action)
{
//IL_0027: 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_0054: Unknown result type (might be due to invalid IL or missing references)
if (action.Target.ToString().Contains("LunarCauldron"))
{
return orig.Invoke(self, bazaarDelay.Value, action);
}
return action.Target.ToString().Contains("ShrineCleanse") ? orig.Invoke(self, cleanseDelay.Value, action) : orig.Invoke(self, time, action);
};
DroneVendorDispatchState.OnEnter += (hook_OnEnter)delegate(orig_OnEnter orig, DroneVendorDispatchState self)
{
((EntityState)self).GetModelAnimator().speed = baseDroneVendorTotalDelay / droneVendorDelay.Value;
orig.Invoke(self);
};
DroneVendorAssumeIdle.OnEnter += (hook_OnEnter)delegate(orig_OnEnter orig, DroneVendorAssumeIdle self)
{
((EntityState)self).GetModelAnimator().speed = baseDroneVendorTotalDelay / droneVendorDelay.Value;
orig.Invoke(self);
};
}
}
internal static class Log
{
internal static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void LogDebug(object data)
{
_logSource.LogDebug(data);
}
internal static void LogError(object data)
{
_logSource.LogError(data);
}
internal static void LogFatal(object data)
{
_logSource.LogFatal(data);
}
internal static void LogInfo(object data)
{
_logSource.LogInfo(data);
}
internal static void LogMessage(object data)
{
_logSource.LogMessage(data);
}
internal static void LogWarning(object data)
{
_logSource.LogWarning(data);
}
}
}