using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
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 BepInEx.Unity.IL2CPP;
using BepInEx.Unity.IL2CPP.Utils.Collections;
using ChainedPuzzles;
using GTFO.API;
using GameData;
using Gear;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using LevelGeneration;
using Microsoft.CodeAnalysis;
using Player;
using SNetwork;
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("HitTheLights")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("HitTheLights")]
[assembly: AssemblyTitle("HitTheLights")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
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 HitTheLights
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("HitTheLights", "HitTheLights", "0.1.0")]
public class Plugin : BasePlugin
{
public struct HTLNetInfo
{
public float X;
public float Y;
public float Z;
public bool C;
public static string NetworkIdentity => "HTLNetInfo";
public HTLNetInfo(float x, float y, float z, bool C)
{
this = default(HTLNetInfo);
X = x;
Y = y;
Z = z;
C = C;
HitTheLights.Log.LogInfo((object)"sent a broken light package");
}
}
public struct HTLInfo
{
public float X;
public float Y;
public float Z;
public bool C;
public HTLInfo(float x, float y, float z, bool c)
{
this = default(HTLInfo);
X = x;
Y = y;
Z = z;
C = c;
}
public HTLInfo(HTLNetInfo network)
{
this = default(HTLInfo);
X = network.X;
Y = network.Y;
Z = network.Z;
C = network.C;
}
}
public class HitTheLights : MonoBehaviour
{
public static ManualLogSource Log;
public static Dictionary<Vector3, LG_Light> LightsTable = new Dictionary<Vector3, LG_Light>();
public static Dictionary<Vector3, LG_Light> KilledTable = new Dictionary<Vector3, LG_Light>();
public void Initialize()
{
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: 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)
LightsTable.Clear();
KilledTable.Clear();
Vector3 key = default(Vector3);
foreach (LG_Light item in Object.FindObjectsOfType<LG_Light>())
{
((Object)item).name = "HitTheLights";
SphereCollider obj = ((Component)item).gameObject.AddComponent<SphereCollider>();
Collider component = ((Component)PlayerManager.GetLocalPlayerAgent()).gameObject.GetComponent<Collider>();
Physics.IgnoreCollision((Collider)(object)obj, component, true);
obj.radius = 0.4f;
((Collider)obj).isTrigger = false;
((Component)item).gameObject.AddComponent<ColliderMaterial>().MaterialId = 3;
float num = Mathf.Round(((Component)item).transform.position.x * 10f) * 0.1f;
float num2 = Mathf.Round(((Component)item).transform.position.y * 10f) * 0.1f;
float num3 = Mathf.Round(((Component)item).transform.position.z * 10f) * 0.1f;
((Vector3)(ref key))..ctor(num, num2, num3);
LightsTable[key] = item;
}
CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(HTLSync()), (Action)null);
CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(HTLKill()), (Action)null);
}
private void Start()
{
Log.LogInfo((object)"Plugin is loaded!");
}
private void Update()
{
}
public static void ReceiveHTLNetInfo(ulong sender, HTLNetInfo netInfo)
{
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: 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_00f0: 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_0112: 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_0119: Unknown result type (might be due to invalid IL or missing references)
Log.LogInfo((object)("received data from sender " + sender + ": x:" + netInfo.X + " y:" + netInfo.Y + " z:" + netInfo.Z + " c:" + netInfo.C));
Vector3 key = default(Vector3);
((Vector3)(ref key))..ctor(netInfo.X, netInfo.Y, netInfo.Z);
LG_Light val = LightsTable[key];
if (((Behaviour)val).enabled)
{
if (_GlassBreak)
{
PlayerManager.Current.m_localPlayerAgentInLevel.Sound.Post(425881253u, true);
}
if (netInfo.C)
{
Debug.Log(Object.op_Implicit("HitTheLights - random cough playing"));
pTriggerDialog val2 = default(pTriggerDialog);
val2.character = (DialogCharFilter)4;
val2.forced = true;
val2.dialogID = _CoughDialogID;
pTriggerDialog val3 = val2;
PlayerDialogManager.Current.DoStartDialog(val3);
}
val.ChangeIntensity(0f);
val.SetEnabled(false);
((Behaviour)val).enabled = false;
}
if (!KilledTable.ContainsKey(key))
{
KilledTable[key] = val;
}
}
private static IEnumerator HTLKill()
{
while (true)
{
foreach (KeyValuePair<Vector3, LG_Light> item in KilledTable)
{
if (((Behaviour)item.Value).enabled)
{
item.Value.ChangeIntensity(0f);
item.Value.SetEnabled(false);
((Behaviour)item.Value).enabled = false;
}
}
yield return (object)new WaitForSeconds(1f);
}
}
private static IEnumerator HTLSync()
{
yield return (object)new WaitForSeconds(120f);
while (true)
{
if (SNet.IsMaster)
{
Log.LogInfo((object)"Syncing all disabled lights to peers..");
foreach (KeyValuePair<Vector3, LG_Light> item in KilledTable)
{
Vector3 key = item.Key;
new HTLInfo(key.x, key.y, key.z, c: false);
yield return (object)new WaitForSeconds(0.5f);
}
}
yield return (object)new WaitForSeconds(60f);
}
}
private IEnumerator ScanCheck()
{
PlayerAgent plr = PlayerManager.GetLocalPlayerAgent();
Debug.Log(Object.op_Implicit("HitTheLights - warden scan checker running"));
while (true)
{
if (!SNet.IsMaster)
{
while (!SNet.IsMaster)
{
yield return (object)new WaitForSeconds(1f);
}
}
List<ChainedPuzzleInstance> instances = ChainedPuzzleManager.Current.m_instances;
bool flag = false;
Enumerator<ChainedPuzzleInstance> enumerator = instances.GetEnumerator();
while (enumerator.MoveNext())
{
ChainedPuzzleInstance current = enumerator.Current;
if (!current.IsActive || !current.IsExitPuzzle)
{
continue;
}
CP_Bioscan_Core val = ((Il2CppObjectBase)((Il2CppArrayBase<iChainedPuzzleCore>)(object)current.m_chainedPuzzleCores)[0]).TryCast<CP_Bioscan_Core>();
if (!val.PlayersOnScan.Contains(plr))
{
continue;
}
if (!flag)
{
Debug.Log(Object.op_Implicit("NoBotFriendlyFire - master is in exit scan, time to make closeby bots join in"));
}
flag = true;
List<PlayerAgent> list = new List<PlayerAgent>();
Enumerator<PlayerAgent> enumerator2 = PlayerManager.PlayerAgentsInLevel.GetEnumerator();
while (enumerator2.MoveNext())
{
PlayerAgent current2 = enumerator2.Current;
if (current2.Owner.IsBot)
{
list.Add(current2);
}
}
foreach (PlayerAgent item in list)
{
if (Vector3.Distance(((Component)item).transform.position, ((Component)current).transform.position) < 50f)
{
PlayerAIBot component = ((Component)item).GetComponent<PlayerAIBot>();
if (!val.PlayersOnScan.Contains(item))
{
component.StartAction((Descriptor)new Descriptor(component)
{
DestinationPos = ((Component)val).transform.position,
Bot = component,
Haste = 999f,
Prio = 999f
});
}
}
}
}
yield return (object)new WaitForSeconds(0.5f);
}
}
}
[HarmonyPatch]
private class HitTheLights_Patches
{
[HarmonyPrefix]
[HarmonyPatch(typeof(BulletWeapon), "BulletHit")]
public static bool BulletHit(BulletWeapon __instance, WeaponHitData weaponRayData, bool doDamage, float additionalDis = 0f, uint damageSearchID = 0u)
{
//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)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_0171: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_011b: Unknown result type (might be due to invalid IL or missing references)
//IL_019e: Unknown result type (might be due to invalid IL or missing references)
//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c3: 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_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
RaycastHit rayHit = weaponRayData.rayHit;
GameObject gameObject = ((Component)((RaycastHit)(ref rayHit)).collider).gameObject;
if (((Object)gameObject).name == "HitTheLights")
{
bool flag = false;
if (Random.RandomRange(0, 100) < _CoughPercentage)
{
flag = true;
}
LG_Light component = gameObject.GetComponent<LG_Light>();
if (((Behaviour)component).enabled)
{
if (_GlassBreak)
{
PlayerManager.Current.m_localPlayerAgentInLevel.Sound.Post(425881253u, true);
}
if (_Cough && flag)
{
Debug.Log(Object.op_Implicit("HitTheLights - random cough playing"));
pTriggerDialog val = new pTriggerDialog
{
character = (DialogCharFilter)4,
forced = true,
dialogID = _CoughDialogID
};
PlayerDialogManager.Current.DoStartDialog(val);
}
}
component.ChangeIntensity(0f);
component.SetEnabled(false);
((Behaviour)component).enabled = false;
float x = Mathf.Round(gameObject.transform.position.x * 10f) * 0.1f;
float y = Mathf.Round(gameObject.transform.position.y * 10f) * 0.1f;
float z = Mathf.Round(gameObject.transform.position.z * 10f) * 0.1f;
new HTLInfo(x, y, z, flag);
NetworkAPI.InvokeEvent<HTLNetInfo>("HTLNetInfo", new HTLNetInfo(x, y, z, flag), (SNet_ChannelType)2);
}
rayHit = weaponRayData.rayHit;
if ((Object)(object)((RaycastHit)(ref rayHit)).collider != (Object)null)
{
rayHit = weaponRayData.rayHit;
if ((Object)(object)((Component)((RaycastHit)(ref rayHit)).collider).gameObject != (Object)null && weaponRayData.owner.Owner.IsBot)
{
rayHit = weaponRayData.rayHit;
if (CustomExtensions.IsInLayerMask(((Component)((RaycastHit)(ref rayHit)).collider).gameObject, LayerMask.op_Implicit(LayerMask.GetMask(new string[1] { "PlayerSynced" }))))
{
doDamage = false;
HitTheLights.Log.LogInfo((object)"bot FF prevented");
return false;
}
}
}
return true;
}
[HarmonyPostfix]
[HarmonyPatch(typeof(MeleeWeaponFirstPerson), "DoAttackDamage")]
public static void DoAttackDamage(MeleeWeaponFirstPerson __instance, MeleeWeaponDamageData data)
{
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: 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_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
GameObject damageGO = data.damageGO;
if (!(((Object)damageGO).name == "HitTheLights"))
{
return;
}
bool flag = false;
if (Random.RandomRange(0, 100) < _CoughPercentage)
{
flag = true;
}
LG_Light component = damageGO.GetComponent<LG_Light>();
if (((Behaviour)component).enabled)
{
if (_GlassBreak)
{
PlayerManager.Current.m_localPlayerAgentInLevel.Sound.Post(425881253u, true);
}
if (_Cough && flag)
{
Debug.Log(Object.op_Implicit("HitTheLights - random cough playing"));
pTriggerDialog val = new pTriggerDialog
{
character = (DialogCharFilter)4,
forced = true,
dialogID = _CoughDialogID
};
PlayerDialogManager.Current.DoStartDialog(val);
}
}
component.ChangeIntensity(0f);
component.SetEnabled(false);
((Behaviour)component).enabled = false;
float x = Mathf.Round(damageGO.transform.position.x * 10f) * 0.1f;
float y = Mathf.Round(damageGO.transform.position.y * 10f) * 0.1f;
float z = Mathf.Round(damageGO.transform.position.z * 10f) * 0.1f;
new HTLInfo(x, y, z, flag);
NetworkAPI.InvokeEvent<HTLNetInfo>("HTLNetInfo", new HTLNetInfo(x, y, z, flag), (SNet_ChannelType)2);
}
}
public static bool _GlassBreak = false;
public static bool _Cough = false;
public static int _CoughPercentage = 0;
public static uint _CoughDialogID = 173u;
public override void Load()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: 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_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
//IL_0044: Expected O, but got Unknown
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Expected O, but got Unknown
//IL_006b: Expected O, but got Unknown
//IL_006c: 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_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Expected O, but got Unknown
//IL_0093: Expected O, but got Unknown
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Expected O, but got Unknown
//IL_00bd: Expected O, but got Unknown
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
AcceptableValueRange<int> val = new AcceptableValueRange<int>(0, 100);
ConfigFile val2 = new ConfigFile(Path.Combine(Paths.ConfigPath, "HitTheLights.cfg"), true);
ConfigEntry<bool> val3 = val2.Bind<bool>(new ConfigDefinition("General", "Glass_Breaking"), true, new ConfigDescription("Extra clear glass breaking sound?", (AcceptableValueBase)null, Array.Empty<object>()));
ConfigEntry<bool> val4 = val2.Bind<bool>(new ConfigDefinition("General", "Random_Coughing"), false, new ConfigDescription("Randomly Play hard cough on breaking a light?", (AcceptableValueBase)null, Array.Empty<object>()));
ConfigEntry<int> val5 = val2.Bind<int>(new ConfigDefinition("General", "Chance"), 20, new ConfigDescription("Cough random chance?", (AcceptableValueBase)(object)val, Array.Empty<object>()));
ConfigEntry<uint> obj = val2.Bind<uint>(new ConfigDefinition("General", "DialogID"), 173u, new ConfigDescription("Cough DialogID from PlayerDialogDataBlock?", (AcceptableValueBase)null, Array.Empty<object>()));
_GlassBreak = val3.Value;
_Cough = val4.Value;
_CoughPercentage = val5.Value;
_CoughDialogID = obj.Value;
new Harmony("HitTheLights").PatchAll();
NetworkAPI.RegisterEvent<HTLNetInfo>(HTLNetInfo.NetworkIdentity, (Action<ulong, HTLNetInfo>)HitTheLights.ReceiveHTLNetInfo);
HitTheLights @object = ((BasePlugin)this).AddComponent<HitTheLights>();
HitTheLights.Log = ((BasePlugin)this).Log;
EventAPI.OnExpeditionStarted += @object.Initialize;
}
}
[GeneratedCode("VersionInfoGenerator", "2.0.0+git50a4b1a-master")]
[CompilerGenerated]
internal static class VersionInfo
{
public const string RootNamespace = "HitTheLights";
public const string Version = "1.0.0";
public const string VersionPrerelease = null;
public const string VersionMetadata = null;
public const string SemVer = "1.0.0";
public const string GitRevShort = null;
public const string GitRevLong = null;
public const string GitBranch = null;
public const string GitTag = null;
public const bool GitIsDirty = false;
}
}