1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Bot für MMO programmieren, Schritt für Schritt

Dieses Thema im Forum "Support & Discussion" wurde erstellt von PierreDole, 25. Juli 2017.

  1. PierreDole

    PierreDole New Member

    Registriert seit:
    25. Juli 2017
    Beiträge:
    16
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    De op't schöönst Stadt de Welt
    Moinsen allerseits,
    wie schon im Titel angedeutet, möchte ich einen Bot programmieren. Meine ersten Zeilen Code habe ich mit 9 Jahren geschrieben und mit 26 irgendwie die Lust am Programmieren verloren. Das ist jetzt über 10 Jahre her. Soll heißen, programmieren kann ich (das verlernt man nie), es hat sich aber Vieles auf dem Gebiet der Programmierung getan und bin auch ein wenig eingerostet. Ich programmiere wieder seit gut einem Monat. Deswegen soll dieser Thread eine theoretische Schritt für Schritt Anleitung werden, wie man Bots für MMOs programmiert. Näheres unten.

    Was möchte ich genau:
    Nun, mein Ziel ist es nicht einen Bot programmieren, auch wenn am Ende einer bei rauskommt, sondern ich möchte einfach nur wieder KI programmieren. Aber zu erst muss ich irgendwie auf den Spielplatz meiner Wahl kommen - und um genau darum soll es hier gehen.

    Warum der Aufwand mit den MMOs:
    Warum nicht einfach AntMe nehmen? AntMe ist zu klein und bietet zu wenige Möglichkeiten. Natürlich kann man sich auch in AntMe hineinsteigern, alles noch mehr verfeinern und noch und nöcher. Ich möchte aber einem Char Leben einhauchen. Außerdem passiert in MMOs immer etwas, man "vereinsamt" dort nicht mit seinem Char.

    Das MMO meiner Wahl:
    Um es einfach zu halten, dachte ich an das alte gute Ultima Online. Es gibt immer noch genügend Free Shards und da so gut wie jeder, der das heute noch spielt mit EasyUO oder OpenEasyUO scriptet, kräht kein Hahn danach, wenn da ein Char automatisiert rumläuft oder etwas mal nicht so funktioniert, wie es soll. UO ist für den Einstieg geradezu prädestiniert.
    Wie jetzt? Es gibt EasyUO und OpenEasyUO, fang doch einfach an. Jaaa, das habe ich schon bereits und eigentlich läuft mein Char schon recht gut. Dennoch, EasyUO ist eine selbstgemachte Scriptsprache, nicht gerade mächtig. OpenEasyUO ist dem gegenüber sehr mächtig, läuft mit Lua. Aber das ist mir immer noch zu wenig. Ich will alles schön mit C# OOP-en.

    Wie fange ich an?:
    Auf meiner Suche nach Anleitungen, habe ich mich in eine Sackgasse hineinmanövriert. Ehe ich mich versah, machte ich Hacking-Tutorials für DLLs, DLL-Injections und die Cheat Engine. Ich hatte die Hoffnung, daß mich das irgendwann an einen Punkt führt, an dem ich etwas Nützliches für die Botprogrammierung finde. Dem war aber nicht so. Von daher lauten die ersten Fragen: Wie schleuse ich meine KI in ein MMO rein? Was brauche ich alles dafür und wie bzw womit fange ich an?
     
    Zuletzt bearbeitet: 25. Juli 2017
  2. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    79
    Zustimmungen:
    41
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Hallo,

    ich selbst habe lange Zeit Bots für UO geschrieben, das mitunter auch selbst in C# mit der Ultima.dll etc. Zuletzt einen Miner/Lumberjacker komplett in C# mit Gui und Railmaker auf UO:Renaissance.
     
  3. PierreDole

    PierreDole New Member

    Registriert seit:
    25. Juli 2017
    Beiträge:
    16
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    De op't schöönst Stadt de Welt
    Nice, das hört sich sehr gut an. Mein Googlen nach der ultima.dll hat ergeben, daß es wohl mehrere und dazu noch alte und neue gibt. RunUO und UltimaSDK haben jeweils eine ultima.dll. Welche ist die Richtige und gibt es eine Doku dazu?
     
  4. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    79
    Zustimmungen:
    41
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Ein echt guter Anlaufpunkt ist erstmal : https://github.com/DarkLotus/UOnet
    Dafür wird die uo.dll etc. von EasyUO benötigt.
    Weiterhin kann ich dir auch die benötigten Dlls schicken wenn ich diese finde :)
     
    PierreDole gefällt das.
  5. PierreDole

    PierreDole New Member

    Registriert seit:
    25. Juli 2017
    Beiträge:
    16
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    De op't schöönst Stadt de Welt
    Das ist genial, vielen, vielen Dank! Ich weiß nicht wie lange ich google penetriert habe, damit es mir genau so was findet - ohne Erfolg.
    Das Projekt läuft eigentlich, bis auf eine Klasse, sehr gut. Die Vector3 Klasse wirft eine Exception, da die Tiles der Worldmap nicht gelesen werden können. Hab mal meine alten OpenEasyUO Scripte gestartet und sie haben das gleiche Problem. Liegt also nicht an der Klasse. Muß mal schauen, wie ich das fixe. Es sei denn, irgendwas an UO selbst wurde geändert und das Auslesen funktioniert nicht mehr. Naja, so lange ich die Vector3 Klasse nicht aufrufe, kann ich erst mal coden wie ich will.

    Ok, damit hätten wir praktisch den theoretischen Teil übersprungen. Mich interessiert aber dennoch, wie das alles technisch funktioniert. Was macht die Dll um das Spiel zu steuern? Werden darin Netzwerkpakete abgefangen und modifiziert? Wird auf dem Arbeitsspeicher zugegriffen und da rumgewerkelt? Was passiert in dieser "Blackbox"?
     
  6. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    79
    Zustimmungen:
    41
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Die dll macht nix anderes wie Razor, also die Pakete hooken und weiterleiten. Das Problem mit den Tiles hatte ich am Anfang auch, zumindest mit der Demo. Als ich meinen eigenen Miner gebaut habe, war es dann verschwunden. Muss mal schauen wie ichs gelöst habe. Ich meine dass ich mich daran erinnern kann, dass es am Pathfinding lag.
     
  7. PierreDole

    PierreDole New Member

    Registriert seit:
    25. Juli 2017
    Beiträge:
    16
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    De op't schöönst Stadt de Welt
    Das heißt so viel wie: man muss das Client-Server Protokoll kennen, damit man so eine DLL schreiben kann?

    Das mit den Tiles lang an einem fehlenden Registry-Eintrag. Hatte im Laufe der Zeit Windows neu installiert, aber nicht den UO-Client. Der Vollständigkeit halber, falls jemand das hier ergooglet, so sieht die .reg aus:
    Code (Text):
    Windows Registry Editor Version 5.00
       
    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Origin Worlds Online\Ultima Online\1.0]
    "ExePath"="E:\\spiele (x86)\\Ultima Online\\client.exe"
    Den Pfad natürlich entsprechend anpassen. Ist der selbe Eintrag, den ich damals noch für Windows 7 benutzt habe und jetzt auch mit Windows 10 funktioniert.
     
    krusty gefällt das.
  8. exceptionptr

    exceptionptr New Member

    Registriert seit:
    30. Juli 2017
    Beiträge:
    7
    Zustimmungen:
    12
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    1. Eine DLL ist nichts weiter als eine Klassenbibliothek.
    2. Du musst nicht unbedingt das Client Server Protokoll kennen. Nur wenn du selber Pakete auslesen und gefakte wegschicken willst. Stattdessen kannst du auch nur die Memory lesen/schreiben. Sollte für einen Bot reichen und sollte einfacher sein als die Pakete zu lesen (ich weiß nicht ob Ultima die verschlüsselt). Dann ist die Frage ob das ganze external oder internal passieren soll. External ist einfacher aber du kannst nicht auf die UO Engine Funktionen zugreifen.
    Google mal ReadProcessMemory / WriteProcessMemory.

    Deinen Bot kannst du auf verschiedene Arten entwickeln. Du kannst external die Memory lesen und abhängig von den Ausgaben einfach nur Tastatur/Mauseingaben faken.

    Oder du machst dies internal zum Beispiel mit DLL Injection und nutzt UO Engine Funktionen. VMT Hooks, Detours alles Anwendbar.
    Die Frage ist nur: Hat UO einen Anticheat? Wenn ja, worauf reagiert er und welche Möglichkeit bleiben sonst?
    Wenn UO keinen Anticheat hat such dir eine Methode aus und have Fun.

    Dll Injection in C# geht. Das Problem solltest du eine mit .NET gebundelte DLL (In C# geschrieben) in ein nicht .NET Process injecten musst du auch noch .NET bundlen. Was nicht so einfach ist. Besser: DLL in C++ schreiben mit deinem C# Injector injizieren.

    Bei weiteren Fragen helf ich dir gerne. Aber sollte erstmal genug Stoff zum googlen sein.
     
    Zuletzt bearbeitet: 30. Juli 2017
    PierreDole und source++ gefällt das.
  9. PierreDole

    PierreDole New Member

    Registriert seit:
    25. Juli 2017
    Beiträge:
    16
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    De op't schöönst Stadt de Welt
    Vielen Dank. Das ist erstmal wirklich genug Lesestoff. Aber ich melde mich noch bezüglich diesen Themas.:)
     

Diese Seite empfehlen

Die Seite wird geladen...