using System;
using System.Collections.Generic;
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 HarmonyLib;
using Microsoft.CodeAnalysis;
[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.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: AssemblyCompany("BalancedCaravans")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Example Mod for Against The Storm")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+d6ada77561ccfe85ca4c2c807fd24c8c3fc0d51c")]
[assembly: AssemblyProduct("BalancedCaravans")]
[assembly: AssemblyTitle("BalancedCaravans")]
[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 BalancedCaravans
{
[BepInPlugin("BalancedCaravans", "Balanced Caravans", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
public static ConfigEntry<bool> IsEnabled;
private void Awake()
{
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Expected O, but got Unknown
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Expected O, but got Unknown
IsEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("BalancedCaravans", "BalancedCaravans", true, "If true, distributes caravan villagers as evenly as possible (e.g., 3-3-2 instead of 5-2-1).");
Harmony val = new Harmony("BalancedCaravans");
MethodInfo methodInfo = AccessTools.Method("Eremite.Services.Meta.CaravanGenerator:GenerateVillagerFrom", (Type[])null, (Type[])null);
MethodInfo methodInfo2 = AccessTools.Method(typeof(Plugin), "EqualizeDistribution", (Type[])null, (Type[])null);
if (methodInfo != null)
{
val.Patch((MethodBase)methodInfo, (HarmonyMethod)null, new HarmonyMethod(methodInfo2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
((BaseUnityPlugin)this).Logger.LogInfo((object)"Balanced Caravans: Patch applied. Config file name: BalancedCaravans.cfg");
}
else
{
((BaseUnityPlugin)this).Logger.LogError((object)"Balanced Caravans: Failed to find the target method. Ensure the game version is compatible.");
}
}
private static void EqualizeDistribution(List<string> races, ref List<string> __result)
{
if (!IsEnabled.Value || __result == null || races == null || races.Count == 0)
{
return;
}
int count = __result.Count;
int count2 = races.Count;
int num = count / count2;
int num2 = count % count2;
List<string> list = new List<string>();
foreach (string race in races)
{
int num3 = num;
if (num2 > 0)
{
num3++;
num2--;
}
for (int i = 0; i < num3; i++)
{
list.Add(race);
}
}
__result = list;
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "BalancedCaravans";
public const string PLUGIN_NAME = "BalancedCaravans";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}