What's new
  • Visit Rebornbuddy
  • Visit Resources
  • Visit API Documentation
  • Visit Downloads
  • Visit Portal
  • Visit Panda Profiles
  • Visit LLamamMagic

Lazy Raider (Demonologist, untested)

nick1988

New Member
Joined
Sep 1, 2014
Messages
163
Reaction score
2
Lazy Raider (Sorcery based Classes)

Hello,

this is my first official "try" I would like to share. It's an attempt for a lazy raider like plugin.
Currently this will only work with following build (guess it will also work, if you have the basic skills from sorcery, since it is the main damage source.

Skill calculator - Archeage Database 1.2

I tested the plugin with the current bot build, and it worked fine. Here is what you can currently expect:

1. Once you target an attackable mob, the bot will make sure you are facing it, and that you have line of sight.
2. The bot will move closer to the mob, if he is further away then 20m (max. distance for sorcery spells)
3. The bot will kill the mob
4. It will check if the mob is lootable, if so he will do it. If not, he will clear the target.
5. If you target a NPC (like a quest giver) the bot will recognice it, and will do nothing. (since target != attackable)

This Version requires higher level and access to "magic circle"
Code:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using ArcheBuddy.Bot.Classes;

namespace Follower{
    public class LazyRaider : Core
    {
        public static string GetPluginAuthor()
        {
            return "nick1988";
        }

        public static string GetPluginVersion()
        {
            return "0.4.0";
        }

        public static string GetPluginDescription()
        {
            return "LazyRaider for Sorcery based classes";
        } 
             public void UseSkillAndWait(string skillName, bool selfTarget = false)
        {
            //wait for cooldowns to finish first, before we try to cast skill
            while (me.isCasting || me.isGlobalCooldown)
                Thread.Sleep(50);
            if (!UseSkill(skillName, true, selfTarget))
            {
                if (me.target != null && GetLastError() == LastError.NoLineOfSight)
                {
                    //No line of sight, try come to target.
                    if (dist(me.target) <= 5)
                        ComeTo(me.target, 2);
                    else if (dist(me.target) <= 10)
                        ComeTo(me.target, 3);
                    else if (dist(me.target) < 20)
                        ComeTo(me.target, 8);
                    else
                        ComeTo(me.target, 8);
                }
            }      
            //wait for cooldown again, after we start cast skill
            while (me.isCasting || me.isGlobalCooldown)
                Thread.Sleep(50);
        }
        
        public void PluginRun()
        {
            while(true)
            {
                while(me.target == null)  
                // while we have no target, this loop will make the bot do nothing, and he will check back every 50ms, to see if we have a target
                {
                Thread.Sleep(50);
                }
            
            while(me.target != null && isAttackable(me.target)) 
            // once we have a target, and this target is attackable (so its no NPC) the bot will jump into this loop.
            // this loops contains the "combat routine"
                        {   
                            if (angle(me.target, me) > 45 && angle(me.target, me) < 315)  
                            // making sure we are faceing the target. If not, we will turn towards it
                            {
                            TurnDirectly(me.target);
                            }
                                
                        //  if(mpp(me) <=25)
                        //   {
                        // UseSkill("Play Instrument", true, true);
                        //  Thread.Sleep(5000);
                        //}
                                
                        if (dist(me.target) >=21)
                                {
                                    ComeTo(me.target, 19);
                                }
                                if (skillCooldown("Play Dead") == 0 && hpp(me) <=25)  
                                // Casting "insulating lens", if its not on cooldown
                                {
                                    UseSkillAndWait("Play Dead");
                                    Log("Used: Play Dead - That was close...");
                                    CancelTarget();  
                                    Thread.Sleep(6000);
                                } 
                                if (skillCooldown("Insulating Lens") == 0)  
                                // Casting "insulating lens", if its not on cooldown
                                {
                                    UseSkillAndWait("Insulating Lens",true);
                                    Log("Used: Insulating Lens - Now immunte to damage for a while");
                                    Thread.Sleep(100);
                                }    
                                if (skillCooldown("Magic Circle") == 0 && dist(me.target) <= 20)  
                                //casting "magic circle", if its not on cooldown and if we are within 20m of the target.
                                //this way we make sure, that we are in range of the target and won't leave the magic circle and loose the buff.
                                {
                                    UseSkillAndWait("Magic Circle");
                                    Log("Used: Magic Circle - Damage boost activated");  
                                    Thread.Sleep(100);
                                } 
                                
                                if (dist(me.target) <= 5 && skillCooldown("Hell Spear") == 0 && hpp(me.target) >= 35 && skillCooldown("Magic Circle") >= 1) 
                                // checking if the target is within 5m range, then checking for the cd of "Hell Spear" and finaly 
                                // checking if the target is at or above 35% health, so we dont waste it in low life mobs
                                // in addition, we will try to cast "Summon Crows" (might be on CD and fail)
                                {
                                    UseSkillAndWait("Hell Spear");
                                    Thread.Sleep(500);
                                    UseSkillAndWait("Summon Crows");
                                    Log("Used: Hell Spear + Summon Crows (Combo) - Poison Crows unleashed");  
                                    Thread.Sleep(50);                           
                                }
                          
                                if (skillCooldown("Mana Force") == 0 && dist(me.target) <= 8 && skillCooldown("Magic Circle") >= 1)  
                                // Casting "insulating lens", if its not on cooldown
                                {
                                    UseSkillAndWait("Mana Force");
                                    Log("Used: Mana Force - Knocking back Enemies");  
                                    
                                }
                                
                               if (dist(me.target) <= 5 && skillCooldown("Summon Crows") == 0 && getAggroMobs().Count >= 2 && skillCooldown("Hell Spear") != 0 && skillCooldown("Magic Circle") >= 1)
                               // checking if target is within 5m range, then check for CD of "Summon Crows". Afterwards see if the Mob count, that is currently attacking us is
                               // above or at atleast 2. Also we check for the CD of "Hell Spear" so we dont waste crows without additional damage
                                {
                                    UseSkillAndWait("Summon Crows");  
                                    Log("Used: Summon Crows - Release the Crows");
                                    Thread.Sleep(100);
                                } 
                                
                                if (skillCooldown("Freezing Arrow") ==0 && skillCooldown("Magic Circle") >= 1)
                                // casting "freezing arrow" if not on cd
                                {
                                    UseSkillAndWait("Freezing Arrow");
                                    Log("Used: Freezing Arrow");  
                                    Thread.Sleep(100);
                                 } 
                                if (skillCooldown("Freezing Arrow") != 0 && hpp(me) > 60 && skillCooldown("Magic Circle") >= 1)
                                    // if "freezing arrow" is on CD and our HP is above 60%, we use flamebolt
                                {
                                    for (int i=0;i<2;i++)
                                        UseSkillAndWait("Flamebolt");
                                    Log("Used: Flamebolt - PewPewPew");
                                } 
                                 if (skillCooldown("Freezing Arrow") != 0 && hpp(me) <= 75 && skillCooldown("Enervate") == 0 && skillCooldown("Magic Circle") >= 1)
                                 // if "freezing arrow" is on CD and our hp is below 75% we look for the cd of "enervate" if its available we will cast it.
                                 // since eneverate will give us an "+xxx life" on a hit of "Earthen Grip" we will us it as well, to regain some life.
                                {
                                    UseSkillAndWait("Enervate");
                                    Thread.Sleep(100);
                                    UseSkillAndWait("Earthen Grip");
                                    Thread.Sleep(100);
                                    Log("Used: Enervate + Earthen Grip (Combo) - SelfHeal activated");
                                } 
                                if (skillCooldown("Freezing Arrow") != 0 && mpp(me) <= 25 && skillCooldown("Enervate") == 0 && skillCooldown("Magic Circle") >= 1)
                                // if our "freezing arrow" is on cooldown, and our mp is below or at 25%, we will also look for enervate cd.
                                // if the cd is 0, we will cast enervate. This will cause our flamebolts to regenerate mana, when hitting the affected target
                                {
                                    UseSkillAndWait("Enervate");
                                    Log("Used: Enervate - Mana regeneration for Flamebold activated");
                                    Thread.Sleep(100);
                                }
                      while (me.target != null && !isAlive(me.target) && me.target.dropAvailable && isAlive())
                      // we check if we have a target, then check if this target is NOT alive. Then we look if its lootable  and finaly whether we are alive or not.
                      // if all this is true, we will move towards the target and get our loot.
                        {
                            if (me.dist(me.target) > 3)
                                ComeTo(me.target, 1);
                            PickupAllDrop(me.target);
                        }
                       
                       // once we looted the target, and made sure its dead we will clear our target.
                        if (me.target != null && !isAlive(me.target) && !me.target.dropAvailable)
                        {
                            CancelTarget();
                        }
                        
             
                }
            
             
            }
                
        }
    }
        
    }

This version should work for lower chars, that don't have "magic circle" yet:
Code:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using ArcheBuddy.Bot.Classes;

namespace Follower{
    public class LazyRaider : Core
    {
        public static string GetPluginAuthor()
        {
            return "nick1988";
        }

        public static string GetPluginVersion()
        {
            return "0.4.0";
        }

        public static string GetPluginDescription()
        {
            return "LazyRaider for Sorcery based classes";
        } 
             public void UseSkillAndWait(string skillName, bool selfTarget = false)
        {
            //wait for cooldowns to finish first, before we try to cast skill
            while (me.isCasting || me.isGlobalCooldown)
                Thread.Sleep(50);
            if (!UseSkill(skillName, true, selfTarget))
            {
                if (me.target != null && GetLastError() == LastError.NoLineOfSight)
                {
                    //No line of sight, try come to target.
                    if (dist(me.target) <= 5)
                        ComeTo(me.target, 2);
                    else if (dist(me.target) <= 10)
                        ComeTo(me.target, 3);
                    else if (dist(me.target) < 20)
                        ComeTo(me.target, 8);
                    else
                        ComeTo(me.target, 8);
                }
            }      
            //wait for cooldown again, after we start cast skill
            while (me.isCasting || me.isGlobalCooldown)
                Thread.Sleep(50);
        }
        
        public void PluginRun()
        {
            while(true)
            {
                while(me.target == null)  
                // while we have no target, this loop will make the bot do nothing, and he will check back every 50ms, to see if we have a target
                {
                Thread.Sleep(50);
                }
            
            while(me.target != null && isAttackable(me.target)) 
            // once we have a target, and this target is attackable (so its no NPC) the bot will jump into this loop.
            // this loops contains the "combat routine"
                        {   
                            if (angle(me.target, me) > 45 && angle(me.target, me) < 315)  
                            // making sure we are faceing the target. If not, we will turn towards it
                            {
                            TurnDirectly(me.target);
                            }
                                
                        //  if(mpp(me) <=25)
                        //   {
                        // UseSkill("Play Instrument", true, true);
                        //  Thread.Sleep(5000);
                        //}
                                
                        if (dist(me.target) >=21)
                                {
                                    ComeTo(me.target, 19);
                                }
                                if (skillCooldown("Play Dead") == 0 && hpp(me) <=25)  
                                // Casting "insulating lens", if its not on cooldown
                                {
                                    UseSkillAndWait("Play Dead");
                                    Log("Used: Play Dead - That was close...");
                                    CancelTarget();  
                                    Thread.Sleep(6000);
                                } 
                                if (skillCooldown("Insulating Lens") == 0)  
                                // Casting "insulating lens", if its not on cooldown
                                {
                                    UseSkillAndWait("Insulating Lens",true);
                                    Log("Used: Insulating Lens - Now immunte to damage for a while");
                                    Thread.Sleep(100);
                                }    
                                if (skillCooldown("Magic Circle") == 0 && dist(me.target) <= 20)  
                                //casting "magic circle", if its not on cooldown and if we are within 20m of the target.
                                //this way we make sure, that we are in range of the target and won't leave the magic circle and loose the buff.
                                {
                                    UseSkillAndWait("Magic Circle");
                                    Log("Used: Magic Circle - Damage boost activated");  
                                    Thread.Sleep(100);
                                } 
                                
                                if (dist(me.target) <= 5 && skillCooldown("Hell Spear") == 0 && hpp(me.target) >= 35) 
                                // checking if the target is within 5m range, then checking for the cd of "Hell Spear" and finaly 
                                // checking if the target is at or above 35% health, so we dont waste it in low life mobs
                                // in addition, we will try to cast "Summon Crows" (might be on CD and fail)
                                {
                                    UseSkillAndWait("Hell Spear");
                                    Thread.Sleep(500);
                                    UseSkillAndWait("Summon Crows");
                                    Log("Used: Hell Spear + Summon Crows (Combo) - Poison Crows unleashed");  
                                    Thread.Sleep(50);                           
                                }
                          
                                if (skillCooldown("Mana Force") == 0 && dist(me.target) <= 8)  
                                // Casting "insulating lens", if its not on cooldown
                                {
                                    UseSkillAndWait("Mana Force");
                                    Log("Used: Mana Force - Knocking back Enemies");  
                                    
                                }
                                
                               if (dist(me.target) <= 5 && skillCooldown("Summon Crows") == 0 && getAggroMobs().Count >= 2 && skillCooldown("Hell Spear") != 0)
                               // checking if target is within 5m range, then check for CD of "Summon Crows". Afterwards see if the Mob count, that is currently attacking us is
                               // above or at atleast 2. Also we check for the CD of "Hell Spear" so we dont waste crows without additional damage
                                {
                                    UseSkillAndWait("Summon Crows");  
                                    Log("Used: Summon Crows - Release the Crows");
                                    Thread.Sleep(100);
                                } 
                                
                                if (skillCooldown("Freezing Arrow") ==0)
                                // casting "freezing arrow" if not on cd
                                {
                                    UseSkillAndWait("Freezing Arrow");
                                    Log("Used: Freezing Arrow");  
                                    Thread.Sleep(100);
                                 } 
                                if (skillCooldown("Freezing Arrow") != 0 && hpp(me) > 60)
                                    // if "freezing arrow" is on CD and our HP is above 60%, we use flamebolt
                                {
                                    for (int i=0;i<2;i++)
                                        UseSkillAndWait("Flamebolt");
                                    Log("Used: Flamebolt - PewPewPew");
                                } 
                                 if (skillCooldown("Freezing Arrow") != 0 && hpp(me) <= 75 && skillCooldown("Enervate") == 0)
                                 // if "freezing arrow" is on CD and our hp is below 75% we look for the cd of "enervate" if its available we will cast it.
                                 // since eneverate will give us an "+xxx life" on a hit of "Earthen Grip" we will us it as well, to regain some life.
                                {
                                    UseSkillAndWait("Enervate");
                                    Thread.Sleep(100);
                                    UseSkillAndWait("Earthen Grip");
                                    Thread.Sleep(100);
                                    Log("Used: Enervate + Earthen Grip (Combo) - SelfHeal activated");
                                } 
                                if (skillCooldown("Freezing Arrow") != 0 && mpp(me) <= 25 && skillCooldown("Enervate") == 0)
                                // if our "freezing arrow" is on cooldown, and our mp is below or at 25%, we will also look for enervate cd.
                                // if the cd is 0, we will cast enervate. This will cause our flamebolts to regenerate mana, when hitting the affected target
                                {
                                    UseSkillAndWait("Enervate");
                                    Log("Used: Enervate - Mana regeneration for Flamebolt activated");
                                    Thread.Sleep(100);
                                }
                      while (me.target != null && !isAlive(me.target) && me.target.dropAvailable && isAlive())
                      // we check if we have a target, then check if this target is NOT alive. Then we look if its lootable  and finaly whether we are alive or not.
                      // if all this is true, we will move towards the target and get our loot.
                        {
                            if (me.dist(me.target) > 3)
                                ComeTo(me.target, 1);
                            PickupAllDrop(me.target);
                        }
                       
                       // once we looted the target, and made sure its dead we will clear our target.
                        if (me.target != null && !isAlive(me.target) && !me.target.dropAvailable)
                        {
                            CancelTarget();
                        }
                        
             
                }
            
             
            }
                
        }
    }
        
    }

I tested the plugin for 10minutes without noticable issues. My char is currently level 38 and is using the build above. I am not 100% sure, but I guess every build that has the Sorcery Skill tree as a Main one,
should be able to use this. (so far he is just using 2 skills from another tree. Hell Spear and Summon Crows) If you have questions, let me know.

If you have feature requests, post them below. I will check them and see what I can do, to get them implemented.

Changelog:

0.1 . Initial release, untested
0.2 . First tested release. Implemented check for loot and autoloot. Bot will now drop the target, once its dead and looted
0.3 . Added commentary lines, for better understanding
0.4 .
Added new Build and modified the rotation accordingly.
- The routine will now use "Play Dead" once it reaces 25% or lower (it will also clear target, so that It doesnt continue to attack the target and break the "Play Dead" Effect)
- The routine will now use "Mana Force" to knockback enemies that are within 8m
- Reorganized spells and spell requirements to make sure that the routine will make optimal use of Buffs (Magic Circle, Insulating Lens)
- Fixed a bug, where the bot would use buffs / spells without beeing in range. The routine will now get into a 20m distance first, before starting to use spells.
 
Last edited:
Hi, thank you for your hard work :) i wont mind giving it a try :) maybe someone should post to people if they don't know what to do with the code what to do with it :)
 
