Example #1
0
 private void CheckCombat()
 {
     if ((wow.Objects[0].IsInCombat == 1) & (wow.IsMounted == 0))
     {
         int Index = GetTarget();
         if (Index != 0)
         {
             double Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, wow.Objects[Index].X, wow.Objects[Index].Y, wow.Objects[Index].Z);
             wow.SelectTarget(wow.Objects[Index].GUID);
             WowControl.FarmStatus = "Fighting";
             Target = wow.Objects[Index].GUID;
             WowControl.UpdateStatus("Fighting with \"" + wow.Objects[Index].Name + "\".");
             WowControl.UpdateCombatLog("Fighting with \"" + wow.Objects[Index].Name + "\".");
             if (WowControl.ClassType == 1)
             {
                 wow.GoTo(0, 0, 0, wow.Objects[Index].GUID, 11);
             }
             else
             {
                 if (Range > 30)
                 {
                     wow.GoTo(0, 0, 0, wow.Objects[Index].GUID, 11);
                 }
                 else
                 {
                     wow.GoTo(0, 0, 0, 0, 3);
                     WowControl.Sleep(100);
                     wow.GoTo(0, 0, 0, wow.Objects[Index].GUID, 1);
                 }
             }
             Abilities.UseAbilities(wow, "");
         }
         return;
     }
 }
Example #2
0
        private int GetTarget()
        {
            int    ClosestIndex = 0;
            double MinRange     = 10000;

            for (int i = 1; i < wow.Objects.Count; i++)
            {
                if (wow.Objects[i].GUID == Target)
                {
                    if ((wow.Objects[i].Health == 0) & (wow.Objects[i].Name != ""))
                    {
                        WowControl.UpdateStatus("\"" + wow.Objects[i].Name + "\" owned xD.");
                        WowControl.UpdateCombatLog("\"" + wow.Objects[i].Name + "\" owned xD.");
                    }
                }
                if (wow.Objects[i].IsInCombat == 1)
                {
                    double Range = WowControl.CheckPoint(wow.Objects[i].X, wow.Objects[i].Y, wow.Objects[i].Z, wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z);
                    if (Range < MinRange)
                    {
                        ClosestIndex = i;
                        if (WowControl.CheckPoint(wow.Objects[i].X, wow.Objects[i].Y, wow.Objects[i].Z, wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z) < MinRange)
                        {
                            MinRange = WowControl.CheckPoint(wow.Objects[i].X, wow.Objects[i].Y, wow.Objects[i].Z, wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z);
                        }
                    }
                }
            }
            return(ClosestIndex);
        }
Example #3
0
 private void button1_Click(object sender, EventArgs e)
 {
     if (wow.wow.ProcessId != 0)
     {
         if (Running == false)
         {
             if (Defender.CheckLicense() == true)
             {
                 WowControl.UpdateStatus("License key found.");
                 Running      = true;
                 button1.Text = "Stop";
                 WowControl.UpdateStatus("Starting bot.");
             }
             else
             {
                 WowControl.UpdateStatus("Invalid license key.");
             }
         }
         else
         {
             wow.GoTo(0, 0, 0, 0, 3);//Stop
             WowControl.FarmStatus = "Stopped";
             Running      = false;
             button1.Text = "Run";
             WowControl.UpdateStatus("Stopping bot.");
         }
     }
     else
     {
         WowControl.UpdateStatus("Can't run, not found wow process.");
     }
 }
Example #4
0
 private void LoadCfg(String CfgName)
 {
     WowControl.LoadCfgFromFile(CfgName);
     FillListbox();
     checkBox8.Checked                 = WowControl.LoadVariableBool("FarmHonor");
     checkBox6.Checked                 = WowControl.LoadVariableBool("FarmMining");
     checkBox5.Checked                 = WowControl.LoadVariableBool("FarmSkinning");
     checkBox7.Checked                 = WowControl.LoadVariableBool("WPWrite");
     checkBox1.Checked                 = WowControl.LoadVariableBool("Autoreconnect");
     comboBox3.SelectedIndex           = WowControl.LoadVariableInt("CharNo");
     comboBox2.SelectedIndex           = WowControl.LoadVariableInt("RealmNo");
     comboBox8.SelectedIndex           = WowControl.LoadVariableInt("ClassType");
     textBox1.Text                     = WowControl.LoadVariableString("Account");
     WowControl.MinPlayersInGroup      = WowControl.LoadVariableInt("MinPlayersInGroup");
     WowControl.FriendCheckRange       = WowControl.LoadVariableInt("CheckRange");
     WowControl.EnemyCheckRange        = WowControl.LoadVariableInt("EnemyCheckRange");
     WowControl.HealDDPriority         = WowControl.LoadVariableInt("HealDDPriority");
     WowControl.GroupRange             = WowControl.LoadVariableInt("GroupRange");
     WowControl.RangeFromPlayerToGroup = WowControl.LoadVariableInt("RangeFromPlayerToGroup");
     WowControl.StayWithGroup          = WowControl.LoadVariableBool("StayWithGroup");
     WowControl.LootMobs               = WowControl.LoadVariableBool("LootMobs");
     WowControl.FarmMount              = WowControl.LoadVariableInt("FarmMount");
     WowControl.SkiningKillAll         = WowControl.LoadVariableBool("SkiningKillAll");
     WowControl.SkiningRange           = WowControl.LoadVariableInt("SkiningRange");
     WowControl.SkinAll                = WowControl.LoadVariableBool("SkinAll");
     WowControl.UpdateStatus("Config " + comboBox1.Text + " loaded!");
 }
Example #5
0
        private void CheckCombat()
        {
            if ((wow.Objects[0].IsInCombat == 1) & (wow.IsMounted == 0))
            {
                int Index = FindClosestMob();
                if (Index != 0)
                {
                    WowControl.FarmStatus = "Fighting";
                    Target = wow.Objects[Index].GUID;
                    WowControl.UpdateStatus("Fighting with \"" + wow.Objects[Index].Name + "\".");
                    WowControl.UpdateCombatLog("Fighting with \"" + wow.Objects[Index].Name + "\".");
                    if (wow.Objects[Index].IsInCombat == 1)
                    {
                        switch (WowControl.ClassType)
                        {
                        case 0:    //Ranged
                            wow.GoTo(0, 0, 0, wow.Objects[Index].GUID, 1);
                            break;

                        case 1:    //Melee
                            wow.GoTo(0, 0, 0, wow.Objects[Index].GUID, 11);
                            break;
                        }
                    }
                    Abilities.UseAbilities(wow);
                }
                return;
            }
        }
Example #6
0
 private void textBox4_TextChanged(object sender, EventArgs e)
 {
     try
     {
         WowControl.MinPlayersInGroup = Convert.ToInt32(textBox4.Text);
     }
     catch (Exception E) { WowControl.UpdateStatus(E.Message); }
 }
Example #7
0
 private void textBox1_TextChanged(object sender, EventArgs e)
 {
     try
     {
         WowControl.SkiningRange = Convert.ToInt32(textBox1.Text);
     }
     catch (Exception E) { WowControl.UpdateStatus(textBox1.Text + ". " + E.Message); }
 }
Example #8
0
 private void textBox5_TextChanged(object sender, EventArgs e)
 {
     try
     {
         WowControl.EnemyCheckRange = Convert.ToInt32(textBox5.Text);
     }
     catch (Exception E) { WowControl.UpdateStatus(E.Message); }
 }
