Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of AutoFollowPath v1.6.7
plugins\AutoFollowPath.dll
Decompiled a year agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Jotunn; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("JotunnModStub")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("JotunnModStub")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")] [assembly: AssemblyFileVersion("0.0.1.0")] [assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.1.0")] namespace AutoFollowPath { internal enum GroundType { Terrain, Path, Unknown } [BepInPlugin("org.bepinex.plugins.bid.autofollowpath", "AutoFollowPath", "1.6.7")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] internal class AutoFollowPath : BaseUnityPlugin { internal class DebugObject { public Vector3 source; public Vector3 target; public float weight; public bool colorError; public bool slopeError; public Color targetColor; public float targetHeight; public bool collission; public bool onStructure; public bool isCheck; public bool succeeded; } public const string PluginGUID = "org.bepinex.plugins.bid.autofollowpath"; public const string PluginName = "AutoFollowPath"; public const string PluginVersion = "1.6.7"; public static ConfigEntry<bool> GlobalSprintToggleConfig; public static ConfigEntry<float> StaminaMinThresholdConfig; public static ConfigEntry<int> UpdateTimeMillisConfig; public static ConfigEntry<int> MaxAngleConfig; public static ConfigEntry<int> NumAnglesConfig; public static ConfigEntry<int> MaxDistanceConfig; public static ConfigEntry<int> PathPointsConfig; public static ConfigEntry<float> PathToleranceConfig; public static ConfigEntry<float> AngleWeightFactorConfig; public static ConfigEntry<float> DistanceWeightFactorConfig; public static ConfigEntry<float> MaxInclineConfig; public static ConfigEntry<bool> PavedOnlyConfig; public static ConfigEntry<bool> EnabledConfig; public static ConfigEntry<bool> VisualDebugConfig; public static ConfigEntry<float> HeightmapSearchRadiusConfig; public static ConfigEntry<float> RaycastHeightConfig; public static ConfigEntry<float> CollissionHeightIncreaseConfig; public static ConfigEntry<float> CollissionRayLengthDownConfig; public static ConfigEntry<float> NearCollissionDetectionAngleConfig; public static ConfigEntry<float> NearCollissionCorrectionAngleConfig; public static ConfigEntry<float> NearCollissionDetectionLengthScaleConfig; public static ConfigEntry<float> RidingDistanceFactorConfig; public static ConfigEntry<bool> NearCollissionDetectionEnabledConfig; public static ConfigEntry<bool> EvadeJumpEnabledConfig; public static ConfigEntry<float> MountSpeedModifierFactorConfig; public static ConfigEntry<float> MountSpeedGroupModifierFactorConfig; public static ConfigEntry<float> MaxMountSpeedGroupModifierFactorConfig; public static ConfigEntry<float> MountStaminaModifierFactorConfig; public static ConfigEntry<float> MountStaminaGroupModifierFactorConfig; public static ConfigEntry<float> MaxMountStaminaGroupModifierFactorConfig; public static ConfigEntry<int> FellowRiderDistanceConfig; public static ConfigEntry<KeyboardShortcut> AutoSprintShortcut; public static ButtonConfig AutoSprintButtonConfig; private static Shader LegacyShader = null; private static Material LineMaterial = null; public static bool IsSprint = false; public static bool IsExhausted = false; public static Vector3 InitialMoveDir = Vector3.zero; public static float WaterHeight = 0f; public static LiquidVolume LiquidVolume = null; public static Vector3 LastPos = Vector3.zero; public static GroundType StartType = GroundType.Unknown; public static string[] mask_default = new string[9] { "piece", "terrain", "piece_nonsolid", "static_solid", "Default", "vehicle", "pathblocker", "character", "Default_small" }; public static string[] mask_riding = new string[7] { "piece", "terrain", "piece_nonsolid", "static_solid", "Default", "vehicle", "pathblocker" }; private float m_updateTimer; private readonly Harmony harmony = new Harmony("org.bepinex.plugins.bid.autofollowpath"); public static CustomLocalization Localization = LocalizationManager.Instance.GetLocalization(); private static SortedList<float, SortedList<int, DebugObject>> rayCasts = new SortedList<float, SortedList<int, DebugObject>>(); private static List<LineRenderer> lineRendrerList = new List<LineRenderer>(); private static List<GameObject> textList = new List<GameObject>(); public static Character m_mount = null; public static int m_fellowRiderCount = 0; private static bool IsPath(Color color) { //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_001d: 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) if (ColorsAreEqual(color, Heightmap.m_paintMaskPaved)) { return true; } if (PavedOnlyConfig.Value) { return false; } if (ColorsAreEqual(color, Heightmap.m_paintMaskDirt)) { return true; } return false; } private static bool ColorsAreEqual(Color color1, Color color2) { //IL_000b: 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_0020: 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_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) float value = PathToleranceConfig.Value; if (Mathf.Abs(color1.r - color2.r) <= value && Mathf.Abs(color1.g - color2.g) <= value && Mathf.Abs(color1.b - color2.b) <= value) { return Mathf.Abs(color1.a - color2.a) <= value; } return false; } private static bool CollissionDetected(Vector3 targetPosition, float lastHeight, float targetHeight, Vector3 lastPosition, Vector3 direction, float pathLength, out float heightDiff, DebugObject dobj) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006c: 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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_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_00a3: 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_00a7: 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_0079: 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_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0148: 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_018b: 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_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0280: 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_0229: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_0326: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0364: Unknown result type (might be due to invalid IL or missing references) //IL_0369: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) int mask = LayerMask.GetMask(mask_default); if (IsRiding()) { mask = LayerMask.GetMask(mask_riding); } heightDiff = 0f; float value = RaycastHeightConfig.Value; lastPosition.y = lastHeight + value; targetPosition.y = targetHeight + value; direction = targetPosition - lastPosition; ((Vector3)(ref direction)).Normalize(); pathLength = Vector3.Distance(lastPosition, targetPosition); RaycastHit val = default(RaycastHit); bool flag = Physics.Raycast(lastPosition, direction, ref val, pathLength, mask); Vector3 val2 = targetPosition; if (flag) { val2 = ((RaycastHit)(ref val)).point; } val2.y += CollissionHeightIncreaseConfig.Value; val2 += direction * 0.005f; RaycastHit val3 = default(RaycastHit); bool num = Physics.Raycast(val2, Vector3.down, ref val3, CollissionRayLengthDownConfig.Value, mask); if (VisualDebugConfig.Value) { LineRenderer val4 = new GameObject("Line").AddComponent<LineRenderer>(); ((Renderer)val4).material = LineMaterial; val4.startColor = Color.black; val4.endColor = Color.black; val4.startWidth = 0.02f; val4.endWidth = 0.02f; val4.positionCount = 2; val4.useWorldSpace = true; val4.SetPosition(0, val2); val4.SetPosition(1, val2 + Vector3.down * CollissionRayLengthDownConfig.Value); lineRendrerList.Add(val4); } if (!num) { dobj.slopeError = true; dobj.target.y -= CollissionRayLengthDownConfig.Value; return true; } if (((RaycastHit)(ref val3)).point.y < ((RaycastHit)(ref val)).point.y) { ((RaycastHit)(ref val3)).point = val2; } heightDiff = ((RaycastHit)(ref val3)).point.y - (lastPosition.y - value); float num2 = pathLength; if (flag) { num2 = ((RaycastHit)(ref val)).distance; } if ((((Component)((RaycastHit)(ref val3)).collider).gameObject.layer != 11 || !((Character)Player.m_localPlayer).m_running || heightDiff < -0.5f) && heightDiff != 0f && num2 / Math.Abs(heightDiff) < MaxInclineConfig.Value) { dobj.target = ((RaycastHit)(ref val3)).point; dobj.targetHeight = dobj.target.y; if (heightDiff < 0f) { dobj.slopeError = true; } return true; } if (((Component)((RaycastHit)(ref val3)).collider).gameObject.layer == 11) { Heightmap h; Color color = (dobj.targetColor = GetHitColor(targetPosition, out h)); float num3 = default(float); Heightmap.GetHeight(targetPosition, ref num3); if ((Object)(object)h != (Object)null && h.GetLava(targetPosition) > 0.2f) { dobj.colorError = true; return true; } if (num3 <= GetLiquidHeight(targetPosition)) { dobj.colorError = true; return true; } if (num3 + ((Character)Player.m_localPlayer).m_swimDepth / 2f <= WaterHeight) { dobj.colorError = true; return true; } if (StartType == GroundType.Path && !IsPath(color)) { dobj.colorError = true; return true; } return false; } if ((Object)(object)((Component)((RaycastHit)(ref val3)).collider).gameObject.GetComponentInParent<Piece>() == (Object)null && StartType == GroundType.Path) { dobj.target = ((RaycastHit)(ref val3)).point; dobj.targetHeight = dobj.target.y; dobj.slopeError = true; return true; } if (StartType == GroundType.Terrain && !((Character)Player.m_localPlayer).m_running) { dobj.target = ((RaycastHit)(ref val3)).point; dobj.targetHeight = dobj.target.y; dobj.slopeError = true; return true; } return false; } private static float CountPathWeight(Vector3 startPoint, Vector3 direction, float angle, out DebugObject dobj, int to = 0, bool isCheck = false) { //IL_004d: 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_0050: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: 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_00c0: 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_00e0: 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) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) int num = to; int value = PathPointsConfig.Value; if (num == 0) { num = PathPointsConfig.Value; if (IsRiding() && !isCheck) { num = (int)((float)num * RidingDistanceFactorConfig.Value); } } float num2 = 0f; float num3 = (float)PathPointsConfig.Value / (float)value; Vector3 lastPosition = startPoint; float y = startPoint.y; float lastHeight = y; float num4 = 0f; dobj = new DebugObject(); if (isCheck) { num3 *= NearCollissionDetectionLengthScaleConfig.Value; } int i; for (i = 1; i <= num; i++) { Vector3 val = startPoint + direction * ((float)i * num3); y = (val.y += num4); dobj = new DebugObject(); if (isCheck) { dobj.isCheck = true; } dobj.target = val; dobj.weight = 0f; dobj.targetHeight = y; if (CollissionDetected(val, lastHeight, y, lastPosition, direction, num3, out var heightDiff, dobj)) { if (VisualDebugConfig.Value) { if (!dobj.slopeError && !dobj.colorError) { dobj.collission = true; } if (rayCasts[angle].ContainsKey(i)) { rayCasts[angle].Remove(i); } rayCasts[angle].Add(i, dobj); } break; } dobj.target.y += heightDiff; y += heightDiff; num4 += heightDiff; float num5 = Mathf.Clamp01(1f - Mathf.Abs(Vector3.Angle(direction, ((Component)Player.m_localPlayer).transform.forward)) / (float)MaxAngleConfig.Value * AngleWeightFactorConfig.Value); float num6 = Mathf.Clamp01(1f - (float)i * num3 / (float)MaxDistanceConfig.Value * DistanceWeightFactorConfig.Value); num2 += num5 + num6; if (VisualDebugConfig.Value) { dobj.weight = num2; if (rayCasts[angle].ContainsKey(i)) { rayCasts[angle].Remove(i); } rayCasts[angle].Add(i, dobj); } lastHeight = y; lastPosition = val; } return i; } public static bool IsRiding(IDoodadController dobj = null) { if (dobj == null) { dobj = Player.m_localPlayer.m_doodadController; } if (dobj == null) { return false; } if (dobj is Sadle) { return true; } return false; } private static Vector3 GetStartPoint(out Vector3 lookDir) { //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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0072: 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) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) StartType = GroundType.Unknown; Vector3 position = ((Component)Player.m_localPlayer).transform.position; lookDir = ((Component)Player.m_localPlayer).transform.forward; if (IsRiding()) { Component controlledComponent = Player.m_localPlayer.m_doodadController.GetControlledComponent(); position = controlledComponent.transform.position; lookDir = controlledComponent.transform.forward; } Vector3 val = position; val.y += 0.1f; RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(val, Vector3.down, ref val2, CollissionRayLengthDownConfig.Value, LayerMask.GetMask(mask_default))) { position.y = ((RaycastHit)(ref val2)).point.y; if (((Component)((RaycastHit)(ref val2)).collider).gameObject.layer == 11) { StartType = GroundType.Terrain; if (IsPath(GetHitColor(((RaycastHit)(ref val2)).point, out var _))) { StartType = GroundType.Path; } } else if ((Object)(object)((Component)((RaycastHit)(ref val2)).collider).GetComponentInParent<Piece>() != (Object)null) { StartType = GroundType.Path; } } if (InitialMoveDir != Vector3.zero && StartType == GroundType.Terrain) { lookDir = InitialMoveDir; } return position; } private static Vector3 CalculateMoveDir() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_013e: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0132: 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_013b: 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_00c8: 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_00e1: Unknown result type (might be due to invalid IL or missing references) Vector3 lookDir; Vector3 startPoint = GetStartPoint(out lookDir); Vector3 val = lookDir; float num = 0f; float angle = 0f; DebugObject debugObject = null; int num2 = PathPointsConfig.Value; rayCasts.Clear(); if (IsRiding()) { num2 = (int)((float)num2 * RidingDistanceFactorConfig.Value); } float num3 = (float)MaxAngleConfig.Value / (float)NumAnglesConfig.Value; for (int i = 0; i < NumAnglesConfig.Value; i++) { for (int j = -1; j <= 1; j += 2) { float num4 = (float)i * num3 * (float)j; Vector3 val2 = Quaternion.Euler(0f, num4, 0f) * lookDir; val2.y = 0f; ((Vector3)(ref val2)).Normalize(); if (VisualDebugConfig.Value) { rayCasts.Add(num4, new SortedList<int, DebugObject>()); } DebugObject dobj; float num5 = CountPathWeight(startPoint, val2, num4, out dobj); if (num5 > num) { num = num5; val = val2; angle = num4; debugObject = dobj; if (num > (float)num2) { break; } } if (i == 0) { break; } } if (num > (float)num2) { break; } } if (val == lookDir && debugObject.colorError) { CheckPath(startPoint, val, angle); return lookDir; } return CheckPath(startPoint, val, angle); } private static Vector3 CalcDirection(Vector3 direction, float angle) { //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_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) Vector3 result = Quaternion.Euler(0f, angle, 0f) * direction; result.y = 0f; ((Vector3)(ref result)).Normalize(); return result; } private static Vector3 CheckPath(Vector3 startPoint, Vector3 direction, float angle) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: 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_0106: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: 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_00f8: 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) if (!NearCollissionDetectionEnabledConfig.Value) { return direction; } float num = -1f * NearCollissionDetectionAngleConfig.Value; float value = NearCollissionDetectionAngleConfig.Value; Vector3 direction2 = CalcDirection(direction, num); Vector3 direction3 = CalcDirection(direction, value); if (VisualDebugConfig.Value) { if (!rayCasts.ContainsKey(num)) { rayCasts.Add(num, new SortedList<int, DebugObject>()); } if (!rayCasts.ContainsKey(value)) { rayCasts.Add(value, new SortedList<int, DebugObject>()); } } DebugObject dobj; float num2 = CountPathWeight(startPoint, direction2, num, out dobj, 1, isCheck: true); float num3 = CountPathWeight(startPoint, direction3, value, out dobj, 1, isCheck: true); if (num2 <= 1f && num3 > 1f) { return CalcDirection(direction, angle + NearCollissionCorrectionAngleConfig.Value); } if (num3 <= 1f && num2 > 1f) { return CalcDirection(direction, angle - NearCollissionCorrectionAngleConfig.Value); } if (num3 <= 1f && num2 <= 1f) { return CalcDirection(direction, angle - 180f); } return direction; } private static Color GetHitColor(Vector3 point, out Heightmap h) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_0072: Unknown result type (might be due to invalid IL or missing references) List<Heightmap> list = new List<Heightmap>(); Heightmap.FindHeightmap(point, HeightmapSearchRadiusConfig.Value, list); Color val = Heightmap.m_paintMaskNothing; h = null; int num = default(int); int num2 = default(int); foreach (Heightmap item in list) { item.WorldToVertex(point, ref num, ref num2); val = item.GetPaintMask(num, num2); h = item; if (IsPath(val)) { return val; } } return val; } private void Awake() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) Logger.LogInfo((object)"AutoFollowPath has landed"); CreateConfigValues(); AddInputs(); new Harmony("org.bepinex.plugins.bid.autofollowpath").PatchAll(); CreatureManager.OnVanillaCreaturesAvailable += ModifyAndCloneVanillaCreatures; } private void OnDestroy() { harmony.UnpatchSelf(); } private void AddInputs() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_0039: 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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown AutoSprintShortcut = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Client config", "AutoSprint", new KeyboardShortcut((KeyCode)304, Array.Empty<KeyCode>()), new ConfigDescription("keycode to toggle sprint", (AcceptableValueBase)null, Array.Empty<object>())); AutoSprintButtonConfig = new ButtonConfig { Name = "AutoSprint", ShortcutConfig = AutoSprintShortcut, HintToken = "sprint", ActiveInCustomGUI = true, ActiveInGUI = true }; InputManager.Instance.AddButton("org.bepinex.plugins.bid.autofollowpath", AutoSprintButtonConfig); } private void CreateConfigValues() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Expected O, but got Unknown //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Expected O, but got Unknown //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Expected O, but got Unknown //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Expected O, but got Unknown //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Expected O, but got Unknown //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Expected O, but got Unknown //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Expected O, but got Unknown //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Expected O, but got Unknown //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Expected O, but got Unknown //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Expected O, but got Unknown //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Expected O, but got Unknown //IL_02a1: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Expected O, but got Unknown //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Expected O, but got Unknown //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Expected O, but got Unknown //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0338: Expected O, but got Unknown //IL_035d: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Expected O, but got Unknown //IL_038c: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Expected O, but got Unknown //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_03c5: Expected O, but got Unknown //IL_03ea: Unknown result type (might be due to invalid IL or missing references) //IL_03f4: Expected O, but got Unknown //IL_0415: Unknown result type (might be due to invalid IL or missing references) //IL_041f: Expected O, but got Unknown //IL_0440: Unknown result type (might be due to invalid IL or missing references) //IL_044a: Expected O, but got Unknown //IL_0472: Unknown result type (might be due to invalid IL or missing references) //IL_0477: Unknown result type (might be due to invalid IL or missing references) //IL_047f: Expected O, but got Unknown //IL_047f: Unknown result type (might be due to invalid IL or missing references) //IL_0489: Expected O, but got Unknown //IL_04b1: Unknown result type (might be due to invalid IL or missing references) //IL_04b6: Unknown result type (might be due to invalid IL or missing references) //IL_04be: Expected O, but got Unknown //IL_04be: Unknown result type (might be due to invalid IL or missing references) //IL_04c8: Expected O, but got Unknown //IL_04ed: Unknown result type (might be due to invalid IL or missing references) //IL_04f2: Unknown result type (might be due to invalid IL or missing references) //IL_04fa: Expected O, but got Unknown //IL_04fa: Unknown result type (might be due to invalid IL or missing references) //IL_0504: Expected O, but got Unknown //IL_052c: Unknown result type (might be due to invalid IL or missing references) //IL_0531: Unknown result type (might be due to invalid IL or missing references) //IL_0539: Expected O, but got Unknown //IL_0539: Unknown result type (might be due to invalid IL or missing references) //IL_0543: Expected O, but got Unknown //IL_056b: Unknown result type (might be due to invalid IL or missing references) //IL_0570: Unknown result type (might be due to invalid IL or missing references) //IL_0578: Expected O, but got Unknown //IL_0578: Unknown result type (might be due to invalid IL or missing references) //IL_0582: Expected O, but got Unknown //IL_05aa: Unknown result type (might be due to invalid IL or missing references) //IL_05af: Unknown result type (might be due to invalid IL or missing references) //IL_05b7: Expected O, but got Unknown //IL_05b7: Unknown result type (might be due to invalid IL or missing references) //IL_05c1: Expected O, but got Unknown //IL_05e9: Unknown result type (might be due to invalid IL or missing references) //IL_05ee: Unknown result type (might be due to invalid IL or missing references) //IL_05f6: Expected O, but got Unknown //IL_05f6: Unknown result type (might be due to invalid IL or missing references) //IL_0600: Expected O, but got Unknown ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; GlobalSprintToggleConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Client config", "GlobalSprintToggle", false, new ConfigDescription("Only sprint in autorun mode, or also in normal run mode (global)", (AcceptableValueBase)null, Array.Empty<object>())); StaminaMinThresholdConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "StaminaMinThreshold", 30f, new ConfigDescription("Stop sprinting if stamina is below this value", (AcceptableValueBase)null, Array.Empty<object>())); UpdateTimeMillisConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Client config", "UpdateMillis", 200, new ConfigDescription("Update direction every x milliseconds", (AcceptableValueBase)null, Array.Empty<object>())); MaxAngleConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Client config", "MaxAngle", 90, new ConfigDescription("Max angle to look for a path", (AcceptableValueBase)null, Array.Empty<object>())); NumAnglesConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Client config", "NumAngles", 10, new ConfigDescription("Number of angles to check a path between current forward direction and MaxAngle", (AcceptableValueBase)null, Array.Empty<object>())); MaxDistanceConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Client config", "MaxDistance", 8, new ConfigDescription("Max distance ahead of player to check for a path per angle", (AcceptableValueBase)null, Array.Empty<object>())); PathPointsConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Client config", "PathPoints", 10, new ConfigDescription("Number of points to check between player position and MaxDistance per angle", (AcceptableValueBase)null, Array.Empty<object>())); PathToleranceConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "PathTolerance", 0.3f, new ConfigDescription("Tolerance a point is still considered a path (0-1)", (AcceptableValueBase)null, Array.Empty<object>())); AngleWeightFactorConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "AngleWeightFactor", 0.3f, new ConfigDescription("weight higher angles less (0-1)", (AcceptableValueBase)null, Array.Empty<object>())); MaxInclineConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "MaxInclineRatio", 1f, new ConfigDescription("maximum ratio forward/height", (AcceptableValueBase)null, Array.Empty<object>())); DistanceWeightFactorConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "DistanceWeightFactor", 0.5f, new ConfigDescription("weight path farer away less (0-1)", (AcceptableValueBase)null, Array.Empty<object>())); PavedOnlyConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Client config", "PavedOnly", false, new ConfigDescription("Only consider paved roads as paths", (AcceptableValueBase)null, Array.Empty<object>())); EnabledConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Client config", "enabled", true, new ConfigDescription("enable or disable the mod", (AcceptableValueBase)null, Array.Empty<object>())); VisualDebugConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Client config", "VisualDebug", false, new ConfigDescription("enable or disable visual debugging", (AcceptableValueBase)null, Array.Empty<object>())); HeightmapSearchRadiusConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "HeightmapSearchRadius", 0.5f, new ConfigDescription("radius to look for heightmaps (internal)", (AcceptableValueBase)null, Array.Empty<object>())); RaycastHeightConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "RaycastHeight", 0.5f, new ConfigDescription("height of the raycast for horizontal collission detection", (AcceptableValueBase)null, Array.Empty<object>())); CollissionHeightIncreaseConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "CollissionHeightIncrease", 1.25f, new ConfigDescription("height of the vertical collission detectcion line = hitpoint height + CollissionHeightIncrease ", (AcceptableValueBase)null, Array.Empty<object>())); CollissionRayLengthDownConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "CollissonRayLengthDown", 4f, new ConfigDescription("length of the vertical raycast for collission detection going down", (AcceptableValueBase)null, Array.Empty<object>())); NearCollissionDetectionAngleConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "NearCollissionDetectionAngle", 30f, new ConfigDescription("angle for near collission detection", (AcceptableValueBase)null, Array.Empty<object>())); NearCollissionCorrectionAngleConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "NearCollissionCorrectionAngle", 30f, new ConfigDescription("if near collissin is detected, correct found path by this angle", (AcceptableValueBase)null, Array.Empty<object>())); NearCollissionDetectionLengthScaleConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "NearCollissionDetectionLengthScale", 1f, new ConfigDescription("scale factor of the length of the near collission detection ray", (AcceptableValueBase)null, Array.Empty<object>())); RidingDistanceFactorConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Client config", "RidingDistanceFactor", 2f, new ConfigDescription("increase MaxDistance by this multiplier when riding", (AcceptableValueBase)null, Array.Empty<object>())); NearCollissionDetectionEnabledConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Client config", "NearCollissionDetectionEnabledDeprecated", false, new ConfigDescription("Near collission detection enabled (replaced by evade jump)", (AcceptableValueBase)null, Array.Empty<object>())); EvadeJumpEnabledConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Client config", "EvadeJumpEnabled", true, new ConfigDescription("Jump if stuck somewhere - if disabled, enable NearCollissionDetectionEnabledDeprecated instead.", (AcceptableValueBase)null, Array.Empty<object>())); MountSpeedModifierFactorConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Server config", "MountSpeedBaseModifier", 1f, new ConfigDescription("Mount run speed base modifier factor", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); MountStaminaModifierFactorConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Server config", "MountStaminaUsageBaseModifier", 1f, new ConfigDescription("Stamina usage modifier factor for mounts", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); FellowRiderDistanceConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Server config", "FellowRiderDistance", 70, new ConfigDescription("Radius to search fellow riders", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); MountSpeedGroupModifierFactorConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Server config", "MountSpeedGroupModifier", 0.1f, new ConfigDescription("Modify mount speed per fellow rider", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); MaxMountSpeedGroupModifierFactorConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Server config", "MaxMountSpeedGroupModifier", 1f, new ConfigDescription("Maximum mount speed group bonus", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); MountStaminaGroupModifierFactorConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Server config", "MountStaminaUsageGroupModifier", 0.1f, new ConfigDescription("Modify stamina usage per fellow rider", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); MaxMountStaminaGroupModifierFactorConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Server config", "MaxMountStaminaUsageGroupModifier", 0.9f, new ConfigDescription("Maximum stamina usage group reduction", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = true } })); } public static float GetWaterHeight(Vector3 position) { //IL_0014: 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) int mask = LayerMask.GetMask(new string[1] { "WaterVolume" }); Collider[] array = Physics.OverlapSphere(position, 2f, mask); float result = 0f; Collider[] array2 = array; for (int i = 0; i < array2.Length; i++) { WaterVolume component = ((Component)array2[i]).GetComponent<WaterVolume>(); if ((Object)(object)component != (Object)null) { result = component.GetWaterSurface(position, 1f); break; } } return result; } public static LiquidVolume GetLiquidVolume(Vector3 position) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) int mask = LayerMask.GetMask(new string[1] { "WaterVolume" }); Collider[] array = Physics.OverlapSphere(position, 2f, mask); for (int i = 0; i < array.Length; i++) { Transform parent = ((Component)array[i]).transform.parent; LiquidVolume val = ((parent != null) ? ((Component)parent).GetComponentInChildren<LiquidVolume>() : null); if ((Object)(object)val != (Object)null) { return val; } } return null; } public static float GetLiquidHeight(Vector3 position) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)LiquidVolume == (Object)null) { return 0f; } return LiquidVolume.GetSurface(position); } private static void VisualDebug() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0045: 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_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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0126: 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_014c: 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_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_021a: Unknown result type (might be due to invalid IL or missing references) CalculateMoveDir(); foreach (KeyValuePair<float, SortedList<int, DebugObject>> rayCast in rayCasts) { Vector3 lookDir; Vector3 val = GetStartPoint(out lookDir); if (Player.m_localPlayer.m_doodadController != null) { val = Player.m_localPlayer.m_doodadController.GetControlledComponent().transform.position; } val.y += RaycastHeightConfig.Value; foreach (KeyValuePair<int, DebugObject> item in rayCast.Value) { Vector3 target = item.Value.target; if (!item.Value.collission) { target.y += RaycastHeightConfig.Value; } LineRenderer val2 = new GameObject("Line").AddComponent<LineRenderer>(); ((Renderer)val2).material = LineMaterial; val2.startColor = Color.green; val2.endColor = Color.green; val2.startWidth = 0.02f; val2.endWidth = 0.02f; val2.positionCount = 2; val2.useWorldSpace = true; if (item.Value.colorError) { val2.startColor = Color.red; val2.endColor = Color.red; } if (item.Value.slopeError) { val2.startColor = Color.magenta; val2.endColor = Color.magenta; } if (item.Value.collission) { val2.startColor = Color.blue; val2.endColor = Color.blue; } if (item.Value.succeeded) { val2.startWidth = 0.05f; val2.endWidth = 0.05f; } if (item.Value.isCheck) { val2.startColor = Color.yellow; val2.endColor = Color.yellow; if (item.Value.collission) { val2.startWidth = 0.04f; val2.endWidth = 0.04f; val2.startColor = new Color(1f, 0.271f, 0f); val2.endColor = new Color(1f, 0.271f, 0f); } } val2.SetPosition(0, val); val2.SetPosition(1, target); val = target; lineRendrerList.Add(val2); } } } private int GetFellowRiderCount() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) int num = 0; int mask = LayerMask.GetMask(new string[2] { "character", "character_net" }); Collider[] array = Physics.OverlapSphere(((Component)Player.m_localPlayer).transform.position, (float)FellowRiderDistanceConfig.Value, mask); for (int i = 0; i < array.Length; i++) { Sadle componentInChildren = ((Component)array[i]).GetComponentInChildren<Sadle>(); if (!((Object)(object)componentInChildren == (Object)null) && componentInChildren.GetUser() != 0L) { num++; } } return num - 1; } private void Update() { //IL_00f0: 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_0126: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01be: 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_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0178: 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_0205: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) if (!EnabledConfig.Value) { return; } foreach (LineRenderer lineRendrer in lineRendrerList) { Object.Destroy((Object)(object)lineRendrer); } foreach (GameObject text in textList) { Object.Destroy((Object)(object)text); } lineRendrerList.Clear(); textList.Clear(); if ((Object)(object)Player.m_localPlayer != (Object)null && VisualDebugConfig.Value) { VisualDebug(); } if (!((Object)(object)Player.m_localPlayer != (Object)null) || ((Character)Player.m_localPlayer).IsDebugFlying() || (!Player.m_localPlayer.m_autoRun && !IsRiding())) { return; } if (ZInput.GetMouseButtonDown(1) || ZInput.GetMouseButtonUp(1)) { InitialMoveDir = ((Character)Player.m_localPlayer).m_lookDir; } m_updateTimer -= Time.fixedDeltaTime; if (!(m_updateTimer < 0f)) { return; } WaterHeight = GetWaterHeight(((Component)Player.m_localPlayer).transform.position); LiquidVolume = GetLiquidVolume(((Component)Player.m_localPlayer).transform.position); if (LastPos != Vector3.zero) { Vector3 val = LastPos - ((Component)Player.m_localPlayer).transform.position; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; if (EvadeJumpEnabledConfig.Value && sqrMagnitude < 0.02f && Player.m_localPlayer.m_stamina > StaminaMinThresholdConfig.Value) { ((Character)Player.m_localPlayer).Jump(true); } } Vector3 val2 = CalculateMoveDir(); m_mount = null; m_fellowRiderCount = GetFellowRiderCount(); IDoodadController doodadController = Player.m_localPlayer.m_doodadController; if (doodadController != null) { if (doodadController is Sadle) { Sadle val3 = (Sadle)doodadController; m_mount = val3.m_character; val3.m_controlDir = val2; } } else { ((Character)Player.m_localPlayer).m_moveDir = val2; } m_updateTimer = (float)UpdateTimeMillisConfig.Value / 1000f; LastPos = ((Component)Player.m_localPlayer).transform.position; } private void ModifyAndCloneVanillaCreatures() { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown Shader[] array = Resources.FindObjectsOfTypeAll<Shader>(); foreach (Shader val in array) { if (((Object)val).name == "Legacy Shaders/Particles/Alpha Blended Premultiply") { LegacyShader = val; break; } } if ((Object)(object)LegacyShader == (Object)null) { MonoBehaviour.print((object)"legacy shader not found"); } else { LineMaterial = new Material(LegacyShader); } CreatureManager.OnVanillaCreaturesAvailable -= ModifyAndCloneVanillaCreatures; } } } namespace AutoFollowPath.Patches { [HarmonyPatch(typeof(Player), "SetControls")] public class Player_SetControls_patch { private static void Prefix(Player __instance, ref bool run, Vector3 movedir, bool autoRun) { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006f: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) if (AutoFollowPath.IsSprint && (AutoFollowPath.GlobalSprintToggleConfig.Value || __instance.m_autoRun)) { if (AutoFollowPath.IsExhausted && __instance.m_stamina >= __instance.m_maxStamina) { AutoFollowPath.IsExhausted = false; } if (!AutoFollowPath.IsExhausted && __instance.m_stamina > AutoFollowPath.StaminaMinThresholdConfig.Value) { run = true; } else { AutoFollowPath.IsExhausted = true; } } if (autoRun) { if (AutoFollowPath.InitialMoveDir == Vector3.zero) { AutoFollowPath.InitialMoveDir = ((Character)__instance).m_lookDir; } } else if (!__instance.m_autoRun && !AutoFollowPath.IsRiding()) { AutoFollowPath.InitialMoveDir = Vector3.zero; AutoFollowPath.LastPos = Vector3.zero; } } } [HarmonyPatch(typeof(Player), "Update")] public class Player_Update_patch { private static void Prefix(Player __instance) { //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) KeyboardShortcut value = AutoFollowPath.AutoSprintShortcut.Value; if ((((KeyboardShortcut)(ref value)).IsDown() || ZInput.GetButtonDown(AutoFollowPath.AutoSprintButtonConfig.Name)) && (AutoFollowPath.GlobalSprintToggleConfig.Value || __instance.m_autoRun)) { if (AutoFollowPath.IsSprint) { AutoFollowPath.IsExhausted = false; } AutoFollowPath.IsSprint = !AutoFollowPath.IsSprint; } } } [HarmonyPatch(typeof(Sadle), "UseStamina")] internal class Sadle_UseStamina_patch { private static void Prefix(ref float v) { v *= AutoFollowPath.MountStaminaModifierFactorConfig.Value; float num = AutoFollowPath.MountStaminaGroupModifierFactorConfig.Value * (float)AutoFollowPath.m_fellowRiderCount; if (num > AutoFollowPath.MaxMountStaminaGroupModifierFactorConfig.Value) { num = AutoFollowPath.MountStaminaGroupModifierFactorConfig.Value; } v *= 1f - num; } } [HarmonyPatch(typeof(Sadle), "ApplyControlls")] internal class Sadle_ApplyControlls_patch { private static void Prefix(Vector3 moveDir, Vector3 lookDir, bool run, bool autoRun, bool block, ref Sadle __instance) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (moveDir.z > 0f) { AutoFollowPath.InitialMoveDir = lookDir; } } } [HarmonyPatch(typeof(Character), "GetRunSpeedFactor")] internal class Character_GetRunSpeedFactor_patch { private static void Postfix(Character __instance, ref float __result) { if ((Object)(object)__instance == (Object)(object)AutoFollowPath.m_mount && __instance.HaveRider()) { __result *= AutoFollowPath.MountSpeedModifierFactorConfig.Value; float num = AutoFollowPath.MountSpeedGroupModifierFactorConfig.Value * (float)AutoFollowPath.m_fellowRiderCount; if (num > AutoFollowPath.MaxMountSpeedGroupModifierFactorConfig.Value) { num = AutoFollowPath.MaxMountSpeedGroupModifierFactorConfig.Value; } __result *= 1f + num; } } } }