using System;
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 AoTGiants.Patches;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
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("AoTGiants")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AoTGiants")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("2937c08c-0471-49a4-b87f-168a8f4f24d6")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace AoTGiants
{
[BepInPlugin("Flowprojects.AoTGiants", "AoT Giants", "1.1.0")]
public class AotGiantsBase : BaseUnityPlugin
{
private const string pluginGUID = "Flowprojects.AoTGiants";
private const string pluginName = "AoT Giants";
private const string pluginVersion = "1.1.0";
private const string assetBundleName = "aotgiantsassets";
internal const float DefaultSFXVolume = 0.3f;
internal static ConfigEntry<string> configVolume;
private readonly Harmony harmony = new Harmony("Flowprojects.AoTGiants");
private static AotGiantsBase Instance;
internal static List<AudioClip> SoundFX;
internal static AssetBundle Bundle;
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
configVolume = ((BaseUnityPlugin)this).Config.Bind<string>("General", "Volume", "30", "Volume of the music (in percent)");
((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin Flowprojects.AoTGiants is loaded!");
string text = "AoTGiants.dll";
string text2 = ((BaseUnityPlugin)this).Info.Location.TrimEnd(text.ToCharArray());
SoundFX = new List<AudioClip>();
Bundle = AssetBundle.LoadFromFile(text2 + "aotgiantsassets");
if ((Object)(object)Bundle != (Object)null)
{
SoundFX = Bundle.LoadAllAssets<AudioClip>().ToList();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Successfully loaded asset bundle!");
}
else
{
((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load assetbundle!");
}
harmony.PatchAll(typeof(ForestGiantAIPatch));
}
internal static float getVolume(string volume)
{
try
{
return (float)Convert.ToDouble(volume) / 100f;
}
catch (Exception)
{
return 0.3f;
}
}
}
}
namespace AoTGiants.Patches
{
[HarmonyPatch(typeof(ForestGiantAI))]
internal class ForestGiantAIPatch
{
private static ManualLogSource logger = Logger.CreateLogSource("Flowprojects.AoTGiants.ForestGiantAIPatch");
private static AudioSource aotSFX;
private static string sfxVolume = AotGiantsBase.configVolume.Value;
[HarmonyPatch("GiantSeePlayerEffect")]
[HarmonyPrefix]
private static void forestGiantAoTAudioPatch(ForestGiantAI __instance)
{
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Unknown result type (might be due to invalid IL or missing references)
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
aotSFX = GameNetworkManager.Instance.localPlayerController.itemAudio;
aotSFX.volume = AotGiantsBase.getVolume(sfxVolume);
bool flag = false;
if (!flag)
{
flag = (bool)Traverse.Create((object)__instance).Field("lostPlayerInChase").GetValue();
}
if (GameNetworkManager.Instance.localPlayerController.isPlayerDead || GameNetworkManager.Instance.localPlayerController.isInsideFactory)
{
return;
}
if (((EnemyAI)__instance).currentBehaviourStateIndex == 1 && (Object)(object)__instance.chasingPlayer == (Object)(object)GameNetworkManager.Instance.localPlayerController && !flag)
{
GameNetworkManager.Instance.localPlayerController.IncreaseFearLevelOverTime(1.4f, 1f);
if (!aotSFX.isPlaying)
{
playRandomTitanAggroClip(aotSFX);
}
return;
}
bool flag2 = false;
if (!GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom && ((EnemyAI)__instance).HasLineOfSightToPosition(((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.position, 45f, 70, -1f))
{
if (Vector3.Distance(((Component)__instance).transform.position, ((Component)GameNetworkManager.Instance.localPlayerController).transform.position) < 15f)
{
GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(0.7f, true);
}
else
{
GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(0.4f, true);
}
}
if (flag)
{
aotSFX.Stop();
logger.LogInfo((object)"Stopped audio clip");
}
}
private static void playRandomTitanAggroClip(AudioSource __audioSource)
{
int index = Random.Range(0, AotGiantsBase.SoundFX.Count);
__audioSource.PlayOneShot(AotGiantsBase.SoundFX[index]);
logger.LogInfo((object)("Played audio clip " + index + " with volume " + aotSFX.volume));
}
}
}