Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 10:52

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



IngameForm für Wolfteam erstellen

Discussion on IngameForm für Wolfteam erstellen within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
maxasoft's Avatar
 
elite*gold: 2049
The Black Market: 350/0/0
Join Date: May 2012
Posts: 4,593
Received Thanks: 441
IngameForm für Wolfteam erstellen

Hallo Coders ich wollte mal ein IngameFenster für Wolfteam erstellen und jetzt wollt ich mal fragen, wie ich das realisieren kann.

Ich hab schon davon gehört, dass man da eine DLL erstellen muss, aber ich kenn mich da gar nicht aus. ):

Habt ihr vielleicht schonmal mit sowas gearbeitet?

Ich selber habe wenig ahnung von c++, aber sagt mir bitte nicht, das ich was einfaches machen soll und nicht sowas.


Wenn es auch per code geht wäre es nett, wenn ihr mir einen geben könnt wäre echt nett.
maxasoft is offline  
Old 07/02/2012, 20:49   #2
 
elite*gold: 0
Join Date: Jun 2012
Posts: 187
Received Thanks: 58
Kenne Wolfteam nicht und finde per google auch nichts, das darauf hindeutet, dass sowas gewollt ist.

Aber du kannst versuchen Wolfteam im Windowed Mode laufen zu lassen, sodass es zwar über den ganzen Screen geht aber kein FullScreen ist (bei WoW und vielen anderen Games heisst das in den Optionen FullScreen (run in Windowed Mode)). Dann kannst du ein Fenster von deinem eigenen Programm drüberlegen, das Fenster stellst du dann auf wsStayOnTop und schon hast du ein Fenster über das eigentliche Spiel. Das kannst du mittels windows-api auch noch halbtransparent machen.

Wenn Wolfteam dafür keine Option bietet, so kann man das zumindest mit ner nvidia GPU über das nvidia system-preferences Menü dazu zwingen, das ATI äquivalent müsste sowas auch können. Allerdings kann es dann sein, dass deine Maus (da es ein egoshooter ist) sich am Bildrand auffängt. Falls das so ist, bietet sich nurnoch die Option, dass du Wolfteam's Rendering funktionen hookst und detourst.
tnd0 is offline  
Old 07/02/2012, 21:51   #3
 
elite*gold: 0
Join Date: Jun 2012
Posts: 9
Received Thanks: 2
Wenn du grundlegende direct3d kenntnisse besitzt, kannste eine .dll injecten, die alle zum zeichnen des fensters benötigten d3d funktionen hookt. (Wenn du die Funktionen nicht selber hooken willst kannste auch nach dem "D3D Starterkit" projekt suchen (dort sind bereits alle direct3d funktionen gehookt) und das dann weiterschreiben). Wenn du keine direct3d Kenntnisse besitzt und nicht weißt wie du so ein fenster generell zeichnest musst du dir entweder das wissen aneignen oder du kopierst nen paar code beispiele die man im internet findet und passt die an deine bedürfnisse an.
atx3e is offline  
Old 07/02/2012, 22:35   #4
 
maxasoft's Avatar
 
elite*gold: 2049
The Black Market: 350/0/0
Join Date: May 2012
Posts: 4,593
Received Thanks: 441
Quote:
Originally Posted by atx3e View Post
Wenn du grundlegende direct3d kenntnisse besitzt, kannste eine .dll injecten, die alle zum zeichnen des fensters benötigten d3d funktionen hookt. (Wenn du die Funktionen nicht selber hooken willst kannste auch nach dem "D3D Starterkit" projekt suchen (dort sind bereits alle direct3d funktionen gehookt) und das dann weiterschreiben). Wenn du keine direct3d Kenntnisse besitzt und nicht weißt wie du so ein fenster generell zeichnest musst du dir entweder das wissen aneignen oder du kopierst nen paar code beispiele die man im internet findet und passt die an deine bedürfnisse an.
Ok könntest du mir eventuell ein paar links geben??

wäre echt nice
maxasoft is offline  
Old 07/02/2012, 23:08   #5




 
Omdi's Avatar
 
