using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static app.MapAreaStruc; namespace app { public partial class OverlayForm : Form { public int Scale = 9; public Form1 Form1_0; private Pen redPen = new Pen(Color.FromArgb(150, 255, 0, 0), 2); private Pen yellowPen = new Pen(Color.FromArgb(150, 255, 255, 0), 2); private Pen greenPen = new Pen(Color.FromArgb(150, 0, 255, 0), 2); private Pen orangePen = new Pen(Color.FromArgb(150, 255, 95, 0), 2); private Pen bluePen = new Pen(Color.FromArgb(150, 0, 0, 255), 2); private Pen cyanPen = new Pen(Color.FromArgb(150, 0, 255, 255), 2); public List MobsPoints = new List(); public List GoodChestsPoints = new List(); public List WPPoints = new List(); public List ExitPoints = new List(); public bool ScanningOverlayItems = true; public OverlayForm(Form1 form1_1) { Form1_0 = form1_1; InitializeComponent(); // Set up the form as a transparent overlay this.FormBorderStyle = FormBorderStyle.None; this.BackColor = Color.LimeGreen; this.TransparencyKey = Color.LimeGreen; this.TopMost = true; this.StartPosition = FormStartPosition.Manual; this.Location = new System.Drawing.Point(0, 0); this.ShowInTaskbar = false; this.Size = new System.Drawing.Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); } public void SetAllOverlay() { if (ScanningOverlayItems) { //DateTime StartScanTime = DateTime.Now; SetAllGoodChestNearby(); SetAllMonsterNearby(); SetAllWPNearby(); SetAllExitNearby(); UpdateOverlay(); //TimeSpan UpdatingDisplayTime = DateTime.Now - StartScanTime; //stop scanning too much lags!! (->> issue fixed!) //if (UpdatingDisplayTime.TotalMilliseconds > 160) ScanningOverlayItems = false; } else { GoodChestsPoints = new List(); MobsPoints = new List(); WPPoints = new List(); ExitPoints = new List(); UpdateOverlay(); } } public void SetAllGoodChestNearby() { GoodChestsPoints = new List(); List AllChestPos = Form1_0.MapAreaStruc_0.GetPositionOfAllObject("object", "GoodChest", (int) Form1_0.PlayerScan_0.levelNo, new List()); foreach (var objectPos in AllChestPos) { GoodChestsPoints.Add(new System.Drawing.Point(objectPos.X, objectPos.Y)); } } public void SetAllWPNearby() { WPPoints = new List(); List AllPos = Form1_0.MapAreaStruc_0.GetPositionOfAllObject("object", "WaypointPortal", (int)Form1_0.PlayerScan_0.levelNo, new List()); foreach (var objectPos in AllPos) { WPPoints.Add(new System.Drawing.Point(objectPos.X, objectPos.Y)); } } public void SetAllExitNearby() { ExitPoints = new List(); List AllPos = Form1_0.MapAreaStruc_0.GetPositionOfAllObject("exit", "", (int)Form1_0.PlayerScan_0.levelNo, new List(), true); foreach (var objectPos in AllPos) { ExitPoints.Add(new System.Drawing.Point(objectPos.X, objectPos.Y)); } AllPos = Form1_0.MapAreaStruc_0.GetPositionOfAllExits(); foreach (var objectPos in AllPos) { ExitPoints.Add(new System.Drawing.Point(objectPos.X, objectPos.Y)); } } public void SetAllMonsterNearby() { MobsPoints = new List(); List monsterPositions = Form1_0.MobsStruc_0.GetAllMobsNearby(); foreach (var monsterPosition in monsterPositions) { MobsPoints.Add(new System.Drawing.Point(monsterPosition[0], monsterPosition[1])); } } public void ClearAllOverlay() { ClearAllOverlayWithoutUpdating(); UpdateOverlay(); } public void ClearAllOverlayWithoutUpdating() { MobsPoints = new List(); GoodChestsPoints = new List(); WPPoints = new List(); ExitPoints = new List(); } public void UpdateOverlay() { if (!Form1_0.Running) { ClearAllOverlayWithoutUpdating(); } if (InvokeRequired) { Invoke(new MethodInvoker(updateGUI)); } else { updateGUI(); } } void updateGUI() { this.Refresh(); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); for (int i = 0; i < MobsPoints.Count; i++) { Dictionary itemScreenPosStart = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, MobsPoints[i].X, MobsPoints[i].Y); System.Drawing.Point StartPoint = new System.Drawing.Point(itemScreenPosStart["x"], itemScreenPosStart["y"]); StartPoint = RescaleThisPoint(StartPoint); DrawCrossAtPoint(e, StartPoint, yellowPen); } for (int i = 0; i < GoodChestsPoints.Count; i++) { Dictionary itemScreenPosStart = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, GoodChestsPoints[i].X, GoodChestsPoints[i].Y); System.Drawing.Point StartPoint = new System.Drawing.Point(itemScreenPosStart["x"], itemScreenPosStart["y"]); StartPoint = RescaleThisPoint(StartPoint); System.Drawing.Point MidPoint = new System.Drawing.Point(Form1_0.CenterX, Form1_0.CenterY); e.Graphics.DrawLine(greenPen, MidPoint, StartPoint); DrawCrossAtPoint(e, StartPoint, greenPen); } for (int i = 0; i < WPPoints.Count; i++) { Dictionary itemScreenPosStart = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, WPPoints[i].X, WPPoints[i].Y); System.Drawing.Point StartPoint = new System.Drawing.Point(itemScreenPosStart["x"], itemScreenPosStart["y"]); StartPoint = RescaleThisPoint(StartPoint); System.Drawing.Point MidPoint = new System.Drawing.Point(Form1_0.CenterX, Form1_0.CenterY); e.Graphics.DrawLine(bluePen, MidPoint, StartPoint); DrawCrossAtPoint(e, StartPoint, bluePen); } for (int i = 0; i < ExitPoints.Count; i++) { Dictionary itemScreenPosStart = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, ExitPoints[i].X, ExitPoints[i].Y); System.Drawing.Point StartPoint = new System.Drawing.Point(itemScreenPosStart["x"], itemScreenPosStart["y"]); StartPoint = RescaleThisPoint(StartPoint); System.Drawing.Point MidPoint = new System.Drawing.Point(Form1_0.CenterX, Form1_0.CenterY); e.Graphics.DrawLine(cyanPen, MidPoint, StartPoint); DrawCrossAtPoint(e, StartPoint, cyanPen); } } public void DrawCrossAtPoint(PaintEventArgs e, System.Drawing.Point ThisP, Pen ThisPenColor) { System.Drawing.Point ThisPoint1 = new System.Drawing.Point(ThisP.X - 5, ThisP.Y - 5); System.Drawing.Point ThisPoint2 = new System.Drawing.Point(ThisP.X + 5, ThisP.Y + 5); System.Drawing.Point ThisPoint3 = new System.Drawing.Point(ThisP.X - 5, ThisP.Y + 5); System.Drawing.Point ThisPoint4 = new System.Drawing.Point(ThisP.X + 5, ThisP.Y - 5); // Draw a X red cross e.Graphics.DrawLine(ThisPenColor, ThisPoint1, ThisPoint2); e.Graphics.DrawLine(ThisPenColor, ThisPoint3, ThisPoint4); } public System.Drawing.Point RescaleThisPoint(System.Drawing.Point ThisssPoint) { ThisssPoint.X = ((ThisssPoint.X - Form1_0.CenterX) / Scale) + Form1_0.CenterX; ThisssPoint.Y = ((ThisssPoint.Y - Form1_0.CenterY) / Scale) + Form1_0.CenterY; return ThisssPoint; } } }