using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Unity.IL2CPP;
using ColorCrosshair.API;
using GTFO.API.Utilities;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("ColorCrosshair")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+a76fbd3f996b5dcbc84ba9e3f113eda1b6e8fa05")]
[assembly: AssemblyProduct("ColorCrosshair")]
[assembly: AssemblyTitle("ColorCrosshair")]
[assembly: AssemblyVersion("1.0.0.0")]
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;
}
}
}
namespace ColorCrosshair
{
internal static class ColorPatch
{
public static void Init()
{
ColorCrosshairAPI.OnReload += RefreshDefaultColors;
}
public static void RefreshDefaultColors()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: 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_0026: 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_005d: 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)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
CrosshairGuiLayer crosshairLayer = GuiManager.CrosshairLayer;
CircleCrosshair circleCrosshair = crosshairLayer.m_circleCrosshair;
Color color = (circleCrosshair.m_crosshairColOrg = Configuration.defaultColor);
circleCrosshair.SetColor(color);
color = (circleCrosshair.m_chargeUpColOrg = Configuration.chargeColor);
circleCrosshair.SetChargeUpColor(color);
float value = CellSettingsManager.SettingsData.HUD.Player_HitIndicatorOpacity.Value;
foreach (CrosshairHitIndicator item in (Il2CppArrayBase<CrosshairHitIndicator>)(object)crosshairLayer.m_hitIndicators)
{
item.m_hitColor = Configuration.hitmarkerColor;
item.UpdateColorsWithAlphaMul(value);
}
foreach (CrosshairHitIndicator item2 in (Il2CppArrayBase<CrosshairHitIndicator>)(object)crosshairLayer.m_weakspotHitIndicators)
{
item2.m_hitColor = Configuration.critHitmarkerColor;
item2.m_deathColor = Configuration.killHitmarkerColor;
item2.UpdateColorsWithAlphaMul(value);
}
foreach (CrosshairHitIndicator item3 in (Il2CppArrayBase<CrosshairHitIndicator>)(object)crosshairLayer.m_noDamageHitIndicators)
{
item3.m_hitColor = Configuration.armorHitmarkerColor;
item3.UpdateColorsWithAlphaMul(value);
}
}
[HarmonyPatch(typeof(CrosshairGuiLayer), "Setup")]
[HarmonyWrapSafe]
[HarmonyPostfix]
private static void SetDefaultColors(CrosshairGuiLayer __instance)
{
RefreshDefaultColors();
}
[HarmonyPatch(typeof(CrosshairGuiLayer), "TriggerChargeUpBlink")]
[HarmonyWrapSafe]
[HarmonyPrefix]
private static void SetChargeNotificationColors(ref Color blinkColor)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
if (((Color)(ref blinkColor)).Equals(Color.white))
{
blinkColor = Configuration.chargeBlinkColor;
}
else
{
blinkColor = Configuration.chargeWarningColor;
}
}
[HarmonyPatch(typeof(CrosshairGuiLayer), "TriggerBlink")]
[HarmonyWrapSafe]
[HarmonyPrefix]
private static void SetEnemyInRangeColor(ref Color blinkColor)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
blinkColor = Configuration.enemyBlinkColor;
}
}
internal static class Configuration
{
public static Color defaultColor = new Color(0.65f, 0.65f, 0.65f, 1f);
public static Color chargeColor = new Color(0.85f, 0.85f, 0.85f, 0.7f);
public static Color chargeBlinkColor = Color.white;
public static Color chargeWarningColor = ColorExt.Red(0.6f);
public static Color enemyBlinkColor = Color.white;
public static Color hitmarkerColor = new Color(1f, 0f, 0f, 0.408f);
public static Color critHitmarkerColor = new Color(1f, 0.212f, 0f, 0.314f);
public static Color killHitmarkerColor = new Color(1f, 0.678f, 0.051f, 1f);
public static Color armorHitmarkerColor = new Color(1f, 1f, 1f, 0.22f);
private static ConfigFile configFile;
internal static void Init()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Expected O, but got Unknown
configFile = new ConfigFile(Path.Combine(Paths.ConfigPath, "ColorCrosshair.cfg"), true);
BindAll(configFile);
ColorCrosshairAPI.OnReload += OnFileChanged;
}
private static void OnFileChanged()
{
string text = "General Settings";
configFile.Reload();
SetField(ref defaultColor, (string)configFile[text, "Default Color"].BoxedValue);
SetField(ref chargeColor, (string)configFile[text, "Chargeup Color"].BoxedValue);
SetField(ref chargeBlinkColor, (string)configFile[text, "Charge Finished Color"].BoxedValue);
SetField(ref chargeWarningColor, (string)configFile[text, "Charge Warning Color"].BoxedValue);
SetField(ref enemyBlinkColor, (string)configFile[text, "Enemy In Range Color"].BoxedValue);
text = "Hitmarker Settings";
SetField(ref hitmarkerColor, (string)configFile[text, "Hitmarker Color"].BoxedValue);
SetField(ref critHitmarkerColor, (string)configFile[text, "Crit Hitmarker Color"].BoxedValue);
SetField(ref killHitmarkerColor, (string)configFile[text, "Kill Hitmarker Color"].BoxedValue);
SetField(ref armorHitmarkerColor, (string)configFile[text, "Armor Hitmarker Color"].BoxedValue);
}
private static void SetField(ref Color field, string val)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
if (!val.StartsWith('#'))
{
val = "#" + val;
}
Color val2 = default(Color);
if (ColorUtility.TryParseHtmlString(val, ref val2))
{
field = val2;
}
}
private static void BindAll(ConfigFile config)
{
string section = "General Settings";
BindField(ref defaultColor, config, section, "Default Color", "The default color of the reticle.\nVanilla default: #7d7d7d99");
BindField(ref chargeColor, config, section, "Chargeup Color", "The color for melee weapon charging progress.\nVanilla default: #BEBEBEAD");
BindField(ref chargeBlinkColor, config, section, "Charge Finished Color", "The color that briefly blinks when melee weapon charging finishes.\nVanilla default: #FFFFFFFF");
BindField(ref chargeWarningColor, config, section, "Charge Warning Color", "The color that briefly blinks when the melee weapon charge is about to expire.\nVanilla default: #FF000099");
BindField(ref enemyBlinkColor, config, section, "Enemy In Range Color", "The color that briefly blinks when looking at an enemy in melee range while holding a melee weapon.\nVanilla default: #FFFFFFFF");
section = "Hitmarker Settings";
BindField(ref hitmarkerColor, config, section, "Hitmarker Color", "The color for normal hitmarkers.\nVanilla default: #FF000068");
BindField(ref critHitmarkerColor, config, section, "Crit Hitmarker Color", "The color for weakspot or back damage hitmarkers.\nVanilla default: #FF360050");
BindField(ref killHitmarkerColor, config, section, "Kill Hitmarker Color", "The color for kill hitmarkers.\nVanilla default: #FFAD0DFF");
BindField(ref armorHitmarkerColor, config, section, "Armor Hitmarker Color", "The color for armor damage hitmarkers.\nVanilla default: #FFFFFF46");
}
private static void BindField(ref Color field, ConfigFile config, string section, string key, string description)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
string value = config.Bind<string>(section, key, ColorUtility.ToHtmlStringRGBA(field), description).Value;
SetField(ref field, value);
}
}
[BepInPlugin("Dinorush.ColorCrosshair", "ColorCrosshair", "1.1.0")]
internal sealed class Loader : BasePlugin
{
public const string MODNAME = "ColorCrosshair";
[Conditional("DEBUG")]
public static void DebugLog(object data)
{
}
public override void Load()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
((BasePlugin)this).Log.LogMessage((object)"Loading ColorCrosshair");
Configuration.Init();
ColorPatch.Init();
ColorCrosshairAPI.Init();
new Harmony("ColorCrosshair").PatchAll(typeof(ColorPatch));
((BasePlugin)this).Log.LogMessage((object)"Loaded ColorCrosshair");
}
}
}
namespace ColorCrosshair.API
{
public static class ColorCrosshairAPI
{
public static Color DefaultColor => Configuration.defaultColor;
public static Color ChargeColor => Configuration.chargeColor;
public static Color ChargeBlinkColor => Configuration.chargeBlinkColor;
public static Color ChargeWarningColor => Configuration.chargeWarningColor;
public static Color EnemyBlinkColor => Configuration.enemyBlinkColor;
public static event Action? OnReload;
internal static void Init()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
LiveEdit.CreateListener(Paths.ConfigPath, "ColorCrosshair.cfg", false).FileChanged += new LiveEditEventHandler(RunOnFileChanged);
}
private static void RunOnFileChanged(LiveEditEventArgs _)
{
ColorCrosshairAPI.OnReload?.Invoke();
}
}
}