Updated Post #1
Plugin is now tested, and working great so far. As stated in Post#1. it should work for all classes that use the "sorcery" tree as their main tree.
 
tested working :)

but its not regen mana :( could u add to start use flute when less then 5-10% mana ?

Chears !
 
tested working :)

but its not regen mana :( could u add to start use flute when less then 5-10% mana ?

Chears !
He should now play the instument for 5 seconts, once he is at or below 25 % MP. Duration can be adjusted if necessary.
 
now if you'd add that it auto-selects mobs + if it dies it walks back to its location you'd be my hero :P.

but its already pretty awsum <3 thanks for that :3
 
now if you'd add that it auto-selects mobs + if it dies it walks back to its location you'd be my hero :P.

but its already pretty awsum <3 thanks for that :3

well, this plugin is supposed to be like "Lazy Raider" for wow. So you would need to control movement and target selection. I have currently no plans to include movement other then "moving into range". Sorry.
 
when i start the Plugin make nothing ingame :( When is stopp the Plugin i become this "22:21:27: F:\Archebuddy\Plugins\MyFirstPlugin\MyFirstPlugin.dllUnknown executing error, or plugin was forcibly unloaded."
My char ist Level 6...is too low?
 
Yeah, at level 6 this would not work, due to a "flaw" in the conditions. I will make a change for low level chars. Will update #1 for it soon.


Edit: #1 Post update with "lower level" version. I havent tested it, but since it was just a minor change it should work.
 
Last edited:
Yeah, at level 6 this would not work, due to a "flaw" in the conditions. I will make a change for low level chars. Will update #1 for it soon.


Edit: #1 Post update with "lower level" version. I havent tested it, but since it was just a minor change it should work.

Thanks!

I will test it when the AA Servers are going Online!
 
Back
Top