Example #9
0
        private int FindClosestMob()
        {
            int    ClosestIndex = 0;
            double MinRange     = 10000;
            bool   Looted       = false;
            bool   Skined       = true;

            for (int i = 0; i < wow.Objects.Count; i++)
            {
                bool Bad = false;
                if (WowControl.BadObjects.Count > 0)
                {
                    for (int c = 0; c < WowControl.BadObjects.Count; c++)
                    {
                        if (WowControl.BadObjects[c] == wow.Objects[i].GUID)
                        {
                            Bad = true;
                        }
                    }
                }
                if ((Bad == false) & (wow.Objects[i].Type == 3) & (wow.Objects[i].Level > 1))
                {
                    if ((WowControl.CheckPoint(wow.Objects[i].X, wow.Objects[i].Y, wow.Objects[i].Z, wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z) < MinRange) & (WowControl.CheckPoint(wow.Objects[i].X, wow.Objects[i].Y, wow.Objects[i].Z, wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z) < WowControl.SkiningRange))
                    {
                        ClosestIndex = i;
                        if (WowControl.CheckPoint(wow.Objects[i].X, wow.Objects[i].Y, wow.Objects[i].Z, wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z) < MinRange)
                        {
                            MinRange = WowControl.CheckPoint(wow.Objects[i].X, wow.Objects[i].Y, wow.Objects[i].Z, wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z);
                        }
                    }
                }
                if (SkinningObject.Guid == wow.Objects[i].GUID)
                {
                    Skined = false;
                }
                if ((LootingObject.Guid == wow.Objects[i].GUID) & (wow.Objects[i].IsLootable == 0))
                {
                    Looted = true;
                }
            }
            if ((Skined == true) & (Skining == true))
            {
                Skining   = false;
                TryToSkin = 0;
                WowControl.Loot.Add(SkinningObject);
                CurrentWP = GetClosestWP(WowControl.WP);
                WowControl.UpdateStatus("Skined: \"" + SkinningObject.Name + "\".");
            }
            if ((Looted == true) & (Looting == true) & (Skining == false))
            {
                Looted    = false;
                TryToLoot = 0;
                CurrentWP = GetClosestWP(WowControl.WP);
                WowControl.UpdateStatus("Looted : \"" + LootingObject.Name + "\".");
            }
            return(ClosestIndex);
        }
Example #10
0
 public void DownloadNewVersion()
 {
     try
     {
         WebClient WC = new WebClient();
         WC.DownloadFile("http://farmhelper.googlecode.com/files/FarmHelper" + AvailableVersion + ".exe", Application.StartupPath + "\\Newversion.exe");
         WC.Dispose();
     }
     catch (Exception E) { WowControl.UpdateStatus(E.Message); }
 }
Example #11
0
 private void CheckForLootSkin()
 {
     if ((DateTime.Now - WowControl.BotStartTime).TotalMinutes > 60)
     {
         WowControl.BadObjects.Clear();
         WowControl.BotStartTime = DateTime.Now;
     }
     for (int i = 0; i < wow.Objects.Count; i++)
     {
         bool Looted = true;
         bool Skined = true;
         bool Bad    = false;
         if (WowControl.BadObjects.Count > 0)
         {
             for (int c = 0; c < WowControl.BadObjects.Count; c++)
             {
                 if (WowControl.BadObjects[c] == wow.Objects[i].GUID)
                 {
                     Bad = true;
                 }
             }
         }
         if ((wow.Objects[i].GUID != 0) & (Bad == false) & (wow.Objects[i].GUID == LootingObject.Guid))
         {
             if (wow.Objects[i].IsLootable == 0)
             {
                 Looted = false;
             }
             if (wow.Objects[i].Type == 5)
             {
                 Looted = false;
             }
         }
         if ((Bad == false) & (wow.Objects[i].GUID == SkinningObject.Guid))
         {
             Skined = false;
         }
         if ((CheckForBad(SkinningObject.Guid) == false) & (Skined == true) & (Skining == true))
         {
             Skining   = false;
             TryToSkin = 0;
             CurrentWP = GetClosestWP(WowControl.WP);
             WowControl.Loot.Add("Skined: \"" + SkinningObject.Name + "\".");
             WowControl.UpdateStatus("Skined: \"" + SkinningObject.Name + "\".");
         }
         if ((CheckForBad(LootingObject.Guid) == false) & (Looted == true) & (Looting == true) & (Skining == false))
         {
             Looting   = false;
             TryToLoot = 0;
             CurrentWP = GetClosestWP(WowControl.WP);
             WowControl.Loot.Add("Looted : \"" + LootingObject.Name + "\".");
             WowControl.UpdateStatus("Looted : \"" + LootingObject.Name + "\".");
         }
     }
 }
Example #12
0
 private void button5_Click(object sender, EventArgs e)
 {
     if (MessageBox.Show("You are really wanna delete " + comboBox1.Text + ".cfg ?", "Farm helper request.", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
     {
         File.Delete(Application.StartupPath + "\\Configs\\" + comboBox1.Text + ".cfg");
         WowControl.Sleep(100);
         WowControl.UpdateStatus("Config " + comboBox1.Text + " deleted!");
         comboBox1.Text = "";
         ReadConfigs();
     }
 }
Example #13
0
 private void checkBox7_CheckedChanged(object sender, EventArgs e)
 {
     if (checkBox7.Checked == true)
     {
         button6.Enabled = true;
         WowControl.UpdateStatus("Waypoint writing mode enabled.");
     }
     else
     {
         button6.Enabled = false;
         WowControl.UpdateStatus("Waypoint writing mode disabled.");
     }
 }
Example #14
0
        private void FollowWaypoints()
        {
            if (Abilities.AbilityStatus != "Casting")
            {
                if ((Abilities.AbilityStatus == "Ready") & (wow.IsIndoors == 0) & (wow.Objects[0].IsInCombat == 0) & (wow.IsMounted == 0))
                {
                    WowControl.GetOnMount(wow, 1);
                    WowControl.Sleep(2000);
                    LastTime = DateTime.Now;
                }

                for (int i = 0; i < WowControl.WP.ToArray().Length; i++)
                {
                    if (WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, WowControl.WP[i].X, WowControl.WP[i].Y, WowControl.WP[i].Z) < 5)
                    {
                        CurrentWP  = WowControl.WP[i].NextWaypoint;
                        WPDetected = true;
                        break;
                    }
                }
                if (WPDetected == false)
                {
                    CurrentWP  = GetClosestWP(WowControl.WP);
                    WPDetected = true;
                }
                if (CurrentWP >= WowControl.WP.Length)
                {
                    CurrentWP = 0;
                }
                double RangeToLastLoc = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, LastLocation.X, LastLocation.Y, LastLocation.Z);
                LastLocation.X = wow.Objects[0].X;
                LastLocation.Y = wow.Objects[0].Y;
                LastLocation.Z = wow.Objects[0].Z;
                if (RangeToLastLoc > 50)
                {
                    CurrentWP = GetClosestWP(WowControl.WP);
                    WowControl.UpdateStatus("Changed position, detecting closest waypoint.");
                }
                wow.GoTo(WowControl.WP[CurrentWP].X, WowControl.WP[CurrentWP].Y, WowControl.WP[CurrentWP].Z, 0, 4);
                if ((DateTime.Now - LastTime).TotalMilliseconds > 3000)
                {
                    LastTime = DateTime.Now;
                    if (wow.IsMounted == 0)
                    {
                        Abilities.Button("Jump");
                    }
                }

                WowControl.UpdateStatus("Going to waypoint № " + CurrentWP + ".");
            }
        }
Example #15
0
 private void checkBox5_CheckedChanged(object sender, EventArgs e)
 {
     if (checkBox5.Checked == true)
     {
         button7.Enabled = true;
         WowControl.UpdateStatus("Killing mob mode enabled.");
         WowControl.FarmSkinning = true;
     }
     else
     {
         button7.Enabled = false;
         WowControl.UpdateStatus("Killing mob mode disabled.");
         WowControl.FarmSkinning = false;
     }
 }
Example #16
0
 private void checkBox6_CheckedChanged(object sender, EventArgs e)
 {
     if (checkBox6.Checked == true)
     {
         button8.Enabled = true;
         WowControl.UpdateStatus("Gathering mode enabled.");
         WowControl.FarmMining = true;
     }
     else
     {
         button8.Enabled = false;
         WowControl.UpdateStatus("Gathering mode disabled.");
         WowControl.FarmMining = false;
     }
 }
