Re: Text in Diablo II ausgeben
Naja weiß net inwiefern ihr Diablo kennt / spielt...
Einige kennen aber sicher das Program d2jsp (diablo 2 java script parser) - mit diesem kann man wie der name schon verrät javascript code ausführen welchen das program dann in diablo 2 umsetzt. Mit diesem wird in diablo was geschrieben, ohne problem, ohne flimmern.... einfach so... Also gehts irgendwie... (ich will NICHT d2jsp nachbauen!) Kann ich mithilfe von d2jsp evtl. herauskriegen wie's geht (also programm "zerlegen") |
Re: Text in Diablo II ausgeben
Am Rande: Hier schribt jemand, wie man einen Screenshot einer DirectX-Anwendung machen kann. Könnte man das nicht irgendwie verwursten? Hab das mal testweise in Delphi übersetzt (versucht) aber überhaupt nicht kompiliert bekommen, da mir wohl die DirectX 8.0 Header fehlen. Bis 7 hab ich sie, und da kennen die verwendeten Interfaces die ganzen Methoden die der Code benutzt nicht :?
Zum Thema "Zerlegen" hatten wir hier schon massig Diskussionen disassembler decompiler. Lies es, und du wirst sehen, dass man das getrost vergessen kann ;) |
Re: Text in Diablo II ausgeben
Die flackernde Variante ist schon möglich, da DirectX sowieso im Fenster läuft, welches ein DC hat, auf das man zeichnen kann (ich hab das selbst mal ausprobiert). Einfach per FindWindow sich ein fensterhandle holen, dann per GetDc den dc holen, und dann einfach per TextOut draufzeichnen. TextOut muss man dann in einer schleife recht oft aufrufen, um auf (möglichst) jeden frame den text zu zeichnen. Das funktioniert, aber wie gesagt, es flackert.
Um aber mit DirectX zu zeichnen, z.B. mit der DrawTextA funktion aus ID3DXFont braucht man zum erstellen der Font (bei dx9) ein IDirect3DDevice9. Ohne das, keine font. Und selbst dabei muss man auch noch im richtigen moment zeichnen, damit der text nicht wie bei obiger variante flackert. Daher ist API bzw. Function-Hooking die EINZIGE akzeptable methode (außer man versucht sich an einem Graphikkartentreiber). Ich hab mir nun vorgenommen das angesprochene Tutorial zu schreiben, und dies mit einem beispiel auszustatten, das zeigt, wie das möglich ist. Ihr müsst nur ein wenig gedult haben ... @dizzy: Genau den code hab ich verwendet, um screenshots zu machen ... allerdings ist der für eigene programme gedacht ... ^^ ciao, Philipp |
Re: Text in Diablo II ausgeben
Jo, das hört sich schon sehr konkret an ;-)
Ja, das mit dem zerlegen weiß ich das es net wircklich effizient ist (wenn ich es zerlegen und das zerlegte zu 100% verstehen könnte würde ich wohl diablo einfach neu schreiben ^^) Wie halt schon gesagt hab ich d2jsp und das hat auch eine dll, kann die diese nicht verwenden (copyright hab ich keine angst da es ja nur für mich + freundeskreis ist) ahja, btw. bei d2jsp sieht es aus als wenn die nachricht vom server käme, wäre es evtl. nicht möglich einfach eine für diablo fingierte message zu schicken, also gar nicht diablos grafik selbst zu manipulieren sondern einfach über den port wo "der text kommt" an sich selbst quasi eine nachricht zu schreiben? Diablo würde diese dann ganz normal ausgeben.... (is nur so ein einfall) Hier das mit dem DC .... geht nicht wircklich:
Delphi-Quellcode:
Das Program zeichnet immer auf sein eigenes Fenster anstatt auf notepad, den rechner oder diablo ...
procedure TForm1.FWin;
var W: HWnd; D: HDC; x: cardinal; begin W := FindWindow(NIL,'Diablo II'); if W<>0 then begin Status.Caption:='Fenster gefunden!'; status.Refresh; sleep(1000); x:=0; D := GetDeviceContext(W); while x < 150 do begin sleep(50); inc(x,1); TextOut(D,2,2,'FOUND',5); Status.Caption:='Output '+IntToStr(x); status.Refresh; end; Status.Caption:='Output done!'; status.Refresh; end else Status.Caption:='Fenster nicht gefunden'; status.Refresh; end; |
Re: Text in Diablo II ausgeben
Wenn ich sage GetDC, dann meine ich auch GetDC ... also, ersetze mal dein GetDeviceContext durch GetDC!
ciao, Philipp |
Re: Text in Diablo II ausgeben
jo hab es jetzt mit getdc und geht auch (die Hilfe schlug mir eben GetDeviceContext vor) ...
Aber die Möglichkeit dem Spiel eine Nachricht zu schicken wie als wenn Sie von dem Server käme wäre die nicht besser? Weil mit OutputText is wie ja schon vorher bemerkt sehr flimmernd... |
Re: Text in Diablo II ausgeben
Gibts denn keine Möglichkeit, einen Thread in den Diablo II Prozess zu "schummeln" und dann damit auf die D2 Libraries (d2client.dll, d2game.dll usw.) zuzugreifen? Du bräuchtest halt die Namen der Funktionen, aber ich schätze mal da wirst du in den Cheaterforen schon fündig...
btw: Bei FindWindow lieber nach dem Klassennamen "Diablo II" suchen anstatt des Fenstertitels |
Re: Text in Diablo II ausgeben
Zitat:
egal, ich bleibe bei meiner methode ... ^^ ... und wer keine gedult hat ist selbst schuld ... ciao, Philipp PS: :pale: mein mund ... AUUUAAA! :pale: |
Re: Text in Diablo II ausgeben
Zitat:
Wie such ich nach dem Klassennamen anstatt nach dem Fenstertitel? |
Re: Text in Diablo II ausgeben
Delphi-Quellcode:
W := FindWindow('Diablo II', nil);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz