EVE Online Anomaly Ratting Bot Release

@Viir For me the memory measurement (last measruement unter Interface) does not work. The bot seems to be unable to read the memory. Any ideas?

@marquies, thanks I will take a closer look.

@marquies, I applied a fix for the memory reading and uploaded a new binary. You can find it at Release release v17.05.03 ¡ botengine-de/A-Bot ¡ GitHub

1 Like

Ok so I downloaded this … How do I make it work? Do I have to run Eve manually?!? Total newb

Edit: Sorted it out! Readme.txt is king!

Hello again all!

So, still a bit confused … Bot isn’t doing very much or anything … It activated my hardeners when I namually warped between gates, nothing else.

Bot seems to be doing nothing at all and i am unsure if I’m missing something in the client that I need to do?

I currently have this showing in the Bot [Pause]|[Play] tab:

0 s ago at 17:49:59

Diagnostic: “warning: no configuration supplied.”(BotTask->BotTask->DiagnosticTask)
Diagnostic: “no suitable anomaly found. waiting for anomaly to appear.”(BotTask->AnomalyEnter->DiagnosticTask)

Any tips? :slight_smile:

Yes, according to the message from the bot, it is waiting for an anomaly to appear. That bot is for anomaly ratting. No anomalies → no activity.

There was 8 open sites - some dens and something else i forget. Only 2 probe sites

Hi Viir/all…
The bot seems great. Been trying to make a few changes to it to simulate different actions the way I make them when ratting as opposed to the way the bot does them currently. I have been trying to get the bot to Lock with Left Control and left mouse click… But it doesn’t seem to move the mouse and left click.
The code is in Combat.cs and is below. (I wrote it one way and it didn’'t work then I found your example above so tried that also and that didn’t work either.

           if (null != overviewEntryLockTarget && !(TargetCountMax <= memoryMeasurement?.Target?.Length))
           {
                    var lockTargetKeyCode = WindowsInput.Native.VirtualKeyCode.LCONTROL;

                    yield return new BotTask
                    {
                       Component = new[]
                        {
                             MotionParamExtension.KeyDown(lockTargetKeyCode),
                             overviewEntryLockTarget.MouseClick(MouseButtonIdEnum.Left),
                             MotionParamExtension.KeyUp(lockTargetKeyCode)
                        }
                        .Select(motion => new BotTask { Motion = motion })
                    };
                    //yield return overviewEntryLockTarget.ClickMenuEntryByRegexPattern(bot, @"^lock\s*target");
                }

The KeyDown LControl works. But it seems to hang on the overviewEntryLockTarget.MouseClick(MouseButtonIdEnum.Left), as soon as I manually target the rats it continues through the code… Launching drones etc. But it never gets to MotionParamExtension.KeyUp(lockTargetKeyCode) and constantly holds down LControl.
Any help would be greatly appreciated :slight_smile:

Lets take a closer look at this:
How long does it take to execute this statement when you step over it in the Visual Studio Debugger? What execution time is shown in Visual Studio for this statement?

Sorry maybe its my poor words. Its doesn’t hang as opposed to it never does the last 2 part of the task. So basically when its executed Left Control is permanently held down. It never moves the mouse or gets to MotionParamExtension.KeyUp(lockTargetKeyCode) . If I manually press Left Control then it releases it, but then it cycles back through the code and presses Left Control again. But it does cycle through the rest of the tasks and launch drones etc.

Could it be that you need to state for it to ‘leftcontroldown/up’ or on/off whatever? It’s been a LONG time since i did coding but seem to remember there’s a down/press/up/release command?

So this is what I did in the end. I have put some if statements in and it works.

But I tried to get an array on components using new BotTask but it never goes past the first action.

Viir, am I doing something wrong regards to how I am using it in the above example. Honestly its been a good good while since I programmed and I am super rusty. All help would be greatly appreciated. TIA

Maybe you experience a scenario like this: The portion of the program which takes a subsequence of actions from the task tree expansion to execute for the current step does only take one of the actions.

At the moment I do not see this scenario ruled out.

The text which is displayed in the Bot Tab in the UI should reflect the actions taken, so lets have a look at this text next to see if all the actions are making it that far.

1 s ago at 12:59:30

Diagnostic: “warning: no configuration supplied.”(BotTask->BotTask->DiagnosticTask)
Motion(BotTask->CombatTask->BotTask->BotTask

I honestly can’t work out why it won’t take the array of Components and put them into the task list…

But then I am honestly really really rough on programming :slight_smile:

Good, with this info I see something I can improve in the UI code.

The bot output you posted looks like we have indeed the scenario described earlier.

The current implementation is based on the assumption that executing all the actions from the tree in without obtaining new measurement in between is not the best thing to do for all cases.

I do not remember such a case at the moment but there is simple way to test this for exactly your use cases:
Remove the call to TakeSubsequenceWhileUnwantedInferenceRuledOut in the following line of code:

?.TakeSubsequenceWhileUnwantedInferenceRuledOut();

This should make the bot take all the actions from the task tree for execution in one step, so the text output in the UI should then include more lines.

Does this work for you?

That worked. Thank you so much Viir :slight_smile:
It does try to do other things now in between each target it locks so I added additional checks. (For example it trys to launch drones and engage multiple times within like 2 secs while flicking and locking up targets)

So this looks like we will still need to make a distinction to not in all cases take all actions from the tree to execute in one step.

Next idea I want to try is to add a container for a sequence of actions to be considered atomic by TakeSubsequenceWhileUnwantedInferenceRuledOut.

I will take a look at the source for how to do this.

If I could pick your brains with another problem as well… :slight_smile:
Basically I wanted to do a Belt Ratting mode as well… Which would warp to each belt in system, Kill all the rats then warp onto next belt. But I can’t figure out a way I could add warp to all the belts as a series of tasks. I wanted to create an array of tasks based on the overview. So put asteroid belts on overview, then warp to it, kill all rats, warp to next etc and basically loop round.
But I am struggling to find a way to add all the tasks in one go or to keep a track of which was the last belt I visited etc…

TIA :slight_smile:

@SavingPeople, I updated the IBotTask to support modeling an atomic sequence of actions to be applied in one step: Enable modeling atomic sequence of effects to applied in one step. ¡ botengine-de/A-Bot@70797f8 ¡ GitHub

You can use it like this:

yield return new BotTask
{
	Effects = new[]
	{
		MotionParamExtension.KeyDown(lockTargetKeyCode),
		overviewEntryLockTarget.MouseClick(MouseButtonIdEnum.Left),
		MotionParamExtension.KeyUp(lockTargetKeyCode)
	}
};

Thank you Viir really appreciate it