using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using Jotunn;
using Jotunn.Configs;
using Jotunn.Managers;
using Jotunn.Utils;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Slayer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Slayer")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Slayer;
[BepInPlugin("neithar.Slayer", "Slayer", "1.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
internal class Slayer : BaseUnityPlugin
{
[HarmonyPatch(typeof(Character), "Damage")]
public static class Slayer_Handler
{
private static void Prefix(Character __instance, HitData hit)
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Invalid comparison between Unknown and I4
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
Character attacker = hit.GetAttacker();
Player val = (Player)(object)((attacker is Player) ? attacker : null);
if (val != null)
{
ItemData currentWeapon = ((Humanoid)val).GetCurrentWeapon();
if (currentWeapon != null && (int)currentWeapon.m_shared.m_itemType == 14 && !(((DamageTypes)(ref hit.m_damage)).GetTotalDamage() <= 0f))
{
((Character)val).RaiseSkill(SlayerType, 0.5f);
}
}
}
}
[HarmonyPatch(typeof(ItemData), "GetDamage", new Type[]
{
typeof(int),
typeof(float)
})]
public static class Slayer_ItemDamage
{
private static void Postfix(ItemData __instance, ref DamageTypes __result)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Invalid comparison between Unknown and I4
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
Player localPlayer = Player.m_localPlayer;
if (!((Object)(object)localPlayer == (Object)null) && (int)__instance.m_shared.m_itemType == 14)
{
float skillFactor = ((Character)localPlayer).GetSkillFactor(SlayerType);
float num = 1f + skillFactor * 0.5f;
((DamageTypes)(ref __result)).Modify(num);
}
}
}
public const string PluginGUID = "neithar.Slayer";
public const string PluginName = "Slayer";
public const string PluginVersion = "1.0.0";
public static SkillType SlayerType;
private string resourceName = "Slayer.Assets.krom_no_bg.png";
private void Awake()
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: 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_006d: Expected O, but got Unknown
//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_0082: Unknown result type (might be due to invalid IL or missing references)
Texture2D val = LoadEmbeddedTexture(resourceName);
if ((Object)(object)val == (Object)null)
{
Logger.LogError((object)"Texture load failed!");
return;
}
Sprite icon = TextureToSprite(val);
SkillConfig val2 = new SkillConfig
{
Identifier = "neithar.Slayer",
Name = "Slayer",
Description = "Deal more damage with two-handed and dual weapons",
Icon = icon,
IncreaseStep = 1f
};
SlayerType = SkillManager.Instance.AddSkill(val2);
new Harmony("neithar.Slayer").PatchAll();
}
private Texture2D LoadEmbeddedTexture(string resourceName)
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Expected O, but got Unknown
Assembly executingAssembly = Assembly.GetExecutingAssembly();
using Stream stream = executingAssembly.GetManifestResourceStream(resourceName);
if (stream == null)
{
Logger.LogError((object)("Resource not found: " + resourceName));
return null;
}
byte[] array = new byte[stream.Length];
stream.Read(array, 0, array.Length);
Texture2D val = new Texture2D(2, 2);
if (!AssetUtils.LoadImage(val, array))
{
Logger.LogError((object)"Failed to load image data into texture");
return null;
}
return val;
}
private Sprite TextureToSprite(Texture2D texture)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
return Sprite.Create(texture, new Rect(0f, 0f, (float)((Texture)texture).width, (float)((Texture)texture).height), new Vector2(0.5f, 0.5f));
}
}