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;
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("LzD_StationsCustomRanges")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LzD_StationsCustomRanges")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4e5ca6f5-3af3-4caa-95b6-2f8932e2492e")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace LzD_StationsCustomRanges;
[BepInPlugin("lzd_stationscustomranges", "LzD Stations Custom Ranges", "1.1.14")]
[BepInProcess("valheim.exe")]
public class LzD_StationsCustomRanges : BaseUnityPlugin
{
[HarmonyPatch(typeof(CraftingStation), "UpdateKnownStationsInRange")]
private static class CraftingStation_UpdateKnownStationsInRange_Patch
{
private static void Postfix(List<CraftingStation> ___m_allStations)
{
if (!modEnabled.Value)
{
return;
}
foreach (CraftingStation ___m_allStation in ___m_allStations)
{
if (___m_allStation.m_name == "$piece_workbench")
{
if (workbenchEnabled.Value)
{
changeStationRange(___m_allStation, workbenchRange.Value);
changeStationRangePerLevel(___m_allStation, workbenchRangeLvl.Value);
}
}
else if (___m_allStation.m_name == "$piece_forge")
{
if (forgeEnabled.Value)
{
changeStationRange(___m_allStation, forgeRange.Value);
changeStationRangePerLevel(___m_allStation, forgeRangeLvl.Value);
}
}
else if (___m_allStation.m_name == "$piece_stonecutter")
{
if (stonecutterEnabled.Value)
{
changeStationRange(___m_allStation, stonecutterRange.Value);
}
}
else if (___m_allStation.m_name == "$piece_blackforge")
{
if (blackforgeEnabled.Value)
{
changeStationRange(___m_allStation, blackforgeRange.Value);
changeStationRangePerLevel(___m_allStation, blackforgeRangeLvl.Value);
}
}
else if (___m_allStation.m_name == "$piece_artisanstation")
{
if (artisanEnabled.Value)
{
changeStationRange(___m_allStation, artisanTableRange.Value);
}
}
else if (___m_allStation.m_name == "$piece_magetable" && galdrEnabled.Value)
{
changeStationRange(___m_allStation, galdrTableRange.Value);
changeStationRangePerLevel(___m_allStation, galdrTableRangeLvl.Value);
}
}
}
private static void changeStationRange(CraftingStation station, float newRange)
{
if (globalEnabled.Value)
{
newRange = globalRange.Value;
}
if (station.m_rangeBuild != newRange && rangeEnabled.Value)
{
station.m_rangeBuild = newRange;
Log($"Changing {station.m_name} range build to: {newRange}");
}
}
private static void changeStationRangePerLevel(CraftingStation station, float newRangePerLevel)
{
if (globalEnabled.Value)
{
newRangePerLevel = globalRangePerLevel.Value;
}
if (station.m_extraRangePerLevel != newRangePerLevel && rangeLvlEnabled.Value)
{
station.m_extraRangePerLevel = newRangePerLevel;
Log($"Changing {station.m_name} extra range per level to: {newRangePerLevel}");
}
}
}
[HarmonyPatch(typeof(StationExtension), "Awake")]
private static class StationExtension_Awake_Patch
{
private static void Postfix(ref float ___m_maxStationDistance)
{
if (___m_maxStationDistance != extMaxDist.Value && extMaxDistEnabled.Value && modEnabled.Value)
{
___m_maxStationDistance = extMaxDist.Value;
Log($"Changing extension max distance to: {___m_maxStationDistance}");
}
}
}
public const string modID = "lzd_stationscustomranges";
public const string modName = "LzD Stations Custom Ranges";
public const string modVersion = "1.1.14";
private readonly Harmony harmony = new Harmony("lzd_stationscustomranges");
private static ConfigEntry<bool> modEnabled;
private static ConfigEntry<bool> logsEnabled;
private static ConfigEntry<bool> rangeEnabled;
private static ConfigEntry<bool> rangeLvlEnabled;
private static ConfigEntry<bool> extMaxDistEnabled;
private static ConfigEntry<bool> globalEnabled;
private static ConfigEntry<float> globalRange;
private static ConfigEntry<float> globalRangePerLevel;
private static ConfigEntry<bool> workbenchEnabled;
private static ConfigEntry<float> workbenchRange;
private static ConfigEntry<float> workbenchRangeLvl;
private static ConfigEntry<bool> forgeEnabled;
private static ConfigEntry<float> forgeRange;
private static ConfigEntry<float> forgeRangeLvl;
private static ConfigEntry<bool> stonecutterEnabled;
private static ConfigEntry<float> stonecutterRange;
private static ConfigEntry<bool> blackforgeEnabled;
private static ConfigEntry<float> blackforgeRange;
private static ConfigEntry<float> blackforgeRangeLvl;
private static ConfigEntry<bool> artisanEnabled;
private static ConfigEntry<float> artisanTableRange;
private static ConfigEntry<bool> galdrEnabled;
private static ConfigEntry<float> galdrTableRange;
private static ConfigEntry<float> galdrTableRangeLvl;
private static ConfigEntry<float> extMaxDist;
private void Awake()
{
modEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("1 - General", "a. Mod enabled", true, "Enable or disable the mod completely");
logsEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("1 - General", "b. Logs enabled", false, "Enable or disable logs completely");
rangeEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("1 - General", "c. Base range mods enabled", true, "Enable base or disable range customizations completely");
rangeLvlEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("1 - General", "d. Range per level mods enabled", true, "Enable or disable range per level customizations completely");
globalEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("2 - Global", "a. Global settings enabled", false, "Enable or disable settings that apply to all stations");
globalRange = ((BaseUnityPlugin)this).Config.Bind<float>("2 - Global", "b. Global base range", 30f, "Base range to apply to all stations");
globalRangePerLevel = ((BaseUnityPlugin)this).Config.Bind<float>("2 - Global", "c. Global range per level", 6f, "Range per level to apply to all stations");
workbenchEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("3 - Workbench", "a. Enabled", true, "Enable or disable workbench modifications completely");
workbenchRange = ((BaseUnityPlugin)this).Config.Bind<float>("3 - Workbench", "b. Base range", 30f, "Workbench base range");
workbenchRangeLvl = ((BaseUnityPlugin)this).Config.Bind<float>("3 - Workbench", "c. Range per level", 6f, "Workbench range per level");
forgeEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("4 - Forge", "a. Enabled", true, "Enable or disable forge modifications completely");
forgeRange = ((BaseUnityPlugin)this).Config.Bind<float>("4 - Forge", "b. Base range", 30f, "Forge base range");
forgeRangeLvl = ((BaseUnityPlugin)this).Config.Bind<float>("4 - Forge", "c. Range per level", 4f, "Forge range per level");
stonecutterEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("5 - Stonecutter", "a. Enabled", true, "Enable or disable stonecutter modifications completely");
stonecutterRange = ((BaseUnityPlugin)this).Config.Bind<float>("5 - Stonecutter", "b. Base range", 54f, "Stonecutter base range");
blackforgeEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("6 - Blackforge", "a. Enabled", true, "Enable or disable blackforge modifications completely");
blackforgeRange = ((BaseUnityPlugin)this).Config.Bind<float>("6 - Blackforge", "b. Base range", 40f, "Blackforge base range");
blackforgeRangeLvl = ((BaseUnityPlugin)this).Config.Bind<float>("6 - Blackforge", "c. Range per level", 7f, "Blackforge range per level");
artisanEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("7 - Artisan Table", "a. Enabled", true, "Enable or disable artisan table modifications completely");
artisanTableRange = ((BaseUnityPlugin)this).Config.Bind<float>("7 - Artisan Table", "b. Base range", 54f, "Artisan table base range");
galdrEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("8 - Galdr Table", "a. Enabled", true, "Enable or disable galdr table modifications completely");
galdrTableRange = ((BaseUnityPlugin)this).Config.Bind<float>("8 - Galdr Table", "b. Base range", 40f, "Galdr table base range");
galdrTableRangeLvl = ((BaseUnityPlugin)this).Config.Bind<float>("8 - Galdr Table", "c. Range per level", 7f, "Galdr table range per level");
extMaxDistEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("9 - Upgrades build distance", "a. Enabled", true, "Enable or disable station upgrades maximum distance customizations completely");
extMaxDist = ((BaseUnityPlugin)this).Config.Bind<float>("9 - Upgrades build distance", "b. Max Distance", 15f, "Maximum distance multiplier for station upgrades");
if (modEnabled.Value)
{
harmony.PatchAll();
Log("LzD Stations Custom Ranges mod initialized");
}
}
private void OnDestroy()
{
harmony.UnpatchSelf();
}
private static void Log(string msg)
{
if (logsEnabled.Value)
{
Debug.Log((object)msg);
}
}
}