Mining Bot Question and Hints

Hello,

first, thanks for the good work at the botengine.

The last two days i test und probe with the mining bot, modded for the drone operation (drone defense function).
I am a ELM beginner, okay i start the last two days.

i found somethings that is not perfekt:

  1. in the combat defense, the ship approach to the enemy, with a mining barge a terrible
    Why?
    The Mining Barge is very slow and is the hole time approach behind the enemy, i change it in that way, that the target lock range, increased to 25000 meters.
    if the enemy not in that range, i change it to “EndDecissionPath Wait” in the else branch from “acquireLockedTargetForCombat” an wait that the NPC came to my range.

  2. heading to an astroid, the bot is the hole time “Approach” clicking, in my eyes is better to record the approach click, and send the bot in a wait loop. Sometimes if i join the Belt and NPC are in, the bot dont see the NPC until he reached the Astroid.

  3. if the ship reached the target range, it will be usefull to stop the ship, but at the moment i didnt found the send command for shortcuts. in Eve is the shortcut to stop ship

  4. i added a function for get the distanceinmeters as a value and show it in the bot message DescribeBranch one for debug one to have a better overview to find out if i am right.

some ideas to realize are for me hard, to think the new way around ELM for me.

I hope you have some hints for me to help to realize my ideas

what i added and change

distanceToTarget : OverviewWindowEntry -> Maybe Int

distanceToTarget =

    .distanceInMeters >> Result.toMaybe

acquireLockedTargetForCombat overviewEntry =

    let

        compareDistance : Int

        compareDistance = Maybe.withDefault 0 (overviewEntry |> distanceToTarget)

    in

    {- if overviewEntry |> overviewWindowEntryIsInCombatRange |> Maybe.withDefault False then -}

    if compareDistance < 25000 then

        DescribeBranch ("Overview entry is in range. Lock target. Target Distance :" ++ (overviewEntry |> distanceToTarget |> Maybe.map String.fromInt |> Maybe.withDefault "Unknown"))

            (EndDecisionPath
1 Like

Welcome, and thank you very much for sharing these improvements!

Because the bot was programmed based on the description at First timer, mining bot question!
That information about mining barges was not available then.

Here is a version adapted to your observations:

No problem, that wait loop is implemented here:

We can do this using the KeyDown and KeyUp options. Here is the complete bot with the ship stop command:

This is the part building the action:

stopShipAction : TreeLeafAct
stopShipAction =
    { firstAction = VolatileHostInterface.KeyDown VolatileHostInterface.VK_CONTROL
    , followingSteps =
        [ ( "SPACE down", always (Just (VolatileHostInterface.KeyDown (VolatileHostInterface.VirtualKeyCodeFromInt 0x20))) )
        , ( "SPACE up", always (Just (VolatileHostInterface.KeyUp (VolatileHostInterface.VirtualKeyCodeFromInt 0x20))) )
        , ( "CTRL up", always (Just (VolatileHostInterface.KeyUp VolatileHostInterface.VK_CONTROL)) )
        ]
    }

McMahon recently made an observation leading to a similar change. This also displays the distance of the chosen overview entry:

Thx for the fast response, i will show it tomorrow.
I have some more Ideas, but my programmer heart will first try ist self and then share it here.
I hope in functional programmed way!

1 Like

Hello,
One Example as i mining Solo, i use the Procurer as a heavy tank fit.
As in this way i sort my Modules Rows as in the Picture shown.

mining-UI-Build

in combination with the combat / defense Mode it will be a improvement if the rows work in other ways.

row 1) Mining fitting
row 2) Manual fitting to activate
row 3) Defense fitting

for example, if the shild reach the defense value and the drones Activated, it is usefull,
to activate the Defense Modules in row 3.
The Modules need a lot of energy, if there is a threshold for min energy need, i dont know, i must test!
it give you more time, to warp out.

its something to discuss, one way as i play it.

I added the activation of the defense modules here:
https://github.com/Viir/bots/commit/5543996fb1b246d84b75252a6b638325a958ac9d

For the new module activation, I used the existing implementation for the mining modules, the only difference is that it takes the modules from another row.
I added this into the defense function. (Which is named combat on that branch. Maybe using the name defense for this function would be better :thinking:).

