using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = "")] [assembly: AssemblyVersion("0.0.0.0")] namespace DigDug; [BepInPlugin("com.antigravity.valheim.digdug", "DigDug", "1.0.0")] public class DigDugPlugin : BaseUnityPlugin { public const string PluginGUID = "com.antigravity.valheim.digdug"; public const string PluginName = "DigDug"; public const string PluginVersion = "1.0.0"; public static ManualLogSource Log; private Harmony harmony; private GameObject uiObject; private void Awake() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; DigDugConfig.Init(((BaseUnityPlugin)this).Config); DigDugReflection.Init(); harmony = new Harmony("com.antigravity.valheim.digdug"); harmony.PatchAll(); uiObject = new GameObject("DigDugUI"); uiObject.AddComponent(); Object.DontDestroyOnLoad((Object)(object)uiObject); ((BaseUnityPlugin)this).Logger.LogInfo((object)"DigDug mod initialized successfully!"); } private void OnDestroy() { if ((Object)(object)uiObject != (Object)null) { Object.Destroy((Object)(object)uiObject); } if (harmony != null) { harmony.UnpatchSelf(); } } } public static class DigDugConfig { public static ConfigEntry EnableStaminaDrain; public static ConfigEntry IgnoreDurabilityLoss; public static ConfigEntry IgnoreStoneRequirement; public static ConfigEntry StoneCostMultiplier; public static void Init(ConfigFile config) { EnableStaminaDrain = config.Bind("General", "EnableStaminaDrain", true, "If true, performing a batch dig/build will consume player stamina."); IgnoreDurabilityLoss = config.Bind("General", "IgnoreDurabilityLoss", false, "If true, pickaxes will not lose durability when batch digging."); IgnoreStoneRequirement = config.Bind("General", "IgnoreStoneRequirement", false, "If true, raising terrain will not consume stones from your inventory."); StoneCostMultiplier = config.Bind("General", "StoneCostMultiplier", 1f, "Multiplier for the amount of stones required to raise terrain."); } } public static class DigDugPreview { private static List previewObjs = new List(); private static Material previewMat; private static GameObject GetOrCreatePreviewObject(int index) { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown //IL_0079: Unknown result type (might be due to invalid IL or missing references) while (previewObjs.Count <= index) { GameObject val = GameObject.CreatePrimitive((PrimitiveType)3); BoxCollider component = val.GetComponent(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } Renderer component2 = val.GetComponent(); if ((Object)(object)previewMat == (Object)null) { Shader val2 = Shader.Find("Sprites/Default"); if ((Object)(object)val2 == (Object)null) { val2 = Shader.Find("Standard"); } previewMat = new Material(val2); previewMat.color = new Color(0f, 0.45f, 1f, 0.35f); } component2.material = previewMat; val.SetActive(false); previewObjs.Add(val); } return previewObjs[index]; } public static void UpdatePreview(Vector3 playerPos, Vector3 forward, Vector3 right, float depth, float length, float width, int mode, int direction) { //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_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_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: 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_01ff: 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_021f: 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_00a4: 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_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: 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_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: 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_02fc: Unknown result type (might be due to invalid IL or missing references) //IL_0315: 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_033e: Unknown result type (might be due to invalid IL or missing references) //IL_0350: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_0366: Unknown result type (might be due to invalid IL or missing references) //IL_036b: Unknown result type (might be due to invalid IL or missing references) //IL_0370: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_039a: Unknown result type (might be due to invalid IL or missing references) //IL_03b2: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_03c5: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_03cd: Unknown result type (might be due to invalid IL or missing references) //IL_03d2: Unknown result type (might be due to invalid IL or missing references) //IL_03e4: Unknown result type (might be due to invalid IL or missing references) //IL_03e9: Unknown result type (might be due to invalid IL or missing references) //IL_03ee: Unknown result type (might be due to invalid IL or missing references) //IL_0407: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_0439: Unknown result type (might be due to invalid IL or missing references) //IL_044b: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_044f: Unknown result type (might be due to invalid IL or missing references) //IL_0454: Unknown result type (might be due to invalid IL or missing references) //IL_0459: Unknown result type (might be due to invalid IL or missing references) //IL_046b: Unknown result type (might be due to invalid IL or missing references) //IL_0470: Unknown result type (might be due to invalid IL or missing references) //IL_0475: Unknown result type (might be due to invalid IL or missing references) //IL_048e: Unknown result type (might be due to invalid IL or missing references) //IL_049f: Unknown result type (might be due to invalid IL or missing references) //IL_04c0: Unknown result type (might be due to invalid IL or missing references) float num = depth; if (mode != 2) { GameObject orCreatePreviewObject = GetOrCreatePreviewObject(0); orCreatePreviewObject.SetActive(true); for (int i = 1; i < previewObjs.Count; i++) { if ((Object)(object)previewObjs[i] != (Object)null) { previewObjs[i].SetActive(false); } } float num2 = width; switch (mode) { case 0: num2 = 1f; break; case 3: if (num > 0f) { num = 0f - num; } break; } float num3 = 0f; Vector3 val = playerPos + forward * direction switch { 0 => length / 2f, 1 => (0f - length) / 2f, _ => 0f, }; float num4 = playerPos.y - num / 2f; orCreatePreviewObject.transform.position = new Vector3(val.x, num4, val.z); orCreatePreviewObject.transform.rotation = Quaternion.LookRotation(forward, Vector3.up); orCreatePreviewObject.transform.localScale = new Vector3(num2, Mathf.Abs(num), length); return; } float num5 = 2f; if (length <= 2f * num5 || width <= 2f * num5) { GameObject orCreatePreviewObject2 = GetOrCreatePreviewObject(0); orCreatePreviewObject2.SetActive(true); for (int j = 1; j < previewObjs.Count; j++) { if ((Object)(object)previewObjs[j] != (Object)null) { previewObjs[j].SetActive(false); } } float num6 = 0f; Vector3 val2 = playerPos + forward * direction switch { 0 => length / 2f, 1 => (0f - length) / 2f, _ => 0f, }; float num7 = playerPos.y - num / 2f; orCreatePreviewObject2.transform.position = new Vector3(val2.x, num7, val2.z); orCreatePreviewObject2.transform.rotation = Quaternion.LookRotation(forward, Vector3.up); orCreatePreviewObject2.transform.localScale = new Vector3(width, Mathf.Abs(num), length); return; } for (int k = 0; k < 4; k++) { GetOrCreatePreviewObject(k).SetActive(true); } for (int l = 4; l < previewObjs.Count; l++) { if ((Object)(object)previewObjs[l] != (Object)null) { previewObjs[l].SetActive(false); } } float num8 = 0f; num8 = direction switch { 0 => length / 2f, 1 => (0f - length) / 2f, _ => 0f, }; float num9 = playerPos.y - num / 2f; Quaternion rotation = Quaternion.LookRotation(forward, Vector3.up); GameObject orCreatePreviewObject3 = GetOrCreatePreviewObject(0); Vector3 val3 = playerPos + forward * (num8 + length / 2f - num5 / 2f); orCreatePreviewObject3.transform.position = new Vector3(val3.x, num9, val3.z); orCreatePreviewObject3.transform.rotation = rotation; orCreatePreviewObject3.transform.localScale = new Vector3(width, Mathf.Abs(num), num5); GameObject orCreatePreviewObject4 = GetOrCreatePreviewObject(1); Vector3 val4 = playerPos + forward * (num8 - length / 2f + num5 / 2f); orCreatePreviewObject4.transform.position = new Vector3(val4.x, num9, val4.z); orCreatePreviewObject4.transform.rotation = rotation; orCreatePreviewObject4.transform.localScale = new Vector3(width, Mathf.Abs(num), num5); GameObject orCreatePreviewObject5 = GetOrCreatePreviewObject(2); Vector3 val5 = playerPos + forward * num8 - right * (width / 2f - num5 / 2f); orCreatePreviewObject5.transform.position = new Vector3(val5.x, num9, val5.z); orCreatePreviewObject5.transform.rotation = rotation; orCreatePreviewObject5.transform.localScale = new Vector3(num5, Mathf.Abs(num), length - 2f * num5); GameObject orCreatePreviewObject6 = GetOrCreatePreviewObject(3); Vector3 val6 = playerPos + forward * num8 + right * (width / 2f - num5 / 2f); orCreatePreviewObject6.transform.position = new Vector3(val6.x, num9, val6.z); orCreatePreviewObject6.transform.rotation = rotation; orCreatePreviewObject6.transform.localScale = new Vector3(num5, Mathf.Abs(num), length - 2f * num5); } public static void Hide() { foreach (GameObject previewObj in previewObjs) { if ((Object)(object)previewObj != (Object)null) { previewObj.SetActive(false); } } } public static void Destroy() { foreach (GameObject previewObj in previewObjs) { if ((Object)(object)previewObj != (Object)null) { Object.Destroy((Object)(object)previewObj); } } previewObjs.Clear(); if ((Object)(object)previewMat != (Object)null) { Object.Destroy((Object)(object)previewMat); previewMat = null; } } } public class DigDugUI : MonoBehaviour { private static Rect windowRect = new Rect(100f, 100f, 750f, 680f); private static GUIStyle windowStyle; private static GUIStyle buttonStyle; private static GUIStyle textFieldStyle; private static GUIStyle labelStyle; private static GUIStyle headerStyle; private static GUIStyle costLabelStyle; private string depthStr = "4.0"; private string lengthStr = "4.0"; private string widthStr = "4.0"; private int selectedMode = 1; private readonly string[] modeLabels = new string[4] { "Line", "Rectangle", "Trench", "Wall" }; private int selectedDirection; private readonly string[] directionLabels = new string[3] { "Forward", "Backward", "Center" }; private int selectedPaint; private readonly string[] paintLabels = new string[4] { "Dirt", "Paved", "Grass", "No Change" }; private static Font nativeFont; private float leftArrowDownTime; private float rightArrowDownTime; public static DigDugUI Instance { get; private set; } public static bool IsVisible { get; private set; } private void Awake() { Instance = this; IsVisible = false; } private void OnDestroy() { DigDugPreview.Destroy(); } public static void Show() { if (!((Object)(object)Player.m_localPlayer == (Object)null)) { IsVisible = true; ToggleCursor(visible: true); } } public static void Hide() { IsVisible = false; ToggleCursor(visible: false); DigDugPreview.Hide(); } private static void ToggleCursor(bool visible) { if (visible) { Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; } else { Cursor.lockState = (CursorLockMode)1; Cursor.visible = false; } } private void HandleArrowKeyRotation(Player player) { //IL_00b0: 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_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: 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_00d4: Unknown result type (might be due to invalid IL or missing references) float num = 0f; if (Input.GetKeyDown((KeyCode)276)) { num -= 1f; leftArrowDownTime = Time.time; } else if (Input.GetKey((KeyCode)276) && Time.time - leftArrowDownTime > 0.3f) { num -= 30f * Time.deltaTime; } if (Input.GetKeyDown((KeyCode)275)) { num += 1f; rightArrowDownTime = Time.time; } else if (Input.GetKey((KeyCode)275) && Time.time - rightArrowDownTime > 0.3f) { num += 30f * Time.deltaTime; } if (Mathf.Abs(num) > 0.0001f) { Quaternion lookYaw = ((Character)player).GetLookYaw(); Quaternion val = lookYaw * Quaternion.Euler(0f, num, 0f); ((Character)player).SetLookDir(val * Vector3.forward, 0f); player.FaceLookDirection(); } } private void Update() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Invalid comparison between Unknown and I4 Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer != (Object)null) { ItemData currentWeapon = ((Humanoid)localPlayer).GetCurrentWeapon(); if (currentWeapon != null && (int)currentWeapon.m_shared.m_skillType == 12) { HandleArrowKeyRotation(localPlayer); } } if (IsVisible) { if (Input.GetKeyDown((KeyCode)27)) { Hide(); return; } Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; UpdatePreviewObject(); } } private void LateUpdate() { if (IsVisible) { Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; } } private void UpdatePreviewObject() { //IL_0022: 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_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) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) Player localPlayer = Player.m_localPlayer; if (!((Object)(object)localPlayer == (Object)null)) { ParseInputs(out var depth, out var length, out var width); Vector3 forward = ((Component)localPlayer).transform.forward; forward.y = 0f; ((Vector3)(ref forward)).Normalize(); Vector3 right = ((Component)localPlayer).transform.right; right.y = 0f; ((Vector3)(ref right)).Normalize(); DigDugPreview.UpdatePreview(((Component)localPlayer).transform.position, forward, right, depth, length, width, selectedMode, selectedDirection); } } private void ParseInputs(out float depth, out float length, out float width) { if (!float.TryParse(depthStr, out depth)) { depth = 4f; } if (!float.TryParse(lengthStr, out length)) { length = 4f; } if (!float.TryParse(widthStr, out width)) { width = 4f; } depth = Mathf.Clamp(depth, -30f, 30f); length = Mathf.Clamp(length, 0.1f, 100f); width = Mathf.Clamp(width, 0.1f, 100f); } private void OnGUI() { //IL_00a2: 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_00c2: Expected O, but got Unknown //IL_00bd: 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_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Invalid comparison between Unknown and I4 //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Invalid comparison between Unknown and I4 //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Invalid comparison between Unknown and I4 DrawHUDOverlay(); if (IsVisible) { if (Event.current != null && (int)Event.current.type == 4 && ((int)Event.current.keyCode == 276 || (int)Event.current.keyCode == 275)) { GUI.FocusControl((string)null); } Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; VerifyStyles(); ((Rect)(ref windowRect)).x = ((float)Screen.width - ((Rect)(ref windowRect)).width) / 2f; ((Rect)(ref windowRect)).y = ((float)Screen.height - ((Rect)(ref windowRect)).height) / 2f; windowRect = GUI.Window(9923, windowRect, new WindowFunction(DrawWindow), "DIGDUG EXCAVATION", windowStyle); } } private void DrawWindow(int windowID) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_05e3: Unknown result type (might be due to invalid IL or missing references) //IL_05ea: Expected O, but got Unknown //IL_05f1: Unknown result type (might be due to invalid IL or missing references) GUILayout.BeginVertical((GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.Space(25f); GUIStyle val = new GUIStyle(labelStyle); val.normal.textColor = new Color(0.92f, 0.73f, 0.16f, 1f); val.alignment = (TextAnchor)4; val.fontSize = 24; GUILayout.Label(GetFacingString(), val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(35f) }); GUILayout.Space(5f); GUILayout.BeginHorizontal((GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.Label("Mode:", labelStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(130f), GUILayout.Height(36f) }); int num = selectedMode; selectedMode = GUILayout.SelectionGrid(selectedMode, modeLabels, 4, buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(36f) }); GUILayout.EndHorizontal(); if (selectedMode != num) { if (selectedMode == 0) { depthStr = "2.0"; lengthStr = "10.0"; widthStr = "1.0"; } else if (selectedMode == 1) { depthStr = "4.0"; lengthStr = "4.0"; widthStr = "4.0"; } else if (selectedMode == 2) { depthStr = "4.0"; lengthStr = "4.0"; widthStr = "4.0"; } else if (selectedMode == 3) { depthStr = "2.0"; lengthStr = "4.0"; widthStr = "4.0"; } } GUILayout.Space(6f); ParseInputs(out var depth, out var length, out var width); GUILayout.BeginHorizontal((GUILayoutOption[])(object)new GUILayoutOption[0]); string text = ((selectedMode == 3) ? "Height:" : "Depth:"); GUILayout.Label(text, labelStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(130f), GUILayout.Height(36f) }); depthStr = GUILayout.TextField(depthStr, textFieldStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(36f) }); GUILayout.EndHorizontal(); GUILayout.Space(6f); GUILayout.BeginHorizontal((GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.Label("Length:", labelStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(130f), GUILayout.Height(36f) }); lengthStr = GUILayout.TextField(lengthStr, textFieldStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(36f) }); GUILayout.EndHorizontal(); GUILayout.Space(6f); if (selectedMode != 0) { GUILayout.BeginHorizontal((GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.Label("Width:", labelStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(130f), GUILayout.Height(36f) }); widthStr = GUILayout.TextField(widthStr, textFieldStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(36f) }); GUILayout.EndHorizontal(); GUILayout.Space(6f); } if (selectedMode != 2) { GUILayout.BeginHorizontal((GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.Label("Direction:", labelStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(130f), GUILayout.Height(36f) }); selectedDirection = GUILayout.SelectionGrid(selectedDirection, directionLabels, 3, buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(36f) }); GUILayout.EndHorizontal(); GUILayout.Space(6f); } GUILayout.BeginHorizontal((GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.Label("Paint:", labelStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(130f), GUILayout.Height(36f) }); selectedPaint = GUILayout.SelectionGrid(selectedPaint, paintLabels, 4, buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(36f) }); GUILayout.EndHorizontal(); GUILayout.Space(6f); GUILayout.Space(10f); CalculateCosts(depth, length, width, out var area, out var swingCount, out var staminaCost, out var durabilityCost, out var stoneCost); GUILayout.BeginVertical(GUI.skin.box, (GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.Label($"Area: {area:F1} m² | Swings: {swingCount}", costLabelStyle, (GUILayoutOption[])(object)new GUILayoutOption[0]); if (selectedMode == 3 || depth < 0f) { int stoneCount = GetStoneCount(); bool flag = DigDugConfig.IgnoreStoneRequirement.Value || ((Object)(object)Player.m_localPlayer != (Object)null && Player.m_localPlayer.NoCostCheat()); string arg = ((stoneCount >= stoneCost || flag) ? "lime" : "red"); GUILayout.Label($"Stone Cost: {stoneCost} / {stoneCount} available", costLabelStyle, (GUILayoutOption[])(object)new GUILayoutOption[0]); } string arg2 = "lime"; float totalPickaxeDurability = GetTotalPickaxeDurability(); if (totalPickaxeDurability < durabilityCost && !DigDugConfig.IgnoreDurabilityLoss.Value) { arg2 = "red"; } GUILayout.Label($"Durability Cost: {durabilityCost:F0} / {totalPickaxeDurability:F0} available", costLabelStyle, (GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.Label($"Stamina Cost: {staminaCost:F0}", costLabelStyle, (GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.EndVertical(); GUILayout.Space(10f); GUIStyle val2 = new GUIStyle(labelStyle); val2.normal.textColor = Color.white; val2.alignment = (TextAnchor)4; val2.fontSize = 28; val2.wordWrap = true; GUILayout.Label("Tip: Use Left/Right Arrow keys to rotate 1° (hold to rotate continuously)", val2, (GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.Space(10f); GUILayout.BeginHorizontal((GUILayoutOption[])(object)new GUILayoutOption[0]); GUILayout.FlexibleSpace(); if (GUILayout.Button("Cancel", buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(140f), GUILayout.Height(38f) })) { Hide(); } GUILayout.Space(15f); string text2 = ((selectedMode == 3 || depth < 0f) ? "Build!" : "Dig!"); if (GUILayout.Button(text2, buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(140f), GUILayout.Height(38f) })) { ExecuteDig(depth, length, width, area, swingCount, staminaCost, durabilityCost, stoneCost); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); } private void CalculateCosts(float depth, float length, float width, out float area, out int swingCount, out float staminaCost, out float durabilityCost, out int stoneCost) { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Invalid comparison between Unknown and I4 float num = width; float num2 = Mathf.Abs(depth); if (selectedMode == 0) { num = 1f; } area = length * num; if (selectedMode == 2) { float num3 = 2f; if (length > 2f * num3 && num > 2f * num3) { float num4 = (length - 2f * num3) * (num - 2f * num3); area -= num4; } } swingCount = Mathf.Max(1, Mathf.RoundToInt(area / 12.5f * Mathf.Max(1f, num2))); staminaCost = 0f; durabilityCost = 0f; stoneCost = 0; Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer != (Object)null) { ItemData currentWeapon = ((Humanoid)localPlayer).GetCurrentWeapon(); if (currentWeapon != null && (int)currentWeapon.m_shared.m_skillType == 12) { staminaCost = currentWeapon.m_shared.m_attack.m_attackStamina * (float)swingCount; durabilityCost = currentWeapon.m_shared.m_useDurabilityDrain * (float)swingCount; } } if (selectedMode == 3 || depth < 0f) { stoneCost = Mathf.Max(1, Mathf.RoundToInt(area / 12.5f * Mathf.Max(1f, num2) * 2f * DigDugConfig.StoneCostMultiplier.Value)); } } private int GetStoneCount() { Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return 0; } return ((Humanoid)localPlayer).GetInventory().CountItems("$item_stone", -1, false); } private float GetTotalPickaxeDurability() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Invalid comparison between Unknown and I4 Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return 0f; } float num = 0f; foreach (ItemData allItem in ((Humanoid)localPlayer).GetInventory().GetAllItems()) { if ((int)allItem.m_shared.m_skillType == 12) { num += allItem.m_durability; } } return num; } private void ExecuteDig(float depth, float length, float width, float area, int swingCount, float staminaCost, float durabilityCost, int stoneCost) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Invalid comparison between Unknown and I4 //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Expected O, but got Unknown //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_0265: 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_0272: 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_0292: 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_00b4: Expected O, but got Unknown //IL_0364: Unknown result type (might be due to invalid IL or missing references) //IL_0366: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_0382: Unknown result type (might be due to invalid IL or missing references) //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_041b: Unknown result type (might be due to invalid IL or missing references) //IL_0420: Unknown result type (might be due to invalid IL or missing references) //IL_049d: Unknown result type (might be due to invalid IL or missing references) //IL_049f: Unknown result type (might be due to invalid IL or missing references) //IL_04a1: Unknown result type (might be due to invalid IL or missing references) //IL_04a6: Unknown result type (might be due to invalid IL or missing references) //IL_04a8: Unknown result type (might be due to invalid IL or missing references) //IL_04aa: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Unknown result type (might be due to invalid IL or missing references) //IL_04b5: Unknown result type (might be due to invalid IL or missing references) //IL_0783: Unknown result type (might be due to invalid IL or missing references) //IL_0910: Unknown result type (might be due to invalid IL or missing references) //IL_08f1: Unknown result type (might be due to invalid IL or missing references) //IL_08f3: Unknown result type (might be due to invalid IL or missing references) //IL_0924: Unknown result type (might be due to invalid IL or missing references) //IL_0943: Unknown result type (might be due to invalid IL or missing references) //IL_0948: Unknown result type (might be due to invalid IL or missing references) //IL_0954: Unknown result type (might be due to invalid IL or missing references) //IL_095c: Unknown result type (might be due to invalid IL or missing references) //IL_0668: Unknown result type (might be due to invalid IL or missing references) //IL_066d: Unknown result type (might be due to invalid IL or missing references) //IL_0684: Unknown result type (might be due to invalid IL or missing references) //IL_0686: Unknown result type (might be due to invalid IL or missing references) //IL_0866: Unknown result type (might be due to invalid IL or missing references) //IL_086d: Invalid comparison between Unknown and I4 //IL_069c: Unknown result type (might be due to invalid IL or missing references) //IL_06a1: Unknown result type (might be due to invalid IL or missing references) //IL_06b8: Unknown result type (might be due to invalid IL or missing references) //IL_06ba: Unknown result type (might be due to invalid IL or missing references) //IL_06d0: Unknown result type (might be due to invalid IL or missing references) //IL_06d5: Unknown result type (might be due to invalid IL or missing references) //IL_06ec: Unknown result type (might be due to invalid IL or missing references) //IL_06ee: Unknown result type (might be due to invalid IL or missing references) Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return; } ItemData currentWeapon = ((Humanoid)localPlayer).GetCurrentWeapon(); if (currentWeapon == null || (int)currentWeapon.m_shared.m_skillType != 12) { ((Character)localPlayer).Message((MessageType)1, "You must equip a pickaxe to execute this operation!", 0, (Sprite)null); return; } bool flag = selectedMode == 3 || depth < 0f; GameObject val = null; Piece val2 = null; if (flag) { val = new GameObject("DigDug_DummyPiece"); val.SetActive(false); val2 = val.AddComponent(); GameObject itemPrefab = ObjectDB.instance.GetItemPrefab("Stone"); ItemDrop resItem = (((Object)(object)itemPrefab != (Object)null) ? itemPrefab.GetComponent() : null); val2.m_resources = (Requirement[])(object)new Requirement[1]; val2.m_resources[0] = new Requirement(); val2.m_resources[0].m_resItem = resItem; val2.m_resources[0].m_amount = stoneCost; val2.m_resources[0].m_amountPerLevel = 0; val2.m_resources[0].m_recover = true; if (selectedMode == 3) { GameObject prefab = ZNetScene.instance.GetPrefab("piece_stonecutter"); val2.m_craftingStation = (((Object)(object)prefab != (Object)null) ? prefab.GetComponent() : null); } else { GameObject prefab2 = ZNetScene.instance.GetPrefab("piece_workbench"); val2.m_craftingStation = (((Object)(object)prefab2 != (Object)null) ? prefab2.GetComponent() : null); } if (!localPlayer.NoCostCheat() && !DigDugConfig.IgnoreStoneRequirement.Value) { if ((Object)(object)val2.m_craftingStation != (Object)null) { string name = val2.m_craftingStation.m_name; if (!Object.op_Implicit((Object)(object)CraftingStation.HaveBuildStationInRange(name, ((Component)localPlayer).transform.position))) { string text = Localization.instance.Localize(name); ((Character)localPlayer).Message((MessageType)1, "Missing station: " + text + " in range!", 0, (Sprite)null); Object.Destroy((Object)(object)val); return; } } if (!localPlayer.HaveRequirements(val2, (RequirementMode)0)) { int stoneCount = GetStoneCount(); ((Character)localPlayer).Message((MessageType)1, $"Not enough stone! Required: {stoneCost}, you have: {stoneCount}", 0, (Sprite)null); Object.Destroy((Object)(object)val); return; } } } if (!DigDugConfig.IgnoreDurabilityLoss.Value) { float totalPickaxeDurability = GetTotalPickaxeDurability(); if (totalPickaxeDurability < durabilityCost) { ((Character)localPlayer).Message((MessageType)1, $"Your pickaxes are too damaged! Required durability: {durabilityCost:F0}, you have: {totalPickaxeDurability:F0}", 0, (Sprite)null); if ((Object)(object)val != (Object)null) { Object.Destroy((Object)(object)val); } return; } } Vector3 position = ((Component)localPlayer).transform.position; Vector3 forward = ((Component)localPlayer).transform.forward; forward.y = 0f; ((Vector3)(ref forward)).Normalize(); Vector3 right = ((Component)localPlayer).transform.right; right.y = 0f; ((Vector3)(ref right)).Normalize(); float num = width; float num2 = depth; if (selectedMode == 0) { num = 1f; } else if (selectedMode == 3) { num2 = 0f - depth; } float num3 = 0f; float num4 = 0f; float num5 = (0f - num) / 2f; float num6 = num / 2f; if (selectedDirection == 0) { num3 = 0f; num4 = length; } else if (selectedDirection == 1) { num3 = 0f - length; num4 = 0f; } else { num3 = (0f - length) / 2f; num4 = length / 2f; } float num7 = position.y - num2; HashSet hashSet = new HashSet(); float num8 = 8f; for (float num9 = num3 - 4f; num9 <= num4 + 4f; num9 += num8) { for (float num10 = num5 - 4f; num10 <= num6 + 4f; num10 += num8) { Vector3 val3 = position + forward * num9 + right * num10; TerrainComp val4 = TerrainComp.FindTerrainCompiler(val3); if ((Object)(object)val4 != (Object)null) { hashSet.Add(val4); } } } HashSet hashSet2 = new HashSet(); HashSet hashSet3 = new HashSet(); Vector3 val5 = default(Vector3); foreach (TerrainComp item2 in hashSet) { Heightmap hmap = DigDugReflection.GetHmap(item2); if ((Object)(object)hmap == (Object)null) { continue; } int width2 = hmap.m_width; float scale = hmap.m_scale; Vector3 position2 = ((Component)hmap).transform.position; int num11 = width2 / 2; float[] levelDelta = DigDugReflection.GetLevelDelta(item2); float[] smoothDelta = DigDugReflection.GetSmoothDelta(item2); bool[] modifiedHeight = DigDugReflection.GetModifiedHeight(item2); Color[] paintMask = DigDugReflection.GetPaintMask(item2); bool[] modifiedPaint = DigDugReflection.GetModifiedPaint(item2); for (int i = 0; i <= width2; i++) { for (int j = 0; j <= width2; j++) { float num12 = position2.x + (float)(j - num11) * scale; float num13 = position2.z + (float)(i - num11) * scale; ((Vector3)(ref val5))..ctor(num12, position.y, num13); Vector3 val6 = val5 - position; float num14 = Vector3.Dot(val6, forward); float num15 = Vector3.Dot(val6, right); float num16 = num3 - scale / 2f; float num17 = num4 + scale / 2f; float num18 = num5 - scale / 2f; float num19 = num6 + scale / 2f; if (!(num14 >= num16 - 0.1f) || !(num14 <= num17 + 0.1f) || !(num15 >= num18 - 0.1f) || !(num15 <= num19 + 0.1f)) { continue; } if (selectedMode == 2) { float num20 = 2f; if (length > 2f * num20 && num > 2f * num20 && num14 >= num16 + num20 - 0.01f && num14 <= num17 - num20 + 0.01f && num15 >= num18 + num20 - 0.01f && num15 <= num19 - num20 + 0.01f) { continue; } } string item = ((Object)((Component)item2).gameObject).name + "_" + j + "_" + i; if (!hashSet2.Contains(item)) { hashSet2.Add(item); int num21 = i * (width2 + 1) + j; float height = hmap.GetHeight(j, i); float num22 = num7 - height; num22 += smoothDelta[num21]; smoothDelta[num21] = 0f; levelDelta[num21] += num22; levelDelta[num21] = Mathf.Clamp(levelDelta[num21], -30f, 30f); modifiedHeight[num21] = true; if (selectedPaint == 0) { Color paintMaskDirt = Heightmap.m_paintMaskDirt; paintMaskDirt.a = 0f; paintMask[num21] = paintMaskDirt; modifiedPaint[num21] = true; } else if (selectedPaint == 1) { Color paintMaskPaved = Heightmap.m_paintMaskPaved; paintMaskPaved.a = 0f; paintMask[num21] = paintMaskPaved; modifiedPaint[num21] = true; } else if (selectedPaint == 2) { Color paintMaskNothing = Heightmap.m_paintMaskNothing; paintMaskNothing.a = 1f; paintMask[num21] = paintMaskNothing; modifiedPaint[num21] = true; } hashSet3.Add(item2); } } } } foreach (TerrainComp item3 in hashSet3) { DigDugReflection.Save(item3); DigDugReflection.GetHmap(item3).Poke(false); if ((Object)(object)ClutterSystem.instance != (Object)null) { ClutterSystem.instance.ResetGrass(((Component)item3).transform.position, DigDugReflection.GetSize(item3)); } } if (DigDugConfig.EnableStaminaDrain.Value) { ((Character)localPlayer).UseStamina(staminaCost); } if (flag) { if (!localPlayer.NoCostCheat() && !DigDugConfig.IgnoreStoneRequirement.Value && (Object)(object)val2 != (Object)null) { localPlayer.ConsumeResources(val2.m_resources, 0, 1, 1); } if ((Object)(object)val != (Object)null) { Object.Destroy((Object)(object)val); } } if (!DigDugConfig.IgnoreDurabilityLoss.Value) { float num23 = durabilityCost; float num24 = Mathf.Min(currentWeapon.m_durability, num23); currentWeapon.m_durability -= num24; num23 -= num24; if (num23 > 0f) { foreach (ItemData allItem in ((Humanoid)localPlayer).GetInventory().GetAllItems()) { if ((int)allItem.m_shared.m_skillType == 12 && allItem != currentWeapon) { float num25 = Mathf.Min(allItem.m_durability, num23); allItem.m_durability -= num25; num23 -= num25; if (num23 <= 0f) { break; } } } } } ((Character)localPlayer).RaiseSkill((SkillType)12, DigDugReflection.GetRaiseSkillAmount(currentWeapon.m_shared.m_attack) * (float)swingCount); if (currentWeapon.m_shared.m_hitTerrainEffect != null) { currentWeapon.m_shared.m_hitTerrainEffect.Create(position, Quaternion.identity, (Transform)null, 1f, -1); } float num26 = default(float); if (ZoneSystem.instance.GetGroundHeight(((Component)localPlayer).transform.position, ref num26) && Mathf.Abs(((Component)localPlayer).transform.position.y - num26) > 0.05f) { Vector3 position3 = ((Component)localPlayer).transform.position; position3.y = num26; ((Character)localPlayer).TeleportTo(position3, ((Component)localPlayer).transform.rotation, false); } Hide(); } private string GetFacingString() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return "Facing: Unknown"; } Vector3 forward = ((Component)localPlayer).transform.forward; forward.y = 0f; ((Vector3)(ref forward)).Normalize(); float num = Mathf.Atan2(forward.x, forward.z) * 57.29578f; if (num < 0f) { num += 360f; } string text = ""; text = ((num >= 337.5f || num < 22.5f) ? "North (N)" : ((num >= 22.5f && num < 67.5f) ? "North-East (NE)" : ((num >= 67.5f && num < 112.5f) ? "East (E)" : ((num >= 112.5f && num < 157.5f) ? "South-East (SE)" : ((num >= 157.5f && num < 202.5f) ? "South (S)" : ((num >= 202.5f && num < 247.5f) ? "South-West (SW)" : ((!(num >= 247.5f) || !(num < 292.5f)) ? "North-West (NW)" : "West (W)"))))))); return $"Facing: {text} ({num:F0}°)"; } private void DrawHUDOverlay() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Invalid comparison between Unknown and I4 //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: 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) Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return; } ItemData currentWeapon = ((Humanoid)localPlayer).GetCurrentWeapon(); if (currentWeapon != null && (int)currentWeapon.m_shared.m_skillType == 12) { string facingString = GetFacingString(); GUIStyle val = new GUIStyle(); val.fontSize = 36; val.fontStyle = (FontStyle)1; val.normal.textColor = new Color(0.92f, 0.73f, 0.16f, 1f); val.alignment = (TextAnchor)4; Font val2 = GetNativeFont(); if ((Object)(object)val2 != (Object)null) { val.font = val2; } GUIStyle val3 = new GUIStyle(val); val3.normal.textColor = Color.black; float num = 800f; float num2 = 60f; float num3 = ((float)Screen.width - num) / 2f; float num4 = 90f; GUI.Label(new Rect(num3 + 2f, num4 + 2f, num, num2), facingString, val3); GUI.Label(new Rect(num3, num4, num, num2), facingString, val); } } private static Font GetNativeFont() { if ((Object)(object)nativeFont == (Object)null) { Font[] array = Resources.FindObjectsOfTypeAll(); foreach (Font val in array) { if (((Object)val).name == "AveriaSansLibre-Bold" || ((Object)val).name == "AveriaSerifLibre-Regular" || ((Object)val).name.Contains("Averia")) { nativeFont = val; break; } } } return nativeFont; } private static void VerifyStyles() { if (windowStyle == null || !((Object)(object)windowStyle.normal.background != (Object)null)) { InitStyles(); } } private static void InitStyles() { //IL_002f: 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_0060: Expected O, but got Unknown //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Expected O, but got Unknown //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Expected O, but got Unknown //IL_0102: 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_013d: Expected O, but got Unknown //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Expected O, but got Unknown //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Expected O, but got Unknown //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Expected O, but got Unknown //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Expected O, but got Unknown //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0241: 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_0277: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02e2: 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_033c: Unknown result type (might be due to invalid IL or missing references) //IL_0341: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_0373: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_039c: Unknown result type (might be due to invalid IL or missing references) //IL_03b0: Unknown result type (might be due to invalid IL or missing references) //IL_03e5: Unknown result type (might be due to invalid IL or missing references) //IL_03ef: Expected O, but got Unknown //IL_03fa: Unknown result type (might be due to invalid IL or missing references) //IL_0404: Expected O, but got Unknown //IL_040d: Unknown result type (might be due to invalid IL or missing references) //IL_0417: Expected O, but got Unknown //IL_042b: Unknown result type (might be due to invalid IL or missing references) //IL_0435: Expected O, but got Unknown //IL_0457: Unknown result type (might be due to invalid IL or missing references) //IL_0470: Unknown result type (might be due to invalid IL or missing references) //IL_04a1: Unknown result type (might be due to invalid IL or missing references) //IL_04a6: Unknown result type (might be due to invalid IL or missing references) //IL_04bb: Unknown result type (might be due to invalid IL or missing references) //IL_04cf: Unknown result type (might be due to invalid IL or missing references) //IL_04e4: Unknown result type (might be due to invalid IL or missing references) //IL_04ee: Expected O, but got Unknown //IL_04f7: Unknown result type (might be due to invalid IL or missing references) //IL_0501: Expected O, but got Unknown //IL_0516: Unknown result type (might be due to invalid IL or missing references) //IL_0520: Expected O, but got Unknown Color textColor = default(Color); ((Color)(ref textColor))..ctor(0.92f, 0.73f, 0.16f, 1f); new Color(0.85f, 0.7f, 0.2f, 1f); Color val = default(Color); ((Color)(ref val))..ctor(0.88f, 0.63f, 0.28f, 1f); Font val2 = GetNativeFont(); windowStyle = new GUIStyle(); windowStyle.normal.background = CreateWoodPanelTexture(128, 128); windowStyle.normal.textColor = textColor; windowStyle.padding = new RectOffset(20, 20, 60, 20); windowStyle.alignment = (TextAnchor)1; windowStyle.fontSize = 26; windowStyle.fontStyle = (FontStyle)1; windowStyle.border = new RectOffset(6, 6, 6, 6); if ((Object)(object)val2 != (Object)null) { windowStyle.font = val2; } labelStyle = new GUIStyle(); labelStyle.normal.textColor = val; labelStyle.fontSize = 18; labelStyle.fontStyle = (FontStyle)1; labelStyle.alignment = (TextAnchor)3; labelStyle.margin = new RectOffset(0, 5, 5, 5); if ((Object)(object)val2 != (Object)null) { labelStyle.font = val2; } headerStyle = new GUIStyle(labelStyle); headerStyle.fontSize = 24; headerStyle.alignment = (TextAnchor)4; headerStyle.normal.textColor = textColor; costLabelStyle = new GUIStyle(labelStyle); costLabelStyle.fontSize = 16; costLabelStyle.normal.textColor = new Color(0.7f, 0.7f, 0.7f, 1f); costLabelStyle.richText = true; costLabelStyle.margin = new RectOffset(5, 5, 2, 2); if ((Object)(object)val2 != (Object)null) { costLabelStyle.font = val2; } buttonStyle = new GUIStyle(); buttonStyle.normal.background = CreateButtonTexture(64, 24, new Color(0.08f, 0.08f, 0.08f, 0.9f), new Color(0.27f, 0.23f, 0.2f, 1f)); buttonStyle.hover.background = CreateButtonTexture(64, 24, new Color(0.12f, 0.12f, 0.12f, 0.9f), val); buttonStyle.active.background = CreateButtonTexture(64, 24, new Color(0.05f, 0.05f, 0.05f, 0.9f), val); buttonStyle.normal.textColor = val; buttonStyle.hover.textColor = Color.white; buttonStyle.active.textColor = val; buttonStyle.onNormal.background = CreateButtonTexture(64, 24, new Color(0.22f, 0.18f, 0.15f, 0.95f), val); buttonStyle.onHover.background = CreateButtonTexture(64, 24, new Color(0.26f, 0.22f, 0.19f, 0.95f), val); buttonStyle.onActive.background = CreateButtonTexture(64, 24, new Color(0.18f, 0.15f, 0.12f, 0.95f), val); buttonStyle.onNormal.textColor = Color.white; buttonStyle.onHover.textColor = Color.white; buttonStyle.onActive.textColor = Color.white; buttonStyle.alignment = (TextAnchor)4; buttonStyle.fontSize = 18; buttonStyle.fontStyle = (FontStyle)1; buttonStyle.margin = new RectOffset(4, 4, 4, 4); buttonStyle.padding = new RectOffset(12, 12, 8, 8); buttonStyle.border = new RectOffset(2, 2, 2, 2); if ((Object)(object)val2 != (Object)null) { buttonStyle.font = val2; } textFieldStyle = new GUIStyle(); textFieldStyle.normal.background = CreateButtonTexture(64, 24, new Color(0.05f, 0.05f, 0.05f, 0.95f), new Color(0.2f, 0.18f, 0.15f, 1f)); textFieldStyle.focused.background = CreateButtonTexture(64, 24, new Color(0.05f, 0.05f, 0.05f, 0.95f), val); textFieldStyle.normal.textColor = Color.white; textFieldStyle.focused.textColor = Color.white; textFieldStyle.padding = new RectOffset(12, 12, 8, 8); textFieldStyle.margin = new RectOffset(0, 0, 4, 4); textFieldStyle.fontSize = 18; textFieldStyle.border = new RectOffset(2, 2, 2, 2); if ((Object)(object)val2 != (Object)null) { textFieldStyle.font = val2; } } private static Texture2D CreateWoodPanelTexture(int width, int height) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: 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) Texture2D val = new Texture2D(width, height); Color val2 = default(Color); ((Color)(ref val2))..ctor(0.12f, 0.08f, 0.06f, 1f); Color val3 = default(Color); ((Color)(ref val3))..ctor(0.38f, 0.25f, 0.18f, 0.98f); Color val4 = default(Color); ((Color)(ref val4))..ctor(0.22f, 0.15f, 0.11f, 1f); Color[] array = (Color[])(object)new Color[width * height]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { bool flag = j == 0 || j == width - 1 || i == 0 || i == height - 1; bool flag2 = (j > 0 && j < 4) || (j >= width - 4 && j < width - 1) || (i > 0 && i < 4) || (i >= height - 4 && i < height - 1); if (flag) { array[i * width + j] = val2; continue; } if (flag2) { array[i * width + j] = val4; continue; } float num = Mathf.PerlinNoise((float)j * 0.15f, (float)i * 0.03f) * 0.06f - 0.03f; float num2 = Mathf.Sin((float)i * 1.5f + Mathf.PerlinNoise((float)j * 0.05f, (float)i * 0.05f) * 6f) * 0.02f; float num3 = Mathf.Clamp01(val3.r + num + num2); float num4 = Mathf.Clamp01(val3.g + num + num2); float num5 = Mathf.Clamp01(val3.b + num + num2); ref Color reference = ref array[i * width + j]; reference = new Color(num3, num4, num5, val3.a); } } val.SetPixels(array); val.Apply(); return val; } private static Texture2D CreateButtonTexture(int width, int height, Color bgColor, Color borderColor) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) Texture2D val = new Texture2D(width, height); Color[] array = (Color[])(object)new Color[width * height]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { bool flag = j == 0 || j == width - 1 || i == 0 || i == height - 1; array[i * width + j] = (flag ? borderColor : bgColor); } } val.SetPixels(array); val.Apply(); return val; } } [HarmonyPatch] public static class DigDugPatches { private static float lastLogTime; [HarmonyPrefix] [HarmonyPatch(typeof(Player), "SetControls")] public static void Player_SetControls_Prefix(Player __instance, ref bool block, ref bool blockHold) { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Invalid comparison between Unknown and I4 if ((Object)(object)__instance != (Object)(object)Player.m_localPlayer || InventoryGui.IsVisible() || Minimap.IsOpen() || Menu.IsVisible() || Console.IsVisible() || StoreGui.IsVisible() || TextInput.IsVisible() || Hud.InRadial() || Hud.IsPieceSelectionVisible()) { return; } ItemData currentWeapon = ((Humanoid)__instance).GetCurrentWeapon(); if (currentWeapon != null && (int)currentWeapon.m_shared.m_skillType == 12 && block) { block = false; blockHold = false; if (!DigDugUI.IsVisible) { DigDugPlugin.Log.LogInfo((object)"DigDug: Pickaxe block (Right-click) detected! Triggering UI."); DigDugUI.Show(); } } } [HarmonyPrefix] [HarmonyPatch(typeof(Player), "TakeInput")] public static bool Player_TakeInput_Prefix(ref bool __result) { if (DigDugUI.IsVisible) { __result = false; return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(PlayerController), "TakeInput")] public static bool PlayerController_TakeInput_Prefix(ref bool __result, bool look) { if (DigDugUI.IsVisible) { __result = false; return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(GameCamera), "UpdateMouseCapture")] public static bool GameCamera_UpdateMouseCapture_Prefix() { if (DigDugUI.IsVisible) { if (Time.time - lastLogTime > 2f) { DigDugPlugin.Log.LogInfo((object)"DigDug: Bypassing UpdateMouseCapture and forcing cursor unlock."); lastLogTime = Time.time; } Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; return false; } return true; } } public static class DigDugReflection { public delegate void LevelTerrainDelegate(TerrainComp instance, Vector3 worldPos, float radius, bool square); public delegate void SaveDelegate(TerrainComp instance); public static LevelTerrainDelegate LevelTerrain; public static SaveDelegate Save; private static FieldInfo f_hmap; private static FieldInfo f_size; private static FieldInfo f_levelDelta; private static FieldInfo f_smoothDelta; private static FieldInfo f_modifiedHeight; private static FieldInfo f_paintMask; private static FieldInfo f_modifiedPaint; private static FieldInfo f_raiseSkillAmount; public static void Init() { MethodInfo method = AccessTools.Method(typeof(TerrainComp), "LevelTerrain", new Type[3] { typeof(Vector3), typeof(float), typeof(bool) }, (Type[])null); LevelTerrain = (LevelTerrainDelegate)Delegate.CreateDelegate(typeof(LevelTerrainDelegate), method); MethodInfo method2 = AccessTools.Method(typeof(TerrainComp), "Save", (Type[])null, (Type[])null); Save = (SaveDelegate)Delegate.CreateDelegate(typeof(SaveDelegate), method2); f_hmap = AccessTools.Field(typeof(TerrainComp), "m_hmap"); f_size = AccessTools.Field(typeof(TerrainComp), "m_size"); f_levelDelta = AccessTools.Field(typeof(TerrainComp), "m_levelDelta"); f_smoothDelta = AccessTools.Field(typeof(TerrainComp), "m_smoothDelta"); f_modifiedHeight = AccessTools.Field(typeof(TerrainComp), "m_modifiedHeight"); f_paintMask = AccessTools.Field(typeof(TerrainComp), "m_paintMask"); f_modifiedPaint = AccessTools.Field(typeof(TerrainComp), "m_modifiedPaint"); f_raiseSkillAmount = AccessTools.Field(typeof(Attack), "m_raiseSkillAmount"); } public static Heightmap GetHmap(TerrainComp instance) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown return (Heightmap)f_hmap.GetValue(instance); } public static float GetSize(TerrainComp instance) { return (float)f_size.GetValue(instance); } public static float[] GetLevelDelta(TerrainComp instance) { return (float[])f_levelDelta.GetValue(instance); } public static float[] GetSmoothDelta(TerrainComp instance) { return (float[])f_smoothDelta.GetValue(instance); } public static bool[] GetModifiedHeight(TerrainComp instance) { return (bool[])f_modifiedHeight.GetValue(instance); } public static Color[] GetPaintMask(TerrainComp instance) { return (Color[])f_paintMask.GetValue(instance); } public static bool[] GetModifiedPaint(TerrainComp instance) { return (bool[])f_modifiedPaint.GetValue(instance); } public static float GetRaiseSkillAmount(Attack attack) { return (float)f_raiseSkillAmount.GetValue(attack); } }