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.Logging;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API;
using RoR2;
using UnityEngine;
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("StrangeDrifter")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+5962c17d77f9ef77b4e517f170c33bdd8fbcab8d")]
[assembly: AssemblyProduct("StrangeDrifter")]
[assembly: AssemblyTitle("StrangeDrifter")]
[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 StrangeDrifter
{
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);
}
}
public static class Stats
{
public static void ApplyStrangeScrapStats(CharacterBody body, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)body.inventory))
{
int itemCountEffective = body.inventory.GetItemCountEffective(Items.StatsFromScrap);
args.moveSpeedMultAdd += GetWhiteScrapStats(body, args, itemCountEffective);
args.baseRegenAdd += GetGreenScrapStats(body, args, itemCountEffective);
args.attackSpeedMultAdd += GetRedScrapStats(body, args, itemCountEffective);
}
}
private static float GetWhiteScrapStats(CharacterBody body, StatHookEventArgs args, int statsFromScrapCount)
{
int itemCountEffective = body.inventory.GetItemCountEffective(Items.ScrapWhiteSuppressed);
if (itemCountEffective <= 0 || statsFromScrapCount <= 0)
{
return 0f;
}
return 0.06f * (float)itemCountEffective * (float)statsFromScrapCount;
}
private static float GetGreenScrapStats(CharacterBody body, StatHookEventArgs args, int statsFromScrapCount)
{
int itemCountEffective = body.inventory.GetItemCountEffective(Items.ScrapGreenSuppressed);
if (itemCountEffective <= 0 || statsFromScrapCount <= 0)
{
return 0f;
}
return (float)(statsFromScrapCount * itemCountEffective) * 3f;
}
private static float GetRedScrapStats(CharacterBody body, StatHookEventArgs args, int statsFromScrapCount)
{
int itemCountEffective = body.inventory.GetItemCountEffective(Items.ScrapRedSuppressed);
if (itemCountEffective <= 0 || statsFromScrapCount <= 0)
{
return 0f;
}
return (float)(statsFromScrapCount * itemCountEffective) * 0.3f;
}
}
[BepInPlugin("Bismuth.StrangeDrifter", "StrangeDrifter", "1.0.0")]
public class StrangeDrifter : BaseUnityPlugin
{
[CompilerGenerated]
private static class <>O
{
public static StatHookEventHandler <0>__ApplyStrangeScrapStats;
}
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_UpdateBuffCounts <>9__7_0;
internal void <Awake>b__7_0(orig_UpdateBuffCounts orig, DrifterTrashToTreasureController self)
{
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: 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)
orig.Invoke(self);
if (NetworkServer.active)
{
CharacterBody body = self.body;
if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory))
{
int num = body.inventory.GetItemCountEffective(Items.ScrapWhite) + body.inventory.GetItemCountEffective(Items.ScrapWhiteSuppressed);
body.SetBuffCount(Buffs.TrashToTreasureWhite.buffIndex, num);
int num2 = body.inventory.GetItemCountEffective(Items.ScrapGreen) + body.inventory.GetItemCountEffective(Items.RegeneratingScrap) + body.inventory.GetItemCountEffective(Items.ScrapGreenSuppressed);
body.SetBuffCount(Buffs.TrashToTreasureGreen.buffIndex, num2);
int num3 = body.inventory.GetItemCountEffective(Items.ScrapRed) + body.inventory.GetItemCountEffective(Items.ScrapRedSuppressed);
body.SetBuffCount(Buffs.TrashToTreasureRed.buffIndex, num3);
body.RecalculateStats();
}
}
}
}
public const string PluginGUID = "Bismuth.StrangeDrifter";
public const string PluginAuthor = "Bismuth";
public const string PluginName = "StrangeDrifter";
public const string PluginVersion = "1.0.0";
private const ItemTier whiteTier = 0;
private const ItemTier greenTier = 1;
private const ItemTier redTier = 2;
public void Awake()
{
//IL_0032: 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_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Expected O, but got Unknown
//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_00a2: Expected O, but got Unknown
ItemDef val = LegacyResourcesAPI.Load<ItemDef>("ItemDefs/ScrapWhiteSuppressed");
ItemDef val2 = LegacyResourcesAPI.Load<ItemDef>("ItemDefs/ScrapGreenSuppressed");
ItemDef val3 = LegacyResourcesAPI.Load<ItemDef>("ItemDefs/ScrapRedSuppressed");
if (Object.op_Implicit((Object)(object)val))
{
val.tier = (ItemTier)0;
val.deprecatedTier = (ItemTier)0;
}
if (Object.op_Implicit((Object)(object)val2))
{
val2.tier = (ItemTier)1;
val2.deprecatedTier = (ItemTier)1;
}
if (Object.op_Implicit((Object)(object)val3))
{
val3.tier = (ItemTier)2;
val3.deprecatedTier = (ItemTier)2;
}
object obj = <>O.<0>__ApplyStrangeScrapStats;
if (obj == null)
{
StatHookEventHandler val4 = Stats.ApplyStrangeScrapStats;
<>O.<0>__ApplyStrangeScrapStats = val4;
obj = (object)val4;
}
RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj;
object obj2 = <>c.<>9__7_0;
if (obj2 == null)
{
hook_UpdateBuffCounts val5 = delegate(orig_UpdateBuffCounts orig, DrifterTrashToTreasureController self)
{
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: 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)
orig.Invoke(self);
if (NetworkServer.active)
{
CharacterBody body = self.body;
if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory))
{
int num = body.inventory.GetItemCountEffective(Items.ScrapWhite) + body.inventory.GetItemCountEffective(Items.ScrapWhiteSuppressed);
body.SetBuffCount(Buffs.TrashToTreasureWhite.buffIndex, num);
int num2 = body.inventory.GetItemCountEffective(Items.ScrapGreen) + body.inventory.GetItemCountEffective(Items.RegeneratingScrap) + body.inventory.GetItemCountEffective(Items.ScrapGreenSuppressed);
body.SetBuffCount(Buffs.TrashToTreasureGreen.buffIndex, num2);
int num3 = body.inventory.GetItemCountEffective(Items.ScrapRed) + body.inventory.GetItemCountEffective(Items.ScrapRedSuppressed);
body.SetBuffCount(Buffs.TrashToTreasureRed.buffIndex, num3);
body.RecalculateStats();
}
}
};
<>c.<>9__7_0 = val5;
obj2 = (object)val5;
}
DrifterTrashToTreasureController.UpdateBuffCounts += (hook_UpdateBuffCounts)obj2;
}
}
}