using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
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("AntiRush")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AntiRush")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("d2dc9ef5-4589-4ad0-a18c-6e5054a0a946")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace BossControll;
[BepInPlugin("EnderBombz_Holanda.AntiRush", "BossControll", "1.0.0")]
[BepInProcess("valheim.exe")]
public class AntiRush : BaseUnityPlugin
{
public class ControlBossConfig
{
public string NameTranslate { get; set; }
public int Days { get; set; }
public string PlaceName { get; set; }
public int ItemAmount { get; set; }
public ControlBossConfig()
{
}
public ControlBossConfig(string name)
{
PlaceName = name;
}
}
[HarmonyPatch(typeof(OfferingBowl), "Interact")]
public static class AntiRushInteraction_patch
{
private static bool Prefix(OfferingBowl __instance, Humanoid user)
{
foreach (ControlBossConfig boss in bossList)
{
if (__instance.m_name == boss.PlaceName && boss.ItemAmount > 0)
{
__instance.m_bossItems = boss.ItemAmount;
}
}
currentDay = EnvMan.instance.GetDay(ZNet.instance.GetTimeSeconds());
Debug.Log((object)"Interact debugging...");
Debug.Log((object)$"Current day is: {currentDay}");
Debug.Log((object)("Current boss is: " + Localization.instance.Localize(__instance.m_name)));
Debug.Log((object)("Current boss altar name: " + __instance.m_name));
return CheckBossAccess(__instance.m_name, __instance, user);
}
}
[HarmonyPatch(typeof(OfferingBowl), "UseItem")]
public static class AntiRushUseItem_patch
{
private static bool Prefix(OfferingBowl __instance, Humanoid user, ItemData item)
{
foreach (ControlBossConfig boss in bossList)
{
if (__instance.m_name == boss.PlaceName && boss.ItemAmount > 0)
{
__instance.m_bossItems = boss.ItemAmount;
}
}
currentDay = EnvMan.instance.GetDay(ZNet.instance.GetTimeSeconds());
Debug.Log((object)"UseItem debugging...");
Debug.Log((object)$"{currentDay}<{realDay} && {__instance.m_name}=={bosses[0]}?");
return !CheckBossAccess(__instance.m_name, __instance, user);
}
}
private readonly Harmony harmony = new Harmony("EnderBombz_Holanda.BossControll");
public static int realDay = 31;
public static int currentDay;
public static string[] bosses = new string[5] { "$piece_offerbowl_eikthyr", "$prop_eldersummoningbowl_name", "$piece_offerbowl_bonemass", "$prop_dragonsummoningbowl_name", "$piece_offerbowl_yagluth" };
public static ConfigEntry<bool> Real;
public static ConfigEntry<int> EikthyrInvokeDay;
public static ConfigEntry<int> EikthyrItemAmount;
public static ConfigEntry<int> ElderInvokeDay;
public static ConfigEntry<int> ElderItemAmount;
public static ConfigEntry<int> BoneMassInvokeDay;
public static ConfigEntry<int> BoneMassItemAmount;
public static ConfigEntry<int> ModerInvokeDay;
public static ConfigEntry<int> YagluthInvokeDay;
public static List<ControlBossConfig> bossList;
private void Awake()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Expected O, but got Unknown
ConfigFile val = new ConfigFile(Path.Combine(Paths.ConfigPath, "bossControll_config.cfg"), true);
Real = val.Bind<bool>("Real", "realLife", true, "This option changes the calculation method, one day in real life, there are 31 days in the game, turn false this option if you want the normal game days.'");
EikthyrInvokeDay = val.Bind<int>("EikthyrInvokeDay", "spawnDay", 1, "Eikthyr day to be invoked ");
EikthyrItemAmount = val.Bind<int>("EikthyrItemAmount", "amountItem", 2, "Amout of items to invoke");
ElderInvokeDay = val.Bind<int>("ElderInvokeDay", "spawnDay", 4, "Elder day to be invoked ");
ElderItemAmount = val.Bind<int>("ElderItemAmount", "amountItem", 3, "Amout of items to invoke");
BoneMassInvokeDay = val.Bind<int>("BoneMassInvokeDay", "spawnDay", 10, "BoneMass day to be invoked");
BoneMassItemAmount = val.Bind<int>("BoneMassItemAmount", "amountItem", 3, "Amout of items to invoke");
ModerInvokeDay = val.Bind<int>("ModerInvokeDay", "spawnDay", 20, "Moder day to be invoked");
YagluthInvokeDay = val.Bind<int>("YagluthInvokeDay", "spawnDay", 30, "Yagluth day to be invoked ");
bossList = new List<ControlBossConfig>
{
new ControlBossConfig
{
NameTranslate = "Eikthyr",
PlaceName = "$piece_offerbowl_eikthyr",
Days = EikthyrInvokeDay.Value,
ItemAmount = EikthyrItemAmount.Value
},
new ControlBossConfig
{
NameTranslate = "Ancião",
PlaceName = "$prop_eldersummoningbowl_name",
Days = ElderInvokeDay.Value,
ItemAmount = ElderItemAmount.Value
},
new ControlBossConfig
{
NameTranslate = "Massa Óssea",
PlaceName = "$piece_offerbowl_bonemass",
Days = BoneMassInvokeDay.Value,
ItemAmount = BoneMassItemAmount.Value
},
new ControlBossConfig
{
NameTranslate = "Moder",
PlaceName = "$prop_dragonsummoningbowl_name",
Days = ModerInvokeDay.Value,
ItemAmount = 0
},
new ControlBossConfig
{
NameTranslate = "Yagluth",
PlaceName = "$piece_offerbowl_yagluth",
Days = YagluthInvokeDay.Value,
ItemAmount = 0
}
};
harmony.PatchAll();
}
public static bool CheckBossAccess(string bossPlace, OfferingBowl __instance, Humanoid user)
{
foreach (ControlBossConfig boss in bossList)
{
if (Real.Value)
{
int num = realDay * boss.Days;
if (currentDay < num && bossPlace == boss.PlaceName)
{
Debug.Log((object)"Yes he is entering in exeption");
((Character)user).Message((MessageType)2, $"O {boss.NameTranslate} só pode ser invocado em {currentDay} / {num} dias!", 0, (Sprite)null);
return true;
}
}
else if (currentDay < boss.Days && bossPlace == boss.PlaceName)
{
Debug.Log((object)"Yes he is entering in exeption");
((Character)user).Message((MessageType)2, $"O {boss.NameTranslate} só pode ser invocado em {currentDay} / {boss.Days} dias!", 0, (Sprite)null);
return true;
}
}
return false;
}
}