EVE Online Anomaly Ratting Bot Release

Update February 2020:
The older version originally discussed in this topic does not work with the new 64-bit variant of the EVE Online client.

Find the guide for the new version working with the 64-bit EVE Online client at https://to.botlab.org/guide/app/eve-online-combat-anomaly-bot


Original post about the old version

I recently started to work on an anomaly ratting bot. This bot uses weapon modules and drones to kill rats in anomalies. It automatically warps to the combat sites displayed in the probe scanner. It also monitors local to save your ship when a neutral or hostile appears.

As usual, this bot automatically detects your fitting and needs zero setup to get started.

It is now in a state where it can be used and I will continue to add features and improve performance.

Download executable

You can download the latest release of the anomaly ratting bot from https://github.com/botengine-de/A-Bot/releases

In case you do not see the download link, see this guide:
EVE Online Anomaly Ratting Bot Release - #152 by rh-fred

Have fun and fly save!

+10

Trying this out. Not sure the process its supposed to take and Im new to this system. But a couple of things i noticed off the top.

1 - It HATES when you have a warp distance other than 0 set

2 - It sees the Damage Control module as an active module.

This is what ive noticed so far. My VNI fit wont work with it due to the DCU issue as it just gets stuck in a loop trying to reactivate.

1 Like

Thank you Mast3rs for bringing this to my attention. I have addressed both issues and made some changes to the bot and documentation.

  • The warp distance problem has been solved by a change to the bot, I published a new release at https://github.com/botengine-de/A-Bot/releases
  • To solve the DCU issue, disable the Display Passive Modules option in the ship UI. (I have expanded the guide to include this).
1 Like

Ill give it a try in a little bit here. I noticed you say it scans the fit and judges accordingly. I use a 100MN AB VNI fit. WIll it orbit something upon warp in to negate damage?

So far, there is no maneuvering implemented. This is a very early version thus the combat code consists only of killing all the rats.

The scanning of the fit is already implemented to identify weapons, hardeners, shield boosters and so on.

Can we have the documentation about local settings? for example to default I have my local with the option “show compact member list” and the standings brackets on (So in local I see only the name of char and the icon standing neutral/orange/red/corp member/alliance member/fleet member) with this options the A-Bot is able to indentify the neutrals/enemy?

Can we have the documentation about local settings? for example to default I have my local with the option “show compact member list” and the standings brackets on (So in local I see only the name of char and the icon standing neutral/orange/red/corp member/alliance member/fleet member) with this options the A-Bot is able to indentify the neutrals/enemy?

Yes, it works this way.

1 Like

I must not be as good as I thought I was with C# because by reading the code I have a hard time figuring the way it works. When I understand it, I will try to make it work with carriers too. As well as emergency jumping if hostile lands on grid.I will probably have some questions but more about your C# code than the API. Basically warp at 30. Align safe at 80% speed. Deploy fighters, kill frigs first. Pulse fighter mwd on first attack and when recalling. Pulse the special attack on the battleships. Possibility of dropping mtus / bookmarking them.I’ll see how much time I can put into this and how hard it is. I know the API has everything needed.

Hello bobafett123,

overall, the bot works in steps: Each step the bot receives a measurement and emits a list of movements to execute.

To determine the action to be taken in a step, the code expands the task tree. A task can expand to a list of subtasks or can expand to a motion(action) to be executed. Expansion of a task to subtasks can depend on the sensor data or the bots memory. A simple example for this is the EnableInfoPanelCurrentSystem task: If the info panel is already expanded in the memory measurement, the task does nothing, otherwise it returns a motion to mouseclick on the expander button.

At the moment, only the first (depth first order) motion found in this tree is returned as the action to be taken for the current step.

How should emergency jumping work? Is this meant to use a Micro Jump Drive to increase the distance between the own ship and the new hostile?

Emergency jumping as in jumping to a cyno beacon in range. Would only be used if hostile comes on grid before you enter warp. Could be configured to use it or not since not all systems have cynobeacons in range.

I have a question concerning a part of the code in Bot.cs :

var listTaskPath = new List<IBotTask>();

