Decompiled source of ValheimRAFT v1.5.0
plugins\ValheimRAFT.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Jotunn; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.GUI; using Jotunn.Managers; using Jotunn.Utils; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.Events; using UnityEngine.Rendering; using UnityEngine.U2D; using UnityEngine.UI; using ValheimRAFT; using ValheimRAFT.UI; using ValheimRAFT.Util; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.5.0.0")] [module: UnverifiableCode] [module: System.Runtime.CompilerServices.RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public class BoardingRampComponent : MonoBehaviour, Interactable, Hoverable { public enum BoardingRampState { Closed, Closing, Opening, Open } public BoardingRampState m_state = BoardingRampState.Closing; public float m_stateProgress; public float m_stateChangeDuration = 0.5f; public int m_segments = 8; public float m_segmentLength = 2f; public float m_segmentOverlap = 0.2f; public float m_segmentHeight = 0.05f; public float m_maxRampRotation; private GameObject m_segmentObject; private List<GameObject> m_segmentObjects = new List<GameObject>(); private List<Transform> m_ropeAttach1 = new List<Transform>(); private List<Transform> m_ropeAttach2 = new List<Transform>(); private LineRenderer m_rope1; private LineRenderer m_rope2; private GameObject m_ramp; private Transform m_winch1; private Transform m_winch2; private Transform m_winch1Rope; private Transform m_winch2Rope; private bool m_lastHitRamp; private Vector3 m_hitPosition; private bool m_updateRamp; private Quaternion m_desiredRotation; private float m_rotSpeed; private Color m_hitColor; private float m_hitDistance; private ZNetView m_nview; private int m_groundRayMask; private static RaycastHit[] m_rayHits = (RaycastHit[])(object)new RaycastHit[30]; private float m_lastBridgeProgress = -1f; private static EditRampComponent m_editPanel; private void Awake() { m_nview = ((Component)this).GetComponent<ZNetView>(); m_groundRayMask = LayerMask.GetMask(new string[8] { "Default", "static_solid", "Default_small", "piece", "terrain", "blocker", "WaterVolume", "Water" }); m_ramp = ((Component)((Component)this).transform.Find("Ramp")).gameObject; m_segmentObject = ((Component)((Component)this).transform.Find("Ramp/Segment")).gameObject; m_rope1 = ((Component)((Component)this).transform.Find("Rope1")).GetComponent<LineRenderer>(); m_rope2 = ((Component)((Component)this).transform.Find("Rope2")).GetComponent<LineRenderer>(); m_winch1 = ((Component)this).transform.Find("Winch1/Cylinder"); m_winch2 = ((Component)this).transform.Find("Winch2/Cylinder"); m_winch1Rope = ((Component)this).transform.Find("Winch1/Pole/RopeAttach"); m_winch2Rope = ((Component)this).transform.Find("Winch2/Pole/RopeAttach"); m_segmentObject.SetActive(ZNetView.m_forceDisableInit); if (ZNetView.m_forceDisableInit) { ((Component)m_rope1).gameObject.SetActive(false); ((Component)m_rope2).gameObject.SetActive(false); m_segmentObject.SetActive(true); ((Behaviour)this).enabled = false; } else { m_nview.Register<byte>("RPC_SetState", (Action<long, byte>)RPC_SetState); m_nview.Register<byte>("RPC_SetSegmentCount", (Action<long, byte>)RPC_SetSegmentCount); m_updateRamp = true; LoadZDO(); } } private void RPC_SetState(long sender, byte state) { if (m_nview.IsOwner()) { SetState((BoardingRampState)state); } } private void LoadZDO() { if (Object.op_Implicit((Object)(object)m_nview) && m_nview.m_zdo != null) { m_state = (BoardingRampState)m_nview.m_zdo.GetInt("MB_m_state", 0); m_segments = m_nview.m_zdo.GetInt("MB_m_segments", 5); } } public void RPC_SetSegmentCount(long sender, byte segmentCount) { if (Object.op_Implicit((Object)(object)m_nview) && m_nview.IsOwner()) { SetSegmentCount(segmentCount); } } public void SetSegmentCount(int segmentCount) { if (segmentCount != m_segments) { if (Object.op_Implicit((Object)(object)m_nview) && !m_nview.IsOwner()) { m_nview.InvokeRPC("RPC_SetSegmentCount", new object[1] { (byte)segmentCount }); } else { m_segments = segmentCount; m_nview.m_zdo.Set("MB_m_segments", m_segments); } } } private void CreateSegments() { //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) while (m_segments < m_segmentObjects.Count) { int index = m_segmentObjects.Count - 1; Object.Destroy((Object)(object)m_segmentObjects[index]); Object.Destroy((Object)(object)m_ropeAttach1[index]); Object.Destroy((Object)(object)m_ropeAttach2[index]); m_segmentObjects.RemoveAt(index); m_ropeAttach1.RemoveAt(index); m_ropeAttach2.RemoveAt(index); } for (int i = m_segmentObjects.Count; i < m_segments; i++) { GameObject val = Object.Instantiate<GameObject>(m_segmentObject, ((Component)this).transform.position + new Vector3(0f, (0f - m_segmentHeight) * (float)i, m_segmentLength * (float)i), Quaternion.identity, m_ramp.transform); val.transform.localRotation = Quaternion.identity; val.transform.localScale = new Vector3(1f + (float)i * 0.0001f, 1f + (float)i * 0.0001f, 1f + (float)i * 0.0001f); m_segmentObjects.Add(val); m_ropeAttach1.Add(val.transform.Find("SegmentAnchor/Pole1/RopeAttach")); m_ropeAttach2.Add(val.transform.Find("SegmentAnchor/Pole2/RopeAttach")); val.SetActive(true); } } private void Update() { if (Object.op_Implicit((Object)(object)m_nview) && !m_nview.IsOwner()) { BoardingRampState @int = (BoardingRampState)m_nview.m_zdo.GetInt("MB_m_state", 0); if (@int != m_state) { switch (@int) { case BoardingRampState.Closed: case BoardingRampState.Closing: m_state = BoardingRampState.Closing; break; case BoardingRampState.Opening: case BoardingRampState.Open: m_state = BoardingRampState.Opening; break; } } m_segments = m_nview.m_zdo.GetInt("MB_m_segments", 5); } if (m_segmentObjects.Count != m_segments) { CreateSegments(); ForceRampUpdate(); } CheckRampFloor(); if (m_state == BoardingRampState.Closing) { m_stateProgress = Mathf.Clamp01(m_stateProgress - Time.deltaTime / (m_stateChangeDuration * (float)m_segments)); UpdateRamp(); if (m_stateProgress <= 0f) { m_state = BoardingRampState.Closed; } } else if (m_state == BoardingRampState.Opening) { m_stateProgress = Mathf.Clamp01(m_stateProgress + Time.deltaTime / (m_stateChangeDuration * (float)m_segments)); UpdateRamp(); if (m_stateProgress >= 1f) { m_state = BoardingRampState.Open; } } else if (m_updateRamp) { UpdateRamp(); } } private void SetState(BoardingRampState state) { if (m_state == state) { return; } m_state = state; if (Object.op_Implicit((Object)(object)m_nview) && m_nview.m_zdo != null) { if (m_nview.IsOwner()) { m_nview.m_zdo.Set("MB_m_state", (int)state); return; } m_nview.InvokeRPC("RPC_SetState", new object[1] { (byte)state }); } } private bool LinecastNonSelf(Vector3 start, Vector3 end, out RaycastHit hit) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //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_0009: 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) Vector3 val = end - start; return RaycastNonSelf(start, ((Vector3)(ref val)).normalized, ((Vector3)(ref val)).magnitude, out hit); } private bool RaycastNonSelf(Vector3 start, Vector3 dir, float dist, out RaycastHit hit) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: 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) int num = Physics.RaycastNonAlloc(start, dir, m_rayHits, dist, m_groundRayMask, (QueryTriggerInteraction)1); int num2 = 0; bool flag = false; for (int i = 0; i < num; i++) { if (!((RaycastHit)(ref m_rayHits[i])).transform.IsChildOf(((Component)this).transform.parent ?? ((Component)this).transform) && (!flag || ((RaycastHit)(ref m_rayHits[num2])).distance > ((RaycastHit)(ref m_rayHits[i])).distance)) { num2 = i; flag = true; } } hit = m_rayHits[num2]; return flag; } private void CheckRampFloor() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: 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_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: 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_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_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: 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_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_0266: 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_0273: Unknown result type (might be due to invalid IL or missing references) if (m_state == BoardingRampState.Closed || m_state == BoardingRampState.Closing) { m_updateRamp |= m_state == BoardingRampState.Closing || m_ramp.transform.eulerAngles.x != -90f; } else { if (m_state != BoardingRampState.Opening && m_state != BoardingRampState.Open) { return; } m_updateRamp = true; float num = m_segmentLength * (float)m_segments; float num2 = 1f * (m_segmentLength - m_segmentOverlap) * (float)m_segments; Vector3 val = m_ramp.transform.TransformPoint(new Vector3(0f, (0f - m_segmentHeight) * (float)m_segments, num2)); Vector3 position = m_ramp.transform.position; Vector3 val2 = val - position; Vector3 normalized = ((Vector3)(ref val2)).normalized; Vector3 up = m_ramp.transform.up; if (LinecastNonSelf(position, val, out var hit)) { m_hitColor = Color.green; m_hitDistance = ((RaycastHit)(ref hit)).distance / num2; if (num * 0.94f > ((RaycastHit)(ref hit)).distance) { m_hitColor = Color.black; LinecastNonSelf(((RaycastHit)(ref hit)).point + normalized * 0.1f + up, ((RaycastHit)(ref hit)).point + normalized * 0.1f - up, out hit); } if ((double)Vector3.Dot(((RaycastHit)(ref hit)).normal, Vector3.up) < 0.5) { m_hitColor = Color.white; LinecastNonSelf(((RaycastHit)(ref hit)).point + up, ((RaycastHit)(ref hit)).point - up, out hit); } m_lastHitRamp = true; m_hitPosition = ((RaycastHit)(ref hit)).point; m_updateRamp = true; } else if (m_lastHitRamp && LinecastNonSelf(position - up * 0.3f, val - up * 0.3f, out hit)) { m_hitColor = Color.magenta; } else if (!m_lastHitRamp && RaycastNonSelf(val + new Vector3(0f, 5f, 0f), Vector3.down, 1000f, out hit)) { m_hitColor = Color.blue; m_hitPosition = ((RaycastHit)(ref hit)).point; m_hitDistance = 1f; m_updateRamp = true; m_lastHitRamp = false; } else { m_lastHitRamp = false; } } } public void ForceRampUpdate() { m_updateRamp = true; m_lastBridgeProgress = -1f; } private void UpdateRamp() { //IL_0058: 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_0074: 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_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: 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_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_014d: 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) //IL_0164: 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_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) if (!m_updateRamp) { return; } m_updateRamp = false; if (m_state == BoardingRampState.Closed || m_state == BoardingRampState.Closing) { m_desiredRotation = ((m_stateProgress < 1f / (float)m_segments) ? Quaternion.Euler(-90f, 0f, 0f) : m_ramp.transform.localRotation); m_rotSpeed = 90f; } else { Vector3 val = m_hitPosition - (((Component)this).transform.position - new Vector3(0f, m_hitDistance * m_segmentHeight * (float)m_segments, 0f)); m_desiredRotation = Quaternion.LookRotation(((Vector3)(ref val)).normalized); Quaternion val2 = Quaternion.Inverse(((Component)this).transform.rotation) * m_desiredRotation; m_desiredRotation = Quaternion.Euler(((Quaternion)(ref val2)).eulerAngles.x, 0f, 0f); m_rotSpeed = Mathf.Clamp(Quaternion.Angle(m_ramp.transform.localRotation, m_desiredRotation) * 5f, 0f, 90f); } m_ramp.transform.localRotation = Quaternion.RotateTowards(m_ramp.transform.localRotation, m_desiredRotation, Time.deltaTime * m_rotSpeed); ((Component)m_winch1).transform.localRotation = Quaternion.Euler(m_stateProgress * 1000f * (float)m_segments, 0f, -90f); ((Component)m_winch2).transform.localRotation = Quaternion.Euler(m_stateProgress * 1000f * (float)m_segments, 0f, -90f); float stateProgress = m_stateProgress; if (m_lastBridgeProgress != stateProgress) { m_lastBridgeProgress = stateProgress; for (int i = 1; i < m_segmentObjects.Count; i++) { float num = Mathf.Clamp01(stateProgress * (float)m_segmentObjects.Count / (float)i); m_segmentObjects[i].transform.position = m_ramp.transform.TransformPoint(new Vector3(0f, (0f - m_segmentHeight) * (float)i, num * (m_segmentLength - m_segmentOverlap) * (float)i)); } } UpdateRopes(); } private void UpdateRopes() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) m_rope1.positionCount = m_segmentObjects.Count + 1; m_rope2.positionCount = m_segmentObjects.Count + 1; m_rope1.SetPosition(m_segmentObjects.Count, ((Component)m_rope1).transform.InverseTransformPoint(m_winch1Rope.position)); m_rope2.SetPosition(m_segmentObjects.Count, ((Component)m_rope2).transform.InverseTransformPoint(m_winch2Rope.position)); for (int i = 0; i < m_segmentObjects.Count; i++) { m_rope1.SetPosition(m_segmentObjects.Count - (i + 1), ((Component)m_rope1).transform.InverseTransformPoint(m_ropeAttach1[i].position)); m_rope2.SetPosition(m_segmentObjects.Count - (i + 1), ((Component)m_rope2).transform.InverseTransformPoint(m_ropeAttach2[i].position)); } } private void OnDrawGizmos() { //IL_0001: 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) Gizmos.color = m_hitColor; Gizmos.DrawSphere(m_hitPosition, 0.3f); } public string GetHoverName() { return ""; } public string GetHoverText() { string text = ((m_state == BoardingRampState.Open || m_state == BoardingRampState.Opening) ? "$mb_boarding_ramp_retract" : "$mb_boarding_ramp_extend"); return Localization.instance.Localize("[<color=yellow><b>$KEY_Use</b></color>] " + text) + Localization.instance.Localize("\n[<color=yellow><b>$KEY_AltPlace + $KEY_Use</b></color>] $mb_boarding_ramp_edit"); } public bool Interact(Humanoid user, bool hold, bool alt) { if (alt) { if (m_editPanel == null) { m_editPanel = new EditRampComponent(); } m_editPanel.ShowPanel(this); return true; } if (!hold) { if (m_state == BoardingRampState.Open || m_state == BoardingRampState.Opening) { SetState(BoardingRampState.Closing); } else if (m_state == BoardingRampState.Closing || m_state == BoardingRampState.Closed) { SetState(BoardingRampState.Opening); } } return true; } public bool UseItem(Humanoid user, ItemData item) { return false; } } public class CultivatableComponent : MonoBehaviour { private ZNetView m_nview; private static Dictionary<int, List<int>> m_childObjects = new Dictionary<int, List<int>>(); private static readonly int MBCultivatableParentIdHash = StringExtensionMethods.GetStableHashCode("MBCultivatableParentId"); public static readonly KeyValuePair<int, int> MBCultivatableParentHash = ZDO.GetHashZDOID("MBCultivatableParent"); private float textureScale = 8f; public bool isCultivatable { get; set; } = true; public void Awake() { m_nview = ((Component)this).GetComponent<ZNetView>(); WearNTear component = ((Component)this).GetComponent<WearNTear>(); if (Object.op_Implicit((Object)(object)component)) { component.m_onDestroyed = (Action)Delegate.Combine(component.m_onDestroyed, new Action(OnDestroyed)); } } public void Start() { UpdateMaterial(); } public void UpdateMaterial() { //IL_0050: 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_0071: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0076: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: 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_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: 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_00fb: 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) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0128: 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) //IL_0140: Unknown result type (might be due to invalid IL or missing references) Vector2 val = (Object.op_Implicit((Object)(object)((Component)this).transform.parent) ? new Vector2(0f - ((Component)this).transform.localPosition.x, 0f - ((Component)this).transform.localPosition.z) : new Vector2(0f - ((Component)this).transform.position.x, 0f - ((Component)this).transform.position.z)); val /= textureScale; float num = (Object.op_Implicit((Object)(object)((Component)this).transform.parent) ? (0f - ((Component)this).transform.localEulerAngles.y) : (0f - ((Component)this).transform.eulerAngles.y)); num /= 360f; Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(((Component)this).transform.localScale.x, ((Component)this).transform.localScale.z); val2 /= textureScale; MeshRenderer[] componentsInChildren = ((Component)this).GetComponentsInChildren<MeshRenderer>(); for (int i = 0; i < componentsInChildren.Length; i++) { Material material = ((Renderer)componentsInChildren[i]).material; material.SetTextureOffset("_MainTex", val); material.SetTextureScale("_MainTex", val2); material.SetTextureOffset("_MainNormal", val); material.SetTextureScale("_MainNormal", val2); material.SetFloat("_MainRotation", num); } } private void OnDestroyed() { int orCreatePersistantID = ZDOPersistantID.Instance.GetOrCreatePersistantID(m_nview.m_zdo); if (!m_childObjects.TryGetValue(orCreatePersistantID, out var value)) { return; } for (int i = 0; i < value.Count; i++) { ZDO zDO = ZDOPersistantID.Instance.GetZDO(value[i]); if (zDO == null) { continue; } ZNetView val = ZNetScene.instance.FindInstance(zDO); if (Object.op_Implicit((Object)(object)val)) { if ((Object)(object)((Component)this).gameObject == (Object)(object)val || ((Component)this).transform.IsChildOf(((Component)val).transform)) { ZLog.LogWarning((object)$" gameObject == obj || transform.IsChildOf(obj.transform) {((Component)this).gameObject} == {val} || {((Component)this).transform.IsChildOf(((Component)val).transform)}"); continue; } WearNTear component = ((Component)val).GetComponent<WearNTear>(); if (Object.op_Implicit((Object)(object)component)) { component.Destroy(); continue; } ZNetView component2 = ((Component)val).GetComponent<ZNetView>(); if (Object.op_Implicit((Object)(object)component2)) { component2.Destroy(); } } else { ZDOMan.instance.DestroyZDO(zDO); } } m_childObjects.Remove(orCreatePersistantID); } public string GetHoverName() { return ""; } public string GetHoverText() { return ""; } public bool Interact(Humanoid user, bool hold, bool alt) { return true; } public bool UseItem(Humanoid user, ItemData item) { return false; } public void AddNewChild(ZNetView child) { AddNewChild(ZDOPersistantID.Instance.GetOrCreatePersistantID(m_nview.m_zdo), child); } public static void InitPiece(ZNetView netview) { int parentID = GetParentID(netview); if (parentID != 0) { AddChild(parentID, netview); } } public static int GetParentID(ZNetView netview) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0038: 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) int num = netview.m_zdo.GetInt(MBCultivatableParentIdHash, 0); if (num == 0) { ZDOID zDOID = netview.m_zdo.GetZDOID(MBCultivatableParentHash); if (zDOID != ZDOID.None) { ZDO zDO = ZDOMan.instance.GetZDO(zDOID); num = ((zDO == null) ? ZDOPersistantID.ZDOIDToId(zDOID) : ZDOPersistantID.Instance.GetOrCreatePersistantID(zDO)); netview.m_zdo.Set(MBCultivatableParentIdHash, num, false); } } return num; } public static void AddNewChild(int parent, ZNetView child) { child.m_zdo.Set(MBCultivatableParentIdHash, parent, false); AddChild(parent, child); } public static void AddChild(int parent, ZNetView child) { StaticPhysics component = ((Component)child).GetComponent<StaticPhysics>(); if (Object.op_Implicit((Object)(object)component)) { Object.Destroy((Object)(object)component); } AddChild(parent, ZDOPersistantID.Instance.GetOrCreatePersistantID(child.m_zdo)); } private static void AddChild(int parent, int child) { if (parent != 0) { if (!m_childObjects.TryGetValue(parent, out var value)) { value = new List<int>(); m_childObjects.Add(parent, value); } value.Add(child); } } } public class CustomMastComponent : MastComponent { public GameObject m_upperBeam; public GameObject m_lowerBeam; public float m_upperBeamLength; public float m_lowerBeamLength; public float m_upperBeamWidth; public float m_lowerBeamWidth; public bool m_upperBeamEnabled; public bool m_lowerBeamEnabled; public RopeAnchorComponent m_upperBeamLeftAnchor; public RopeAnchorComponent m_upperBeamRightAnchor; public RopeAnchorComponent m_lowerBeamLeftAnchor; public RopeAnchorComponent m_lowerBeamRightAnchor; public ZNetView m_nview; public SailComponent m_sailComponent; public void Awake() { m_sailCloth = ((Component)this).GetComponent<Cloth>(); m_nview = ((Component)this).GetComponent<ZNetView>(); m_sailComponent = ((Component)this).GetComponent<SailComponent>(); } public void LoadZDO() { //IL_003f: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)m_nview) && m_nview.m_zdo != null) { Vector3 vec = m_nview.m_zdo.GetVec3("MBMast_upperBeam", new Vector3(1f, 1f, 1f)); m_upperBeamLength = vec.x; m_upperBeamWidth = vec.y; m_upperBeamEnabled = vec.z == 1f; Vector3 vec2 = m_nview.m_zdo.GetVec3("MBMast_lowerBeam", new Vector3(1f, 1f, 1f)); m_lowerBeamLength = vec2.x; m_lowerBeamWidth = vec2.y; m_lowerBeamEnabled = vec2.z == 1f; m_upperBeam.transform.localScale = new Vector3(m_upperBeamLength, m_upperBeamWidth, m_upperBeamWidth); m_upperBeam.SetActive(m_upperBeamEnabled); m_lowerBeam.transform.localScale = new Vector3(m_lowerBeamLength, m_lowerBeamWidth, m_lowerBeamWidth); m_lowerBeam.SetActive(m_lowerBeamEnabled); } } } public class MastComponent : MonoBehaviour { public GameObject m_sailObject; public Cloth m_sailCloth; internal bool m_allowSailRotation; internal bool m_allowSailShrinking; internal bool m_disableCloth; } public class MoveableBaseRootComponent : MonoBehaviour { public static readonly KeyValuePair<int, int> MBParentHash = ZDO.GetHashZDOID("MBParent"); public static readonly int MBCharacterParentHash = StringExtensionMethods.GetStableHashCode("MBCharacterParent"); public static readonly int MBCharacterOffsetHash = StringExtensionMethods.GetStableHashCode("MBCharacterOFfset"); public static readonly int MBParentIdHash = StringExtensionMethods.GetStableHashCode("MBParentId"); public static readonly int MBPositionHash = StringExtensionMethods.GetStableHashCode("MBPosition"); public static readonly int MBRotationHash = StringExtensionMethods.GetStableHashCode("MBRotation"); public static readonly int MBRotationVecHash = StringExtensionMethods.GetStableHashCode("MBRotationVec"); internal static Dictionary<int, List<ZNetView>> m_pendingPieces = new Dictionary<int, List<ZNetView>>(); internal static Dictionary<int, List<ZDO>> m_allPieces = new Dictionary<int, List<ZDO>>(); internal static Dictionary<int, List<ZDOID>> m_dynamicObjects = new Dictionary<int, List<ZDOID>>(); internal MoveableBaseShipComponent m_moveableBaseShip; internal Rigidbody m_rigidbody; internal ZNetView m_nview; internal Rigidbody m_syncRigidbody; internal Ship m_ship; internal List<ZNetView> m_pieces = new List<ZNetView>(); internal List<MastComponent> m_mastPieces = new List<MastComponent>(); internal List<RudderComponent> m_rudderPieces = new List<RudderComponent>(); internal List<ZNetView> m_portals = new List<ZNetView>(); internal List<RopeLadderComponent> m_ladders = new List<RopeLadderComponent>(); internal List<BoardingRampComponent> m_boardingRamps = new List<BoardingRampComponent>(); private Vector2i m_sector; private Bounds m_bounds; internal BoxCollider m_blockingcollider; internal BoxCollider m_floatcollider; internal BoxCollider m_onboardcollider; internal int m_id; public bool m_statsOverride; private static bool itemsRemovedDuringWait; public void Awake() { m_rigidbody = ((Component)this).gameObject.AddComponent<Rigidbody>(); m_rigidbody.isKinematic = true; m_rigidbody.interpolation = (RigidbodyInterpolation)1; m_rigidbody.mass = 99999f; if (ZNet.instance.IsServer()) { ((MonoBehaviour)this).StartCoroutine("UpdatePieceSectors"); } } public void CleanUp() { ((MonoBehaviour)this).StopCoroutine("ActivatePendingPieces"); if (!Object.op_Implicit((Object)(object)ZNetScene.instance) || m_id == 0) { return; } for (int i = 0; i < m_pieces.Count; i++) { ZNetView val = m_pieces[i]; if (Object.op_Implicit((Object)(object)val)) { ((Component)val).transform.SetParent((Transform)null); AddInactivePiece(m_id, val); } } List<Player> allPlayers = Player.GetAllPlayers(); for (int j = 0; j < allPlayers.Count; j++) { if (Object.op_Implicit((Object)(object)allPlayers[j]) && (Object)(object)((Component)allPlayers[j]).transform.parent == (Object)(object)((Component)this).transform) { ((Component)allPlayers[j]).transform.SetParent((Transform)null); } } } private void Sync() { //IL_001e: 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.op_Implicit((Object)(object)m_syncRigidbody)) { m_rigidbody.MovePosition(((Component)m_syncRigidbody).transform.position); m_rigidbody.MoveRotation(((Component)m_syncRigidbody).transform.rotation); } } public void FixedUpdate() { Sync(); } public void LateUpdate() { Sync(); if (!ZNet.instance.IsServer()) { UpdateAllPieces(); } } public void UpdateAllPieces() { //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) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0027: 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) Vector2i zone = ZoneSystem.instance.GetZone(((Component)this).transform.position); if (!(zone != m_sector)) { return; } m_sector = zone; for (int i = 0; i < m_pieces.Count; i++) { ZNetView val = m_pieces[i]; if (!Object.op_Implicit((Object)(object)val)) { m_pieces.RemoveAt(i); i--; } else { val.m_zdo.SetPosition(((Component)this).transform.position); } } } public IEnumerator UpdatePieceSectors() { while (true) { if (!m_allPieces.TryGetValue(m_id, out var list)) { yield return (object)new WaitForSeconds(5f); continue; } Vector3 pos = ((Component)this).transform.position; Vector2i sector = ZoneSystem.instance.GetZone(pos); float realtimeSinceStartup = Time.realtimeSinceStartup; if (sector != m_sector) { m_sector = sector; for (int i = 0; i < list.Count; i++) { ZDO val = list[i]; if (!(val.GetSector() != sector)) { continue; } if (val.GetInt(MBParentIdHash, 0) != m_id) { Logger.LogWarning((object)"Invalid piece in piece list found, removing."); list.FastRemoveAt(i); i--; continue; } val.SetPosition(pos); if (Time.realtimeSinceStartup - realtimeSinceStartup > 0.1f) { itemsRemovedDuringWait = false; yield return (object)new WaitForEndOfFrame(); realtimeSinceStartup = Time.realtimeSinceStartup; if (itemsRemovedDuringWait) { i = 0; } } } } yield return (object)new WaitForEndOfFrame(); list = null; } } internal float GetColliderBottom() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) return ((Component)m_blockingcollider).transform.position.y + m_blockingcollider.center.y - m_blockingcollider.size.y / 2f; } public static void AddInactivePiece(int id, ZNetView netview) { if (!m_pendingPieces.TryGetValue(id, out var value)) { value = new List<ZNetView>(); m_pendingPieces.Add(id, value); } value.Add(netview); WearNTear component = ((Component)netview).GetComponent<WearNTear>(); if (Object.op_Implicit((Object)(object)component)) { ((Behaviour)component).enabled = false; } } public void RemovePiece(ZNetView netview) { if (m_pieces.Remove(netview)) { MastComponent component = ((Component)netview).GetComponent<MastComponent>(); if (Object.op_Implicit((Object)(object)component)) { m_mastPieces.Remove(component); } RudderComponent component2 = ((Component)netview).GetComponent<RudderComponent>(); if (Object.op_Implicit((Object)(object)component2)) { m_rudderPieces.Remove(component2); } BoardingRampComponent component3 = ((Component)netview).GetComponent<BoardingRampComponent>(); if (Object.op_Implicit((Object)(object)component3)) { m_boardingRamps.Remove(component3); } if (Object.op_Implicit((Object)(object)((Component)netview).GetComponent<TeleportWorld>())) { m_portals.Remove(netview); } RopeLadderComponent component4 = ((Component)netview).GetComponent<RopeLadderComponent>(); if (Object.op_Implicit((Object)(object)component4)) { m_ladders.Remove(component4); component4.m_mbroot = null; } UpdateStats(); } } private void UpdateStats() { } public void DestroyPiece(WearNTear wnt) { ZNetView component = ((Component)wnt).GetComponent<ZNetView>(); RemovePiece(component); UpdatePieceCount(); if (GetPieceCount() == 0) { ((Component)m_ship).GetComponent<WearNTear>().Destroy(); Object.Destroy((Object)(object)((Component)this).gameObject); } } public void ActivatePendingPiecesCoroutine() { ((MonoBehaviour)this).StartCoroutine("ActivatePendingPieces"); } public IEnumerator ActivatePendingPieces() { if (!Object.op_Implicit((Object)(object)m_nview) || m_nview.m_zdo == null) { yield return null; } int id = ZDOPersistantID.Instance.GetOrCreatePersistantID(m_nview.m_zdo); if (m_pendingPieces.TryGetValue(id, out var list)) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); for (int i = 0; i < list.Count; i++) { ZNetView val = list[i]; if (Object.op_Implicit((Object)(object)val)) { ActivatePiece(val); if (!ZNetScene.instance.InLoadingScreen() && stopwatch.ElapsedMilliseconds >= 10) { yield return (object)new WaitForEndOfFrame(); stopwatch.Restart(); } } } list.Clear(); m_pendingPieces.Remove(id); } if (m_dynamicObjects.TryGetValue(m_id, out var value)) { Vector3 val3 = default(Vector3); for (int j = 0; j < value.Count; j++) { GameObject val2 = ZNetScene.instance.FindInstance(value[j]); if (!Object.op_Implicit((Object)(object)val2)) { continue; } ZNetView componentInParent = val2.GetComponentInParent<ZNetView>(); if (!Object.op_Implicit((Object)(object)componentInParent) || componentInParent.m_zdo == null) { continue; } if (ZDOExtraData.s_vec3.TryGetValue(componentInParent.m_zdo.m_uid, out var value2)) { if (value2.TryGetValue(MBCharacterOffsetHash, ref val3)) { ((Component)componentInParent).transform.position = val3 + ((Component)this).transform.position; } val3 = default(Vector3); } ZDOExtraData.RemoveInt(componentInParent.m_zdo.m_uid, MBCharacterParentHash); ZDOExtraData.RemoveVec3(componentInParent.m_zdo.m_uid, MBCharacterOffsetHash); value2 = null; } m_dynamicObjects.Remove(m_id); } yield return null; } public static void AddDynamicParent(ZNetView source, GameObject target) { //IL_0037: 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_0047: Unknown result type (might be due to invalid IL or missing references) MoveableBaseRootComponent componentInParent = target.GetComponentInParent<MoveableBaseRootComponent>(); if (Object.op_Implicit((Object)(object)componentInParent)) { source.m_zdo.Set(MBCharacterParentHash, componentInParent.m_id, false); source.m_zdo.Set(MBCharacterOffsetHash, ((Component)source).transform.position - ((Component)componentInParent).transform.position); } } public static void AddDynamicParent(ZNetView source, GameObject target, Vector3 offset) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) MoveableBaseRootComponent componentInParent = target.GetComponentInParent<MoveableBaseRootComponent>(); if (Object.op_Implicit((Object)(object)componentInParent)) { source.m_zdo.Set(MBCharacterParentHash, componentInParent.m_id, false); source.m_zdo.Set(MBCharacterOffsetHash, offset); } } public static void InitZDO(ZDO zdo) { //IL_0077: Unknown result type (might be due to invalid IL or missing references) _ = zdo.m_prefab; StringExtensionMethods.GetStableHashCode("MBRaft"); int parentID = GetParentID(zdo); if (parentID != 0) { if (!m_allPieces.TryGetValue(parentID, out var value)) { value = new List<ZDO>(); m_allPieces.Add(parentID, value); } value.Add(zdo); } int @int = zdo.GetInt(MBCharacterParentHash, 0); if (@int != 0) { if (!m_dynamicObjects.TryGetValue(@int, out var value2)) { value2 = new List<ZDOID>(); m_dynamicObjects.Add(@int, value2); } value2.Add(zdo.m_uid); } } public static void RemoveZDO(ZDO zdo) { int parentID = GetParentID(zdo); if (parentID != 0 && m_allPieces.TryGetValue(parentID, out var value)) { value.FastRemove(zdo); itemsRemovedDuringWait = true; } } private static int GetParentID(ZDO zdo) { //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_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_008f: Unknown result type (might be due to invalid IL or missing references) int num = zdo.GetInt(MBParentIdHash, 0); if (num == 0) { ZDOID zDOID = zdo.GetZDOID(MBParentHash); if (zDOID != ZDOID.None) { ZDO zDO = ZDOMan.instance.GetZDO(zDOID); num = ((zDO == null) ? ZDOPersistantID.ZDOIDToId(zDOID) : ZDOPersistantID.Instance.GetOrCreatePersistantID(zDO)); zdo.Set(MBParentIdHash, num, false); int mBRotationVecHash = MBRotationVecHash; Quaternion quaternion = zdo.GetQuaternion(MBRotationHash, Quaternion.identity); zdo.Set(mBRotationVecHash, ((Quaternion)(ref quaternion)).eulerAngles); zdo.RemoveZDOID(MBParentHash); ZDOHelper.Remove<Quaternion>(ZDOExtraData.s_quats, zDOID, MBRotationHash); } } return num; } public static void InitPiece(ZNetView netview) { Rigidbody componentInChildren = ((Component)netview).GetComponentInChildren<Rigidbody>(); if (Object.op_Implicit((Object)(object)componentInChildren) && !componentInChildren.isKinematic) { return; } int parentID = GetParentID(netview.m_zdo); if (parentID == 0) { return; } GameObject gameObject = ZDOPersistantID.Instance.GetGameObject(parentID); if (Object.op_Implicit((Object)(object)gameObject)) { MoveableBaseShipComponent component = gameObject.GetComponent<MoveableBaseShipComponent>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.m_baseRoot)) { component.m_baseRoot.ActivatePiece(netview); } } else { AddInactivePiece(parentID, netview); } } public void ActivatePiece(ZNetView netview) { //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_004a: 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_0054: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)netview)) { ((Component)netview).transform.SetParent(((Component)this).transform); ((Component)netview).transform.localPosition = netview.m_zdo.GetVec3(MBPositionHash, Vector3.zero); ((Component)netview).transform.localRotation = Quaternion.Euler(netview.m_zdo.GetVec3(MBRotationVecHash, Vector3.zero)); WearNTear component = ((Component)netview).GetComponent<WearNTear>(); if (Object.op_Implicit((Object)(object)component)) { ((Behaviour)component).enabled = true; } AddPiece(netview); } } public void AddTemporaryPiece(Piece piece) { ((Component)piece).transform.SetParent(((Component)this).transform); } public void AddNewPiece(Piece piece) { if (Object.op_Implicit((Object)(object)piece) && Object.op_Implicit((Object)(object)piece.m_nview)) { AddNewPiece(piece.m_nview); } } public void AddNewPiece(ZNetView netview) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) ((Component)netview).transform.SetParent(((Component)this).transform); if (netview.m_zdo != null) { netview.m_zdo.Set(MBParentIdHash, ZDOPersistantID.Instance.GetOrCreatePersistantID(m_nview.m_zdo), false); netview.m_zdo.Set(MBPositionHash, ((Component)netview).transform.localPosition); ZDO zdo = netview.m_zdo; int mBRotationVecHash = MBRotationVecHash; Quaternion localRotation = ((Component)netview).transform.localRotation; zdo.Set(mBRotationVecHash, ((Quaternion)(ref localRotation)).eulerAngles); } AddPiece(netview); InitZDO(netview.m_zdo); } public void AddPiece(ZNetView netview) { //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Expected O, but got Unknown m_pieces.Add(netview); UpdatePieceCount(); EncapsulateBounds(netview); WearNTear component = ((Component)netview).GetComponent<WearNTear>(); if (Object.op_Implicit((Object)(object)component) && ValheimRaftEntrypoint.Instance.MakeAllPiecesWaterProof.Value) { component.m_noRoofWear = false; } CultivatableComponent component2 = ((Component)netview).GetComponent<CultivatableComponent>(); if (Object.op_Implicit((Object)(object)component2)) { component2.UpdateMaterial(); } MastComponent component3 = ((Component)netview).GetComponent<MastComponent>(); if (Object.op_Implicit((Object)(object)component3)) { m_mastPieces.Add(component3); } BoardingRampComponent component4 = ((Component)netview).GetComponent<BoardingRampComponent>(); if (Object.op_Implicit((Object)(object)component4)) { component4.ForceRampUpdate(); m_boardingRamps.Add(component4); } RudderComponent component5 = ((Component)netview).GetComponent<RudderComponent>(); if (Object.op_Implicit((Object)(object)component5)) { if (!Object.op_Implicit((Object)(object)component5.m_controls)) { component5.m_controls = ((Component)netview).GetComponentInChildren<ShipControlls>(); } if (!Object.op_Implicit((Object)(object)component5.m_wheel)) { component5.m_wheel = ((Component)netview).transform.Find("controls/wheel"); } component5.m_controls.m_nview = m_nview; component5.m_controls.m_ship = ((Component)m_moveableBaseShip).GetComponent<Ship>(); m_rudderPieces.Add(component5); } if (Object.op_Implicit((Object)(object)((Component)netview).GetComponent<TeleportWorld>())) { m_portals.Add(netview); } RopeLadderComponent component6 = ((Component)netview).GetComponent<RopeLadderComponent>(); if (Object.op_Implicit((Object)(object)component6)) { m_ladders.Add(component6); component6.m_mbroot = this; } MeshRenderer[] componentsInChildren = ((Component)netview).GetComponentsInChildren<MeshRenderer>(true); foreach (MeshRenderer val in componentsInChildren) { if (Object.op_Implicit((Object)(object)((Renderer)val).sharedMaterial)) { Material[] sharedMaterials = ((Renderer)val).sharedMaterials; for (int j = 0; j < sharedMaterials.Length; j++) { Material val2 = new Material(sharedMaterials[j]); val2.SetFloat("_RippleDistance", 0f); val2.SetFloat("_ValueNoise", 0f); sharedMaterials[j] = val2; } ((Renderer)val).sharedMaterials = sharedMaterials; } } Rigidbody[] componentsInChildren2 = ((Component)netview).GetComponentsInChildren<Rigidbody>(); for (int k = 0; k < componentsInChildren2.Length; k++) { if (componentsInChildren2[k].isKinematic) { Object.Destroy((Object)(object)componentsInChildren2[k]); } } UpdateStats(); } private void UpdatePieceCount() { if (Object.op_Implicit((Object)(object)m_nview) && m_nview.m_zdo != null) { m_nview.m_zdo.Set("MBPieceCount", m_pieces.Count); } } public void EncapsulateBounds(ZNetView netview) { //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: 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_0115: 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_0140: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: 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) Piece component = ((Component)netview).GetComponent<Piece>(); List<Collider> list = (Object.op_Implicit((Object)(object)component) ? ((StaticTarget)component).GetAllColliders() : new List<Collider>(((Component)netview).GetComponentsInChildren<Collider>())); Door componentInChildren = ((Component)netview).GetComponentInChildren<Door>(); RopeLadderComponent component2 = ((Component)netview).GetComponent<RopeLadderComponent>(); RopeAnchorComponent component3 = ((Component)netview).GetComponent<RopeAnchorComponent>(); if (!Object.op_Implicit((Object)(object)componentInChildren) && !Object.op_Implicit((Object)(object)component2) && !Object.op_Implicit((Object)(object)component3)) { ((Bounds)(ref m_bounds)).Encapsulate(((Component)netview).transform.localPosition); } for (int i = 0; i < list.Count; i++) { Physics.IgnoreCollision(list[i], (Collider)(object)m_blockingcollider, true); Physics.IgnoreCollision(list[i], (Collider)(object)m_floatcollider, true); Physics.IgnoreCollision(list[i], (Collider)(object)m_onboardcollider, true); } m_blockingcollider.size = new Vector3(((Bounds)(ref m_bounds)).size.x, 3f, ((Bounds)(ref m_bounds)).size.z); m_blockingcollider.center = new Vector3(((Bounds)(ref m_bounds)).center.x, -0.2f, ((Bounds)(ref m_bounds)).center.z); m_floatcollider.size = new Vector3(((Bounds)(ref m_bounds)).size.x, 3f, ((Bounds)(ref m_bounds)).size.z); m_floatcollider.center = new Vector3(((Bounds)(ref m_bounds)).center.x, -0.2f, ((Bounds)(ref m_bounds)).center.z); m_onboardcollider.size = ((Bounds)(ref m_bounds)).size; m_onboardcollider.center = ((Bounds)(ref m_bounds)).center; } internal int GetPieceCount() { if (!Object.op_Implicit((Object)(object)m_nview) || m_nview.m_zdo == null) { return m_pieces.Count; } return m_nview.m_zdo.GetInt("MBPieceCount", m_pieces.Count); } } public class MoveableBaseShipComponent : MonoBehaviour { [Flags] public enum MBFlags { None = 0, IsAnchored = 1, HideMesh = 2 } internal MoveableBaseRootComponent m_baseRoot; internal Rigidbody m_rigidbody; internal Ship m_ship; internal ZNetView m_nview; internal GameObject m_baseRootObject; internal ZSyncTransform m_zsync; public float m_targetHeight; public float m_balanceForce = 0.03f; public float m_liftForce = 20f; public MBFlags m_flags; public void Awake() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: Unknown result type (might be due to invalid IL or missing references) Ship component = ((Component)this).GetComponent<Ship>(); m_nview = ((Component)this).GetComponent<ZNetView>(); m_zsync = ((Component)this).GetComponent<ZSyncTransform>(); m_ship = ((Component)this).GetComponent<Ship>(); m_baseRootObject = new GameObject { name = "MoveableBase", layer = 0 }; m_baseRoot = m_baseRootObject.AddComponent<MoveableBaseRootComponent>(); m_nview.Register<bool>("SetAnchor", (Action<long, bool>)delegate(long sender, bool state) { RPC_SetAnchor(sender, state); }); m_nview.Register<bool>("SetVisual", (Action<long, bool>)delegate(long sender, bool state) { RPC_SetVisual(sender, state); }); m_baseRoot.m_moveableBaseShip = this; m_baseRoot.m_nview = m_nview; m_baseRoot.m_ship = component; m_baseRoot.m_id = ZDOPersistantID.Instance.GetOrCreatePersistantID(m_nview.m_zdo); m_rigidbody = ((Component)this).GetComponent<Rigidbody>(); m_baseRoot.m_syncRigidbody = m_rigidbody; m_rigidbody.mass = 1000f; m_baseRootObject.transform.SetParent((Transform)null); m_baseRootObject.transform.position = ((Component)this).transform.position; m_baseRootObject.transform.rotation = ((Component)this).transform.rotation; Transform obj = ((Component)component).transform.Find("ship/visual/mast"); if (obj != null) { ((Component)obj).gameObject.SetActive(false); } Transform obj2 = ((Component)component).transform.Find("ship/colliders/log"); if (obj2 != null) { ((Component)obj2).gameObject.SetActive(false); } Transform obj3 = ((Component)component).transform.Find("ship/colliders/log (1)"); if (obj3 != null) { ((Component)obj3).gameObject.SetActive(false); } Transform obj4 = ((Component)component).transform.Find("ship/colliders/log (2)"); if (obj4 != null) { ((Component)obj4).gameObject.SetActive(false); } Transform obj5 = ((Component)component).transform.Find("ship/colliders/log (3)"); if (obj5 != null) { ((Component)obj5).gameObject.SetActive(false); } UpdateVisual(); BoxCollider[] componentsInChildren = ((Component)((Component)this).transform).GetComponentsInChildren<BoxCollider>(); m_baseRoot.m_onboardcollider = ((IEnumerable<BoxCollider>)componentsInChildren).FirstOrDefault((Func<BoxCollider, bool>)((BoxCollider k) => ((Object)((Component)k).gameObject).name == "OnboardTrigger")); ((Component)m_baseRoot.m_onboardcollider).transform.localScale = new Vector3(1f, 1f, 1f); m_baseRoot.m_floatcollider = component.m_floatCollider; ((Component)m_baseRoot.m_floatcollider).transform.localScale = new Vector3(1f, 1f, 1f); m_baseRoot.m_blockingcollider = ((Component)((Component)component).transform.Find("ship/colliders/Cube")).GetComponentInChildren<BoxCollider>(); ((Component)m_baseRoot.m_blockingcollider).transform.localScale = new Vector3(1f, 1f, 1f); ((Component)m_baseRoot.m_blockingcollider).gameObject.layer = ValheimRaftEntrypoint.CustomRaftLayer; ((Component)((Component)m_baseRoot.m_blockingcollider).transform.parent).gameObject.layer = ValheimRaftEntrypoint.CustomRaftLayer; ZLog.Log((object)$"Activating MBRoot: {m_baseRoot.m_id}"); m_baseRoot.ActivatePendingPiecesCoroutine(); FirstTimeCreation(); } public void UpdateVisual() { if (m_nview.m_zdo != null) { m_flags = (MBFlags)m_nview.m_zdo.GetInt("MBFlags", (int)m_flags); ((Component)((Component)this).transform.Find("ship/visual")).gameObject.SetActive(!m_flags.HasFlag(MBFlags.HideMesh)); ((Component)((Component)this).transform.Find("interactive")).gameObject.SetActive(!m_flags.HasFlag(MBFlags.HideMesh)); } } public void OnDestroy() { if (Object.op_Implicit((Object)(object)m_baseRoot)) { m_baseRoot.CleanUp(); Object.Destroy((Object)(object)((Component)m_baseRoot).gameObject); } } private void FirstTimeCreation() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0047: 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) if (m_baseRoot.GetPieceCount() != 0) { return; } GameObject prefab = ZNetScene.instance.GetPrefab("wood_floor"); for (float num = -1f; num < 1.01f; num += 2f) { for (float num2 = -2f; num2 < 2.01f; num2 += 2f) { Vector3 val = ((Component)this).transform.TransformPoint(new Vector3(num, 0.45f, num2)); ZNetView component = Object.Instantiate<GameObject>(prefab, val, ((Component)this).transform.rotation).GetComponent<ZNetView>(); m_baseRoot.AddNewPiece(component); } } } internal void Accend() { //IL_006e: Unknown result type (might be due to invalid IL or missing references) if (m_flags.HasFlag(MBFlags.IsAnchored)) { SetAnchor(state: false); } if (!ValheimRaftEntrypoint.Instance.AllowFlight.Value) { m_targetHeight = 0f; } else { if (!Object.op_Implicit((Object)(object)m_baseRoot) || !Object.op_Implicit((Object)(object)m_baseRoot.m_floatcollider)) { return; } m_targetHeight = Mathf.Clamp(((Component)m_baseRoot.m_floatcollider).transform.position.y + 1f, ZoneSystem.instance.m_waterLevel, 200f); } m_nview.m_zdo.Set("MBTargetHeight", m_targetHeight); } internal void Descent() { //IL_0078: 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) if (m_flags.HasFlag(MBFlags.IsAnchored)) { SetAnchor(state: false); } _ = m_targetHeight; if (!ValheimRaftEntrypoint.Instance.AllowFlight.Value) { m_targetHeight = 0f; } else { if (!Object.op_Implicit((Object)(object)m_baseRoot) || !Object.op_Implicit((Object)(object)m_baseRoot.m_floatcollider)) { return; } m_targetHeight = Mathf.Clamp(((Component)m_baseRoot.m_floatcollider).transform.position.y - 1f, ZoneSystem.instance.m_waterLevel, 200f); if (((Component)m_baseRoot.m_floatcollider).transform.position.y - 1f <= ZoneSystem.instance.m_waterLevel) { m_targetHeight = 0f; } } m_nview.m_zdo.Set("MBTargetHeight", m_targetHeight); } internal void UpdateStats(bool flight) { if (!Object.op_Implicit((Object)(object)m_rigidbody) || !Object.op_Implicit((Object)(object)m_baseRoot) || m_baseRoot.m_statsOverride) { return; } m_rigidbody.mass = 3000f; m_rigidbody.angularDrag = (flight ? 1f : 0f); m_rigidbody.drag = (flight ? 1f : 0f); if (Object.op_Implicit((Object)(object)m_ship)) { m_ship.m_angularDamping = (flight ? 5f : 0.8f); m_ship.m_backwardForce = 1f; m_ship.m_damping = (flight ? 5f : 0.35f); m_ship.m_dampingSideway = (flight ? 3f : 0.3f); m_ship.m_force = 3f; m_ship.m_forceDistance = 5f; m_ship.m_sailForceFactor = (flight ? 0.2f : 0.05f); m_ship.m_stearForce = (flight ? 0.2f : 1f); m_ship.m_stearVelForceFactor = 1.3f; m_ship.m_waterImpactDamage = 0f; ImpactEffect component = ((Component)m_ship).GetComponent<ImpactEffect>(); if (Object.op_Implicit((Object)(object)component)) { component.m_interval = 0.1f; component.m_minVelocity = 0.1f; component.m_damages.m_damage = 100f; } } } internal void SetAnchor(bool state) { m_nview.InvokeRPC("SetAnchor", new object[1] { state }); } public void RPC_SetAnchor(long sender, bool state) { m_flags = (state ? (m_flags | MBFlags.IsAnchored) : (m_flags & ~MBFlags.IsAnchored)); m_nview.m_zdo.Set("MBFlags", (int)m_flags); } internal void SetVisual(bool state) { m_nview.InvokeRPC("SetVisual", new object[1] { state }); } public void RPC_SetVisual(long sender, bool state) { m_flags = (state ? (m_flags | MBFlags.HideMesh) : (m_flags & ~MBFlags.HideMesh)); m_nview.m_zdo.Set("MBFlags", (int)m_flags); UpdateVisual(); } } public class PierComponent : MonoBehaviour { public ZNetView m_nview; public GameObject m_segmentObject; public float m_segmentHeight; public float m_baseOffset; private int m_terrainLayer; private List<GameObject> m_segmentObjects = new List<GameObject>(); public void Awake() { m_terrainLayer = LayerMask.GetMask(new string[1] { "terrain" }); if (ZNetView.m_forceDisableInit) { WearNTear component = ((Component)this).GetComponent<WearNTear>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.m_new)) { component.m_new.SetActive(false); } m_segmentObject.SetActive(false); Collider[] componentsInChildren = m_segmentObject.GetComponentsInChildren<Collider>(true); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].enabled = false; } m_segmentObject.layer = LayerMask.NameToLayer("ghost"); Transform[] components = m_segmentObject.GetComponents<Transform>(); for (int j = 0; j < components.Length; j++) { ((Component)components[j]).gameObject.layer = m_segmentObject.layer; } ((MonoBehaviour)this).InvokeRepeating("UpdateSegments", 0.5f, 0.1f); } UpdateSegments(); } private void UpdateSegments() { //IL_000c: 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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.position = new Vector3(((Component)this).transform.position.x, ZoneSystem.instance.m_waterLevel + m_baseOffset, ((Component)this).transform.position.z); RaycastHit[] array = Physics.RaycastAll(((Component)this).transform.position, Vector3.down, 100f, m_terrainLayer); float num = 0f; for (int i = 0; i < array.Length; i++) { if (num < ((RaycastHit)(ref array[i])).distance) { num = ((RaycastHit)(ref array[i])).distance; } } int num2 = Mathf.CeilToInt(num / m_segmentHeight); for (int j = m_segmentObjects.Count; j < num2; j++) { GameObject item = Object.Instantiate<GameObject>(m_segmentObject, ((Component)this).transform.position, Quaternion.identity, ((Component)this).transform); m_segmentObjects.Add(item); } while (m_segmentObjects.Count > num2) { Object.Destroy((Object)(object)m_segmentObjects[m_segmentObjects.Count - 1]); m_segmentObjects.RemoveAt(m_segmentObjects.Count - 1); } for (int k = 0; k < m_segmentObjects.Count; k++) { GameObject obj = m_segmentObjects[k]; obj.SetActive(true); obj.transform.localPosition = new Vector3(0f, (0f - m_segmentHeight) * (float)(k + 1), 0f); obj.transform.localRotation = Quaternion.identity; } } } public class RopeAnchorComponent : MonoBehaviour, Interactable, Hoverable { private class Rope { internal GameObject m_ropeTarget; internal RopeAttachmentTarget m_ropeAnchorTarget; internal GameObject m_ropeObject; internal LineRenderer m_rope; internal BoxCollider m_collider; internal float m_ropeAttachDistance; internal RopeComponent m_ropeComponent; internal Transform m_targetTransform; } private struct RopeAttachmentTarget { public int Id { get; } public byte Index { get; } public RopeAttachmentTarget(int id, byte index) { this = default(RopeAttachmentTarget); Id = id; Index = index; } public override int GetHashCode() { return (Id << 1) & Index; } public override bool Equals(object obj) { if (obj is RopeAttachmentTarget ropeAttachmentTarget && ropeAttachmentTarget.Index == Index) { return ropeAttachmentTarget.Id == Id; } return false; } public static bool operator ==(RopeAttachmentTarget a, RopeAttachmentTarget b) { if (a.Index == b.Index) { return a.Id == b.Id; } return false; } public static bool operator !=(RopeAttachmentTarget a, RopeAttachmentTarget b) { if (a.Index == b.Index) { return a.Id != b.Id; } return true; } } public float m_maxRopeDistance = 64f; internal LineRenderer m_rope; internal ZNetView m_nview; internal Rigidbody m_rigidbody; public static RopeAnchorComponent m_draggingRopeFrom; private List<Rope> m_ropes = new List<Rope>(); private List<Rope> m_updatingRopes = new List<Rope>(); private uint m_zdoDataRevision; private float m_lastRopeCheckTime; internal static GameObject m_draggingRopeTo; private static readonly Dictionary<string, string[]> m_attachmentPoints = GetAttachmentPoints(); public void Awake() { m_rigidbody = ((Component)this).GetComponentInParent<Rigidbody>(); m_rope = ((Component)this).GetComponent<LineRenderer>(); m_nview = ((Component)this).GetComponent<ZNetView>(); WearNTear component = ((Component)this).GetComponent<WearNTear>(); component.m_onDestroyed = (Action)Delegate.Combine(component.m_onDestroyed, new Action(DestroyAllRopes)); LoadFromZDO(); } private void DestroyAllRopes() { while (m_ropes.Count > 0) { RemoveRopeAt(0); } } public string GetHoverName() { return ""; } public string GetHoverText() { if ((Object)(object)m_draggingRopeTo != (Object)(object)this) { return Localization.instance.Localize("[<color=yellow><b>$KEY_Use</b></color>] $mb_rope_anchor_attach_to"); } return Localization.instance.Localize("[<color=yellow><b>$KEY_Use</b></color>] $mb_rope_anchor_attach"); } public bool Interact(Humanoid user, bool hold, bool alt) { if (!Object.op_Implicit((Object)(object)m_draggingRopeFrom)) { m_draggingRopeFrom = this; ((Renderer)m_rope).enabled = true; } else if ((Object)(object)m_draggingRopeFrom == (Object)(object)this) { if ((Object)(object)m_draggingRopeTo != (Object)(object)this) { AttachRope(m_draggingRopeTo, GetIndexAtLocation(m_draggingRopeTo)); } m_draggingRopeFrom = null; ((Renderer)m_rope).enabled = false; } else { m_draggingRopeFrom.AttachRope(this); ((Renderer)m_draggingRopeFrom.m_rope).enabled = false; m_draggingRopeFrom = null; ((Renderer)m_rope).enabled = false; } return true; } private static Dictionary<string, string[]> GetAttachmentPoints() { Dictionary<string, string[]> dictionary = new Dictionary<string, string[]>(); dictionary.Add("Karve(Clone)", new string[5] { "ship/ropes/mastrope", "ship/ropes/RopeAttachLeft_bottom_front", "ship/ropes/RopeAttachLeft_bottom_back", "ship/ropes/RopeAttachRight_bottom_front (1)", "ship/ropes/RopeAttachRight_bottom_back (1)" }); dictionary.Add("VikingShip(Clone)", new string[8] { "interactive/front", "interactive/mast", "interactive/ladder_right", "interactive/ladder_left", "ship/visual/ropes/RopeAttachLeft_bottom_front", "ship/visual/ropes/RopeAttachLeft_bottom_back", "ship/visual/ropes/RopeAttachRight_bottom_front (1)", "ship/visual/ropes/RopeAttachRight_bottom_back (1)" }); dictionary.Add("Deer(Clone)", new string[1] { "Visual/CG/Pelvis/Spine/Spine1/Spine2/Neck" }); dictionary.Add("Boar(Clone)", new string[1] { "Visual/CG/Pelvis/Spine/Spine1/Spine2/Neck" }); dictionary.Add("Boar_piggy(Clone)", new string[1] { "Visual/CG/Pelvis/Spine/Spine1/Spine2/Neck" }); dictionary.Add("Neck(Clone)", new string[1] { "Visual/Armature/Hips/Spine/Spine1/Neck" }); return dictionary; } private Transform GetAttachmentTransform(GameObject go, RopeAttachmentTarget target) { if (m_attachmentPoints.TryGetValue(((Object)go).name, out var value) && target.Index >= 0 && value.Length > target.Index) { Transform val = go.transform.Find(value[target.Index]); if (Object.op_Implicit((Object)(object)val)) { return val; } } return go.transform; } private byte GetIndexAtLocation(GameObject go) { //IL_0034: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) ZNetView componentInParent = go.GetComponentInParent<ZNetView>(); if (!Object.op_Implicit((Object)(object)componentInParent)) { return 0; } if (m_attachmentPoints.TryGetValue(((Object)((Component)componentInParent).gameObject).name, out var value)) { Vector3 position = ((Component)Player.m_localPlayer).transform.position; byte result = 0; float num = float.MaxValue; for (int i = 0; i < value.Length; i++) { string text = value[i]; Transform val = ((Component)componentInParent).transform.Find(text); if (Object.op_Implicit((Object)(object)val)) { Vector3 val2 = position - val.position; float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; if (sqrMagnitude < num) { result = (byte)i; num = sqrMagnitude; } } } return result; } return 0; } private void AttachRope(GameObject gameObject, byte index) { ZNetView componentInParent = gameObject.GetComponentInParent<ZNetView>(); if (Object.op_Implicit((Object)(object)componentInParent) && componentInParent.m_zdo != null) { ZLog.Log((object)$"AttachRope {index}"); RopeAttachmentTarget target = new RopeAttachmentTarget(ZDOPersistantID.Instance.GetOrCreatePersistantID(componentInParent.m_zdo), index); if (!RemoveRopeWithID(target)) { CreateNewRope(target); SaveToZDO(); CheckRopes(); } } } private void AttachRope(RopeAnchorComponent ropeAnchorComponent) { int orCreatePersistantID = ZDOPersistantID.Instance.GetOrCreatePersistantID(ropeAnchorComponent.GetParentZDO()); if (!RemoveRopeWithID(new RopeAttachmentTarget(orCreatePersistantID, 0)) && !((Object)(object)ropeAnchorComponent == (Object)(object)this) && !ropeAnchorComponent.RemoveRopeWithID(new RopeAttachmentTarget(orCreatePersistantID, 0))) { CreateNewRope(new RopeAttachmentTarget(orCreatePersistantID, 0)); SaveToZDO(); CheckRopes(); } } private void CreateNewRope(RopeAttachmentTarget target) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) Rope rope = new Rope(); rope.m_ropeAnchorTarget = target; rope.m_ropeObject = new GameObject("MBRope"); rope.m_ropeObject.layer = LayerMask.NameToLayer("piece_nonsolid"); rope.m_collider = rope.m_ropeObject.AddComponent<BoxCollider>(); rope.m_collider.size = new Vector3(0.1f, 0.1f, 0.1f); rope.m_ropeComponent = rope.m_ropeObject.AddComponent<RopeComponent>(); rope.m_rope = rope.m_ropeObject.AddComponent<LineRenderer>(); rope.m_rope.widthMultiplier = m_rope.widthMultiplier; ((Renderer)rope.m_rope).material = ((Renderer)m_rope).material; rope.m_rope.textureMode = (LineTextureMode)1; rope.m_ropeObject.transform.SetParent(((Component)this).transform.parent); rope.m_ropeObject.transform.localPosition = Vector3.zero; m_ropes.Add(rope); } private ZDO GetParentZDO() { if (!Object.op_Implicit((Object)(object)m_nview) || m_nview.m_zdo == null) { return null; } return m_nview.m_zdo; } private bool RemoveRopeWithID(RopeAttachmentTarget target) { for (int i = 0; i < m_ropes.Count; i++) { if (m_ropes[i].m_ropeAnchorTarget == target) { RemoveRopeAt(i); return true; } } return false; } private void SaveToZDO() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown if (Object.op_Implicit((Object)(object)m_nview) && m_nview.m_zdo != null) { ZPackage val = new ZPackage(); byte b = 2; val.Write(b); for (int i = 0; i < m_ropes.Count; i++) { val.Write(m_ropes[i].m_ropeAnchorTarget.Id); val.Write(m_ropes[i].m_ropeAnchorTarget.Index); } m_nview.m_zdo.Set("MBRopeAnchor_Ropes", val.GetArray()); } } private void LoadFromZDO() { if (Object.op_Implicit((Object)(object)m_nview) && m_nview.m_zdo != null) { List<RopeAttachmentTarget> list = new List<RopeAttachmentTarget>(); GetRopesFromZDO(list); for (int i = 0; i < list.Count; i++) { CreateNewRope(list[i]); } } } public bool UseItem(Humanoid user, ItemData item) { return false; } public void LateUpdate() { //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_0146: 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_015b: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)m_nview) || m_nview.m_zdo == null) { return; } if (!m_nview.IsOwner() && m_nview.m_zdo.DataRevision != m_zdoDataRevision) { UpdateRopesFromZDO(); } if (((Renderer)m_rope).enabled && Object.op_Implicit((Object)(object)Player.m_localPlayer)) { m_rope.SetPosition(0, ((Component)this).transform.position); if (Object.op_Implicit((Object)(object)m_draggingRopeTo)) { byte indexAtLocation = GetIndexAtLocation(m_draggingRopeTo); Transform attachmentTransform = GetAttachmentTransform(m_draggingRopeTo, new RopeAttachmentTarget(0, indexAtLocation)); if (Object.op_Implicit((Object)(object)attachmentTransform)) { m_rope.SetPosition(1, attachmentTransform.position); } } else { m_rope.SetPosition(1, ((Component)((Humanoid)Player.m_localPlayer).m_visEquipment.m_rightHand).transform.position); } } if (Time.time - m_lastRopeCheckTime > 2f) { CheckRopes(); m_lastRopeCheckTime = Time.time; } for (int i = 0; i < m_updatingRopes.Count; i++) { Rope rope = m_updatingRopes[i]; if (Object.op_Implicit((Object)(object)rope.m_ropeObject) && Object.op_Implicit((Object)(object)rope.m_ropeTarget)) { Vector3 val = ((Component)this).transform.position - rope.m_targetTransform.position; float magnitude = ((Vector3)(ref val)).magnitude; if (m_nview.IsOwner() && (magnitude > m_maxRopeDistance || magnitude > rope.m_ropeAttachDistance + 8f)) { RemoveUpdatingRopeAt(i); continue; } rope.m_rope.SetPosition(0, ((Component)this).transform.position); rope.m_rope.SetPosition(1, rope.m_targetTransform.position); } else { m_updatingRopes.RemoveAt(i); i--; } } } private void CheckRopes() { //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: 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_014c: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: 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_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < m_ropes.Count; i++) { Rope rope = m_ropes[i]; if (Object.op_Implicit((Object)(object)rope.m_ropeTarget)) { continue; } rope.m_ropeTarget = ZDOPersistantID.Instance.GetGameObject(rope.m_ropeAnchorTarget.Id); if (!Object.op_Implicit((Object)(object)rope.m_ropeTarget)) { if (ZNet.instance.IsServer() && ZDOPersistantID.Instance.GetZDO(rope.m_ropeAnchorTarget.Id) == null) { RemoveRopeAt(i); i--; } continue; } Transform attachmentTransform = GetAttachmentTransform(rope.m_ropeTarget, rope.m_ropeAnchorTarget); Vector3 val = ((Component)this).transform.position - attachmentTransform.position; rope.m_ropeAttachDistance = ((Vector3)(ref val)).magnitude; rope.m_targetTransform = attachmentTransform; Rigidbody componentInParent = rope.m_ropeTarget.GetComponentInParent<Rigidbody>(); if (Object.op_Implicit((Object)(object)componentInParent)) { SpringJoint spring = rope.m_ropeComponent.GetSpring(); Rigidbody component = ((Component)rope.m_ropeComponent).GetComponent<Rigidbody>(); component.isKinematic = true; component.useGravity = false; spring.maxDistance = rope.m_ropeAttachDistance + 2f; spring.minDistance = 0f; spring.spring = 10000f; ((Joint)spring).connectedBody = componentInParent; ((Joint)spring).autoConfigureConnectedAnchor = false; ((Joint)spring).anchor = ((Component)component).transform.InverseTransformPoint(((Component)this).transform.position); ((Joint)spring).connectedAnchor = ((Component)componentInParent).transform.InverseTransformPoint(attachmentTransform.position); } if ((!Object.op_Implicit((Object)(object)componentInParent) && (Object)(object)rope.m_ropeTarget.transform.parent == (Object)(object)((Component)this).transform.parent) || (Object)(object)componentInParent == (Object)(object)m_rigidbody) { rope.m_rope.useWorldSpace = false; rope.m_rope.SetPosition(0, ((Component)rope.m_rope).transform.InverseTransformPoint(((Component)this).transform.position)); rope.m_rope.SetPosition(1, ((Component)rope.m_rope).transform.InverseTransformPoint(rope.m_targetTransform.position)); } else { m_updatingRopes.Add(rope); } } } private void UpdateRopesFromZDO() { m_zdoDataRevision = m_nview.m_zdo.DataRevision; HashSet<RopeAttachmentTarget> hashSet = new HashSet<RopeAttachmentTarget>(); GetRopesFromZDO(hashSet); for (int i = 0; i < m_ropes.Count; i++) { Rope rope = m_ropes[i]; if (!hashSet.Contains(rope.m_ropeAnchorTarget)) { RemoveRopeAt(i); i--; } } foreach (RopeAttachmentTarget ropeId in hashSet) { if (!m_ropes.Any((Rope k) => k.m_ropeAnchorTarget == ropeId)) { CreateNewRope(ropeId); } } } public static int GetRopeTarget(ZDOID zdoid) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) ZDO zDO = ZDOMan.instance.GetZDO(zdoid); if (zDO != null) { return ZDOPersistantID.Instance.GetOrCreatePersistantID(zDO); } return ZDOPersistantID.ZDOIDToId(zdoid); } private void GetRopesFromZDO(ICollection<RopeAttachmentTarget> ropeIds) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_003c: Unknown result type (might be due to invalid IL or missing references) try { byte[] byteArray = m_nview.m_zdo.GetByteArray("MBRopeAnchor_Ropes", (byte[])null); if (byteArray != null && byteArray.Length != 0) { ZPackage val = new ZPackage(byteArray); byte b = val.ReadByte(); while (val.GetPos() < val.Size()) { ropeIds.Add(new RopeAttachmentTarget((b <= 1) ? GetRopeTarget(val.ReadZDOID()) : val.ReadInt(), val.ReadByte())); } } } catch (Exception) { Logger.LogInfo((object)"ValheimRaft:RopeAnchorComponent - error gettting rope ZDO"); } } private void RemoveUpdatingRopeAt(int i) { int num = m_ropes.IndexOf(m_updatingRopes[i]); if (num != -1) { RemoveRopeAt(num); } } private void RemoveRopeAt(int i) { Object.Destroy((Object)(object)m_ropes[i].m_ropeObject); m_ropes.RemoveAt(i); SaveToZDO(); } } public class RudderComponent : MonoBehaviour { public ShipControlls m_controls; public Transform m_wheel; public List<Transform> m_spokes = new List<Transform>(); public Vector3 m_leftHandPosition = new Vector3(0f, 0f, 2f); public Vector3 m_rightHandPosition = new Vector3(0f, 0f, -2f); public float m_holdWheelTime = 0.7f; public float m_wheelRotationFactor = 4f; public float m_handIKSpeed = 0.2f; private float m_movingLeftAlpha; private float m_movingRightAlpha; private Transform m_currentLeftHand; private Transform m_currentRightHand; private Transform m_targetLeftHand; private Transform m_targetRightHand; public void UpdateSpokes() { m_spokes.Clear(); m_spokes.AddRange(from k in ((Component)m_wheel).GetComponentsInChildren<Transform>() where ((Object)((Component)k).gameObject).name.StartsWith("grabpoint") select k); } public void UpdateIK(Animator animator) { //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_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_008e: 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_0098: 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_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_011c: 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_0272: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_0288: 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_0131: Unknown result type (might be due to invalid IL or missing references) //IL_028d: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: 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) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_015e: 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_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016a: 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_030a: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_0323: 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_032c: Unknown result type (might be due to invalid IL or missing references) //IL_0332: 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_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_02f7: Unknown result type (might be due to invalid IL or missing references) //IL_0342: Unknown result type (might be due to invalid IL or missing references) //IL_0353: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)m_wheel)) { return; } if (!Object.op_Implicit((Object)(object)m_currentLeftHand)) { m_currentLeftHand = GetNearestSpoke(((Component)this).transform.TransformPoint(m_leftHandPosition)); } if (!Object.op_Implicit((Object)(object)m_currentRightHand)) { m_currentRightHand = GetNearestSpoke(((Component)this).transform.TransformPoint(m_rightHandPosition)); } if (!Object.op_Implicit((Object)(object)m_targetLeftHand) && !Object.op_Implicit((Object)(object)m_targetRightHand)) { Vector3 val = ((Component)this).transform.InverseTransformPoint(m_currentLeftHand.position); Vector3 val2 = ((Component)this).transform.InverseTransformPoint(m_currentRightHand.position); if (val.z < 0.2f) { Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(0f, (val.y > 0.5f) ? (-2f) : 2f, 0f); m_targetLeftHand = GetNearestSpoke(((Component)this).transform.TransformPoint(m_leftHandPosition + val3)); m_movingLeftAlpha = Time.time; } else if (val2.z > -0.2f) { Vector3 val4 = default(Vector3); ((Vector3)(ref val4))..ctor(0f, (val2.y > 0.5f) ? (-2f) : 2f, 0f); m_targetRightHand = GetNearestSpoke(((Component)this).transform.TransformPoint(m_rightHandPosition + val4)); m_movingRightAlpha = Time.time; } } float num = Mathf.Clamp01((Time.time - m_movingLeftAlpha) / m_handIKSpeed); float num2 = Mathf.Clamp01((Time.time - m_movingRightAlpha) / m_handIKSpeed); float num3 = Mathf.Sin(num * (float)Math.PI) * (1f - m_holdWheelTime) + m_holdWheelTime; float num4 = Mathf.Sin(num2 * (float)Math.PI) * (1f - m_holdWheelTime) + m_holdWheelTime; if (Object.op_Implicit((Object)(object)m_targetLeftHand) && num > 0.99f) { m_currentLeftHand = m_targetLeftHand; m_targetLeftHand = null; } if (Object.op_Implicit((Object)(object)m_targetRightHand) && num2 > 0.99f) { m_currentRightHand = m_targetRightHand; m_targetRightHand = null; } Vector3 val5 = (Object.op_Implicit((Object)(object)m_targetLeftHand) ? Vector3.Lerp(((Component)m_currentLeftHand).transform.position, ((Component)m_targetLeftHand).transform.position, num) : ((Component)m_currentLeftHand).transform.position); Vector3 val6 = (Object.op_Implicit((Object)(object)m_targetRightHand) ? Vector3.Lerp(((Component)m_currentRightHand).transform.position, ((Component)m_targetRightHand).transform.position, num2) : ((Component)m_currentRightHand).transform.position); Quaternion rotation; if (!Object.op_Implicit((Object)(object)m_targetLeftHand)) { rotation = ((Component)m_currentLeftHand).transform.rotation; _ = ((Quaternion)(ref rotation)).eulerAngles; } else { rotation = ((Component)m_currentLeftHand).transform.rotation; Vector3 eulerAngles = ((Quaternion)(ref rotation)).eulerAngles; rotation = ((Component)m_targetLeftHand).transform.rotation; Vector3.Slerp(eulerAngles, ((Quaternion)(ref rotation)).eulerAngles, num); } animator.SetIKPositionWeight((AvatarIKGoal)2, num3); animator.SetIKPosition((AvatarIKGoal)2, val5); animator.SetIKPositionWeight((AvatarIKGoal)3, num4); animator.SetIKPosition((AvatarIKGoal)3, val6); } public Transform GetNearestSpoke(Vector3 position) { //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_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) Transform val = null; float num = 0f; for (int i = 0; i < m_spokes.Count; i++) { Transform val2 = m_spokes[i]; Vector3 val3 = ((Component)val2).transform.position - position; float sqrMagnitude = ((Vector3)(ref val3)).sqrMagnitude; if ((Object)(object)val == (Object)null || sqrMagnitude < num) { val = val2; num = sqrMagnitude; } } return val; } } public class SailComponent : MonoBehaviour, Interactable, Hoverable { [Flags] public enum SailFlags { None = 0, AllowSailShrinking = 1, DisableCloth = 2 } [Flags] public enum SailLockedSide { None = 0, A = 1, B = 2, C = 4, D = 8, Everything = 0xF } private MastComponent m_mastComponent; public ZNetView m_nview; public SkinnedMeshRenderer m_mesh; public MeshCollider m_meshCollider; public Cloth m_sailCloth; public GameObject m_sailObject; public List<Vector3> m_sailCorners = new List<Vector3>(); public float m_sailSubdivision = 0.5f; public static List<SailComponent> m_sailComponents = new List<SailComponent>(); public static float m_maxDistanceSqr = 1024f; private static EditSailComponentPanel m_editPanel = null; internal static bool m_sailInit = true; public SailFlags m_sailFlags; public float m_windMultiplier = 10f; public float m_clothRandomAccelerationFactor = 0.5f; public SailLockedSide m_lockedSailSides; public SailLockedSide m_lockedSailCorners; public int m_patternHash; public Vector2 m_patternScale; public Vector2 m_patternOffset; public Color m_patternColor; public float m_patternRotation; public int m_logoHash; public Vector2 m_logoScale; public Vector2 m_logoOffset; public Color m_logoColor; public float m_logoRotation; private int m_mainHash; private Vector2 m_mainScale; private Vector2 m_mainOffset; private Color m_mainColor; public void Awake() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown m_sailComponents.Add(this); m_mastComponent = ((Component)this).GetComponent<MastComponent>(); m_sailObject = ((Component)((Component)this).transform.Find("Sail")).gameObject; m_sailCloth = m_sailObject.GetComponent<Cloth>(); if (Object.op_Implicit((Object)m_sailCloth)) { m_sailCloth.useTethers = false; m_sailCloth.useGravity = true; m_sailCloth.bendingStiffness = 1f; } m_mesh = m_sailObject.GetComponent<SkinnedMeshRenderer>(); m_meshCollider = m_sailObject.GetComponent<MeshCollider>(); m_nview = ((Component)this).GetComponent<ZNetView>(); if (m_sailInit) { LoadZDO(); } else if (!ZNetView.m_forceDisableInit) { ((MonoBehaviour)this).InvokeRepeating("LoadZDO", 5f, 5f); } } public void Update() { //IL_0005: 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) //IL_0011: 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_0028: 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) Vector3 windForce = EnvMan.instance.GetWindForce(); m_sailCloth.externalAcceleration = windForce * m_windMultiplier; m_sailCloth.randomAcceleration = windForce * (m_windMultiplier * m_clothRandomAccelerationFactor); } public void OnDestroy() { m_sailComponents.Remove(this); } public void SetAllowSailShrinking(bool allow) { if (Object.op_Implicit((Object)(object)m_mastComponent)) { m_sailFlags = (allow ? (m_sailFlags | SailFlags.AllowSailShrinking) : (m_sailFlags & ~SailFlags.AllowSailShrinking)); m_mastComponent.m_allowSailShrinking = allow; } } public void SetDisableCloth(bool allow) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown if (Object.op_Implicit((Object)(object)m_mastComponent)) { m_sailFlags = (allow ? (m_sailFlags | SailFlags.DisableCloth) : (m_sailFlags & ~SailFlags.DisableCloth)); m_mastComponent.m_disableCloth = allow; if (Object.op_Implicit((Object)m_sailCloth) && m_sailCloth.enabled != !allow) { m_sailCloth.enabled = !allow; } } } public void LoadFromMaterial() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: 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) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) Material sailMaterial = GetSailMaterial(); Texture texture = sailMaterial.GetTexture("_MainTex"); if (CustomTextur