Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 13:21

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

Advertisement



Keyboard emulation mit SendInput [Metin2] [RESOLVED]

Discussion on Keyboard emulation mit SendInput [Metin2] [RESOLVED] within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Feb 2012
Posts: 37
Received Thanks: 10
Keyboard emulation mit SendInput [Metin2] [RESOLVED]

Hallo liebe Leute,

ich sitz zur zeit an einem kleinen Projekt in C++, uns zwar versuche ich, für das MMORPG Metin2 einen nicht den Client exploitenden, den Spielregeln folgenden, AI-gesteuerten Bot zu programmieren. Man mag sich fragen wieso einen Bot, wenn man dann den regeln folgen will? Nun, im grunde geht's eher um die Programmiererfahrung im Bereich AI, als um den Bot an sich

Nun, nachdem die ersten Hindernisse aus dem weg waren (HackShield, OCR, ...) scheitert's nun an einer total banalen sache:

Es war mir nich möglich, Input zu generieren, der vom Spielclient als Aufforderung zur Bewegung des Chackters verstanden worden ist

Ich weiß nicht genau, woran es liegt, und dass ich das Problem trotz meiner theoretisch hinreichenden Eloquenz in C++ und der Windows API dokumentation nicht lösen kann, ist reichlich frustrierend.

In der Hoffnung, dass einige von euch bereits erfahrungen in dem bereich haben, hier kurz die gescheiterten Versuche:

SendMessage() / PostMessage() calls
keybd_input() calls
SendInput() calls

damit ist mein repartoire leider erschöpft

ich hoffe auf erleuchtende hinweise
- käsekuchen

EDIT: wieder mal typisch, kaum fragt man nach hilfe, schon kriegt man's selber raus - Trotzdem Danke an alle, die sich gegebenenfalls gedanken gemacht haben!
käsekuchen11elf is offline  
Old 02/02/2012, 11:03   #2
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
Wenn du etwas haben willst, dass realistisch aussieht lass das mit den Tastendrücken sein. Nutz Packets bzw. direkt die Funktionen. Dann liest du die Mapfiles ordentlich aus, dazu die Position von Objekten, baust dir dadraus statisch oder dynamisch einen navmesh. Dann kannst du dich zumindest schonmal vernünftig bewegen, gescheite Mathematik kenntnisse vorrausgesetzt.
MoepMeep is offline  
Old 02/02/2012, 16:07   #3
 
elite*gold: 0
Join Date: Feb 2012
Posts: 37
Received Thanks: 10
danke für die Anregung, aber ich wollte keinen Bot in dem Sinne schreiben, sondern eher einen Nutzer simulieren
und dazu gehören auch Tastendrücke.
käsekuchen11elf is offline  
Old 02/02/2012, 16:10   #4
 
ηєσχ's Avatar
 
elite*gold: 53
Join Date: Feb 2009
Posts: 2,041
Received Thanks: 617
das bemerkt man aber nicht ob da nun packets oder mausklicke kommen....
ηєσχ is offline  
Old 02/02/2012, 16:14   #5
 
elite*gold: 0
Join Date: Feb 2012
Posts: 37
Received Thanks: 10
das mag zwar sein, aber es geht trotzdem an der (selbst gestellten) programmieraufgabe vorbei

zeil war es, nur mit den informationen, die auf dem schirm angezeigt werden, einen voll funktionsfähigen bot zu schreiben, unter verwendung der gängigen AI techniken.
käsekuchen11elf is offline  
Old 02/02/2012, 16:25   #6
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Nur sagen die Informationen auf dem Bildschirm weniger als die im Speicher des Programmes. Außerdem ist man bei Pixelerkennung meist an eine Bildschirmauflösung gebunden.
jacky919 is offline  
Old 02/02/2012, 16:38   #7
 
elite*gold: 0
Join Date: Feb 2012
Posts: 37
Received Thanks: 10
na mensch, alles andere wurde doch schon tausend mal gemacht, und ist keine herausforderung mehr ^^
käsekuchen11elf is offline  
Old 02/02/2012, 16:53   #8
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Das höchste was du mit SendInput bei Metin2 erreichen wirst, ist das tasten in den
Chat gespammt werden.

Die Methode von MoepMeep dürfte zwar kompliziert sein, aber wohl der einzige Weg
zu einem wirklich guten Ergebnis.
.SkyneT. is offline  
Old 02/02/2012, 16:59   #9
 
elite*gold: 0
Join Date: Feb 2012
Posts: 37
Received Thanks: 10
Quote:
Originally Posted by .SkyneT. View Post
Das höchste was du mit SendInput bei Metin2 erreichen wirst, ist das tasten in den
Chat gespammt werden.

