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;
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("c.HoLMod.MultifunctionalCheat")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("c.HoLMod.MultifunctionalCheat")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("63afa192-a162-4975-9059-d934f8ad4b74")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7", FrameworkDisplayName = ".NET Framework 4.7")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace MultifunctionalCheat;
public static class PluginInfo
{
public const string PLUGIN_GUID = "cs.HoLMod.MultifunctionalCheat.AnZhi20";
public const string PLUGIN_NAME = "HoLMod.MultifunctionalCheat";
public const string PLUGIN_VERSION = "1.7.0";
public const string PLUGIN_CONFIG = "cs.HoLMod.MultifunctionalCheat.AnZhi20.cfg";
}
[BepInPlugin("cs.HoLMod.MultifunctionalCheat.AnZhi20", "HoLMod.MultifunctionalCheat", "1.7.0")]
public class PluginMain : BaseUnityPlugin
{
public static readonly string CURRENT_VERSION = "1.7.0";
public static ConfigEntry<int> 城中可招门客上限倍数;
public static ConfigEntry<int> 城中可建民居上限倍数;
public static ConfigEntry<int> 城中可建商铺上限倍数;
public static ConfigEntry<int> 全角色体力上限倍数;
public static ConfigEntry<int> 城中商铺兑换元宝上限;
public static ConfigEntry<int> 科举人数上限;
public static ConfigEntry<int> 最大子嗣上限;
public static ConfigEntry<int> 最小生育年龄;
public static ConfigEntry<int> 最大生育年龄;
public static ConfigEntry<float> 民居售价折扣;
public static ConfigEntry<float> 封地农业税收倍数;
public static ConfigEntry<float> 封地人民税收倍数;
public static ConfigEntry<float> 封地商业税收倍数;
public static ConfigEntry<float> 府邸销售折扣;
private void Awake()
{
((BaseUnityPlugin)this).Logger.LogInfo((object)("多功能修改器已加载!当前版本:" + CURRENT_VERSION));
((BaseUnityPlugin)this).Logger.LogInfo((object)("The multifunctional modifier has been loaded! Current version:" + CURRENT_VERSION));
bool flag = false;
string text = null;
ConfigEntry<string> val = ((BaseUnityPlugin)this).Config.Bind<string>("内部配置(Internal Settings)", "已加载版本(Loaded Version)", CURRENT_VERSION, "用于跟踪插件版本,请勿手动修改");
text = val.Value;
if (text != CURRENT_VERSION)
{
((BaseUnityPlugin)this).Logger.LogInfo((object)("检测到插件版本更新:" + text + " -> " + CURRENT_VERSION));
((BaseUnityPlugin)this).Logger.LogInfo((object)("Plugin version update detected: " + text + " -> " + CURRENT_VERSION));
flag = true;
((BaseUnityPlugin)this).Config.Clear();
((BaseUnityPlugin)this).Logger.LogInfo((object)"已清除旧配置");
((BaseUnityPlugin)this).Logger.LogInfo((object)"Old configuration has been cleared");
}
城中可招门客上限倍数 = ((BaseUnityPlugin)this).Config.Bind<int>("倍率调整(Magnification)", "城中可招门客上限倍数(CityMaxRecruitableCustomersMultiplier)", 1, "城中可招募门客的数量=家族等级*2*城中可招门客上限倍数,填1为不修改(The number of potential recruits in the city = family level * 2 * CityMaxRecruitableCustomersMultiplier , default: 1)");
城中可建民居上限倍数 = ((BaseUnityPlugin)this).Config.Bind<int>("倍率调整(Magnification)", "城中可建民居上限倍数(CityMaxBuildableHousesMultiplier)", 1, "所有城中可购买民居数量总和=家族等级*城中可建民居上限倍数,填1为不修改(The total number of potential buildings in the city = family level * CityMaxBuildableHousesMultiplier , default: 1)");
城中可建商铺上限倍数 = ((BaseUnityPlugin)this).Config.Bind<int>("倍率调整(Magnification)", "城中可建商铺上限倍数(CityMaxBuildableShopsMultiplier)", 1, "所有城中可建造商铺数量总和=家族等级*城中可建商铺上限倍数,填1为不修改(The total number of potential shops in the city = family level * CityMaxBuildableShopsMultiplier , default: 1)");
全角色体力上限倍数 = ((BaseUnityPlugin)this).Config.Bind<int>("倍率调整(Magnification)", "全角色体力上限倍数(AllCharactersMaxHealthMultiplier)", 1, "全角色体力上限=默认上限*全角色体力上限倍数,填1为不修改(The maximum health of all characters = default health * AllCharactersMaxHealthMultiplier , default: 1)");
城中商铺兑换元宝上限 = ((BaseUnityPlugin)this).Config.Bind<int>("倍率调整(Magnification)", "城中商铺兑换元宝上限倍数(CityShopExchangeGoldMultiplier)", 1, "所有城中每个商铺可兑换元宝上限=钱庄等级*10*城中商铺兑换元宝上限倍数,填1为不修改(The maximum gold exchange per shop in the city = bank level * 10 * CityShopExchangeGoldMultiplier , default: 1)");
科举人数上限 = ((BaseUnityPlugin)this).Config.Bind<int>("倍率调整(Magnification)", "科举人数上限倍数(ExaminationNumMaxMultiplier)", 1, "科举可选人数上限=家族等级*科举人数上限倍数,填1为不修改(The maximum number of candidates for the exam = family level * ExaminationNumMaxMultiplier , default: 1)");
最大子嗣上限 = ((BaseUnityPlugin)this).Config.Bind<int>("倍率调整(Magnification)", "最大子嗣上限倍数(MaxOffspringNumMultiplier)", 1, "每个女性可以生的子嗣上限=1(或2)*最大子嗣上限倍数,填1为不修改(The maximum number of children that each woman can have = 1(or 2) * MaxOffspringNumMultiplier , default: 1)");
民居售价折扣 = ((BaseUnityPlugin)this).Config.Bind<float>("折扣(Discount)", "民居售价折扣(HousePriceMultiplier)", 10f, "每个民居的售价=默认售价*民居售价折扣/10,填10为不修改(The price of each house = default price * HousePriceMultiplier /10, default: 10)");
府邸销售折扣 = ((BaseUnityPlugin)this).Config.Bind<float>("折扣(Discount)", "府邸销售折扣(HouseSaleMultiplier)", 10f, "每个府邸的销售价格=默认售价*府邸销售折扣/10,填10为不修改(The price of each mansion = default price * HouseSaleMultiplier /10, default: 10)");
封地农业税收倍数 = ((BaseUnityPlugin)this).Config.Bind<float>("封地参数(FengDiParameters)", "封地农业税收(AgriculturalTaxMultiplier)", 1f, "每个封地的农业税收=原本计算逻辑*封地农业税收倍数,填1为不修改(Agricultural tax revenue for each fiefdom = Original calculation logic * AgriculturalTaxMultiplier , default: 1)");
封地人民税收倍数 = ((BaseUnityPlugin)this).Config.Bind<float>("封地参数(FengDiParameters)", "封地人民税收(ResidentTaxMultiplier)", 1f, "每个封地的人民税收=原本计算逻辑*封地人民税收倍数,填1为不修改(Resident tax revenue for each fiefdom = Original calculation logic * ResidentTaxMultiplier , default: 1)");
封地商业税收倍数 = ((BaseUnityPlugin)this).Config.Bind<float>("封地参数(FengDiParameters)", "封地商业税收(CommercialTaxMultiplier)", 1f, "每个封地的商业税收=原本计算逻辑*封地商业税收倍数,填1为不修改(Commercial tax revenue for each fiefdom = Original calculation logic * CommercialTaxMultiplier , default: 1)");
最小生育年龄 = ((BaseUnityPlugin)this).Config.Bind<int>("怀孕参数(PregnancyParameters)", "最小生育年龄(MinPregnancyAge)", 18, "女性可怀孕的最小年龄,最好不要低于18岁,人不能至少不应该(The minimum age at which women can become pregnant,it is best not to be under 18 years old, as people should not be at least)");
最大生育年龄 = ((BaseUnityPlugin)this).Config.Bind<int>("怀孕参数(PregnancyParameters)", "最大生育年龄(MaxPregnancyAge)", 40, "女性可怀孕的最大年龄(The maximum age at which women can become pregnant)");
((BaseUnityPlugin)this).Config.Bind<string>("内部配置(Internal Settings)", "已加载版本(Loaded Version)", CURRENT_VERSION, "用于跟踪插件版本,请勿手动修改");
((BaseUnityPlugin)this).Config.Save();
Harmony.CreateAndPatchAll(typeof(PluginMain), (string)null);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(FormulaData), "MenkeNumMax")]
public static bool MenkeNumMax(FormulaData __instance, ref int __result)
{
__result = int.Parse(Mainload.FamilyData[2]) * 2 * 城中可招门客上限倍数.Value;
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(FormulaData), "MinjuNumMaxPerCity")]
public static bool MinjuNumMaxPerCity(FormulaData __instance, ref int __result)
{
__result = int.Parse(Mainload.FamilyData[2]) * 城中可建民居上限倍数.Value;
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(FormulaData), "ShopNumMaxPerCity")]
public static bool ShopNumMaxPerCity(FormulaData __instance, ref int __result)
{
__result = int.Parse(Mainload.FamilyData[2]) * 城中可建商铺上限倍数.Value;
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(FormulaData), "GetTiliMax")]
public static bool GetTiliMax(FormulaData __instance, ref int __result, ref int OldNum)
{
int num = ((OldNum <= 30) ? OldNum : ((OldNum <= 30 || OldNum > 50) ? (10 + Mathf.FloorToInt((float)(50 - OldNum) / 10f) * 2) : (60 - OldNum)));
if (num <= 0)
{
num = 2;
}
__result = num * 全角色体力上限倍数.Value;
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(FormulaData), "YunBaoToCoinsNum")]
public static bool YunBaoToCoinsNum(FormulaData __instance, ref int __result, ref int ShopLv)
{
__result = ShopLv * 10 * 城中商铺兑换元宝上限.Value;
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(FormulaData), "GetCanKejuNumMax")]
public static bool GetCanKejuNumMax(FormulaData __instance, ref int __result)
{
__result = int.Parse(Mainload.FamilyData[2]) * 科举人数上限.Value;
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(FormulaData), "GetChildMax")]
public static bool GetChildMax(FormulaData __instance, ref int __result, ref string MemberID)
{
int num = 9;
if (int.TryParse(MemberID.Substring(MemberID.Length - 1, 1), out var result))
{
num = result % 10;
}
int num2 = ((num != 0 && num != 1 && num != 2 && num != 3 && num != 4) ? 1 : 2);
__result = num2 * 最大子嗣上限.Value;
return false;
}
[HarmonyPostfix]
[HarmonyPatch(typeof(Mainload), "LoadData")]
public static void UpdatePregnancyAge()
{
Mainload.OldShengYu = new List<int> { 最小生育年龄.Value, 最大生育年龄.Value };
}
[HarmonyPostfix]
[HarmonyPatch(typeof(H_MinJuPanelA), "OnEnableData")]
public static void H_MinJuPanelA_OnEnableData(H_MinJuPanelA __instance)
{
FieldInfo field = typeof(H_MinJuPanelA).GetField("BuyMunjuCost", BindingFlags.Instance | BindingFlags.NonPublic);
if (field != null)
{
int num = (int)field.GetValue(__instance);
float num2 = 民居售价折扣.Value / 10f;
int val = Mathf.FloorToInt((float)num * num2);
val = Math.Max(1, val);
field.SetValue(__instance, val);
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(FormulaData), "FengdiGetCoins")]
public static bool FengdiGetCoins_Prefix(int FengdiIndex, int RenNum, float NongNum, float ShangNum, ref int __result)
{
string[] array = Mainload.Fengdi_now[FengdiIndex][2].Split(new char[1] { '|' });
int num = int.Parse(array[0]);
int num2 = int.Parse(array[1]);
int num3 = int.Parse(array[2]);
int num4 = Mathf.CeilToInt(NongNum / 100f * 100000f * ((float)num / 100f) * 封地农业税收倍数.Value);
int num5 = Mathf.CeilToInt((float)RenNum * 50f * ((float)num2 / 100f) * 封地人民税收倍数.Value);
int num6 = Mathf.CeilToInt(ShangNum / 100f * 200000f * ((float)num3 / 100f) * 封地商业税收倍数.Value);
__result = num4 + num5 + num6;
return false;
}
[HarmonyPostfix]
[HarmonyPatch(typeof(FormulaData), "FudiPrice")]
public static void FudiPrice_Postfix(ref List<int> __result)
{
if (__result != null && __result.Count >= 2)
{
float num = 府邸销售折扣.Value / 10f;
__result[0] = Mathf.FloorToInt((float)__result[0] * num);
__result[1] = Mathf.FloorToInt((float)__result[1] * num);
__result[0] = Math.Max(1, __result[0]);
__result[1] = Math.Max(1, __result[1]);
}
}
}