using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using ComebackMod.Patches;
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("ComebackMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ComebackMod")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("1d6b8d31-4795-4b8a-b102-b2008b98fa0e")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace ComebackMod
{
[BepInPlugin("Legmr.ComeBackMod", "ComeBackMod", "1.0.0")]
public class ComeBackModMain : BaseUnityPlugin
{
private const string modGUID = "Legmr.ComeBackMod";
private const string modName = "ComeBackMod";
private const string modVersion = "1.0.0";
private readonly Harmony harmony = new Harmony("Legmr.ComeBackMod");
private static ComeBackModMain Instacne;
internal ManualLogSource mls;
private void Awake()
{
if ((Object)(object)Instacne == (Object)null)
{
Instacne = this;
}
mls = Logger.CreateLogSource("Legmr.ComeBackMod");
mls.LogInfo((object)"The Comeback Mod has Begun.");
harmony.PatchAll(typeof(ComeBackModMain));
harmony.PatchAll(typeof(RoundManagerChanges));
}
}
}
namespace ComebackMod.Patches
{
[HarmonyPatch(typeof(RoundManager))]
internal class RoundManagerChanges
{
private static GameObject _ship;
private static int enemyMinAmount;
[HarmonyPatch("SpawnScrapInLevel")]
[HarmonyPrefix]
private static void PatchInitailLoad(ref float ___scrapAmountMultiplier, ref float ___scrapValueMultiplier, ref TimeOfDay ___timeScript)
{
_ship = GameObject.Find("/Environment/HangarShip");
float num = CalculateLootValue();
if (___timeScript.timesFulfilledQuota < 7 || !(num <= (float)___timeScript.profitQuota))
{
return;
}
float num2 = (float)___timeScript.profitQuota - num - (float)(___timeScript.daysUntilDeadline * (50 * ___timeScript.timesFulfilledQuota));
if (!(num2 > 0f))
{
return;
}
if (___timeScript.timesFulfilledQuota >= 5)
{
if (num2 >= 500f)
{
if (___timeScript.daysUntilDeadline == 1)
{
___scrapValueMultiplier = 0.6f;
___scrapAmountMultiplier = 1.2f;
enemyMinAmount = 2;
}
else if (___timeScript.daysUntilDeadline == 2)
{
___scrapValueMultiplier = 0.5f;
___scrapAmountMultiplier = 1.1f;
enemyMinAmount = 1;
}
else if (___timeScript.daysUntilDeadline == 3)
{
___scrapValueMultiplier = 0.45f;
___scrapAmountMultiplier = 1.05f;
enemyMinAmount = 0;
}
}
else if (num2 >= 1500f)
{
if (___timeScript.daysUntilDeadline == 1)
{
___scrapValueMultiplier = 0.65f;
___scrapAmountMultiplier = 1.3f;
enemyMinAmount = 2;
}
else if (___timeScript.daysUntilDeadline == 2)
{
___scrapValueMultiplier = 0.55f;
___scrapAmountMultiplier = 1.15f;
enemyMinAmount = 1;
}
else if (___timeScript.daysUntilDeadline == 3)
{
___scrapValueMultiplier = 0.5f;
___scrapAmountMultiplier = 1.05f;
enemyMinAmount = 0;
}
}
}
else if (___timeScript.timesFulfilledQuota >= 8)
{
if (num2 >= 1000f)
{
if (___timeScript.daysUntilDeadline == 1)
{
___scrapValueMultiplier = 1f;
___scrapAmountMultiplier = 1.6f;
enemyMinAmount = 3;
}
else if (___timeScript.daysUntilDeadline == 2)
{
___scrapValueMultiplier = 0.7f;
___scrapAmountMultiplier = 1.3f;
enemyMinAmount = 2;
}
else if (___timeScript.daysUntilDeadline == 3)
{
___scrapValueMultiplier = 0.4f;
___scrapAmountMultiplier = 1.1f;
enemyMinAmount = 1;
}
}
else if (num2 >= 3000f)
{
if (___timeScript.daysUntilDeadline == 1)
{
___scrapValueMultiplier = 1.1f;
___scrapAmountMultiplier = 1.8f;
enemyMinAmount = 4;
}
else if (___timeScript.daysUntilDeadline == 2)
{
___scrapValueMultiplier = 0.7f;
___scrapAmountMultiplier = 1.1f;
enemyMinAmount = 2;
}
else if (___timeScript.daysUntilDeadline == 3)
{
___scrapValueMultiplier = 0.45f;
___scrapAmountMultiplier = 1.05f;
enemyMinAmount = 1;
}
}
}
else if (___timeScript.timesFulfilledQuota >= 12)
{
if (num2 >= 2000f)
{
if (___timeScript.daysUntilDeadline == 1)
{
___scrapValueMultiplier = 1.3f;
___scrapAmountMultiplier = 1.9f;
enemyMinAmount = 4;
}
else if (___timeScript.daysUntilDeadline == 2)
{
___scrapValueMultiplier = 0.9f;
___scrapAmountMultiplier = 1.6f;
enemyMinAmount = 2;
}
else if (___timeScript.daysUntilDeadline == 3)
{
___scrapValueMultiplier = 0.6f;
___scrapAmountMultiplier = 1.2f;
enemyMinAmount = 1;
}
}
else if (num2 >= 6000f)
{
if (___timeScript.daysUntilDeadline == 1)
{
___scrapValueMultiplier = 1.7f;
___scrapAmountMultiplier = 2.3f;
enemyMinAmount = 7;
}
else if (___timeScript.daysUntilDeadline == 2)
{
___scrapValueMultiplier = 0.9f;
___scrapAmountMultiplier = 1.5f;
enemyMinAmount = 3;
}
else if (___timeScript.daysUntilDeadline == 3)
{
___scrapValueMultiplier = 0.5f;
___scrapAmountMultiplier = 1.1f;
enemyMinAmount = 1;
}
}
}
else
{
if (___timeScript.timesFulfilledQuota < 18)
{
return;
}
if (num2 >= 2000f)
{
if (___timeScript.daysUntilDeadline == 1)
{
___scrapValueMultiplier = 1.5f;
___scrapAmountMultiplier = 2.1f;
enemyMinAmount = 5;
}
else if (___timeScript.daysUntilDeadline == 2)
{
___scrapValueMultiplier = 1.1f;
___scrapAmountMultiplier = 1.7f;
enemyMinAmount = 2;
}
else if (___timeScript.daysUntilDeadline == 3)
{
___scrapValueMultiplier = 0.7f;
___scrapAmountMultiplier = 1.3f;
enemyMinAmount = 1;
}
}
else if (num2 >= 8000f)
{
if (___timeScript.daysUntilDeadline == 1)
{
___scrapValueMultiplier = 2f;
___scrapAmountMultiplier = 2.7f;
enemyMinAmount = 9;
}
else if (___timeScript.daysUntilDeadline == 2)
{
___scrapValueMultiplier = 1.4f;
___scrapAmountMultiplier = 1.9f;
enemyMinAmount = 5;
}
else if (___timeScript.daysUntilDeadline == 3)
{
___scrapValueMultiplier = 0.7f;
___scrapAmountMultiplier = 1.3f;
enemyMinAmount = 2;
}
}
}
}
private static float CalculateLootValue()
{
List<GrabbableObject> source = (from obj in _ship.GetComponentsInChildren<GrabbableObject>()
where obj.itemProperties.isScrap && !(obj is RagdollGrabbableObject)
select obj).ToList();
return source.Sum((GrabbableObject scrap) => scrap.scrapValue);
}
[HarmonyPatch("ResetEnemySpawningVariables")]
[HarmonyPostfix]
private static void ChangeEnemyAmount()
{
RoundManager.Instance.minEnemiesToSpawn = enemyMinAmount;
}
}
}