|
You last visited: Today at 13:21
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.
02/01/2012, 19:35
|
#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!
|
|
|
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.
|
|
|
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.
|
|
|
02/02/2012, 16:10
|
#4
|
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....
|
|
|
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.
|
|
|
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.
|
|
|
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 ^^
|
|
|
02/02/2012, 16:53
|
#8
|
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.
|
|
|
02/02/2012, 16:59
|
#9
|
elite*gold: 0
Join Date: Feb 2012
Posts: 37
Received Thanks: 10
|
Quote:
Originally Posted by .SkyneT.
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
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
Nutz Packets
|
oder
Quote:
Originally Posted by MoepMeep
bzw. direkt die Funktionen
|
meinst?
|
|
|
02/02/2012, 17:55
|
#10
|
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.
|
|
|
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
void keycallback(byte* array[256])
|
Was ist denn der Sinn hinter einem Zeiger auf ein Array?
|
|
|
02/02/2012, 18:46
|
#12
|
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.
|
|
|
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
|
|
|
 |
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.
|
|