Example #17
0
        private int FindClosestGoods()
        {
            int    ClosestIndex = 0;
            double MinRange     = 10000;
            bool   Looted       = true;

            for (int n = 0; n < WowControl.Goods.Count; n++)
            {
                for (int i = 0; i < wow.Objects.Count; i++)
                {
                    bool Bad = false;
                    if (WowControl.BadObjects.Count > 0)
                    {
                        for (int c = 0; c < WowControl.BadObjects.Count; c++)
                        {
                            if (WowControl.BadObjects[c] == wow.Objects[i].GUID)
                            {
                                Bad = true;
                            }
                        }
                    }
                    if ((Bad == false) & (wow.Objects[i].Type != 4) & (wow.Objects[i].Name == WowControl.Goods[n]))
                    {
                        if (WowControl.CheckPoint(wow.Objects[i].X, wow.Objects[i].Y, wow.Objects[i].Z, wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z) < MinRange)
                        {
                            ClosestIndex = i;
                            if (WowControl.CheckPoint(wow.Objects[i].X, wow.Objects[i].Y, wow.Objects[i].Z, wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z) < MinRange)
                            {
                                MinRange = WowControl.CheckPoint(wow.Objects[i].X, wow.Objects[i].Y, wow.Objects[i].Z, wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z);
                            }
                        }
                    }
                    if ((LootingObject.Guid == wow.Objects[i].GUID) & (Bad == false))
                    {
                        Looted = false;
                    }
                }
            }
            if ((Looted == true) & (Looting == true))
            {
                Looting   = false;
                TryToLoot = 0;
                WowControl.Loot.Add(LootingObject);
                CurrentWP = GetClosestWP(WowControl.WP);
                WowControl.UpdateStatus("Looted: \"" + LootingObject.Name + "\".");
            }
            return(ClosestIndex);
        }
Example #18
0
 private void checkBox8_CheckedChanged(object sender, EventArgs e)
 {
     if (checkBox8.Checked == true)
     {
         button9.Enabled = true;
         WowControl.UpdateStatus("Honor farm mode enabled.");
         MessageBox.Show("You must manually select bg (first time) to enable auto join!", "Farm helper info.", MessageBoxButtons.OK, MessageBoxIcon.Information);
         WowControl.FarmHonor = true;
     }
     else
     {
         button9.Enabled = false;
         WowControl.UpdateStatus("Honor farm mode disabled.");
         WowControl.FarmHonor = false;
     }
 }
Example #19
0
        private bool FollowGroup()
        {
            if (WowControl.StayWithGroup == false)
            {
                return(true);
            }
            int ClosestGroup = FindClosestGroup();

            if (ClosestGroup != 1000)
            {
                CurrentWP = GetClosestWP(WowControl.WP);
                if ((Abilities.AbilityStatus == "Ready") & (wow.IsIndoors == 0) & (wow.Objects[0].IsInCombat == 0) & (wow.IsMounted == 0))
                {
                    WowControl.GetOnMount(wow, 1);
                    WowControl.Sleep(2000);
                    LastTime = DateTime.Now;
                }
                if (WowControl.InDoors == 1)
                {
                    WowControl.UpdateStatus("Can't mount, going with group without mount.");
                    Abilities.AbilityStatus = "Ready";
                    WowControl.Sleep(150);
                    wow.GoTo(Groups[ClosestGroup].X, Groups[ClosestGroup].Y, Groups[ClosestGroup].Z, 0, 4);
                    WowControl.WaitTime = DateTime.Now.AddSeconds(2);
                    //WowControl.Sleep(2000);
                    WowControl.InDoors = 0;
                    return(true);
                }
                double RangeToGroup = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, Groups[ClosestGroup].X, Groups[ClosestGroup].Y, Groups[ClosestGroup].Z);
                if (RangeToGroup > 4)
                {
                    wow.GoTo(Groups[ClosestGroup].X, Groups[ClosestGroup].Y, Groups[ClosestGroup].Z, 0, 4);
                }
                if ((DateTime.Now - LastTime).TotalMilliseconds > 3000)
                {
                    LastTime = DateTime.Now;
                    if (wow.IsMounted == 0)
                    {
                        Abilities.Button("Jump");
                    }
                }
                WowControl.UpdateStatus("Going with group.");
                return(true);
            }
            return(false);
        }
Example #20
0
        private void FindCourse(int FinishWaypoint)
        {
            int StartWaypoint = GetClosestWP(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z);

            WowControl.UpdateStatus("Detecting course from " + StartWaypoint + " to " + FinishWaypoint + ".");
            Courses = new List <List <int> >(WowControl.WP.Length);
            List <int> FirstCourse = new List <int>();

            BadCourses = new List <CourseInfo>();
            FirstCourse.Add(StartWaypoint);
            Courses.Add(FirstCourse);
            ProcessCourses(FinishWaypoint);
            if (CalculatedCourses.Count > 0)
            {
                WowControl.UpdateStatus(CalculatedCourses.Count + " courses detected. Optimal lenght " + CalculatedCourses[0].Range);
            }
        }
Example #21
0
 private void textBox5_TextChanged(object sender, EventArgs e)
 {
     try
     {
         if ((textBox5.Text != "") & (listBox3.SelectedIndex != -1))
         {
             Abilities.Ability[] TempArray = Abilities.BindingsList.ToArray();
             TempArray[listBox3.SelectedIndex].CastTime = (float)Convert.ToDouble(textBox5.Text);
             Abilities.BindingsList.Clear();
             for (int i = 0; i < TempArray.Length; i++)
             {
                 Abilities.BindingsList.Add(TempArray[i]);
             }
         }
     }
     catch (Exception E) { WowControl.UpdateStatus(textBox5.Text + ": " + E.Message); }
 }
Example #22
0
 private void MainTimer_Tick(object sender, EventArgs e)
 {
     try
     {
         String[] Files = Directory.GetFiles(Application.StartupPath, "*.exe");
         for (int i = 0; i < Files.Length; i++)
         {
             if (Files[i].Substring(Files[i].Length - 14, 14) == "Newversion.exe")
             {
                 File.Delete(Files[i]);
             }
         }
         if (wow.wow.ProcessId != 0)
         {
             wow.Read();
             label18.Text = wow.LoadingState.ToString() + wow.LoginState.ToString() + wow.Combopoints.ToString();
             if ((Autoreconnect == true) & (Running == true))
             {
                 CheckWowState();
             }
             ProcessMainPage();
             if ((wow.Objects.ToArray().Length > 0) & (wow.Online == true))
             {
                 if (Running == true)
                 {
                     if (WowControl.WaitTime > DateTime.Now)
                     {
                         //wow.GoTo(0, 0, 0, 0, 3);
                         WowControl.UpdateStatus("Waiting.");
                         return;
                     }
                     ProcessFarm();
                 }
             }
             wow.ReadChat();
             ProcessChat();
         }
         else
         {
             InitMain();
             ProcessMainPage();
         }
     } catch (Exception) { }
 }
Example #23
0
        private void button17_Click(object sender, EventArgs e)
        {
            Updater Updtr = new Updater();

            if (Updtr.CheckForUpdate() == true)
            {
                WowControl.UpdateStatus("New version available: " + Updtr.AvailableVersion + ". Your version: " + Updtr.CurrentVersion + ".");
                ProcessMainPage();
                WowControl.UpdateStatus("Downloading last version, please wait.");
                ProcessMainPage();
                Updtr.DownloadNewVersion();
                WowControl.UpdateStatus("Download complete.");
                ProcessMainPage();
                RunNewVersion();
            }
            else
            {
                WowControl.UpdateStatus("Your version is up to date.");
                ProcessMainPage();
            }
        }
Example #24
0
 private void InitMain()
 {
     wow     = new Memory.Memory();
     SS      = new SpellSearcher();
     FH      = new FarmHonor();
     Farmer  = new Farm();
     Running = false;
     PCoord  = new List <Coords>();
     if (wow.wow.ProcessId != 0)
     {
         notifyIcon1.Text = "Farmhelper: attached to wow: " + wow.wow.ProcessId.ToString();
         WowControl.UpdateStatus("Attached to wow: " + wow.wow.ProcessId.ToString() + ".");
         MainTimer.Enabled = true;
     }
     else
     {
         WowControl.UpdateStatus("Not found wow process.");
         notifyIcon1.Text = "Farmhelper: not found wow process";
     }
     WowControl.LoadGoods();
     ProcessMainPage();
 }