elite*gold: 93616
Join Date: Apr 2010
Posts: 13,737
Received Thanks: 14,990
Du könntest auch einfach eine Dialogbox benutzen, ist für den Anfang vielleicht etwas einfacher wenn du kein Directx Hook machen willst.
Omdi is offline  
Old 07/03/2012, 00:13   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by tnd0 View Post
Kenne Wolfteam nicht und finde per google auch nichts, das darauf hindeutet, dass sowas gewollt ist.

Aber du kannst versuchen Wolfteam im Windowed Mode laufen zu lassen, sodass es zwar über den ganzen Screen geht aber kein FullScreen ist (bei WoW und vielen anderen Games heisst das in den Optionen FullScreen (run in Windowed Mode)). Dann kannst du ein Fenster von deinem eigenen Programm drüberlegen, das Fenster stellst du dann auf wsStayOnTop und schon hast du ein Fenster über das eigentliche Spiel. Das kannst du mittels windows-api auch noch halbtransparent machen.

Wenn Wolfteam dafür keine Option bietet, so kann man das zumindest mit ner nvidia GPU über das nvidia system-preferences Menü dazu zwingen, das ATI äquivalent müsste sowas auch können. Allerdings kann es dann sein, dass deine Maus (da es ein egoshooter ist) sich am Bildrand auffängt. Falls das so ist, bietet sich nurnoch die Option, dass du Wolfteam's Rendering funktionen hookst und detourst.
Ein D3D Hook wäre da eigentlich das sinnvollste.
Für eigene Fenster muss das Game übrigens nicht zwingend im Window Mode laufen.
MrSm!th is offline  
Old 07/03/2012, 01:26   #7
 
elite*gold: 0
Join Date: Jun 2012
Posts: 9
Received Thanks: 2
Naja du solltest dir wie schon gesagt erstmal das d3d starterkit (dafür hab ich leider keinen link) und eine library wie zum zeichnen deines Fensters downloaden (ist anfängerfreundlicher als alles selber zu schreiben und aufgrund der guten Dokumentation sollte es einigermaßen einfach sein die anttweakbar library in das starterkit zu integrieren). Wenn du dann in der Lage bist ein Fenster in deinem Spiel zu zeichnen musst du um Probleme zu vermeiden erstmal alle Eingaben an deine anttweakbar redirecten, bevor du dann die von der library übergangenen Eingaben an den Client übergibst (so schießt du z.B. nicht während du nur dein ingamemenu bedienen willst). Dafür kannste entweder DispatchMessage oder die beim aufrufen von RegisterClassEx übergebene lpfnWndProc Funktion detouren. (Getestet hab ich das noch nicht .. sollte aber funktionieren)

(Wenn deine d3d hooks vom anti hack (keine ahnung welcher von wolfteam genutzt wird) detectet werden könnte das projekt um einiges komplexer werden)
atx3e is offline  
Old 07/03/2012, 10:46   #8
 
elite*gold: 0
Join Date: Jun 2012
Posts: 187
Received Thanks: 58
Quote:
Für eigene Fenster muss das Game übrigens nicht zwingend im Window Mode laufen.
Wie meinen? Wenn ein Programm im echten FullScreenmode läuft, hat es ABSOLUTE priotität für den ms-displaydriver, da kann nichts und niemand drüberzeichnen (von dreckigen tricks die mindestens genauso kompliziert sind wie hooking mal abgesehen), du kannst nur via hooks das programm selbst dazu bringen, da etwas zu zeichnen. So zumindest habe ich es festgestellt, als ich für Rift ein Overlay machen wollte.

Was ich meine ist eben der 'Windowed-FullScreenMode', kann man sich als ganz normales windows-fenster vorstellen ohne Border und Titelleiste was über den gesamten Bildschirm geht, da kann man auch ohne probleme halbtransparente Fenster drüber legen. Nur fängt er dann die maus nicht, was für Egoshooter natürlich nicht sinnvoll ist. Den unterschied merkt man am einfachsten wenn man im spiel Alt-Tab oder Win-Tab drückt. Wird der Monitor kurz komplett schwarz beendet windows kurzzeitig den FullScreen mode um ins normale Windows zu wechseln, wenn aber direkt das alt/win-tab overlay eingeblendet wird, ist es nur der windowed-fscrn mode.

Edit: vergleichbar mit F11-mode vom FireFox/Chrome.
tnd0 is offline  
Old 07/03/2012, 11:14   #9
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
mit aero (ab win vista) kann man auf fenster auch draufzeichnen.

