using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyCompany("NGA")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Persistent player progression! Raid, stash loot, and deploy with seemless scene/loadout saving.")]
[assembly: AssemblyFileVersion("0.1.0.0")]
[assembly: AssemblyInformationalVersion("0.1.0")]
[assembly: AssemblyProduct("NGA.MaxwellRealismMod")]
[assembly: AssemblyTitle("BepInEx Plugin Title")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.1.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace BepInEx
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
[Conditional("CodeGeneration")]
internal sealed class BepInAutoPluginAttribute : Attribute
{
public BepInAutoPluginAttribute(string id = null, string name = null, string version = null)
{
}
}
}
namespace BepInEx.Preloader.Core.Patching
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
[Conditional("CodeGeneration")]
internal sealed class PatcherAutoPluginAttribute : Attribute
{
public PatcherAutoPluginAttribute(string id = null, string name = null, string version = null)
{
}
}
}
namespace NGA
{
[BepInPlugin("NGA.MaxwellRealismMod", "MaxwellRealismMod", "0.0.1")]
[BepInDependency("nrgill28.Sodalite", "1.4.1")]
[BepInDependency("NGA.JsonFileIO", "0.0.0")]
[BepInProcess("h3vr.exe")]
public class MaxwellRealismMod : BaseUnityPlugin
{
[HarmonyPatch(typeof(FVRPhysicalObject))]
[HarmonyPatch("FVRFixedUpdate")]
public class FVRPhysicalObjectFVRFixedUpdate : MonoBehaviour
{
private static void Postfix(FVRPhysicalObject __instance)
{
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
if (CheckTomigotchiSkip() || ((Object)((Component)__instance).gameObject).name != "Dingus(Clone)")
{
return;
}
ScaleObj(__instance);
Transform val = ((Component)__instance).transform.Find("_Patty-Nose");
if ((Object)(object)val == (Object)null)
{
Logger.LogWarning((object)"No _Patty-Nose child object found.");
return;
}
Vector3 position = val.position;
Vector3 val2 = default(Vector3);
((Vector3)(ref val2))..ctor(0.01f, 0.01f, 0.01f);
Collider[] array = Physics.OverlapBox(position, val2);
Collider[] array2 = array;
foreach (Collider val3 in array2)
{
if (((Object)((Component)val3).gameObject).name == "BeefCan(Clone)")
{
Logger.LogMessage((object)("You just ate: " + ((Object)((Component)val3).gameObject).name));
UpdateJustAte(__instance);
RefreshSaveFile();
Logger.LogMessage((object)"Vars saved.");
Object.Destroy((Object)(object)((Component)val3).gameObject);
}
}
}
}
[HarmonyPatch(typeof(TNH_Manager))]
[HarmonyPatch("SetPhase_Completed")]
public class TNH_ManagerSetPhase_Completed : MonoBehaviour
{
private static void Postfix(TNH_Manager __instance)
{
if (!CheckCancerSkip())
{
payment_balance += __instance.m_numTokens;
RefreshSaveFile();
Logger.LogMessage((object)("Payment balanced added: " + __instance.m_numTokens + " new total: " + payment_balance));
}
}
}
private static ConfigEntry<bool> _Feeding;
private static ConfigEntry<int> _Feeding_Cycle_h;
private static ConfigEntry<bool> _Cancer;
private static ConfigEntry<int> _Insurance_Copay;
private static ExtensibleDictionary myDic;
private static string mod_folder_name = "AGN-MaxwellRealism_Mod";
private static string save_file_name = "agn_maxwell_realism_mod.json";
private static DateTime date_installed;
private static int payment_balance;
private static DateTime last_time_ate;
private static float overall_size_scale;
private static float wide_mult;
internal static ManualLogSource Logger { get; private set; }
private void Awake()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
Logger = ((BaseUnityPlugin)this).Logger;
Harmony val = new Harmony("AGN.MaxwellRealismMod");
Logger.LogMessage((object)"New harmony");
SetUpConfigFields();
Logger.LogMessage((object)"Setted the fields");
val.PatchAll();
Logger.LogMessage((object)"Hello, world! Sent from AGN.MaxwellRealismMod 0.0.1");
InitializeSaveFile();
ReadVarsFromSaveFile();
Logger.LogMessage((object)"Save file ready and read");
if (_Cancer.Value)
{
DateTime dateTime = date_installed.AddMonths(9);
DateTime now = DateTime.Now;
int num = (int)(dateTime - now).TotalDays;
Logger.LogMessage((object)("Days until Maxwell's bills are due (9 months after install): " + num));
}
}
private void InitializeSaveFile()
{
string text = FileIO.ReadFile(mod_folder_name, save_file_name);
if (text == null)
{
text = CreateDefaultSaveFile();
FileIO.WriteToFile(mod_folder_name, save_file_name, text);
}
else
{
myDic = ExtensibleDictionary.FromJson(text);
}
}
private static string CreateDefaultSaveFile()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Expected O, but got Unknown
myDic = new ExtensibleDictionary();
myDic.AddEntry("overall_size_scale", 0.3f.ToString());
myDic.AddEntry("wide_mult", 1f.ToString());
ExtensibleDictionary obj = myDic;
DateTime minValue = DateTime.MinValue;
obj.AddEntry("last_time_ate", minValue.ToString("o"));
myDic.AddEntry("date_installed", DateTime.Now.ToString("o"));
myDic.AddEntry("payment_balance", 0.ToString());
return myDic.ToJson();
}
private static void ReadVarsFromSaveFile()
{
overall_size_scale = float.Parse(myDic.GetValue("overall_size_scale"));
wide_mult = float.Parse(myDic.GetValue("wide_mult"));
last_time_ate = DateTime.Parse(myDic.GetValue("last_time_ate"));
date_installed = DateTime.Parse(myDic.GetValue("date_installed"));
payment_balance = int.Parse(myDic.GetValue("payment_balance"));
}
private static void WriteVarsToMyDic()
{
if (myDic == null)
{
Logger.LogError((object)"myDic is not initialized.");
return;
}
myDic.InsertOrUpdateEntry("overall_size_scale", overall_size_scale.ToString());
myDic.InsertOrUpdateEntry("wide_mult", wide_mult.ToString());
myDic.InsertOrUpdateEntry("last_time_ate", last_time_ate.ToString("o"));
myDic.InsertOrUpdateEntry("date_installed", date_installed.ToString("o"));
myDic.InsertOrUpdateEntry("payment_balance", payment_balance.ToString());
}
private static void RefreshSaveFile()
{
WriteVarsToMyDic();
FileIO.WriteToFile(mod_folder_name, save_file_name, myDic.ToJson());
myDic = ExtensibleDictionary.FromJson(FileIO.ReadFile(mod_folder_name, save_file_name));
ReadVarsFromSaveFile();
}
private void SetUpConfigFields()
{
_Feeding = ((BaseUnityPlugin)this).Config.Bind<bool>("Tomigotchi", "Feeding", true, "Jess is just a kitten, you gotta feed her so she grows into a strong Maxwell :)");
_Feeding_Cycle_h = ((BaseUnityPlugin)this).Config.Bind<int>("Tomigotchi", "Feed every X hours", 48, "The number of hours before Jess needs to be fed again. Overfeeding is not recommended.");
_Cancer = ((BaseUnityPlugin)this).Config.Bind<bool>("Hardcore", "Cancer", false, "[NOT YET IMPLEMENTED] Maxwell has cancer (like irl) and due to insufficient health insurance needs help with her bills.");
_Insurance_Copay = ((BaseUnityPlugin)this).Config.Bind<int>("Hardcore", "Insurance CoPay", 500, "The amount in TnH tokens needed to pay for Maxwells cancer treatment. Collected on TnH completion.");
}
private static bool CheckTomigotchiSkip()
{
return !_Feeding.Value;
}
private static void UpdateJustAte(FVRPhysicalObject __instance)
{
TimeSpan timeSpan = DateTime.Now - last_time_ate;
if (timeSpan.TotalHours <= (double)_Feeding_Cycle_h.Value && wide_mult < 5f)
{
Logger.LogMessage((object)"Maxwell got a bit wider");
wide_mult += 1f;
}
else if (timeSpan.TotalHours <= (double)(2 * _Feeding_Cycle_h.Value))
{
if (overall_size_scale < 1f)
{
Logger.LogMessage((object)"Maxwell grew by 0.1 :)");
overall_size_scale += 0.1f;
wide_mult = 1f;
}
}
else
{
Logger.LogWarning((object)("You haven't feed Max in a while! Make sure to feed him after " + _Feeding_Cycle_h.Value + " hours but before " + 2 * _Feeding_Cycle_h.Value));
}
last_time_ate = DateTime.Now;
ScaleObj(__instance);
}
private static void ScaleObj(FVRPhysicalObject __instance)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
float num = overall_size_scale * wide_mult;
float num2 = overall_size_scale;
float num3 = overall_size_scale;
((Component)__instance).transform.localScale = new Vector3(num, num2, num3);
}
private static bool CheckCancerSkip()
{
return !_Cancer.Value;
}
}
}