Example #25
0
 private void button16_Click(object sender, EventArgs e)
 {
     if (Process.GetProcessesByName("wow").Length > 1)
     {
         ProcessSelect PS = new ProcessSelect();
         PS.ShowDialog();
         wow     = new Memory.Memory();
         wow.PId = PS.PId;
         wow.InitMemory();
         FH      = new FarmHonor();
         Farmer  = new Farm();
         Running = false;
         PCoord  = new List <Coords>();
         if (wow.wow.ProcessId != 0)
         {
             WowControl.UpdateStatus("Attached to wow: " + wow.wow.ProcessId.ToString() + ".");
             MainTimer.Enabled = true;
             notifyIcon1.Text  = "Farmhelper: attached to wow: " + wow.wow.ProcessId.ToString();
         }
         else
         {
             WowControl.UpdateStatus("Not found wow process.");
             notifyIcon1.Text = "Farmhelper: not found wow process";
         }
         WowControl.LoadGoods();
         ProcessMainPage();
     }
     if (Process.GetProcessesByName("wow").Length == 1)
     {
         WowControl.UpdateStatus("Only one process found.");
         InitMain();
     }
     if (Process.GetProcessesByName("wow").Length == 0)
     {
         WowControl.UpdateStatus("Not found wow process.");
     }
 }
Example #26
0
        public void Process()
        {
            if (WowControl.LoadedWP != wow.Location)
            {
                WowControl.WP = WowControl.LoadWaypoints(wow.Location);
            }
            if (wow.BattlefieldInstanceExpiration != 0)
            {
                WowControl.Sleep(2000);
                wow.Read();
                WowControl.UpdateStatus("Leaving BG.");
                wow.GoTo(0, 0, 0, 0, 3);                //Stop
                WowControl.Command("script LeaveBattlefield()");
                WowControl.WaitTime = DateTime.Now.AddSeconds(30);
                return;
            }
            switch (wow.BgStatus)
            {
            case 0:                    //Not queued
                if ((DateTime.Now - LastTime).TotalMilliseconds > 20000)
                {
                    if ((DateTime.Now - WowControl.LocationChangeTime).TotalSeconds >= 60)
                    {
                        WowControl.UpdateStatus("Joining BG queue.");
                    }
                    LastTime = DateTime.Now;
                    WowControl.btn('H');
                    WowControl.btn('H');
                    WowControl.Sleep(1000);
                    WowControl.Command("script JoinBattlefield(1)");
                    WowControl.WaitTime = DateTime.Now.AddSeconds(5);
                }
                break;

            case 1:                    //Waiting
                if (wow.Objects[0].IsInCombat != 0)
                {
                    Abilities.UseAbilities(wow, "");
                }
                //WowControl.UpdateStatus("Waiting BG.");
                break;

            case 2:                    //Confirm
                if ((DateTime.Now - LastTime).TotalMilliseconds > 5000)
                {
                    WowControl.UpdateStatus("Joining BG.");
                    LastTime = DateTime.Now;
                    WowControl.Command("script  AcceptBattlefieldPort(1,1)");
                    WowControl.WaitTime = DateTime.Now.AddSeconds(20);
                    return;
                }
                break;

            case 3:                    //In BG
                if (wow.Objects[0].Health == 1)
                {
                    StuckTimes = 0;
                    CurrentWP  = GetClosestWP(WowControl.WP);
                    WowControl.BadObjects.Clear();
                    WowControl.UpdateStatus("Waiting for ressurect.");
                    wow.GoTo(0, 0, 0, 0, 3);                            //Stop and waiting for ressurect
                    Abilities.Ability[] Temp = Abilities.BindingsList.ToArray();
                    Abilities.BindingsList.Clear();
                    for (int i = 0; i < Temp.Length; i++)
                    {
                        Temp[i].Try = 0;
                        Abilities.BindingsList.Add(Temp[i]);
                    }
                    RessurectTime = DateTime.Now;
                    return;
                }
                if (wow.Objects[0].Health == 0)
                {
                    WowControl.BadObjects.Clear();
                    WowControl.Sleep(2000);
                    RessurectTime = DateTime.Now;
                    StuckTimes    = 0;
                    WowControl.UpdateStatus("Releasing spirit.");
                    if ((DateTime.Now - LastTime).TotalMilliseconds > 5000)
                    {
                        LastTime = DateTime.Now;
                        WowControl.Command("script  RepopMe()");
                        WowControl.WaitTime = DateTime.Now.AddSeconds(5);
                    }
                    return;
                }
                Abilities.UseAbilities(wow, "Bg");
                if (Abilities.AbilityStatus != "Casting")
                {
                    if (Moving() == true)
                    {
                        return;
                    }
                }
                break;
            }
        }
Example #27
0
 private bool Stuck()
 {
     if (wow.Objects[0].IsInCombat != 0)
     {
         return(false);
     }
     if ((Abilities.AbilityStatus != "Casting") & (WowControl.InWater == 0) & (wow.Speed < 0.005) & (wow.Objects[0].Health > 1) & ((DateTime.Now - RessurectTime).TotalSeconds > 20))
     {
         StuckTimes++;
     }
     else
     {
         StuckTimes = 0;
     }
     if (StuckTimes > 10)
     {
         if ((DateTime.Now - TeleportTime).TotalSeconds > 20)
         {
             TeleportTime = DateTime.Now;
             int Teleport = GetClosestTeleport();
             if (Teleport != 0)
             {
                 WowControl.UpdateStatus("Can't reach waypoint, searching for teleport.");
                 wow.GoTo(wow.Objects[Teleport].X, wow.Objects[Teleport].Y, wow.Objects[Teleport].Z, wow.Objects[Teleport].GUID, 7);
                 WowControl.WaitTime = DateTime.Now.AddSeconds(10);
                 return(true);
             }
         }
         WowControl.UpdateStatus("Can't reach waypoint, going to previous waypoint.");
         CurrentWP--;
         if ((GetClosestWP(WowControl.WP) - CurrentWP) > 3)
         {
             CurrentWP = GetClosestWP(WowControl.WP);
         }
         if (CurrentWP < 0)
         {
             CurrentWP = GetClosestWP(WowControl.WP);
         }
         StuckTimes = 0;
     }
     if (CurrentWP < 0)
     {
         CurrentWP = WowControl.WP.Length;
     }
     if ((Abilities.AbilityStatus == "Ready") & (wow.IsIndoors == 0) & (wow.Objects[0].IsInCombat == 0) & (wow.IsMounted == 0))
     {
         WowControl.GetOnMount(wow, 1);
         WowControl.Sleep(2000);
         LastTime = DateTime.Now;
     }
     if (WowControl.InDoors == 1)
     {
         WowControl.UpdateStatus("Can't mount, going to next waypoint without mount.");
         Abilities.AbilityStatus = "Ready";
         WowControl.Sleep(150);
         wow.GoTo(WowControl.WP[CurrentWP].X, WowControl.WP[CurrentWP].Y, WowControl.WP[CurrentWP].Z, 0, 4);
         WowControl.WaitTime = DateTime.Now.AddSeconds(2);
         //WowControl.Sleep(2000);
         WowControl.InDoors = 0;
         return(true);
     }
     return(false);
 }
