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

Fight 4 Me - Stone Arrow

Mordark

Community Developer
Joined
Mar 31, 2014
Messages
291
Reaction score
4
I've been playing a stone arrow and have written this for combos, so here is what I have so far:

Build:
ArcheAge Builder - Arche-Base

Key Feature:
Eureka! I've done it! This plugin will not force your character to follow the target after it engages, so if you clear your target it will STOP.
This plugin does not chase anything if you deselect your target.

Features:
  • will NOT loot
  • will NOT clear your target if it dropped loot.
  • will NOT cast Drop Back if the target was killed by Overwhelm (looked bot-ish otherwise)
  • will cast combos
  • will NOT cast buffs
  • will NOT cast Boneyard
  • will cast Revitalizing Cheer and Redoubt when health gets low

Updated version. Will follow an enemy until You can't cast Stalker's mark on them at 33m. Or until you clear the target.
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 Fight4Me : Core
    {
        public static string GetPluginAuthor()
        {
            return "Mordark";
        }
 
        public static string GetPluginVersion()
        {
            return "0.1.5";
        }
 
        public static string GetPluginDescription()
        {
            return "Fight4Me for StoneArrows";
        }
        public void UseSkillAndWait(string skillName, bool selfTarget = false)
        {
            while (me.isCasting || me.isGlobalCooldown)
            {
                Thread.Sleep(50);
            }   
            
            if (!UseSkill(skillName, true, selfTarget))
            {
                while (me.target != null && dist(me.target) < 35 && GetLastError() == LastError.NoLineOfSight)
              {
                  if (dist(me.target) <= 5)
                  {
                do
                {
                        ComeTo(me.target, 2);
                    } while (me.target != null && dist(me.target) <= 5);
                }
                    else if (dist(me.target) <= 10)
                {    
                    do
                    {
                    ComeTo(me.target, 3);
                } while (me.target != null && dist(me.target) <= 10);  
            } 
                    else if (dist(me.target) < 20)
                {        
                    do
                    {
                    ComeTo(me.target, 8);
                }while (me.target != null && dist(me.target) < 20);
            } 
                else if (dist(me.target) > 33)
                {    
                    CancelTarget();
                }      
                else       
                    CancelTarget();
              }
            }
            while (me.isCasting || me.isGlobalCooldown)
            {
                Thread.Sleep(50);
            }
        }
 
        public void PluginRun()
        {
            while (true)
            {
                while (me.target == null)
                {
                    Thread.Sleep(50);
                }
                
                while (me.target != null && dist(me.target) < 35)
                {
                   if(isAttackable(me.target) && isEnemy(me.target))
                   {        
                       do
                       {
                    if (angle(me.target, me) > 45 && angle(me.target, me) < 315)
                    {
                        TurnDirectly(me.target);
                    }
 
                    if (hpp(me) <= 40 && skillCooldown("Revitalizing Cheer") == 0)
                    {     
                        UseSkillAndWait("Revitalizing Cheer", true);
                        Thread.Sleep(50);
                        if (skillCooldown("Redoubt") == 0)
                        {
                            UseSkillAndWait("Redoubt", true);
                            Thread.Sleep(100);
                        }
                    }
                    if (skillCooldown("Intensity") == 0)
                    {
                        UseSkillAndWait("Intensity", true);
                        Log("Used: Intensity");
                        Thread.Sleep(100);
                    }
                    if(dist(me.target) <= 3 && skillCooldown("Overwhelm") == 0 && skillCooldown("Drop Back") == 0)
                    {
                        UseSkillAndWait("Overwhelm");
                        Log("Used: Overwhelm");
                        Thread.Sleep(50);
                        if(me.target != null && isAlive(me.target))
                        {
                            UseSkillAndWait("Drop Back");
                            Log("Used: Drop Back");   
                            Thread.Sleep(50);
                        }
                        
                    }
                    if (skillCooldown("Stalker's Mark") == 0)
                    {
                        UseSkillAndWait("Stalker's Mark");
                        Log("Used: Stalker's Mark");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Concussive Arrow") == 0)
                    {
                        UseSkillAndWait("Concussive Arrow");
                        Log("Used: Concussive Arrow");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Toxic Shot") == 0)
                    {
                        UseSkillAndWait("Toxic Shot");
                        Log("Used: Toxic Shot");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Piercing Shot") == 0)
                    {
                        UseSkillAndWait("Charged Bolt");
                        Log("Used: Charged Bolt");
                        Thread.Sleep(100);
                        UseSkillAndWait("Piercing Shot");
                        Log("Used: Piercing Shot");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Endless Arrows") == 0)
                    {
                        UseSkillAndWait("Endless Arrows");
                        Log("Used: Endless Arrows");
                        Thread.Sleep(50);
                    }            
                }while(me.target != null && isAlive(me.target));
                    if (me.target != null && !isAlive(me.target) && !me.target.dropAvailable)
                    {
                        CancelTarget();
                    }
                }
                }
            }
        }
    }
}

No movement version:
This one will not EVER move on its own. (unless you count Overwhelm and Drop Back)
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 Fight4Me : Core
    {
        public static string GetPluginAuthor()
        {
            return "Mordark";
        }
 
        public static string GetPluginVersion()
        {
            return "0.1.5";
        }
 
        public static string GetPluginDescription()
        {
            return "Fight4Me for StoneArrows";
        }
        public void UseSkillAndWait(string skillName, bool selfTarget = false)
        {
            while (me.isCasting || me.isGlobalCooldown)
            {
                Thread.Sleep(50);
            }   
            
            if (!UseSkill(skillName, false, selfTarget))
            {
                while (me.isCasting || me.isGlobalCooldown)
                {
                    Thread.Sleep(50);
                }
            }
        } 
 
        public void PluginRun()
        {
            while (true)
            {
                while (me.target == null)
                {
                    Thread.Sleep(50);
                }
                
                while (me.target != null && dist(me.target) < 35)
                {
                   if(isAttackable(me.target) && isEnemy(me.target))
                   {        
                       do
                       {
                    if (angle(me.target, me) > 45 && angle(me.target, me) < 315)
                    {
                        TurnDirectly(me.target);
                    }
 
                    if (hpp(me) <= 40 && skillCooldown("Revitalizing Cheer") == 0)
                    {     
                        UseSkillAndWait("Revitalizing Cheer", true);
                        Thread.Sleep(50);
                        if (skillCooldown("Redoubt") == 0)
                        {
                            UseSkillAndWait("Redoubt", true);
                            Thread.Sleep(100);
                        }
                    }
                    if (skillCooldown("Intensity") == 0)
                    {
                        UseSkillAndWait("Intensity", true);
                        Log("Used: Intensity");
                        Thread.Sleep(100);
                    }
                    if(dist(me.target) <= 3 && skillCooldown("Overwhelm") == 0 && skillCooldown("Drop Back") == 0)
                    {
                        UseSkillAndWait("Overwhelm");
                        Log("Used: Overwhelm");
                        Thread.Sleep(50);
                        if(me.target != null && isAlive(me.target))
                        {
                            UseSkillAndWait("Drop Back");
                            Log("Used: Drop Back");   
                            Thread.Sleep(50);
                        }
                        
                    }
                    if (skillCooldown("Stalker's Mark") == 0)
                    {
                        UseSkillAndWait("Stalker's Mark");
                        Log("Used: Stalker's Mark");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Concussive Arrow") == 0)
                    {
                        UseSkillAndWait("Concussive Arrow");
                        Log("Used: Concussive Arrow");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Toxic Shot") == 0)
                    {
                        UseSkillAndWait("Toxic Shot");
                        Log("Used: Toxic Shot");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Piercing Shot") == 0 && skillCooldown("Charged Bolt") == 0)
                    {
                        UseSkillAndWait("Charged Bolt");
                        Log("Used: Charged Bolt");
                        Thread.Sleep(100);
                        UseSkillAndWait("Piercing Shot");
                        Log("Used: Piercing Shot");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Endless Arrows") == 0)
                    {
                        UseSkillAndWait("Endless Arrows");
                        Log("Used: Endless Arrows");
                        Thread.Sleep(50);
                    }            
                }while(me.target != null && isAlive(me.target));
                    if (me.target != null && !isAlive(me.target) && !me.target.dropAvailable)
                    {
                        CancelTarget();
                    }
                }
                }
            }
        }
    }
}

The Gladiator Edition works based on if your target is in your party or not. Just be careful not to use this outside of arenas.

Fight4Me - StoneArrow - Gladiator Edition
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 Fight4Me : Core
    {
        public static string GetPluginAuthor()
        {
            return "Mordark";
        }
 
        public static string GetPluginVersion()
        {
            return "0.1.5";
        }
        
        public static string GetPluginDescription()
        {
            return "Fight4Me for StoneArrows - Gladiator Edition";
        }              
        
        public void UseSkillAndWait(string skillName, bool selfTarget = false)
        {       
            while (me.isCasting || me.isGlobalCooldown)
            {
                Thread.Sleep(50);
            }   
            
            if (!UseSkill(skillName, false, selfTarget))
            {
                while (me.isCasting || me.isGlobalCooldown)
                {
                    Thread.Sleep(50);
                }
            }
        } 
 
        public void PluginRun()
        {
            while (true)
            {
                while (me.target == null)
                {
                    Thread.Sleep(50);
                }
                
                while (me.target != null && dist(me.target) < 35)
                {
                    if(!isInMyPartyGroup(me.target))
                   {        
                       do
                       {
                    if (angle(me.target, me) > 45 && angle(me.target, me) < 315)
                    {
                        TurnDirectly(me.target);
                    }                            
 
                    if (hpp(me) <= 40 && skillCooldown("Revitalizing Cheer") == 0)
                    {     
                        UseSkillAndWait("Revitalizing Cheer", true);
                        Thread.Sleep(50);
                        if (skillCooldown("Redoubt") == 0)
                        {
                            UseSkillAndWait("Redoubt", true);
                            Thread.Sleep(100);
                        }
                    }
                    if (skillCooldown("Intensity") == 0)
                    {
                        UseSkillAndWait("Intensity", true);
                        Log("Used: Intensity");
                        Thread.Sleep(100);
                    }
                    if(dist(me.target) <= 3 && skillCooldown("Overwhelm") == 0 && skillCooldown("Drop Back") == 0)
                    {
                        UseSkillAndWait("Overwhelm");
                        Log("Used: Overwhelm");
                        Thread.Sleep(50);
                        if(me.target != null && isAlive(me.target))
                        {
                            UseSkillAndWait("Drop Back");
                            Log("Used: Drop Back");   
                            Thread.Sleep(50);
                        }
                        
                    }
                    if (skillCooldown("Stalker's Mark") == 0)
                    {
                        UseSkillAndWait("Stalker's Mark");
                        Log("Used: Stalker's Mark");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Concussive Arrow") == 0)
                    {
                        UseSkillAndWait("Concussive Arrow");
                        Log("Used: Concussive Arrow");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Toxic Shot") == 0)
                    {
                        UseSkillAndWait("Toxic Shot");
                        Log("Used: Toxic Shot");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Piercing Shot") == 0 && skillCooldown("Charged Bolt") == 0)
                    {
                        UseSkillAndWait("Charged Bolt");
                        Log("Used: Charged Bolt");
                        Thread.Sleep(100);
                        UseSkillAndWait("Piercing Shot");
                        Log("Used: Piercing Shot");
                        Thread.Sleep(100);
                    }
                    if (skillCooldown("Endless Arrows") == 0)
                    {
                        UseSkillAndWait("Endless Arrows");
                        Log("Used: Endless Arrows");
                        Thread.Sleep(50);
                    }            
                }while(me.target != null && isAlive(me.target));
                    if (me.target != null && !isAlive(me.target) && !me.target.dropAvailable)
                    {
                        CancelTarget();
                    }
                }
                }
            }
        }
    }
}

Tips are greatly appreciated:


Update:
Implementing the PVP function into a widget. Uploading either today or in the next few days.
 
Last edited:
Does yours try to move and chase players too lol
 
Yes, but I'm going to be working on one that doesn't. I'll edit the post and put the one that won't chase players in below it.
 
Bump for update. I've rewritten my plugin so that if you clear your target (hit the esc key) it will stop fighting and it will stop following.
 
Not working for me, it compiles but when i press play nothing happens and just stops

EDIT: never mind it was my fault, it didn't like my folder i set for it :P
 
Last edited:
Bump for update. I've rewritten my plugin so that if you clear your target (hit the esc key) it will stop fighting and it will stop following.

SHARE! haha

So just to clarify the plugin will still do movement to get closer? Have not figured that out yet?
 
Last edited:
SHARE! haha

So just to clarify the plugin will still do movement to get closer? Have not figured that out yet?

The plugin will only do movement to get closer if it can't cast an ability on a target that is 33m away or closer.
If you want a plugin that doesn't move at all, EVER, let me know and I'll post the changed code so the plugin will never move on its own.
 
The plugin will only do movement to get closer if it can't cast an ability on a target that is 33m away or closer.
If you want a plugin that doesn't move at all, EVER, let me know and I'll post the changed code so the plugin will never move on its own.

Yes, please post the no movement AT ALL, EVER :)

Also to that point, is there a way to have the rotation not start till in range, meaning it does not start trying to do the rotation till 33m or when you can cast stalker's mark etc?
 
Yes, please post the no movement AT ALL, EVER :)

Also to that point, is there a way to have the rotation not start till in range, meaning it does not start trying to do the rotation till 33m or when you can cast stalker's mark etc?

It'll be a while before I can post the modded code, something came up.

That's what this rotation does. It doesn't start until you get within 33m of the target, aka in range. Then it moves forward a little after casting stalker's mark to be in the 28m range for the rest of the abilities.
 
It'll be a while before I can post the modded code, something came up.

That's what this rotation does. It doesn't start until you get within 33m of the target, aka in range. Then it moves forward a little after casting stalker's mark to be in the 28m range for the rest of the abilities.

Understand, happy to wait.

The problem with any movement at all is sometimes movement is not permit-able, for instance when you are targeting someone in the sea on a boat and the bot wants to jump off the boat and bee line to them. To that point if you are in the water and use the current movement, the bot does not understand y axis, and goes to the sea floor.

If the rotation can be paused till in range, and no movement can be attained i think it would be a great addition. Thank you again for your assistance
 
Personally I'm doing something quite different.
When i press the key "1" , it call a script that detects what is the best skill to launch according to the situation (stun, silence, target bleeding, distance etc ...).
So i just need to click on a target and press "1" repeatedly, the script do the rest ^^.
this is extremely effective in PVP.
 
Personally I'm doing something quite different.
When i press the key "1" , it call a script that detects what is the best skill to launch according to the situation (stun, silence, target bleeding, distance etc ...).
So i just need to click on a target and press "1" repeatedly, the script do the rest ^^.
this is extremely effective in PVP.

Do you mind giving some insight on how you are doing that?
 
Yes please, care to share some more info
Personally I'm doing something quite different.
When i press the key "1" , it call a script that detects what is the best skill to launch according to the situation (stun, silence, target bleeding, distance etc ...).
So i just need to click on a target and press "1" repeatedly, the script do the rest ^^.
this is extremely effective in PVP.
 
Personally I'm doing something quite different.
When i press the key "1" , it call a script that detects what is the best skill to launch according to the situation (stun, silence, target bleeding, distance etc ...).
So i just need to click on a target and press "1" repeatedly, the script do the rest ^^.
this is extremely effective in PVP.

That is an awesome idea... I assume that your script checks for conditions of your current target and selects the appropriate skill to use?
 
Yes exactly.

I'll share in a few days the general idea of the script so that everyone can do the same.
However, I'm not going to share my whole script.
As I say it is very effective in PVP and I don't want to get killed by people using my plugin :) .
 
Back
Top