Decompiled source of MonsterLabZ v3.0.9

plugins/MonsterLabZ/MonsterLabZ.dll

Decompiled 4 months ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using CreatureManager;
using HarmonyLib;
using ItemManager;
using JetBrains.Annotations;
using LocalizationManager;
using LocationManager;
using Microsoft.CodeAnalysis;
using SoftReferenceableAssets;
using TMPro;
using UnityEngine;
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Core.Tokens;
using YamlDotNet.Helpers;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.Converters;
using YamlDotNet.Serialization.EventEmitters;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization.NodeDeserializers;
using YamlDotNet.Serialization.NodeTypeResolvers;
using YamlDotNet.Serialization.ObjectFactories;
using YamlDotNet.Serialization.ObjectGraphTraversalStrategies;
using YamlDotNet.Serialization.ObjectGraphVisitors;
using YamlDotNet.Serialization.Schemas;
using YamlDotNet.Serialization.TypeInspectors;
using YamlDotNet.Serialization.TypeResolvers;
using YamlDotNet.Serialization.Utilities;
using YamlDotNet.Serialization.ValueDeserializers;

[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: Guid("150BFDAF-FF35-4302-B7CC-BEDCE69118D5")]
[assembly: ComVisible(false)]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCopyright("Copyright ©  2022")]
[assembly: AssemblyProduct("MonsterLabZ")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyDescription("https://valheim.thunderstore.io/package/MonsterLabZ/MonsterLabZ")]
[assembly: AssemblyTitle("MonsterLabZ")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: CompilationRelaxations(8)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[<ff648590-8803-4818-8ade-4f2cde93812a>Embedded]
	internal sealed class <ff648590-8803-4818-8ade-4f2cde93812a>EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	[<ff648590-8803-4818-8ade-4f2cde93812a>Embedded]
	[CompilerGenerated]
	internal sealed class <d23ff2c1-30f6-4034-927f-9061f7d45c78>NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public <d23ff2c1-30f6-4034-927f-9061f7d45c78>NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public <d23ff2c1-30f6-4034-927f-9061f7d45c78>NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[<ff648590-8803-4818-8ade-4f2cde93812a>Embedded]
	[CompilerGenerated]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class <902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public <902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace MonsterLabz
{
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	public class DeepSeaCreature : MonoBehaviour, IWaterInteractable
	{
		public float m_height = 0.2f;

		private readonly int[] m_liquids = new int[2];

		private MonsterAI m_avoidLand;

		private Rigidbody m_body;

		private Humanoid m_canSwim;

		private Humanoid m_flying;

		private float m_inWater = 27f;

		private LiquidSurface m_liquidSurface;

		private LODGroup m_lodGroup;

		private bool m_lodVisible = true;

		private ZNetView m_nview;

		private Vector3 m_originalLocalRef;

		private float m_waterDepth;

		private WaterVolume m_waterVolume;

		private void Awake()
		{
			m_nview = ((Component)this).GetComponent<ZNetView>();
			m_body = ((Component)this).GetComponent<Rigidbody>();
			m_flying = ((Component)this).GetComponent<Humanoid>();
			m_canSwim = ((Component)this).GetComponent<Humanoid>();
			m_avoidLand = ((Component)this).GetComponent<MonsterAI>();
			m_waterVolume = WaterVolume.Instances.FirstOrDefault();
		}

		private void Start()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			m_waterDepth = m_waterVolume.Depth(((Component)this).transform.position);
		}

		public string DebugInformation(WaterVolume waterVolume)
		{
			StringBuilder stringBuilder = new StringBuilder();
			Type type = ((object)waterVolume).GetType();
			float[] array = (float[])type.GetField("m_normalizedDepth", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(waterVolume);
			stringBuilder.AppendLine($"m_normalizedDepth: {array?.Length}");
			if (array != null && array.Length != 0)
			{
				stringBuilder.AppendLine("->\tValues: " + string.Join(",", array) + "\n");
			}
			stringBuilder.AppendLine(string.Format("{0}: {1}", "m_heightmap", waterVolume.m_heightmap));
			stringBuilder.AppendLine(string.Format("{0}: {1}", "m_forceDepth", waterVolume.m_forceDepth));
			stringBuilder.AppendLine(string.Format("{0}: {1}", "m_surfaceOffset", waterVolume.m_surfaceOffset));
			stringBuilder.AppendLine(string.Format("{0}: {1}", "m_useGlobalWind", waterVolume.m_useGlobalWind));
			return stringBuilder.ToString();
		}

		private void FixedUpdate()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if ((double)m_inWater <= -10000.0 || (double)m_inWater < (double)((Component)this).transform.position.y + (double)m_height)
			{
				m_body.useGravity = true;
				((Character)m_flying).m_flying = false;
				m_avoidLand.m_avoidLand = true;
				((Character)m_canSwim).m_canSwim = true;
				if (CustomIsOutOfWater())
				{
					return;
				}
			}
			else
			{
				m_body.useGravity = false;
			}
			((Character)m_flying).m_flying = true;
			m_avoidLand.m_avoidLand = false;
			((Character)m_canSwim).m_canSwim = false;
			if ((Object)(object)m_waterVolume != (Object)null && !CustomIsOutOfWater())
			{
			}
		}

		public void SetLiquidLevel(float level, LiquidType type, Component liquidObj)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Invalid comparison between Unknown and I4
			if ((int)type == 0)
			{
				m_inWater = level;
			}
			m_liquidSurface = null;
			m_waterVolume = null;
			WaterVolume val = (WaterVolume)(object)((liquidObj is WaterVolume) ? liquidObj : null);
			if (val == null)
			{
				LiquidSurface val2 = (LiquidSurface)(object)((liquidObj is LiquidSurface) ? liquidObj : null);
				if (val2 != null)
				{
					m_liquidSurface = val2;
				}
			}
			else
			{
				m_waterVolume = val;
			}
		}

		public Transform GetTransform()
		{
			return ((Object)(object)this == (Object)null) ? null : ((Component)this).transform;
		}

		public int Increment(LiquidType type)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			return ++m_liquids[type];
		}

		public int Decrement(LiquidType type)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			return --m_liquids[type];
		}

		public bool CustomIsOutOfWater()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			return (double)m_inWater < (double)((Component)this).transform.position.y - (double)m_height;
		}

		protected void SetVisible(bool visible)
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)m_lodGroup == (Object)null) && m_lodVisible != visible)
			{
				m_lodVisible = visible;
				if (m_lodVisible)
				{
					m_lodGroup.localReferencePoint = m_originalLocalRef;
				}
				else
				{
					m_lodGroup.localReferencePoint = new Vector3(999999f, 999999f, 999999f);
				}
			}
		}
	}
}
namespace MonsterLabZ
{
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	public class Ship : MonoBehaviour
	{
		[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(0)]
		public enum Speed
		{
			Stop,
			Back,
			Slow,
			Half,
			Full
		}

		private bool m_forwardPressed;

		private bool m_backwardPressed;

		private float m_sendRudderTime;

		private Vector3 windChangeVelocity = Vector3.zero;

		private bool sailWasInPosition;

		[Header("Objects")]
		public GameObject m_sailObject;

		public GameObject m_mastObject;

		public GameObject m_rudderObject;

		public ShipControlls m_shipControlls;

		public Transform m_controlGuiPos;

		[Header("Misc")]
		public BoxCollider m_floatCollider;

		public float m_waterLevelOffset;

		public float m_forceDistance = 1f;

		public float m_force = 0.5f;

		public float m_damping = 0.05f;

		public float m_dampingSideway = 0.05f;

		public float m_dampingForward = 0.01f;

		public float m_angularDamping = 0.01f;

		public float m_disableLevel = -0.5f;

		public float m_sailForceOffset;

		public float m_sailForceFactor = 0.1f;

		public float m_rudderSpeed = 0.5f;

		public float m_stearForceOffset = -10f;

		public float m_stearForce = 0.5f;

		public float m_stearVelForceFactor = 0.1f;

		public float m_backwardForce = 50f;

		public float m_rudderRotationMax = 30f;

		public float m_rudderRotationSpeed = 30f;

		public float m_minWaterImpactForce = 2.5f;

		public float m_minWaterImpactInterval = 2f;

		public float m_waterImpactDamage = 10f;

		public float m_upsideDownDmgInterval = 1f;

		public float m_upsideDownDmg = 20f;

		public EffectList m_waterImpactEffect = new EffectList();

		private Speed m_speed;

		private float m_rudder;

		private float m_rudderValue;

		private Vector3 m_sailForce = Vector3.zero;

		private List<BaseAI> m_players = new List<BaseAI>();

		private static List<Ship> m_currentShips = new List<Ship>();

		private Rigidbody m_body;

		private ZNetView m_nview;

		private Cloth m_sailCloth;

		private float m_lastDepth = -9999f;

		private float m_lastWaterImpactTime;

		private float m_upsideDownDmgTimer;

		private float m_rudderPaddleTimer;

		private void Awake()
		{
			m_nview = ((Component)this).GetComponent<ZNetView>();
			m_body = ((Component)this).GetComponent<Rigidbody>();
			Humanoid component = ((Component)this).GetComponent<Humanoid>();
			if (Object.op_Implicit((Object)(object)component))
			{
				((Character)component).m_onDeath = (Action)Delegate.Combine(((Character)component).m_onDeath, new Action(OnDestroyed));
			}
			if (m_nview.GetZDO() == null)
			{
				((Behaviour)this).enabled = false;
			}
			m_body.maxDepenetrationVelocity = 2f;
			Heightmap.ForceGenerateAll();
			m_sailCloth = m_sailObject.GetComponentInChildren<Cloth>();
		}

		public bool CanBeRemoved()
		{
			return m_players.Count > 0;
		}

		private void Start()
		{
			m_nview.Register("Stop", (Action<long>)RPC_Stop);
			m_nview.Register("Forward", (Action<long>)RPC_Forward);
			m_nview.Register("Backward", (Action<long>)RPC_Backward);
			m_nview.Register<float>("Rudder", (Action<long, float>)RPC_Rudder);
			((MonoBehaviour)this).InvokeRepeating("UpdateOwner", 2f, 2f);
		}

		private void PrintStats()
		{
			//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)
			if (m_players.Count != 0)
			{
				Vector3 velocity = m_body.velocity;
				ZLog.Log((object)("Vel:" + ((Vector3)(ref velocity)).magnitude.ToString("0.0")));
			}
		}

		public void ApplyControlls(Vector3 dir)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			bool flag = (double)dir.z > 0.5;
			bool flag2 = (double)dir.z < -0.5;
			if (flag && !m_forwardPressed)
			{
				Forward();
			}
			if (flag2 && !m_backwardPressed)
			{
				Backward();
			}
			float fixedDeltaTime = Time.fixedDeltaTime;
			float num = Mathf.Lerp(0.5f, 1f, Mathf.Abs(m_rudderValue));
			m_rudder = dir.x * num;
			m_rudderValue += m_rudder * m_rudderSpeed * fixedDeltaTime;
			m_rudderValue = Mathf.Clamp(m_rudderValue, -1f, 1f);
			if ((double)Time.time - (double)m_sendRudderTime > 0.20000000298023224)
			{
				m_sendRudderTime = Time.time;
				m_nview.InvokeRPC("Rudder", new object[1] { m_rudderValue });
			}
			m_forwardPressed = flag;
			m_backwardPressed = flag2;
		}