Example #28
0
        public void Process()
        {
            double Range = 0;

            if (wow.BgStatus == 3)
            {
                return;
            }
            if (wow.Objects[0].Health == 0)
            {//токашо похерились
                Abilities.AbilityStatus = "Ready";
                Corpse.X = wow.Objects[0].X;
                Corpse.Y = wow.Objects[0].Y;
                Corpse.Z = wow.Objects[0].Z;
                if ((DateTime.Now - LastCheck).TotalMilliseconds > 20000)
                {
                    WowControl.UpdateStatus("Player dead, releasing spirit.");
                    WowControl.Command("script  RepopMe()");
                    LastCheck           = DateTime.Now;
                    WowControl.WaitTime = DateTime.Now.AddSeconds(10);
                }
                return;
            }
            if (wow.Objects[0].Health == 1)
            {
                Abilities.AbilityStatus = "Ready";
                WowControl.UpdateStatus("Going to corpse.");
                wow.GoTo(Corpse.X, Corpse.Y, Corpse.Z, 0, 4);
                if ((DateTime.Now - LastTime).TotalMilliseconds > 1000)
                {
                    LastTime = DateTime.Now;
                    Abilities.Button("Jump");
                }
                if (WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, Corpse.X, Corpse.Y, Corpse.Z) < 15)
                {
                    if ((DateTime.Now - LastCheck).TotalMilliseconds > 20000)
                    {
                        WowControl.Command("script  RetrieveCorpse()");
                        LastCheck = DateTime.Now;
                    }
                    WowControl.Sleep(5000);
                }
                return;
            }
            CheckCombat();
            Abilities.UseAbilities(wow);
            if (Abilities.AbilityStatus == "Casting")
            {
                return;
            }
            if (wow.IsMounted != 0)
            {
                TryToMount            = 0;
                WowControl.FarmStatus = "Searching";
            }
            if ((WowControl.FarmStatus == "In water") & (wow.Objects[0].IsInCombat == 0))
            {
                WowControl.UpdateStatus("Bot in water, trying to unstuck.");
                Unstuck();
                return;
            }
            if (WowControl.LoadedWP != wow.Location)
            {
                WowControl.WP = WowControl.LoadWaypoints(wow.Location);
            }
            //if ((WowControl.Stuck(wow.Speed) == true) & (wow.IsMounted != 0))
            //Abilities.Button("Jump", 500);
            for (int i = 0; i < WowControl.WP.ToArray().Length; i++)
            {
                if (WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, WowControl.WP[i].X, WowControl.WP[i].Y, WowControl.WP[i].Z) < 15)
                {
                    CurrentWP  = WowControl.WP[i].NextWaypoint;
                    WPDetected = true;
                    break;
                }
            }
            if (WPDetected == false)
            {
                CurrentWP  = GetClosestWP(WowControl.WP);
                WPDetected = true;
            }
            if (CurrentWP >= WowControl.WP.Length)
            {
                CurrentWP = 0;
            }
            double RangeToLastLoc = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, LastLocation.X, LastLocation.Y, LastLocation.Z);

            LastLocation.X = wow.Objects[0].X;
            LastLocation.Y = wow.Objects[0].Y;
            LastLocation.Z = wow.Objects[0].Z;
            if (RangeToLastLoc > 50)
            {
                CurrentWP = GetClosestWP(WowControl.WP);
                WowControl.UpdateStatus("Changed position, detecting closest waypoint.");
            }

            int ClosestTarget = 0;

            if (WowControl.SkiningKillAll == true)
            {
                ClosestTarget = FindClosestMob();
            }
            else if (wow.Objects[0].IsInCombat == 1)
            {
                ClosestTarget = FindClosestMob();
            }
            if (ClosestTarget != 0)
            {
                if (wow.Objects[ClosestTarget].Health > 1)
                {
                    Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, wow.Objects[ClosestTarget].X, wow.Objects[ClosestTarget].Y, wow.Objects[ClosestTarget].Z + 5);
                    if ((DateTime.Now - LastCheck).Milliseconds > 200)
                    {
                        if ((float)Math.Abs(Range - LastRange) < 0.03)
                        {
                            TryToReach++;
                        }
                        LastRange = Range;
                        LastCheck = DateTime.Now;
                    }
                    if (TryToReach > 20)
                    {
                        WowControl.UpdateStatus("Can't reach object.");
                        WowControl.BadObjects.Add(wow.Objects[ClosestTarget].GUID);
                        TryToReach = 0;
                        return;
                    }
                    if (Range > 30)
                    {
                        if ((wow.IsMounted == 0) & (wow.IsIndoors == 0))
                        {
                            WowControl.GetOnMount(wow, WowControl.FarmMount);
                        }
                    }
                    if (WowControl.FarmStatus == "Mounting")
                    {
                        return;
                    }
                    wow.SelectTarget(wow.Objects[ClosestTarget].GUID);
                    if (WowControl.ClassType == 1)
                    {
                        wow.GoTo(0, 0, 0, wow.Objects[ClosestTarget].GUID, 11);
                    }
                    else
                    {
                        Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, wow.Objects[ClosestTarget].X, wow.Objects[ClosestTarget].Y, wow.Objects[ClosestTarget].Z);
                        if (Range > 30)
                        {
                            wow.GoTo(0, 0, 0, wow.Objects[ClosestTarget].GUID, 11);
                        }
                        else
                        {
                            wow.GoTo(0, 0, 0, 0, 3);
                            WowControl.Sleep(100);
                            wow.GoTo(0, 0, 0, wow.Objects[ClosestTarget].GUID, 1);
                        }
                    }
                    Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, wow.Objects[ClosestTarget].X, wow.Objects[ClosestTarget].Y, wow.Objects[ClosestTarget].Z);
                    int CheckRange = 0;
                    if (WowControl.ClassType == 1)
                    {
                        CheckRange = 7;
                    }
                    else
                    {
                        CheckRange = 30;
                    }
                    if ((wow.Objects[0].IsInCombat == 0) & (Range < CheckRange))
                    {
                        TryToFight++;
                    }
                    if (TryToFight > 50)
                    {
                        TryToFight = 0;
                        WowControl.BadObjects.Add(wow.Objects[ClosestTarget].GUID);
                        WowControl.UpdateCombatLog("Can't attack " + wow.Objects[ClosestTarget].Name + ".");
                        WowControl.UpdateStatus("Can't attack " + wow.Objects[ClosestTarget].Name + ".");
                    }
                    WowControl.UpdateCombatLog("Fighting with " + wow.Objects[ClosestTarget].Name + ".");
                }
                else
                {
                    if (wow.Objects[ClosestTarget].IsLootable == 1)
                    {
                        WowControl.UpdateStatus("Looting \"" + wow.Objects[ClosestTarget].Name + "\".");
                        WowControl.FarmStatus = "Looting";
                        Looting            = true;
                        LootingObject.Guid = wow.Objects[ClosestTarget].GUID;
                        LootingObject.Name = wow.Objects[ClosestTarget].Name;
                        LootingObject.Time = WowControl.GetTimeStr();
                        Move(wow.Objects[0].R /*- (float)Math.PI*/, 5);
                        Abilities.AbilityStatus = "Casting";
                        Abilities.EndCast       = DateTime.Now.AddSeconds(2);
                        WowControl.Sleep(100);
                        wow.GoTo(0, 0, 0, wow.Objects[ClosestTarget].GUID, 6);//Loot
                    }
                    else
                    {
                        if (WowControl.SkinAll == true)
                        {
                            WowControl.UpdateStatus("Skining \"" + wow.Objects[ClosestTarget].Name + "\".");
                            WowControl.FarmStatus = "Skining";
                            if (wow.LastError == "С этого существа нельзя снять шкуру.")
                            {
                                WowControl.BadObjects.Add(wow.Objects[ClosestTarget].GUID);
                                WowControl.UpdateStatus(wow.LastError);
                                return;
                            }
                            if (wow.LastError == "Недостаточный уровень навыка.")
                            {
                                WowControl.BadObjects.Add(wow.Objects[ClosestTarget].GUID);
                                WowControl.UpdateStatus(wow.LastError);
                                return;
                            }
                            Skining = true;
                            TryToSkin++;
                            if (TryToSkin > 5)
                            {
                                WowControl.BadObjects.Add(wow.Objects[ClosestTarget].GUID);
                                WowControl.UpdateStatus("Can't skin \"" + wow.Objects[ClosestTarget] + "\".");
                                return;
                            }
                            SkinningObject.Guid = wow.Objects[ClosestTarget].GUID;
                            SkinningObject.Name = wow.Objects[ClosestTarget].Name;
                            SkinningObject.Time = WowControl.GetTimeStr();
                            Move(wow.Objects[0].R /*- (float)Math.PI*/, 5);
                            Abilities.AbilityStatus = "Casting";
                            Abilities.EndCast       = DateTime.Now.AddSeconds(4);
                            WowControl.Sleep(100);
                            wow.GoTo(0, 0, 0, wow.Objects[ClosestTarget].GUID, 9);//Skin
                        }
                    }
                }
            }
            else
            {
                if ((wow.IsMounted == 0) & (wow.IsIndoors == 0))
                {
                    WowControl.GetOnMount(wow, WowControl.FarmMount);
                }
                else
                {
                    Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, WowControl.WP[CurrentWP].X, WowControl.WP[CurrentWP].Y, WowControl.WP[CurrentWP].Z);
                    if ((DateTime.Now - LastCheck).Milliseconds > 200)
                    {
                        if ((float)Math.Abs(Range - LastRange) < 0.03)
                        {
                            TryLoFly++;
                        }
                        LastRange = Range;
                        LastCheck = DateTime.Now;
                    }
                    if (TryLoFly > 10)
                    {
                        UnstuckTimes++;
                        WowControl.UpdateStatus("Can't reach waypoint.");
                        TryLoFly = 0;
                        Move(wow.Objects[0].R - (float)Math.PI, 25);
                        WowControl.Sleep(2000);
                        Abilities.Button("Jump", 2000);
                        if (UnstuckTimes > 3)
                        {
                            CurrentWP--;
                            UnstuckTimes = 0;
                            if ((GetClosestWP(WowControl.WP) - CurrentWP) > 3)
                            {
                                CurrentWP = GetClosestWP(WowControl.WP);
                            }
                        }
                        return;
                    }
                    WowControl.FarmStatus = "Searching";
                    wow.GoTo(WowControl.WP[CurrentWP].X, WowControl.WP[CurrentWP].Y, WowControl.WP[CurrentWP].Z, 0, 4);
                    WowControl.UpdateStatus("Going to waypoint № " + CurrentWP + ".");
                }
            }
        }