mit nem hw overlay und nen paar dreckigen tricks, kann man tatsächlich ein fenster/beliebiges auf ein beliebiges vollbildspiel streamen/zeichnen, aber wie tnd0 schon gesagt hat ist das auch nicht minder komplex als nen dx hook (eher sogar mehr...).

Tastendrücke/maus fängt man dann mit nem windowshook ab.
Dr. Coxxy is offline  
Old 07/03/2012, 21:08   #10
 
maxasoft's Avatar
 
elite*gold: 2049
The Black Market: 350/0/0
Join Date: May 2012
Posts: 4,593
Received Thanks: 441
also nochmal was muss ich jetzt genau machen?

Mit einem bestimmten programm eine form zeichnen und wie bekomme ich die dann genau in mein programm??

Und noch was in C++ kenne ich mich nicht aus, wäre es dann möglich diese form auch in visual basic 2010 zu verwenden??
maxasoft is offline  
Old 07/03/2012, 22:24   #11
 
~.ScoiL's Avatar
 
elite*gold: 70
Join Date: Jul 2011
Posts: 496
Received Thanks: 194
Bei D3D Hacks laggt Wolfteam sehr. Ich würde eher für Wolfteam OpenGL empfehlen.
~.ScoiL is offline  
Old 07/03/2012, 23:49   #12
 
elite*gold: 0
Join Date: Jun 2012
Posts: 9
Received Thanks: 2
(Weder hab ich die Überlegungen die ich hier poste getestet, noch sind die auf Wolfteam zugeschnitten und müssen dementsprechend nicht gezwungenermaßen funktionieren)

Wenn du anttweakbar benutzen willst, dann schreibste eine .dll, die eine detour bei CreateDevice installiert (ich geh einfach mal davon aus das d3d9 verwendet wird). Du kopierst das beim aufrufen der funktion übergene Argument ppReturnedDeviceInterface in irgendeine Variable und callst damit TwInit(TW_DIRECT3D9, ppReturnedDeviceInterface); (wie du anschließend ein fenster erstellst steht ). Um die bar zu zeichnen musst du nur noch TwDraw(); in deinem Endscene hook aufrufen.
Damit anttweakbar jetzt auch Eingaben verarbeiten kann und keine probleme zwischen client und anttweakbar auftreten, musst du alle Eingaben erstmal an anttweakbar redirecten (Nachrichten die für anttweakbar gedacht sind dürfen nicht an den client weitergeleitet werden).

Dazu detourst du die RegisterClassEx Funktion und installierst dann beim aufruf der funktion eine weitere detour an der Adresse, auf die lpfnWndProc zeigt (lpfnWndProc ist ein teil der WNDCLASSEX struktur, die beim Aufruf an die RegisterClassEx übergeben wird. Der RegisterClassEx hook kann anschließend entfernt werden).
Die Funktion zu der dann gesprungen wird sollte ungefähr so aussehen (ich hab den code von der anttweakbar homepage ein bissn verändert):

Code:
LRESULT CALLBACK hkMessageProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    if( TwEventWin(wnd, msg, wParam, lParam) ) // send event message to AntTweakBar
        return 0; // event has been handled by AntTweakBar
    return MessageProc(wnd, msg, wParam, lParam); // die nicht für anttweakbar bestimmte message an den client weiterleiten
}
Wenn dir das mit RegisterClassEx zu viel Arbeit ist kannste auch einfach eine detour bei DispatchMessage installieren.

Edit: Zu detours gibts ein Video tutorial falls du dich damit nicht auskennst
(ein paar detours müssen schon installiert sein bevor die funktionen aufgerufen werden, weil du ansonsten nicht an die Argumente kommst)
atx3e is offline  
Reply


Similar Threads Similar Threads
Wolfteam Rekord erstellen / Create Wolfteam Record
03/20/2011 - Wolfteam - 37 Replies
Deutsch: Hallo Forum, Heute ist mir folgendes eingefallen, nämlich den Rekord in Wolfteam zu brechen d.h. mit einem Acc den höchsten Rang erreichen. Den Acc. werde ich zur Verfügung stellen, jeder der will, darf mit diesem Account spielen. Das darf man: Waffen kaufen etc. spielen bis der Artzt kommt ;)



All times are GMT +2. The time now is 10:52.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.