Here are my script for mining. Script is using sorcecery for getting rid of agro, but it's easily changeable to any other class.
You have to provide path around mine. For best results path should be closed circle. You have to name every point where you want to check for veins (20m radius) by number starting at 1. Also you have change line 84 in script. For example:
If you have 10 named points in you mining path it should looks like:
Script:
You have to provide path around mine. For best results path should be closed circle. You have to name every point where you want to check for veins (20m radius) by number starting at 1. Also you have change line 84 in script. For example:
If you have 10 named points in you mining path it should looks like:
Code:
for(int i=1;i<[COLOR="#FF0000"]11[/COLOR];i++)
Script:
Code:
using System;
using System.Drawing;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using ArcheBuddy.Bot.Classes;
using System.Windows.Forms;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Text;
using System.ComponentModel;
namespace DefaultNameSpace{
public class DefaultClass : Core
{
public static string GetPluginAuthor()
{
return "Gajda";
}
public static string GetPluginVersion()
{
return "1.3.0";
}
public static string GetPluginDescription()
{
return "mining bot";
}
private Gps gps;
//Call on plugin start
public void PluginRun()
{
ClearLogs();
Log(DateTime.Now.ToLongTimeString() + " : Start");
gps = new Gps(this);
gps.LoadDataBase(Application.StartupPath + "\\Plugins\\Mining\\mine.db3");
DoMineRun();
}
public List<DoodadObject> Sort(List<DoodadObject> tempitems)
{
Log(DateTime.Now.ToLongTimeString() + " : I see " + tempitems.Count + " items");
List<DoodadObject> items = new List<DoodadObject>();
for(int i=0;i<tempitems.Count;i++)
{
if(tempitems[i].name.Contains("ein") && (tempitems[i].dist(me)<20) &! tempitems[i].name.Contains("Remnant") )
items.Add(tempitems[i]);
}
Log(DateTime.Now.ToLongTimeString() + " : I see " + items.Count + " usable item(s)");
bool needSort = true;
if(items.Count<2)
needSort = false;
int loop = 1;
while(needSort)
{
Log(DateTime.Now.ToLongTimeString() + " : sorting run " + loop);
bool changed = false;
for(int i=0;i<items.Count-1;i++)
{
if(items[i].dist(me)>items[i+1].dist(me))
{
var tempItem = items[i];
items[i]=items[i+1];
items[i+1]=tempItem;
changed = true;
}
}
if(changed==false)
{
needSort = false;
}
loop++ ;
}
return items;
}
public void DoMineRun()
{
// i<11 is for route with 10 mining spots
for(int i=1;i<11;i++)
{
CheckAggro();
Log(DateTime.Now.ToLongTimeString() + " : movint to point " + i.ToString());
UseSkill("Dash");
while(!gps.GpsMove(i.ToString()))
{
Thread.Sleep(100);
}
Log(DateTime.Now.ToLongTimeString() + " : at point " + i.ToString());
CheckAggro();
while(Mine())
{
Thread.Sleep(100);
}
}
CheckAggro();
Log(DateTime.Now.ToLongTimeString() + " : moving to start");
gps.GpsMove("1");
CheckAggro();
Random rnd = new Random();
int wait = rnd.Next(150,210);
wait = wait*1000;
Log(DateTime.Now.ToLongTimeString() + " : wait " + wait.ToString());
Thread.Sleep(wait);
CheckAggro();
DoMineRun();
}
public bool Mine()
{
Log(DateTime.Now.ToLongTimeString() + " : looking for veins");
bool mined = false;
List<DoodadObject> items = Sort(getDoodads());
Log(DateTime.Now.ToLongTimeString() + " : founded " + items.Count);
foreach(var doodad in items)
{
Log(DateTime.Now.ToLongTimeString() + " : " + doodad.name + " " + doodad.dist(me));
}
foreach(var doodad in items)
{
if(doodad.name.Contains("ein") && (doodad.dist(me)<20) &! doodad.name.Contains("Remnant") )
{
mined = true;
Log(DateTime.Now.ToLongTimeString() + " : " + doodad.name + " " + doodad.id.ToString() + " " + doodad.dist(me));
var skills = doodad.getUseSkills();
double doodadCastDist = 0;
if (skills.Count > 0)
{
if (doodadCastDist == 0)
{
Thread.Sleep(500);
Log(DateTime.Now.ToLongTimeString() + " : mining");
TurnDirectly(doodad);
UseDoodadSkill(skills[0].id, doodad, true);
}
Thread.Sleep(1000);
}
}
}
return mined;
}
public void CheckAggro()
{
Log(DateTime.Now.ToLongTimeString() + " : CheckAggro");
if(getAggroMobs().Count > 0)
{
Log(DateTime.Now.ToLongTimeString() + " : " + getAggroMobs().Count.ToString());
foreach(var obj in getAggroMobs())
{
Log(DateTime.Now.ToLongTimeString() + " : " + obj.name);
SetTarget(obj);
TurnDirectly(me.target);
Log(DateTime.Now.ToLongTimeString() + " : fighting");
while(obj.isAlive())
{
TurnDirectly(me.target);
if(skillCooldown("Freezing Arrow")==0)
{
Log(DateTime.Now.ToLongTimeString() + " Freezing arrow");
UseSkill("Freezing Arrow", false);
Thread.Sleep(100);
}
else
{
if(skillCooldown("Crippling Mire")==0)
{
Log(DateTime.Now.ToLongTimeString() + " Crippling Mire");
UseSkill("Crippling Mire",false);
Thread.Sleep(100);
}
else
{
if(skillCooldown("Flamebolt")==0)
{
Log(DateTime.Now.ToLongTimeString() + " Flame Bolt");
UseSkill("Flamebolt",false);
Thread.Sleep(100);
}
}
}
if(!obj.inFight)
return;
}
Log(DateTime.Now.ToLongTimeString() + " : fight is over");
}
}
}
public void PluginStop()
{
}
}
}
Last edited: