Python Functions von Mt2 per C++ Code Inject ausführen?

12/01/2011 23:52 vwap#1
Hallo, wollte fragen, ob mir eventuell jemand beantworten kann, wie man Python Functions nützt, welche in den Metin2 - pack Files gespeichert sind.
Und ob das überhaupt so wie ich mir das vorstelle möglich ist.
12/02/2011 11:16 MrSm!th#2
Klar, Metin muss sie ja auch irgendwie callen.
Einfach den Aufruf finden und nachbauen bzw. sogar vielleicht direkt nur die binäre Funktion im Client callen, die dann die Python Funktion callt.
12/02/2011 11:51 vwap#3
Die binäre Funktionen habe ich bereits alle.

D.h. ich brauche eig. nur die python27.dll, den Header und dann kann ich die callen?
12/02/2011 18:00 MrSm!th#4
Wenn du weißt, wie man Phyton Funktionen callt, klar.

Allerdings, wenn du doch eh eine Lib zum Nutzen von Python hast und die Namen der Funktionen weißt, warum rufst du sie nicht direkt auf?
Weiß ja nicht, wie das genau mit Python läuft, aber du wirst doch sicherlich eine Art Handler zum Script brauchen und dann damit die Funktionen callen können.
Den müsstest du ja bekommen können, indem du die Funktionen von Metin hookst und ihn abfängst, wie es auch bei D3D Hooks mit dem Device Pointer passiert.
12/02/2011 22:15 vwap#5
Ich hatte vor sie direkt zu callen.

Metin callt z.B. einfach die Function "SendDropItemPacketNew" mit Argumenten und fertig.
Habe mir gedacht, es genau so zu machen.
12/02/2011 22:23 MrSm!th#6
Joa, dann bau halt den Aufruf, wie Metin es macht, einfach nach ;)
Im Grunde brauchste dafür nichtmal ein Pyhton SDK, du befindest dich ja im Adressbereich von Metin; du kannst im Grunde schon den ASM Code kopieren und leicht anpassen, dann hast du es schon. Damit es schöner und später leichter ersichtlich wird, kannst du es natürlich auch in C++ übersetzen, aber wie gesagt, dafür brauchst du im Grunde immer noch nicht das SDK, du kannst ja die Funktion, die Metin da called, die Python Scripte parsed einfach in deinem Code als Funktionspointer speichern.

Du kannst natürlich auch ein SDK zum Einbetten von Python nutzen, dann musst du aber darauf achten, dass es die gleiche Version hat und es genau so interpretiert, wie es die Engine von Metin tut. Dann kannst du ja einfach herausfinden, an welcher Stelle Metin den relevanten Parameter für die Identifikation des Scripts übergibt (irgendwie muss der Parser ja wissen, welches Script er parsen muss) und halt den auch in deinem Code übergeben.