using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.AddressableAssets;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.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 Mod
{
public class HealthChopper : MonoBehaviour
{
public static HealthChopper Instance;
public NewMovement player;
private float timer = 0f;
public List<EnemyIdentifier> enemies = new List<EnemyIdentifier>();
public bool CheckForPlayer => Object.op_Implicit((Object)(object)MonoSingleton<NewMovement>.instance);
public NewMovement GetPlayer => MonoSingleton<NewMovement>.instance;
public float DivideTime => 1f / Plugin.damagePerSecond.Value;
public void Awake()
{
Instance = this;
}
public void Update()
{
if (Object.op_Implicit((Object)(object)player))
{
CleanEnemies();
if ((MonoSingleton<StatsManager>.instance.timer && !Plugin.damageWhenEnemies.Value) || enemies.Count > 0)
{
UpdateTimer();
}
}
else if (CheckForPlayer)
{
player = GetPlayer;
ReloadConfig();
timer = 0f;
}
}
public void ReloadConfig()
{
Plugin.config.Reload();
}
public void CleanEnemies()
{
foreach (EnemyIdentifier item in enemies.ToList())
{
if (!Object.op_Implicit((Object)(object)item) || item.Dead || !((Component)item).gameObject.activeInHierarchy)
{
enemies.Remove(item);
}
}
}
public void UpdateTimer()
{
timer += Time.deltaTime;
if (Time.timeScale == 0f)
{
timer = 0f;
}
if (timer > DivideTime)
{
timer = Mathf.Min(timer - DivideTime, DivideTime);
MonoSingleton<NewMovement>.instance.GetHurt(1, false, 1f, false, false, 0.35f, false);
}
}
}
[HarmonyPatch(typeof(EnemyIdentifier), "OnEnable")]
public static class EnemyPatch
{
public static void Prefix(EnemyIdentifier __instance)
{
HealthChopper.Instance.enemies.Add(__instance);
}
}
[BepInPlugin("duviz.ThirstForBlood", "ThirstForBlood", "0.1.0")]
public class Plugin : BaseUnityPlugin
{
public static Plugin instance;
public static ConfigFile config;
public static ConfigEntry<float> damagePerSecond;
public static ConfigEntry<bool> damageWhenEnemies;
private FileSystemWatcher watcher;
public void Awake()
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
instance = this;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
config = ((BaseUnityPlugin)this).Config;
damagePerSecond = config.Bind<float>("General", "Damage per second", 3f, (ConfigDescription)null);
damageWhenEnemies = config.Bind<bool>("General", "Damage when enemies", false, (ConfigDescription)null);
new Harmony("duviz.ThirstForBlood").PatchAll();
}
public void Start()
{
((Component)this).gameObject.AddComponent<HealthChopper>();
watcher = new FileSystemWatcher(Path.GetDirectoryName(((BaseUnityPlugin)this).Config.ConfigFilePath), Path.GetFileName(((BaseUnityPlugin)this).Config.ConfigFilePath));
watcher.Changed += delegate
{
((BaseUnityPlugin)this).Config.Reload();
};
watcher.EnableRaisingEvents = true;
}
public static T Ass<T>(string path)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return Addressables.LoadAssetAsync<T>((object)path).WaitForCompletion();
}
public static void LogInfo(object msg)
{
((BaseUnityPlugin)instance).Logger.LogInfo(msg);
}
public static void LogWarning(object msg)
{
((BaseUnityPlugin)instance).Logger.LogWarning(msg);
}
public static void LogError(object msg)
{
((BaseUnityPlugin)instance).Logger.LogError(msg);
}
}
public class PluginInfo
{
public const string GUID = "duviz.ThirstForBlood";
public const string Name = "ThirstForBlood";
public const string Version = "0.1.0";
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
internal IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}