WoooW, your are faster as i have time to test.
i can agree with you that the name is more usefull to switch combat to defense, at this point

Guten Morgen,
heute Nacht hatte ich versucht die Combat / Defense Function in die neue Bot Version mit dem Context einzubauen.
Aktuell da ich mit ELM noch nicht per Du bin wirklich, ist das mehr Try and Error.
Was mir dabei aufgefallen ist, es wird schnell unübersichtlich.

Meiner Meinung nach würde es Sinn machen die Bot.elm etwas auf zu räumen und in ein neues Muster zu gießen.

Mein Vorschlag wäre wie folgt:

Improvement

Man würde z.B die Ordner Bot und Bot.Modules zusätzlich erstellen,
in den Ordner Bot, würde man die Hilfsfunktionen bzw. Hauptdefinition in mehreren Dateien ablegen und diese wieder importieren.
Damit würde man eine klarer Struktur erreichen.
in dem Ordner Bot.Modules würde man die Defintionen für z.b. Combat / Defense in separaten Dateien ablegen.
Durch die Ablage der Hauptdefinitionen im Ordner Bot könnte man diese doch auch wieder importieren, graue Theorie, weil ich das Import handling noch nicht genau angeschaut habe.
So könnte man meiner Meinung mehr Struktur hereinbringen und neue Funktionen klarer und einfacher strukturieren.

Ich komme darauf, weil du hattest die neue Demo von Mining raus gebracht und ich hatte die Anpassungen aus meinen ersten Ideen noch nicht getestet und saß da jetzt vor der veränderten Struktur mit 2x Visual Studio Code links und rechts und versucht die Unterschiede zu finden und einzubauen.
:slight_smile: Sitze immer noch da :slight_smile:

2x Visual Studio Code aufmachen ist nicht notwendig. Man kann die Unterschiede in der Diff Ansicht anschauen:

Für das Einbauen: Gibt es ein Problem wenn du die Änderungen per git cherry-pick einbaust?

Ich habe gestern geschaut was ich machen kann, ein merge wäre eigentlich das einfachste, ist aber nur als Owner möglich.
Daher werde ich mal schauen wie ich das mit Git cherry pick machen kann.

andere Möglichkeit wäre die Anforderung eines Pull Request

grafik

Hallo,
ich habe jetzt über das Branchen und Cherry Pick versucht zusammen zuführen.
leider durch die Einführung des Botcontext, ist es so gut qie unmöglich es zusammen zuführen.
Ich werde noch mal neu probieren die Defense / Combat Funktion zu integrieren.

Früher oder später werde ich auch dazu kommen die defense Funktion manuel auf der neuesten Version vom Mining bot aufzusetzen.

1 Like

Hallo,
ich habe den Bot heute mal über den Tag laufen lassen nach etwa 5h muss ich die PowerShellsConsole neustarten.
Nach ein paar Stunden ist die BotEngine bei über 5GB ein Speicher und die Ausführungsgeschwindigkeit lässt dann auch drastisch nach.
Gut ist ein Laptop mit 8GB RAM.
Aber 5GB finde ich dann für die BotEngine doch zu viel.

Memory-Leak-Problem

Nach einem Neustart des PowerShell Console:

nach-Neustart-PowerShell-Console .

Danke für den Hinweis, ich werde schauen wie man das vermeiden kann.

Habe gerade eine Änderung eingebaut um das Problem mit der Speicherbelegung zu lösen.

Die neue version vom Mining bot: bots/implement/applications/eve-online/eve-online-mining-bot at 25f068239b2bcb0ebaf67981a7d98ebbfcc70725 · Viir/bots · GitHub

1 Like

Die Test bisher waren gut, nicht über 400MB geklettert.

1 Like

@TheRealManiac es sind kürzlich ein paar neue Ideen aufgetaucht bezüglich Defense Funktion. Was hälst du von folgender Variante?

  • Verzicht auf angreifen der Rats. Stattdessen Instruktion an den Anwender die Dronen so einzustellen das diese selbsständig angreifen falls der Spieler angegriffen wird.
  • Verzicht auf Lock Target auf Rats.
  • Verzicht auf Approach auf Rats.

