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("BetterLibrary")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BetterLibrary")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("92b2bc11-f873-45be-b55a-cb86a4c259c1")]
[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 BetterLibrary;
[BepInPlugin("cc.lymone.HoL.BetterLibrary", "BetterLibrary", "1.0.0")]
public class BetterLibrary : BaseUnityPlugin
{
private static ConfigEntry<bool> is_Book_Unbreakable;
private static ConfigEntry<int> multi_Book_Storage;
private void Start()
{
is_Book_Unbreakable = ((BaseUnityPlugin)this).Config.Bind<bool>("配置 Config", "书本不损坏 Is book unbreakable", true, "");
multi_Book_Storage = ((BaseUnityPlugin)this).Config.Bind<int>("配置 Config", "藏书阁空间倍率 Library capacity multiplier", 3, "");
Harmony.CreateAndPatchAll(typeof(BetterLibrary), (string)null);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(FormulaData), "BackBook_MemberNow")]
public static bool Unbreakable_Book_Prefix(string BookID, int FudiIndex, string BuildID, int memberIndex, bool isDaiZou)
{
if (BuildID != "null")
{
int num = 1;
if (isDaiZou)
{
num = 0;
}
else if (!is_Book_Unbreakable.Value && TrueRandom.GetRanom(100) < 20)
{
Mainload.Event_Tip.Add(new List<string>
{
"0",
"null",
AllText.Text_UIA[1312][Mainload.SetData[4]].Replace("@", Mainload.Member_now[memberIndex][4].Split(new char[1] { '|' })[0]).Replace("$", AllText.Text_AllProp[int.Parse(BookID)][Mainload.SetData[4]]),
"0"
});
num = 0;
}
int num2 = FormulaData.BooksClass(int.Parse(BookID));
for (int i = 0; i < Mainload.CangShuGeData_Now[FudiIndex].Count; i++)
{
if (!(Mainload.CangShuGeData_Now[FudiIndex][i].Split(new char[1] { '|' })[0] == BuildID))
{
continue;
}
string[] array = Mainload.CangShuGeData_Now[FudiIndex][i].Split(new char[1] { '|' });
string[] array2 = array[num2].Split(new char[1] { '~' });
string text = "null";
for (int j = 0; j < array2.Length; j++)
{
if (array2[j].Split(new char[1] { '@' })[0] == BookID)
{
int num3 = int.Parse(array2[j].Split(new char[1] { '@' })[1]) + num;
int num4 = int.Parse(array2[j].Split(new char[1] { '@' })[2]) - 1;
if (num3 + num4 > 0)
{
text = ((!(text == "null")) ? (text + "~" + BookID + "@" + num3 + "@" + num4) : (BookID + "@" + num3 + "@" + num4));
}
}
else
{
text = ((!(text == "null")) ? (text + "~" + array2[j]) : array2[j]);
}
}
string text2 = "null";
for (int k = 0; k < array.Length; k++)
{
text2 = ((num2 != k) ? ((!(text2 == "null")) ? (text2 + "|" + array[k]) : array[k]) : ((!(text2 == "null")) ? (text2 + "|" + text) : text));
}
Mainload.CangShuGeData_Now[FudiIndex][i] = text2;
break;
}
}
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(FormulaData), "BookSNumMax_CangshuGe")]
public static bool Multi_Capacity_Prefix(ref int Lv)
{
Lv *= multi_Book_Storage.Value;
return true;
}
}