Example #29
0
        private bool FollowCourse()
        {
            int FinishWP      = 0;
            int OptimalCourse = 0;

            if ((DateTime.Now - LastCourseDetect).TotalSeconds > 10)
            {
                LastCourseDetect = DateTime.Now;
                int RangeFromPlayerToGroup = WowControl.RangeFromPlayerToGroup;
                WowControl.RangeFromPlayerToGroup = 2500;
                int ClosestGroup = FindClosestGroup();
                WowControl.RangeFromPlayerToGroup = RangeFromPlayerToGroup;
                if (ClosestGroup != 1000)
                {
                    LastGroup = ClosestGroup;
                    //CurrentWP = 0;
                    FinishWP = GetClosestWP(Groups[ClosestGroup].X, Groups[ClosestGroup].Y, Groups[ClosestGroup].Z);
                }
                else
                {
                    return(false);
                }
                //if (LastGroup != ClosestGroup)
                {
                    FindCourse(FinishWP);
                    CurrentWP = 0;
                }
            }
            if (CalculatedCourses.Count == 0)
            {
                FindCourse(FinishWP);
                CurrentWP = 0;
            }
            if (CalculatedCourses.Count != 0)
            {
                /*for (int i = 0; i < Courses[CalculatedCourses[OptimalCourse].Index].Count; i++)
                 * {
                 *      if (WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, WowControl.WP[Courses[CalculatedCourses[0].Index][i]].X, WowControl.WP[Courses[CalculatedCourses[0].Index][i]].Y, WowControl.WP[Courses[CalculatedCourses[0].Index][i]].Z) < 5)
                 *      {
                 *              CurrentWP = i + 1;
                 *              break;
                 *      }
                 * }*/
                if (CurrentWP >= Courses[CalculatedCourses[0].Index].Count)
                {
                    return(false);
                }
                if (WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, WowControl.WP[Courses[CalculatedCourses[0].Index][CurrentWP]].X, WowControl.WP[Courses[CalculatedCourses[0].Index][CurrentWP]].Y, WowControl.WP[Courses[CalculatedCourses[0].Index][CurrentWP]].Z) < 5)
                {
                    CurrentWP++;
                }
                int CourseWP = Courses[CalculatedCourses[OptimalCourse].Index][CurrentWP];
                wow.GoTo(WowControl.WP[CourseWP].X, WowControl.WP[CourseWP].Y, WowControl.WP[CourseWP].Z, 0, 4);
                WowControl.UpdateStatus("Going to course waypoint № " + CurrentWP + ".");
                if ((DateTime.Now - LastTime).TotalMilliseconds > 3000)
                {
                    LastTime = DateTime.Now;
                    if (wow.IsMounted == 0)
                    {
                        Abilities.Button("Jump");
                    }
                }
                return(true);
            }
            return(false);
        }
