using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: CompilationRelaxations(8)]
[assembly: AssemblyVersion("0.0.0.0")]
namespace EatToSell;
[BepInPlugin("cn.htf.eattosell", "Eat To Sell", "1.0.0")]
public class EatToSellPlugin : BaseUnityPlugin
{
internal static ManualLogSource Log;
private void Awake()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Expected O, but got Unknown
Log = ((BaseUnityPlugin)this).Logger;
try
{
Harmony val = new Harmony("cn.htf.eattosell");
Type type = AccessTools.TypeByName("Server");
if (type == null)
{
Log.LogError((object)"EatToSell: Server type not found");
return;
}
MethodInfo methodInfo = null;
MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
foreach (MethodInfo methodInfo2 in methods)
{
if (methodInfo2.Name.StartsWith("RpcLogic___FinishEatingCreature", StringComparison.Ordinal))
{
methodInfo = methodInfo2;
break;
}
}
if (methodInfo == null)
{
Log.LogError((object)"EatToSell: eating RPC not found");
return;
}
val.Patch((MethodBase)methodInfo, new HarmonyMethod(typeof(EatToSellPlugin).GetMethod("OnCreatureEaten", BindingFlags.Static | BindingFlags.NonPublic)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
Log.LogInfo((object)"Eat To Sell ready: eating food pays out its sell value.");
}
catch (Exception ex)
{
Log.LogError((object)("EatToSell init failed: " + ex));
}
}
private static void OnCreatureEaten([HarmonyArgument(0)] object creature)
{
try
{
if (creature == null)
{
return;
}
Type type = AccessTools.TypeByName("MoneyManager");
if (type == null)
{
return;
}
FieldInfo field = type.GetField("Instance", BindingFlags.Static | BindingFlags.Public);
object obj = ((field == null) ? null : field.GetValue(null));
if (obj == null)
{
return;
}
int num = 0;
Type type2 = creature.GetType();
while (type2 != null)
{
PropertyInfo property = type2.GetProperty("TotalWorth", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (property != null)
{
object value = property.GetValue(creature, null);
if (value is int)
{
num = (int)value;
}
break;
}
type2 = type2.BaseType;
}
MethodInfo methodInfo = null;
MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
foreach (MethodInfo methodInfo2 in methods)
{
if (methodInfo2.Name == "SellItem" && methodInfo2.GetParameters().Length == 1)
{
methodInfo = methodInfo2;
break;
}
}
if (methodInfo != null)
{
methodInfo.Invoke(obj, new object[1] { creature });
Log.LogInfo((object)("EatToSell: +$" + num));
}
}
catch (Exception ex)
{
Log.LogWarning((object)("EatToSell error: " + ex.Message));
}
}
}