Ich dachte das würde die Defense Funktion vereinfachen und damit einfacher Verständlich.

Die Idee dahinter ist folgendes zu vereinfachen:

Hallo,

ich war die letzten tage mit Moon Mining beschäftigt, eine Abwechslung zum Astroid Mining.
Hatte den Vorteil das man sich gedanken machen konnte.

Da ich selber Software Entwickler bin, kenne ich das natürlich, Kunde: Feature, Feature, Feature, Idee, Idee, Idee.
Dazu habe ich mich mal hingesetzt und habe den Mining Bot aus dem Master Branch genommen und versucht die Einstellungen in Eve so anzupassen, das der Bot stabil läuft und mir das gewünschte Ergebnis liefert.
Dazu, Corona und HomeOffice sei dank, habe ich den Bot und sein verhalten auf dem 2ten Monitor beobachtet.

  1. Settings → Automatische Zielaufschaltung abschalten!
    grafik

  2. NPC aus der Mining Settings entfernen
    grafik

  3. Dronen Standard einstellung bei mir → Agressiv → Focus Fire
    grafik

  • Verzicht auf angreifen der Rats. Stattdessen Instruktion an den Anwender die Dronen so einzustellen das diese selbsständig angreifen falls der Spieler angegriffen wird.

Bemerkung:
Ich habe da jetzt nichts eingestellt, meine Beobachtung ist die, wenn man aufgeschaltet wird, auch von den Rats, dann greifen die Dronen selbstständig an.
Dazu wäre es gut, wie folgt vor zu gehen:
prüfen ob Astroid verfügbar?
nein → nächstes Belt anfliegen
ja → Dronen starten → Astroid Lock Target → Aproach (nur 1x anklicken)

  • Verzicht auf Lock Target auf Rats.

Bemerkung:
Habe ich erreicht, dadurch das ich die aus der Overview genommen habe, weil es hin und wieder passiert das die selektiert wurden. Was dann passiert wenn man ein falsches Objekt anspricht ist dieses

Problem-Target

Danach geht es nicht weiter bis man das Fenster weg geklicked hat.
Hier sollte der Bot eventuell prüfen ob das Fenster auftritt, weil die ganze Oberfläche ist damit gesperrt,
unbeobachtet, endet das beim Verlust des Schiffes.

  • Verzicht auf Approach auf Rats.

Bemerkung:
Das hatte ich in einer meiner ersten Defense funktionen schon relativ einfach erledigt, weil ich die Locktarget auf 25km / 25000m gesetzt hatte.

Meiner Meinung nach wäre es besser die Settings anzu passen und das vorgehen wie folgt zu machen:
Zusammenfassung:

prüfen ob Astroid verfügbar?
nein → nächstes Belt anfliegen
ja → Dronen starten → Astroid Lock Target → Aproach (nur 1x anklicken, mehrfach wäre dann auch egal)

Treashold Shield

Blood Raider Upholder, Collector, etc. sind Shield technisch bei meiner Tanky Procurer kein Problem.
Bei Raznabork Damavik da sind 50% in Warp gehen echt kritisch, hier müsste man bei min 75% Schield, runaway sagen.
Erkennung der Schiffe würde ich abraten, unnötiger aufwand!
76% Shield → dronen to Bay → runaway by 75%

Ore Hold full:
Dronen draußen → drone back to bay → Warp Station
Hier hätte ich noch einen Hinweis:

Meiner Meinung nach würde der Bot in dieser Weise im Mining mehr als Perfekt funktionieren.
Das wäre zu perfekt und erkennbar.
Für den Frachtraum füllung sollte man einen Wert angeben, z.b 99%
aber unbedingt 99 - 5 = Range von 94% - 99% als ein Rand 95 99 beim betreten des Belts ermitteln,
damit bekommt der Bot eine etwas fiktivere Menschliche Handlungsweise.

Gleiches wäre eventuell bei Shield Treshold etc. angebracht 75% ± 5% also Bereich vn 70% - 80%
wann der Runaway ausgelöst wird.

Ich hoffe ich habe nichts vergessen.

Danke für die Erläuterungen.

