EVE Online Anomaly Ratting Bot Release

So i use it 5-6h with Ishtar and 5-6h with tengu, work nice with the current options

Another important thing like the shield booster is to call the drones back when neut/red enters the system and the ship warp to the bookmark. Maybe with the option to set the duration that the ship to wait for drones before warping in the bot.config

Report from testing last version:

  1. If drone bandwidth allow launch only 2 drones (Rattlesnake, Gila) bot will be launch drones again and again.

  2. when i test escape from neutrals, bot click on “sun” for main menu and then i have ArgumentNullException.

My Bot.config file have RetratBookmark “HOME” and the same bookmark have my pilot (look first screenshot).

And the same time ModuleActivePermanentSetTitlePattern option work fine.

One step before exception.

  1. Is property “bool? IsAfterburner { get; }” from  “MemoryMeasurementAccu?.ShipUiModule?.TooltipLast?.Value” work fine?

Because when i try identify module this property allways null (unlike “IsArmorRepairer” work fine for other module).

Thank you Terpla for sharing that information.

1) Do we get some info from the eve UI about this limitation? If this information is on screen maybe we can store that to replace the “5” literal at the code location you linked.

  1. One thing that caught my attention here is that the config file you linked contains no comma between the two attributes. I did not expect this to be parsed at all. Judging from the screenshot http://clip2net.com/s/3D4a2aw you linked, it looks like the property for the bookmark is not parsed from the config file. I will test with this file.

  2. The classification should happen in the code of the sanderling project. For example, the “IsArmorRepairer” you mentioned is being assigned at https://github.com/Arcitectus/Sanderling/blob/4d3c94f3c51ab6b714e76837fcc900090f00b454/src/Sanderling/Sanderling/Parse/ModuleButtonTooltip.cs#L158

Looks like there is no parsing code for IsAfterburner yet.

Hey Terpla,

when I tested with the config file you linked, the parsing function failed with this error:

"After parsing a value an unexpected character was encountered: “. Path ‘RetreatBookmark’, line 4, position 2.”

I changed the app to display any parsing exceptions in the UI so you do not anymore need to use a debugger to see this error:

A-Bot new diagnostic message for configuration parsing exceptions

https://github.com/botengine-de/A-Bot/commit/db7823a95a94e2d70821b8008628165df198ba78

Thank you for quick response.

  1. As i know we dont have any clear indication of drone limit. The only thing that came to mind is to catch message: http://clip2net.com/s/3D5uqSQ

  2. Are there universal rules for this config file? Perhaps you could provide an example for illustration.

I will try different variations in the evening and report the results.

  1. I think add parsing code will not be difficult, because all the modules are in the word “Afterburner” title
  1. Are there universal rules for this config file? Perhaps you could provide an example for illustration.

I will try different variations in the evening and report the results.

No need to try different variations. One universal rule is that the configuration has to be a valid JSON string. So I googled for “json validator” and found the one at http://jsonlint.com/ which gives a nicer explanation of what would be expected at the stated location in the string:

Error: Parse error on line 2:
...ookmark": "HOME"		"ModuleActivePermane...
---------------------^
Expecting 'EOF', '}', ':', ',', ']', got 'STRING'

Adding a comma at the location was enough to make it pass as JSON.

  1. I think add parsing code will not be difficult, because all the modules are in the word “Afterburner” title

Thank you for the research. I think at the moment there is no code to identify a title. Using the upmost label in the tooltip as the title might not work because the one containing the keyboard shortcut could be closer to the top. Not sure yet how I will choose the set of labels to test.

Thx for clarification and this site. Now .config file works fine.

  1. I found new bug. Bot retreat when see pilot from my alliance. Blue icon in this image.

I reset overview before test it.

Thx for clarification and this site. Now .config file works fine.

  1. I found new bug. Bot retreat when see pilot from my alliance. Blue icon in this image.

I reset overview before test it.

Thanks for the report. The bot uses the hint text on the Icon to decide whether the chat participant should be classified as neutral or enemy. The hint text is the text which appears when you hover your mouse over. So to adjust the bot we need to know the hint text for this case.

