using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem;
using Il2CppSystem.Reflection;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Rendering;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("Beacon")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Beacon")]
[assembly: AssemblyTitle("Beacon")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[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 BigWalkBeaconMod
{
[BepInPlugin("com.gogogadgetjustice.bigwalk.beaconmod", "BigWalkBeaconMod", "1.2.0")]
public class BeaconModPlugin : BasePlugin
{
internal static ManualLogSource Log;
public override void Load()
{
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Expected O, but got Unknown
Log = ((BasePlugin)this).Log;
Log.LogInfo((object)"BigWalkBeaconMod v1.2 loaded.");
Log.LogInfo((object)"Press 9 to toggle beacons on nearby dropped items.");
Log.LogInfo((object)"Press 0 to inspect the exact class names of the object you are looking at.");
Log.LogInfo((object)"Press F8 to configure beacons.");
Log.LogInfo((object)"Press F7 to dump the camera hierarchy (helps find the look script to disable while F8 is open).");
ClassInjector.RegisterTypeInIl2Cpp<BeaconUpdater>();
GameObject val = new GameObject("BeaconModUpdater");
Object.DontDestroyOnLoad((Object)(object)val);
((Object)val).hideFlags = (HideFlags)61;
BeaconUpdater beaconUpdater = val.AddComponent<BeaconUpdater>();
beaconUpdater.SetupConfig(((BasePlugin)this).Config);
}
}
public class BeaconUpdater : MonoBehaviour
{
private readonly List<Transform> activeBeacons = new List<Transform>();
private readonly List<Light> activeLights = new List<Light>();
private bool beaconsActive;
private Material beamMaterial;
private ConfigEntry<float> configSearchRange;
private ConfigEntry<int> configMaxBeacons;
private ConfigEntry<bool> configUseAnimation;
private ConfigEntry<float> configColorSpeed;
private ConfigEntry<float> configBeamWidth;
private ConfigEntry<float> configBeamHeight;
private ConfigEntry<int> configPaletteChoice;
private ConfigEntry<float> configLightRange;
private ConfigEntry<float> configLightIntensity;
private ConfigEntry<bool> configEnableParticles;
private ConfigEntry<int> configParticleCount;
private ConfigEntry<float> configParticleSize;
private ConfigEntry<float> configParticleRiseSpeed;
private ConfigEntry<float> configParticleSpinSpeed;
private ConfigEntry<string> configLookScriptName;
private Behaviour cachedLookScript;
private string lookScriptStatus = "";
private string lastLoggedMenuError = null;
private bool isMenuOpen = false;
private Vector2 scrollPos = Vector2.zero;
private Rect windowRect = new Rect(20f, 20f, 340f, 500f);
private CursorLockMode previousLockState;
private bool previousCursorVisible;
public BeaconUpdater(IntPtr ptr)
: base(ptr)
{
}//IL_0030: 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_004f: 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)
private void SetMenuOpen(bool open)
{
//IL_0055: 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_002b: Unknown result type (might be due to invalid IL or missing references)
if (open == isMenuOpen)
{
return;
}
isMenuOpen = open;
if (isMenuOpen)
{
previousLockState = Cursor.lockState;
previousCursorVisible = Cursor.visible;
Cursor.lockState = (CursorLockMode)0;
Cursor.visible = true;
ApplyLookScriptNow();
return;
}
Cursor.lockState = previousLockState;
Cursor.visible = previousCursorVisible;
if ((Object)(object)cachedLookScript != (Object)null)
{
cachedLookScript.enabled = true;
cachedLookScript = null;
}
}
private void ApplyLookScriptNow()
{
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Expected O, but got Unknown
try
{
if ((Object)(object)cachedLookScript != (Object)null)
{
cachedLookScript.enabled = true;
cachedLookScript = null;
}
if (string.IsNullOrEmpty(configLookScriptName.Value))
{
lookScriptStatus = "No script name set yet - camera will keep moving while this menu is open.";
return;
}
Behaviour val = FindBehaviourByTypeName(configLookScriptName.Value);
if ((Object)(object)val != (Object)null)
{
val.enabled = false;
cachedLookScript = val;
lookScriptStatus = "Disabled '" + configLookScriptName.Value + "' - try moving the mouse now.";
}
else
{
lookScriptStatus = "Not found: '" + configLookScriptName.Value + "'. Check the F7 dump for the exact class name.";
}
}
catch (Exception ex)
{
lookScriptStatus = "Error while searching: " + ex.Message;
ManualLogSource log = BeaconModPlugin.Log;
bool flag = default(bool);
BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(45, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("[BeaconMod] Exception in ApplyLookScriptNow: ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<Exception>(ex);
}
log.LogError(val2);
}
}
private Behaviour FindBehaviourByTypeName(string typeName)
{
Transform playerTransform = GetPlayerTransform();
if ((Object)(object)playerTransform == (Object)null)
{
return null;
}
Transform val = (((Object)(object)playerTransform.root != (Object)null) ? playerTransform.root : playerTransform);
Il2CppArrayBase<Component> componentsInChildren = ((Component)val).GetComponentsInChildren<Component>(true);
foreach (Component item in componentsInChildren)
{
if (!((Object)(object)item == (Object)null))
{
string name;
try
{
name = ((MemberInfo)((Object)item).GetIl2CppType()).Name;
}
catch
{
continue;
}
if (name == typeName)
{
return ((Il2CppObjectBase)item).TryCast<Behaviour>();
}
}
}
return null;
}
private void DumpCameraHierarchy()
{
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Expected O, but got Unknown
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01b2: Expected O, but got Unknown
//IL_0242: Unknown result type (might be due to invalid IL or missing references)
//IL_0249: Expected O, but got Unknown
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Expected O, but got Unknown
bool flag = default(bool);
try
{
if ((Object)(object)Camera.main == (Object)null)
{
BeaconModPlugin.Log.LogWarning((object)"No main camera found.");
return;
}
BeaconModPlugin.Log.LogInfo((object)"=== CAMERA HIERARCHY DUMP ===");
Transform val = ((Component)Camera.main).transform;
int num = 0;
while ((Object)(object)val != (Object)null && num < 50)
{
num++;
ManualLogSource log = BeaconModPlugin.Log;
BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(18, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("-- GameObject: ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(((Object)val).name);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" --");
}
log.LogInfo(val2);
Component[] array;
try
{
array = Il2CppArrayBase<Component>.op_Implicit(((Component)val).GetComponents<Component>());
}
catch (Exception ex)
{
ManualLogSource log2 = BeaconModPlugin.Log;
BepInExWarningLogInterpolatedStringHandler val3 = new BepInExWarningLogInterpolatedStringHandler(37, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" (could not read components here: ");
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(ex.Message);
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(")");
}
log2.LogWarning(val3);
val = val.parent;
continue;
}
Component[] array2 = array;
foreach (Component val4 in array2)
{
if ((Object)(object)val4 == (Object)null)
{
continue;
}
try
{
ManualLogSource log3 = BeaconModPlugin.Log;
val2 = new BepInExInfoLogInterpolatedStringHandler(13, 2, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(((MemberInfo)((Object)val4).GetIl2CppType()).Name);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" (full: ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(((Object)val4).GetIl2CppType().FullName);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(")");
}
log3.LogInfo(val2);
}
catch (Exception ex2)
{
ManualLogSource log4 = BeaconModPlugin.Log;
BepInExWarningLogInterpolatedStringHandler val3 = new BepInExWarningLogInterpolatedStringHandler(27, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" (unreadable component: ");
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(ex2.Message);
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(")");
}
log4.LogWarning(val3);
}
}
val = val.parent;
}
BeaconModPlugin.Log.LogInfo((object)"=== END DUMP === Look for a script name with 'Look', 'Mouse', 'Cam', or 'FirstPerson' in it.");
}
catch (Exception ex3)
{
ManualLogSource log5 = BeaconModPlugin.Log;
BepInExErrorLogInterpolatedStringHandler val5 = new BepInExErrorLogInterpolatedStringHandler(46, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val5).AppendLiteral("[BeaconMod] Exception in DumpCameraHierarchy: ");
((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<Exception>(ex3);
}
log5.LogError(val5);
}
}
public void SetupConfig(ConfigFile config)
{
configSearchRange = config.Bind<float>("Detection", "SearchRange", 40f, "Radius (meters) to scan for nearby small objects when beacons are turned on. Applies next time you press 9.");
configMaxBeacons = config.Bind<int>("Detection", "MaxBeacons", 15, "Maximum number of beacons active at once (higher = more lag risk). Applies next time you press 9.");
configUseAnimation = config.Bind<bool>("Beam", "UseAnimation", true, "Enable or disable the pulsing/shimmering beam animation.");
configBeamWidth = config.Bind<float>("Beam", "BeamWidth", 0.12f, "Base thickness of the beacon beams.");
configBeamHeight = config.Bind<float>("Beam", "BeamHeight", 5000f, "How tall each beam extends into the sky.");
configColorSpeed = config.Bind<float>("Beam", "ColorSpeed", 0.1f, "Speed of the palette color rotation (Waluigi Cycle mode only).");
configPaletteChoice = config.Bind<int>("Beam", "PaletteChoice", 0, "0 = Waluigi Cycle, 1 = Solid Purple, 2 = Solid Gold.");
configLightRange = config.Bind<float>("Light", "LightRange", 6f, "How far the glow at the base of each beacon reaches.");
configLightIntensity = config.Bind<float>("Light", "LightIntensity", 0.7f, "Brightness of the glow at the base of each beacon.");
configEnableParticles = config.Bind<bool>("Particles", "EnableParticles", true, "Toggle the swirling particle effect around each beam.");
configParticleCount = config.Bind<int>("Particles", "ParticleCount", 6, "How many particles swirl around each beam. Applies next time you press 9.");
configParticleSize = config.Bind<float>("Particles", "ParticleSize", 0.08f, "Size of each swirling particle.");
configParticleRiseSpeed = config.Bind<float>("Particles", "ParticleRiseSpeed", 0.5f, "How fast particles float upward before looping back to the base.");
configParticleSpinSpeed = config.Bind<float>("Particles", "ParticleSpinSpeed", 1f, "How fast particles orbit around the beam.");
configLookScriptName = config.Bind<string>("Menu", "LookScriptTypeName", "", "Exact class name (not full namespace, just the class name, e.g. 'PlayerLook') of the script that rotates the camera. Press F7 in-game to dump every component near the camera and find it. Leave blank to skip auto-disabling camera look while the F8 menu is open.");
}
public void OnGUI()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
if (isMenuOpen)
{
windowRect = GUILayout.Window(999, windowRect, WindowFunction.op_Implicit((Action<int>)DrawMenuWindow), "Beacon Mod Settings (F8)", (Il2CppReferenceArray<GUILayoutOption>)null);
}
}
private void DrawMenuWindow(int windowID)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: 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_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Expected O, but got Unknown
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
scrollPos = GUILayout.BeginScrollView(scrollPos, (GUILayoutOption[])(object)new GUILayoutOption[2]
{
GUILayout.Width(320f),
GUILayout.Height(430f)
});
try
{
DrawMenuContents();
}
catch (Exception ex)
{
GUILayout.Label("UI error: " + ex.Message, (Il2CppReferenceArray<GUILayoutOption>)null);
if (lastLoggedMenuError != ex.Message)
{
lastLoggedMenuError = ex.Message;
ManualLogSource log = BeaconModPlugin.Log;
bool flag = default(bool);
BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(40, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("[BeaconMod] Exception building F8 menu: ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<Exception>(ex);
}
log.LogError(val);
}
}
finally
{
GUILayout.EndScrollView();
}
GUI.DragWindow(new Rect(0f, 0f, 10000f, 20f));
}
private void DrawMenuContents()
{
GUILayout.Label("— Detection —", (Il2CppReferenceArray<GUILayoutOption>)null);
GUILayout.Label($"Search Range: {configSearchRange.Value:F0}m", (Il2CppReferenceArray<GUILayoutOption>)null);
configSearchRange.Value = GUILayout.HorizontalSlider(configSearchRange.Value, 5f, 150f, Array.Empty<GUILayoutOption>());
GUILayout.Label($"Max Beacons: {configMaxBeacons.Value}", (Il2CppReferenceArray<GUILayoutOption>)null);
configMaxBeacons.Value = Mathf.RoundToInt(GUILayout.HorizontalSlider((float)configMaxBeacons.Value, 1f, 40f, Array.Empty<GUILayoutOption>()));
GUILayout.Space(12f);
GUILayout.Label("— Beam —", (Il2CppReferenceArray<GUILayoutOption>)null);
configUseAnimation.Value = GUILayout.Toggle(configUseAnimation.Value, " Enable Shimmer Animation", Array.Empty<GUILayoutOption>());
GUILayout.Label($"Beam Base Thickness: {configBeamWidth.Value:F2}", (Il2CppReferenceArray<GUILayoutOption>)null);
configBeamWidth.Value = GUILayout.HorizontalSlider(configBeamWidth.Value, 0.02f, 1f, Array.Empty<GUILayoutOption>());
GUILayout.Label($"Beam Height: {configBeamHeight.Value:F0}", (Il2CppReferenceArray<GUILayoutOption>)null);
configBeamHeight.Value = GUILayout.HorizontalSlider(configBeamHeight.Value, 10f, 5000f, Array.Empty<GUILayoutOption>());
GUILayout.Label($"Color Shift Speed: {configColorSpeed.Value:F2}", (Il2CppReferenceArray<GUILayoutOption>)null);
configColorSpeed.Value = GUILayout.HorizontalSlider(configColorSpeed.Value, 0f, 2f, Array.Empty<GUILayoutOption>());
GUILayout.Label("Color Theme Mode:", (Il2CppReferenceArray<GUILayoutOption>)null);
GUILayout.BeginHorizontal((Il2CppReferenceArray<GUILayoutOption>)null);
if (GUILayout.Toggle(configPaletteChoice.Value == 0, "Waluigi Cycle", Array.Empty<GUILayoutOption>()))
{
configPaletteChoice.Value = 0;
}
if (GUILayout.Toggle(configPaletteChoice.Value == 1, "Solid Purple", Array.Empty<GUILayoutOption>()))
{
configPaletteChoice.Value = 1;
}
if (GUILayout.Toggle(configPaletteChoice.Value == 2, "Solid Gold", Array.Empty<GUILayoutOption>()))
{
configPaletteChoice.Value = 2;
}
GUILayout.EndHorizontal();
GUILayout.Space(12f);
GUILayout.Label("— Light —", (Il2CppReferenceArray<GUILayoutOption>)null);
GUILayout.Label($"Light Range: {configLightRange.Value:F1}", (Il2CppReferenceArray<GUILayoutOption>)null);
configLightRange.Value = GUILayout.HorizontalSlider(configLightRange.Value, 1f, 20f, Array.Empty<GUILayoutOption>());
GUILayout.Label($"Light Intensity: {configLightIntensity.Value:F1}", (Il2CppReferenceArray<GUILayoutOption>)null);
configLightIntensity.Value = GUILayout.HorizontalSlider(configLightIntensity.Value, 0f, 5f, Array.Empty<GUILayoutOption>());
GUILayout.Space(12f);
GUILayout.Label("— Particles —", (Il2CppReferenceArray<GUILayoutOption>)null);
configEnableParticles.Value = GUILayout.Toggle(configEnableParticles.Value, " Enable Swirling Particles", Array.Empty<GUILayoutOption>());
GUILayout.Label($"Particle Count: {configParticleCount.Value} (applies on next toggle)", (Il2CppReferenceArray<GUILayoutOption>)null);
configParticleCount.Value = Mathf.RoundToInt(GUILayout.HorizontalSlider((float)configParticleCount.Value, 0f, 20f, Array.Empty<GUILayoutOption>()));
GUILayout.Label($"Particle Size: {configParticleSize.Value:F2}", (Il2CppReferenceArray<GUILayoutOption>)null);
configParticleSize.Value = GUILayout.HorizontalSlider(configParticleSize.Value, 0.02f, 0.3f, Array.Empty<GUILayoutOption>());
GUILayout.Label($"Particle Rise Speed: {configParticleRiseSpeed.Value:F2}", (Il2CppReferenceArray<GUILayoutOption>)null);
configParticleRiseSpeed.Value = GUILayout.HorizontalSlider(configParticleRiseSpeed.Value, 0f, 3f, Array.Empty<GUILayoutOption>());
GUILayout.Label($"Particle Orbit Speed: {configParticleSpinSpeed.Value:F2}", (Il2CppReferenceArray<GUILayoutOption>)null);
configParticleSpinSpeed.Value = GUILayout.HorizontalSlider(configParticleSpinSpeed.Value, 0f, 5f, Array.Empty<GUILayoutOption>());
GUILayout.Space(12f);
GUILayout.Label("— Menu / Look Lock —", (Il2CppReferenceArray<GUILayoutOption>)null);
GUILayout.Label("Camera look script class name (from F7 dump):", (Il2CppReferenceArray<GUILayoutOption>)null);
configLookScriptName.Value = GUILayout.TextField(configLookScriptName.Value, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(280f) });
if (GUILayout.Button("Find & Disable Now", (Il2CppReferenceArray<GUILayoutOption>)null))
{
ApplyLookScriptNow();
}
if (!string.IsNullOrEmpty(lookScriptStatus))
{
GUILayout.Label(lookScriptStatus, (Il2CppReferenceArray<GUILayoutOption>)null);
}
}
public void Update()
{
if (Input.GetKeyDown((KeyCode)57) || Input.GetKeyDown((KeyCode)265))
{
ToggleBeacons();
}
if (Input.GetKeyDown((KeyCode)48) || Input.GetKeyDown((KeyCode)256))
{
InspectObjectInFront();
}
if (Input.GetKeyDown((KeyCode)289))
{
SetMenuOpen(!isMenuOpen);
}
if (Input.GetKeyDown((KeyCode)288))
{
DumpCameraHierarchy();
}
if (beaconsActive)
{
AnimateBeacons();
}
}
private void AnimateBeacons()
{
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: 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_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_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_020e: Unknown result type (might be due to invalid IL or missing references)
//IL_023e: Unknown result type (might be due to invalid IL or missing references)
//IL_027a: Unknown result type (might be due to invalid IL or missing references)
//IL_028d: Unknown result type (might be due to invalid IL or missing references)
//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
//IL_034c: Unknown result type (might be due to invalid IL or missing references)
//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
Color val = default(Color);
((Color)(ref val))..ctor(0.494f, 0.047f, 0.839f, 0.6f);
if (configPaletteChoice.Value == 0)
{
Color val2 = default(Color);
((Color)(ref val2))..ctor(0.494f, 0.047f, 0.839f, 0.6f);
Color val3 = default(Color);
((Color)(ref val3))..ctor(1f, 0.85f, 0f, 0.6f);
Color val4 = default(Color);
((Color)(ref val4))..ctor(1f, 1f, 1f, 0.6f);
Color val5 = default(Color);
((Color)(ref val5))..ctor(0.05f, 0.1f, 0.45f, 0.6f);
float num = Time.time * configColorSpeed.Value % 4f;
val = ((num < 1f) ? Color.Lerp(val2, val3, num) : ((num < 2f) ? Color.Lerp(val3, val4, num - 1f) : ((!(num < 3f)) ? Color.Lerp(val5, val2, num - 3f) : Color.Lerp(val4, val5, num - 2f))));
}
else if (configPaletteChoice.Value == 2)
{
((Color)(ref val))..ctor(1f, 0.85f, 0f, 0.6f);
}
float num2 = 1f;
float num3 = 1f;
if (configUseAnimation.Value)
{
num2 = 1f + Mathf.Sin(Time.time * 1.2f) * 0.05f;
num3 = 1f + Mathf.Cos(Time.time * 1.2f) * 0.05f;
}
float value = configBeamHeight.Value;
float num4 = value / 2f;
foreach (Transform activeBeacon in activeBeacons)
{
if (!((Object)(object)activeBeacon == (Object)null))
{
activeBeacon.localPosition = new Vector3(0f, num4, 0f);
float num5 = configBeamWidth.Value * num2;
float num6 = configBeamWidth.Value * num3;
activeBeacon.localScale = new Vector3(num5, value, num6);
MeshRenderer component = ((Component)activeBeacon).GetComponent<MeshRenderer>();
if ((Object)(object)component != (Object)null && (Object)(object)((Renderer)component).material != (Object)null)
{
((Renderer)component).material.color = val;
((Renderer)component).material.SetColor("_Color", val);
((Renderer)component).material.SetColor("_BaseColor", val);
}
if (configEnableParticles.Value && (Object)(object)activeBeacon.parent != (Object)null)
{
AnimateParticles(activeBeacon.parent, val);
}
}
}
foreach (Light activeLight in activeLights)
{
if (!((Object)(object)activeLight == (Object)null))
{
activeLight.range = configLightRange.Value;
activeLight.intensity = configLightIntensity.Value;
activeLight.color = val;
}
}
}
private void AnimateParticles(Transform rootTransform, Color targetColor)
{
//IL_00bb: 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_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: 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_017e: Unknown result type (might be due to invalid IL or missing references)
//IL_0191: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
int num = Mathf.Clamp(configParticleCount.Value, 0, 30);
if (num <= 0)
{
return;
}
float value = configParticleRiseSpeed.Value;
float num2 = 60f * configParticleSpinSpeed.Value;
float num3 = 0.25f + configBeamWidth.Value;
float value2 = configParticleSize.Value;
for (int i = 0; i < num; i++)
{
Transform val = rootTransform.Find("[BeaconMod] Particle_" + i);
if (!((Object)(object)val == (Object)null))
{
float num4 = 360f / (float)num * (float)i + Time.time * num2;
float num5 = num4 * ((float)Math.PI / 180f);
Vector3 localPosition = val.localPosition;
localPosition.x = Mathf.Cos(num5) * num3;
localPosition.z = Mathf.Sin(num5) * num3;
localPosition.y += value * Time.deltaTime;
if (localPosition.y > 6f || localPosition.y < 0f)
{
localPosition.y = Random.Range(0.05f, 0.3f);
}
val.localPosition = localPosition;
val.localScale = Vector3.one * value2;
MeshRenderer component = ((Component)val).GetComponent<MeshRenderer>();
if ((Object)(object)component != (Object)null && (Object)(object)((Renderer)component).material != (Object)null)
{
((Renderer)component).material.color = targetColor;
((Renderer)component).material.SetColor("_Color", targetColor);
((Renderer)component).material.SetColor("_BaseColor", targetColor);
}
}
}
}
private void InspectObjectInFront()
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: 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)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Expected O, but got Unknown
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Expected O, but got Unknown
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Expected O, but got Unknown
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Expected O, but got Unknown
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_0190: Expected O, but got Unknown
//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
//IL_01fe: Expected O, but got Unknown
if ((Object)(object)Camera.main == (Object)null)
{
BeaconModPlugin.Log.LogWarning((object)"No main camera found.");
return;
}
Ray val = default(Ray);
((Ray)(ref val))..ctor(((Component)Camera.main).transform.position, ((Component)Camera.main).transform.forward);
RaycastHit val2 = default(RaycastHit);
if (Physics.Raycast(val, ref val2, 50f))
{
GameObject gameObject = ((Component)((RaycastHit)(ref val2)).collider).gameObject;
BeaconModPlugin.Log.LogInfo((object)"=== INSPECTING OBJECT ===");
ManualLogSource log = BeaconModPlugin.Log;
bool flag = default(bool);
BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(6, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Name: ");
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(((Object)gameObject).name);
}
log.LogInfo(val3);
ManualLogSource log2 = BeaconModPlugin.Log;
val3 = new BepInExInfoLogInterpolatedStringHandler(5, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Tag: ");
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(gameObject.tag);
}
log2.LogInfo(val3);
ManualLogSource log3 = BeaconModPlugin.Log;
val3 = new BepInExInfoLogInterpolatedStringHandler(7, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Layer: ");
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(LayerMask.LayerToName(gameObject.layer));
}
log3.LogInfo(val3);
ManualLogSource log4 = BeaconModPlugin.Log;
val3 = new BepInExInfoLogInterpolatedStringHandler(10, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("IsStatic: ");
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<bool>(gameObject.isStatic);
}
log4.LogInfo(val3);
Il2CppArrayBase<Component> components = gameObject.GetComponents<Component>();
ManualLogSource log5 = BeaconModPlugin.Log;
val3 = new BepInExInfoLogInterpolatedStringHandler(14, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Components (");
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<int>(components.Length);
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("):");
}
log5.LogInfo(val3);
foreach (Component item in components)
{
if ((Object)(object)item != (Object)null)
{
ManualLogSource log6 = BeaconModPlugin.Log;
val3 = new BepInExInfoLogInterpolatedStringHandler(4, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" - ");
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(((Object)item).GetIl2CppType().FullName);
}
log6.LogInfo(val3);
}
}
BeaconModPlugin.Log.LogInfo((object)"=== END INSPECT ===");
}
else
{
BeaconModPlugin.Log.LogInfo((object)"Raycast hit nothing.");
}
}
private void ToggleBeacons()
{
if (beaconsActive)
{
TurnOff();
}
else
{
TurnOn();
}
}
private void TurnOn()
{
//IL_009c: 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_00f5: Expected O, but got Unknown
Transform player = GetPlayerTransform();
if ((Object)(object)player == (Object)null)
{
BeaconModPlugin.Log.LogWarning((object)"Could not find player.");
return;
}
List<GameObject> source = FindDroppedObjectsNear(player);
int count = Mathf.Clamp(configMaxBeacons.Value, 1, 60);
List<GameObject> list = source.OrderBy((GameObject obj) => Vector3.Distance(GetBeaconBasePosition(obj), player.position)).Take(count).ToList();
foreach (GameObject item in list)
{
CreateBeacon(item, GetBeaconBasePosition(item));
}
beaconsActive = activeBeacons.Count > 0;
if (beaconsActive)
{
ManualLogSource log = BeaconModPlugin.Log;
bool flag = default(bool);
BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(19, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Turned on ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(activeBeacons.Count);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" beacons.");
}
log.LogInfo(val);
}
else
{
BeaconModPlugin.Log.LogInfo((object)"No valid small objects found nearby.");
}
}
private void TurnOff()
{
foreach (Transform activeBeacon in activeBeacons)
{
if ((Object)(object)activeBeacon != (Object)null && (Object)(object)activeBeacon.parent != (Object)null)
{
Object.Destroy((Object)(object)((Component)activeBeacon.parent).gameObject);
}
}
activeBeacons.Clear();
activeLights.Clear();
beaconsActive = false;
BeaconModPlugin.Log.LogInfo((object)"Turned off.");
}
private List<GameObject> FindDroppedObjectsNear(Transform player)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
HashSet<GameObject> hashSet = new HashSet<GameObject>();
float value = configSearchRange.Value;
Collider[] array = Il2CppArrayBase<Collider>.op_Implicit((Il2CppArrayBase<Collider>)(object)Physics.OverlapSphere(player.position, value, -1, (QueryTriggerInteraction)1));
Collider[] array2 = array;
foreach (Collider val in array2)
{
if ((Object)(object)val == (Object)null)
{
continue;
}
GameObject val2 = (((Object)(object)val.attachedRigidbody != (Object)null) ? ((Component)val.attachedRigidbody).gameObject : ((Component)val).gameObject);
if ((Object)(object)val2 == (Object)null || !val2.activeInHierarchy || IsBeaconObject(val2) || IsPlayerObject(val2, player) || val2.isStatic || (val2.tag == "Untagged" && ((object)val).GetType().Name.Contains("Terrain")))
{
continue;
}
string name = ((Object)val2).name;
if (!name.Contains("Spotlight") && !name.Contains("Spotlight_Lamp") && !name.Contains("Light") && !name.Contains("Endcap") && !name.Contains("board") && !name.Contains("FixedRadio_stand") && !name.Contains("SalonSwatch") && !name.Contains("Straight_Long_grateCol") && !name.Contains("Support_Light") && !name.Contains("Static"))
{
Vector3 approximateSize = GetApproximateSize(val2, val);
if (!(((Vector3)(ref approximateSize)).magnitude > 2.5f) && !(approximateSize.x > 2f) && !(approximateSize.y > 2f) && !(approximateSize.z > 2f) && !(Vector3.Distance(val2.transform.position, player.position) > value))
{
hashSet.Add(val2);
}
}
}
return hashSet.ToList();
}
private Transform GetPlayerTransform()
{
GameObject val = GameObject.FindGameObjectWithTag("Player");
if ((Object)(object)val != (Object)null)
{
return val.transform;
}
if ((Object)(object)Camera.main != (Object)null)
{
return ((Component)Camera.main).transform;
}
return null;
}
private bool IsPlayerObject(GameObject go, Transform player)
{
if ((Object)(object)go == (Object)null || (Object)(object)player == (Object)null)
{
return false;
}
if ((Object)(object)go.transform == (Object)(object)player || go.transform.IsChildOf(player))
{
return true;
}
if (go.tag == "Player")
{
return true;
}
string text = ((Object)go).name.ToLowerInvariant();
return text.Contains("player") || text.Contains("character") || text.Contains("walker");
}
private bool IsBeaconObject(GameObject go)
{
if ((Object)(object)go == (Object)null)
{
return false;
}
return ((Object)go).name.StartsWith("[BeaconMod]", StringComparison.OrdinalIgnoreCase);
}
private Vector3 GetApproximateSize(GameObject go, Collider fallbackCollider)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: 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_0021: 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)
//IL_0032: 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_003a: 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_004a: Unknown result type (might be due to invalid IL or missing references)
Renderer componentInChildren = go.GetComponentInChildren<Renderer>();
Bounds bounds;
if ((Object)(object)componentInChildren != (Object)null)
{
bounds = componentInChildren.bounds;
return ((Bounds)(ref bounds)).size;
}
if ((Object)(object)fallbackCollider != (Object)null)
{
bounds = fallbackCollider.bounds;
return ((Bounds)(ref bounds)).size;
}
return Vector3.one;
}
private Vector3 GetBeaconBasePosition(GameObject go)
{
//IL_0015: 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_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: 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_003f: 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_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: 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_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: 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)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
Renderer componentInChildren = go.GetComponentInChildren<Renderer>();
if ((Object)(object)componentInChildren != (Object)null)
{
Bounds bounds = componentInChildren.bounds;
return new Vector3(((Bounds)(ref bounds)).center.x, ((Bounds)(ref bounds)).min.y, ((Bounds)(ref bounds)).center.z);
}
Collider componentInChildren2 = go.GetComponentInChildren<Collider>();
if ((Object)(object)componentInChildren2 != (Object)null)
{
Bounds bounds2 = componentInChildren2.bounds;
return new Vector3(((Bounds)(ref bounds2)).center.x, ((Bounds)(ref bounds2)).min.y, ((Bounds)(ref bounds2)).center.z);
}
return go.transform.position;
}
private Material GetBeamMaterial()
{
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Expected O, but got Unknown
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)beamMaterial != (Object)null)
{
return beamMaterial;
}
Shader val = Shader.Find("Universal Render Pipeline/Unlit") ?? Shader.Find("Unlit/Color") ?? Shader.Find("UI/Default") ?? Shader.Find("Sprites/Default") ?? Shader.Find("Legacy Shaders/Diffuse");
if ((Object)(object)val == (Object)null)
{
return null;
}
beamMaterial = new Material(val);
Color val2 = default(Color);
((Color)(ref val2))..ctor(0.494f, 0.047f, 0.839f, 0.6f);
beamMaterial.color = val2;
beamMaterial.SetColor("_Color", val2);
beamMaterial.SetColor("_BaseColor", val2);
return beamMaterial;
}
private void CreateBeacon(GameObject target, Vector3 basePosition)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_0012: 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_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_011b: Expected O, but got Unknown
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
//IL_0178: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0241: Unknown result type (might be due to invalid IL or missing references)
//IL_0251: Unknown result type (might be due to invalid IL or missing references)
//IL_027c: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject("[BeaconMod] Beacon");
val.transform.position = basePosition;
val.transform.rotation = Quaternion.identity;
GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)2);
((Object)val2).name = "[BeaconMod] Beam";
val2.transform.SetParent(val.transform, false);
val2.transform.localPosition = new Vector3(0f, 30f, 0f);
val2.transform.localScale = new Vector3(0.1f, 30f, 0.1f);
Collider component = val2.GetComponent<Collider>();
if ((Object)(object)component != (Object)null)
{
Object.Destroy((Object)(object)component);
}
MeshRenderer component2 = val2.GetComponent<MeshRenderer>();
if ((Object)(object)component2 != (Object)null)
{
Material val3 = GetBeamMaterial();
if ((Object)(object)val3 != (Object)null)
{
((Renderer)component2).material = val3;
}
else
{
((Renderer)component2).material.color = new Color(0.494f, 0.047f, 0.839f, 1f);
}
((Renderer)component2).shadowCastingMode = (ShadowCastingMode)0;
}
GameObject val4 = new GameObject("[BeaconMod] Light");
val4.transform.SetParent(val.transform, false);
val4.transform.localPosition = new Vector3(0f, 1f, 0f);
Light val5 = val4.AddComponent<Light>();
val5.type = (LightType)2;
val5.color = new Color(0.494f, 0.047f, 0.839f, 1f);
val5.range = configLightRange.Value;
val5.intensity = configLightIntensity.Value;
val5.shadows = (LightShadows)0;
activeBeacons.Add(val2.transform);
activeLights.Add(val5);
if (!configEnableParticles.Value)
{
return;
}
int num = Mathf.Clamp(configParticleCount.Value, 0, 30);
for (int i = 0; i < num; i++)
{
GameObject val6 = GameObject.CreatePrimitive((PrimitiveType)0);
((Object)val6).name = "[BeaconMod] Particle_" + i;
val6.transform.SetParent(val.transform, false);
val6.transform.localScale = Vector3.one * configParticleSize.Value;
val6.transform.localPosition = new Vector3(0f, Random.Range(0.1f, 5f), 0f);
Collider component3 = val6.GetComponent<Collider>();
if ((Object)(object)component3 != (Object)null)
{
Object.Destroy((Object)(object)component3);
}
MeshRenderer component4 = val6.GetComponent<MeshRenderer>();
if ((Object)(object)component4 != (Object)null)
{
Material val7 = GetBeamMaterial();
if ((Object)(object)val7 != (Object)null)
{
((Renderer)component4).material = val7;
}
((Renderer)component4).shadowCastingMode = (ShadowCastingMode)0;
}
}
}
}
}