		public void Forward()
		{
			m_nview.InvokeRPC("Forward", Array.Empty<object>());
		}

		public void Backward()
		{
			m_nview.InvokeRPC("Backward", Array.Empty<object>());
		}

		public void Rudder(float rudder)
		{
			((MonoBehaviour)m_nview).Invoke("Rudder", rudder);
		}

		private void RPC_Rudder(long sender, float value)
		{
			m_rudderValue = value;
		}

		public void Stop()
		{
			m_nview.InvokeRPC("Stop", Array.Empty<object>());
		}

		private void RPC_Stop(long sender)
		{
			m_speed = Speed.Stop;
		}

		private void RPC_Forward(long sender)
		{
			switch (m_speed)
			{
			case Speed.Stop:
				m_speed = Speed.Slow;
				break;
			case Speed.Back:
				m_speed = Speed.Stop;
				break;
			case Speed.Slow:
				m_speed = Speed.Half;
				break;
			case Speed.Half:
				m_speed = Speed.Full;
				break;
			}
		}

		private void RPC_Backward(long sender)
		{
			switch (m_speed)
			{
			case Speed.Stop:
				m_speed = Speed.Back;
				break;
			case Speed.Slow:
				m_speed = Speed.Stop;
				break;
			case Speed.Half:
				m_speed = Speed.Slow;
				break;
			case Speed.Full:
				m_speed = Speed.Half;
				break;
			case Speed.Back:
				break;
			}
		}