Könnte man diesen Schritt auslassen indem man den Bot die Targets unterscheiden lässt?
Kann man den unlock Kontextmenueintrag nutzen um solche Targets wieder loszuwerden? Wenn das ausreicht, dann könnte der Bot das ja selbst erledigen.

Durchaus möglich, habe keine aktuellen Beobachtungen hierzu. Der Punkt kam nur daher das ich in Erinnerung hatte das es von Einstellungen abhängt.

Haben wir schon ein Beispiel Memory Reading für dieses Szenario? Die Anpassung des Bot ist dann warscheinlich eher trivial.
Wo kann man klicken um dieses Fenster weg zu bekommen?

Das schaut ja sehr gut aus. Das wäre erheblich einfacher als der bisherige Ansatz.
Gegenüber dem bisherigen Ansatz könnten wir damit einiges an Programmcode entfernen:

Schaut so aus als würde die Komplexität der Defense Funktion damit auf ein Bruchteil reduziert. Vermute das Ergebnis ist dann gut genug für den Master Branch.

Wie würde das in der Anleitung für den Nutzer beschrieben? Was passiert mit dem bisherigen setting run-away-shield-hitpoints-threshold-percent für den Threshold? Würde das dann geändert?

Man könnte es wie bei anderen Apps machen und den Nutzer die Wahl lassen ob er einen festen Threshold oder eine Range haben will:

Dann könnte der Nutzer 70 - 80 wählen um diesen Effekt zu erzielen.

Könnte man diesen Schritt auslassen indem man den Bot die Targets unterscheiden lässt?
Kann man den unlock Kontextmenueintrag nutzen um solche Targets wieder loszuwerden? Wenn das ausreicht, dann könnte der Bot das ja selbst erledigen.

Ein großes Problem ist, wenn man in das Belt fliegt und schon Rats da sind. Der Bot locked den Astroiden und dann Aproach, Aproach, Aproach, Aproach, immer wieder bis er die min Reichweite erreicht hat und macht dann weiter.

Insgesamt ist es einfacher wenn man es abschaltet.

Haben wir schon ein Beispiel Memory Reading für dieses Szenario? Die Anpassung des Bot ist dann warscheinlich eher trivial.
Wo kann man klicken um dieses Fenster weg zu bekommen?

Es gibt einen Ok Button unten den man anklicken kann, es ist ein Info Fenster aber Modal über das ganze Window. Ich habe in den Training Datas keine Beispiele gefunden.
ich werde schauen das ich das gleich eine Meldung hin bekomme.

Wie würde das in der Anleitung für den Nutzer beschrieben? Was passiert mit dem bisherigen setting run-away-shield-hitpoints-threshold-percent für den Threshold? Würde das dann geändert?

Man könnte es wie bei anderen Apps machen und den Nutzer die Wahl lassen ob er einen festen Threshold oder eine Range haben will:

das würde ich nicht machen, ich würde sagen es muss eine Zufalls Zahl in dem Breich durch den Bot ermittelt werden. Die Range ist festgelegt auf ±5 damit sind mögliche Min 5 oder max 95 zb für Prozent
Das Problem ist: EvE und Co. loggen alles, auch das Mining und die Menge wird gelogt.

grafik

Man muss die Arbeit an dem Bot einfach vor der Gier der Nutzer schützen!
Sorry klingt hart, aber spreche aus Erfahrung aus frühreren Zeiten, mit anderen Games!

Zusammenfassung:

prüfen ob Astroid verfügbar?
nein -> nächstes Belt anfliegen
ja -> Dronen starten -> Astroid Lock Target -> Aproach (nur 1x anklicken, mehrfach wäre dann auch egal)

Astroid weg → nächsten auswählen
Ore Hold Full → dronen back to bay → Warp Station
→ und wieder von vorne

Also wenn ich in ein Belt fliege, mache ich per Hand eigentlich nichts anderes.
Genau dieses vorgehen.

Aktuell habe ich z.b. in der View eingeschränkt was ich sammeln möchte an Erzen:
grafik

Fertig, darüber kann man den Bot steuern!
Man braucht keine extra Settings im Bot!

Nice to have, bläht die Programmierung und Konfiguration unnötig auf!