Die Methode von MoepMeep dürfte zwar kompliziert sein, aber wohl der einzige Weg
zu einem wirklich guten Ergebnis.
Das ist so nicht ganz richtig. Es ist durchaus möglich, tastenevents via SendInput an metin2 zu senden, sodass diese als gültiger Input akzeptiert werden. man muss dafür nur in das wScan feld des KEYBDINPUT structs den DirectInput code einfügen.

Quote:
Originally Posted by MoepMeep View Post
Wenn du etwas haben willst, dass realistisch aussieht lass das mit den Tastendrücken sein. Nutz Packets bzw. direkt die Funktionen. Dann liest du die Mapfiles ordentlich aus, dazu die Position von Objekten, baust dir dadraus statisch oder dynamisch einen navmesh. Dann kannst du dich zumindest schonmal vernünftig bewegen, gescheite Mathematik kenntnisse vorrausgesetzt.
Wobei ich zugeben muss, dass mich dieser ansatz schon ein bisschen reizt. Kannst du mir n paar details geben, was du mit
Quote:
Originally Posted by MoepMeep View Post
Nutz Packets
oder
Quote:
Originally Posted by MoepMeep View Post
bzw. direkt die Funktionen
meinst?
käsekuchen11elf is offline  
Old 02/02/2012, 17:55   #10
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
reversen.
musst mit nem debugger etc. die funktionen finden, die das spiel nutzt um z.b. zu "springen".
dann kannst du eine dll injecten und die originalen spielfunktionen aufrufen.
um tastendrücke zu emulieren kannst du auch direktinput hooken:



z.b. wird i-wo im spiel eine funktion "void keycallback(byte* array[256])" möglicherweise sein.
kann auch so aussehen: "void keycallback(byte scancode)", musst du reversen.

bei 2. möglichkeit wird dann wahrscheinlich nen switch des scancodes folgen:

Code:
switch(scancode)
...
case DIK_SPACE:
    call_jump_function();
    break;
...
wenn du die findest, findest du auch die funktion, die für den jump verantwortlich ist und kannst sie dann aus deiner dll aufrufen.
Dr. Coxxy is offline  
Old 02/02/2012, 18:22   #11
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Quote:
Originally Posted by Dr. Coxxy View Post
void keycallback(byte* array[256])
Was ist denn der Sinn hinter einem Zeiger auf ein Array?
jacky919 is offline  
Old 02/02/2012, 18:46   #12
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
das [256] war nur zur verdeutlichung, dass ein zeiger übergeben wird, der auf ein keyboardstate array zeigt, mit 256 keystates, für jeden eine, so wie es directinput tut.

richtig sieht es natürlich so aus:

byte keyboardstates[256];
die dann so aufgerufen wird:
keycallback(keyboardstates);
...
prototyp dementsprechend:
void keycallback(byte* array);

dachte das wäre offensichtlich.
Dr. Coxxy is offline  
Old 02/02/2012, 19:26   #13
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Offensichtlich ist es nicht, wenn du sagst, dass es ihm Spiel diese Funktion "void keycallback(byte* array[256]" gäbe. Aber ist ja jetzt auch egal, hat sich ja geklärt
jacky919 is offline  
Reply

Tags
metin2 bot sendinput


Similar Threads Similar Threads
SendInput C++/C#
06/22/2010 - C/C++ - 5 Replies
hi ihc hab mal ne frage, nämlich wie kann ich in dem spiel Eingaben simulieren? so wie ich es bisher immer versucht habe: public void SendKey(int key) { SendMessage(hwnd, WM_KEYDOWN, key, 0); SendMessage(hwnd, WM_KEYUP, key, 1); } funktioniert es irgendwie nicht :(, kann mir jmd sagen was ich falsch mache?
GG Emulation
06/17/2010 - Cabal Online - 0 Replies
Hi guyz, I tried everything but I can't make it to work. I was trying to emulate GG but it when I try to run my client it doesn't dl the GG files in my apache server. My hosts files is already updated. I'm trying to degrade rev. 1553. Hope you guyz could help me. thnks
GG EMULATION.
05/16/2009 - Soldier Front - 1 Replies
IT DOESNT WORK!, SINCE THE ABYSS WEB SERVER CNT READ IP'S, ONLY HOSTNAMES, GG CNT BE EMULATED! ATLEAST THTS MY EXPERIENCE WITH EMULATING FOR 2 WEEKS! :mad::mad::mad:
need help with gg emulation
01/28/2009 - Soldier Front - 0 Replies
AFTER CLICKING PLAY LIVE it just keeps on saying "failed to download the game information file." if u no the solution, plzz tell me.
SendInput C#
12/07/2006 - .NET Languages - 4 Replies
Ich habe folgende Klasse geschrieben: using System; using System.Diagnostics; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices;



All times are GMT +1. The time now is 13:21.


Powered by vBulletin®
Copyright ©2000 - 2025, 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 ©2025 elitepvpers All Rights Reserved.