Example #30
0
        public void Process()
        {
            if (wow.BgStatus == 3)
            {
                WowControl.FarmStatus = "In bg";
                return;
            }
            if (wow.Objects[0].Health == 0)
            {//токашо похерились
                Abilities.AbilityStatus = "Ready";
                Corpse.X = wow.Objects[0].X;
                Corpse.Y = wow.Objects[0].Y;
                Corpse.Z = wow.Objects[0].Z;
                if ((DateTime.Now - LastCheck).TotalMilliseconds > 20000)
                {
                    WowControl.UpdateStatus("Player dead, releasing spirit.");
                    WowControl.Command("script  RepopMe()");
                    LastCheck           = DateTime.Now;
                    WowControl.WaitTime = DateTime.Now.AddSeconds(10);
                }
                return;
            }
            if (wow.Objects[0].Health == 1)
            {
                Abilities.AbilityStatus = "Ready";
                WowControl.UpdateStatus("Going to corpse.");
                wow.GoTo(Corpse.X, Corpse.Y, Corpse.Z, 0, 4);
                if ((DateTime.Now - LastTime).TotalMilliseconds > 1000)
                {
                    LastTime = DateTime.Now;
                    Abilities.Button("Jump");
                }
                if (WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, Corpse.X, Corpse.Y, Corpse.Z) < 15)
                {
                    if ((DateTime.Now - LastCheck).TotalMilliseconds > 20000)
                    {
                        WowControl.Command("script  RetrieveCorpse()");
                        LastCheck = DateTime.Now;
                    }
                    WowControl.Sleep(5000);
                }
                return;
            }
            if (wow.IsMounted == 0)
            {
                CheckCombat();
                Abilities.UseAbilities(wow, "");
            }
            if (Abilities.AbilityStatus == "Casting")
            {
                return;
            }
            CheckForLootSkin();
            if (wow.IsMounted != 0)
            {
                TryToMount            = 0;
                WowControl.FarmStatus = "Searching";
            }
            if ((WowControl.FarmStatus == "In water") & (wow.Objects[0].IsInCombat == 0))
            {
                WowControl.UpdateStatus("Bot in water, trying to unstuck.");
                Unstuck();
                return;
            }
            if (WowControl.LoadedWP != wow.Location)
            {
                WowControl.WP = WowControl.LoadWaypoints(wow.Location);
            }
            for (int i = 0; i < WowControl.WP.ToArray().Length; i++)
            {
                if (WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, WowControl.WP[i].X, WowControl.WP[i].Y, WowControl.WP[i].Z) < 15)
                {
                    CurrentWP  = WowControl.WP[i].NextWaypoint;
                    WPDetected = true;
                    break;
                }
            }
            if (WPDetected == false)
            {
                CurrentWP  = GetClosestWP(WowControl.WP);
                WPDetected = true;
            }
            if (CurrentWP >= WowControl.WP.Length)
            {
                CurrentWP = 0;
            }
            double RangeToLastLoc = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, LastLocation.X, LastLocation.Y, LastLocation.Z);

            LastLocation.X = wow.Objects[0].X;
            LastLocation.Y = wow.Objects[0].Y;
            LastLocation.Z = wow.Objects[0].Z;
            if (RangeToLastLoc > 50)
            {
                CurrentWP = GetClosestWP(WowControl.WP);
                WowControl.UpdateStatus("Changed position, detecting closest waypoint.");
            }
            int    ClosestObject   = 0;
            int    CLosestLootable = 0;
            int    CLosestSkinable = 0;
            double Range           = 0;

            if (((WowControl.LootMobs == true) || (WowControl.FarmSkinning == true)) & (FindClosestGoods() == 0))
            {//Killing mobs block
                if (wow.Objects[0].IsInCombat == 0)
                {
                    if (WowControl.SkiningKillAll == true)
                    {
                        ClosestObject = FindClosestMob();
                    }
                    CLosestLootable = FindClosestLootableMob();
                    if (WowControl.SkinAll == true)
                    {
                        CLosestSkinable = FindClosestSkinableMob();
                    }
                    if (CLosestLootable != 0)
                    {//Лутаем ближайшего моба
                        Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, wow.Objects[CLosestLootable].X, wow.Objects[CLosestLootable].Y, wow.Objects[CLosestLootable].Z);
                        if (((DateTime.Now - LastCheck).Milliseconds > 200) & (wow.IsMounted != 0))
                        {
                            if ((float)Math.Abs(Range - LastRange) < 0.03)
                            {
                                TryToReach++;
                            }
                            LastRange = Range;
                            LastCheck = DateTime.Now;
                        }
                        if (TryToReach > 20)
                        {
                            WowControl.UpdateStatus("Can't reach object.");
                            WowControl.BadObjects.Add(wow.Objects[CLosestLootable].GUID);
                            TryToReach = 0;
                            return;
                        }
                        if (Range > 15)
                        {
                            if ((wow.IsMounted == 0) & (wow.IsIndoors == 0))
                            {
                                WowControl.GetOnMount(wow, WowControl.FarmMount);
                                return;
                            }
                            if ((wow.IsMounted != 0) & (WowControl.FarmMount == 1) & (DateTime.Now - LastTime).TotalMilliseconds > 3000)
                            {
                                LastTime = DateTime.Now;
                                Abilities.Button("Jump");
                            }
                            wow.GoTo(wow.Objects[CLosestLootable].X, wow.Objects[CLosestLootable].Y, wow.Objects[CLosestLootable].Z, wow.Objects[CLosestLootable].GUID, 4);
                        }
                        else
                        {
                            WowControl.FarmStatus = "Looting";
                            Looting            = true;
                            LootingObject.Guid = wow.Objects[CLosestLootable].GUID;
                            LootingObject.Name = wow.Objects[CLosestLootable].Name;
                            LootingObject.Time = WowControl.GetTimeStr();
                            Move(wow.Objects[0].R /*- (float)Math.PI*/, 5);
                            Abilities.AbilityStatus = "Casting";
                            Abilities.EndCast       = DateTime.Now.AddSeconds(2);
                            WowControl.Sleep(100);
                            wow.GoTo(0, 0, 0, wow.Objects[CLosestLootable].GUID, 6);//Loot
                        }
                        return;
                    }
                    if (CLosestSkinable != 0)
                    {//Скиним ближайшего моба
                        Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, wow.Objects[CLosestLootable].X, wow.Objects[CLosestLootable].Y, wow.Objects[CLosestLootable].Z);
                        if ((DateTime.Now - LastCheck).Milliseconds > 200)
                        {
                            if ((float)Math.Abs(Range - LastRange) < 0.03)
                            {
                                TryToReach++;
                            }
                            LastRange = Range;
                            LastCheck = DateTime.Now;
                        }
                        if (TryToReach > 20)
                        {
                            WowControl.UpdateStatus("Can't reach object.");
                            WowControl.BadObjects.Add(wow.Objects[CLosestLootable].GUID);
                            TryToReach = 0;
                            return;
                        }
                        if (Range < 15)
                        {
                            WowControl.FarmStatus = "Skining";
                            if (wow.LastError == "С этого существа нельзя снять шкуру.")
                            {
                                WowControl.BadObjects.Add(wow.Objects[CLosestSkinable].GUID);
                                WowControl.UpdateStatus(wow.LastError);
                                return;
                            }
                            if (wow.LastError == "Недостаточный уровень навыка.")
                            {
                                WowControl.BadObjects.Add(wow.Objects[CLosestSkinable].GUID);
                                WowControl.UpdateStatus(wow.LastError);
                                return;
                            }
                            Skining = true;
                            TryToSkin++;
                            if (TryToSkin > 5)
                            {
                                WowControl.BadObjects.Add(wow.Objects[CLosestSkinable].GUID);
                                WowControl.UpdateStatus("Can't skin \"" + wow.Objects[CLosestSkinable] + "\".");
                                return;
                            }
                            SkinningObject.Guid = wow.Objects[CLosestSkinable].GUID;
                            SkinningObject.Name = wow.Objects[CLosestSkinable].Name;
                            SkinningObject.Time = WowControl.GetTimeStr();
                            Move(wow.Objects[0].R /*- (float)Math.PI*/, 5);
                            Abilities.AbilityStatus = "Casting";
                            Abilities.EndCast       = DateTime.Now.AddSeconds(4);
                            WowControl.Sleep(100);
                            wow.GoTo(0, 0, 0, wow.Objects[CLosestSkinable].GUID, 9);//Skin
                        }
                        else
                        {
                            if ((wow.IsMounted == 0) & (wow.IsIndoors == 0))
                            {
                                WowControl.GetOnMount(wow, WowControl.FarmMount);
                                return;
                            }
                            if ((wow.IsMounted != 0) & (WowControl.FarmMount == 1) & (DateTime.Now - LastTime).TotalMilliseconds > 3000)
                            {
                                LastTime = DateTime.Now;
                                Abilities.Button("Jump");
                            }
                            wow.GoTo(wow.Objects[CLosestSkinable].X, wow.Objects[CLosestSkinable].Y, wow.Objects[CLosestSkinable].Z, wow.Objects[CLosestSkinable].GUID, 4);
                        }
                        return;
                    }
                    if (ClosestObject != 0)
                    {//Некого лутать и скинить но есть моб которого нужно отмудохать
                        wow.SelectTarget(wow.Objects[ClosestObject].GUID);
                        Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, wow.Objects[ClosestObject].X, wow.Objects[ClosestObject].Y, wow.Objects[ClosestObject].Z + 5);
                        if ((DateTime.Now - LastCheck).Milliseconds > 200)
                        {
                            if (WowControl.ErrorState == "Bad target")
                            {
                                WowControl.BadObjects.Add(wow.Objects[ClosestObject].GUID);
                                return;
                            }
                            if ((float)Math.Abs(Range - LastRange) < 0.03)
                            {
                                TryToReach++;
                            }
                            LastRange = Range;
                            LastCheck = DateTime.Now;
                        }
                        if (TryToReach > 10)
                        {
                            WowControl.UpdateStatus("Can't reach object.");
                            WowControl.BadObjects.Add(wow.Objects[ClosestObject].GUID);
                            TryToReach = 0;
                            return;
                        }
                        if (Range > 20)
                        {
                            if ((wow.IsMounted == 0) & (wow.IsIndoors == 0))
                            {
                                WowControl.GetOnMount(wow, WowControl.FarmMount);
                                return;
                            }
                            if ((wow.IsMounted != 0) & (WowControl.FarmMount == 1) & (DateTime.Now - LastTime).TotalMilliseconds > 3000)
                            {
                                LastTime = DateTime.Now;
                                Abilities.Button("Jump");
                            }
                            wow.GoTo(wow.Objects[ClosestObject].X, wow.Objects[ClosestObject].Y, wow.Objects[ClosestObject].Z, wow.Objects[ClosestObject].GUID, 4);
                        }
                        if (WowControl.FarmStatus == "Mounting")
                        {
                            return;
                        }
                        if (WowControl.ClassType == 1)
                        {
                            wow.GoTo(0, 0, 0, wow.Objects[ClosestObject].GUID, 11);
                        }
                        else
                        {
                            Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, wow.Objects[ClosestObject].X, wow.Objects[ClosestObject].Y, wow.Objects[ClosestObject].Z);
                            if (Range > 30)
                            {
                                wow.GoTo(0, 0, 0, wow.Objects[ClosestObject].GUID, 11);
                            }
                            else
                            {
                                wow.GoTo(0, 0, 0, 0, 3);
                                WowControl.Sleep(100);
                                wow.GoTo(0, 0, 0, wow.Objects[ClosestObject].GUID, 1);
                            }
                        }

                        Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, wow.Objects[ClosestObject].X, wow.Objects[ClosestObject].Y, wow.Objects[ClosestObject].Z);
                        int CheckRange = 0;
                        if (WowControl.ClassType == 1)
                        {
                            CheckRange = 7;
                        }
                        else
                        {
                            CheckRange = 30;
                        }
                        if ((wow.Objects[0].IsInCombat == 0) & (Range < CheckRange))
                        {
                            TryToFight++;
                        }
                        if (TryToFight > 10)
                        {
                            TryToFight = 0;
                            WowControl.BadObjects.Add(wow.Objects[ClosestObject].GUID);
                            WowControl.UpdateCombatLog("Can't attack " + wow.Objects[ClosestObject].Name + ".");
                            WowControl.UpdateStatus("Can't attack " + wow.Objects[ClosestObject].Name + ".");
                        }
                        wow.SetPlayerToCombat();
                        Abilities.UseAbilities(wow, "");
                        WowControl.UpdateCombatLog("Fighting with " + wow.Objects[ClosestObject].Name + ".");
                        return;
                    }
                }
            }
            if (WowControl.FarmMining == true)
            {//farm goods block
                int ClosestIndex = FindClosestGoods();
                if (ClosestIndex != 0)
                {//Finded
                    if (IsPlayerCloseToVein(ClosestIndex) == true)
                    {
                        WowControl.UpdateStatus("Another player close, going away.");
                        WowControl.BadObjects.Add(wow.Objects[ClosestIndex].GUID);
                        return;
                    }
                    WowControl.UpdateStatus("Finded \"" + wow.Objects[ClosestIndex].Name + "\".");
                    Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, wow.Objects[ClosestIndex].X, wow.Objects[ClosestIndex].Y, wow.Objects[ClosestIndex].Z + 5);
                    if (((DateTime.Now - LastCheck).Milliseconds > 200) & (wow.IsMounted != 0))
                    {
                        if ((float)Math.Abs(Range - LastRange) < 0.03)
                        {
                            TryToLoot++;
                        }
                        LastRange = Range;
                        LastCheck = DateTime.Now;
                    }

                    /*if (TryToLoot > 5)
                     * {
                     *  //WowControl.UpdateStatus("Bot stucked while trying to reach object.");
                     *  Abilities.Button("Jump", 1000);
                     * }*/
                    if (TryToLoot > 20)
                    {
                        WowControl.UpdateStatus("Can't reach object.");
                        WowControl.BadObjects.Add(wow.Objects[ClosestIndex].GUID);
                        TryToLoot = 0;
                        return;
                    }
                    if (Range > 8)
                    {//Далеко от объекта
                        if (wow.IsMounted == 0)
                        {
                            WowControl.GetOnMount(wow, WowControl.FarmMount);
                            return;
                        }
                        if ((wow.IsMounted != 0) & (WowControl.FarmMount == 1) & (DateTime.Now - LastTime).TotalMilliseconds > 3000)
                        {
                            LastTime = DateTime.Now;
                            Abilities.Button("Jump");
                        }
                        WowControl.FarmStatus = "Going to goods";
                        if (wow.Objects[0].Z < wow.Objects[ClosestIndex].Z - 5)
                        {
                            wow.GoTo(wow.Objects[ClosestIndex].X, wow.Objects[ClosestIndex].Y, wow.Objects[ClosestIndex].Z + 10, wow.Objects[ClosestIndex].GUID, 4);
                        }
                        else
                        {
                            wow.GoTo(wow.Objects[ClosestIndex].X, wow.Objects[ClosestIndex].Y, wow.Objects[ClosestIndex].Z + 10, wow.Objects[ClosestIndex].GUID, 4);
                        }
                    }
                    else
                    {                           //Близко
                        if (wow.IsMounted != 0) //Dismount
                        {
                            WowControl.FarmStatus = "Dismounting";
                            wow.GoTo(0, 0, 0, 0, 3);//Stop
                            if (WowControl.FarmMount == 0)
                            {
                                Abilities.Button("Fly mount");
                            }
                            else
                            {
                                Abilities.Button("Ground mount");
                            }
                            Abilities.AbilityStatus = "Ready";
                            WowControl.Sleep(1500);
                        }
                        WowControl.Sleep(200);
                        WowControl.FarmStatus = "Looting";
                        Looting            = true;
                        LootingObject.Guid = wow.Objects[ClosestIndex].GUID;
                        LootingObject.Name = wow.Objects[ClosestIndex].Name;
                        LootingObject.Time = WowControl.GetTimeStr();
                        if (wow.Objects[ClosestIndex].Type != 3)
                        {
                            //wow.GoTo(wow.Objects[0].X - 10, wow.Objects[0].Y - 10, wow.Objects[0].Z, wow.Objects[0].GUID, 4);
                            Move(wow.Objects[0].R /*- (float)Math.PI*/, 25);
                            WowControl.Sleep(100);
                            //wow.GoTo(0, 0, 0, 0, 3);//Stop
                            wow.GoTo(wow.Objects[ClosestIndex].X, wow.Objects[ClosestIndex].Y, wow.Objects[ClosestIndex].Z, wow.Objects[ClosestIndex].GUID, 7);
                        }
                        Abilities.Button("Mote xtrtr");
                        TryToLoot++;
                        if (WowControl.FindTextInString(wow.LastError, "быть не менее") == true)
                        {
                            WowControl.UpdateStatus(wow.LastError);
                            WowControl.BadObjects.Add(wow.Objects[ClosestIndex].GUID);
                        }
                        return;
                    }
                }
                else
                {
                    Abilities.UseAbilities(wow, "");
                    if ((wow.IsMounted == 0) & (wow.IsIndoors == 0))
                    {
                        WowControl.GetOnMount(wow, WowControl.FarmMount);
                    }
                    if ((wow.IsMounted != 0) & (WowControl.FarmMount == 1) & (DateTime.Now - LastTime).TotalMilliseconds > 3000)
                    {
                        LastTime = DateTime.Now;
                        Abilities.Button("Jump");
                    }
                    else
                    {
                        Range = WowControl.CheckPoint(wow.Objects[0].X, wow.Objects[0].Y, wow.Objects[0].Z, WowControl.WP[CurrentWP].X, WowControl.WP[CurrentWP].Y, WowControl.WP[CurrentWP].Z);
                        if ((DateTime.Now - LastCheck).Milliseconds > 200)
                        {
                            if ((float)Math.Abs(Range - LastRange) < 0.03)
                            {
                                TryLoFly++;
                            }
                            LastRange = Range;
                            LastCheck = DateTime.Now;
                        }
                        if (TryLoFly > 10)
                        {
                            UnstuckTimes++;
                            WowControl.UpdateStatus("Can't reach waypoint.");
                            TryLoFly = 0;
                            Move(wow.Objects[0].R - (float)(Math.PI * 0.5), 25);
                            WowControl.Sleep(2000);
                            Abilities.Button("Jump", 2000);
                            if (UnstuckTimes > 3)
                            {
                                Unstuck();
                                CurrentWP--;
                                UnstuckTimes = 0;
                                if ((GetClosestWP(WowControl.WP) - CurrentWP) > 3)
                                {
                                    CurrentWP = GetClosestWP(WowControl.WP);
                                }
                            }
                            return;
                        }
                        WowControl.FarmStatus = "Searching";
                        wow.GoTo(WowControl.WP[CurrentWP].X, WowControl.WP[CurrentWP].Y, WowControl.WP[CurrentWP].Z, 0, 4);
                        WowControl.UpdateStatus("Going to waypoint № " + CurrentWP + ".");
                    }
                }
            }
        }