trumbe
Member
- Joined
- Apr 30, 2011
- Messages
- 95
- Reaction score
- 1
I've been playing a Darkrunner for awhile and have written this for combos, Its not perfect but im open to help to improve it so here is what I have so far:
Build:
http://earlygame.net/archeage/builds/72794-DarkRunning_2_0
Key Feature:
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:
I do want to try and add make it cast shadow step and then cast shadowsmite but was having issue with it detecting distances.. if anyone has a possible solution i would greatly appreciate it.
Build:
http://earlygame.net/archeage/builds/72794-DarkRunning_2_0
Key Feature:
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 cast combos
- Will try and follow your enemy
I do want to try and add make it cast shadow step and then cast shadowsmite but was having issue with it detecting distances.. if anyone has a possible solution i would greatly appreciate it.
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 LazyRunner : Core
{
public static string GetPluginAuthor()
{
return "Trumbe";
}
public static string GetPluginVersion()
{
return "0.1.0";
}
public static string GetPluginDescription()
{
return "LazyRunner for the DarkRunner Class";
}
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) >= 12 || skillCooldown("Stalker's Mark") != 0)
{
ComeTo(me.target, 12);
}
if (skillCooldown("Stalker's Mark") == 0)
{
UseSkillAndWait("Stalker's Mark");
Log("Used: Stalker's Mark");
}
if (skillCooldown("Overwhelm") == 0)
{
UseSkillAndWait("Overwhelm");
Log("Used: Overwhelm");
if (skillCooldown("Shadowsmite") == 0)
{
UseSkillAndWait("Shadowsmite");
Log("Used: Shadowsmite");
if (skillCooldown("Precision Strike") != 0)
{
UseSkillAndWait("Precision Strike");
Log("Used: Precision Strike");
}
}
}
if (skillCooldown("Precision Strike") == 0)
{
UseSkillAndWait("Precision Strike");
Log("Used: Precision Strike");
}
if (skillCooldown("Charge") == 0)
{
UseSkillAndWait("Charge");
Log("Used: Charge");
if (skillCooldown("Behind Enemy Lines") != 0)
{
UseSkillAndWait("Behind Enemy Lines");
Log("Used: Behind Enemy Lines");
}
}
if (skillCooldown("Charge") == 0)
{
if (dist(me.target) >= 5)
{
ComeTo(me.target, 5);
UseSkillAndWait("Charge");
Log("Used: Charge");
if (skillCooldown("Triple Slash") == 0 && dist(me.target) <= 5)
{
UseSkillAndWait("Triple Slash");
Log("Used: Triple Slash");
}
}
UseSkillAndWait("Triple Slash");
Log("Used: Triple Slash");
if (skillCooldown("Whirlwind Slash") == 0 && dist(me.target) <= 5)
{
UseSkillAndWait("Whirlwind Slash");
Log("Used: Whirlwind Slash");
}
}
if (skillCooldown("Tiger Strike") == 0)
{
UseSkillAndWait("Tiger Strike");
Log("Used: Tiger Strike");
}
if (skillCooldown("Triple Slash") == 0)
{
for (int i = 0; i < 2; i++)
UseSkillAndWait("Triple Slash");
Log("Used: Triple Slash");
}
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();
}
}
}
}
}
}
Attachments
Last edited:






