JD3 - Diablo 3 Java Bot

07/29/2012 19:05 Viron#1
Hi,

Als ich vor einer Weile in einem anderen Forum von einer Methode gelesen habe, ohne zu kämpfen Gold zu farmen,
dachte ich mir, dass ich mir dafür ein Script schreibe bzw. einen Bot programmiere.
Das ganze ist jetzt mein erster Versuch eine Art Bot für ein Spiel zu programmieren, da ich aber recht gut programmiere habe ich das jetzt einfach mal gemacht.

Der Bot unterstützt im Moment folgende Auflösungen:
(schreibt eure Auflösung in diesen Thread und ich erweitere den Bot)
  • 1920x1080
  • 1600x900
  • 1440x900
  • 1366x768
  • 1280x1024
  • 1280x720
  • 800 x 600

Der Bot ist in Java programmiert und basiert auf der Klasse "robot".
Diese Klasse führt ganz einfach Mausklicks aus. Das ganze ist natürlich sicherer, da der Bot nicht ins Spiel eingreift, allerdings hat es auch den Nachteil, dass man nebenher nichts anderes machen kann.

Anleitung
  1. Den Bot starten (jd3.jar) - WICHTIG: Man benötigt die neueste Version von Java! ([Only registered and activated users can see links. Click Here To Register...])
  2. Diablo 3 starten
  3. Diablo 3 auf Vollbildfenstermodus umstellen
  4. Eine Quest in Akt 3 auswählen (man muss bei dieser in der Stadt starten)
  5. Den Bot wieder öffnen, so dass das Fenster vom Bot über Diablo 3 ist

Der Bot kann auch Screenshots machen (z.B. um per Internet den aktuellen Goldstand zu sehen). Dazu muss ein Haken bei "save screenshot" gesetzt werden und ein Screenshotordner eingegeben werden.

Download (0.1.2)

[Only registered and activated users can see links. Click Here To Register...]

Changelog

- added logfile
- added support 800 x 600

Alte Versionen

0.1.1 - [Only registered and activated users can see links. Click Here To Register...]
0.1 - [Only registered and activated users can see links. Click Here To Register...]

Passwort (falls benötigt): nudl3r

Screenshot

[Only registered and activated users can see links. Click Here To Register...]

Viel Spaß beim Benutzen meines Bots ;)

Über Verbesserungsvorschläge und Kritik freue ich mich. Ich will den Bot auch nur besser machen :)

Gruß,
viron/nudl3r
07/29/2012 19:59 Bosskonovic#2
schon jemand benutzt und auf viren gecheckt?
07/29/2012 20:03 Viron#3
Quote:
Originally Posted by Bosskonovic View Post
schon jemand benutzt und auf viren gecheckt?
Hier der Scan von VirusTotal, falls dir das etwas bringt :) Ansonsten kanns gerne auch jemand selbst auf Viren überprüfen.

[Only registered and activated users can see links. Click Here To Register...]
07/29/2012 20:05 Bosskonovic#4
bin zu misstrauisch, ich werde den bot erst ausprobieren, wenn mindestens 5 leute damit zufrieden waren und sich keiner beschwert hat. :D
07/29/2012 20:55 sm0ker91#5
"ohne zu kämpfen Gold zu farmen,"

wie soll das den gehen?

kannste bisschen was zu dein bot erklären?

ok hab das nunn mal getestet

er sammelt das kleine buch auf wo gold rausdroppt
links unten bei dem händler

weiß ja nicht ob das viel erfolg bringt ^^
bzw ob man da viel damit sammelt ^^
07/29/2012 23:06 Viron#6
Quote:
Originally Posted by sm0ker91 View Post
"ohne zu kämpfen Gold zu farmen,"

wie soll das den gehen?

kannste bisschen was zu dein bot erklären?

ok hab das nunn mal getestet

er sammelt das kleine buch auf wo gold rausdroppt
links unten bei dem händler

weiß ja nicht ob das viel erfolg bringt ^^
bzw ob man da viel damit sammelt ^^
Mit 186% gold find hab ich damit ca. 80k pro Stunde in Inferno gemacht. Das ist nicht schlecht, dafür dass man keine Repkosten usw. hat finde ich.

