Decompiled source of SimsStartAtLevel1 v1.1.0

SimsStartAtLevel1/SimsStartAtLevel1.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("SimsStartAtLevel1")]
[assembly: AssemblyDescription("Newly created Erenshor SimPlayers start at level 1")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SimsStartAtLevel1")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("24d0c162-35eb-49cc-b21f-0da653d2f5b1")]
[assembly: AssemblyFileVersion("1.1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.1.0.0")]
namespace LevelOneSims;

[BepInPlugin("com.erenshor.levelonesims", "Level 1 Sims", "1.1.0")]
public class LevelOneSimsPlugin : BaseUnityPlugin
{
	private static ConfigEntry<string> _cfgExcludedSims;

	private static readonly HashSet<string> _excluded = new HashSet<string>(StringComparer.OrdinalIgnoreCase);

	private void Awake()
	{
		_cfgExcludedSims = ((BaseUnityPlugin)this).Config.Bind<string>("General", "ExcludedSims", "", "Comma-separated sim names that keep their designed starting level instead of being forced to 1 (example: GM-Burgee, Paul). Case-insensitive; spaces around commas are ignored. NOTE: this only affects sims being created fresh (no save file on disk yet). A sim that already exists at level 1 keeps its save until that file is deleted and the sim is recreated.");
		ParseExcluded();
		_cfgExcludedSims.SettingChanged += delegate
		{
			ParseExcluded();
		};
		Harmony.CreateAndPatchAll(typeof(LevelOneSimsPlugin), (string)null);
		((BaseUnityPlugin)this).Logger.LogInfo((object)("All newly created sims will start at level 1." + ((_excluded.Count > 0) ? (" Excluded: " + string.Join(", ", _excluded) + ".") : "")));
	}

	private static void ParseExcluded()
	{
		_excluded.Clear();
		string value = _cfgExcludedSims.Value;
		if (string.IsNullOrEmpty(value))
		{
			return;
		}
		string[] array = value.Split(new char[1] { ',' });
		for (int i = 0; i < array.Length; i++)
		{
			string text = array[i].Trim();
			if (text.Length > 0)
			{
				_excluded.Add(text);
			}
		}
	}

	[HarmonyPatch(typeof(SimPlayerDataManager), "CheckLoadData")]
	[HarmonyPrefix]
	public static void CheckLoadData_Prefix(string _name, ref int _level)
	{
		if (_excluded.Count <= 0 || _name == null || !_excluded.Contains(_name))
		{
			_level = 1;
		}
	}
}