D2R-BMBot/Scripts/Mover.cs

245 lines
10 KiB
C#
Raw Normal View History

2023-04-20 21:39:08 -07:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace app
{
public class Mover
{
Form1 Form1_0;
public int MaxMoveTry = 5;
public int MoveAcceptOffset = 4;
2023-04-27 20:42:59 -07:00
public long StartAreaBeforeMoving = 0;
2023-04-20 21:39:08 -07:00
2024-03-29 00:19:36 -07:00
public bool AllowFastMove = false;
public DateTime LastTimeSinceTeleport = DateTime.Now;
2023-04-20 21:39:08 -07:00
public void SetForm1(Form1 form1_1)
{
Form1_0 = form1_1;
}
2024-03-29 00:19:36 -07:00
public bool MoveToLocation(int ThisX, int ThisY, bool AllowPickingItem = false, bool AllowMoveSideWay = true)
2023-04-20 21:39:08 -07:00
{
Form1_0.PlayerScan_0.GetPositions();
2023-04-27 20:42:59 -07:00
StartAreaBeforeMoving = Form1_0.PlayerScan_0.levelNo;
2023-04-20 21:39:08 -07:00
//no need to move we are close already!
if (Form1_0.PlayerScan_0.xPosFinal >= (ThisX - MoveAcceptOffset)
&& Form1_0.PlayerScan_0.xPosFinal <= (ThisX + MoveAcceptOffset)
&& Form1_0.PlayerScan_0.yPosFinal >= (ThisY - MoveAcceptOffset)
&& Form1_0.PlayerScan_0.yPosFinal <= (ThisY + MoveAcceptOffset))
{
return true;
}
if (!Form1_0.GameStruc_0.IsInGame() || !Form1_0.Running)
{
return false;
}
int TryMove = 0;
int TryMove2 = 0;
int LastX = Form1_0.PlayerScan_0.xPosFinal;
int LastY = Form1_0.PlayerScan_0.yPosFinal;
Dictionary<string, int> itemScreenPos = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, ThisX, ThisY);
if (!CharConfig.UseTeleport || (CharConfig.UseTeleport && Form1_0.Town_0.GetInTown()))
{
Form1_0.KeyMouse_0.MouseClicHoldWithoutRelease();
Form1_0.KeyMouse_0.PressKeyHold(System.Windows.Forms.Keys.E);
}
while (true)
{
if (Form1_0.Town_0.GetInTown())
{
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillfastMoveAtTown);
2024-03-29 00:19:36 -07:00
AllowFastMove = false;
2023-04-20 21:39:08 -07:00
}
else
{
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillfastMoveOutsideTown);
2024-03-29 00:19:36 -07:00
if (CharConfig.UseTeleport) AllowFastMove = true;
2023-04-20 21:39:08 -07:00
}
//calculate new Y clicking offset, else it will clic on bottom menu items
2023-04-27 20:42:59 -07:00
if (itemScreenPos["y"] >= (Form1_0.ScreenY - Form1_0.ScreenYMenu))
2023-04-20 21:39:08 -07:00
{
//int Sx = itemScreenPos["x"];
//int Sy = itemScreenPos["y"];
2023-04-27 20:42:59 -07:00
int DiffY = itemScreenPos["y"] - (Form1_0.ScreenY - Form1_0.ScreenYMenu);
2023-04-20 21:39:08 -07:00
double DiffPercent = (DiffY * 100) / itemScreenPos["y"];
//double DiffPercent = (DiffY * 100) / Form1_0.ScreenY;
itemScreenPos["x"] = (int) (itemScreenPos["x"] - ((DiffPercent * itemScreenPos["x"]) / 100));
2023-04-27 20:42:59 -07:00
itemScreenPos["y"] = (Form1_0.ScreenY - Form1_0.ScreenYMenu);
2023-04-20 21:39:08 -07:00
//Console.WriteLine("corrected pos from: " + Sx + "," + Sy + " to: " + itemScreenPos["x"] + "," + itemScreenPos["y"]);
}
if (!CharConfig.UseTeleport || (CharConfig.UseTeleport && Form1_0.Town_0.GetInTown()))
{
Form1_0.KeyMouse_0.MouseMoveTo(itemScreenPos["x"], itemScreenPos["y"]);
}
if (CharConfig.UseTeleport && !Form1_0.Town_0.GetInTown())
{
Form1_0.KeyMouse_0.MouseCliccRight(itemScreenPos["x"], itemScreenPos["y"]);
2024-03-29 00:19:36 -07:00
//#######
if (!AllowFastMove)
{
LastTimeSinceTeleport = DateTime.Now;
TimeSpan ThisTimeCheck = DateTime.Now - LastTimeSinceTeleport;
while (Form1_0.PlayerScan_0.xPosFinal == LastX && Form1_0.PlayerScan_0.yPosFinal == LastY && ThisTimeCheck.TotalMilliseconds < 200)
{
Application.DoEvents();
Form1_0.PlayerScan_0.GetPositions();
ThisTimeCheck = DateTime.Now - LastTimeSinceTeleport;
}
}
2024-03-30 00:16:39 -07:00
else
{
Form1_0.SetProcessingTime();
}
2024-03-29 00:19:36 -07:00
//#######
//Form1_0.WaitDelay(10);
2023-04-20 21:39:08 -07:00
}
//Form1_0.WaitDelay(2);
Application.DoEvents();
Form1_0.PlayerScan_0.GetPositions();
2024-03-29 00:19:36 -07:00
if (AllowPickingItem) Form1_0.ItemsStruc_0.GetItems(true); //#############
2023-04-27 20:42:59 -07:00
Form1_0.Potions_0.CheckIfWeUsePotion();
2023-04-20 21:39:08 -07:00
itemScreenPos = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, ThisX, ThisY);
Application.DoEvents();
2023-04-27 20:42:59 -07:00
//not in suposed area, may have taken unwanted tp
if (Form1_0.PlayerScan_0.levelNo < StartAreaBeforeMoving - 1
|| Form1_0.PlayerScan_0.levelNo > StartAreaBeforeMoving + 1)
{
return false;
}
2023-04-20 21:39:08 -07:00
//detect is moving
if (Form1_0.PlayerScan_0.xPosFinal != LastX
|| Form1_0.PlayerScan_0.yPosFinal != LastY)
{
TryMove = 0;
}
else
{
TryMove++;
}
//break moving loop
if (Form1_0.PlayerScan_0.xPosFinal >= (ThisX - MoveAcceptOffset)
&& Form1_0.PlayerScan_0.xPosFinal <= (ThisX + MoveAcceptOffset)
&& Form1_0.PlayerScan_0.yPosFinal >= (ThisY - MoveAcceptOffset)
&& Form1_0.PlayerScan_0.yPosFinal <= (ThisY + MoveAcceptOffset))
{
break;
}
if (TryMove >= MaxMoveTry)
{
2024-03-29 00:19:36 -07:00
if (!AllowMoveSideWay) return false;
2023-04-20 21:39:08 -07:00
if (!Form1_0.GameStruc_0.IsInGame() || !Form1_0.Running)
{
return false;
}
2024-03-29 00:19:36 -07:00
if (AllowPickingItem) Form1_0.ItemsStruc_0.GetItems(true); //#############
2023-04-20 21:39:08 -07:00
Form1_0.Potions_0.CheckIfWeUsePotion();
2023-04-27 20:42:59 -07:00
if (TryMove2 == 0) Form1_0.KeyMouse_0.MouseMoveTo(Form1_0.ScreenX / 2, Form1_0.ScreenY / 2);
if (TryMove2 == 1) Form1_0.KeyMouse_0.MouseMoveTo(Form1_0.ScreenX / 2 - 250, Form1_0.ScreenY / 2);
if (TryMove2 == 2) Form1_0.KeyMouse_0.MouseMoveTo(Form1_0.ScreenX / 2 + 250, Form1_0.ScreenY / 2);
if (TryMove2 == 3) Form1_0.KeyMouse_0.MouseMoveTo(Form1_0.ScreenX / 2, Form1_0.ScreenY / 2 - 250);
if (TryMove2 == 4) Form1_0.KeyMouse_0.MouseMoveTo(Form1_0.ScreenX / 2, Form1_0.ScreenY / 2 + 250);
2023-04-20 21:39:08 -07:00
if (!CharConfig.UseTeleport || (CharConfig.UseTeleport && Form1_0.Town_0.GetInTown()))
{
Form1_0.KeyMouse_0.MouseClicRelease();
Form1_0.KeyMouse_0.ReleaseKey(System.Windows.Forms.Keys.E);
Form1_0.KeyMouse_0.MouseClicHoldWithoutRelease();
Form1_0.KeyMouse_0.PressKeyHold(System.Windows.Forms.Keys.E);
}
Form1_0.WaitDelay(4);
TryMove2++;
if (TryMove2 >= MaxMoveTry)
{
break;
}
}
LastX = Form1_0.PlayerScan_0.xPosFinal;
LastY = Form1_0.PlayerScan_0.yPosFinal;
}
bool MovedCorrectly = false;
if (Form1_0.PlayerScan_0.xPosFinal >= (ThisX - MoveAcceptOffset)
&& Form1_0.PlayerScan_0.xPosFinal <= (ThisX + MoveAcceptOffset)
&& Form1_0.PlayerScan_0.yPosFinal >= (ThisY - MoveAcceptOffset)
&& Form1_0.PlayerScan_0.yPosFinal <= (ThisY + MoveAcceptOffset))
{
MovedCorrectly = true;
}
if (!CharConfig.UseTeleport || (CharConfig.UseTeleport && Form1_0.Town_0.GetInTown()))
{
Form1_0.KeyMouse_0.MouseClicRelease();
Form1_0.KeyMouse_0.ReleaseKey(System.Windows.Forms.Keys.E);
}
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillDefenseAura);
//#######
//finish moving
if (MovedCorrectly)
{
FinishMoving();
}
//#######
return MovedCorrectly;
}
public void FinishMoving()
{
//Form1_0.WaitDelay(5);
Form1_0.PlayerScan_0.GetPositions();
bool IsMoving = true;
int LastX = Form1_0.PlayerScan_0.xPosFinal;
int LastY = Form1_0.PlayerScan_0.yPosFinal;
2024-03-29 00:19:36 -07:00
int Triess = 0;
2023-04-20 21:39:08 -07:00
while (IsMoving)
{
if (!Form1_0.GameStruc_0.IsInGame() || !Form1_0.Running)
{
return;
}
if (Form1_0.PlayerScan_0.xPosFinal == LastX
|| Form1_0.PlayerScan_0.yPosFinal == LastY)
{
IsMoving = false;
}
Application.DoEvents();
//Form1_0.WaitDelay(5);
Form1_0.PlayerScan_0.GetPositions();
LastX = Form1_0.PlayerScan_0.xPosFinal;
LastY = Form1_0.PlayerScan_0.yPosFinal;
2024-03-29 00:19:36 -07:00
Triess++;
if (Triess >= 20) IsMoving = false;
2023-04-20 21:39:08 -07:00
}
}
}
}