try
            {
                ConfigSerialAndStruct = input?.ConfigSerial?.String?.DeserializeIfDifferent(ConfigSerialAndStruct) ?? ConfigSerialAndStruct;

MemoryMeasurementAtTime = input?.FromProcessMemoryMeasurement?.MapValue(measurement => measurement?.Parse());

MemoryMeasurementAccu.Accumulate(MemoryMeasurementAtTime);

OverviewMemory.Aggregate(MemoryMeasurementAtTime);

var sequenceTaskPath =
                    ((IBotTask)new BotTask { Component = SequenceRootTask() })?.EnumeratePathToNodeFromTreeDFirst(node => node?.Component)?.Where(path => null != path?.LastOrDefault());

var sequenceTaskPathWithMotion = sequenceTaskPath?.Where(task => null != task?.LastOrDefault()?.Motion);

listTaskPath.Add(sequenceTaskPathWithMotion?.FirstOrDefault());
            }
            catch (Exception e)
            {
                exception = e;
            }

From what I can understand, you’re creating a list of task (listTaskPath), but then you only add one element to it. Why make a list ? And later in there, you read that list using a foreach, even though it can only have 1 element in it.

Unless I am missing something ?

From what I can understand, you’re creating a list of task (listTaskPath), but then you only add one element to it. Why make a list ? And later in there, you read that list using a foreach, even though it can only have 1 element in it.

Unless I am missing something ?

Thanks for reviewing this part.
The list/single element mismatch is because the code which processes the list of output tasks has been added before the code which builds the list. The code which decides if another task from the tree can be added to the list is not implemented yet.

A list is used because there can be multiple elements in one step, for example actions for activating multiple ship modules in one botstep.

Only taking the fist matching task was used as the simplest way of making sure that there will be no undesirable effects by a combination of taks in one botstep.

Since my attention now has been drawn to this function, I improved the code for readability: https://github.com/botengine-de/A-Bot/commit/3ccc8d5d2b55018a5b3e727ecd152ce5ca3594bc

If you let me make a suggestion, I don’t think making multiple actions in one botstep is a good idea. It would make it faster and more efficient but less safe.

One action per botstep also means one local check per action. If you decide to activate 8 modules before checking local again, that is a pretty big loss in reaction time.

I really think safety must be number one priority, over clearing speed and what not.

Now I could be wrong but if I understand what I read so far correctly, the bot is checking for safety before action action he does, and that is what it should keep doing. Please correct me if I’m wrong.

If you let me make a suggestion, I don’t think making multiple actions in one botstep is a good idea. It would make it faster and more efficient but less safe.

One action per botstep also means one local check per action. If you decide to activate 8 modules before checking local again, that is a pretty big loss in reaction time.

I really think safety must be number one priority, over clearing speed and what not.

Now I could be wrong but if I understand what I read so far correctly, the bot is checking for safety before action action he does, and that is what it should keep doing. Please correct me if I’m wrong.

Yes, the bot checks for safety every step. From what I learned from developing and supporting a mission running bot, at least some users want to have the bot activate multiple modules per step. My suggestion is to make it an option to be controlled by the configuration file. This way the user can make the choice without compiling.

I agree with you on that. For missions in high sec the safety check isn’t as important as for anomaly ratting in null sec.

Another option for configuration file: select names of anomalies.

For Drone Lands I need “Drone Horde” and “Drone Patrol”

Now I’ve changed

static public bool AnomalySuitableGeneral(Interface.MemoryStruct.IListEntry scanResult) =>
    scanResult?.CellValueFromColumnHeader(“Group”)?.RegexMatchSuccessIgnoreCase(“combat”) ?? false;

to:

static public bool AnomalySuitableGeneral(Interface.MemoryStruct.IListEntry scanResult) =>
   scanResult?.CellValueFromColumnHeader(“Name”)?.RegexMatchSuccessIgnoreCase(“horde”) ?? false;

Thanks for your work.

Hello, im trying to test the bot, but when i start it , it is just clicking on the sun icon in the top left corner and nothing else … What i am doing wrong ?

@Solonely: I will look into this soon and make a suggestion for a change to the source code to support this.

@thesaltonsea: this button should enable the current system info panel. The bot clicks there when it does not see this info panel. This task has priority over entering anomalies because the info panel is used to navigate to bookmarks.

Can you see the Current System Info Panels Object in the API Explorer of the Sanderling executable?

Maybe localization affects the visibility, therefore I suggest you try to set the UI language to english.

Solonely, I published a change to support the anomaly selection as you requested. You can find it at https://github.com/botengine-de/A-Bot/commit/4f34ab2bfd2f1c987774460be7e3c9c4ccc1eff4

Let me know if that works for you.