This message looks like it is trying to enable the info panel for the current system. This info panel is needed for the bot to operate.
Maybe detection of that info panel depends on localization, so if this info panel is already visible in the client, next try to switch the eve online client to english language.
Hi @raphael.mca
Well I was in your shoes not long ago, luckily there are several helpful people here to assist.
@Viir helped me through the process and you can see how do get setup here: Building A-Bot
Read through my comments in this thread first to see that you need to get visual studio setup first.
@ivar85
You should be able to use them in both, but its not a complete botting solution at the moment.
It will go to any site even though there is someone there along with not orbiting out of the box (I got help setting that up as you can see in this thread though), wonât activate armor/shield repairs on itâs own and probably more things other paid for solution can provide.
But this framework has the potential to be much better if someone knows how to code in the missing functions.
Im trying to click on the fightersSquadron âLaunchAllButtonâ
In Combat.cs I added:
var fightersSquadron = memoryMeasurement?.ShipUi.SquadronsUI;
var Launch_Figthers = fightersSquadron?.LaunchAllButton;
yield return Launch_Figthers?.MouseClick(BotEngine.Motor.MouseButtonIdEnum.Left);
I tryied more time in different way to wrap the Motion to Bot.cs then delcare Motion into the BotTask.cs
But nothing I get always this error:
âCannot implicitly convert type âSanderling.Motor.MotionParamâ to âSanderling.ABot.Bot.IBotTaskâ. An explicit conversion exists (are you missing a cast?)â
Can you show me the code to make mouseClick usable into the Combat.cs ?
Is it possible to get this bot to loot and salvage ?
I guess, you should create new task for this. Something like this (not tested):
public class LaunchFigthers: IBotTask
{
public Bot bot;
public IEnumerable<IBotTask> Component => null;
public IEnumerable<MotionParam> Effects
{
get
{
var launchFigthers = bot?.MemoryMeasurement?.ShipUi.SquadronsUI?.LaunchAllButton;
if (launchFigthers==null)
yield break;
yield return launchFigthers?.MouseClick(BotEngine.Motor.MouseButtonIdEnum.Left);
}
}
}
Already done, after some coffe and cigarettes ahahah
I was studying the priority order of targhets.
I saw A-Bot go to order by ewar and then by distance, I want to do the same but between the ewar and the distance I want specificy the ship type order, like:
- Frigates
- Cruiser
- BS
- Others
this is the function to sort the primary:
var listOverviewEntryToAttack =
memoryMeasurement?.WindowOverview?.FirstOrDefault()?.ListView?.Entry?.Where(entry => entry?.MainIcon?.Color?.IsRed() ?? false)
?.OrderBy(entry => bot.AttackPriorityIndex(entry))
?.ThenBy(entry => entry?.DistanceMax ?? int.MaxValue)
?.ToArray();
but I not find how modify it.
The order I want apply is:
First: Ships With Ewar
Second: By ShipType â (from the smallest to the biggest)
Third: By Distance
I have only one idea: read hinttext from overview and sort by it:
As far as I know, hinttext is not yet available, but Viir is working on it.
I studied more the âpriorityâ stuff, and I finded another logical way to do it right now, but I need help.
This is the way:
A-Bot retrieve the âTypeâ column and this is indicixed into array per each entry, the Type of NPC are always the same per class, this mean itâs possible create an array per each type like:
âBlood Raiders Frigateâ
âBlood Raiders Destroyersâ etc
and after order it like with the distance.
I can export easy and fast the full npc shipâs type per each race, but I need a little bit of help on build the function.
Abbadon and I use the different icons as well to differentiate between NPC types, so the hintText would be great, since that allows bots to prioritize targets by type regardless of the rat names.
On this note: is there a reason why the icon is not present in the Overview? I couldnât find it, and it contains a lot of information (type, whether itâs locked, whether itâs yellow/red-boxed you, etc.). If anyone knows where to find this info, it would be a great benefit.
About priority targhet, I found a logical solution, me and another dev are already on working on it, stay tuned lol
I wrote a function for sorting and a small example for a console application.
using System;
using System.Collections.Generic;
using System.Linq;
namespace SortedList
{
class Program
{
public class OverviewEntry
{
public int RowNumber { get; set; }
public string TypeColumn { get; set; }
public int SortedPriorityForTest { get; set; }
}
static string[] configListOfTargets = {
"F","C","BC","BS"
};
static void Main(string[] args)
{
var overview = new OverviewEntry[7]
{
new OverviewEntry { RowNumber = 8, TypeColumn = "BS", SortedPriorityForTest = 3},
new OverviewEntry { RowNumber = 6, TypeColumn = "F" , SortedPriorityForTest = 0},
new OverviewEntry { RowNumber = 5, TypeColumn = "BS", SortedPriorityForTest = 3 },
new OverviewEntry { RowNumber = 9, TypeColumn = "C", SortedPriorityForTest = 1 },
new OverviewEntry { RowNumber = 3, TypeColumn = "BC", SortedPriorityForTest = 2 },
new OverviewEntry { RowNumber = 2, TypeColumn = "F", SortedPriorityForTest = 0 },
new OverviewEntry { RowNumber = 1, TypeColumn = "C", SortedPriorityForTest = 1 }
};
var result = SortByOrder(configListOfTargets, overview, x => x.TypeColumn);
foreach (var s in result)
{
Console.WriteLine(s.SortedPriorityForTest+". row: "+ s.RowNumber + " - " + s.TypeColumn);
}
Console.ReadLine();
}
private static IEnumerable<TO> SortByOrder<T, TO>(T[] order, IEnumerable<TO> objects, Func<TO, T> getter)
{
var ordering = order.Select((x, i) => new { Class = x, Order = i }).ToDictionary(_ => _.Class, _ => _.Order);
return objects.OrderBy(x => ordering[getter(x)]);
}
}
}
configListOfTargets - array of strings with rats name. You can add new parameter for bot.config like SetAnomalyEnabledNamePattern. In this example itâs mean ship type âFâ- frigate, âCâ - cruiser etc.
So youâre assigning type by entering them in bot.config. Cool. You might want to add Destroyer because they are less likely to scram and may be worth differentiating.
As a further idea⌠is the icon the same for all classes of ships ?
if so then we already have a classification in the overviewâŚ
this is purely conjecture I have no inside knowledge whether this holds true apart from my limited tests
Texture0Id?.Id I have been grouping on this and so far I get the same IDâs for battleships,cruisers,and frigates
Parse.IOverviewEntry[] TestRatOverviewEntry => WindowOverview?.ListView?.Entry?.OrderBy(entry => entry?.DistanceMax ?? int.MaxValue)?.ToArray();
var TestRatTarget=TestRatOverviewEntry?.Where(t => t.MainIconIsRed ?? false ).Where(t=> !t.MeTargeted ?? false)?.GroupBy(target => target?.MainIcon?.Texture0Id?.Id)?.ToLookup(x => x.Key, x=> x.ToList());
I am assuming that Texture0ld?.Id is only unique with regards to icons
I have explored in overview and the Stargate Texture0ld?.Ids are equivalent
so It looks like we can classify ships by this⌠Now to code a classification routine using this info;
This would make you able to set priority without having to input each rat name matching string. Sounds much better!
I was study an scenario of Pimary Targhet like a âPlayerâ so this is the scenario where I want go and reach:
The priority targhet is done by some facts: class type and ewar, each race use a different ewar so imagine to be in anomaly, we can give a primary just based on the class like a frigate, and then swtich because another class put on us ewar.
So the best way to determinate a primary to optimize the anomaly run is:
- Kill who put on us EWAR
- Kill who can put on us EWAR
- Kill per class (1. Frigates, 2 destroyers, 3 Cruiser etc) (why per class? because the smallest shit have more possibility to make damage on drones, fighters or track our ship)
Now⌠imagine to be in a capital (what Im working right now) and you want use the special attack, (yeah itâs possible I made the function yesterday) but⌠if the bot use the special attack on a frigate itâs fucking stupid⌠so we need to put the BOT in a condition to understand all thisâŚ
So⌠my logical solution is identify the priority by type name, the class name and type name for the NPC are equal, itâs possible retrieve the full list of NPC type name per race directly from the eve db dump, then with the various NPC reports on internet itâs possible find who of them use EWAR and give more priority then another NPC of the same class but without using ewar⌠and at last can be done a better âcheckâ on the targhet and decide what attack do versus him.
So my solution is Make plus array per class type with priority based on using ewar Example
Blood Raider Frigates{ [Type= Elder Corpii Follower, Priority=1] , [Type= Blood Disciple, Priority=2] , [Type= Corpii Diviner , Priority= 3] }
In this example:
- Elder Corpii Follower â Use scrambler
- Blood Disciple â Use Webs
- Corpii Diviner â Use Tracking Disruptors
This kind of work permit us to optimize the anomaly, have a better choice on the primary preventing the EWAR on us⌠the only âboredâ stuff is export the class types from eve dump and then creates the various array and giving the primary by type o ewar.
But if we done this, will be more effective then reconize by icons or other stuff⌠Yes Im a genious, I know ahahah (I joke)
Sure, to modify the order, add calls to OrderBy
on the sequence of targets.
So your function given to OrderBy
which determines the rank of a given target returns an integer.
In the code you showed, you want to add these calls after the other ordering calls (OrderBy
and ThenBy
) because the last in the code is applied last.
For example, to order by distance, add this line:
?.OrderBy(entry => entry?.DistanceMax ?? int.MaxValue)
Im working on checking if the anomaly is already taken, my idea is to check if overview contains pilot in corp/ally/good standings/excellent standings, using the color backgrounds
something like:
var color = BotEngine.Interface.ColorORGB(0, 282, 389, 492);
var listOverviewEntryFriends =
memoryMeasurement?.WindowOverview?.FirstOrDefault()?.ListView?.Entry?.Where(entry => entry?.ListBackgroundColor == color).ToArray();
But I donât know how to declare the ORGB color into the variable for after apply the filter âwhereâ.
Can you help me on this?
No problem, you can declare it like this:
First, a function to decide friendliness for a given background color:
bool IsFriendBackgroundColor(ColorORGB color) =>
your expression using color to compute friendliness here;
Then you can use it on all background colors of an overview entry and combine the friendliness results for all colors with disjunction.
var listOverviewEntryFriends =
memoryMeasurement?.WindowOverview?.FirstOrDefault()?.ListView?.Entry
?.Where(entry => entry?.ListBackgroundColor?.Any(IsFriendBackgroundColor) ?? false)
?.ToArray();