using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AdvancedCompany.Objects;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalConfig.AutoConfig;
using LethalConfig.ConfigItems;
using LethalThings;
using Microsoft.CodeAnalysis;
using MoreShipUpgrades.UpgradeComponents.Items.Wheelbarrow;
using NeedyCats;
using On;
using On.GameNetcodeStuff;
using Physics_Items.ItemPhysics;
using Physics_Items.ItemPhysics.Environment;
using Physics_Items.ModCompatFixes;
using Physics_Items.NamedMessages;
using Physics_Items.Properties;
using Physics_Items.Utils;
using ThrowEverything.Models;
using Unity.Collections;
using Unity.Netcode;
using Unity.Netcode.Components;
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 = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("AdvancedCompany")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("LethalConfig")]
[assembly: IgnoresAccessChecksTo("LethalThings")]
[assembly: IgnoresAccessChecksTo("MoreShipUpgrades")]
[assembly: IgnoresAccessChecksTo("NeedyCats")]
[assembly: IgnoresAccessChecksTo("Spantle.ThrowEverything")]
[assembly: AssemblyCompany("Physics_Items")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Lethal Company Physics wooo!!")]
[assembly: AssemblyFileVersion("0.1.22.0")]
[assembly: AssemblyInformationalVersion("0.1.22")]
[assembly: AssemblyProduct("Physics_Items")]
[assembly: AssemblyTitle("Physics_Items")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.1.22.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 Physics_Items
{
[BepInPlugin("Physics_Items", "Physics_Items", "0.1.22")]
[BepInProcess("lethal company.exe")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Plugin : BaseUnityPlugin
{
internal static ManualLogSource Logger;
internal static Plugin Instance;
internal bool Initialized = false;
internal bool ServerHasMod = false;
internal HashSet<Type> manualSkipList = new HashSet<Type>();
internal HashSet<Type> blockList = new HashSet<Type>();
private string configDirectory = Paths.ConfigPath;
internal ConfigEntry<bool> useSourceSounds;
internal ConfigEntry<bool> physicsOnPickup;
internal ConfigEntry<bool> disablePlayerCollision;
internal ConfigEntry<float> maxCollisionVolume;
internal ConfigEntry<bool> overrideAllItemPhysics;
internal ConfigEntry<bool> InitializeConfigs;
internal ConfigEntry<bool> DebuggingStuff;
internal ConfigFile customBlockList;
internal Dictionary<string, GrabbableObject> allItemsDictionary = new Dictionary<string, GrabbableObject>();
internal Assembly myAssembly;
internal readonly Harmony Harmony = new Harmony("Physics_Items");
internal HashSet<GrabbableObject> skipObject = new HashSet<GrabbableObject>();
private void Awake()
{
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_0130: Expected O, but got Unknown
//IL_0297: Unknown result type (might be due to invalid IL or missing references)
//IL_02a1: Expected O, but got Unknown
//IL_02a9: Unknown result type (might be due to invalid IL or missing references)
//IL_02b3: Expected O, but got Unknown
//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
//IL_02c5: Expected O, but got Unknown
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d7: Expected O, but got Unknown
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
Logger = ((BaseUnityPlugin)this).Logger;
Logger.LogInfo((object)"Plugin Physics_Items is loaded!");
AssetLoader.LoadAssetBundles();
if (ThrowEverythingCompatibility.enabled)
{
ThrowEverythingCompatibility.ApplyFixes();
}
if (AdvancedCompanyCompatibility.enabled)
{
AdvancedCompanyCompatibility.ApplyFixes();
}
if (NeedyCatsCompatibility.enabled)
{
NeedyCatsCompatibility.ApplyFixes();
}
if (LateGameUpgradesCompatibility.enabled)
{
LateGameUpgradesCompatibility.ApplyFixes();
}
if (LethalConfigCompatibility.enabled)
{
LethalConfigCompatibility.ApplyFixes();
}
Harmony.PatchAll(typeof(ModCheck));
Harmony.PatchAll(typeof(OnCollision));
myAssembly = Assembly.GetExecutingAssembly();
manualSkipList.Add(typeof(ExtensionLadderItem));
manualSkipList.Add(typeof(RadarBoosterItem));
InitializeConfigs = ((BaseUnityPlugin)this).Config.Bind<bool>("Technical", "Initialize Configs", true, "Re-Initializes all configs when set to true");
customBlockList = new ConfigFile(Path.Combine(configDirectory, "physicsItems_CustomBlockList.cfg"), true);
useSourceSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("Fun", "Use Source Engine Collision Sounds", false, "Use source rigidbody sounds.");
overrideAllItemPhysics = ((BaseUnityPlugin)this).Config.Bind<bool>("Fun", "Override all Item Physics", false, "ALL Items will have physics, regardless of blocklist.");
physicsOnPickup = ((BaseUnityPlugin)this).Config.Bind<bool>("Physics Behaviour", "Physics On Pickup", false, "Only enable item physisc when it has been picked up at least once.");
disablePlayerCollision = ((BaseUnityPlugin)this).Config.Bind<bool>("Physics Behaviour", "Disable Player Collision", false, "Set if Physical Items can collide with players.");
maxCollisionVolume = ((BaseUnityPlugin)this).Config.Bind<float>("Physics Behaviour", "Max Collision Volume", 4f, "Sets the max volume each collision should have.");
DebuggingStuff = ((BaseUnityPlugin)this).Config.Bind<bool>("Technical", "Debug", false, "Debug mode");
customBlockList.SettingChanged += CustomBlockList_SettingChanged;
((BaseUnityPlugin)this).Config.SettingChanged += Config_SettingChanged;
if (InitializeConfigs.Value)
{
if (File.Exists(((BaseUnityPlugin)this).Config.ConfigFilePath))
{
File.Delete(((BaseUnityPlugin)this).Config.ConfigFilePath);
}
((BaseUnityPlugin)this).Config.Save();
Logger.Log((LogLevel)63, (object)"Initializing Configs..");
}
Landmine.Init();
GrabbablePatches.Init();
PlayerControllerB.PlaceGrabbableObject += new hook_PlaceGrabbableObject(PlayerControllerB_PlaceGrabbableObject);
PlayerControllerB.SetObjectAsNoLongerHeld += new hook_SetObjectAsNoLongerHeld(PlayerControllerB_SetObjectAsNoLongerHeld);
PlayerControllerB.DropAllHeldItems += new hook_DropAllHeldItems(PlayerControllerB_DropAllHeldItems);
MenuManager.Awake += new hook_Awake(MenuManager_Awake);
}
private void Config_SettingChanged(object sender, SettingChangedEventArgs e)
{
Logger.LogWarning((object)("Changed: " + e.ChangedSetting.Definition.Key + " to " + e.ChangedSetting.GetSerializedValue()));
}
private void CustomBlockList_SettingChanged(object sender, SettingChangedEventArgs e)
{
if (overrideAllItemPhysics.Value)
{
return;
}
Logger.LogWarning((object)("Changed Blocklist: " + e.ChangedSetting.Definition.Section + " to " + e.ChangedSetting.GetSerializedValue()));
GrabbableObject val = allItemsDictionary[e.ChangedSetting.Definition.Section];
List<GrabbableObject> list = Object.FindObjectsByType<GrabbableObject>((FindObjectsInactive)0, (FindObjectsSortMode)0).ToList();
if (e.ChangedSetting.GetSerializedValue() == "true")
{
foreach (GrabbableObject item in list)
{
if (((object)item).GetType() == ((object)val).GetType())
{
skipObject.Add(item);
blockList.Add(((object)item).GetType());
}
}
return;
}
foreach (GrabbableObject item2 in list)
{
if (((object)item2).GetType() == ((object)val).GetType())
{
skipObject.Remove(item2);
blockList.Remove(((object)item2).GetType());
}
}
}
private void InitializeNetworkTransformAndBlocklistConfig()
{
if (Initialized)
{
return;
}
GrabbableObject[] array = Resources.FindObjectsOfTypeAll<GrabbableObject>();
foreach (GrabbableObject val in array)
{
InitializeBlocklistConfig(val);
if (!manualSkipList.Contains(((object)val).GetType()) && (Object)(object)((Component)val).gameObject.GetComponent<NetworkTransform>() == (Object)null)
{
NetworkTransform val2 = ((Component)val).gameObject.AddComponent<NetworkTransform>();
((Behaviour)val2).enabled = false;
}
}
Initialized = true;
InitializeConfigs.Value = false;
}
private void InitializeBlocklistConfig(GrabbableObject grabbableObject)
{
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Expected O, but got Unknown
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Expected O, but got Unknown
bool flag = false;
if ((Object)(object)grabbableObject == (Object)null)
{
return;
}
if ((Object)(object)grabbableObject.itemProperties == (Object)null)
{
Logger.LogWarning((object)"Skipping item with no item properties");
return;
}
if (Utility.IsNullOrWhiteSpace(grabbableObject.itemProperties.itemName))
{
Logger.LogWarning((object)"Skipping item with no item name");
return;
}
if (manualSkipList.Contains(((object)grabbableObject).GetType()) || (Object)(object)((Component)grabbableObject).GetComponent<Rigidbody>() != (Object)null)
{
flag = true;
}
allItemsDictionary[grabbableObject.itemProperties.itemName] = grabbableObject;
ConfigDefinition val = new ConfigDefinition(grabbableObject.itemProperties.itemName, "Add to blocklist");
customBlockList.Bind<bool>(val, flag, new ConfigDescription("If check/true, adds to blocklist. [REQUIRES RESTART]", (AcceptableValueBase)null, Array.Empty<object>()));
if (InitializeConfigs.Value)
{
customBlockList[val].BoxedValue = flag;
}
if (customBlockList[val].GetSerializedValue() == "true")
{
skipObject.Add(grabbableObject);
blockList.Add(((object)grabbableObject).GetType());
}
Logger.LogInfo((object)$"Added: {grabbableObject.itemProperties.itemName} to config (Default: {flag}, current: {customBlockList[val].GetSerializedValue()})");
}
private void PlayerControllerB_DropAllHeldItems(orig_DropAllHeldItems orig, PlayerControllerB self, bool itemsFall, bool disconnecting)
{
List<GrabbableObject> list = new List<GrabbableObject>(self.ItemSlots);
orig.Invoke(self, itemsFall, disconnecting);
if ((Object)(object)Physics.GetPhysicsComponent(((Component)self).gameObject) == (Object)null)
{
return;
}
for (int i = 0; i < list.Count; i++)
{
GrabbableObject val = list[i];
if (val != null && Physics.GetPhysicsComponent(((Component)val).gameObject, out var physicsComponent))
{
skipObject.Add(val);
physicsComponent.physicsHelperRef.why = true;
physicsComponent.alreadyPickedUp = false;
((Behaviour)physicsComponent).enabled = false;
}
}
}
private void PlayerControllerB_PlaceGrabbableObject(orig_PlaceGrabbableObject orig, PlayerControllerB self, Transform parentObject, Vector3 positionOffset, bool matchRotationOfParent, GrabbableObject placeObject)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: 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)
orig.Invoke(self, parentObject, positionOffset, matchRotationOfParent, placeObject);
Logger.LogWarning((object)"placing object");
if (!skipObject.Contains(placeObject))
{
Physics.GetPhysicsComponent(((Component)placeObject).gameObject, out var physicsComponent);
if (!((Object)(object)physicsComponent == (Object)null))
{
physicsComponent.isPlaced = true;
physicsComponent.rigidbody.isKinematic = true;
((Component)placeObject).gameObject.transform.rotation = Quaternion.Euler(placeObject.itemProperties.restingRotation.x, (float)(placeObject.floorYRot + placeObject.itemProperties.floorYOffset) + 90f, placeObject.itemProperties.restingRotation.z);
((Component)placeObject).gameObject.transform.localPosition = positionOffset;
}
}
}
private void PlayerControllerB_SetObjectAsNoLongerHeld(orig_SetObjectAsNoLongerHeld orig, PlayerControllerB self, bool droppedInElevator, bool droppedInShipRoom, Vector3 targetFloorPosition, GrabbableObject dropObject, int floorYRot)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: 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_007e: 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_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: 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_0110: 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_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: 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)
orig.Invoke(self, droppedInElevator, droppedInElevator, targetFloorPosition, dropObject, floorYRot);
if (!skipObject.Contains(dropObject))
{
Physics.GetPhysicsComponent(((Component)dropObject).gameObject, out var physicsComponent);
if (!((Object)(object)physicsComponent == (Object)null))
{
Vector3 val = dropObject.startFallingPosition - dropObject.targetFloorPosition;
float magnitude = ((Vector3)(ref val)).magnitude;
val = dropObject.targetFloorPosition - dropObject.startFallingPosition;
Vector3 normalized = ((Vector3)(ref val)).normalized;
Logger.LogWarning((object)$"Normalized: {normalized}");
bool flag = normalized + Vector3.up != Vector3.zero;
float num = (flag ? Mathf.Min(physicsComponent.throwForce, 36f) : 0f);
float num2 = ((num == 0f) ? 0f : Mathf.Min(magnitude * num, physicsComponent.rigidbody.mass * 10f));
Vector3 val2 = ((num2 == 0f) ? Vector3.zero : (normalized * num2));
Logger.LogWarning((object)$"Throwing with force: {val2}, {flag}, {num}, {physicsComponent.throwForce}, {physicsComponent.rigidbody.mass}");
physicsComponent.rigidbody.AddForce(val2, (ForceMode)1);
}
}
}
private void MenuManager_Awake(orig_Awake orig, MenuManager self)
{
orig.Invoke(self);
InitializeNetworkTransformAndBlocklistConfig();
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "Physics_Items";
public const string PLUGIN_NAME = "Physics_Items";
public const string PLUGIN_VERSION = "0.1.22";
}
}
namespace Physics_Items.Utils
{
internal class AssetLoader
{
internal static List<AudioClip> allAudioList { get; private set; } = new List<AudioClip>();
internal static AssetBundle bundle { get; private set; }
internal static void LoadAssetBundles()
{
bundle = AssetBundle.LoadFromMemory(Resources.physicsitems);
if ((Object)(object)bundle == (Object)null)
{
Plugin.Logger.LogWarning((object)"Assetbundle could not be loaded!");
return;
}
string[] allAssetNames = bundle.GetAllAssetNames();
foreach (string text in allAssetNames)
{
Object val = bundle.LoadAsset<Object>(text);
if (val == (Object)null)
{
Plugin.Logger.LogWarning((object)("Asset " + text + " could not be loaded because it is not an Object!"));
continue;
}
Plugin.Logger.LogWarning((object)("Loaded: " + text));
AudioClip val2 = (AudioClip)(object)((val is AudioClip) ? val : null);
if (val2 != null && !allAudioList.Contains(val2))
{
allAudioList.Add(val2);
Plugin.Logger.LogInfo((object)("Added custom audio clip: " + ((Object)val2).name));
}
}
}
}
internal class ListUtil
{
public static T GetRandomElement<T>(List<T> objects, ref int index)
{
if (objects.Count == 0)
{
index = -1;
return default(T);
}
index = Random.Range(0, objects.Count);
return objects[index];
}
public static T GetRandomElement<T>(List<T> objects)
{
int index = 0;
return GetRandomElement(objects, ref index);
}
public static string[] GetLayersFromMask(int layerMask)
{
List<string> list = new List<string>();
for (int i = 0; i < 32; i++)
{
int num = 1 << i;
if ((layerMask & num) == num)
{
list.Add(LayerMask.LayerToName(i));
}
}
return list.ToArray();
}
}
internal class Physics
{
internal static Dictionary<GameObject, PhysicsComponent> physicsComponents = new Dictionary<GameObject, PhysicsComponent>();
internal static List<PlayerControllerB> playerControllerBs = new List<PlayerControllerB>();
internal static PhysicsComponent GetPhysicsComponent(GameObject gameObj)
{
if (physicsComponents.ContainsKey(gameObj))
{
return physicsComponents[gameObj];
}
return gameObj.GetComponent<PhysicsComponent>();
}
internal static bool GetPhysicsComponent(GameObject gameObj, out PhysicsComponent physicsComponent)
{
if (physicsComponents.ContainsKey(gameObj))
{
physicsComponent = physicsComponents[gameObj];
}
else
{
physicsComponent = gameObj.GetComponent<PhysicsComponent>();
physicsComponents[gameObj] = physicsComponent;
}
return (Object)(object)physicsComponent != (Object)null;
}
internal static bool RemovePhysicsComponent(GameObject gameObj)
{
if (!physicsComponents.ContainsKey(gameObj))
{
return false;
}
physicsComponents.Remove(gameObj);
return true;
}
}
}
namespace Physics_Items.Properties
{
[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[DebuggerNonUserCode]
[CompilerGenerated]
internal class Resources
{
private static ResourceManager resourceMan;
private static CultureInfo resourceCulture;
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static ResourceManager ResourceManager
{
get
{
if (resourceMan == null)
{
ResourceManager resourceManager = new ResourceManager("Physics_Items.Properties.Resources", typeof(Resources).Assembly);
resourceMan = resourceManager;
}
return resourceMan;
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
internal static byte[] physicsitems
{
get
{
object @object = ResourceManager.GetObject("physicsitems", resourceCulture);
return (byte[])@object;
}
}
internal Resources()
{
}
}
}
namespace Physics_Items.NamedMessages
{
internal class ModCheck
{
[CompilerGenerated]
private static class <>O
{
public static HandleNamedMessageDelegate <0>__OnRequest;
public static HandleNamedMessageDelegate <1>__OnReceive;
}
public static bool hasSameModVersion = false;
internal static string RequestModCheck = "PhysicsItemsRequestModCheck";
internal static string ReceiveModCheck = "PhysicsItemsReceiveModCheck";
[HarmonyPatch(typeof(StartOfRound), "Awake")]
[HarmonyPrefix]
public static void STARTOFROUNDAWAKE()
{
//IL_007f: 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_008a: Expected O, but got Unknown
//IL_0035: 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_0040: Expected O, but got Unknown
if (NetworkManager.Singleton.IsServer)
{
hasSameModVersion = true;
CustomMessagingManager customMessagingManager = NetworkManager.Singleton.CustomMessagingManager;
string requestModCheck = RequestModCheck;
object obj = <>O.<0>__OnRequest;
if (obj == null)
{
HandleNamedMessageDelegate val = OnRequest;
<>O.<0>__OnRequest = val;
obj = (object)val;
}
customMessagingManager.RegisterNamedMessageHandler(requestModCheck, (HandleNamedMessageDelegate)obj);
Plugin.Logger.LogInfo((object)"Setting up Server CustomMessagingManager");
SyncOnLocalClient();
}
else
{
CustomMessagingManager customMessagingManager2 = NetworkManager.Singleton.CustomMessagingManager;
string receiveModCheck = ReceiveModCheck;
object obj2 = <>O.<1>__OnReceive;
if (obj2 == null)
{
HandleNamedMessageDelegate val2 = OnReceive;
<>O.<1>__OnReceive = val2;
obj2 = (object)val2;
}
customMessagingManager2.RegisterNamedMessageHandler(receiveModCheck, (HandleNamedMessageDelegate)obj2);
Plugin.Logger.LogInfo((object)"Setting up Client CustomMessagingManager");
SendRequestToServer();
}
}
private static void SendRequestToServer()
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
if (NetworkManager.Singleton.IsClient)
{
Plugin.Logger.LogInfo((object)"Sending request to server.");
string text = "0.1.22";
FastBufferWriter val = default(FastBufferWriter);
((FastBufferWriter)(ref val))..ctor(FastBufferWriter.GetWriteSize(text, false), (Allocator)2, -1);
((FastBufferWriter)(ref val)).WriteValueSafe(text, false);
NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage(RequestModCheck, 0uL, val, (NetworkDelivery)3);
}
else
{
Plugin.Logger.LogError((object)"Server cannot use method SendRequestToServer because you're already the server.");
}
}
private static void SyncOnLocalClient()
{
Plugin.Instance.ServerHasMod = hasSameModVersion;
}
private static void OnReceive(ulong senderClientId, FastBufferReader messagePayload)
{
//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)
bool flag = default(bool);
((FastBufferReader)(ref messagePayload)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
hasSameModVersion = flag;
Plugin.Logger.LogInfo((object)$"Received mod check: {hasSameModVersion} from server!");
SyncOnLocalClient();
}
private static void OnRequest(ulong senderClientId, FastBufferReader messagePayload)
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: 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)
if (NetworkManager.Singleton.IsServer)
{
Plugin.Logger.LogInfo((object)$"Player_ID: {senderClientId} Requested for Mod Check.");
string text = default(string);
((FastBufferReader)(ref messagePayload)).ReadValueSafe(ref text, false);
bool flag = text.Equals("0.1.22");
FastBufferWriter val = default(FastBufferWriter);
((FastBufferWriter)(ref val))..ctor(FastBufferWriter.GetWriteSize<bool>(ref flag, default(ForStructs)), (Allocator)2, -1);
((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage(ReceiveModCheck, senderClientId, val, (NetworkDelivery)3);
}
}
[HarmonyPatch(typeof(GameNetworkManager), "Disconnect")]
[HarmonyPrefix]
public static void OnDestroy()
{
if ((Object)(object)NetworkManager.Singleton != (Object)null)
{
if (NetworkManager.Singleton.IsServer)
{
NetworkManager.Singleton.CustomMessagingManager.UnregisterNamedMessageHandler(RequestModCheck);
Plugin.Logger.LogInfo((object)"Destroying Server CustomMessagingManager");
}
else
{
NetworkManager.Singleton.CustomMessagingManager.UnregisterNamedMessageHandler(ReceiveModCheck);
Plugin.Logger.LogInfo((object)"Destroying Client CustomMessagingManager");
}
}
hasSameModVersion = false;
}
}
internal class OnCollision
{
[CompilerGenerated]
private static class <>O
{
public static HandleNamedMessageDelegate <0>__OnReceive;
}
internal static string CollisionCheck = "PhysicsItemsCollisionCheck";
[HarmonyPatch(typeof(StartOfRound), "Awake")]
[HarmonyPrefix]
public static void StartOfRound_Awake()
{
//IL_0020: 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_002b: Expected O, but got Unknown
CustomMessagingManager customMessagingManager = NetworkManager.Singleton.CustomMessagingManager;
string collisionCheck = CollisionCheck;
object obj = <>O.<0>__OnReceive;
if (obj == null)
{
HandleNamedMessageDelegate val = OnReceive;
<>O.<0>__OnReceive = val;
obj = (object)val;
}
customMessagingManager.RegisterNamedMessageHandler(collisionCheck, (HandleNamedMessageDelegate)obj);
}
[HarmonyPatch(typeof(GameNetworkManager), "Disconnect")]
[HarmonyPrefix]
public static void OnDestroy()
{
NetworkManager.Singleton.CustomMessagingManager.UnregisterNamedMessageHandler(CollisionCheck);
Physics.physicsComponents.Clear();
}
private static void OnReceive(ulong senderClientId, FastBufferReader messagePayload)
{
//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)
NetworkObjectReference val = default(NetworkObjectReference);
((FastBufferReader)(ref messagePayload)).ReadValueSafe<NetworkObjectReference>(ref val, default(ForNetworkSerializable));
NetworkObject val2 = default(NetworkObject);
if (((NetworkObjectReference)(ref val)).TryGet(ref val2, (NetworkManager)null))
{
PhysicsComponent physicsComponent = Physics.GetPhysicsComponent(((Component)((Component)val2).transform).gameObject);
if ((Object)(object)physicsComponent != (Object)null)
{
physicsComponent.PlayDropSFX();
}
}
}
}
}
namespace Physics_Items.ModCompatFixes
{
internal static class AdvancedCompanyCompatibility
{
private static bool? _enabled;
private static string modGUID = "com.potatoepet.AdvancedCompany";
public static bool enabled
{
get
{
if (!_enabled.HasValue)
{
_enabled = Chainloader.PluginInfos.ContainsKey(modGUID);
}
return _enabled.Value;
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
public static void ApplyFixes()
{
Plugin.Logger.LogInfo((object)("Applying compatibility fixes to: " + modGUID));
Plugin.Instance.manualSkipList.Add(typeof(LightningRod));
}
}
internal static class LateGameUpgradesCompatibility
{
private static bool? _enabled;
private static string modGUID = "com.malco.lethalcompany.moreshipupgrades";
public static bool enabled
{
get
{
if (!_enabled.HasValue)
{
_enabled = Chainloader.PluginInfos.ContainsKey(modGUID);
}
return _enabled.Value;
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
public static void ApplyFixes()
{
Plugin.Logger.LogInfo((object)("Applying compatibility fixes to: " + modGUID));
Plugin.Instance.manualSkipList.Add(typeof(StoreWheelbarrow));
Plugin.Instance.manualSkipList.Add(typeof(ScrapWheelbarrow));
}
}
internal static class LethalConfigCompatibility
{
private static bool? _enabled;
private static string modGUID = "ainavt.lc.lethalconfig";
public static bool enabled
{
get
{
if (!_enabled.HasValue)
{
_enabled = Chainloader.PluginInfos.ContainsKey(modGUID);
}
return _enabled.Value;
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
public static void ApplyFixes()
{
Plugin.Logger.LogInfo((object)("Applying compatibility fixes to: " + modGUID));
Plugin.Instance.Harmony.PatchAll(typeof(LethalConfigCompatibility));
}
[HarmonyPatch(typeof(AutoConfigGenerator), "AutoGenerateConfigs")]
[HarmonyPostfix]
public static void AutoGenerateConfigs(ref AutoConfigItem[] __result)
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
foreach (KeyValuePair<ConfigDefinition, ConfigEntryBase> customBlock in Plugin.Instance.customBlockList)
{
BaseConfigItem val = AutoConfigGenerator.GenerateConfigForEntry(customBlock.Value);
val.IsAutoGenerated = false;
List<AutoConfigItem> list = __result.ToList();
AutoConfigItem item = default(AutoConfigItem);
((AutoConfigItem)(ref item)).ConfigItem = val;
((AutoConfigItem)(ref item)).Assembly = Plugin.Instance.myAssembly;
list.Add(item);
__result = list.ToArray();
}
}
}
internal class LethalThingsCompatibility
{
[CompilerGenerated]
private static class <>O
{
public static hook_SetObjectAsNoLongerHeld <0>__PlayerControllerB_SetObjectAsNoLongerHeld;
}
private static bool? _enabled;
private static string modGUID = "evaisa.lethalthings";
public static bool enabled
{
get
{
if (!_enabled.HasValue)
{
_enabled = Chainloader.PluginInfos.ContainsKey(modGUID);
}
return _enabled.Value;
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
public static void ApplyFixes(PhysicsComponent comp)
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Expected O, but got Unknown
GrabbableObject grabbableObjectRef = comp.grabbableObjectRef;
GrabbableObject val = grabbableObjectRef;
GrabbableObject val2 = val;
Dingus val3 = (Dingus)(object)((val2 is Dingus) ? val2 : null);
if (val3 != null)
{
comp.rigidbody.constraints = (RigidbodyConstraints)112;
comp.SetRotation();
}
object obj = <>O.<0>__PlayerControllerB_SetObjectAsNoLongerHeld;
if (obj == null)
{
hook_SetObjectAsNoLongerHeld val4 = PlayerControllerB_SetObjectAsNoLongerHeld;
<>O.<0>__PlayerControllerB_SetObjectAsNoLongerHeld = val4;
obj = (object)val4;
}
PlayerControllerB.SetObjectAsNoLongerHeld += (hook_SetObjectAsNoLongerHeld)obj;
}
private static void PlayerControllerB_SetObjectAsNoLongerHeld(orig_SetObjectAsNoLongerHeld orig, PlayerControllerB self, bool droppedInElevator, bool droppedInShipRoom, Vector3 targetFloorPosition, GrabbableObject dropObject, int floorYRot)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, droppedInElevator, droppedInShipRoom, targetFloorPosition, dropObject, floorYRot);
Dingus val = (Dingus)(object)((dropObject is Dingus) ? dropObject : null);
if (val != null)
{
Physics.GetPhysicsComponent(((Component)val).gameObject, out var physicsComponent);
if (!((Object)(object)physicsComponent == (Object)null) && physicsComponent.alreadyPickedUp)
{
physicsComponent.SetRotation();
}
}
}
}
internal class NeedyCatsCompatibility
{
private static bool? _enabled;
private static string modGUID = "Jordo.NeedyCats";
public static bool enabled
{
get
{
if (!_enabled.HasValue)
{
_enabled = Chainloader.PluginInfos.ContainsKey(modGUID);
}
return _enabled.Value;
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
public static void ApplyFixes()
{
Plugin.Logger.LogInfo((object)("Applying compatibility fixes to: " + modGUID));
Plugin.Instance.manualSkipList.Add(typeof(NeedyCatProp));
}
}
internal static class ThrowEverythingCompatibility
{
private static bool? _enabled;
private static string modGUID = "Spantle.ThrowEverything";
private static Collider colliderCache;
public static bool enabled
{
get
{
if (!_enabled.HasValue)
{
_enabled = Chainloader.PluginInfos.ContainsKey(modGUID);
}
return _enabled.Value;
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
public static void ApplyFixes()
{
Plugin.Logger.LogInfo((object)("Applying compatibility fixes to: " + modGUID));
Plugin.Instance.Harmony.PatchAll(typeof(ThrowEverythingCompatibility));
}
[HarmonyPatch(typeof(ChargingThrow), "DrawLandingCircle")]
[HarmonyPostfix]
private static void DrawLandingCircle(ChargingThrow __instance)
{
if ((Object)(object)colliderCache == (Object)null)
{
colliderCache = __instance.preview.GetComponent<Collider>();
}
colliderCache.isTrigger = true;
}
[HarmonyPatch(typeof(ChargingThrow), "Stop")]
[HarmonyPostfix]
private static void Stop()
{
colliderCache = null;
}
}
}
namespace Physics_Items.ItemPhysics
{
internal class DestroyHelper : MonoBehaviour
{
public GrabbableObject grabbableObjectRef;
private void Start()
{
grabbableObjectRef = ((Component)this).GetComponent<GrabbableObject>();
}
private void OnDestroy()
{
if ((Object)(object)grabbableObjectRef == (Object)null)
{
Plugin.Logger.LogWarning((object)"Grabbable object ref is null.");
}
else if (Plugin.Instance.skipObject.Contains(grabbableObjectRef))
{
Plugin.Instance.skipObject.Remove(grabbableObjectRef);
}
}
}
internal class GrabbablePatches
{
[CompilerGenerated]
private static class <>O
{
public static hook_Start <0>__GrabbableObject_Start;
public static hook_Update <1>__GrabbableObject_Update;
public static hook_EquipItem <2>__GrabbableObject_EquipItem;
public static hook_EnablePhysics <3>__GrabbableObject_EnablePhysics;
public static hook_OnPlaceObject <4>__GrabbableObject_OnPlaceObject;
public static hook_ItemActivate <5>__GrabbableObject_ItemActivate;
public static hook_GrabItem <6>__GrabbableObject_GrabItem;
}
public static void Init()
{
//IL_0011: 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: Expected O, but got Unknown
//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_003d: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Expected O, but got Unknown
//IL_0074: 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_007f: Expected O, but got Unknown
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Expected O, but got Unknown
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Expected O, but got Unknown
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Expected O, but got Unknown
object obj = <>O.<0>__GrabbableObject_Start;
if (obj == null)
{
hook_Start val = GrabbableObject_Start;
<>O.<0>__GrabbableObject_Start = val;
obj = (object)val;
}
GrabbableObject.Start += (hook_Start)obj;
object obj2 = <>O.<1>__GrabbableObject_Update;
if (obj2 == null)
{
hook_Update val2 = GrabbableObject_Update;
<>O.<1>__GrabbableObject_Update = val2;
obj2 = (object)val2;
}
GrabbableObject.Update += (hook_Update)obj2;
object obj3 = <>O.<2>__GrabbableObject_EquipItem;
if (obj3 == null)
{
hook_EquipItem val3 = GrabbableObject_EquipItem;
<>O.<2>__GrabbableObject_EquipItem = val3;
obj3 = (object)val3;
}
GrabbableObject.EquipItem += (hook_EquipItem)obj3;
object obj4 = <>O.<3>__GrabbableObject_EnablePhysics;
if (obj4 == null)
{
hook_EnablePhysics val4 = GrabbableObject_EnablePhysics;
<>O.<3>__GrabbableObject_EnablePhysics = val4;
obj4 = (object)val4;
}
GrabbableObject.EnablePhysics += (hook_EnablePhysics)obj4;
object obj5 = <>O.<4>__GrabbableObject_OnPlaceObject;
if (obj5 == null)
{
hook_OnPlaceObject val5 = GrabbableObject_OnPlaceObject;
<>O.<4>__GrabbableObject_OnPlaceObject = val5;
obj5 = (object)val5;
}
GrabbableObject.OnPlaceObject += (hook_OnPlaceObject)obj5;
object obj6 = <>O.<5>__GrabbableObject_ItemActivate;
if (obj6 == null)
{
hook_ItemActivate val6 = GrabbableObject_ItemActivate;
<>O.<5>__GrabbableObject_ItemActivate = val6;
obj6 = (object)val6;
}
GrabbableObject.ItemActivate += (hook_ItemActivate)obj6;
object obj7 = <>O.<6>__GrabbableObject_GrabItem;
if (obj7 == null)
{
hook_GrabItem val7 = GrabbableObject_GrabItem;
<>O.<6>__GrabbableObject_GrabItem = val7;
obj7 = (object)val7;
}
GrabbableObject.GrabItem += (hook_GrabItem)obj7;
}
internal static PhysicsComponent AddPhysicsComponent(GrabbableObject grabbableObject)
{
if ((Object)(object)((Component)grabbableObject).gameObject.GetComponent<NetworkObject>() == (Object)null)
{
return null;
}
if (Plugin.Instance.blockList.Contains(((object)grabbableObject).GetType()))
{
if (Plugin.Instance.overrideAllItemPhysics.Value)
{
return null;
}
Plugin.Logger.LogWarning((object)$"Skipping Blocked Item: {((Component)grabbableObject).gameObject}");
((Component)grabbableObject).gameObject.AddComponent<DestroyHelper>();
Plugin.Instance.skipObject.Add(grabbableObject);
return null;
}
PhysicsComponent physicsComponent = default(PhysicsComponent);
if (!((Component)grabbableObject).gameObject.TryGetComponent<PhysicsComponent>(ref physicsComponent))
{
physicsComponent = ((Component)grabbableObject).gameObject.AddComponent<PhysicsComponent>();
}
if ((Object)(object)physicsComponent == (Object)null)
{
Plugin.Logger.LogError((object)$"Physics Component of {((Component)grabbableObject).gameObject} is null! This shouldn't happen!");
return null;
}
Plugin.Logger.LogInfo((object)$"Successfully added Physics Component to {((Component)grabbableObject).gameObject}.");
Collider val = default(Collider);
if (((Component)grabbableObject).TryGetComponent<Collider>(ref val))
{
val.isTrigger = false;
}
return physicsComponent;
}
private static void GrabbableObject_EnablePhysics(orig_EnablePhysics orig, GrabbableObject self, bool enable)
{
PhysicsComponent physicsComponent;
if (Plugin.Instance.skipObject.Contains(self))
{
orig.Invoke(self, enable);
}
else if (Physics.GetPhysicsComponent(((Component)self).gameObject, out physicsComponent))
{
physicsComponent.EnableColliders(enable);
physicsComponent.rigidbody.isKinematic = !enable;
if (enable)
{
physicsComponent.isPlaced = false;
}
}
}
private static void GrabbableObject_EquipItem(orig_EquipItem orig, GrabbableObject self)
{
orig.Invoke(self);
if (!Plugin.Instance.skipObject.Contains(self))
{
((Component)self).transform.parent = null;
self.EnablePhysics(false);
}
}
private static void GrabbableObject_Start(orig_Start orig, GrabbableObject self)
{
if ((Object)(object)Physics.GetPhysicsComponent(((Component)self).gameObject) != (Object)null)
{
orig.Invoke(self);
return;
}
PhysicsComponent physicsComponent = AddPhysicsComponent(self);
if (Plugin.Instance.physicsOnPickup.Value && (Object)(object)physicsComponent != (Object)null)
{
((Behaviour)physicsComponent).enabled = false;
Plugin.Instance.skipObject.Add(self);
}
orig.Invoke(self);
}
private static void GrabbableObject_GrabItem(orig_GrabItem orig, GrabbableObject self)
{
orig.Invoke(self);
if (Physics.GetPhysicsComponent(((Component)self).gameObject, out var physicsComponent))
{
physicsComponent.alreadyPickedUp = true;
if (physicsComponent.slow)
{
GameNetworkManager.Instance.localPlayerController.isMovementHindered = 0;
physicsComponent.slow = false;
}
}
}
private static void GrabbableObject_ItemActivate(orig_ItemActivate orig, GrabbableObject self, bool used, bool buttonDown)
{
orig.Invoke(self, used, buttonDown);
}
private static void GrabbableObject_OnPlaceObject(orig_OnPlaceObject orig, GrabbableObject self)
{
orig.Invoke(self);
if (!Plugin.Instance.skipObject.Contains(self))
{
Physics.GetPhysicsComponent(((Component)self).gameObject, out var physicsComponent);
if (!((Object)(object)physicsComponent == (Object)null))
{
physicsComponent.EnableColliders(enable: true);
physicsComponent.isPlaced = true;
physicsComponent.rigidbody.isKinematic = true;
}
}
}
private static void GrabbableObject_Update(orig_Update orig, GrabbableObject self)
{
if (Plugin.Instance.skipObject.Contains(self))
{
orig.Invoke(self);
}
else if (!((Object)(object)self == (Object)null))
{
self.fallTime = 1f;
self.reachedFloorTarget = true;
bool isHeld = self.isHeld;
self.isHeld = true;
orig.Invoke(self);
self.isHeld = isHeld;
}
}
}
[RequireComponent(typeof(GrabbableObject))]
public class PhysicsComponent : MonoBehaviour, IHittable
{
public GrabbableObject grabbableObjectRef;
public Collider collider;
public Rigidbody rigidbody;
public NetworkTransform networkTransform;
public NetworkObject networkObject;
public NetworkRigidbody networkRigidbody;
public PhysicsHelper physicsHelperRef;
public bool isPlaced = false;
public Rigidbody scanNodeRigid;
public float terminalVelocity;
public float gravity = 9.8f;
public float throwForce;
public float oldVolume;
public bool alreadyPickedUp = false;
public Vector3 up;
public AudioSource audioSource;
public LungProp apparatusRef;
public int gridSize = 5;
public float cellSize = 2f;
public Collider[] results = (Collider[])(object)new Collider[3];
private Vector3 lastVelocity;
public float threshold = 0.1f;
private bool oldValue = false;
private Transform parent;
private Vector3? relativePosition;
private Vector3 oldPos;
private Vector3 oldRelativePosition;
private float magnitude;
private static bool firstHit;
private static Vector3 velocity;
private static float velocityMag;
public bool slow;
public bool isHit = false;
public Vector3 hitDir = Vector3.zero;
private bool IsHostOrServer => NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer;
private void Awake()
{
//IL_0225: Unknown result type (might be due to invalid IL or missing references)
//IL_022a: Unknown result type (might be due to invalid IL or missing references)
//IL_022f: Unknown result type (might be due to invalid IL or missing references)
string text = (IsHostOrServer ? "Host" : "Client");
Plugin.Logger.LogWarning((object)("Awake called by: " + text));
grabbableObjectRef = ((Component)this).gameObject.GetComponent<GrabbableObject>();
if ((Object)(object)grabbableObjectRef == (Object)null)
{
Plugin.Logger.LogError((object)$"GrabbableObject component does not exist for Game Object {((Component)this).gameObject}. This is not allowed!");
return;
}
if (!((Component)this).TryGetComponent<Rigidbody>(ref rigidbody))
{
rigidbody = ((Component)this).gameObject.AddComponent<Rigidbody>();
rigidbody.collisionDetectionMode = (CollisionDetectionMode)1;
}
networkObject = ((Component)this).GetComponent<NetworkObject>();
ScanNodeProperties componentInChildren = ((Component)this).GetComponentInChildren<ScanNodeProperties>();
if ((Object)(object)componentInChildren != (Object)null && !((Component)componentInChildren).gameObject.TryGetComponent<Rigidbody>(ref scanNodeRigid))
{
scanNodeRigid = ((Component)componentInChildren).gameObject.AddComponent<Rigidbody>();
Plugin.Logger.LogInfo((object)$"Added Rigidbody to {((Component)this).gameObject} ScanNode");
}
if (!((Component)this).TryGetComponent<NetworkTransform>(ref networkTransform) && (Object)(object)networkObject != (Object)null)
{
networkTransform = ((Component)this).gameObject.AddComponent<NetworkTransform>();
Plugin.Logger.LogWarning((object)$"Successfully added NetworkTransform to {((Component)this).gameObject}");
}
if (!((Component)this).TryGetComponent<NetworkRigidbody>(ref networkRigidbody) && (Object)(object)networkObject != (Object)null)
{
networkRigidbody = ((Component)this).gameObject.AddComponent<NetworkRigidbody>();
}
GrabbableObject obj = grabbableObjectRef;
LungProp val = (LungProp)(object)((obj is LungProp) ? obj : null);
if (val != null && (Object)(object)val != (Object)null)
{
apparatusRef = val;
}
audioSource = ((Component)this).gameObject.GetComponent<AudioSource>();
physicsHelperRef = ((Component)this).gameObject.AddComponent<PhysicsHelper>();
collider = ((Component)this).gameObject.GetComponent<Collider>();
oldVolume = audioSource.volume;
throwForce = rigidbody.mass * 10f;
up = grabbableObjectRef.itemProperties.verticalOffset * Vector3.up;
grabbableObjectRef.itemProperties.syncDiscardFunction = true;
if (LethalThingsCompatibility.enabled)
{
LethalThingsCompatibility.ApplyFixes(this);
}
}
public void FixPosition()
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: 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_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_0436: Unknown result type (might be due to invalid IL or missing references)
//IL_0340: Unknown result type (might be due to invalid IL or missing references)
//IL_036f: Unknown result type (might be due to invalid IL or missing references)
//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
//IL_03d2: Unknown result type (might be due to invalid IL or missing references)
//IL_03e1: Unknown result type (might be due to invalid IL or missing references)
//IL_03ed: Unknown result type (might be due to invalid IL or missing references)
//IL_03f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0408: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: 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_010f: 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_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_044f: Unknown result type (might be due to invalid IL or missing references)
//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: 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_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0158: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Unknown result type (might be due to invalid IL or missing references)
//IL_016d: 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_018a: 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_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_0460: Unknown result type (might be due to invalid IL or missing references)
//IL_0474: Unknown result type (might be due to invalid IL or missing references)
//IL_0235: Unknown result type (might be due to invalid IL or missing references)
//IL_0262: Unknown result type (might be due to invalid IL or missing references)
//IL_026a: Unknown result type (might be due to invalid IL or missing references)
//IL_0257: Unknown result type (might be due to invalid IL or missing references)
//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
if (rigidbody.isKinematic)
{
return;
}
Dictionary<Vector3, GameObject> dictionary = new Dictionary<Vector3, GameObject>();
Vector3 val = Vector3.zero;
float num = float.PositiveInfinity;
Vector3 val3 = default(Vector3);
for (int i = 0; i < gridSize; i++)
{
for (int j = 0; j < gridSize; j++)
{
Vector3 val2 = new Vector3((float)(i - gridSize / 2) * cellSize / 2f, 0f, (float)(j - gridSize / 2) * cellSize / 2f) + new Vector3(cellSize, 0f, cellSize) * 0.5f;
if (val2 == new Vector3(cellSize, 0f, cellSize) * 0.5f)
{
val2 = Vector3.zero;
}
((Vector3)(ref val3))..ctor(cellSize / 2f, cellSize / 2f, cellSize / 2f);
val2 += ((Component)this).transform.position;
Material val4 = null;
if (Plugin.Instance.DebuggingStuff.Value)
{
dictionary[val2] = GameObject.CreatePrimitive((PrimitiveType)3);
dictionary[val2].layer = 6;
dictionary[val2].transform.position = val2;
dictionary[val2].transform.localScale = val3;
dictionary[val2].GetComponent<Collider>().isTrigger = true;
dictionary[val2].GetComponent<Collider>().enabled = false;
Plugin.Logger.LogInfo((object)$"Found cell: {val2}");
val4 = dictionary[val2].GetComponent<Renderer>().material;
val4.shader = Shader.Find("HDRP/Lit");
}
int num2 = Physics.OverlapBoxNonAlloc(val2, val3, results, Quaternion.identity, 2318, (QueryTriggerInteraction)1);
if (num2 > 1 && num2 > 0)
{
continue;
}
if (Plugin.Instance.DebuggingStuff.Value)
{
Plugin.Logger.LogWarning((object)$"Found free spot at: {val2}");
}
if ((Object)(object)val4 != (Object)null)
{
val4.color = Color.yellow;
}
float num3 = Vector3.Distance(val2, ((Component)this).transform.position);
if (num3 < num)
{
if (Plugin.Instance.DebuggingStuff.Value)
{
Plugin.Logger.LogWarning((object)$"Found closer distance at: {val2}");
}
num = num3;
val = val2;
if (val == ((Component)this).transform.position)
{
break;
}
}
}
}
if (num != float.PositiveInfinity)
{
if (Plugin.Instance.DebuggingStuff.Value)
{
Plugin.Logger.LogWarning((object)$"Moving item to closest free spot at: {val}");
GameObject val5 = GameObject.CreatePrimitive((PrimitiveType)3);
val5.layer = 6;
val5.transform.position = ((Component)this).transform.position;
val5.transform.localScale = new Vector3(cellSize / 2f, cellSize / 2f, cellSize / 2f);
Material material = val5.GetComponent<Renderer>().material;
material.shader = Shader.Find("HDRP/Lit");
material.color = Color.blue;
material.color = new Color(material.color.r, material.color.g, material.color.b, 0.5f);
val5.GetComponent<Collider>().isTrigger = true;
val5.GetComponent<Collider>().enabled = false;
}
((Component)this).transform.position = val;
if (Plugin.Instance.DebuggingStuff.Value && dictionary.ContainsKey(val))
{
Material material2 = dictionary[val].GetComponent<Renderer>().material;
material2.color = Color.green;
}
}
}
public void SetPosition()
{
//IL_0020: 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)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
Transform val = GetParent();
if ((Object)(object)val != (Object)(object)((Component)this).transform)
{
Vector3 localPosition = val.InverseTransformPoint(((Component)this).transform.position);
((Component)this).transform.localPosition = localPosition;
}
}
public void SetRotation()
{
//IL_00bb: 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_0059: Unknown result type (might be due to invalid IL or missing references)
if (grabbableObjectRef.floorYRot == -1)
{
((Component)this).transform.rotation = Quaternion.Euler(grabbableObjectRef.itemProperties.restingRotation.x, ((Component)grabbableObjectRef).transform.eulerAngles.y, grabbableObjectRef.itemProperties.restingRotation.z);
}
else
{
((Component)this).transform.rotation = Quaternion.Euler(grabbableObjectRef.itemProperties.restingRotation.x, (float)(grabbableObjectRef.floorYRot + grabbableObjectRef.itemProperties.floorYOffset) + 90f, grabbableObjectRef.itemProperties.restingRotation.z);
}
}
private void InitializeVariables()
{
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0163: Unknown result type (might be due to invalid IL or missing references)
alreadyPickedUp = !Plugin.Instance.physicsOnPickup.Value;
grabbableObjectRef.itemProperties.itemSpawnsOnGround = Plugin.Instance.physicsOnPickup.Value;
rigidbody.collisionDetectionMode = (CollisionDetectionMode)2;
rigidbody.drag = 0.1f;
if ((Object)(object)apparatusRef != (Object)null)
{
rigidbody.isKinematic = apparatusRef.isLungDocked || apparatusRef.isLungDockedInElevator || isPlaced;
}
else
{
rigidbody.isKinematic = isPlaced;
}
networkTransform.SyncScaleX = false;
networkTransform.SyncScaleY = false;
networkTransform.SyncScaleZ = false;
((Behaviour)networkTransform).enabled = Plugin.Instance.ServerHasMod;
grabbableObjectRef.fallTime = 1f;
grabbableObjectRef.reachedFloorTarget = true;
Plugin.Instance.skipObject.Remove(grabbableObjectRef);
if ((Object)(object)scanNodeRigid != (Object)null)
{
scanNodeRigid.isKinematic = true;
scanNodeRigid.useGravity = false;
}
rigidbody.velocity = Vector3.zero;
FixPosition();
rigidbody.velocity = Vector3.zero;
}
private void UninitializeVariables()
{
//IL_007e: 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)
Plugin.Logger.LogWarning((object)"disable");
grabbableObjectRef.EnablePhysics(false);
Plugin.Instance.skipObject.Add(grabbableObjectRef);
EnableColliders(enable: true);
grabbableObjectRef.fallTime = 0f;
grabbableObjectRef.reachedFloorTarget = false;
audioSource.volume = oldVolume;
((Behaviour)networkTransform).enabled = false;
firstHit = false;
hitDir = Vector3.zero;
oldValue = false;
}
private void OnEnable()
{
InitializeVariables();
}
private void OnDisable()
{
UninitializeVariables();
}
private bool HasRequiredComponents()
{
if ((Object)(object)rigidbody == (Object)null)
{
Plugin.Logger.LogError((object)$"Rigidbody doesn't exist for Game Object {((Component)this).gameObject}");
return false;
}
if ((Object)(object)networkTransform == (Object)null)
{
Plugin.Logger.LogError((object)$"Network transform doesn't exist for Game Object {((Component)this).gameObject}");
return false;
}
if ((Object)(object)((Component)this).GetComponent<NetworkObject>() == (Object)null)
{
Plugin.Logger.LogError((object)$"{((Component)this).gameObject} has Network Transform even though its not a network object.");
return false;
}
if ((Object)(object)grabbableObjectRef == (Object)null)
{
Plugin.Logger.LogError((object)$"{((Component)this).gameObject} Does not have a valid grabbable object component to reference from.");
return false;
}
return true;
}
private void Start()
{
if (HasRequiredComponents())
{
rigidbody.useGravity = false;
float num = grabbableObjectRef.itemProperties.weight * 105f - 105f;
rigidbody.mass = Mathf.Max(num, 1f);
terminalVelocity = MathF.Sqrt(2f * rigidbody.mass * gravity);
grabbableObjectRef.itemProperties.itemSpawnsOnGround = false;
if (StartOfRound.Instance.inShipPhase)
{
grabbableObjectRef.fallTime = 1f;
grabbableObjectRef.hasHitGround = true;
grabbableObjectRef.scrapPersistedThroughRounds = true;
grabbableObjectRef.isInElevator = true;
grabbableObjectRef.isInShipRoom = true;
}
}
}
protected virtual void FixedUpdate()
{
//IL_0075: 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)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
if (IsHostOrServer || !Plugin.Instance.ServerHasMod)
{
if (!rigidbody.isKinematic && !grabbableObjectRef.isHeld)
{
rigidbody.useGravity = false;
rigidbody.AddForce(Vector3.down * gravity, (ForceMode)5);
}
else
{
rigidbody.AddForce(Vector3.zero, (ForceMode)2);
}
}
}
public void EnableColliders(bool enable)
{
for (int i = 0; i < grabbableObjectRef.propColliders.Length; i++)
{
if (!((Object)(object)grabbableObjectRef.propColliders[i] == (Object)null) && !((Component)grabbableObjectRef.propColliders[i]).gameObject.CompareTag("InteractTrigger") && !((Component)grabbableObjectRef.propColliders[i]).gameObject.CompareTag("DoNotSet"))
{
grabbableObjectRef.propColliders[i].enabled = enable;
}
}
}
private void MoveWithParent()
{
}
protected virtual void Update()
{
if (slow)
{
GameNetworkManager.Instance.localPlayerController.isMovementHindered = (int)(rigidbody.mass / 1f) - 1;
}
if (oldValue != Plugin.Instance.ServerHasMod)
{
oldValue = Plugin.Instance.ServerHasMod;
Plugin.Logger.LogWarning((object)$"Setting {((Component)this).gameObject} Network Transform enabled to {Plugin.Instance.ServerHasMod}");
((Behaviour)networkTransform).enabled = Plugin.Instance.ServerHasMod;
}
if ((Object)(object)apparatusRef != (Object)null)
{
bool flag = apparatusRef.isLungDocked || apparatusRef.isLungDockedInElevator || (!StartOfRound.Instance.shipHasLanded && !StartOfRound.Instance.inShipPhase) || isPlaced;
if (rigidbody.isKinematic == flag)
{
return;
}
rigidbody.isKinematic = flag;
}
else
{
rigidbody.isKinematic = ((grabbableObjectRef.isInShipRoom || grabbableObjectRef.isInElevator) && !StartOfRound.Instance.shipHasLanded && !StartOfRound.Instance.inShipPhase) || isPlaced;
}
if ((grabbableObjectRef.isInShipRoom || grabbableObjectRef.isInElevator) && rigidbody.isKinematic && !isPlaced)
{
alreadyPickedUp = false;
SetPosition();
((Behaviour)this).enabled = false;
}
}
public static float FastInverseSqrt(float number)
{
float num = number * 0.5f;
float value = number;
int num2 = BitConverter.ToInt32(BitConverter.GetBytes(value), 0);
num2 = 1597463007 - (num2 >> 1);
value = BitConverter.ToSingle(BitConverter.GetBytes(num2), 0);
value *= 1.5f - num * value * value;
return 1f / value;
}
public Transform GetParent()
{
if ((Object)(object)grabbableObjectRef.parentObject != (Object)null)
{
parent = grabbableObjectRef.parentObject;
}
else if ((Object)(object)((Component)this).transform.parent != (Object)null)
{
parent = ((Component)this).transform.parent;
}
else
{
parent = ((Component)this).transform;
}
return parent;
}
public void PlayDropSFX()
{
//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_0043: 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_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: 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_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = Vector3.zero;
if (isHit)
{
isHit = false;
float num = Mathf.Min(throwForce, 36f);
float num2 = Mathf.Min(num, rigidbody.mass * 10f);
val = hitDir * num2;
rigidbody.velocity = val;
}
if ((Object)(object)grabbableObjectRef.itemProperties.dropSFX != (Object)null)
{
AudioClip val2 = grabbableObjectRef.itemProperties.dropSFX;
if (Plugin.Instance.useSourceSounds.Value)
{
val2 = ListUtil.GetRandomElement(AssetLoader.allAudioList);
}
if ((Object)(object)audioSource != (Object)null)
{
float volume;
if (val != Vector3.zero)
{
volume = Mathf.Min(((Vector3)(ref val)).magnitude, Plugin.Instance.maxCollisionVolume.Value);
Plugin.Logger.LogWarning((object)"wat");
}
else
{
volume = Mathf.Clamp(velocityMag, 0.2f, Plugin.Instance.maxCollisionVolume.Value);
}
audioSource.volume = volume;
audioSource.PlayOneShot(val2, audioSource.volume);
}
if (((NetworkBehaviour)grabbableObjectRef).IsOwner)
{
RoundManager.Instance.PlayAudibleNoise(((Component)this).gameObject.transform.position, 8f, 0.5f, 0, grabbableObjectRef.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 941);
}
}
grabbableObjectRef.hasHitGround = true;
}
protected virtual void OnCollisionExit(Collision collision)
{
if (collision.gameObject.layer == 26)
{
slow = false;
GameNetworkManager.Instance.localPlayerController.isMovementHindered = 0;
}
}
protected virtual void OnCollisionEnter(Collision collision)
{
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: 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_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
if (collision.gameObject.layer == 26 && Plugin.Instance.disablePlayerCollision.Value)
{
Physics.IgnoreCollision(collider, collision.gameObject.GetComponent<Collider>(), true);
return;
}
if (collision.gameObject.layer == 26)
{
slow = true;
}
if (!firstHit)
{
firstHit = true;
return;
}
if (IsHostOrServer)
{
NetworkObjectReference val = NetworkObjectReference.op_Implicit(networkObject);
FastBufferWriter val2 = default(FastBufferWriter);
((FastBufferWriter)(ref val2))..ctor(FastBufferWriter.GetWriteSize<NetworkObjectReference>(ref val, default(ForStructs)), (Allocator)2, -1);
((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref val, default(ForNetworkSerializable));
foreach (NetworkClient connectedClients in NetworkManager.Singleton.ConnectedClientsList)
{
NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage(OnCollision.CollisionCheck, connectedClients.ClientId, val2, (NetworkDelivery)3);
}
}
else if (!Plugin.Instance.ServerHasMod)
{
PlayDropSFX();
}
velocity = rigidbody.velocity;
velocityMag = FastInverseSqrt(((Vector3)(ref velocity)).sqrMagnitude);
}
private void OnDestroy()
{
Physics.RemovePhysicsComponent(((Component)this).gameObject);
}
protected virtual void LateUpdate()
{
//IL_0073: 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_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: 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_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_0122: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)grabbableObjectRef == (Object)null)
{
Plugin.Logger.LogError((object)$"{((Component)this).gameObject} Does not have a valid grabbable object component to reference from. Destroying script.");
Object.Destroy((Object)(object)this);
return;
}
if ((Object)(object)grabbableObjectRef.parentObject != (Object)null && grabbableObjectRef.isHeld)
{
((Component)this).transform.rotation = grabbableObjectRef.parentObject.rotation;
Vector3 rotationOffset = grabbableObjectRef.itemProperties.rotationOffset;
((Component)this).transform.Rotate(rotationOffset);
((Component)this).transform.position = grabbableObjectRef.parentObject.position;
Vector3 positionOffset = grabbableObjectRef.itemProperties.positionOffset;
positionOffset = grabbableObjectRef.parentObject.rotation * positionOffset;
Transform transform = ((Component)this).transform;
transform.position += positionOffset;
}
if ((Object)(object)grabbableObjectRef.radarIcon != (Object)null)
{
grabbableObjectRef.radarIcon.position = ((Component)this).transform.position;
}
}
public bool Hit(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit = null, bool playHitSFX = false)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: 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_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
hitDir = hitDirection;
isHit = true;
if (IsHostOrServer)
{
NetworkObjectReference val = NetworkObjectReference.op_Implicit(networkObject);
FastBufferWriter val2 = default(FastBufferWriter);
((FastBufferWriter)(ref val2))..ctor(FastBufferWriter.GetWriteSize<NetworkObjectReference>(ref val, default(ForStructs)), (Allocator)2, -1);
((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref val, default(ForNetworkSerializable));
foreach (NetworkClient connectedClients in NetworkManager.Singleton.ConnectedClientsList)
{
NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage(OnCollision.CollisionCheck, connectedClients.ClientId, val2, (NetworkDelivery)3);
}
}
else if (!Plugin.Instance.ServerHasMod)
{
PlayDropSFX();
}
return true;
}
}
public class PhysicsHelper : MonoBehaviour
{
private PhysicsComponent physicsComponentRef;
private GrabbableObject grabbableObjectRef;
private Type cachedType;
public bool why = false;
private void Awake()
{
if (!((Component)this).TryGetComponent<PhysicsComponent>(ref physicsComponentRef))
{
Plugin.Logger.LogWarning((object)"Tried to add Physics Helper to an object without Physics Component. Destroying component");
Object.Destroy((Object)(object)this);
}
else
{
grabbableObjectRef = physicsComponentRef.grabbableObjectRef;
cachedType = ((object)physicsComponentRef).GetType();
}
}
private void Update()
{
if ((!grabbableObjectRef.isHeld && Plugin.Instance.physicsOnPickup.Value) || !physicsComponentRef.alreadyPickedUp)
{
return;
}
if (!physicsComponentRef.alreadyPickedUp && !physicsComponentRef.alreadyPickedUp != Plugin.Instance.physicsOnPickup.Value && physicsComponentRef.grabbableObjectRef.hasHitGround && why)
{
physicsComponentRef.alreadyPickedUp = true;
((Behaviour)physicsComponentRef).enabled = true;
why = false;
physicsComponentRef.SetRotation();
}
if (!physicsComponentRef.alreadyPickedUp)
{
return;
}
if (physicsComponentRef.rigidbody.isKinematic && !StartOfRound.Instance.shipHasLanded && !StartOfRound.Instance.inShipPhase && (physicsComponentRef.grabbableObjectRef.isInShipRoom || physicsComponentRef.grabbableObjectRef.isInElevator) && !physicsComponentRef.isPlaced)
{
if (((Behaviour)physicsComponentRef).enabled)
{
((Behaviour)physicsComponentRef).enabled = false;
}
}
else if (!((Behaviour)physicsComponentRef).enabled)
{
((Behaviour)physicsComponentRef).enabled = true;
}
}
}
}
namespace Physics_Items.ItemPhysics.Environment
{
internal class Landmine
{
[CompilerGenerated]
private static class <>O
{
public static hook_SpawnExplosion <0>__Landmine_SpawnExplosion;
}
private static Vector3 previousExplosion = Vector3.zero;
public static void Init()
{
//IL_0011: 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: Expected O, but got Unknown
object obj = <>O.<0>__Landmine_SpawnExplosion;
if (obj == null)
{
hook_SpawnExplosion val = Landmine_SpawnExplosion;
<>O.<0>__Landmine_SpawnExplosion = val;
obj = (object)val;
}
Landmine.SpawnExplosion += (hook_SpawnExplosion)obj;
}
private static void Landmine_SpawnExplosion(orig_SpawnExplosion orig, Vector3 explosionPosition, bool spawnExplosionEffect, float killRange, float damageRange)
{
//IL_0002: 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_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_002f: Unknown result type (might be due to invalid IL or missing references)
//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_0046: 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_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: 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_009e: 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)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(explosionPosition, spawnExplosionEffect, killRange, damageRange);
previousExplosion = explosionPosition;
List<Collider> list = Physics.OverlapSphere(explosionPosition, 6f, 64, (QueryTriggerInteraction)2).ToList();
for (int i = 0; i < list.Count; i++)
{
Vector3 val = explosionPosition + Vector3.up - ((Component)list[i]).transform.position;
float num = PhysicsComponent.FastInverseSqrt(((Vector3)(ref val)).sqrMagnitude);
Vector3 normalized = ((Vector3)(ref val)).normalized;
if (Physics.GetPhysicsComponent(((Component)list[i]).gameObject, out var physicsComponent))
{
physicsComponent.alreadyPickedUp = true;
physicsComponent.grabbableObjectRef.EnablePhysics(true);
physicsComponent.rigidbody.velocity = val * 80f / num;
}
}
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}