using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using NachoAchievements.Util;
using Newtonsoft.Json;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("EasyTextEffects")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: AssemblyCompany("NachoAchievements")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.1.5.0")]
[assembly: AssemblyInformationalVersion("1.1.5+2b9f2b47d8cf4dda980a34ee0258b0dfa55e2c48")]
[assembly: AssemblyProduct("NachoAchievements")]
[assembly: AssemblyTitle("NachoAchievements")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.5.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[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 NachoAchievements
{
[BepInPlugin("NachoAchievements", "NachoAchievements", "1.1.5")]
public class NachoAchievements : BaseUnityPlugin
{
public static Dictionary<string, Dictionary<string, string>> Achievements = new Dictionary<string, Dictionary<string, string>>();
public static AssetBundle NachoAssets;
public static TMP_FontAsset AchievementsFont;
public static List<GameObject> AchievementsText = new List<GameObject>();
public static Canvas AchievementsCanvas;
public static Dictionary<string, int> scrapFound = new Dictionary<string, int>();
public static List<string> enemiesKilled = new List<string>();
public static GameObject achievementGetText = null;
public static GameObject achievementGetTextSubtitle = null;
public static GameObject achievementEnterButton = null;
private static EventSystem events = EventSystem.current;
private static PointerEventData pointerData;
public static TextMeshProUGUI TMP;
public static string prevText;
public static float destroyTimer;
private ConfigEntry<bool> resetAchievements;
public static NachoAchievements Instance { get; private set; } = null;
internal static ManualLogSource Logger { get; private set; } = null;
internal static Harmony? Harmony { get; set; }
private void Awake()
{
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Expected O, but got Unknown
Logger = ((BaseUnityPlugin)this).Logger;
Instance = this;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)52;
string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
NachoAssets = AssetBundle.LoadFromFile(Path.Combine(directoryName, "nachoachievements"));
if ((Object)(object)NachoAssets == (Object)null)
{
Logger.LogError((object)"Failed to load custom assets.");
return;
}
AchievementsFont = NachoAssets.LoadAsset<TMP_FontAsset>("assets/3270-regular sdf.asset");
Patch();
resetAchievements = ((BaseUnityPlugin)this).Config.Bind<bool>("Debug", "Reset Achievements", false, new ConfigDescription("Wether to reset every achievement next time you boot up the game (does not include save file-dependent achievements)", (AcceptableValueBase)null, Array.Empty<object>()));
CreateAchievements();
WriteAchievements();
Logger.LogInfo((object)"NachoAchievements v1.1.5 has loaded!");
}
private void Update()
{
//IL_029a: Unknown result type (might be due to invalid IL or missing references)
//IL_029f: Unknown result type (might be due to invalid IL or missing references)
//IL_02aa: Unknown result type (might be due to invalid IL or missing references)
//IL_02ba: Expected O, but got Unknown
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_02ec: Unknown result type (might be due to invalid IL or missing references)
//IL_02f1: Unknown result type (might be due to invalid IL or missing references)
//IL_01da: Unknown result type (might be due to invalid IL or missing references)
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_0184: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_0278: Unknown result type (might be due to invalid IL or missing references)
//IL_0283: Unknown result type (might be due to invalid IL or missing references)
//IL_0288: Unknown result type (might be due to invalid IL or missing references)
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_020f: Unknown result type (might be due to invalid IL or missing references)
//IL_021a: Unknown result type (might be due to invalid IL or missing references)
//IL_021f: Unknown result type (might be due to invalid IL or missing references)
if (AchievementsText != null && AchievementsText.Count > 0)
{
float num = 200f;
if (((ButtonControl)Keyboard.current.escapeKey).wasPressedThisFrame)
{
for (int i = 0; i < AchievementsText.Count; i++)
{
Object.Destroy((Object)(object)AchievementsText[i]);
}
QuickMenuManager quickMenuManager = GameNetworkManager.Instance.localPlayerController.quickMenuManager;
quickMenuManager.CloseQuickMenu();
Object.Destroy((Object)(object)TMP);
prevText = string.Empty;
AchievementsText.Clear();
}
if (((InputControl<float>)(object)((Vector2Control)Mouse.current.scroll).y).ReadValue() > 0f)
{
for (int j = 0; j < AchievementsText.Count; j++)
{
RectTransform component = AchievementsText[j].GetComponent<RectTransform>();
if (j == 0 && component.anchoredPosition.y <= 450f)
{
return;
}
component.anchoredPosition -= new Vector2(0f, num);
}
if ((Object)(object)TMP != (Object)null)
{
RectTransform component2 = ((Component)TMP).GetComponent<RectTransform>();
if ((Object)(object)component2 != (Object)null)
{
component2.anchoredPosition -= new Vector2(0f, num);
}
}
}
if (((InputControl<float>)(object)((Vector2Control)Mouse.current.scroll).y).ReadValue() < 0f)
{
for (int k = 0; k < AchievementsText.Count; k++)
{
RectTransform component3 = AchievementsText[k].GetComponent<RectTransform>();
if (k == 0 && component3.anchoredPosition.y >= (float)(-450 + AchievementsText.Count * 100))
{
return;
}
component3.anchoredPosition += new Vector2(0f, num);
}
if ((Object)(object)TMP != (Object)null)
{
RectTransform component4 = ((Component)TMP).GetComponent<RectTransform>();
if ((Object)(object)component4 != (Object)null)
{
component4.anchoredPosition += new Vector2(0f, num);
}
}
}
pointerData = new PointerEventData(events)
{
position = ((InputControl<Vector2>)(object)((Pointer)Mouse.current).position).ReadValue()
};
List<RaycastResult> list = new List<RaycastResult>();
Canvas val = Object.FindObjectOfType<Canvas>();
GraphicRaycaster component5 = ((Component)val).GetComponent<GraphicRaycaster>();
((BaseRaycaster)component5).Raycast(pointerData, list);
foreach (RaycastResult item in list)
{
RaycastResult current = item;
TextMeshProUGUI componentInChildren = ((RaycastResult)(ref current)).gameObject.GetComponentInChildren<TextMeshProUGUI>();
if ((Object)(object)componentInChildren != (Object)null && ((Object)(object)TMP == (Object)null || ((TMP_Text)componentInChildren).text != prevText))
{
string[] array = Achievements.Keys.ToArray();
int num2 = AchievementsText.IndexOf(((RaycastResult)(ref current)).gameObject);
if (num2 != -1 && Achievements.ContainsKey(array[num2]) && Achievements[array[num2]].ContainsKey("description"))
{
string text = Achievements[array[num2]]["description"];
CreateAchievementDescription(componentInChildren, text);
}
}
}
if (list.Count <= 0)
{
if ((Object)(object)TMP != (Object)null)
{
Object.Destroy((Object)(object)((Component)TMP).gameObject);
}
prevText = string.Empty;
}
}
if ((Object)(object)achievementGetText != (Object)null)
{
destroyTimer += Time.deltaTime;
if (destroyTimer >= 5f)
{
Object.Destroy((Object)(object)achievementGetText);
Object.Destroy((Object)(object)achievementGetTextSubtitle);
}
}
}
internal static void Patch()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
if (Harmony == null)
{
Harmony = new Harmony("NachoAchievements");
}
Logger.LogDebug((object)"Patching...");
Harmony.PatchAll();
Logger.LogDebug((object)"Finished patching!");
}
public static void CheckAchievements(Dictionary<string, string> callback)
{
List<string> list = Achievements.Keys.ToList();
if (!callback.ContainsKey("callback"))
{
Logger.LogError((object)"Error! Callback does not exist.");
return;
}
foreach (string item in list)
{
if (!Achievements[item].ContainsKey("callback"))
{
Logger.LogError((object)("Error! Achievement " + item + " does not contain a callback. Skipping..."));
}
else
{
if (Achievements[item]["callback"] != callback["callback"])
{
continue;
}
List<string> list2 = new List<string>();
List<string> list3 = callback.Keys.ToList();
foreach (string item2 in list3)
{
if (!(item2 == "callback"))
{
list2.Add(item2);
}
}
bool flag = true;
foreach (string item3 in list2)
{
string text = callback[item3];
string empty = string.Empty;
empty = (Achievements[item].ContainsKey(item3) ? Achievements[item][item3] : "Any");
switch (item3)
{
case "rank":
{
if (int.TryParse(empty, out var result2) && int.Parse(text) >= result2)
{
continue;
}
break;
}
case "soundMinDistance":
{
if (float.TryParse(empty, out var result) && float.Parse(text) <= result)
{
continue;
}
break;
}
case "amount in ship":
if ((empty == "True" && callback.ContainsKey("scrap") && Achievements[item].ContainsKey("scrap") && callback["scrap"] == Achievements[item]["scrap"]) || empty == "False")
{
flag = false;
Achievements[item]["progress"] = text;
if (CheckIfSingleRun(item))
{
Instance.SaveAchievementOnServerRpc(item, int.Parse(Achievements[item]["progress"]), StartOfRound.Instance.localPlayerController.playerSteamId);
}
}
break;
}
if (empty == "Unique")
{
List<string> list4 = ES3.Load<List<string>>(item, "LCGeneralSaveData", new List<string>());
if ((CheckIfSingleRun(item) && Instance.GetUniqueOnServerRpc(item, StartOfRound.Instance.localPlayerController.playerSteamId).Contains(text)) || (!CheckIfSingleRun(item) && list4.Contains(text)))
{
flag = false;
}
else
{
Instance.SaveUniqueOnServerRpc(item, StartOfRound.Instance.localPlayerController.playerSteamId, text);
list4.Add(text);
ES3.Save<List<string>>(item, list4, "LCGeneralSaveData");
}
}
if (text != empty && empty != "Any" && empty != "Unique")
{
flag = false;
}
}
if (flag)
{
Achievements[item]["progress"] = (int.Parse(Achievements[item]["progress"]) + 1).ToString();
if (CheckIfSingleRun(item))
{
Instance.SaveAchievementOnServerRpc(item, int.Parse(Achievements[item]["progress"]), StartOfRound.Instance.localPlayerController.playerSteamId);
}
}
}
}
CheckAchievementCount();
foreach (string item4 in list)
{
if (int.TryParse(Achievements[item4]["count"], out var result3) && int.Parse(Achievements[item4]["progress"]) >= result3 && Achievements[item4]["completed"] == "False")
{
CreateAchievementGetText(item4);
Achievements[item4]["completed"] = "True";
}
}
WriteAchievements();
}
public static bool CheckIfSingleRun(string key)
{
return Achievements[key].ContainsKey("single run") && Achievements[key]["single run"] == "True";
}
[ServerRpc(RequireOwnership = false)]
public void SaveAchievementOnServerRpc(string key, int progress, ulong playerSteamID)
{
ES3.Save<int>("SingleRun" + key + playerSteamID, progress, GameNetworkManager.Instance.currentSaveFileName);
}
[ServerRpc(RequireOwnership = false)]
public string[] GetUniqueOnServerRpc(string key, ulong playerSteamID)
{
return ES3.Load<List<string>>(key + playerSteamID, GameNetworkManager.Instance.currentSaveFileName, new List<string>()).ToArray();
}
[ServerRpc(RequireOwnership = false)]
public void SaveUniqueOnServerRpc(string key, ulong playerSteamID, string enemy)
{
List<string> list = ES3.Load<List<string>>(key + playerSteamID, GameNetworkManager.Instance.currentSaveFileName, new List<string>());
if (!list.Contains(enemy))
{
list.Add(enemy);
ES3.Save<List<string>>(key + playerSteamID, list, GameNetworkManager.Instance.currentSaveFileName);
}
}
[ServerRpc(RequireOwnership = false)]
public void GetAchievementsOnServerRpc(ulong playerSteamID)
{
List<string> list = Achievements.Keys.ToList();
foreach (string item in list)
{
if (CheckIfSingleRun(item))
{
int progress = ES3.Load<int>("SingleRun" + item + playerSteamID, GameNetworkManager.Instance.currentSaveFileName, 0);
SaveAchievementOnClientRpc(item, progress, playerSteamID);
}
}
}
[ClientRpc]
public void SaveAchievementOnClientRpc(string key, int progress, ulong playerSteamID)
{
if (playerSteamID == GameNetworkManager.Instance.localPlayerController.playerSteamId)
{
Achievements[key]["progress"] = progress.ToString();
}
}
public static void ResetSingleDayAchievements()
{
List<string> list = Achievements.Keys.ToList();
foreach (string item in list)
{
if (Achievements[item].ContainsKey("single day") && Achievements[item]["single day"] == "True")
{
Achievements[item]["progress"] = "0";
}
}
}
public static void ResetSingleRunAchievements()
{
List<string> list = Achievements.Keys.ToList();
foreach (string item in list)
{
if (CheckIfSingleRun(item))
{
Achievements[item]["progress"] = "0";
Instance.SaveAchievementOnServerRpc(item, 0, GameNetworkManager.Instance.localPlayerController.playerSteamId);
}
}
}
public static void CreateAchievements()
{
Paths.CheckFolders();
string path = Path.Combine(Paths.DataFolder, "achievements.json");
if (!File.Exists(path) || Instance.resetAchievements.Value)
{
File.WriteAllText(path, "");
}
string pluginPath = Paths.PluginPath;
string[] directories = Directory.GetDirectories(pluginPath);
string[] array = directories;
foreach (string text in array)
{
if (!Directory.Exists(text))
{
continue;
}
string path2 = Path.Combine(text, "achievements.json");
if (!File.Exists(path2))
{
continue;
}
string text2 = File.ReadAllText(path2);
Dictionary<string, Dictionary<string, string>> dictionary = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(text2);
string text3 = File.ReadAllText(path);
Dictionary<string, Dictionary<string, string>> dictionary2 = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(text3);
if (dictionary == null)
{
continue;
}
foreach (KeyValuePair<string, Dictionary<string, string>> item in dictionary)
{
if (dictionary2 != null && dictionary2.ContainsKey(item.Key))
{
dictionary[item.Key]["progress"] = dictionary2[item.Key]["progress"];
dictionary[item.Key]["completed"] = dictionary2[item.Key]["completed"];
}
Achievements.Add(item.Key, item.Value);
Logger.LogInfo((object)("Added Achievement " + item.Key));
}
}
WriteAchievements();
}
public static void WriteAchievements()
{
Paths.CheckFolders();
string path = Path.Combine(Paths.DataFolder, "achievements.json");
File.WriteAllText(path, JsonConvert.SerializeObject((object)Achievements));
}
public static void OnAchievementsClicked()
{
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
QuickMenuManager quickMenuManager = GameNetworkManager.Instance.localPlayerController.quickMenuManager;
quickMenuManager.mainButtonsPanel.SetActive(false);
quickMenuManager.playerListPanel.SetActive(false);
List<string> list = Achievements.Keys.ToList();
CheckAchievementCount();
int num = 0;
for (int i = 0; i < list.Count; i++)
{
if (Achievements[list[i]].ContainsValue("Unique") && !CheckIfSingleRun(list[i]))
{
Achievements[list[i]]["progress"] = ES3.Load<List<string>>(list[i], "LCGeneralSaveData", new List<string>()).Count.ToString();
}
TextMeshProUGUI val = CreateAchievementsText(new Vector2(-150f, (float)(450 - num * 100)), add: true);
num++;
string text = list[i];
if (int.TryParse(Achievements[list[i]]["count"], out var result) && result > 1)
{
text = text + " " + ((int.Parse(Achievements[list[i]]["progress"]) <= result) ? Achievements[list[i]]["progress"] : ((object)result))?.ToString() + " / " + result;
}
((TMP_Text)val).text = text;
if (Achievements[list[i]]["completed"] == "True")
{
((Graphic)val).color = Color.yellow;
}
}
}
public static void CheckAchievementCount()
{
//IL_016a: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_017f: Unknown result type (might be due to invalid IL or missing references)
List<string> list = Achievements.Keys.ToList();
foreach (string item in list)
{
if (!Achievements[item].ContainsKey("count callback"))
{
continue;
}
if (Achievements[item]["count callback"] == "Unique Scrap Total")
{
int num = 0;
foreach (Item items in StartOfRound.Instance.allItemsList.itemsList)
{
if (items.isScrap)
{
num++;
}
}
Achievements[item]["count"] = num.ToString();
}
else
{
if (!(Achievements[item]["count callback"] == "All Scrap Today") || !RoundManager.Instance.dungeonFinishedGeneratingForAllPlayers)
{
continue;
}
int num2 = 0;
int num3 = 0;
GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>();
foreach (GrabbableObject val in array)
{
if (Object.op_Implicit((Object)(object)val.itemProperties) && val.itemProperties.isScrap)
{
Bounds bounds = StartOfRound.Instance.shipBounds.bounds;
if (!((Bounds)(ref bounds)).Contains(((Component)val).gameObject.transform.position))
{
num2++;
}
else if (RoundManager.Instance.scrapCollectedThisRound.Contains(val))
{
num3++;
}
}
}
if (Achievements[item].ContainsKey("moon") && (StartOfRound.Instance.currentLevelID.ToString() == Achievements[item]["moon"] || Achievements[item]["moon"] == "Any"))
{
Achievements[item]["count"] = (num2 + num3).ToString();
}
}
}
}
public static TextMeshProUGUI CreateAchievementsText(Vector2 pos, bool add, int size = 36)
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Expected O, but got Unknown
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)AchievementsCanvas == (Object)null)
{
CreateAchievementsCanvas();
}
GameObject val = new GameObject("AchievementsText" + pos.y);
val.transform.SetParent(((Component)AchievementsCanvas).transform, false);
val.AddComponent<CanvasRenderer>();
TextMeshProUGUI val2 = val.AddComponent<TextMeshProUGUI>();
((TMP_Text)val2).font = AchievementsFont;
((TMP_Text)val2).fontSize = size;
((TMP_Text)val2).characterSpacing = 8f;
RectTransform component = ((Component)val2).GetComponent<RectTransform>();
component.sizeDelta = new Vector2(900f, 60f);
component.anchoredPosition = pos;
if (add)
{
AchievementsText.Add(val);
}
return val2;
}
public static TextMeshProUGUI CreateAchievementGetText(string text)
{
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Expected O, but got Unknown
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Expected O, but got Unknown
//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_0209: Unknown result type (might be due to invalid IL or missing references)
//IL_0216: Unknown result type (might be due to invalid IL or missing references)
//IL_0225: Unknown result type (might be due to invalid IL or missing references)
//IL_022a: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)AchievementsCanvas == (Object)null)
{
CreateAchievementsCanvas();
}
if ((Object)(object)achievementGetText != (Object)null)
{
Object.Destroy((Object)(object)achievementGetText);
}
if ((Object)(object)achievementGetTextSubtitle != (Object)null)
{
Object.Destroy((Object)(object)achievementGetTextSubtitle);
}
achievementGetText = new GameObject("AchievementGetText");
achievementGetText.transform.SetParent(((Component)AchievementsCanvas).transform, false);
achievementGetText.AddComponent<CanvasRenderer>();
TextMeshProUGUI val = achievementGetText.AddComponent<TextMeshProUGUI>();
((TMP_Text)val).font = AchievementsFont;
((TMP_Text)val).fontSize = 128f;
((TMP_Text)val).text = "<mark=#00000060>ACHIEVEMENT GET!</mark>";
((TMP_Text)val).m_textAlignment = (TextAlignmentOptions)514;
((Graphic)val).color = Color.yellow;
((TMP_Text)val).SetOutlineThickness(0.05f);
((TMP_Text)val).SetOutlineColor(Color32.op_Implicit(Color.black));
((TMP_Text)val).characterSpacing = 8f;
RectTransform component = ((Component)val).GetComponent<RectTransform>();
component.anchoredPosition += new Vector2(310f, 500f);
component.sizeDelta += new Vector2(1500f, 0f);
achievementGetTextSubtitle = new GameObject("AchievementGetText");
achievementGetTextSubtitle.transform.SetParent(((Component)AchievementsCanvas).transform, false);
achievementGetTextSubtitle.AddComponent<CanvasRenderer>();
TextMeshProUGUI val2 = achievementGetTextSubtitle.AddComponent<TextMeshProUGUI>();
((TMP_Text)val2).font = AchievementsFont;
((TMP_Text)val2).fontSize = 64f;
((TMP_Text)val2).text = "<mark=#00000060>" + text + "</mark>";
((TMP_Text)val2).m_textAlignment = (TextAlignmentOptions)514;
((Graphic)val2).color = Color.yellow;
((TMP_Text)val2).SetOutlineThickness(0.05f);
((TMP_Text)val2).SetOutlineColor(Color32.op_Implicit(Color.black));
((TMP_Text)val2).characterSpacing = 8f;
RectTransform component2 = ((Component)val2).GetComponent<RectTransform>();
component2.sizeDelta += new Vector2(1500f, 0f);
component2.anchoredPosition = component.anchoredPosition - new Vector2(-2f, 150f);
destroyTimer = 0f;
HUDManager.Instance.UIAudio.PlayOneShot(HUDManager.Instance.levelIncreaseSFX);
return val;
}
public static void CreateAchievementsCanvas()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject("AchievementsCanvas");
AchievementsCanvas = val.AddComponent<Canvas>();
AchievementsCanvas.renderMode = (RenderMode)0;
CanvasScaler val2 = val.AddComponent<CanvasScaler>();
val2.referenceResolution = new Vector2(1920f, 1080f);
val2.screenMatchMode = (ScreenMatchMode)0;
val2.uiScaleMode = (ScaleMode)1;
val.AddComponent<GraphicRaycaster>();
}
public static void CreateAchievementDescription(TextMeshProUGUI tmp, string text)
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
if (!(text == prevText))
{
if ((Object)(object)TMP != (Object)null)
{
Object.Destroy((Object)(object)((Component)TMP).gameObject);
}
TMP = CreateAchievementsText(((Component)tmp).GetComponent<RectTransform>().anchoredPosition + new Vector2(600f, 0f), add: false);
((TMP_Text)TMP).text = text;
prevText = text;
}
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "NachoAchievements";
public const string PLUGIN_NAME = "NachoAchievements";
public const string PLUGIN_VERSION = "1.1.5";
}
}
namespace NachoAchievements.Util
{
public static class Paths
{
public static string ExecutionPath => Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
public static string GameFolder => Path.GetDirectoryName(Application.dataPath);
public static string BepInExFolder => Path.Combine(GameFolder, "BepInEx");
public static string BepInExConfigFolder => Path.Combine(BepInExFolder, "config");
public static string DataFolder => Path.Combine(BepInExConfigFolder, "NachosAchievements");
public static void CheckFolders()
{
if (!Directory.Exists(DataFolder))
{
Directory.CreateDirectory(DataFolder);
}
}
}
}
namespace NachoAchievements.Patches
{
[HarmonyPatch(typeof(Button))]
internal class ButtonPatches
{
[HarmonyPatch("Press")]
[HarmonyPrefix]
private static bool OnPress(Button __instance)
{
if ((Object)(object)NachoAchievements.achievementEnterButton != (Object)null && (Object)(object)__instance == (Object)(object)NachoAchievements.achievementEnterButton.GetComponentInChildren<Button>())
{
NachoAchievements.OnAchievementsClicked();
return false;
}
return true;
}
}
[HarmonyPatch(typeof(EnemyAI))]
internal class EnemyAIPatches
{
private static Dictionary<EnemyAI, float> enemiesStareTime = new Dictionary<EnemyAI, float>();
[HarmonyPatch("DetectNoise")]
[HarmonyPostfix]
private static void OnDetectNoise(EnemyAI __instance, Vector3 noisePosition, float noiseLoudness, int timesPlayedInOneSpot = 0, int noiseID = 0)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
if (!Physics.Linecast(((Component)__instance).transform.position, noisePosition, StartOfRound.Instance.collidersAndRoomMask))
{
int num = noiseID;
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Enemy Sound Heard");
dictionary.Add("enemy", __instance.enemyType.enemyName);
dictionary.Add("sound", num.ToString());
dictionary.Add("soundMinDistance", Vector3.Distance(((Component)__instance).transform.position, noisePosition).ToString());
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
NachoAchievements.CheckAchievements(dictionary);
}
}
[HarmonyPatch("Update")]
[HarmonyPostfix]
private static void CheckStaring(EnemyAI __instance)
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
if (!enemiesStareTime.ContainsKey(__instance))
{
enemiesStareTime.Add(__instance, 0f);
}
if (StartOfRound.Instance.localPlayerController.HasLineOfSightToPosition(((Component)__instance).transform.position + Vector3.up * 0.4f, 60f, 100, 5f))
{
enemiesStareTime[__instance] += Time.deltaTime;
if (enemiesStareTime[__instance] >= 5f)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "Enemy Stared At");
dictionary.Add("enemy", __instance.enemyType.enemyName);
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
NachoAchievements.CheckAchievements(dictionary);
enemiesStareTime[__instance] = 0f;
}
}
else
{
enemiesStareTime[__instance] = 0f;
}
}
[HarmonyPatch("OnDestroy")]
[HarmonyPostfix]
private static void OnDestroyed(EnemyAI __instance)
{
enemiesStareTime.Clear();
}
}
[HarmonyPatch(typeof(HUDManager))]
internal class HUDManagerPatches
{
[HarmonyPatch("AttemptScanNewCreature")]
[HarmonyPostfix]
private static void OnAttemptNewCreatureScan(HUDManager __instance)
{
}
[HarmonyPatch("FillEndGameStats")]
[HarmonyPostfix]
private static void OnResultsFilled(HUDManager __instance)
{
int num = 0;
int num2 = 0;
for (int i = 0; i < __instance.playersManager.allPlayerScripts.Length; i++)
{
PlayerControllerB val = __instance.playersManager.allPlayerScripts[i];
if (val.disconnectedMidGame || val.isPlayerDead || val.isPlayerControlled)
{
if (val.isPlayerDead)
{
num++;
}
else if (val.isPlayerControlled)
{
num2++;
}
}
int num3 = 0;
float num4 = (float)RoundManager.Instance.scrapCollectedInLevel / RoundManager.Instance.totalScrapValueInLevel;
if (num2 == StartOfRound.Instance.connectedPlayersAmount + 1)
{
num3++;
}
else if (num > 1)
{
num3--;
}
if (num4 >= 0.99f)
{
num3 += 2;
}
else if (num4 >= 0.6f)
{
num3++;
}
else if (num4 <= 0.25f)
{
num3--;
}
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Rank Or Above Gotten");
dictionary.Add("rank", num3.ToString());
dictionary.Add("weapon", "Landmine");
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
NachoAchievements.CheckAchievements(dictionary);
}
}
}
[HarmonyPatch(typeof(KnifeItem))]
internal class KnifePatches
{
[HarmonyPatch("HitKnife")]
[HarmonyPrefix]
private static void OnHitKnife(KnifeItem __instance, bool cancel = false)
{
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Unknown result type (might be due to invalid IL or missing references)
//IL_0165: Unknown result type (might be due to invalid IL or missing references)
//IL_016a: Unknown result type (might be due to invalid IL or missing references)
//IL_016e: Unknown result type (might be due to invalid IL or missing references)
//IL_0173: Unknown result type (might be due to invalid IL or missing references)
//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
//IL_01de: Unknown result type (might be due to invalid IL or missing references)
//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
//IL_018f: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)__instance.previousPlayerHeldBy == (Object)null || cancel || !(Time.realtimeSinceStartup - __instance.timeAtLastDamageDealt > 0.43f))
{
return;
}
RaycastHit[] source = Physics.SphereCastAll(((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.right * 0.1f, 0.3f, ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.forward, 0.75f, __instance.knifeMask, (QueryTriggerInteraction)2);
List<RaycastHit> list = source.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList();
List<EnemyAI> list2 = new List<EnemyAI>();
IHittable val2 = default(IHittable);
for (int i = 0; i < list.Count; i++)
{
RaycastHit val = list[i];
if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer == 8)
{
continue;
}
val = list[i];
if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer == 11)
{
continue;
}
val = list[i];
if (!((Component)((RaycastHit)(ref val)).transform).TryGetComponent<IHittable>(ref val2))
{
continue;
}
val = list[i];
if ((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)__instance.previousPlayerHeldBy).transform)
{
continue;
}
val = list[i];
if (!(((RaycastHit)(ref val)).point == Vector3.zero))
{
Vector3 position = ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.position;
RaycastHit val3 = list[i];
if (Physics.Linecast(position, ((RaycastHit)(ref val3)).point, ref val, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1))
{
continue;
}
}
Vector3 forward = ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.forward;
val = list[i];
EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref val)).transform).GetComponent<EnemyAICollisionDetect>();
if ((Object)(object)component != (Object)null && !((Object)(object)component.mainScript == (Object)null) && !list2.Contains(component.mainScript))
{
if (component.mainScript.enemyHP > 0 && component.mainScript.enemyHP - ((component.mainScript.enemyType.enemyName == "Butler") ? 100 : __instance.knifeHitForce) <= 0)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Kill Enemy");
dictionary.Add("enemy", component.mainScript.enemyType.enemyName);
dictionary.Add("weapon", "Knife");
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary.Add("local", ((Object)(object)((GrabbableObject)__instance).playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController).ToString());
NachoAchievements.CheckAchievements(dictionary);
}
list2.Add(component.mainScript);
}
}
}
}
[HarmonyPatch(typeof(Landmine))]
internal class LandminePatches
{
private static bool playerSetOffMine = false;
private static List<EnemyAI> enemiesThatWereAlive = new List<EnemyAI>();
[HarmonyPatch("OnTriggerExit")]
[HarmonyPrefix]
private static void OnMineSetOff(Landmine __instance, Collider other)
{
if (!__instance.hasExploded && __instance.mineActivated)
{
PlayerControllerB component = ((Component)other).gameObject.GetComponent<PlayerControllerB>();
if ((Object)(object)component != (Object)null && (Object)(object)component == (Object)(object)StartOfRound.Instance.localPlayerController)
{
playerSetOffMine = true;
}
}
}
[HarmonyPatch("SpawnExplosion")]
[HarmonyPrefix]
private static void OnMineExploded(Landmine __instance, Vector3 explosionPosition, bool spawnExplosionEffect = false, float killRange = 1f, float damageRange = 1f, int nonLethalDamage = 50, float physicsForce = 0f, GameObject overridePrefab = null, bool goThroughCar = false)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
Collider[] array = Physics.OverlapSphere(explosionPosition, damageRange, 2621448, (QueryTriggerInteraction)2);
RaycastHit val = default(RaycastHit);
for (int i = 0; i < array.Length; i++)
{
float num = Vector3.Distance(explosionPosition, ((Component)array[i]).transform.position);
if ((!Physics.Linecast(explosionPosition, ((Component)array[i]).transform.position + Vector3.up * 0.3f, ref val, 1073742080, (QueryTriggerInteraction)1) || ((goThroughCar || ((Component)((RaycastHit)(ref val)).collider).gameObject.layer != 30) && !(num > 4f))) && ((Component)array[i]).gameObject.layer == 19)
{
EnemyAICollisionDetect componentInChildren = ((Component)array[i]).gameObject.GetComponentInChildren<EnemyAICollisionDetect>();
if ((Object)(object)componentInChildren != (Object)null && ((NetworkBehaviour)componentInChildren.mainScript).IsOwner && num < 4.5f && !componentInChildren.mainScript.isEnemyDead)
{
enemiesThatWereAlive.Add(componentInChildren.mainScript);
}
}
}
}
[HarmonyPatch("SpawnExplosion")]
[HarmonyPostfix]
private static void PostMineExploded(Landmine __instance, Vector3 explosionPosition, bool spawnExplosionEffect = false, float killRange = 1f, float damageRange = 1f, int nonLethalDamage = 50, float physicsForce = 0f, GameObject overridePrefab = null, bool goThroughCar = false)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
Collider[] array = Physics.OverlapSphere(explosionPosition, damageRange, 2621448, (QueryTriggerInteraction)2);
RaycastHit val = default(RaycastHit);
for (int i = 0; i < array.Length; i++)
{
float num = Vector3.Distance(explosionPosition, ((Component)array[i]).transform.position);
if ((!Physics.Linecast(explosionPosition, ((Component)array[i]).transform.position + Vector3.up * 0.3f, ref val, 1073742080, (QueryTriggerInteraction)1) || ((goThroughCar || ((Component)((RaycastHit)(ref val)).collider).gameObject.layer != 30) && !(num > 4f))) && ((Component)array[i]).gameObject.layer == 19)
{
EnemyAICollisionDetect componentInChildren = ((Component)array[i]).gameObject.GetComponentInChildren<EnemyAICollisionDetect>();
if ((Object)(object)componentInChildren != (Object)null && ((NetworkBehaviour)componentInChildren.mainScript).IsOwner && num < 4.5f && componentInChildren.mainScript.isEnemyDead && enemiesThatWereAlive.Contains(componentInChildren.mainScript))
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Kill Enemy");
dictionary.Add("enemy", componentInChildren.mainScript.enemyType.enemyName);
dictionary.Add("weapon", "Landmine");
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary.Add("local", playerSetOffMine.ToString());
NachoAchievements.CheckAchievements(dictionary);
}
}
}
}
}
[HarmonyPatch(typeof(QuickMenuManager))]
internal class MenuManagerPatches
{
[HarmonyPatch("OpenQuickMenu")]
[HarmonyPostfix]
private static void AddMenuButton(QuickMenuManager __instance)
{
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
if (!__instance.mainButtonsPanel.activeSelf)
{
return;
}
Transform[] componentsInChildren = __instance.mainButtonsPanel.GetComponentsInChildren<Transform>();
foreach (Transform val in componentsInChildren)
{
GameObject gameObject = ((Component)val).gameObject;
if (((Object)gameObject).name == "Resume" && (Object)(object)NachoAchievements.achievementEnterButton == (Object)null)
{
RectTransform componentInChildren = gameObject.GetComponentInChildren<RectTransform>();
componentInChildren.anchoredPosition += new Vector2(0f, 90f);
NachoAchievements.achievementEnterButton = Object.Instantiate<GameObject>(gameObject, __instance.mainButtonsPanel.transform);
RectTransform component = NachoAchievements.achievementEnterButton.GetComponent<RectTransform>();
component.anchoredPosition -= new Vector2(0f, 90f);
((TMP_Text)NachoAchievements.achievementEnterButton.GetComponentInChildren<TextMeshProUGUI>()).text = "> Achievements";
}
}
}
}
[HarmonyPatch(typeof(PlayerControllerB))]
internal class PlayerControllerBPatches
{
public static Dictionary<GrabbableObject, PlayerControllerB> playerDroppedBy = new Dictionary<GrabbableObject, PlayerControllerB>();
[HarmonyPatch("KillPlayer")]
[HarmonyPrefix]
private static void OnPlayerDeath(PlayerControllerB __instance, CauseOfDeath causeOfDeath = 0)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
CauseOfDeath val = causeOfDeath;
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Death");
dictionary.Add("cause", ((object)(CauseOfDeath)(ref val)).ToString());
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary.Add("local", ((Object)(object)__instance == (Object)(object)StartOfRound.Instance.localPlayerController).ToString());
NachoAchievements.CheckAchievements(dictionary);
}
[HarmonyPatch("GrabObject")]
[HarmonyPostfix]
private static void OnGrabObject(PlayerControllerB __instance)
{
if (__instance.ItemSlots != null)
{
int num = Mathf.RoundToInt(Mathf.Clamp(__instance.carryWeight - 1f, 0f, 100f) * 105f);
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Grab Object");
dictionary.Add("weight", num.ToString());
dictionary.Add("scrap", __instance.currentlyGrabbingObject.itemProperties.itemName);
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary.Add("local", ((Object)(object)__instance == (Object)(object)StartOfRound.Instance.localPlayerController).ToString());
NachoAchievements.CheckAchievements(dictionary);
}
}
[HarmonyPatch("DiscardHeldObject")]
[HarmonyPrefix]
private static void OnPlaceObject(PlayerControllerB __instance)
{
playerDroppedBy[__instance.currentlyHeldObjectServer] = __instance;
}
[HarmonyPatch("ConnectClientToPlayerObject")]
[HarmonyPostfix]
private static void OnClientConnect(PlayerControllerB __instance)
{
NachoAchievements.Instance.GetAchievementsOnServerRpc(__instance.playerSteamId);
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Player Join");
dictionary.Add("players", __instance.playersManager.allPlayerScripts.Length.ToString());
NachoAchievements.CheckAchievements(dictionary);
}
}
[HarmonyPatch(typeof(RoundManager))]
internal class RoundManagerPatches
{
[HarmonyPatch("CollectNewScrapForThisRound")]
[HarmonyPrefix]
private static void AddScrapAchievements(RoundManager __instance, GrabbableObject scrapObject)
{
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
if (scrapObject.scrapPersistedThroughRounds || __instance.scrapCollectedThisRound.Contains(scrapObject))
{
return;
}
GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>();
int num = 0;
GrabbableObject[] array2 = array;
foreach (GrabbableObject val in array2)
{
if (val.itemProperties.itemName == scrapObject.itemProperties.itemName)
{
Bounds bounds = StartOfRound.Instance.shipBounds.bounds;
if (((Bounds)(ref bounds)).Contains(((Component)val).gameObject.transform.position))
{
num++;
}
}
}
if (scrapObject.itemProperties.isScrap)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Scrap Collected");
dictionary.Add("scrap", scrapObject.itemProperties.itemName);
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary.Add("amount in ship", num.ToString());
dictionary.Add("local", ((Object)(object)scrapObject.playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController).ToString());
NachoAchievements.CheckAchievements(dictionary);
}
else
{
Dictionary<string, string> dictionary2 = new Dictionary<string, string>();
dictionary2.Add("callback", "On Item Collected");
dictionary2.Add("scrap", scrapObject.itemProperties.itemName);
dictionary2.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary2.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary2.Add("amount in ship", num.ToString());
dictionary2.Add("local", ((Object)(object)scrapObject.playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController).ToString());
NachoAchievements.CheckAchievements(dictionary2);
}
}
[HarmonyPatch("FinishGeneratingLevel")]
[HarmonyPostfix]
private static void OnLevelFinishedLoading(RoundManager __instance)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Level Finished Loading");
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
NachoAchievements.CheckAchievements(dictionary);
}
[HarmonyPatch("DestroyTreeAtPosition")]
[HarmonyPrefix]
private static void OnDestroyTree(RoundManager __instance, Vector3 pos, float range = 5f)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
if (Physics.OverlapSphereNonAlloc(pos, range, __instance.tempColliderResults, 33554432, (QueryTriggerInteraction)1) != 0)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Tree Destroyed");
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary.Add("local", TerrainObstacleTriggerPatches.driverWhoCollidedIsSelf.ToString());
NachoAchievements.CheckAchievements(dictionary);
TerrainObstacleTriggerPatches.driverWhoCollidedIsSelf = false;
}
}
}
[HarmonyPatch(typeof(SandWormAI))]
internal class SandWormAIPatches
{
[HarmonyPatch("OnCollideWithEnemy")]
[HarmonyPostfix]
private static void OnWormEatEnemy(SandWormAI __instance, EnemyAI enemyScript = null)
{
if (__instance.emerged)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Kill Enemy");
dictionary.Add("enemy", enemyScript.enemyType.enemyName);
dictionary.Add("weapon", "Worm");
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary.Add("local", ((Object)(object)((EnemyAI)__instance).targetPlayer == (Object)(object)StartOfRound.Instance.localPlayerController).ToString());
NachoAchievements.CheckAchievements(dictionary);
}
}
}
[HarmonyPatch(typeof(ShotgunItem))]
internal class ShotgunPatches
{
private static List<EnemyAI> enemiesThatWereAlive = new List<EnemyAI>();
[HarmonyPatch("ShootGun")]
[HarmonyPrefix]
private static void OnGunShotPre(ShotgunItem __instance, Vector3 shotgunPosition, Vector3 shotgunForward)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
enemiesThatWereAlive.Clear();
RaycastHit[] array = (RaycastHit[])(object)new RaycastHit[10];
Ray val = default(Ray);
((Ray)(ref val))..ctor(shotgunPosition - shotgunForward * 10f, shotgunForward);
int num = Physics.SphereCastNonAlloc(val, 5f, array, 15f, 524288, (QueryTriggerInteraction)2);
List<EnemyAI> list = new List<EnemyAI>();
RaycastHit val2 = default(RaycastHit);
IHittable val3 = default(IHittable);
for (int i = 0; i < num; i++)
{
if (!Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref array[i])).transform).GetComponent<EnemyAICollisionDetect>()))
{
continue;
}
EnemyAI mainScript = ((Component)((RaycastHit)(ref array[i])).transform).GetComponent<EnemyAICollisionDetect>().mainScript;
if (((Object)(object)__instance.heldByEnemy != (Object)null && (Object)(object)__instance.heldByEnemy == (Object)(object)mainScript) || ((RaycastHit)(ref array[i])).distance == 0f || Physics.Linecast(shotgunPosition, ((RaycastHit)(ref array[i])).point, ref val2, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1) || !((Component)((RaycastHit)(ref array[i])).transform).TryGetComponent<IHittable>(ref val3))
{
continue;
}
float num2 = Vector3.Distance(shotgunPosition, ((RaycastHit)(ref array[i])).point);
int num3 = ((num2 < 3.7f) ? 5 : ((!(num2 < 6f)) ? 2 : 3));
EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref array[i])).collider).GetComponent<EnemyAICollisionDetect>();
if ((!((Object)(object)component != (Object)null) || (!((Object)(object)component.mainScript == (Object)null) && !list.Contains(component.mainScript))) && (Object)(object)component != (Object)null)
{
if (!component.mainScript.isEnemyDead)
{
enemiesThatWereAlive.Add(component.mainScript);
}
list.Add(component.mainScript);
}
}
}
[HarmonyPatch("ShootGun")]
[HarmonyPostfix]
private static void OnGunShot(ShotgunItem __instance, Vector3 shotgunPosition, Vector3 shotgunForward)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_0118: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
RaycastHit[] array = (RaycastHit[])(object)new RaycastHit[10];
Ray val = default(Ray);
((Ray)(ref val))..ctor(shotgunPosition - shotgunForward * 10f, shotgunForward);
int num = Physics.SphereCastNonAlloc(val, 5f, array, 15f, 524288, (QueryTriggerInteraction)2);
List<EnemyAI> list = new List<EnemyAI>();
int num2 = 0;
RaycastHit val2 = default(RaycastHit);
IHittable val3 = default(IHittable);
for (int i = 0; i < num; i++)
{
if (!Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref array[i])).transform).GetComponent<EnemyAICollisionDetect>()))
{
continue;
}
EnemyAI mainScript = ((Component)((RaycastHit)(ref array[i])).transform).GetComponent<EnemyAICollisionDetect>().mainScript;
if (((Object)(object)__instance.heldByEnemy != (Object)null && (Object)(object)__instance.heldByEnemy == (Object)(object)mainScript) || ((RaycastHit)(ref array[i])).distance == 0f || Physics.Linecast(shotgunPosition, ((RaycastHit)(ref array[i])).point, ref val2, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1) || !((Component)((RaycastHit)(ref array[i])).transform).TryGetComponent<IHittable>(ref val3))
{
continue;
}
float num3 = Vector3.Distance(shotgunPosition, ((RaycastHit)(ref array[i])).point);
int num4 = ((num3 < 3.7f) ? 5 : ((!(num3 < 6f)) ? 2 : 3));
EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref array[i])).collider).GetComponent<EnemyAICollisionDetect>();
if ((!((Object)(object)component != (Object)null) || (!((Object)(object)component.mainScript == (Object)null) && !list.Contains(component.mainScript))) && (Object)(object)component != (Object)null)
{
if (component.mainScript.isEnemyDead && enemiesThatWereAlive.Contains(component.mainScript))
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Kill Enemy");
dictionary.Add("enemy", component.mainScript.enemyType.enemyName);
dictionary.Add("weapon", "Shotgun");
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary.Add("local", ((Object)(object)((GrabbableObject)__instance).playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController).ToString());
NachoAchievements.CheckAchievements(dictionary);
}
list.Add(component.mainScript);
}
}
}
}
[HarmonyPatch(typeof(Shovel))]
internal class ShovelPatches
{
private static List<EnemyAI> enemiesThatWereAlive = new List<EnemyAI>();
[HarmonyPatch("HitShovel")]
[HarmonyPrefix]
private static void PreHitShovel(Shovel __instance, bool cancel = false)
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0198: Unknown result type (might be due to invalid IL or missing references)
//IL_019d: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Unknown result type (might be due to invalid IL or missing references)
//IL_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
enemiesThatWereAlive.Clear();
if (cancel)
{
return;
}
__instance.previousPlayerHeldBy.twoHanded = false;
__instance.objectsHitByShovel = Physics.SphereCastAll(((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.right * -0.35f, 0.8f, ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.forward, 1.5f, __instance.shovelMask, (QueryTriggerInteraction)2);
__instance.objectsHitByShovelList = __instance.objectsHitByShovel.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList();
List<EnemyAI> list = new List<EnemyAI>();
IHittable val2 = default(IHittable);
for (int i = 0; i < __instance.objectsHitByShovelList.Count; i++)
{
RaycastHit val = __instance.objectsHitByShovelList[i];
if (!((Component)((RaycastHit)(ref val)).transform).TryGetComponent<IHittable>(ref val2))
{
continue;
}
val = __instance.objectsHitByShovelList[i];
if ((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)__instance.previousPlayerHeldBy).transform)
{
continue;
}
val = __instance.objectsHitByShovelList[i];
if (!(((RaycastHit)(ref val)).point == Vector3.zero))
{
Vector3 position = ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.position;
RaycastHit val3 = __instance.objectsHitByShovelList[i];
if (Physics.Linecast(position, ((RaycastHit)(ref val3)).point, ref val, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1))
{
continue;
}
}
Vector3 forward = ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.forward;
val = __instance.objectsHitByShovelList[i];
EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref val)).transform).GetComponent<EnemyAICollisionDetect>();
if ((Object)(object)component != (Object)null && !((Object)(object)component.mainScript == (Object)null) && !list.Contains(component.mainScript) && (!StartOfRound.Instance.hangarDoorsClosed || component.mainScript.isInsidePlayerShip == __instance.previousPlayerHeldBy.isInHangarShipRoom))
{
if (!component.mainScript.isEnemyDead)
{
enemiesThatWereAlive.Add(component.mainScript);
}
list.Add(component.mainScript);
}
}
}
[HarmonyPatch("HitShovel")]
[HarmonyPostfix]
private static void PostHitShovel(Shovel __instance, bool cancel = false)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_018d: Unknown result type (might be due to invalid IL or missing references)
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
//IL_013f: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0150: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
if (cancel)
{
return;
}
__instance.previousPlayerHeldBy.twoHanded = false;
__instance.objectsHitByShovel = Physics.SphereCastAll(((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.right * -0.35f, 0.8f, ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.forward, 1.5f, __instance.shovelMask, (QueryTriggerInteraction)2);
__instance.objectsHitByShovelList = __instance.objectsHitByShovel.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList();
List<EnemyAI> list = new List<EnemyAI>();
IHittable val2 = default(IHittable);
for (int i = 0; i < __instance.objectsHitByShovelList.Count; i++)
{
RaycastHit val = __instance.objectsHitByShovelList[i];
if (!((Component)((RaycastHit)(ref val)).transform).TryGetComponent<IHittable>(ref val2))
{
continue;
}
val = __instance.objectsHitByShovelList[i];
if ((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)__instance.previousPlayerHeldBy).transform)
{
continue;
}
val = __instance.objectsHitByShovelList[i];
if (!(((RaycastHit)(ref val)).point == Vector3.zero))
{
Vector3 position = ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.position;
RaycastHit val3 = __instance.objectsHitByShovelList[i];
if (Physics.Linecast(position, ((RaycastHit)(ref val3)).point, ref val, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1))
{
continue;
}
}
Vector3 forward = ((Component)__instance.previousPlayerHeldBy.gameplayCamera).transform.forward;
val = __instance.objectsHitByShovelList[i];
EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref val)).transform).GetComponent<EnemyAICollisionDetect>();
if ((Object)(object)component != (Object)null && !((Object)(object)component.mainScript == (Object)null) && !list.Contains(component.mainScript) && (!StartOfRound.Instance.hangarDoorsClosed || component.mainScript.isInsidePlayerShip == __instance.previousPlayerHeldBy.isInHangarShipRoom))
{
if (component.mainScript.isEnemyDead && enemiesThatWereAlive.Contains(component.mainScript))
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Kill Enemy");
dictionary.Add("enemy", component.mainScript.enemyType.enemyName);
dictionary.Add("weapon", "Shovel");
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary.Add("local", ((Object)(object)((GrabbableObject)__instance).playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController).ToString());
NachoAchievements.CheckAchievements(dictionary);
}
list.Add(component.mainScript);
}
}
}
}
[HarmonyPatch(typeof(StartOfRound))]
internal class StartOfRoundPatches
{
[HarmonyPatch("OnLocalDisconnect")]
[HarmonyPostfix]
private static void OnDisconnect(StartOfRound __instance)
{
NachoAchievements.ResetSingleDayAchievements();
}
[HarmonyPatch("ShipHasLeft")]
[HarmonyPostfix]
private static void OnShipLeft(StartOfRound __instance)
{
NachoAchievements.ResetSingleDayAchievements();
}
}
[HarmonyPatch(typeof(StormyWeather))]
internal class StormyPatches
{
[HarmonyPatch("LightningStrike")]
[HarmonyPrefix]
private static void SpawnLightningPatch(StormyWeather __instance, Vector3 strikePosition, bool useTargetedObject)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
Collider[] array = Physics.OverlapSphere(strikePosition + Vector3.up * 0.25f, 5f, 2621448, (QueryTriggerInteraction)2);
List<EnemyAI> list = new List<EnemyAI>();
for (int i = 0; i < array.Length; i++)
{
float num = Vector3.Distance(strikePosition + Vector3.up * 0.25f, ((Component)array[i]).transform.position);
if (((Component)array[i]).gameObject.layer == 19)
{
EnemyAICollisionDetect componentInChildren = ((Component)array[i]).gameObject.GetComponentInChildren<EnemyAICollisionDetect>();
if ((Object)(object)componentInChildren != (Object)null && ((NetworkBehaviour)componentInChildren.mainScript).IsOwner && num < 4.5f && componentInChildren.mainScript.enemyHP > 0 && componentInChildren.mainScript.enemyType.canDie && !list.Contains(componentInChildren.mainScript))
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Kill Enemy");
dictionary.Add("enemy", componentInChildren.mainScript.enemyType.enemyName);
dictionary.Add("weapon", "Lightning");
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("local", (useTargetedObject && PlayerControllerBPatches.playerDroppedBy.ContainsKey(__instance.targetingMetalObject) && (Object)(object)PlayerControllerBPatches.playerDroppedBy[__instance.targetingMetalObject] == (Object)(object)StartOfRound.Instance.localPlayerController).ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
NachoAchievements.CheckAchievements(dictionary);
list.Add(componentInChildren.mainScript);
}
}
}
}
}
[HarmonyPatch(typeof(StoryLog))]
internal class StoryLogPatches
{
[HarmonyPatch("CollectLog")]
[HarmonyPostfix]
private static void OnStoryLogCollected(StoryLog __instance)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Log Collected");
dictionary.Add("logID", __instance.storyLogID.ToString());
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
NachoAchievements.CheckAchievements(dictionary);
}
}
[HarmonyPatch(typeof(StunGrenadeItem))]
internal class StunGrenadePatches
{
[HarmonyPatch("ExplodeStunGrenade")]
[HarmonyPrefix]
private static void ExplodeGrenadePatch(StunGrenadeItem __instance)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
if (!(((GrabbableObject)__instance).itemProperties.itemName == "Easter egg") || !__instance.explodeOnThrow)
{
return;
}
Collider[] array = Physics.OverlapSphere(((Component)__instance).transform.position + Vector3.up * 0.2f, 3f, 2621448, (QueryTriggerInteraction)2);
List<EnemyAI> list = new List<EnemyAI>();
for (int i = 0; i < array.Length; i++)
{
float num = Vector3.Distance(((Component)__instance).transform.position + Vector3.up * 0.2f, ((Component)array[i]).transform.position);
if (((Component)array[i]).gameObject.layer != 19)
{
continue;
}
EnemyAICollisionDetect componentInChildren = ((Component)array[i]).gameObject.GetComponentInChildren<EnemyAICollisionDetect>();
if ((Object)(object)componentInChildren != (Object)null && ((NetworkBehaviour)componentInChildren.mainScript).IsOwner && num < 4.5f && !list.Contains(componentInChildren.mainScript) && componentInChildren.mainScript.enemyType.canDie)
{
if (!componentInChildren.mainScript.isEnemyDead)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("callback", "On Kill Enemy");
dictionary.Add("enemy", componentInChildren.mainScript.enemyType.enemyName);
dictionary.Add("weapon", "Easter egg");
dictionary.Add("moon", StartOfRound.Instance.currentLevelID.ToString());
dictionary.Add("challenge", StartOfRound.Instance.isChallengeFile.ToString());
dictionary.Add("local", ((Object)(object)__instance.playerThrownBy == (Object)(object)StartOfRound.Instance.localPlayerController).ToString());
NachoAchievements.CheckAchievements(dictionary);
}
list.Add(componentInChildren.mainScript);
}
}
}
}
[HarmonyPatch(typeof(TerrainObstacleTrigger))]
internal class TerrainObstacleTriggerPatches
{
public static bool driverWhoCollidedIsSelf;
[HarmonyPatch("OnTriggerEnter")]
[HarmonyPrefix]
private static void OnCarHit(TerrainObstacleTrigger __instance, Collider other)
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
VehicleController component = ((Component)other).GetComponent<VehicleController>();
if (!((Object)(object)component == (Object)null) && ((NetworkBehaviour)component).IsOwner && ((Vector3)(ref component.averageVelocity)).magnitude > 5f && Vector3.Angle(component.averageVelocity, ((Component)__instance).transform.position - component.mainRigidbody.position) < 80f && (Object)(object)component.currentDriver == (Object)(object)StartOfRound.Instance.localPlayerController)
{
driverWhoCollidedIsSelf = true;
}
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}