The classification for an individual entry in the list of chat participants is encoded at https://github.com/botengine-de/A-Bot/blob/e5ebb1d1b27e4104a224f72e06026009e2fe7064/src/Sanderling.ABot/Parse/ParseExtension.cs#L35-L38

I implemented the parsing improvements: https://github.com/Arcitectus/Sanderling/commit/2f9ca56b158f491d2c4621f14aff9ed8c92f4381

I implemented the parsing improvements: https://github.com/Arcitectus/Sanderling/commit/2f9ca56b158f491d2c4621f14aff9ed8c92f4381

As i understand bot will be activate only modules with classification, such as “Hardeners” or “Afterburners”.

Is it possible to add this feachure for “Tracking computes” and “Omnidirectional tracking link”?

@Terpla you can add modules to keep activated using the ModuleActivePermanentSetTitlePattern property in the configuration. It takes a JSON array of strings. Each string is used as a regular epression pattern to test the modules title with. If any of the pattern matches, the module is activated.

Try this as configuration:

{ "ModuleActivePermanentSetTitlePattern": ["Tracking"]}

Its not working. =(
My С# skills are not enough to understand this: https://github.com/botengine-de/A-Bot/blob/master/src/Sanderling.ABot/Bot/BotExtension.cs#L49-L56
but as i understand it is two conditions: IsHardener OR “Title of module contains this string”.
When your variant was not worked i try next config:

{
"RetreatBookmark" : "Home",
"ModuleActivePermanentSetTitlePattern": ["Networked Sensor Array",
"Capital Armor Repairer I"]
}

Its not working too, but all this modules fited and bot see it.


and:
When I replaced the "IsHardener " to “IsArmorRepairer” then bot activate “Capital Armor Repairer I”.

So I came to the conclusion that the error lies here.

1 Like

Yes, you are right, your configuration seems OK from what I can see.

Yes, that was the intention how it should work.

The second screenshot you posted gives a hint of what could be the problem:
In there, I see that there are three labels in the LabelText property. The TitleElementText method should pick the one which represents the title, but seeing this, I am not sure if it works correctly in your case. As you can see at https://github.com/botengine-de/A-Bot/blob/e5ebb1d1b27e4104a224f72e06026009e2fe7064/src/Sanderling.ABot/Bot/BotExtension.cs#L47, it picks one of the labels which have their center not lower than any other label in this collection.
Maybe in your case there is a label which is not below the title label. If that is the bug, two possible resolutions come to mind:

  • We could make the TitleElementText smarter in some way (considering width?, compare text length with other labels?)
  • We could stop depending on the title and instead introduce another config setting ModuleActivePermanentSetLabelPattern to be compared with all labels in the module tooltip.

I guess with “here” you mean the whole method and everything that is called from there? In this case I understand.

Yes, whole method.

If TitleElementText should get module label, its seems not working. Instead it gets hot key:

PS: i dont undestand why picture so bad resolution

ok PNG much better

I now changed the TitleElementText method to only consider those labels which intersect with the horizontal center of the tooltip. You can see the implementation at https://github.com/botengine-de/A-Bot/commit/a10d626c21a102431b874f2e86fa74e3a661172f

Does this work for you?

1 Like

Yes, now it work fine. Thx for quick fix.

I want to clarify the logic and the difference between Component and Motion
As i understand Motion is something simple and final action. This should not take long time because the locale is not checked.
Component is more complicated and often it contains subtasks.
Soo if my Component logic needs something simple as mousclick or expand menu I should return new subtask with this simple Motion.
This is the right solution, or I missed something?

PS: can you cancel reply limits, because i cant post anymore and must wait 3 hours :cry:

The “Motion” parts describe what effects should be applied to the eve online client. Seeing this, I am inclined to use the label “Effect” instead of “Motion” for these symbols in the future.

I don’t know what you are comparing to here.

No idea what locale checking means and how it would effect duration. Do you mean client localization settings?

Reading this, I am not sure what Component you are writing about. I open up the source code and search for “Component”. So, a task has components. This relation is used to decompose the root task (“make ISK” or something like that) into simpler tasks. This decomposition forms a tree, and its leaf nodes are stuff that is simple enough to be sent to the eve online client as an effect/motion or to the user (diagnostic messages).
This task tree is built up for each bot step as the decomposition of a given task can depend on the input from the sensor.

Yes, I think it can work this way. I do not see a problem with this approach.
In addition to that, every task that needs more effects for completion than can be modeled on a single instance of MotionParam should be decomposed into multiple tasks.

The article “the” reads like there is only this one, but I don’t see why there shouldn’t be others.

I assigned you the next trust level, thus you should now be able to write more posts without this limit.

I’m obviously doing something wrong, i keep getting the following error :

3 s ago at 6:48:43 PM
---- Exception ----
System.ArgumentNullException: Value cannot be null.
Parameter name: pattern
   at System.Text.RegularExpressions.Regex..ctor(String pattern, RegexOptions options, TimeSpan matchTimeout, Boolean useCache)
   at System.Text.RegularExpressions.Regex.Match(String input, String pattern, RegexOptions options)
   at BotEngine.Common.RegexExtension.RegexMatchSuccess(String input, String regexPattern, RegexOptions regexOptions)
   at BotEngine.Common.RegexExtension.RegexMatchSuccessIgnoreCase(String input, String regexPattern, RegexOptions regexOptions)
   at Sanderling.ABot.Bot.Task.MenuPathTask.<>c__DisplayClass7_2.<get_Motion>b__1(IMenuEntry c) in C:\Users\John\Source\Repos\A-Bot\src\Sanderling.ABot\Bot\Task\Menu.cs:line 81
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at Sanderling.ABot.Bot.Task.MenuPathTask.<>c__DisplayClass7_1.<get_Motion>b__0(String priorityEntryRegexPattern) in C:\Users\John\Source\Repos\A-Bot\src\Sanderling.ABot\Bot\Task\Menu.cs:line 80
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
   at Sanderling.ABot.Bot.Task.MenuPathTask.get_Motion() in C:\Users\John\Source\Repos\A-Bot\src\Sanderling.ABot\Bot\Task\Menu.cs:line 77
   at Sanderling.ABot.Bot.BotExtension.ShouldBeIncludedInStepOutput(IBotTask task) in C:\Users\John\Source\Repos\A-Bot\src\Sanderling.ABot\Bot\BotExtension.cs:line 35
   at Sanderling.ABot.Bot.Bot.<>c.<StepOutputListTaskPath>b__25_1(IBotTask[] taskPath) in C:\Users\John\Source\Repos\A-Bot\src\Sanderling.ABot\Bot\Bot.cs:line 54
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at Sanderling.ABot.EnumerableExtension.<EnumerateSubsequencesStartingWithFirstElement>d__0`1.MoveNext() in C:\Users\John\Source\Repos\A-Bot\src\Sanderling.ABot\EnumerableExtension.cs:line 12
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__1.MoveNext()
   at System.Linq.Enumerable.LastOrDefault[TSource](IEnumerable`1 source)
   at Sanderling.ABot.Bot.BotExtension.TakeSubsequenceWhileUnwantedInferenceRuledOut(IEnumerable`1 listTaskPath) in C:\Users\John\Source\Repos\A-Bot\src\Sanderling.ABot\Bot\BotExtension.cs:line 41
   at Sanderling.ABot.Bot.Bot.StepOutputListTaskPath() in C:\Users\John\Source\Repos\A-Bot\src\Sanderling.ABot\Bot\Bot.cs:line 52
   at Sanderling.ABot.Bot.Bot.Step(BotStepInput input) in C:\Users\John\Source\Repos\A-Bot\src\Sanderling.ABot\Bot\Bot.cs:line 97

I didn’t think I had to create a config, is that nolonger true ?

Edit :

It is nolonger true that you can run without a config file.
If anyone else comes accross this, you will need to create the file “bot.config” containing atleast

{
    "RetreatBookmark" : "SAFE"
}

Where “SAFE” is the name of a bookmark in your current system that you can dock at. The code currently appears to look specifically for the ability to dock, which means warping to a POS won’t work out of the box.

1 Like

You have tested this version?
When I used the bot was warp to POS too.