Getting information about complexes capturing

Hello everybody!

One more question:

  1. Is it possible to read status of capturing FW-complexes? I mean timer and “captured” message. Now I’m getting “captured” status from Local chat.

If this is contained in a window it might be available already. Where do you see this information in game? Can you show it on a screenshot?

In case the status is not yet available, I probably can expand the API to cover that too. But I might need your help for this.

Complex capturing

Oops. I thought you know all about this game

No, it’s not in a window, but I hope it’s in a available memory even if ship is facing in opposite direction. Timer is starting from 15 or 20 minutes and at the end becomes “Captured”

Thanks.

Complex capturing

Oops. I thought you know all about this game

No, it’s not in a window, but I hope it’s in a available memory even if ship is facing in opposite direction. Timer is starting from 15 or 20 minutes and at the end becomes “Captured”

Thanks.

It is probably also in memory when not visible on screen but the invisible model which holds the data behind the presentation might be more expensive to find and read.

I will take a stab at it (at least the screen label should be easy) but first I need to get some samples. Can you help me with that? You’d need to take two measurements of the game client with my memory reading tool and somehow make them available to me. Such a measurement is typically about 200MB in size since it contains all memory contents.

If you are interested I will upload the tool here.

Sure. I’ll do it with pleasure. This bot engine is the cause of my returning to game after two years break

As I can understand we need to know exact counter value (minutes and seconds) at the measurement moments. We need two or more while capturing and one more measurement when captured.

Reading screen label is nice too but knowing exact time to end is very comfortable and useful for me  AFAIR word “Capturing” disappears after capturing complete.

Correction: Label is static. Always * Capturing.

BTW the fact that compiled from sources version is not working is normal (kind of protection)?

“Interface → license → last Request” server returned http 429 error (too many requests).

I’ve tried two different releases. All is good except license thing (no compile errors and warnings).

1 Like

Sure. I’ll do it with pleasure. This bot engine is the cause of my returning to game after two years break

As I can understand we need to know exact counter value (minutes and seconds) at the measurement moments. We need two or more while capturing and one more measurement when captured.

Reading screen label is nice too but knowing exact time to end is very comfortable and useful for me  AFAIR word “Capturing” disappears after capturing complete.

Correction: Label is static. Always * Capturing.

The measurement might take more than a second so there might be multiple possibilities for the corresponding text in the UI. I usually use a screenshot which is also taken by the tool to decide what to expect in memory.

You are right about the additional measurement when capturing is complete. I don’t know yet if it could make a difference when memory reading.

Please see the guide at http://forum.botlab.org/thread/collecting-samples-for-memory-reading-development

BTW the fact that compiled from sources version is not working is normal (kind of protection)?

Nope, that is not the intended behavior as anyone should be able to use other IDEs such as Visual Studio to develop.

“Interface → license → last Request” server returned http 429 error (too many requests).

I’ve tried two different releases. All is good except license thing (no compile errors and warnings).

Configuration for connecting to the server changed with the last release. You could see this problem when having a config file from the previous version in the directory with the executable.

Another user had a similar issue recently: https://github.com/Arcitectus/Sanderling/issues/3#issue-138971317

Can you make it work with this information?

I had another idea regarding the samples needed here: To increase the chances I find it when offscreen please include a sample when the timer is not on the screen. This should be ideally between the others and all should be in the same grid session (without leaving the grid). I think the one with the completed indication is the least important here. The sequence of samples should be like this:

  • timer visible
  • timer not visible
  • timer visible
  • captured

And one more thing about the cost per sample: adjusting graphics settings and disabling sound could help descrease the memory footprint.

  1. Connection problem was related to changed API-port. Now fixed (removed config-file, opened new port on firewall). Thanks.

  2. 4 measurements done. Sent link via “Private message”.

1 Like
  1. Connection problem was related to changed API-port. Now fixed (removed config-file, opened new port on firewall). Thanks.

  2. 4 measurements done. Sent link via “Private message”.

Thank you, I have loaded the measurements to my hdd and will search them for the information next week.

Thank you for the support, adding the reading code was straightforward using the samples you provided.

I found the labels in the UI tree and judging by the sample “Measurement2.zip” (which does not show the timer on the screenshot) this information is also available when it is not on screen.

The release v16.03.04 adds support for reading the labels in this “InSpaceBracket” as it is called by CCP:

You can get the references to all brackets from the new “InflightBracket” property on the MemoryMeasurement. In the complex capture bracket in the samples, there are two labels, one containing the timer text and one containing the text “Minmatar Republic Capturing”.

I added the method “SecondCountFromBracketTimerText” to make parsing the timer text simple.

To extract the remaining capture time, I would try this:

bool IsCapture(IInSpaceBracket bracket)    =>
     bracket?.LabelText?.Any(label => label.Text?.RegexMatchSuccessIgnoreCase("capturing") ?? false)    ?? false;

int? CaptureTimeRemaining(IInSpaceBracket bracket)
{
     var    secondCount    = bracket?.LabelText?.Select(label => label.Text.SecondCountFromBracketTimerText())?.WhereNotDefault()?.FirstOrDefault();

          if(secondCount.HasValue)
         return secondCount;

      if(bracket?.LabelText?.Any(label => label.Text?.RegexMatchSuccessIgnoreCase("Captured") ?? false) ?? false)
         return    0;

      return null;
 }

  int? captureTimeRemaining    =>
     CaptureTimeRemaining(Sanderling.MemoryMeasurementParsed.Value.InflightBracket?.FirstOrDefault(IsCapture));