Ich hoffe einfach, dass ich den Bot in Zukunft noch verbessern kann und evtl. auch noch andere Methoden zum Farmen von Gold einbauen kann.
07/29/2012 23:55 Bosskonovic#7
is definitiv zu wenig gold per hour.. dein bot wird sich wohl nicht durchsetzen, der arreat bot ist momentan wohl der beste. :-)
07/30/2012 04:16 TheOnlyOne652089#8
Quote:
Originally Posted by Viron View Post
Der Bot ist in Java programmiert und basiert auf der Klasse "robot".
Diese Klasse führt ganz einfach Mausklicks aus. Das ganze ist natürlich sicherer, da der Bot nicht ins Spiel eingreift, allerdings hat es auch den Nachteil, dass man nebenher nichts anderes machen kann.
Punkte zum Thema "kann nebenbei nichts anderes machen".


+ MouseClicks per Controllsend direkt an das Handle des Spiels, damit bleibt die normale Maus unangetastet.

+ Genauso weitere Tastatur eingaben, alles per Controllsend an das Handle, den dann kann man nebenbei machen was man will, der Bot läuft wirklich "paralell".

+ Robot ist im speziellen nicht dafür gedacht solche Controllsends zu machen // wenn du aber über JNI/JNA die Windows API benutzt kannst du das alles machen, was eben auch in AutoIT (AutoHotkey) funktioniert (und gerade in diesem Aspekt des "kann nebenbei nichts anderes machen" viel hilft).



Screenshots machen finde ich eine schöne sache, was man damit gleich machen kann ist das weiter zu nutzen.

Natürlich kann man den Goldwert einfach auslesen, aber vielleicht nur aus "Spaß" kann man auch einen Schrifterkennungsprozes benutzen um daraus die Goldmenge auszulesen, die man dann sogar per SMS verschicken kann, oder per Tweet (ganz witzig sowas, einfach das man es mal gemacht hat).
*Ist eben schon eine Herausforderung auf Memory Read/write zu verzichten, den damit geht vieles weitaus schneller und einfacher.



Vorrausgesetzt du willst mehr zeit investieren und einfach mal viele bereiche abklappern wie und was man alles mit einem bot machen kann (gerade in java ist das noch mal ne Ecke "spezieller" als in C/C++), kann man sich den Programmcode gleich Modular aufbauen, das man wirklich austauschbare teile hat für GUI / Launcher / BotControll / Extras (wie Screenshots etc.), damit kann man dann verschiedenste Konzepte testen ohne das gleich alles von allem Abhängig ist.


Sehr schön um Fehler zu vermeiden ist auch gleich ein Test-Driven Konzept zu verwenden, das geht bei bots sehr gut und erspart viel viel VIELE Stunden Bugsuche (den hat man mal tiefgreifende Bugs die nicht ständig auftreten, findet man die einfach niemals).


Ebenfalls schön für "gut mal gemacht zu haben" einen Kalender, TimeTable.
Da kann man dann Zeiten einstellen wann der Bot etwas tun soll, ob er automatisch ausgehen soll zu einer Zeit, nur 1 Stunde laufen soll, usw. usw.

Das wird besonders interessant wenn die BotControll mehrere Bots unterhält und koordiniert, die nicht nur normale Runs ausführen, sondern auch ab und zu das AH "abchecken", andere Routinen laufen lassen zum Verkaufen von Items oder automatisch "neue" Accounts hochleveln sollen.


Das klingt alles erstmal extrem viel und ist auch einfach "viel zu viel" zum einfach mal nebenbei machen, aber ich spreche aus eigener Erfahrung (und ich habe meine Bots auch in java laufen) man kann wirklich sehr sehr viele Gimmicks einbauen die einem wirklich den "Edge" geben gegen die anderen Bots die unterwegs sind.

Anstelle von hardcoded Abläufen ist es auch sinnvoll diese in xml / jason als Profile abzuspeichern, einfach damit man sie einfacher verarbeiten kann (austauschen, löschen, multiplizieren). Gerade mit einem zeitplan kommen diese Profile richtig zur geltung, da man genau sagen kann wie lange ein Profil dauert, wann es ausgeführt werden soll und auch mehrere Bots die gleichen Profile ausführen können (oder unterschiedliche, auf basis des gleichen Codes).


Kurz gesagt:

+ Nutzung der Windows API für Controllsend, bessere kontrolle über alles auf betriebssystem Ebene (Window des Spiels, Prozesse usw.).

+ Einstellbare Profile

+ TimeTable Option (24h/7d ist nicht sehr sinnvoll)

+ Multi-Account / Multi-Process (benötigt eine BotControll die als Hub dient für weitere Bot Prozesse)




Empfehlung:

Eine schöne Bibliothek für D3 (wenn du Memory Read/Writes nutzen willst) ist D3Advanced.

Die kannst du mit JNI/JNA (ich mag JNA mehr, ist einfach schöner zu benutzen) relativ unproblematisch verwenden und bietet effektiv alles was man braucht (kann man auch selbst machen, aber das ist wirklich sehr viel arbeit so eine Bibliothek zu machen).


Viel spaß dabei ^^
07/30/2012 08:56 Viron#9
Quote:
Originally Posted by TheOnlyOne652089 View Post
Punkte zum Thema "kann nebenbei nichts anderes machen".


+ MouseClicks per Controllsend direkt an das Handle des Spiels, damit bleibt die normale Maus unangetastet.

+ Genauso weitere Tastatur eingaben, alles per Controllsend an das Handle, den dann kann man nebenbei machen was man will, der Bot läuft wirklich "paralell".

+ Robot ist im speziellen nicht dafür gedacht solche Controllsends zu machen // wenn du aber über JNI/JNA die Windows API benutzt kannst du das alles machen, was eben auch in AutoIT (AutoHotkey) funktioniert (und gerade in diesem Aspekt des "kann nebenbei nichts anderes machen" viel hilft).
Hört sich interessant an :) Werde ich auf jeden Fall ausprobieren. Danke.

Quote:
Originally Posted by TheOnlyOne652089 View Post
Screenshots machen finde ich eine schöne sache, was man damit gleich machen kann ist das weiter zu nutzen.

Natürlich kann man den Goldwert einfach auslesen, aber vielleicht nur aus "Spaß" kann man auch einen Schrifterkennungsprozes benutzen um daraus die Goldmenge auszulesen, die man dann sogar per SMS verschicken kann, oder per Tweet (ganz witzig sowas, einfach das man es mal gemacht hat).
*Ist eben schon eine Herausforderung auf Memory Read/write zu verzichten, den damit geht vieles weitaus schneller und einfacher.
Auch das wäre auf jeden Fall einen Versuch wert.
Wenn ich ehrlich bin hatte ich das eigentlich geplant - also dass einfach nur der Goldwert ausgelesen werden. Allerdings wurde daraus aus Faulheit dann einfach nur eine Screenshotfunktion. :D

Quote:
Originally Posted by TheOnlyOne652089 View Post
Vorrausgesetzt du willst mehr zeit investieren und einfach mal viele bereiche abklappern wie und was man alles mit einem bot machen kann (gerade in java ist das noch mal ne Ecke "spezieller" als in C/C++), kann man sich den Programmcode gleich Modular aufbauen, das man wirklich austauschbare teile hat für GUI / Launcher / BotControll / Extras (wie Screenshots etc.), damit kann man dann verschiedenste Konzepte testen ohne das gleich alles von allem Abhängig ist.

Sehr schön um Fehler zu vermeiden ist auch gleich ein Test-Driven Konzept zu verwenden, das geht bei bots sehr gut und erspart viel viel VIELE Stunden Bugsuche (den hat man mal tiefgreifende Bugs die nicht ständig auftreten, findet man die einfach niemals).
Man könnte fast sagen, dass der Code schon etwas Modular aufgebaut ist. Es gibt eine Klasse welche Standardfunktionen für Diablo 3 enthält wie z.B. startGame, exitGame, usw. und dann die verschiedenen Klassen für bestimmte Abläufe. Bis jetzt gibt es da eben die Klasse "Chest".
Werde den Bot aber auf jeden Fall noch stärker in diese Richtung entwickeln.

Quote:
Originally Posted by TheOnlyOne652089 View Post
Ebenfalls schön für "gut mal gemacht zu haben" einen Kalender, TimeTable.
Da kann man dann Zeiten einstellen wann der Bot etwas tun soll, ob er automatisch ausgehen soll zu einer Zeit, nur 1 Stunde laufen soll, usw. usw.

