using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.WebSockets;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using BepInEx;
using GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Unity.Netcode;
using UnityEngine;
[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("LC_Chat")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("My first plugin")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("LC_Chat")]
[assembly: AssemblyTitle("LC_Chat")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace LC_Chat
{
[BepInPlugin("LC_Chat", "LC_Chat", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
private struct MSG
{
public string type;
public string displayName;
public string message;
public string color;
}
private const string ENEMY_LAYER = "Enemies";
private ClientWebSocket ws;
private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
private readonly Harmony harmony = new Harmony("LC_Chat");
private void Awake()
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin LC_Chat is loaded!");
harmony.PatchAll(typeof(Plugin));
ConnectWebSocket();
}
private void WriteOutItems()
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"[LCChat]: Writing out item info");
for (int i = 0; i < StartOfRound.Instance.allItemsList.itemsList.Count; i++)
{
Item val = StartOfRound.Instance.allItemsList.itemsList[i];
if (!((Object)(object)val == (Object)null) && !((Object)(object)val.spawnPrefab == (Object)null))
{
((BaseUnityPlugin)this).Logger.LogInfo((object)("[LCChat]: Item " + val.itemName));
GameObject val2 = Object.Instantiate<GameObject>(val.spawnPrefab);
Component[] components = val2.GetComponents<Component>();
for (int j = 0; j < components.Length; j++)
{
((BaseUnityPlugin)this).Logger.LogInfo((object)("[LCChat]: Component " + ((object)components[j]).GetType().ToString()));
}
}
}
}
private async void ConnectWebSocket()
{
ws = new ClientWebSocket();
try
{
await ws.ConnectAsync(new Uri("ws://localhost:3000"), cancellationTokenSource.Token);
StartListening();
}
catch (Exception ex2)
{
Exception ex = ex2;
((BaseUnityPlugin)this).Logger.LogError((object)("WebSocket connection failed: " + ex.Message));
}
}
private async void StartListening()
{
byte[] buffer = new byte[1024];
while (ws.State == WebSocketState.Open)
{
WebSocketReceiveResult result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), cancellationTokenSource.Token);
string messageRaw = Encoding.UTF8.GetString(buffer, 0, result.Count);
MSG msg = JsonUtility.FromJson<MSG>(messageRaw);
if (result.MessageType != 0)
{
continue;
}
string type = msg.type;
string text = type;
string text2 = text;
if (!(text2 == "message"))
{
if (text2 == "birthday")
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"Spawning present");
SpawnItem("giftbox");
}
}
else if (string.IsNullOrEmpty(msg.message))
{
}
}
}
private void PrintHierarchy(GameObject obj)
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Expected O, but got Unknown
((BaseUnityPlugin)this).Logger.LogInfo((object)("[LCChat]: Printing hierarchy for " + ((Object)obj).name));
Component[] components = obj.GetComponents<Component>();
for (int i = 0; i < components.Length; i++)
{
((BaseUnityPlugin)this).Logger.LogInfo((object)("[LCChat]: Component " + ((object)components[i]).GetType().ToString()));
}
foreach (Transform item in obj.transform)
{
Transform val = item;
PrintHierarchy(((Component)val).gameObject);
}
}
[HarmonyPatch(typeof(HUDManager), "AddChatMessage")]
[HarmonyPrefix]
private static bool Commands(HUDManager __instance, string chatMessage)
{
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: 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_017e: 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_01a0: Unknown result type (might be due to invalid IL or missing references)
string text = chatMessage;
if (!text.StartsWith("<size=0>"))
{
return true;
}
text = text.Replace("<size=0>", "");
text = text.Replace("</size>", "");
if (!text.Contains("/cory_"))
{
return true;
}
text = text.Replace("/cory_", "");
Debug.Log((object)("GOT MESSAGE: " + text));
string[] split = text.Split('_');
List<PlayerControllerB> source = new List<PlayerControllerB>(Object.FindObjectsByType<PlayerControllerB>((FindObjectsSortMode)0));
PlayerControllerB val = ((IEnumerable<PlayerControllerB>)source).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB x) => x.playerUsername == split[0]));
Vector3 val2 = (Vector3)(((Object)(object)val != (Object)null) ? (((Component)val).transform.position + ((Component)val).transform.forward * 2f) : new Vector3(float.Parse(split[1]), float.Parse(split[2]), float.Parse(split[3])));
Item val3 = StartOfRound.Instance.allItemsList.itemsList.Find((Item z) => ((Object)z).name.ToLower().Equals("easteregg".ToLower()));
StunGrenadeItem component = Object.Instantiate<GameObject>(val3.spawnPrefab, val2, Quaternion.identity).GetComponent<StunGrenadeItem>();
val.movementAudio.PlayOneShot(component.explodeSFX, 4f);
RoundManager.Instance.PlayAudibleNoise(val2, 12f, 4f, 0, false, 911);
GameObject val4 = Object.Instantiate<GameObject>(component.stunGrenadeExplosion, val2, Quaternion.identity);
Object.Destroy((Object)(object)((Component)component).gameObject);
Object.Destroy((Object)(object)val4, 5f);
return false;
}
private void Explosion(Vector3 pos)
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: 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)
((BaseUnityPlugin)this).Logger.LogInfo((object)"Explode clientrpc");
Item val = StartOfRound.Instance.allItemsList.itemsList.Find((Item z) => ((Object)z).name.ToLower().Equals("easteregg".ToLower()));
StunGrenadeItem component = Object.Instantiate<GameObject>(val.spawnPrefab, pos, Quaternion.identity).GetComponent<StunGrenadeItem>();
PlayerControllerB localPlayerController = StartOfRound.Instance.localPlayerController;
localPlayerController.movementAudio.PlayOneShot(component.explodeSFX, 4f);
RoundManager.Instance.PlayAudibleNoise(pos, 12f, 4f, 0, false, 911);
GameObject val2 = Object.Instantiate<GameObject>(component.stunGrenadeExplosion, pos, Quaternion.identity);
Object.Destroy((Object)(object)((Component)component).gameObject);
}
private void SpawnItem(string item)
{
if (!NetworkManager.Singleton.IsServer)
{
return;
}
int num = 0;
Item requestedItem = StartOfRound.Instance.allItemsList.itemsList.Find((Item z) => ((Object)z).name.ToLower().Equals(item.ToLower()));
List<PlayerControllerB> list = new List<PlayerControllerB>(Object.FindObjectsByType<PlayerControllerB>((FindObjectsSortMode)0));
for (int num2 = list.Count - 1; num2 >= 0; num2--)
{
PlayerControllerB val = list[num2];
if (!((Behaviour)val).isActiveAndEnabled || !val.isPlayerControlled || val.isPlayerDead)
{
list.RemoveAt(num2);
}
}
((BaseUnityPlugin)this).Logger.LogInfo((object)$"Spawning item {item} to {list.Count} players");
for (int i = 0; i < list.Count; i++)
{
PlayerControllerB playerRef2 = list[i];
SpawnItem(playerRef2);
SpawnEffects(playerRef2);
}
void SpawnEffects(PlayerControllerB playerRef)
{
//IL_0007: 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_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_0026: 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_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: 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)
Vector3 val2 = ((Component)playerRef).transform.position + ((Component)playerRef).transform.forward * 2f;
((BaseUnityPlugin)this).Logger.LogInfo((object)$"Calling spawn effects on {val2}");
HUDManager.Instance.AddTextToChatOnServer($"<size=0>/cory_{playerRef.playerUsername}_{val2.x}_{val2.y}_{val2.z}</size>", -1);
}
void SpawnItem(PlayerControllerB playerRef)
{
//IL_0012: 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_0027: 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_0031: Unknown result type (might be due to invalid IL or missing references)
GameObject val3 = Object.Instantiate<GameObject>(requestedItem.spawnPrefab, ((Component)playerRef).transform.position + ((Component)playerRef).transform.forward * 2f, Quaternion.identity);
GrabbableObject component = val3.GetComponent<GrabbableObject>();
component.fallTime = 0f;
component.SetScrapValue(component.scrapValue = Random.Range(25, 50));
((Component)component).GetComponent<NetworkObject>().Spawn(false);
}
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "LC_Chat";
public const string PLUGIN_NAME = "LC_Chat";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}