		private void FixedUpdate()
		{
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: 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_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: 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)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0240: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: 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_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0276: Unknown result type (might be due to invalid IL or missing references)
			//IL_0283: Unknown result type (might be due to invalid IL or missing references)
			//IL_028b: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_030b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0316: Unknown result type (might be due to invalid IL or missing references)
			//IL_0328: Unknown result type (might be due to invalid IL or missing references)
			//IL_032d: Unknown result type (might be due to invalid IL or missing references)
			//IL_032f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0336: Unknown result type (might be due to invalid IL or missing references)
			//IL_033e: 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_03ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0405: Unknown result type (might be due to invalid IL or missing references)
			//IL_040a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0425: Unknown result type (might be due to invalid IL or missing references)
			//IL_042a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0432: Unknown result type (might be due to invalid IL or missing references)
			//IL_0437: Unknown result type (might be due to invalid IL or missing references)
			//IL_0443: Unknown result type (might be due to invalid IL or missing references)
			//IL_0448: Unknown result type (might be due to invalid IL or missing references)
			//IL_044d: Unknown result type (might be due to invalid IL or missing references)
			//IL_048c: Unknown result type (might be due to invalid IL or missing references)
			//IL_049b: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0510: Unknown result type (might be due to invalid IL or missing references)
			//IL_0517: Unknown result type (might be due to invalid IL or missing references)
			//IL_052e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0535: Unknown result type (might be due to invalid IL or missing references)
			//IL_05be: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_05df: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0600: Unknown result type (might be due to invalid IL or missing references)
			//IL_0607: Unknown result type (might be due to invalid IL or missing references)
			//IL_060e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0613: Unknown result type (might be due to invalid IL or missing references)
			//IL_0622: Unknown result type (might be due to invalid IL or missing references)
			//IL_0629: Unknown result type (might be due to invalid IL or missing references)
			//IL_0630: Unknown result type (might be due to invalid IL or missing references)
			//IL_0635: Unknown result type (might be due to invalid IL or missing references)
			//IL_067e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0683: Unknown result type (might be due to invalid IL or missing references)
			//IL_068a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0695: Unknown result type (might be due to invalid IL or missing references)
			//IL_069a: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_06cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_06da: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_06fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0700: Unknown result type (might be due to invalid IL or missing references)
			//IL_0709: Unknown result type (might be due to invalid IL or missing references)
			//IL_070e: Unknown result type (might be due to invalid IL or missing references)
			//IL_072a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0732: Unknown result type (might be due to invalid IL or missing references)
			//IL_0737: Unknown result type (might be due to invalid IL or missing references)
			//IL_0742: Unknown result type (might be due to invalid IL or missing references)
			//IL_0758: Unknown result type (might be due to invalid IL or missing references)
			//IL_075d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0762: Unknown result type (might be due to invalid IL or missing references)
			//IL_0766: Unknown result type (might be due to invalid IL or missing references)
			//IL_076e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0779: Unknown result type (might be due to invalid IL or missing references)
			//IL_078f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0794: Unknown result type (might be due to invalid IL or missing references)
			//IL_0799: Unknown result type (might be due to invalid IL or missing references)
			//IL_0809: Unknown result type (might be due to invalid IL or missing references)
			//IL_080d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0812: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_07fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0800: Unknown result type (might be due to invalid IL or missing references)
			UpdateControlls(Time.fixedDeltaTime);
			UpdateSail(Time.fixedDeltaTime);
			if (Object.op_Implicit((Object)(object)m_nview) && !m_nview.IsOwner())
			{
				return;
			}
			UpdateUpsideDmg(Time.fixedDeltaTime);
			if (m_players.Count == 0)
			{
				m_speed = Speed.Full;
				m_rudderValue = 0f;
			}
			float num = 1f;
			Vector3 worldCenterOfMass = m_body.worldCenterOfMass;
			Vector3 val = ((Component)m_floatCollider).transform.position + ((Component)m_floatCollider).transform.forward * m_floatCollider.size.z / 2f;
			Vector3 val2 = ((Component)m_floatCollider).transform.position - ((Component)m_floatCollider).transform.forward * m_floatCollider.size.z / 2f;
			Vector3 val3 = ((Component)m_floatCollider).transform.position - ((Component)m_floatCollider).transform.right * m_floatCollider.size.x / 2f;
			Vector3 val4 = ((Component)m_floatCollider).transform.position + ((Component)m_floatCollider).transform.right * m_floatCollider.size.x / 2f;
			double num2 = Floating.GetLiquidLevel(worldCenterOfMass, num, (LiquidType)10);
			float liquidLevel = Floating.GetLiquidLevel(val3, num, (LiquidType)10);
			float liquidLevel2 = Floating.GetLiquidLevel(val4, num, (LiquidType)10);
			float liquidLevel3 = Floating.GetLiquidLevel(val, num, (LiquidType)10);
			float liquidLevel4 = Floating.GetLiquidLevel(val2, num, (LiquidType)10);
			double num3 = liquidLevel;
			float num4 = (float)((num2 + num3 + (double)liquidLevel2 + (double)liquidLevel3 + (double)liquidLevel4) / 5.0);
			float num5 = worldCenterOfMass.y - num4 - m_waterLevelOffset;
			if (!((double)num5 > (double)m_disableLevel))
			{
				m_body.WakeUp();
				UpdateWaterForce(num5, Time.fixedDeltaTime);
				Vector3 val5 = default(Vector3);
				((Vector3)(ref val5))..ctor(val3.x, liquidLevel, val3.z);
				Vector3 val6 = default(Vector3);
				((Vector3)(ref val6))..ctor(val4.x, liquidLevel2, val4.z);
				Vector3 val7 = default(Vector3);
				((Vector3)(ref val7))..ctor(val.x, liquidLevel3, val.z);
				Vector3 val8 = default(Vector3);
				((Vector3)(ref val8))..ctor(val2.x, liquidLevel4, val2.z);
				float fixedDeltaTime = Time.fixedDeltaTime;
				float num6 = fixedDeltaTime * 50f;
				float num7 = Mathf.Clamp01(Mathf.Abs(num5) / m_forceDistance);
				m_body.AddForceAtPosition(Vector3.up * m_force * num7 * num6, worldCenterOfMass, (ForceMode)2);
				float num8 = Vector3.Dot(m_body.velocity, ((Component)this).transform.forward);
				float num9 = Vector3.Dot(m_body.velocity, ((Component)this).transform.right);
				Vector3 velocity = m_body.velocity;
				float num10 = velocity.y * velocity.y * Mathf.Sign(velocity.y) * m_damping * num7;
				float num11 = num8 * num8 * Mathf.Sign(num8) * m_dampingForward * num7;
				float num12 = num9 * num9 * Mathf.Sign(num9) * m_dampingSideway * num7;
				velocity.y -= Mathf.Clamp(num10, -1f, 1f);
				Vector3 velocity2 = velocity - ((Component)this).transform.forward * Mathf.Clamp(num11, -1f, 1f) - ((Component)this).transform.right * Mathf.Clamp(num12, -1f, 1f);
				double num13 = ((Vector3)(ref velocity2)).magnitude;
				Vector3 velocity3 = m_body.velocity;
				double num14 = ((Vector3)(ref velocity3)).magnitude;
				if (num13 > num14)
				{
					Vector3 normalized = ((Vector3)(ref velocity2)).normalized;
					velocity3 = m_body.velocity;
					double num15 = ((Vector3)(ref velocity3)).magnitude;
					velocity2 = normalized * (float)num15;
				}
				if (m_players.Count < 0)
				{
					velocity2.x *= 0.1f;
					velocity2.z *= 0.1f;
				}
				m_body.velocity = velocity2;
				Rigidbody body = m_body;
				body.angularVelocity -= m_body.angularVelocity * m_angularDamping * num7;
				float num16 = 0.15f;
				float num17 = 0.5f;
				float num18 = Mathf.Clamp((val7.y - val.y) * num16, 0f - num17, num17);
				float num19 = Mathf.Clamp((val8.y - val2.y) * num16, 0f - num17, num17);
				float num20 = Mathf.Clamp((val5.y - val3.y) * num16, 0f - num17, num17);
				float num21 = Mathf.Clamp((val6.y - val4.y) * num16, 0f - num17, num17);
				float num22 = Mathf.Sign(num18) * Mathf.Abs(Mathf.Pow(num18, 2f));
				float num23 = Mathf.Sign(num19) * Mathf.Abs(Mathf.Pow(num19, 2f));
				float num24 = Mathf.Sign(num20) * Mathf.Abs(Mathf.Pow(num20, 2f));
				float num25 = Mathf.Sign(num21) * Mathf.Abs(Mathf.Pow(num21, 2f));
				m_body.AddForceAtPosition(Vector3.up * num22 * num6, val, (ForceMode)2);
				m_body.AddForceAtPosition(Vector3.up * num23 * num6, val2, (ForceMode)2);
				m_body.AddForceAtPosition(Vector3.up * num24 * num6, val3, (ForceMode)2);
				m_body.AddForceAtPosition(Vector3.up * num25 * num6, val4, (ForceMode)2);
				float sailSize = 0f;
				if (m_speed == Speed.Full)
				{
					sailSize = 1f;
				}
				else if (m_speed == Speed.Half)
				{
					sailSize = 0.5f;
				}
				m_body.AddForceAtPosition(GetSailForce(sailSize, fixedDeltaTime), worldCenterOfMass + ((Component)this).transform.up * m_sailForceOffset, (ForceMode)2);
				Vector3 val9 = ((Component)this).transform.position + ((Component)this).transform.forward * m_stearForceOffset;
				m_body.AddForceAtPosition(((Component)this).transform.right * (num8 * m_stearVelForceFactor) * (0f - m_rudderValue) * fixedDeltaTime, val9, (ForceMode)2);
				Vector3 val10 = Vector3.zero;
				switch (m_speed)
				{
				case Speed.Back:
					val10 += -((Component)this).transform.forward * m_backwardForce * (1f - Mathf.Abs(m_rudderValue));
					break;
				case Speed.Slow:
					val10 += ((Component)this).transform.forward * m_backwardForce * (1f - Mathf.Abs(m_rudderValue));
					break;
				}
				if (m_speed == Speed.Back || m_speed == Speed.Slow)
				{
					float num26 = ((m_speed == Speed.Back) ? (-1f) : 1f);
					val10 += ((Component)this).transform.right * m_stearForce * (0f - m_rudderValue) * num26;
				}
				m_body.AddForceAtPosition(val10 * fixedDeltaTime, val9, (ForceMode)2);
				ApplyEdgeForce(Time.fixedDeltaTime);
			}
		}

		private void UpdateUpsideDmg(float dt)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//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_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Expected O, but got Unknown
			if ((double)((Component)this).transform.up.y >= 0.0)
			{
				return;
			}
			m_upsideDownDmgTimer += dt;
			if (!((double)m_upsideDownDmgTimer <= (double)m_upsideDownDmgInterval))
			{
				m_upsideDownDmgTimer = 0f;
				IDestructible component = ((Component)this).GetComponent<IDestructible>();
				if (component != null)
				{
					component.Damage(new HitData
					{
						m_damage = 
						{
							m_blunt = m_upsideDownDmg
						},
						m_point = ((Component)this).transform.position,
						m_dir = Vector3.up
					});
				}
			}
		}

		private Vector3 GetSailForce(float sailSize, float dt)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: 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_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: 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)
			//IL_005a: 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_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_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			Vector3 windDir = EnvMan.instance.GetWindDir();
			float num = Mathf.Lerp(0.25f, 1f, EnvMan.instance.GetWindIntensity());
			float num2 = GetWindAngleFactor() * num;
			Vector3 forward = ((Component)this).transform.forward;
			m_sailForce = Vector3.SmoothDamp(m_sailForce, Vector3.Normalize(windDir + forward) * num2 * m_sailForceFactor * sailSize, ref windChangeVelocity, 1f, 99f);
			return m_sailForce;
		}

		public float GetWindAngleFactor()
		{
			//IL_0006: 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_0016: Unknown result type (might be due to invalid IL or missing references)
			float num = Vector3.Dot(EnvMan.instance.GetWindDir(), -((Component)this).transform.forward);
			return Mathf.Lerp(0.7f, 1f, 1f - Mathf.Abs(num)) * (1f - Utils.LerpStep(0.75f, 0.8f, num));
		}

		private void UpdateWaterForce(float depth, float dt)
		{
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Expected O, but got Unknown
			if ((double)m_lastDepth == -9999.0)
			{
				m_lastDepth = depth;
				return;
			}
			double num = (double)depth - (double)m_lastDepth;
			m_lastDepth = depth;
			double num2 = dt;
			float num3 = (float)(num / num2);
			if ((double)num3 > 0.0 || (double)Mathf.Abs(num3) <= (double)m_minWaterImpactForce || (double)Time.time - (double)m_lastWaterImpactTime <= (double)m_minWaterImpactInterval)
			{
				return;
			}
			m_lastWaterImpactTime = Time.time;
			m_waterImpactEffect.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1);
			if (m_players.Count > 0)
			{
				IDestructible component = ((Component)this).GetComponent<IDestructible>();
				if (component != null)
				{
					component.Damage(new HitData
					{
						m_damage = 
						{
							m_blunt = m_waterImpactDamage
						},
						m_point = ((Component)this).transform.position,
						m_dir = Vector3.up
					});
				}
			}
		}

		private void ApplyEdgeForce(float dt)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: 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_0058: Unknown result type (might be due to invalid IL or missing references)
			Vector3 position = ((Component)this).transform.position;
			float magnitude = ((Vector3)(ref position)).magnitude;
			float num = 10420f;
			if (!((double)magnitude <= (double)num))
			{
				m_body.AddForce(Vector3.Normalize(((Component)this).transform.position) * (Utils.LerpStep(num, 10500f, magnitude) * 8f) * dt, (ForceMode)2);
			}
		}

		private void FixTilt()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: 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_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: 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)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			float num = Mathf.Asin(((Component)this).transform.right.y);
			float num2 = Mathf.Asin(((Component)this).transform.forward.y);
			if ((double)Mathf.Abs(num) > 0.5235987901687622)
			{
				if ((double)num > 0.0)
				{
					((Component)this).transform.RotateAround(((Component)this).transform.position, ((Component)this).transform.forward, (float)((0.0 - (double)Time.fixedDeltaTime) * 20.0));
				}
				else
				{
					((Component)this).transform.RotateAround(((Component)this).transform.position, ((Component)this).transform.forward, Time.fixedDeltaTime * 20f);
				}
			}
			if (!((double)Mathf.Abs(num2) <= 0.5235987901687622))
			{
				if ((double)num2 > 0.0)
				{
					((Component)this).transform.RotateAround(((Component)this).transform.position, ((Component)this).transform.right, (float)((0.0 - (double)Time.fixedDeltaTime) * 20.0));
				}
				else
				{
					((Component)this).transform.RotateAround(((Component)this).transform.position, ((Component)this).transform.right, Time.fixedDeltaTime * 20f);
				}
			}
		}

		private void UpdateControlls(float dt)
		{
			if (m_nview.IsOwner())
			{
				m_nview.GetZDO().Set("forward", (int)m_speed);
				m_nview.GetZDO().Set("rudder", m_rudderValue);
				return;
			}
			m_speed = (Speed)m_nview.GetZDO().GetInt("forward", 0);
			if (!((double)Time.time - (double)m_sendRudderTime <= 1.0))
			{
				m_rudderValue = m_nview.GetZDO().GetFloat("rudder", 0f);
			}
		}

		public bool IsSailUp()
		{
			return m_speed == Speed.Half || m_speed == Speed.Full;
		}

		private void UpdateSail(float dt)
		{
			//IL_000e: 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_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_0033: 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_008f: 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_0095: 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_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: 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)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: 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_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			UpdateSailSize(dt);
			Vector3 val = Vector3.Cross(Vector3.Cross(EnvMan.instance.GetWindDir(), ((Component)this).transform.up), ((Component)this).transform.up);
			if (m_speed == Speed.Full || m_speed == Speed.Half)
			{
				float num = (float)(0.5 + (double)Vector3.Dot(((Component)this).transform.forward, val) * 0.5);
				m_mastObject.transform.rotation = Quaternion.RotateTowards(m_mastObject.transform.rotation, Quaternion.LookRotation(-Vector3.Lerp(val, Vector3.Normalize(val - ((Component)this).transform.forward), num), ((Component)this).transform.up), 30f * dt);
			}
			else if (m_speed == Speed.Back)
			{
				m_mastObject.transform.rotation = Quaternion.RotateTowards(m_mastObject.transform.rotation, Quaternion.RotateTowards(Quaternion.LookRotation(-((Component)this).transform.forward, ((Component)this).transform.up), Quaternion.LookRotation(-val, ((Component)this).transform.up), 80f), 30f * dt);
			}
		}

		private void UpdateRudder(float dt, bool HasPlayerOnboard)
		{
			//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_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)m_rudderObject))
			{
				return;
			}
			Quaternion val = Quaternion.Euler(0f, m_rudderRotationMax * (0f - m_rudderValue), 0f);
			if (HasPlayerOnboard)
			{
				if (m_speed == Speed.Full)
				{
					m_rudderPaddleTimer += dt;
					val *= Quaternion.Euler(0f, Mathf.Sin(m_rudderPaddleTimer * 6f) * 20f, 0f);
				}
				else if (m_speed == Speed.Back)
				{
					m_rudderPaddleTimer += dt;
					val *= Quaternion.Euler(0f, Mathf.Sin(m_rudderPaddleTimer * -3f) * 40f, 0f);
				}
			}
			m_rudderObject.transform.localRotation = Quaternion.Slerp(m_rudderObject.transform.localRotation, val, 0.5f);
		}

		private void UpdateSailSize(float dt)
		{
			//IL_0061: 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_0067: 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_00ab: Unknown result type (might be due to invalid IL or missing references)
			float num = 0f;
			switch (m_speed)
			{
			case Speed.Stop:
				num = 0.1f;
				break;
			case Speed.Back:
				num = 0.1f;
				break;
			case Speed.Slow:
				num = 0.1f;
				break;
			case Speed.Half:
				num = 0.5f;
				break;
			case Speed.Full:
				num = 1f;
				break;
			}
			Vector3 localScale = m_sailObject.transform.localScale;
			bool flag = (double)Mathf.Abs(localScale.y - num) < 0.009999999776482582;
			if (!flag)
			{
				localScale.y = Mathf.MoveTowards(localScale.y, num, dt);
				m_sailObject.transform.localScale = localScale;
			}
			if (Object.op_Implicit((Object)(object)m_sailCloth))
			{
				if (m_speed == Speed.Stop || m_speed == Speed.Slow || m_speed == Speed.Back)
				{
					if (flag && m_sailCloth.enabled)
					{
						m_sailCloth.enabled = false;
					}
				}
				else if (flag)
				{
					if (!sailWasInPosition)
					{
						m_sailCloth.enabled = false;
						m_sailCloth.enabled = true;
					}
				}
				else
				{
					m_sailCloth.enabled = true;
				}
			}
			sailWasInPosition = flag;
		}

		private void OnTriggerEnter(Collider collider)
		{
			BaseAI component = ((Component)collider).GetComponent<BaseAI>();
			if (Object.op_Implicit((Object)(object)component))
			{
				m_players.Add(component);
				if ((Object)(object)component == (Object)(object)((Component)this).gameObject.GetComponent<BaseAI>())
				{
					m_currentShips.Add(this);
				}
			}
		}

		private void OnTriggerExit(Collider collider)
		{
			BaseAI component = ((Component)collider).GetComponent<BaseAI>();
			if (Object.op_Implicit((Object)(object)component))
			{
				m_players.Remove(component);
				if ((Object)(object)component == (Object)(object)((Component)this).gameObject.GetComponent<Humanoid>())
				{
					m_currentShips.Remove(this);
				}
			}
		}

		public bool IsPlayerInBoat(BaseAI baseAI)
		{
			return m_players.Contains(baseAI);
		}

		public bool HasPlayerOnboard()
		{
			return m_players.Count > 0;
		}

		private void OnDestroyed()
		{
			if (m_nview.IsValid() && m_nview.IsOwner())
			{
				m_currentShips.Remove(this);
			}
		}

		public static Ship GetLocalShip()
		{
			return (m_currentShips.Count == 0) ? null : m_currentShips[m_currentShips.Count - 1];
		}

		public bool HaveControllingPlayer()
		{
			return m_players.Count != 0 && m_shipControlls.HaveValidUser();
		}

		public bool IsOwner()
		{
			return m_nview.IsValid() && m_nview.IsOwner();
		}

		public float GetSpeed()
		{
			//IL_0006: 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)
			return Vector3.Dot(m_body.velocity, ((Component)this).transform.forward);
		}

		public Speed GetSpeedSetting()
		{
			return m_speed;
		}

		public float GetRudder()
		{
			return m_rudder;
		}

		public float GetRudderValue()
		{
			return m_rudderValue;
		}

		public float GetShipYawAngle()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			Camera mainCamera = Utils.GetMainCamera();
			return ((Object)(object)mainCamera == (Object)null) ? 0f : (0f - Utils.YawFromDirection(((Component)mainCamera).transform.InverseTransformDirection(((Component)this).transform.forward)));
		}

		public float GetWindAngle()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			return 0f - Utils.YawFromDirection(((Component)this).transform.InverseTransformDirection(EnvMan.instance.GetWindDir()));
		}

		private void OnDrawGizmosSelected()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: 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_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: 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)
			Gizmos.color = Color.red;
			Gizmos.DrawWireSphere(((Component)this).transform.position + ((Component)this).transform.forward * m_stearForceOffset, 0.25f);
			Gizmos.color = Color.yellow;
			Gizmos.DrawWireSphere(((Component)this).transform.position + ((Component)this).transform.up * m_sailForceOffset, 0.25f);
		}
	}
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	public class AIShipEffects : MonoBehaviour
	{
		public Transform m_shadow;

		public float m_offset = 0.01f;

		public float m_minimumWakeVel = 5f;

		public GameObject m_speedWakeRoot;

		public GameObject m_wakeSoundRoot;

		public GameObject m_inWaterSoundRoot;

		public float m_audioFadeDuration = 2f;

		public AudioSource m_sailSound;

		public float m_sailFadeDuration = 1f;

		public GameObject m_splashEffects;

		private float m_sailBaseVol = 1f;

		private ParticleSystem[] m_wakeParticles;

		[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(new byte[] { 1, 0, 1 })]
		private List<KeyValuePair<AudioSource, float>> m_wakeSounds = new List<KeyValuePair<AudioSource, float>>();

		[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(new byte[] { 1, 0, 1 })]
		private List<KeyValuePair<AudioSource, float>> m_inWaterSounds = new List<KeyValuePair<AudioSource, float>>();

		private Rigidbody m_body;

		private Ship m_ship;

		private void Awake()
		{
			ZNetView componentInParent = ((Component)this).GetComponentInParent<ZNetView>();
			if (Object.op_Implicit((Object)(object)componentInParent) && componentInParent.GetZDO() == null)
			{
				((Behaviour)this).enabled = false;
				return;
			}
			m_body = ((Component)this).GetComponentInParent<Rigidbody>();
			m_ship = ((Component)this).GetComponentInParent<Ship>();
			if (Object.op_Implicit((Object)(object)m_speedWakeRoot))
			{
				m_wakeParticles = m_speedWakeRoot.GetComponentsInChildren<ParticleSystem>();
			}
			if (Object.op_Implicit((Object)(object)m_wakeSoundRoot))
			{
				AudioSource[] componentsInChildren = m_wakeSoundRoot.GetComponentsInChildren<AudioSource>();
				foreach (AudioSource val in componentsInChildren)
				{
					val.pitch = Random.Range(0.9f, 1.1f);
					m_wakeSounds.Add(new KeyValuePair<AudioSource, float>(val, val.volume));
				}
			}
			if (Object.op_Implicit((Object)(object)m_inWaterSoundRoot))
			{
				AudioSource[] componentsInChildren2 = m_inWaterSoundRoot.GetComponentsInChildren<AudioSource>();
				foreach (AudioSource val2 in componentsInChildren2)
				{
					val2.pitch = Random.Range(0.9f, 1.1f);
					m_inWaterSounds.Add(new KeyValuePair<AudioSource, float>(val2, val2.volume));
				}
			}
			if (Object.op_Implicit((Object)(object)m_sailSound))
			{
				m_sailBaseVol = m_sailSound.volume;
				m_sailSound.pitch = Random.Range(0.9f, 1.1f);
			}
		}

		private void LateUpdate()
		{
			//IL_0007: 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_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			float liquidLevel = Floating.GetLiquidLevel(((Component)this).transform.position, 1f, (LiquidType)10);
			Vector3 position = ((Component)this).transform.position;
			float deltaTime = Time.deltaTime;
			if ((double)position.y > (double)liquidLevel)
			{
				SetWake(enabled: false, deltaTime);
				FadeSounds(m_inWaterSounds, enabled: false, deltaTime);
				return;
			}
			Vector3 velocity = m_body.velocity;
			bool enabled = (double)((Vector3)(ref velocity)).magnitude > (double)m_minimumWakeVel;
			FadeSounds(m_inWaterSounds, enabled: true, deltaTime);
			SetWake(enabled, deltaTime);
			if (Object.op_Implicit((Object)(object)m_sailSound))
			{
				FadeSound(m_sailSound, m_ship.IsSailUp() ? m_sailBaseVol : 0f, m_sailFadeDuration, deltaTime);
			}
		}

		private void SetWake(bool enabled, float dt)
		{
			//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)
			ParticleSystem[] wakeParticles = m_wakeParticles;
			foreach (ParticleSystem val in wakeParticles)
			{
				EmissionModule emission = val.emission;
				((EmissionModule)(ref emission)).enabled = enabled;
			}
			FadeSounds(m_wakeSounds, enabled, dt);
		}

		private void FadeSounds([<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(new byte[] { 1, 0, 1 })] List<KeyValuePair<AudioSource, float>> sources, bool enabled, float dt)
		{
			foreach (KeyValuePair<AudioSource, float> source in sources)
			{
				if (enabled)
				{
					FadeSound(source.Key, source.Value, m_audioFadeDuration, dt);
				}
				else
				{
					FadeSound(source.Key, 0f, m_audioFadeDuration, dt);
				}
			}
		}

		private void FadeSound(AudioSource source, float target, float fadeDuration, float dt)
		{
			float num = dt / fadeDuration;
			if ((double)target > 0.0)
			{
				if (!source.isPlaying)
				{
					source.Play();
				}
				source.volume = Mathf.MoveTowards(source.volume, target, num);
			}
			else if (source.isPlaying)
			{
				source.volume = Mathf.MoveTowards(source.volume, 0f, num);
				if (!((double)source.volume > 0.0))
				{
					source.Stop();
				}
			}
		}
	}
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	public static class CommonResources
	{
		public static GameObject DwarfGoblinSpear;

		public static ItemData DwarfGoblinSpearData;

		public static void findCommonResources(ZNetScene ZNS)
		{
			DwarfGoblinSpear = ZNS.m_prefabs.Where([<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(0)] (GameObject p) => ((Object)p).name == "DwarfGoblinSpear").FirstOrDefault();
			DwarfGoblinSpearData = DwarfGoblinSpear.GetComponent<ItemDrop>().m_itemData;
		}
	}
	public class AmbienceSpawn : MonoBehaviour
	{
		private const float m_minPlayerDistance = 250f;

		private const float m_blockedMinTime = 4f;

		[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(1)]
		public GameObject m_AmbientPrefab;

		public float m_interval = 0.5f;

		private float m_lastSpawnTime;

		private float m_time;

		private void Start()
		{
			m_time = Random.Range(0f, m_interval);
		}

		private void Update()
		{
			m_time += Time.deltaTime;
			if (!((double)m_time <= (double)m_interval))
			{
				m_time = 0f;
				Spawn();
			}
		}

		private void Spawn()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: 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)
			Player localPlayer = Player.m_localPlayer;
			if ((Object)(object)localPlayer == (Object)null || (double)Vector3.Distance(((Component)localPlayer).transform.position, ((Component)this).transform.position) > 250.0)
			{
				m_lastSpawnTime = Time.time;
				return;
			}
			Object.Instantiate<GameObject>(m_AmbientPrefab, ((Component)this).transform.position, ((Component)this).transform.rotation);
			m_lastSpawnTime = Time.time;
		}
	}
	public class BillboardMove : MonoBehaviour
	{
		public float scrollSpeed = 0.5f;

		[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(1)]
		public Renderer rend;

		private void Start()
		{
			rend = ((Component)this).GetComponent<Renderer>();
		}

		private void Update()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			float num = Time.time * scrollSpeed;
			rend.material.SetTextureOffset("_MainTex", new Vector2(num, 0f));
		}
	}
	public class RotateTor : MonoBehaviour
	{
		public float TorRotationSpeed;

		private void Update()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: 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_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: 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_0053: 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)
			Quaternion val = Quaternion.AngleAxis(TorRotationSpeed * Time.deltaTime, Vector3.down);
			Quaternion val2 = Quaternion.AngleAxis(TorRotationSpeed * Time.deltaTime, Vector3.down);
			Transform transform = ((Component)this).transform;
			transform.rotation *= val;
			Transform transform2 = ((Component)this).transform;
			transform2.rotation *= val2;
		}
	}
	public class RotateTor1 : MonoBehaviour
	{
		public float TorRotationSpeed;

		private void Update()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: 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_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: 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_0053: 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)
			Quaternion val = Quaternion.AngleAxis(TorRotationSpeed * Time.deltaTime, Vector3.down);
			Quaternion val2 = Quaternion.AngleAxis(TorRotationSpeed * Time.deltaTime, Vector3.down);
			Transform transform = ((Component)this).transform;
			transform.rotation *= val;
			Transform transform2 = ((Component)this).transform;
			transform2.rotation *= val2;
		}
	}
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	public class SetTextureOffset : MonoBehaviour
	{
		public Vector2 offsetValue;

		public Renderer rend;

		private void Start()
		{
			rend = ((Component)this).GetComponent<Renderer>();
			((MonoBehaviour)this).StartCoroutine(MoveTheTexture());
		}

		private IEnumerator MoveTheTexture()
		{
			while (true)
			{
				yield return (object)new WaitForSeconds(5f);
				offsetValue = rend.material.GetTextureOffset("_MainTex");
				offsetValue.y += 1f / 3f;
				rend.material.SetTextureOffset("_MainTex", new Vector2(offsetValue.x, offsetValue.y));
			}
		}
	}
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	public class TorGravity : MonoBehaviour
	{
		public float ForceGN;

		public float BodyKf;

		private HashSet<Rigidbody> affectedBod = new HashSet<Rigidbody>();

		private Rigidbody componRigidbody;

		private void Start()
		{
			componRigidbody = ((Component)this).GetComponent<Rigidbody>();
		}

		private void OnTriggerEnter(Collider other)
		{
			if ((Object)(object)other.attachedRigidbody != (Object)null)
			{
				affectedBod.Add(other.attachedRigidbody);
			}
		}

		private void OnTriggerExit(Collider other)
		{
			if ((Object)(object)other.attachedRigidbody != (Object)null)
			{
				affectedBod.Remove(other.attachedRigidbody);
			}
		}

		private void FixedUpdate()
		{
			//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)
			//IL_002a: 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_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			foreach (Rigidbody item in affectedBod)
			{
				Vector3 val = ((Component)this).transform.position - item.position;
				Vector3 val2 = ((Component)this).transform.position - item.position;
				float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude;
				float num = ForceGN * (item.mass - componRigidbody.mass) / sqrMagnitude;
				item.AddForce(val * num * BodyKf);
			}
		}
	}
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	public class TornadoGravity : MonoBehaviour
	{
		public float ForceG;

		public float BodyKoeff;

		public float OrbitSpeed;

		private HashSet<Rigidbody> affectedBodies = new HashSet<Rigidbody>();

		private Rigidbody componentRigidbody;

		private void Start()
		{
			componentRigidbody = ((Component)this).GetComponent<Rigidbody>();
		}

		private void OnTriggerEnter(Collider other)
		{
			if ((Object)(object)other.attachedRigidbody != (Object)null)
			{
				affectedBodies.Add(other.attachedRigidbody);
			}
		}

		private void OnTriggerExit(Collider other)
		{
			if ((Object)(object)other.attachedRigidbody != (Object)null)
			{
				affectedBodies.Remove(other.attachedRigidbody);
			}
		}

		private void FixedUpdate()
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: 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_009b: 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)
			foreach (Rigidbody affectedBody in affectedBodies)
			{
				Vector3 val = ((Component)this).transform.position - affectedBody.position;
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				val = ((Component)this).transform.position - affectedBody.position;
				float magnitude = ((Vector3)(ref val)).magnitude;
				float num = ForceG * affectedBody.mass * componentRigidbody.mass / (magnitude * magnitude);
				affectedBody.AddForce(normalized * num * BodyKoeff);
				((Component)affectedBody).transform.RotateAround(Vector3.zero, Vector3.down, 10f * OrbitSpeed * 120f);
			}
		}
	}
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	public class WaterSafing : MonoBehaviour
	{
		public float power;

		private void Start()
		{
		}

		private void Update()
		{
		}

		private void OnTriggerStay(Collider col)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			if (((Component)col).tag == "Physical")
			{
				((Component)col).GetComponent<Rigidbody>().AddForce(((Component)this).transform.up * power);
			}
			if (((Component)col).tag == "Player")
			{
				if (Input.GetKey((KeyCode)32))
				{
					((Component)col).GetComponent<CharacterController>().skinWidth = 3f;
				}
				else
				{
					((Component)col).GetComponent<CharacterController>().skinWidth = 0.08f;
				}
			}
		}

		private void OnTriggerExit(Collider col)
		{
			if (((Component)col).tag == "Player")
			{
				((Component)col).GetComponent<CharacterController>().skinWidth = 0.08f;
			}
		}
	}
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	public class ML_PlantGrow : SlowUpdate, Hoverable
	{
		[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(0)]
		private enum Status
		{
			Healthy
		}

		public string m_name = "Plant";

		public float m_growTime = 10f;

		public float m_growTimeMax = 2000f;

		public GameObject[] m_grownPrefabs = (GameObject[])(object)new GameObject[0];

		public float m_minScale = 1f;

		public float m_maxScale = 1f;

		public float m_growRadius = 1f;

		public bool m_destroyIfCantGrow;

		[SerializeField]
		private GameObject m_healthy;

		[SerializeField]
		private GameObject m_healthyGrown;

		public EffectList m_growEffect = new EffectList();

		private Status m_status;

		private ZNetView m_nview;

		private float m_updateTime;

		private float m_spawnTime;

		private static int m_spaceMask;

		private static int m_roofMask;

		public override void Awake()
		{
			((SlowUpdate)this).Awake();
			m_nview = ((Component)this).gameObject.GetComponent<ZNetView>();
			if (m_nview.GetZDO() != null)
			{
				if (m_nview.IsOwner() && m_nview.GetZDO().GetLong("plantTime", 0L) == 0)
				{
					m_nview.GetZDO().Set("plantTime", ZNet.instance.GetTime().Ticks);
				}
				m_spawnTime = Time.time;
			}
		}

		public string GetHoverText()
		{
			//IL_0002: 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_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			Status status = m_status;
			Status val = status;
			if ((int)val == 0)
			{
				return Localization.instance.Localize(m_name + " ( $piece_plant_healthy )");
			}
			return "";
		}

		public string GetHoverName()
		{
			return Localization.instance.Localize(m_name);
		}

		private double TimeSincePlanted()
		{
			DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("plantTime", ZNet.instance.GetTime().Ticks));
			return (ZNet.instance.GetTime() - dateTime).TotalSeconds;
		}

		public override void SUpdate()
		{
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Invalid comparison between Unknown and I4
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Invalid comparison between Unknown and I4
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Invalid comparison between Unknown and I4
			if (m_nview.IsValid() && !((double)Time.time - (double)m_updateTime < 10.0))
			{
				m_updateTime = Time.time;
				double num = TimeSincePlanted();
				UpdateHealth(num);
				float growTime = GetGrowTime();
				if (Object.op_Implicit((Object)(object)m_healthyGrown))
				{
					bool flag = num > (double)growTime * 0.5;
					m_healthy.SetActive(!flag && (int)m_status == 0);
					m_healthyGrown.SetActive(flag && (int)m_status == 0);
				}
				else
				{
					m_healthy.SetActive((int)m_status == 0);
				}
				if (m_nview.IsOwner() && !((double)Time.time - (double)m_spawnTime <= 10.0) && !(num <= (double)growTime))
				{
					Grow();
				}
			}
		}

		private float GetGrowTime()
		{
			//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_000d: Unknown result type (might be due to invalid IL or missing references)
			State state = Random.state;
			float value = Random.value;
			Random.state = state;
			return Mathf.Lerp(m_growTime, m_growTimeMax, value);
		}

		private void Grow()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Invalid comparison between Unknown and I4
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			if ((int)m_status > 0)
			{
				if (m_destroyIfCantGrow)
				{
					Destroy();
				}
				return;
			}
			GameObject val = m_grownPrefabs[Random.Range(0, m_grownPrefabs.Length)];
			Quaternion val2 = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f);
			Vector3 position = ((Component)this).transform.position;
			Quaternion val3 = val2;
			GameObject val4 = Object.Instantiate<GameObject>(val, position, val3);
			ZNetView component = val4.GetComponent<ZNetView>();
			float num = Random.Range(m_minScale, m_maxScale);
			Vector3 localScale = default(Vector3);
			((Vector3)(ref localScale))..ctor(num, num, num);
			component.SetLocalScale(localScale);
			TreeBase component2 = val4.GetComponent<TreeBase>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				component2.Grow();
			}
			m_nview.Destroy();
			m_growEffect.Create(((Component)this).transform.position, val2, (Transform)null, num, -1);
		}

		private void UpdateHealth(double timeSincePlanted)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			if (timeSincePlanted < 10.0)
			{
				m_status = (Status)0;
			}
		}

		private void Destroy()
		{
			//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_002d: Expected O, but got Unknown
			IDestructible component = ((Component)this).GetComponent<IDestructible>();
			if (component != null)
			{
				component.Damage(new HitData
				{
					m_damage = 
					{
						m_damage = 9999f
					}
				});
			}
		}

		private Status GetStatus()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return m_status;
		}
	}
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	public class HitAreaSFX : MonoBehaviour, IDestructible
	{
		public Action<HitData, HitAreaSFX> m_onHit;

		public float m_health = 100000f;

		[NonSerialized]
		public GameObject m_parentObject;

		public float m_hitNoise;

		public EffectList m_hitEffect = new EffectList();

		public DestructibleType GetDestructibleType()
		{
			return (DestructibleType)1;
		}

		public void Damage(HitData hit)
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			float totalDamage = hit.GetTotalDamage();
			if ((double)totalDamage <= 0.0)
			{
				return;
			}
			m_hitEffect.Create(hit.m_point, Quaternion.identity, ((Component)this).transform, 1f, -1);
			if ((double)m_hitNoise > 0.0)
			{
				Player closestPlayer = Player.GetClosestPlayer(hit.m_point, 10f);
				if (Object.op_Implicit((Object)(object)closestPlayer))
				{
					((Character)closestPlayer).AddNoise(m_hitNoise);
				}
			}
			if (m_onHit != null)
			{
				m_onHit(hit, this);
			}
		}
	}
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	public class InstantiatePrefabBoatKinematic : MonoBehaviour
	{
		public List<GameObject> m_spawnPrefab;

		private List<GameObject> m_spawnedMobs = new List<GameObject>();

		public bool m_attach;

		public bool m_moveToTop;

		public void Start()
		{
			//IL_0025: 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)
			foreach (GameObject item in m_spawnPrefab)
			{
				GameObject val = Object.Instantiate<GameObject>(item, ((Component)((Component)this).transform).transform.position, ((Component)((Component)this).transform).transform.rotation);
				val.transform.SetParent(((Component)this).transform, true);
				m_spawnedMobs.Add(val);
			}
		}

		public void OnDestroy()
		{
			foreach (GameObject spawnedMob in m_spawnedMobs)
			{
				if ((Object)(object)spawnedMob != (Object)null)
				{
					spawnedMob.transform.parent = null;
					spawnedMob.GetComponent<Rigidbody>().isKinematic = false;
				}
			}
		}
	}
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	public class InstantiatePrefabBoat : MonoBehaviour
	{
		public List<GameObject> m_spawnPrefab;

		private List<GameObject> m_spawnedMobs = new List<GameObject>();

		public bool m_attach;

		public bool m_moveToTop;

		public void Start()
		{
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			ZLog.Log((object)(((object)this).GetType().Name + "." + MethodBase.GetCurrentMethod().Name + "()"));
			foreach (GameObject item in m_spawnPrefab)
			{
				ZLog.Log((object)("[" + ((object)this).GetType().Name + "] Spawning " + ((Object)item).name));
				GameObject val = Object.Instantiate<GameObject>(item, ((Component)((Component)this).transform).transform.position, ((Component)((Component)this).transform).transform.rotation);
				val.transform.SetParent(((Component)this).transform, true);
				m_spawnedMobs.Add(val);
			}
		}

		public void OnDestroy()
		{
			ZLog.Log((object)(((object)this).GetType().Name + "." + MethodBase.GetCurrentMethod().Name + "()"));
			foreach (GameObject spawnedMob in m_spawnedMobs)
			{
				if ((Object)(object)spawnedMob != (Object)null)
				{
					ZLog.Log((object)("[" + ((object)this).GetType().Name + "] Reparent " + ((Object)spawnedMob).name));
					spawnedMob.transform.parent = null;
				}
			}
		}
	}
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	public class InstantiatePrefabSpawn : MonoBehaviour
	{
		public List<GameObject> m_spawnPrefab;

		private List<GameObject> m_spawnedMobs = new List<GameObject>();

		public bool m_attach;

		public bool m_moveToTop;

		public void Start()
		{
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			ZLog.Log((object)(((object)this).GetType().Name + "." + MethodBase.GetCurrentMethod().Name + "()"));
			foreach (GameObject item in m_spawnPrefab)
			{
				ZLog.Log((object)("[" + ((object)this).GetType().Name + "] Spawning " + ((Object)item).name));
				GameObject val = Object.Instantiate<GameObject>(item, ((Component)((Component)this).transform).transform.position, ((Component)((Component)this).transform).transform.rotation);
				val.transform.SetParent(((Component)this).transform, true);
				val.layer = 17;
				m_spawnedMobs.Add(val);
			}
		}

		public void OnDestroy()
		{
			ZLog.Log((object)(((object)this).GetType().Name + "." + MethodBase.GetCurrentMethod().Name + "()"));
			foreach (GameObject spawnedMob in m_spawnedMobs)
			{
				if ((Object)(object)spawnedMob != (Object)null)
				{
					ZLog.Log((object)("[" + ((object)this).GetType().Name + "] Reparent " + ((Object)spawnedMob).name));
					spawnedMob.transform.parent = null;
					spawnedMob.GetComponent<Rigidbody>().isKinematic = false;
					spawnedMob.layer = 9;
					Humanoid component = spawnedMob.GetComponent<Humanoid>();
					if ((Object)(object)component != (Object)null)
					{
						component.m_rightItem = CommonResources.DwarfGoblinSpearData;
						component.m_inventory.m_inventory[0] = CommonResources.DwarfGoblinSpearData;
						((Character)component).m_turnSpeed = 300f;
						((Character)component).m_runTurnSpeed = 100f;
					}
				}
			}
		}
	}
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	public class InstantiatePrefabLoxRider : MonoBehaviour
	{
		public List<GameObject> m_spawnPrefab;

		private List<GameObject> m_spawnedMobs = new List<GameObject>();

		public bool m_attach;

		public bool m_moveToTop;

		public void Start()
		{
			//IL_0025: 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)
			foreach (GameObject item in m_spawnPrefab)
			{
				GameObject val = Object.Instantiate<GameObject>(item, ((Component)((Component)this).transform).transform.position, ((Component)((Component)this).transform).transform.rotation);
				val.transform.SetParent(((Component)this).transform, true);
				val.layer = 17;
				m_spawnedMobs.Add(val);
			}
		}

		public void OnDestroy()
		{
			foreach (GameObject spawnedMob in m_spawnedMobs)
			{
				if ((Object)(object)spawnedMob != (Object)null)
				{
					spawnedMob.transform.parent = null;
					spawnedMob.GetComponent<Rigidbody>().isKinematic = false;
					spawnedMob.layer = 9;
					Humanoid component = spawnedMob.GetComponent<Humanoid>();
					if ((Object)(object)component != (Object)null)
					{
						component.m_rightItem = CommonResources.DwarfGoblinSpearData;
						component.m_inventory.m_inventory[0] = CommonResources.DwarfGoblinSpearData;
						((Character)component).m_turnSpeed = 300f;
						((Character)component).m_runTurnSpeed = 100f;
					}
				}
			}
		}
	}
	public static class ML_Sword_Frigga
	{
		public static void init()
		{
			Item item = new Item("dybassets", "ML_Sword_Frigga_1");
			item.Configurable = Configurability.Disabled;
			Item item2 = new Item("dybassets", "ML_Sword_Spider_L_1");
			item2.Configurable = Configurability.Disabled;
			Item item3 = new Item("dybassets", "ML_Sword_Spider_R_1");
			item3.Configurable = Configurability.Disabled;
			GameObject val = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_Spider_1");
			GameObject val2 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_Spawn_1");
			GameObject val3 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_SpawnP_1");
			Item item4 = new Item("dybassets", "ML_Sword_Frigga_2");
			item4.Configurable = Configurability.Disabled;
			Item item5 = new Item("dybassets", "ML_Sword_Spider_L_2");
			item5.Configurable = Configurability.Disabled;
			Item item6 = new Item("dybassets", "ML_Sword_Spider_R_2");
			item6.Configurable = Configurability.Disabled;
			GameObject val4 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_Spider_2");
			GameObject val5 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_Spawn_2");
			GameObject val6 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_SpawnP_2");
			Item item7 = new Item("dybassets", "ML_Sword_Frigga_3_Cold");
			item7.Configurable = Configurability.Disabled;
			Item item8 = new Item("dybassets", "ML_Sword_Spider_L_3_Cold");
			item8.Configurable = Configurability.Disabled;
			Item item9 = new Item("dybassets", "ML_Sword_Spider_R_3_Cold");
			item9.Configurable = Configurability.Disabled;
			GameObject val7 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_Spider_3_Cold");
			GameObject val8 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_Spawn_3_Cold");
			GameObject val9 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_SpawnP_3_Cold");
			Item item10 = new Item("dybassets", "ML_Sword_Frigga_3_Fire");
			item10.Configurable = Configurability.Disabled;
			Item item11 = new Item("dybassets", "ML_Sword_Spider_L_3_Fire");
			item11.Configurable = Configurability.Disabled;
			Item item12 = new Item("dybassets", "ML_Sword_Spider_R_3_Fire");
			item12.Configurable = Configurability.Disabled;
			GameObject val10 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_Spider_3_Fire");
			GameObject val11 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_Spawn_3_Fire");
			GameObject val12 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_SpawnP_3_Fire");
			Item item13 = new Item("dybassets", "ML_Sword_Frigga_3_Light");
			item13.Configurable = Configurability.Disabled;
			Item item14 = new Item("dybassets", "ML_Sword_Spider_L_3_Light");
			item14.Configurable = Configurability.Disabled;
			Item item15 = new Item("dybassets", "ML_Sword_Spider_R_3_Light");
			item15.Configurable = Configurability.Disabled;
			GameObject val13 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_Spider_3_Light");
			GameObject val14 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_Spawn_3_Light");
			GameObject val15 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ML_Sword_Frigga_SpawnP_3_Light");
			GameObject val16 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "vfx_ml_spawn");
			GameObject val17 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "vfx_ml_despawn");
		}
	}
	public class OceanLocations
	{
		internal static void LocationsAwake()
		{
			//IL_002a: 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_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			new Location("dybassets", "ML_ShipWreck02")
			{
				MapIcon = "bossicon.png",
				ShowMapIcon = ShowIcon.Never,
				SpawnArea = (BiomeArea)2,
				Biome = (Biome)256,
				SpawnDistance = new LocationManager.Range(50f, 10000f),
				SpawnAltitude = new LocationManager.Range(-1000f, -20f),
				MinimumDistanceFromGroup = 1000f,
				Count = 10,
				Unique = false
			};
			new Location("dybassets", "ML_ShipWreck03")
			{
				MapIcon = "bossicon.png",
				ShowMapIcon = ShowIcon.Never,
				SpawnArea = (BiomeArea)2,
				Biome = (Biome)256,
				SpawnDistance = new LocationManager.Range(50f, 10000f),
				SpawnAltitude = new LocationManager.Range(-1000f, -20f),
				MinimumDistanceFromGroup = 1000f,
				Count = 10,
				Unique = false
			};
			new Location("dybassets", "Balder_Altar")
			{
				Prioritize = true,
				MapIcon = "bossicon.png",
				ShowMapIcon = ShowIcon.Never,
				SpawnArea = (BiomeArea)2,
				Biome = (Biome)256,
				SpawnDistance = new LocationManager.Range(200f, 3000f),
				SpawnAltitude = new LocationManager.Range(-1000f, -25f),
				MinimumDistanceFromGroup = 1000f,
				Count = 1,
				Unique = false
			};
		}
	}
	public class Locations
	{
		internal static void LocationsAwake()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			new Location("dybassets", "AshHuldraQueen_Altar")
			{
				Prioritize = true,
				MapIcon = "bossicon.png",
				ShowMapIcon = ShowIcon.Never,
				Biome = (Biome)32,
				SpawnArea = (BiomeArea)2,
				SpawnDistance = new LocationManager.Range(50f, 10000f),
				SpawnAltitude = new LocationManager.Range(5f, 1000f),
				MinimumDistanceFromGroup = 2000f,
				Count = 1,
				Unique = false
			};
			new Location("dybassets", "AshlandsCave_01")
			{
				Prioritize = true,
				MapIcon = "bossicon.png",
				ShowMapIcon = ShowIcon.Never,
				Biome = (Biome)32,
				SpawnDistance = new LocationManager.Range(500f, 10000f),
				SpawnAltitude = new LocationManager.Range(20f, 1000f),
				MinimumDistanceFromGroup = 2000f,
				Count = 7,
				Unique = false
			};
			new Location("dybassets", "AshlandsCave_02")
			{
				Prioritize = true,
				MapIcon = "bossicon.png",
				ShowMapIcon = ShowIcon.Never,
				Biome = (Biome)32,
				SpawnDistance = new LocationManager.Range(500f, 10000f),
				SpawnAltitude = new LocationManager.Range(20f, 1000f),
				MinimumDistanceFromGroup = 2000f,
				Count = 7,
				Unique = false
			};
			new Location("dybassets", "SpiderCave01")
			{
				Prioritize = true,
				MapIcon = "bossicon.png",
				ShowMapIcon = ShowIcon.Never,
				Biome = (Biome)8,
				SpawnArea = (BiomeArea)3,
				SpawnDistance = new LocationManager.Range(500f, 1000f),
				SpawnAltitude = new LocationManager.Range(5f, 1000f),
				MinimumDistanceFromGroup = 3000f,
				Count = 1,
				Unique = false
			};
			new Location("dybassets", "Mystical_Well0")
			{
				Prioritize = true,
				MapIcon = "ML_Hammer_Icon.png",
				ShowMapIcon = ShowIcon.Always,
				Biome = (Biome)1,
				SpawnDistance = new LocationManager.Range(100f, 500f),
				SpawnAltitude = new LocationManager.Range(10f, 1000f),
				MinimumDistanceFromGroup = 3000f,
				Count = 1,
				Unique = false
			};
		}
	}
	[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
	[BepInPlugin("MonsterLabZ", "MonsterLabZ", "3.0.9")]
	[<d23ff2c1-30f6-4034-927f-9061f7d45c78>Nullable(0)]
	public class MonsterLabZ : BaseUnityPlugin
	{
		[HarmonyPatch(typeof(ZNetScene), "Awake")]
		[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(0)]
		private static class ZNetScene_Awake_PostPatch
		{
			[<902d42e0-15f1-4173-907f-c4d9b087bf55>NullableContext(1)]
			public static void Postfix(ZNetScene __instance)
			{
				if (!((Object)(object)__instance == (Object)null) && !fixedReferences)
				{
					ShaderSwapper.GatherCustomShaders(ref __instance);
					List<GameObject> prefabList = new List<GameObject>();
					GameObject[] array = __instance.m_prefabs.Where((GameObject p) => ((Object)p).name.StartsWith("ML_")).ToArray();
					if (array != null && array.Length != 0)
					{
						prefabList.AddRange(array);
					}
					array = __instance.m_prefabs.Where((GameObject p) => ((Object)p).name.StartsWith("MLNPC")).ToArray();
					if (array != null && array.Length != 0)
					{
						prefabList.AddRange(array);
					}
					if (prefabList.Count > 0)
					{
						ShaderSwapper.FixCustomShaders(ref prefabList);
					}
					CommonResources.findCommonResources(__instance);
					fixedReferences = true;
				}
			}
		}

		private const string ModName = "MonsterLabZ";

		private const string ModVersion = "3.0.9";

		private const string ModGUID = "MonsterLabZ";

		public static ManualLogSource Log;

		private static bool fixedReferences;

		public void Awake()
		{
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Expected O, but got Unknown
			Localizer.Load();
			Locations.LocationsAwake();
			OceanLocations.LocationsAwake();
			ML_DebugMonsters.init();
			ML_NaturalDisasters.init();
			NPC_Items.init();
			Butterfly.init();
			DeepSea_Serpent.init();
			EvilShadow.init();
			FireGolem.init();
			NormalGhostWarrior.init();
			DwarfGoblin.init();
			GoblinShip.init();
			DraugrShip.init();
			IceGolem.init();
			Kraken.init();
			Molluscan.init();
			NightmareDragon.init();
			NormalSkeleton.init();
			FireSkeleton.init();
			IceSkeleton.init();
			PoisonSkeleton.init();
			Frigga.init();
			Svartalfar.init();
			Succubus.init();
			Surtr.init();
			WraithWarrior.init();
			Spiders.init();
			ObsidianGolem.init();
			ML_Surtling.init();
			NPC_Female.init();
			NPC_Male.init();
			Greydwarf.init();
			ChaosSkeleton.init();
			ML_CustomProps.init();
			ML_Sword_Frigga.init();
			ML_Mistile.init();
			ML_Tentaroot.init();
			ML_Hatchlings.init();
			ML_JellyFish.init();
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			Harmony val = new Harmony("MonsterLabZ");
			val.PatchAll(executingAssembly);
		}
	}
	public static class NormalGhostWarrior
	{
		public static void init()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			Creature creature = new Creature("dybassets", "NormalGhostWarrior")
			{
				Biome = (Biome)0
			};
			creature.ConfigurationEnabled = false;
			creature.Drops["Ruby"].Amount = new CreatureManager.Range(1f, 1f);
			creature.Drops["Ruby"].DropChance = 100f;
			creature.Drops["Ruby"].DropOnePerPlayer = false;
			creature.Drops["Ruby"].MultiplyDropByLevel = false;
			GameObject val = ItemManager.PrefabManager.RegisterPrefab("dybassets", "GhostWarrior");
			Item item = new Item("dybassets", "ghost_poisonball");
			item.Configurable = Configurability.Disabled;
			GameObject val2 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "sfx_ghost_poison_explode");
			GameObject val3 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "sfx_ghost_poison_start");
			GameObject val4 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "vfx_ghostpoison_hit");
			GameObject val5 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "vfx_ghost_poison_explosion");
			GameObject val6 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "ghost_poisonball_projectile");
		}
	}
	public static class DwarfGoblin
	{
		public static void init()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
			Creature creature = new Creature("dybassets", "DwarfGoblin")
			{
				Biome = (Biome)16,
				SpecificSpawnArea = SpawnArea.Everywhere,
				RequiredAltitude = new CreatureManager.Range(1f, 1000f),
				CheckSpawnInterval = 300,
				SpawnChance = 25f,
				GroupSize = new CreatureManager.Range(4f, 5f),
				Maximum = 8,
				SpecificSpawnTime = SpawnTime.Always
			};
			creature.Drops["Coins"].Amount = new CreatureManager.Range(3f, 5f);
			creature.Drops["Coins"].DropChance = 100f;
			creature.Drops["Coins"].DropOnePerPlayer = false;
			creature.Drops["Coins"].MultiplyDropByLevel = true;
			Creature creature2 = new Creature("dybassets", "DwarfGoblinLoot")
			{
				Biome = (Biome)16,
				SpecificSpawnArea = SpawnArea.Everywhere,
				RequiredAltitude = new CreatureManager.Range(1f, 1000f),
				CheckSpawnInterval = 300,
				SpawnChance = 5f,
				GroupSize = new CreatureManager.Range(1f, 1f),
				Maximum = 2,
				SpecificSpawnTime = SpawnTime.Day
			};
			creature2.Drops["Coins"].Amount = new CreatureManager.Range(5f, 8f);
			creature2.Drops["Coins"].DropChance = 100f;
			creature2.Drops["Coins"].DropOnePerPlayer = false;
			creature2.Drops["Coins"].MultiplyDropByLevel = true;
			creature2.Drops["Amber"].Amount = new CreatureManager.Range(2f, 4f);
			creature2.Drops["Amber"].DropChance = 100f;
			creature2.Drops["Amber"].DropOnePerPlayer = false;
			creature2.Drops["Amber"].MultiplyDropByLevel = true;
			creature2.Drops["Ruby"].Amount = new CreatureManager.Range(1f, 3f);
			creature2.Drops["Ruby"].DropChance = 100f;
			creature2.Drops["Ruby"].DropOnePerPlayer = false;
			creature2.Drops["Ruby"].MultiplyDropByLevel = true;
			Creature creature3 = new Creature("dybassets", "DwarfGoblinShaman")
			{
				Biome = (Biome)16,
				SpecificSpawnArea = SpawnArea.Everywhere,
				RequiredAltitude = new CreatureManager.Range(1f, 1000f),
				CheckSpawnInterval = 450,
				SpawnChance = 10f,
				GroupSize = new CreatureManager.Range(1f, 2f),
				Maximum = 2,
				SpecificSpawnTime = SpawnTime.Always
			};
			creature3.Drops["Coins"].Amount = new CreatureManager.Range(4f, 6f);
			creature3.Drops["Coins"].DropChance = 100f;
			creature3.Drops["Coins"].DropOnePerPlayer = false;
			creature3.Drops["Coins"].MultiplyDropByLevel = true;
			GameObject val = ItemManager.PrefabManager.RegisterPrefab("dybassets", "DwarfGoblin_ragdoll");
			GameObject val2 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "DwarfGoblinLoot_ragdoll");
			GameObject val3 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "DwarfGoblinShaman_ragdoll");
			Item item = new Item("dybassets", "DwarfGoblinBow");
			item.Configurable = Configurability.Disabled;
			Item item2 = new Item("dybassets", "DwarfGoblinPickAxe");
			item2.Configurable = Configurability.Disabled;
			Item item3 = new Item("dybassets", "DwarfGoblinClub");
			item3.Configurable = Configurability.Disabled;
			Item item4 = new Item("dybassets", "DwarfGoblinSword");
			item4.Configurable = Configurability.Disabled;
			Item item5 = new Item("dybassets", "DwarfGoblinTorch");
			item5.Configurable = Configurability.Disabled;
			Item item6 = new Item("dybassets", "DwarfGoblinShieldBlackMetal");
			item6.Configurable = Configurability.Disabled;
			Item item7 = new Item("dybassets", "DwarfGoblinShieldWood");
			item7.Configurable = Configurability.Disabled;
			Item item8 = new Item("dybassets", "DwarfGoblinArmBandFeathers");
			item8.Configurable = Configurability.Disabled;
			Item item9 = new Item("dybassets", "DwarfGoblinArmBandIron");
			item9.Configurable = Configurability.Disabled;
			Item item10 = new Item("dybassets", "DwarfGoblinArmorBronze");
			item10.Configurable = Configurability.Disabled;
			Item item11 = new Item("dybassets", "DwarfGoblinArmorFeathers");
			item11.Configurable = Configurability.Disabled;
			Item item12 = new Item("dybassets", "DwarfGoblinArmorIron");
			item12.Configurable = Configurability.Disabled;
			Item item13 = new Item("dybassets", "DwarfGoblinArmorLeather");
			item13.Configurable = Configurability.Disabled;
			Item item14 = new Item("dybassets", "DwarfGoblinHelmetBronze");
			item14.Configurable = Configurability.Disabled;
			Item item15 = new Item("dybassets", "DwarfGoblinHelmetLeather");
			item15.Configurable = Configurability.Disabled;
			Item item16 = new Item("dybassets", "DwarfGoblinHelmetSkull");
			item16.Configurable = Configurability.Disabled;
			Item item17 = new Item("dybassets", "DwarfGoblinShamanStaffBones");
			item17.Configurable = Configurability.Disabled;
			Item item18 = new Item("dybassets", "DwarfGoblinShamanStaffFeathers");
			item18.Configurable = Configurability.Disabled;
			Item item19 = new Item("dybassets", "DwarfGoblinShoulderPadIron");
			item19.Configurable = Configurability.Disabled;
			Item item20 = new Item("dybassets", "DwarfGoblinShoulderPadLeather");
			item20.Configurable = Configurability.Disabled;
			Item item21 = new Item("dybassets", "DwarfGoblinSpear");
			item21.Configurable = Configurability.Disabled;
			Item item22 = new Item("dybassets", "DwarfGoblinSpearLox");
			item22.Configurable = Configurability.Disabled;
			Item item23 = new Item("dybassets", "DwarfGoblinSpearChitin");
			item23.Configurable = Configurability.Disabled;
			Item item24 = new Item("dybassets", "DwarfGoblinShamanBoat_attack_fireball");
			item24.Configurable = Configurability.Disabled;
			Item item25 = new Item("dybassets", "DwarfGoblinShaman_attack_fireball");
			item25.Configurable = Configurability.Disabled;
			Item item26 = new Item("dybassets", "DwarfGoblinShaman_attack_poke");
			item26.Configurable = Configurability.Disabled;
			Item item27 = new Item("dybassets", "DwarfGoblinLoot_Run");
			item27.Configurable = Configurability.Disabled;
			GameObject val4 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "sfx_goblin_loot_alert");
			GameObject val5 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "sfx_goblin_loot_die");
			GameObject val6 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "sfx_goblin_loot_hit");
			GameObject val7 = ItemManager.PrefabManager.RegisterPrefab("dybassets", "sfx_goblin_loot_idle");
			GameObject val8 = ItemManager.PrefabManager.RegisterPrefab("dybasse