D2R-BMBot/Scripts/Battle.cs

755 lines
34 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Threading.Tasks;
using System.Windows.Forms;
using static app.MapAreaStruc;
namespace app
{
public class Battle
{
Form1 Form1_0;
public int AreaX = 0;
public int AreaY = 0;
public bool ClearingArea = false;
public List<long> IgnoredMobsPointer = new List<long>();
public int ClearingSize = 0;
public long LastMobAttackedHP = 0;
public int AttackNotRegisteredCount = 0;
public int MoveTryCount = 0;
public int MaxAttackTry = 8; //edit this after knowing we used attack correctly
public int MaxMoveTry = 5;
public bool FirstAttackCasted = false;
public bool DoingBattle = false;
public bool ClearingFullArea = false;
public int TriedToMoveToMobsCount = 0;
public void SetForm1(Form1 form1_1)
{
Form1_0 = form1_1;
}
public bool EndBossBattle()
{
Form1_0.KeyMouse_0.ReleaseKey(System.Windows.Forms.Keys.E);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (CharConfig.ClearAfterBoss)
{
if (Form1_0.MobsStruc_0.GetMobs("", "", true, 30, new List<long>()))
{
Form1_0.Battle_0.DoBattleScript(30);
return false;
}
}
Form1_0.ItemsStruc_0.GrabAllItemsForGold();
Form1_0.Battle_0.ClearingArea = false;
Form1_0.Battle_0.DoingBattle = false;
Form1_0.Potions_0.CanUseSkillForRegen = true;
Form1_0.Town_0.FastTowning = false;
Form1_0.Town_0.UseLastTP = false;
return true;
}
public int[] FindBestPositionNoMobsArround(int playerX, int playerY, List<int[]> monsterPositions, int maxDisplacement)
{
// Create a list to store all possible positions around the player
List<int[]> possiblePositions = new List<int[]>();
// Generate all possible positions within the maximum displacement range
for (int x = playerX - maxDisplacement; x <= playerX + maxDisplacement; x++)
{
for (int y = playerY - maxDisplacement; y <= playerY + maxDisplacement; y++)
{
// Calculate the distance between the player and the current position
double distance = Math.Sqrt(Math.Pow(playerX - x, 2) + Math.Pow(playerY - y, 2));
// Check if the distance is within the maximum displacement and the position is not occupied by a monster
if (distance <= maxDisplacement && !IsMonsterNearPosition(x, y, monsterPositions))
{
//possiblePositions.Add(Tuple.Create(x, y));
possiblePositions.Add(new int[2] { x, y });
}
}
}
// Find the closest position among the possible positions
//int[] bestPosition = Tuple.Create(playerX, playerY);
int[] bestPosition = new int[2] { playerX, playerY };
double closestDistance = double.MaxValue;
foreach (var position in possiblePositions)
{
double distance = Math.Sqrt(Math.Pow(playerX - position[0], 2) + Math.Pow(playerY - position[1], 2));
if (distance < closestDistance)
{
closestDistance = distance;
bestPosition = position;
}
}
return bestPosition;
}
static bool IsMonsterNearPosition(int x, int y, List<int[]> monsterPositions)
{
foreach (var monsterPosition in monsterPositions)
{
if (monsterPosition[0] >= x - 6
&& monsterPosition[0] <= x + 6
&& monsterPosition[1] >= y - 6
&& monsterPosition[1] <= y + 6)
{
return true;
}
}
return false;
}
public Position GetBestAttackLocation(Position ThisAttackPos)
{
Position ReturnPos = new Position { X = ThisAttackPos.X, Y = ThisAttackPos.Y};
int ChoosenAttackLocation = 0; //0=Down, 1=Right, 2=Left, 3=Up
bool[,] ThisCollisionGrid = Form1_0.MapAreaStruc_0.CollisionGrid((Enums.Area)Form1_0.PlayerScan_0.levelNo);
if (ThisCollisionGrid.GetLength(0) == 0 || ThisCollisionGrid.GetLength(1) == 0) return ReturnPos;
if (Form1_0.MapAreaStruc_0.AllMapData.Count == 0) return ReturnPos;
int ThisX = ThisAttackPos.X - Form1_0.MapAreaStruc_0.AllMapData[(int)Form1_0.PlayerScan_0.levelNo - 1].Offset.X;
int ThisY = ThisAttackPos.Y - Form1_0.MapAreaStruc_0.AllMapData[(int)Form1_0.PlayerScan_0.levelNo - 1].Offset.Y;
if (ThisX < 0) return ReturnPos;
if (ThisY < 0) return ReturnPos;
if (ThisX > ThisCollisionGrid.GetLength(0) - 1) return ReturnPos;
if (ThisY > ThisCollisionGrid.GetLength(1) - 1) return ReturnPos;
try
{
bool AttackPosFound = false;
while (!AttackPosFound)
{
//check boundary for attacking the mobs from down position
if (ChoosenAttackLocation == 0)
{
//#####
//Check Validity
bool IsValid = true;
if (ThisX < 2) IsValid = false;
if (ThisY < 2) IsValid = false;
if (ThisX > ThisCollisionGrid.GetLength(0) - 1) IsValid = false;
if (ThisY > ThisCollisionGrid.GetLength(1) - 1) IsValid = false;
//#####
if (ThisCollisionGrid[ThisX, ThisY]
&& ThisCollisionGrid[ThisX - 1, ThisY]
&& ThisCollisionGrid[ThisX - 2, ThisY]
&& ThisCollisionGrid[ThisX - 1, ThisY - 1]
&& ThisCollisionGrid[ThisX - 2, ThisY - 1]
&& ThisCollisionGrid[ThisX - 1, ThisY - 2]
&& IsValid)
{
//Form1_0.method_1("Attack from Bottom!", Color.OrangeRed);
AttackPosFound = true;
ChoosenAttackLocation = 0; //Attack from Bottom
ReturnPos = new Position { X = ThisX + Form1_0.MapAreaStruc_0.AllMapData[(int)Form1_0.PlayerScan_0.levelNo - 1].Offset.X, Y = ThisY + Form1_0.MapAreaStruc_0.AllMapData[(int)Form1_0.PlayerScan_0.levelNo - 1].Offset.Y };
}
else
{
//change attack location to right
ThisX += 4;
ThisY -= 2;
ChoosenAttackLocation++;
}
}
//check boundary for attacking the mobs from Right position
if (ChoosenAttackLocation == 1)
{
//#####
//Check Validity
bool IsValid = true;
if (ThisX < 2) IsValid = false;
if (ThisY < 0) IsValid = false;
if (ThisX > ThisCollisionGrid.GetLength(0) - 1) IsValid = false;
if (ThisY > ThisCollisionGrid.GetLength(1) - 1) IsValid = false;
//#####
if (ThisCollisionGrid[ThisX, ThisY]
&& ThisCollisionGrid[ThisX - 1, ThisY]
&& ThisCollisionGrid[ThisX - 2, ThisY]
&& IsValid)
{
//Form1_0.method_1("Attack from Right!", Color.OrangeRed);
AttackPosFound = true;
ChoosenAttackLocation = 1; //Attack from Right
ReturnPos = new Position { X = ThisX + Form1_0.MapAreaStruc_0.AllMapData[(int)Form1_0.PlayerScan_0.levelNo - 1].Offset.X, Y = ThisY + Form1_0.MapAreaStruc_0.AllMapData[(int)Form1_0.PlayerScan_0.levelNo - 1].Offset.Y };
}
else
{
//change attack location to left
ThisX -= 7;
ChoosenAttackLocation++;
}
}
//check boundary for attacking the mobs from Left position
if (ChoosenAttackLocation == 2)
{
//#####
//Check Validity
bool IsValid = true;
if (ThisX < 1) IsValid = false;
if (ThisY < 1) IsValid = false;
if (ThisX > ThisCollisionGrid.GetLength(0) - 3) IsValid = false;
if (ThisY > ThisCollisionGrid.GetLength(1) - 1) IsValid = false;
//#####
if (ThisCollisionGrid[ThisX, ThisY]
&& ThisCollisionGrid[ThisX - 1, ThisY]
&& ThisCollisionGrid[ThisX + 1, ThisY]
&& ThisCollisionGrid[ThisX + 2, ThisY]
&& ThisCollisionGrid[ThisX, ThisY - 1]
&& ThisCollisionGrid[ThisX + 1, ThisY - 1]
&& IsValid)
{
//Form1_0.method_1("Attack from Left!", Color.OrangeRed);
AttackPosFound = true;
ChoosenAttackLocation = 2; //Attack from Left
ReturnPos = new Position { X = ThisX + Form1_0.MapAreaStruc_0.AllMapData[(int)Form1_0.PlayerScan_0.levelNo - 1].Offset.X, Y = ThisY + Form1_0.MapAreaStruc_0.AllMapData[(int)Form1_0.PlayerScan_0.levelNo - 1].Offset.Y };
}
else
{
//change attack location to top
ThisX += 3;
ThisY -= 5;
ChoosenAttackLocation++;
}
}
//check boundary for attacking the mobs from Up position (NOT RECOMMENDED FOR HAMMER)
if (ChoosenAttackLocation == 3)
{
//#####
//Check Validity
bool IsValid = true;
if (ThisX < 1) IsValid = false;
if (ThisY < 1) IsValid = false;
if (ThisX > ThisCollisionGrid.GetLength(0) - 2) IsValid = false;
if (ThisY > ThisCollisionGrid.GetLength(1) - 2) IsValid = false;
//#####
if (ThisCollisionGrid[ThisX, ThisY]
&& ThisCollisionGrid[ThisX - 1, ThisY]
&& ThisCollisionGrid[ThisX + 1, ThisY]
&& ThisCollisionGrid[ThisX, ThisY - 1]
&& ThisCollisionGrid[ThisX, ThisY + 1]
&& IsValid)
{
//Form1_0.method_1("Attack from Top!", Color.OrangeRed);
AttackPosFound = true;
ChoosenAttackLocation = 3; //Attack from Top
ReturnPos = new Position { X = ThisX + Form1_0.MapAreaStruc_0.AllMapData[(int)Form1_0.PlayerScan_0.levelNo - 1].Offset.X, Y = ThisY + Form1_0.MapAreaStruc_0.AllMapData[(int)Form1_0.PlayerScan_0.levelNo - 1].Offset.Y };
}
else
{
Form1_0.method_1("No Attack pos found!", Color.Red);
//no atack pos found??
AttackPosFound = true;
ChoosenAttackLocation++; //return attack pos = 4 (for error)
ReturnPos = new Position { X = ThisAttackPos.X, Y = ThisAttackPos.Y };
//ReturnPos = new Position { X = 0, Y = 0 };
}
}
}
}
catch { }
return ReturnPos;
}
public void CastDefense()
{
if (CharConfig.UseBO && !Form1_0.Town_0.GetInTown())
{
Form1_0.Potions_0.CheckIfWeUsePotion();
Form1_0.KeyMouse_0.PressKey(Keys.W);
Form1_0.WaitDelay(15);
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillBattleOrder);
Form1_0.WaitDelay(10);
/*Form1_0.KeyMouse_0.MouseClicc(1025, 1025);
Form1_0.WaitDelay(5);
Form1_0.KeyMouse_0.MouseClicc(1095, 610);
Form1_0.WaitDelay(5);*/
Form1_0.PlayerScan_0.GetPositions();
//press W again to switch weapon again
if (Form1_0.PlayerScan_0.RightSkill != Enums.Skill.BattleOrders)
{
Form1_0.KeyMouse_0.PressKey(Keys.W);
Form1_0.WaitDelay(15);
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillBattleOrder);
Form1_0.WaitDelay(10);
/*Form1_0.KeyMouse_0.MouseClicc(1025, 1025);
Form1_0.WaitDelay(5);
Form1_0.KeyMouse_0.MouseClicc(1095, 610);
Form1_0.WaitDelay(5);*/
Form1_0.PlayerScan_0.GetPositions();
}
Form1_0.KeyMouse_0.MouseCliccRight_RealPos(Form1_0.CenterX, Form1_0.CenterY);
Form1_0.WaitDelay(30);
//select battle command
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillBattleCommand);
Form1_0.WaitDelay(10);
/*Form1_0.KeyMouse_0.MouseClicc(1025, 1025);
Form1_0.WaitDelay(5);
Form1_0.KeyMouse_0.MouseClicc(1025, 610);
Form1_0.WaitDelay(5);*/
Form1_0.KeyMouse_0.MouseCliccRight_RealPos(Form1_0.CenterX, Form1_0.CenterY);
Form1_0.WaitDelay(30); //60 <-
Form1_0.Potions_0.CheckIfWeUsePotion();
//select battle cry
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillBattleCry);
Form1_0.WaitDelay(10);
/*Form1_0.KeyMouse_0.MouseClicc(1025, 1025);
Form1_0.WaitDelay(5);
Form1_0.KeyMouse_0.MouseClicc(1165, 610);
Form1_0.WaitDelay(5);*/
Form1_0.KeyMouse_0.MouseCliccRight_RealPos(Form1_0.CenterX, Form1_0.CenterY);
Form1_0.WaitDelay(60);
Form1_0.KeyMouse_0.PressKey(Keys.W);
Form1_0.WaitDelay(15);
Form1_0.PlayerScan_0.GetPositions();
}
//press W again to switch weapon again
if (Form1_0.PlayerScan_0.RightSkill == Enums.Skill.BattleCry
|| Form1_0.PlayerScan_0.RightSkill == Enums.Skill.BattleOrders
|| Form1_0.PlayerScan_0.RightSkill == Enums.Skill.BattleCommand)
{
Form1_0.KeyMouse_0.PressKey(Keys.W);
Form1_0.WaitDelay(15);
Form1_0.PlayerScan_0.GetPositions();
}
//cast sacred shield
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillCastDefense);
Form1_0.WaitDelay(5);
Form1_0.KeyMouse_0.MouseCliccRight_RealPos(Form1_0.CenterX, Form1_0.CenterY);
Form1_0.WaitDelay(35);
//cast sacred shield
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillLifeAura);
Form1_0.WaitDelay(5);
Form1_0.KeyMouse_0.MouseCliccRight_RealPos(Form1_0.CenterX, Form1_0.CenterY);
Form1_0.WaitDelay(5);
}
public void ClearAreaOfMobs(int ThisX, int ThisY, int ClearSize)
{
AreaX = ThisX;
AreaY = ThisY;
IgnoredMobsPointer = new List<long>();
ClearingSize = ClearSize;
AttackNotRegisteredCount = 0;
MoveTryCount = 0;
ClearingFullArea = false;
//ClearingArea = true;
if (Form1_0.MobsStruc_0.GetMobs("", "", true, ClearingSize, IgnoredMobsPointer)) ClearingArea = true;
}
public void ClearFullAreaOfMobs()
{
IgnoredMobsPointer = new List<long>();
AttackNotRegisteredCount = 0;
MoveTryCount = 0;
ClearingSize = 500;
ClearingFullArea = true;
if (Form1_0.MobsStruc_0.GetMobs("", "", true, ClearingSize, IgnoredMobsPointer)) ClearingArea = true;
}
public void SetBattleMoveAcceptOffset()
{
//if (CharConfig.RunningOnChar.ToLower().Contains("sorc")) Form1_0.Mover_0.MoveAcceptOffset = 10;
//else Form1_0.Mover_0.MoveAcceptOffset = 4; //default
}
public void ResetBattleMoveAcceptOffset()
{
//Form1_0.Mover_0.MoveAcceptOffset = 4; //default
}
public void RunBattleScript()
{
if ((Enums.Area) Form1_0.PlayerScan_0.levelNo == Enums.Area.ThroneOfDestruction)
{
//15096,5096
if (Form1_0.PlayerScan_0.yPosFinal > 5096)
{
DoingBattle = false;
FirstAttackCasted = false;
ResetBattleMoveAcceptOffset();
if (!ClearingFullArea) Form1_0.PathFinding_0.MoveToThisPos(new Position { X = AreaX, Y = AreaY });
//Form1_0.Mover_0.MoveToLocation(AreaX, AreaY);
ClearingArea = false;
return;
}
}
if (Form1_0.MobsStruc_0.GetMobs("", "", true, ClearingSize, IgnoredMobsPointer))
{
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && Form1_0.MobsStruc_0.MobsName == "BaalSubject5") Form1_0.Baal_0.Wave5Detected = true;
DoingBattle = true;
SetBattleMoveAcceptOffset();
Form1_0.Mover_0.MoveAcceptOffset = 2;
Position ThisAttackPos = GetBestAttackLocation(new Position { X = Form1_0.MobsStruc_0.xPosFinal + 1, Y = Form1_0.MobsStruc_0.yPosFinal + 5 });
if (ThisAttackPos.X != 0 && ThisAttackPos.Y != 0)
{
if (!Form1_0.Mover_0.MoveToLocationAttack(ThisAttackPos.X, ThisAttackPos.Y))
{
TriedToMoveToMobsCount++;
if (TriedToMoveToMobsCount >= 2)
{
ThisAttackPos = ResetMovePostionInBetween(ThisAttackPos);
Form1_0.Mover_0.MoveToLocationAttack(ThisAttackPos.X, ThisAttackPos.Y);
TriedToMoveToMobsCount = 0;
}
}
Form1_0.KeyMouse_0.ReleaseKey(System.Windows.Forms.Keys.E);
}
//Form1_0.Mover_0.MoveToLocationAttack(Form1_0.MobsStruc_0.xPosFinal - 1, Form1_0.MobsStruc_0.yPosFinal + 2);
Form1_0.Mover_0.MoveAcceptOffset = 4;
ResetBattleMoveAcceptOffset();
FirstAttackCasting();
SetSkills();
CastSkills();
if (CharConfig.RunningOnChar == "PaladinHammer")
{
CastSkills();
CastSkills();
}
AttackTryCheck();
}
else
{
Form1_0.MobsStruc_0.xPosFinal = 0;
Form1_0.MobsStruc_0.yPosFinal = 0;
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && Form1_0.Baal_0.Wave5Detected) Form1_0.Baal_0.Wave5Cleared = true;
TriedToMoveToMobsCount = 0;
DoingBattle = false;
FirstAttackCasted = false;
ResetBattleMoveAcceptOffset();
if (!ClearingFullArea) Form1_0.PathFinding_0.MoveToThisPos(new Position { X = AreaX, Y = AreaY });
//Form1_0.Mover_0.MoveToLocation(AreaX, AreaY);
ClearingArea = false;
}
}
public bool DoBattleScript(int MaxDistance)
{
if (Form1_0.MobsStruc_0.GetMobs("", "", true, MaxDistance, new List<long>()))
{
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && Form1_0.MobsStruc_0.MobsName == "BaalSubject5") Form1_0.Baal_0.Wave5Detected = true;
DoingBattle = true;
SetBattleMoveAcceptOffset();
Form1_0.Mover_0.MoveAcceptOffset = 2;
Position ThisAttackPos = GetBestAttackLocation(new Position { X = Form1_0.MobsStruc_0.xPosFinal + 1, Y = Form1_0.MobsStruc_0.yPosFinal + 5 });
if (ThisAttackPos.X != 0 && ThisAttackPos.Y != 0)
{
if (!Form1_0.Mover_0.MoveToLocationAttack(ThisAttackPos.X, ThisAttackPos.Y))
{
TriedToMoveToMobsCount++;
if (TriedToMoveToMobsCount >= 2)
{
ThisAttackPos = ResetMovePostionInBetween(ThisAttackPos);
Form1_0.Mover_0.MoveToLocationAttack(ThisAttackPos.X, ThisAttackPos.Y);
TriedToMoveToMobsCount = 0;
}
}
Form1_0.KeyMouse_0.ReleaseKey(System.Windows.Forms.Keys.E);
}
//Form1_0.Mover_0.MoveToLocationAttack(Form1_0.MobsStruc_0.xPosFinal - 1, Form1_0.MobsStruc_0.yPosFinal + 2);
Form1_0.Mover_0.MoveAcceptOffset = 4;
ResetBattleMoveAcceptOffset();
FirstAttackCasting();
SetSkills();
CastSkills();
if (CharConfig.RunningOnChar == "PaladinHammer")
{
CastSkills();
CastSkills();
}
AttackTryCheck();
return true;
}
Form1_0.MobsStruc_0.xPosFinal = 0;
Form1_0.MobsStruc_0.yPosFinal = 0;
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && Form1_0.Baal_0.Wave5Detected) Form1_0.Baal_0.Wave5Cleared = true;
TriedToMoveToMobsCount = 0;
DoingBattle = false;
FirstAttackCasted = false;
return false;
}
public void RunBattleScriptOnThisMob(string MobType, string MobName)
{
if (Form1_0.MobsStruc_0.GetMobs(MobType, MobName, false, 200, new List<long>()))
{
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && Form1_0.MobsStruc_0.MobsName == "BaalSubject5") Form1_0.Baal_0.Wave5Detected = true;
DoingBattle = true;
SetBattleMoveAcceptOffset();
Form1_0.Mover_0.MoveAcceptOffset = 2;
Position ThisAttackPos = GetBestAttackLocation(new Position { X = Form1_0.MobsStruc_0.xPosFinal + 1, Y = Form1_0.MobsStruc_0.yPosFinal + 5 });
if (ThisAttackPos.X != 0 && ThisAttackPos.Y != 0)
{
if (!Form1_0.Mover_0.MoveToLocationAttack(ThisAttackPos.X, ThisAttackPos.Y))
{
TriedToMoveToMobsCount++;
if (TriedToMoveToMobsCount >= 2)
{
ThisAttackPos = ResetMovePostionInBetween(ThisAttackPos);
Form1_0.Mover_0.MoveToLocationAttack(ThisAttackPos.X, ThisAttackPos.Y);
TriedToMoveToMobsCount = 0;
}
}
Form1_0.KeyMouse_0.ReleaseKey(System.Windows.Forms.Keys.E);
}
//Form1_0.Mover_0.MoveToLocationAttack(Form1_0.MobsStruc_0.xPosFinal - 1, Form1_0.MobsStruc_0.yPosFinal + 2);
Form1_0.Mover_0.MoveAcceptOffset = 4;
ResetBattleMoveAcceptOffset();
FirstAttackCasting();
SetSkills();
CastSkills();
if (CharConfig.RunningOnChar == "PaladinHammer")
{
CastSkills();
CastSkills();
}
AttackTryCheck();
}
else
{
Form1_0.MobsStruc_0.xPosFinal = 0;
Form1_0.MobsStruc_0.yPosFinal = 0;
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && Form1_0.Baal_0.Wave5Detected) Form1_0.Baal_0.Wave5Cleared = true;
TriedToMoveToMobsCount = 0;
DoingBattle = false;
FirstAttackCasted = false;
}
}
public Position ResetMovePostionInBetween(Position ThisPos)
{
Position ReturnPos = new Position { };
ReturnPos.X = 0;
ReturnPos.Y = 0;
if (ThisPos.X >= Form1_0.PlayerScan_0.xPosFinal) ReturnPos.X = ThisPos.X - ((ThisPos.X - Form1_0.PlayerScan_0.xPosFinal) / 2);
if (ThisPos.Y >= Form1_0.PlayerScan_0.yPosFinal) ReturnPos.Y = ThisPos.Y - ((ThisPos.Y - Form1_0.PlayerScan_0.yPosFinal) / 2);
if (ThisPos.X < Form1_0.PlayerScan_0.xPosFinal) ReturnPos.X = ThisPos.X + ((Form1_0.PlayerScan_0.xPosFinal - ThisPos.X) / 2);
if (ThisPos.Y < Form1_0.PlayerScan_0.yPosFinal) ReturnPos.Y = ThisPos.Y + ((Form1_0.PlayerScan_0.yPosFinal - ThisPos.Y) / 2);
return ReturnPos;
}
public void MoveAway()
{
int MoveDistance = 5;
//Form1_0.WaitDelay(5); //wait a little bit, we just casted attack
if (MoveTryCount == 1)
{
Form1_0.Mover_0.MoveAcceptOffset = 2;
Form1_0.Mover_0.MoveToLocationAttack(Form1_0.PlayerScan_0.xPosFinal + MoveDistance, Form1_0.PlayerScan_0.yPosFinal + MoveDistance);
Form1_0.Mover_0.MoveAcceptOffset = 4;
}
if (MoveTryCount == 2)
{
Form1_0.Mover_0.MoveAcceptOffset = 2;
Form1_0.Mover_0.MoveToLocationAttack(Form1_0.PlayerScan_0.xPosFinal - MoveDistance, Form1_0.PlayerScan_0.yPosFinal + MoveDistance);
Form1_0.Mover_0.MoveAcceptOffset = 4;
}
if (MoveTryCount == 3)
{
Form1_0.Mover_0.MoveAcceptOffset = 2;
Form1_0.Mover_0.MoveToLocationAttack(Form1_0.PlayerScan_0.xPosFinal + MoveDistance, Form1_0.PlayerScan_0.yPosFinal - MoveDistance);
Form1_0.Mover_0.MoveAcceptOffset = 4;
}
if (MoveTryCount == 4)
{
Form1_0.Mover_0.MoveAcceptOffset = 2;
Form1_0.Mover_0.MoveToLocationAttack(Form1_0.PlayerScan_0.xPosFinal - MoveDistance, Form1_0.PlayerScan_0.yPosFinal - MoveDistance);
Form1_0.Mover_0.MoveAcceptOffset = 4;
}
}
public void AttackTryCheck()
{
Form1_0.Potions_0.CheckIfWeUsePotion();
Form1_0.MobsStruc_0.GetLastMobs();
//long AttackedThisPointer = Form1_0.MobsStruc_0.LastMobsPointerLocation;
//if (AttackedThisPointer == LastMobAttackedPointer)
//{
if (Form1_0.MobsStruc_0.MobsHP >= LastMobAttackedHP)
{
AttackNotRegisteredCount++;
//Form1_0.method_1("Attack not registered! " + AttackNotRegisteredCount + "/" + MaxAttackTry, Color.OrangeRed);
if (AttackNotRegisteredCount >= MaxAttackTry)
{
AttackNotRegisteredCount = 0;
MoveTryCount++;
Form1_0.method_1("Attack not registered, moving away! " + MoveTryCount + "/" + MaxMoveTry, Color.OrangeRed);
MoveAway();
if (MoveTryCount >= MaxMoveTry)
{
MoveTryCount = 0;
IgnoredMobsPointer.Add(Form1_0.MobsStruc_0.LastMobsPointerLocation);
}
}
}
else
{
//Form1_0.method_1("Attack registered! " + AttackNotRegisteredCount + "/" + MaxAttackTry, Color.DarkGreen);
AttackNotRegisteredCount = 0;
MoveTryCount = 0;
}
/*}
else
{
AttackNotRegisteredCount = 0;
MoveTryCount = 0;
}*/
//LastMobAttackedPointer = Form1_0.MobsStruc_0.LastMobsPointerLocation;
LastMobAttackedHP = Form1_0.MobsStruc_0.MobsHP;
}
public void SetSkills()
{
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillAttack);
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillAura);
}
public void CastSkills()
{
if (Form1_0.MobsStruc_0.xPosFinal != 0 && Form1_0.MobsStruc_0.yPosFinal != 0)
{
Form1_0.PlayerScan_0.GetPositions();
Position itemScreenPos = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, Form1_0.MobsStruc_0.xPosFinal, Form1_0.MobsStruc_0.yPosFinal);
if (!CharConfig.PlayerAttackWithRightHand)
{
Form1_0.KeyMouse_0.SendSHIFT_CLICK_ATTACK(itemScreenPos.X, itemScreenPos.Y - 30);
}
else
{
Form1_0.KeyMouse_0.MouseCliccRightAttackMove(itemScreenPos.X, itemScreenPos.Y - 30);
}
}
else
{
if (!CharConfig.PlayerAttackWithRightHand)
{
Form1_0.KeyMouse_0.SendSHIFT_CLICK_ATTACK(Form1_0.CenterX, Form1_0.CenterY - 1);
}
else
{
Form1_0.KeyMouse_0.MouseCliccRightAttackMove(Form1_0.CenterX, Form1_0.CenterY - 1);
}
}
//Form1_0.WaitDelay(5);
//Form1_0.WaitDelay(1);
}
public void CastSkillsNoMove()
{
if (Form1_0.MobsStruc_0.xPosFinal != 0 && Form1_0.MobsStruc_0.yPosFinal != 0)
{
Form1_0.PlayerScan_0.GetPositions();
Position itemScreenPos = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, Form1_0.MobsStruc_0.xPosFinal, Form1_0.MobsStruc_0.yPosFinal);
if (!CharConfig.PlayerAttackWithRightHand)
{
//Form1_0.KeyMouse_0.SendSHIFT_CLICK_ATTACK(itemScreenPos.X, itemScreenPos.Y - 30);
Form1_0.KeyMouse_0.SendSHIFT_CLICK_ATTACK_CAST_NO_MOVE(itemScreenPos.X, itemScreenPos.Y - 30);
}
else
{
Form1_0.KeyMouse_0.MouseCliccRightAttackMove(itemScreenPos.X, itemScreenPos.Y - 30);
}
}
else
{
if (!CharConfig.PlayerAttackWithRightHand)
{
//Form1_0.KeyMouse_0.SendSHIFT_CLICK_ATTACK(Form1_0.CenterX, Form1_0.CenterY - 1);
Form1_0.KeyMouse_0.SendSHIFT_CLICK_ATTACK_CAST_NO_MOVE(Form1_0.CenterX, Form1_0.CenterY - 1);
}
else
{
Form1_0.KeyMouse_0.MouseCliccRightAttackMove(Form1_0.CenterX, Form1_0.CenterY - 1);
}
}
//Form1_0.WaitDelay(5);
//Form1_0.WaitDelay(1);
}
public void FirstAttackCasting()
{
if (!FirstAttackCasted)
{
if (CharConfig.RunningOnChar == "SorceressBlizzard")
{
Form1_0.KeyMouse_0.PressKey(CharConfig.KeySkillAttack); //select static
int tryes = 0;
while (tryes < 6)
{
CastSkills();
Form1_0.WaitDelay(35);
tryes++;
}
}
FirstAttackCasted = true;
}
}
}
}