Das wird besonders interessant wenn die BotControll mehrere Bots unterhält und koordiniert, die nicht nur normale Runs ausführen, sondern auch ab und zu das AH "abchecken", andere Routinen laufen lassen zum Verkaufen von Items oder automatisch "neue" Accounts hochleveln sollen.

Das klingt alles erstmal extrem viel und ist auch einfach "viel zu viel" zum einfach mal nebenbei machen, aber ich spreche aus eigener Erfahrung (und ich habe meine Bots auch in java laufen) man kann wirklich sehr sehr viele Gimmicks einbauen die einem wirklich den "Edge" geben gegen die anderen Bots die unterwegs sind.

Anstelle von hardcoded Abläufen ist es auch sinnvoll diese in xml / jason als Profile abzuspeichern, einfach damit man sie einfacher verarbeiten kann (austauschen, löschen, multiplizieren). Gerade mit einem zeitplan kommen diese Profile richtig zur geltung, da man genau sagen kann wie lange ein Profil dauert, wann es ausgeführt werden soll und auch mehrere Bots die gleichen Profile ausführen können (oder unterschiedliche, auf basis des gleichen Codes).
Benutzereinstellungen usw. habe ich auf jeden Fall auch geplant. Dass ich diese dann in Form von XML o.ä. speichern werde erscheint mir auf jeden Fall sinnvoll.

Quote:
Originally Posted by TheOnlyOne652089 View Post
Empfehlung:

Eine schöne Bibliothek für D3 (wenn du Memory Read/Writes nutzen willst) ist D3Advanced.

Die kannst du mit JNI/JNA (ich mag JNA mehr, ist einfach schöner zu benutzen) relativ unproblematisch verwenden und bietet effektiv alles was man braucht (kann man auch selbst machen, aber das ist wirklich sehr viel arbeit so eine Bibliothek zu machen).
D3Advanced werde ich mir dann wohl auch mal anschauen. Allerdings würde ich doch ganz gerne weiterhin ohne Memory Reading/Writing auskommen.

JNI/JNA hört sich allerdings gut an. Werde so schnell wie möglich mal ausprobieren.

Quote:
Originally Posted by TheOnlyOne652089 View Post
Viel spaß dabei ^^
Werde ich haben denke ich :D
Auf jeden Fall vielen Dank für deine Tipps. Werde mir jetzt echt mal überlegen, wie ich meinen Bot in Zukunft in diese Richtung verbessern kann. :handsdown:

Gruß,
viron
07/30/2012 09:40 bOOm_shacalaca#10
er farmt nur die truhe in der stadt. dh ein game = 10 sekunden etwa?
würde nicht empfehlen zu nutzen, kann zu bann führen und mim nächsten patch wird die gamesanzahl pro stunde eh eingeschränkt

er farmt nur die truhe in der stadt. dh ein game = 10 sekunden etwa?
würde nicht empfehlen zu nutzen, kann zu bann führen und mim nächsten patch wird die gamesanzahl pro stunde eh eingeschränkt.

such dir eine längere farmrouter ;)
07/30/2012 13:39 phoenix-ch#11
Rein aus Interesse, gibts den Sourcecode?
07/30/2012 14:45 nicolaswhite#12
Source code gibts hier: [Only registered and activated users can see links. Click Here To Register...]
07/30/2012 15:27 Viron#13
Quote:
Originally Posted by nicolaswhite View Post
Source code gibts hier: [Only registered and activated users can see links. Click Here To Register...]
Ist nicht nötig. Werde den Source Code gerne veröffentlichen.
07/30/2012 21:33 nuckel#14
Hallo zusammen und erstmal vielen Dank für deinen Bot hier! Mit Java zu proggen find ich super, so kann auch die Mac-D3 Gemeinde mit Botten! :)
Wärs möglich den "[Bot] Core of Arreat V2 (All races)" mit Java zu adaptieren? fänd ich grandios! :)
07/31/2012 09:45 bOOm_shacalaca#15
sicherlich ist das möglich :) kannst dich ja mal ransetzen ;)