using System;
using System.Collections;
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.Logging;
using Chaotic_Company.Helpers;
using Chaotic_Company.Managers;
using Chaotic_Company.Misc;
using GameNetcodeStuff;
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(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("Chaotic Company")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Chaotic Company")]
[assembly: AssemblyTitle("Chaotic Company")]
[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 Chaotic_Company
{
[BepInPlugin("com.deja.lethalcompany.chaoticcompany", "Chaotic Company", "0.0.1")]
public class Plugin : BaseUnityPlugin
{
public static Plugin Instance;
public static ManualLogSource LogSource;
private void Awake()
{
LogSource = ((BaseUnityPlugin)this).Logger;
Instance = this;
InitializePlayerSwapManager();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Chaotic Company Player Swap has been initialized.");
}
private void InitializePlayerSwapManager()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
GameObject val = new GameObject("PlayerSwapManager");
val.AddComponent<PlayerSwapManager>();
Object.DontDestroyOnLoad((Object)(object)val);
}
}
}
namespace Chaotic_Company.Misc
{
public class MultiObjectPool<T> where T : Object
{
public T[]? Objects { get; private set; }
public MultiObjectPool(MonoBehaviour self, float renewInterval = 1f)
{
self.StartCoroutine(RenewObjects(renewInterval));
}
public void Renew()
{
Objects = Object.FindObjectsOfType<T>();
}
private IEnumerator RenewObjects(float renewInterval)
{
while (true)
{
Renew();
yield return (object)new WaitForSeconds(renewInterval);
}
}
}
public readonly struct ObjectPlacement<T, M> where T : Transform where M : MonoBehaviour
{
public readonly T TargetObject;
public readonly M GameObject;
public readonly Vector3 PositionOffset;
public readonly Vector3 RotationOffset;
public ObjectPlacement(T targetObject, M gameObject, Vector3 positionOffset, Vector3 rotationOffset)
{
//IL_0010: 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_0017: 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)
TargetObject = targetObject;
GameObject = gameObject;
PositionOffset = positionOffset;
RotationOffset = rotationOffset;
}
}
public readonly struct ObjectPlacements<T, M> where T : Transform where M : MonoBehaviour
{
public readonly ObjectPlacement<T, M> Placement;
public readonly ObjectPlacement<T, M> PreviousPlacement;
public ObjectPlacements(ObjectPlacement<T, M> placement, ObjectPlacement<T, M> previousPlacement)
{
Placement = placement;
PreviousPlacement = previousPlacement;
}
}
internal static class Metadata
{
public const string GUID = "com.deja.lethalcompany.chaoticcompany";
public const string NAME = "Chaotic Company";
public const string VERSION = "0.0.1";
}
public class Reflector
{
private const BindingFlags privateOrInternal = BindingFlags.Instance | BindingFlags.NonPublic;
private const BindingFlags internalStatic = BindingFlags.Static | BindingFlags.NonPublic;
private const BindingFlags internalField = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField;
private const BindingFlags internalProperty = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetProperty;
private const BindingFlags internalMethod = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod;
private const BindingFlags internalStaticField = BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.GetField;
private const BindingFlags internalStaticProperty = BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.GetProperty;
private const BindingFlags internalStaticMethod = BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod;
private object Obj { get; }
private Type ObjType { get; }
private Reflector(object obj)
{
Obj = obj;
ObjType = obj.GetType();
}
private T? GetField<T>(string variableName, BindingFlags flags)
{
try
{
return (T)ObjType.GetField(variableName, flags).GetValue(Obj);
}
catch (InvalidCastException)
{
return default(T);
}
}
private Reflector? GetProperty(string propertyName, BindingFlags flags)
{
try
{
return new Reflector(ObjType.GetProperty(propertyName, flags).GetValue(Obj, null));
}
catch (Exception)
{
return null;
}
}
private Reflector? SetField(string variableName, object value, BindingFlags flags)
{
try
{
ObjType.GetField(variableName, flags).SetValue(Obj, value);
return this;
}
catch (Exception)
{
return null;
}
}
private Reflector? SetProperty(string propertyName, object value, BindingFlags flags)
{
try
{
ObjType.GetProperty(propertyName, flags).SetValue(Obj, value, null);
return this;
}
catch (Exception)
{
return null;
}
}
private T? InvokeMethod<T>(string methodName, BindingFlags flags, params object[] args)
{
try
{
return (T)ObjType.GetMethod(methodName, flags).Invoke(Obj, args);
}
catch (InvalidCastException)
{
return default(T);
}
}
public T? GetInternalField<T>(string variableName)
{
return GetField<T>(variableName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField);
}
public T? GetInternalStaticField<T>(string variableName)
{
return GetField<T>(variableName, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.GetField);
}
public Reflector? GetInternalField(string variableName)
{
object obj = GetInternalField(variableName);
return (obj == null) ? null : new Reflector(obj);
}
public Reflector? GetInternalStaticField(string variableName)
{
object obj = GetInternalStaticField(variableName);
return (obj == null) ? null : new Reflector(obj);
}
public Reflector? SetInternalField(string variableName, object value)
{
return SetField(variableName, value, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField);
}
public Reflector? SetInternalStaticField(string variableName, object value)
{
return SetField(variableName, value, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.GetField);
}
public Reflector? GetInternalProperty(string propertyName)
{
return GetProperty(propertyName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetProperty);
}
public Reflector? SetInternalProperty(string propertyName, object value)
{
return SetProperty(propertyName, value, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetProperty);
}
public T? InvokeInternalMethod<T>(string methodName, params object[] args)
{
return InvokeMethod<T>(methodName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, args);
}
public Reflector? InvokeInternalMethod(string methodName, params object[] args)
{
object obj = InvokeInternalMethod<object>(methodName, args);
return (obj == null) ? null : new Reflector(obj);
}
public static Reflector Target(object obj)
{
return new Reflector(obj);
}
}
public class TPObject : MonoBehaviour
{
public static TPObject? Instance { get; private set; }
public MultiObjectPool<ShipTeleporter> ShipTeleporters { get; private set; }
private void Awake()
{
ShipTeleporters = new MultiObjectPool<ShipTeleporter>((MonoBehaviour)(object)this);
Instance = this;
}
}
public enum Unlockable
{
ORANGE_SUIT,
GREEN_SUIT,
HAZARD_SUIT,
PAJAMA_SUIT,
COZY_LIGHTS,
TELEPORTER,
TELEVISION,
CUPBOARD,
FILE_CABINET,
TOILET,
SHOWER,
LIGHT_SWITCH,
RECORD_PLAYER,
TABLE,
ROMANTIC_TABLE,
BUNKBEDS,
TERMINAL,
SIGNAL_TRANSMITTER,
LOUD_HORN,
INVERSE_TELEPORTER,
JACK_O_LANTERN
}
public static class UnlockableExtension
{
public static bool Is(this Unlockable unlockable, int unlockableId)
{
return unlockableId == (int)unlockable;
}
}
}
namespace Chaotic_Company.Managers
{
public class PlayerSwapManager : NetworkBehaviour
{
public float minSwapInterval = 5f;
public float maxSwapInterval = 15f;
private void Start()
{
if (((NetworkBehaviour)this).IsServer)
{
((MonoBehaviour)this).StartCoroutine(SwapPlayersCoroutine());
}
}
private IEnumerator SwapPlayersCoroutine()
{
while (true)
{
yield return (object)new WaitForSeconds(Random.Range(minSwapInterval, maxSwapInterval));
RequestSwapPlayersServerRpc();
}
}
[ServerRpc]
private void RequestSwapPlayersServerRpc()
{
SwapPlayerPositions();
}
private void SwapPlayerPositions()
{
//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_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: 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_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
PlayerControllerB[] players = Helper.Players;
if (players != null && players.Length > 1)
{
Random random = new Random();
int num = players.Length;
while (num > 1)
{
num--;
int num2 = random.Next(num + 1);
PlayerControllerB val = players[num2];
players[num2] = players[num];
players[num] = val;
}
Vector3 position = ((Component)players[0]).transform.position;
Vector3 position2 = position;
for (int i = 1; i < players.Length; i++)
{
Vector3 position3 = ((Component)players[i]).transform.position;
((Component)players[i]).transform.position = position2;
position2 = position3;
}
((Component)players[0]).transform.position = position2;
}
}
}
}
namespace Chaotic_Company.Helpers
{
public static class Helper
{
public static Camera? CurrentCamera => ((Object)(object)LocalPlayer?.gameplayCamera != (Object)null && ((Behaviour)LocalPlayer.gameplayCamera).enabled) ? LocalPlayer.gameplayCamera : StartOfRound?.spectateCamera;
public static HUDManager? HUDManager => HUDManager.Instance;
public static RoundManager? RoundManager => RoundManager.Instance;
private static ShipBuildModeManager? ShipBuildModeManager => ShipBuildModeManager.Instance;
public static PlayerControllerB? LocalPlayer => GameNetworkManager.Instance.localPlayerController;
public static PlayerControllerB[]? Players => StartOfRound?.allPlayerScripts;
public static StartOfRound? StartOfRound => StartOfRound.Instance;
private static ShipTeleporter[]? ShipTeleporters => TPObject.Instance?.ShipTeleporters.Objects;
public static ShipTeleporter? InverseTeleporter => ShipTeleporters?.FirstOrDefault((Func<ShipTeleporter, bool>)((ShipTeleporter teleporter) => teleporter.isInverseTeleporter));
public static ShipTeleporter? Teleporter => ShipTeleporters?.FirstOrDefault((Func<ShipTeleporter, bool>)((ShipTeleporter teleporter) => !teleporter.isInverseTeleporter));
public static Terminal? Terminal => (HUDManager == null) ? null : Reflector.Target(HUDManager).GetInternalField<Terminal>("terminalScript");
public static void PrintSystem(string? message)
{
if (message == null)
{
Console.WriteLine("SYSTEM: [null message]");
}
else
{
Console.WriteLine("SYSTEM: " + message);
}
}
public static Vector3 Copy(this Vector3 vector)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: 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_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
return new Vector3(vector.x, vector.y, vector.z);
}
public static Quaternion Copy(this Quaternion quaternion)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: 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_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_0021: Unknown result type (might be due to invalid IL or missing references)
return new Quaternion(quaternion.x, quaternion.y, quaternion.z, quaternion.w);
}
public static GameObject Copy(this Transform transform)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//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_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject();
val.transform.position = transform.position.Copy();
val.transform.eulerAngles = transform.eulerAngles.Copy();
return val;
}
public static T CreateComponent<T>() where T : Component
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
return new GameObject().AddComponent<T>();
}
public static bool IsNotNull<T>(this T? obj, out T notNullObj) where T : class
{
if (obj == null)
{
notNullObj = null;
return false;
}
notNullObj = obj;
return true;
}
private static NetworkObject GetNetworkObject<M>(M gameObject) where M : MonoBehaviour
{
return ((Component)((Component)(object)gameObject).GetComponentInChildren<PlaceableShipObject>().parentObject).GetComponent<NetworkObject>();
}
public static Action<float> PlaceObjectAtTransform<T, M>(T targetObject, M gameObject, Vector3 positionOffset = default(Vector3), Vector3 rotationOffset = default(Vector3)) where T : Transform where M : MonoBehaviour
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
return delegate
{
//IL_0023: 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_002e: 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_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)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
NetworkObject networkObject = GetNetworkObject(gameObject);
ShipBuildModeManager? shipBuildModeManager = ShipBuildModeManager;
if (shipBuildModeManager != null)
{
shipBuildModeManager.PlaceShipObjectServerRpc(((Transform)targetObject).position + positionOffset, ((Transform)targetObject).eulerAngles + rotationOffset, NetworkObjectReference.op_Implicit(networkObject), -1);
}
};
}
public static Action<float> PlaceObjectAtTransform<T, M>(ObjectPlacement<T, M> placement) where T : Transform where M : MonoBehaviour
{
//IL_000d: 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)
return PlaceObjectAtTransform(placement.TargetObject, placement.GameObject, placement.PositionOffset, placement.RotationOffset);
}
public static Action<float> PlaceObjectAtPosition<T, M>(T targetObject, M gameObject, Vector3 positionOffset = default(Vector3), Vector3 rotationOffset = default(Vector3)) where T : Transform where M : MonoBehaviour
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
return delegate
{
//IL_0023: 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_002e: 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_003a: Unknown result type (might be due to invalid IL or missing references)
NetworkObject networkObject = GetNetworkObject(gameObject);
ShipBuildModeManager? shipBuildModeManager = ShipBuildModeManager;
if (shipBuildModeManager != null)
{
shipBuildModeManager.PlaceShipObjectServerRpc(((Transform)targetObject).position + positionOffset, rotationOffset, NetworkObjectReference.op_Implicit(networkObject), -1);
}
};
}
public static Action<float> PlaceObjectAtPosition<M>(M gameObject, Vector3 position, Vector3 rotation) where M : MonoBehaviour
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
return delegate
{
//IL_0019: 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_0025: Unknown result type (might be due to invalid IL or missing references)
NetworkObject networkObject = GetNetworkObject(gameObject);
ShipBuildModeManager? shipBuildModeManager = ShipBuildModeManager;
if (shipBuildModeManager != null)
{
shipBuildModeManager.PlaceShipObjectServerRpc(position, rotation, NetworkObjectReference.op_Implicit(networkObject), -1);
}
};
}
public static Action<float> PlaceObjectAtPosition<T, M>(ObjectPlacement<T, M> placement) where T : Transform where M : MonoBehaviour
{
//IL_000d: 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)
return PlaceObjectAtPosition(placement.TargetObject, placement.GameObject, placement.PositionOffset, placement.RotationOffset);
}
public static PlayerControllerB? GetPlayer(string playerNameOrId)
{
PlayerControllerB[] players = Players;
return players?.FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerUsername == playerNameOrId)) ?? players?.FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.ToString() == playerNameOrId));
}
public static PlayerControllerB? GetPlayer(int playerId)
{
return GetPlayer(playerId.ToString());
}
public static void SwitchRadarTarget(ulong playerClientId)
{
StartOfRound? startOfRound = StartOfRound;
if (startOfRound != null)
{
startOfRound.mapScreen.SwitchRadarTargetServerRpc((int)playerClientId);
}
}
public static void SwitchRadarTarget(PlayerControllerB player)
{
SwitchRadarTarget(player.playerClientId);
}
public static bool Is(this Unlockable unlockable, int unlockableId)
{
return unlockableId == (int)unlockable;
}
public static void BuyUnlockable(Unlockable unlockable)
{
if (!Terminal.IsNotNull<Terminal>(out var notNullObj))
{
PrintSystem("Terminal not found!");
return;
}
StartOfRound? startOfRound = StartOfRound;
if (startOfRound != null)
{
startOfRound.BuyShipUnlockableServerRpc((int)unlockable, notNullObj.groupCredits);
}
}
public static PlaceableShipObject? GetUnlockable(Unlockable unlockable)
{
return ((IEnumerable<PlaceableShipObject>)Object.FindObjectsOfType<PlaceableShipObject>()).FirstOrDefault((Func<PlaceableShipObject, bool>)((PlaceableShipObject placeableObject) => unlockable.Is(placeableObject.unlockableID)));
}
}
}