Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Seite 13 von 21 « Erste ... 269101112131415161720 ... Letzte »
Ergebnis 241 bis 260 von 410
  1. Homepage besuchen Beiträge anzeigen #241
    Clockwork Origins Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.826
     
    Bonne6 ist offline
    Zitat Zitat von Bonne6 Beitrag anzeigen
    Da ich nichts geändert hab wohl aus. Cursor bewegt sich zwar, wenn ich Cursor_Show aufgerufen habe, aber Tastendruck tut eben nichts.
    Hab's jetzt als getestet, wenn ich Maussteuerung aktiviere, dann wird der Klick erkannt, aber dann funktioniert die Bewegung der Maus nicht mehr (zumindest während der Statusscreen offen ist). Gibt's da irgendeine Lösung für? Würde ungern eine andere Taste statt der Maustaste zum Auswählen nehmen.

  2. Beiträge anzeigen #242
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Um ehrlich zu sein: Vermutlich keine schöne Lösung. Vielleicht kannst du den Mausklick aus dem Input-Handler von Gothic rausfischen, aber das ist kompliziert.

  3. Beiträge anzeigen #243
    Ritter Avatar von Zerxes
    Registriert seit
    Aug 2003
    Ort
    Regensburg
    Beiträge
    1.556
     
    Zerxes ist offline
    Zitat Zitat von Milky-Way Beitrag anzeigen
    Was mir gerade so einfällt:
    Wäre es nicht super, die notwendigen Adressen für alle möglichen Funktion, die jemand schon einmal für Hooks rausgesucht hat, zu sammeln und allen zur Verfügung zu stellen?
    Zitat Zitat von Lehona Beitrag anzeigen
    Schreib sie mal in Großbuchstaben.


    Ich habe die IDA-Funktionen übrigens mal hochgeladen, formatiert wie folgt:

    name adresse länge (Alles in hex)

    IDA-Funktionen [...]
    Ich habe erst gestern eine Excel-Tabelle erstellt, gekürzt, inkl. statischer Variablen (wie z.B. oCNpc::player).
    Zudem sind Adresse, Eigenschaften der Funktion (wie Aufrufkonvention) und die Parameter "sauber" getrennt in separaten Spalten.
    Wenn die Liste was für euch taugt, könnt ihr die auch gerne verlinken.
    Die verwendete .exe war die G2 DNdR Report-Version.

    Mal eine Frage:
    Mit der/den Call_?-Funtkon(en) lassen sich doch Engine-Funktionen ansteuern, richtig?
    Soweit ich weiß ist schon einmal jemand auf die Idee gekommen, damit DLLs zu laden.
    Meine Idee wäre jetzt, DLLs zu laden um direkt auf Datei-Funktionen oder WinSock in Daedalus zurückzugreifen.
    Wäre das möglich?
    Angehängte Dateien
    Deutschland - "ein Gefängnis, das du weder riechen, noch schmecken, noch berühren kannst"
    [Bild: ssp-362-60.gif]

  4. Beiträge anzeigen #244
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Ja, das geht (Bzw. ich wüsste nicht warum).

    Wir hatten aber z.B. Probleme, aus bestimmten Engine-Funktionen Dateien zu schreiben mit der WinAPI, wobei das vermutlich daran liegt das schon Datei-Streams offen waren etc.

    Aber eigentlich sollte nichts dagegensprechen.


    Die Funktionsliste ist toll, danke!

  5. Beiträge anzeigen #245
    Veteran Avatar von Ingenieur
    Registriert seit
    Apr 2006
    Ort
    A-MD-BA-PRAHA
    Beiträge
    683
     
    Ingenieur ist offline
    Ich wollte die Tabelle gerade mit PHP automatisiert in eine Skriptdatei überführen, die Funktionen der Art (Pseudo Code)
    Code:
    func $retval $class_short\__$name ($params) {
      foreach ($params as $i) {
         push_$type[$i]($i);
      }
      $conv($address);
      return $return;
    };
    erzeugt.

    Mein Pattern matcht auch ganz gut
    Code:
    (static |virtual )?(float|int|long|unsigned int|unsigned long|void|zSTRING|zSTRING const [&]|$ident [&*]|class $ident [*
    ]|char[*][*]) (__thiscall|__stdcall|__cdecl|__fastcall) ([A-Z_a-z][0-9A-Z_a-z]+)::([A-Z_a-z][0-9A-Z_a-z]+)[(]((float|i
    nt|long|unsigned int|unsigned long|void|zSTRING|zSTRING const [&]|$ident [&*]|class $ident[*]|char[*][*])( float|int|
    long|unsigned int|unsigned long|void|zSTRING|zSTRING const [&]|$ident [&*]|class $ident[*]|char[*][*])*)[)]\s+(0x[0-9
    A-Fa-f]{6})
    In PHP ist es etwas übersichtlicher.
    Code:
    $ident = '[A-Z_a-z][0-9A-Z_a-z]+';
    $type = 'float|int|long|unsigned int|unsigned long|void|zSTRING|zSTRING const [&]|$ident [&*]|class $ident [*]|char [*] [*]';
    $conv = '__thiscall|__stdcall|__cdecl|__fastcall';
    $hnr = '0x[0-9A-Fa-f]{6}';
    
    $pattern = "(static |virtual )?($type) ($conv) ($ident)::($ident)[(](($type)( $type)*)[)]\s+($hnr)";
    Allerdings immer nur einen Parameter. Wenn ich den roten Stern (nach rechts scrollen) durch Plus ersetze sind es immerhin zwei. Aber es müssten ja bis unendlich viele gefunden werden. Könnt ihr sehen warum es nicht klappt?

    Ingenieur
    Zitat Zitat von Dalai Zoll Beitrag anzeigen
    Ich hab ´ne bessere Idee!
    World of Players Usermap
    Geändert von Ingenieur (06.11.2011 um 14:52 Uhr)

  6. Beiträge anzeigen #246
    Ritter Avatar von Zerxes
    Registriert seit
    Aug 2003
    Ort
    Regensburg
    Beiträge
    1.556
     
    Zerxes ist offline
    Zitat Zitat von Ingenieur Beitrag anzeigen
    Code:
    $pattern = "(static |virtual )?($type) ($conv) ($ident)::($ident)[(](($type)( $type)*)[)]\s+($hnr)";
    Wenn ich jetzt Unsinn schreibe, dann bitte ignorieren, kenn mich mit RegEx kaum aus.
    Aber wieso kommt da 2x ($type) vor? Würde nicht einmal mit Stern (beliebig oft) reichen?
    Und haben die Klammern einen Zweck, die sagen mir nichts, kenn nur die geschweiften Klammern "{"?
    Deutschland - "ein Gefängnis, das du weder riechen, noch schmecken, noch berühren kannst"
    [Bild: ssp-362-60.gif]

  7. Beiträge anzeigen #247
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Die Klammern sind meines Wissens da, um später die einzelnen Teile zu identifizieren (Rückgabewert ist ein 2D-Array).

  8. Beiträge anzeigen #248
    Veteran Avatar von Ingenieur
    Registriert seit
    Apr 2006
    Ort
    A-MD-BA-PRAHA
    Beiträge
    683
     
    Ingenieur ist offline
    Ja, die runden Klammern gruppieren.

    Im Ergebnis-Array wird dann einfach durch gezählt 0 - gesamter String, 1 - Inhalt des ersten Paares, 2 - des Zweiten, 3 -, usw. bis 99.

    Das Array ist also 1D. Wenn preg_match_all für alle gefundenen Strings in einem Text verwendet wird ist es dann 2D.

    Und $type ist deshalb zweimal da, um zwischen den $type-s ein Leerzeichen zu platzieren.

    Ich habe es aber nicht hinbekommen, weshalb ich einfach die ganze Klammer matche mit
    Code:
    [(](.*)[)]
    . Das Sortieren und Gruppieren mache ich dann mit PHP.

    Hier ist das Ergebnis der ersten 500 Zeilen soweit. Es ist noch nicht fertig.

    Code:
    /** CCapsFile::Create2D(unsigned long _DDCAPS_DX7 * char *)
     *  __thiscall(0x007C23E9)
     *  Beschreibung hier.
     *  @param b unsigned long
     *  @param c _DDCAPS_DX7 *
     *  @param d char *
     *  @return unsigned long
     */
    func int CCapsFile__Create2D(var CCapsFile a, var int b, var _DDCAPS_DX7 * c, var string d) {
      CALL_intParam(b);
      CALL_StructPtrParam(c);
      CALL_cStringPtrParam(d);
      CALL__thiscall(a, 8135657);
      CallRetValAsint();
    };
    
    /** CCapsFile::CreateFormat(CSurfaceFormatNode *)
     *  __thiscall(0x007C22AD)
     *  Beschreibung hier.
     *  @param b CSurfaceFormatNode *
     *  @return unsigned long
     */
    func int CCapsFile__CreateFormat(var CCapsFile a, var CSurfaceFormatNode * b) {
      CALL_StructPtrParam(b);
      CALL__thiscall(a, 8135341);
      CallRetValAsint();
    };
    
    /** CCapsFile::CreateString(char *)
     *  __thiscall(0x007C21B1)
     *  Beschreibung hier.
     *  @param b char *
     *  @return unsigned long
     */
    func int CCapsFile__CreateString(var CCapsFile a, var string b) {
      CALL_cStringPtrParam(b);
      CALL__thiscall(a, 8135089);
      CallRetValAsint();
    };
    
    /** CCapsFile::CreateVersion(void)
     *  __thiscall(0x007C208D)
     *  Beschreibung hier.
     *  @return unsigned long
     */
    func int CCapsFile__CreateVersion(var CCapsFile a) {
      CALL__thiscall(a, 8134797);
      CallRetValAsint();
    };
    
    /** CCapsFile::FindVersion(void)
     *  __thiscall(0x007C206F)
     *  Beschreibung hier.
     *  @return unsigned long
     */
    func int CCapsFile__FindVersion(var CCapsFile a) {
      CALL__thiscall(a, 8134767);
      CallRetValAsint();
    };
    
    /** CCapsFile::LoadHardwareCaps(CDDrawDeviceNode * CVideoModeNode *)
     *  __thiscall(0x007C2B48)
     *  Beschreibung hier.
     *  @param b CDDrawDeviceNode *
     *  @param c CVideoModeNode *
     *  @return long
     */
    func int CCapsFile__LoadHardwareCaps(var CCapsFile a, var CDDrawDeviceNode * b, var CVideoModeNode * c) {
      CALL_StructPtrParam(b);
      CALL_StructPtrParam(c);
      CALL__thiscall(a, 8137544);
      CallRetValAsint();
    };
    
    /** CCapsFile::LoadSoftwareCaps(CHelInfo *)
     *  __thiscall(0x007C2DE6)
     *  Beschreibung hier.
     *  @param b CHelInfo *
     *  @return long
     */
    func int CCapsFile__LoadSoftwareCaps(var CCapsFile a, var CHelInfo * b) {
      CALL_StructPtrParam(b);
      CALL__thiscall(a, 8138214);
      CallRetValAsint();
    };
    
    /** CCapsFile::Open(void)
     *  __thiscall(0x007C1FEA)
     *  Beschreibung hier.
     *  @return long
     */
    func int CCapsFile__Open(var CCapsFile a) {
      CALL__thiscall(a, 8134634);
      CallRetValAsint();
    };
    
    /** CCapsFile::Parse2D(unsigned long _DDCAPS_DX7 * char * *)
     *  __thiscall(0x007C20F6)
     *  Beschreibung hier.
     *  @param b unsigned long
     *  @param c _DDCAPS_DX7 *
     *  @param d char * *
     *  @return long
     */
    func int CCapsFile__Parse2D(var CCapsFile a, var int b, var _DDCAPS_DX7 * c, var char * * d) {
      CALL_intParam(b);
      CALL_StructPtrParam(c);
      CALL_StructPtrParam(d);
      CALL__thiscall(a, 8134902);
      CallRetValAsint();
    };
    
    /** CCapsFile::SaveHardwareCaps(CDDrawDeviceNode * CVideoModeNode *)
     *  __thiscall(0x007C2714)
     *  Beschreibung hier.
     *  @param b CDDrawDeviceNode *
     *  @param c CVideoModeNode *
     *  @return long
     */
    func int CCapsFile__SaveHardwareCaps(var CCapsFile a, var CDDrawDeviceNode * b, var CVideoModeNode * c) {
      CALL_StructPtrParam(b);
      CALL_StructPtrParam(c);
      CALL__thiscall(a, 8136468);
      CallRetValAsint();
    };
    
    /** CCapsFile::SaveSoftwareCaps(CHelInfo *)
     *  __thiscall(0x007C2570)
     *  Beschreibung hier.
     *  @param b CHelInfo *
     *  @return long
     */
    func int CCapsFile__SaveSoftwareCaps(var CCapsFile a, var CHelInfo * b) {
      CALL_StructPtrParam(b);
      CALL__thiscall(a, 8136048);
      CallRetValAsint();
    };
    
    /** CD3duContext::_ChooseZBuffer(unsigned long unsigned long)
     *  __thiscall(0x007B8DCE)
     *  Beschreibung hier.
     *  @param b unsigned long
     *  @param c unsigned long
     *  @return void
     */
    func int CD3duContext___ChooseZBuffer(var CD3duContext a, var int b, var int c) {
      CALL_intParam(b);
      CALL_intParam(c);
      CALL__thiscall(a, 8097230);
    };
    
    /** CD3duContext::_Create3DDevice(void)
     *  __thiscall(0x007B8D03)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___Create3DDevice(var CD3duContext a) {
      CALL__thiscall(a, 8097027);
    };
    
    /** CD3duContext::_CreateDeviceWindow(void)
     *  __thiscall(0x007B8968)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___CreateDeviceWindow(var CD3duContext a) {
      CALL__thiscall(a, 8096104);
    };
    
    /** CD3duContext::_CreateDXBuffers(void)
     *  __thiscall(0x007B9A80)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___CreateDXBuffers(var CD3duContext a) {
      CALL__thiscall(a, 8100480);
    };
    
    /** CD3duContext::_CreateFullscreenBuffers(void)
     *  __thiscall(0x007B9690)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___CreateFullscreenBuffers(var CD3duContext a) {
      CALL__thiscall(a, 8099472);
    };
    
    /** CD3duContext::_CreateOffScreenBuffers(void)
     *  __thiscall(0x007B98D9)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___CreateOffScreenBuffers(var CD3duContext a) {
      CALL__thiscall(a, 8100057);
    };
    
    /** CD3duContext::_CreatePalette(void)
     *  __thiscall(0x007B8B0C)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___CreatePalette(var CD3duContext a) {
      CALL__thiscall(a, 8096524);
    };
    
    /** CD3duContext::_CreateWindowedBuffers(void)
     *  __thiscall(0x007B9779)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___CreateWindowedBuffers(var CD3duContext a) {
      CALL__thiscall(a, 8099705);
    };
    
    /** CD3duContext::_CreateZBuffer(void)
     *  __thiscall(0x007B8F3E)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___CreateZBuffer(var CD3duContext a) {
      CALL__thiscall(a, 8097598);
    };
    
    /** CD3duContext::_DestroyDeviceWindow(void)
     *  __thiscall(0x007B8AD2)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___DestroyDeviceWindow(var CD3duContext a) {
      CALL__thiscall(a, 8096466);
    };
    
    /** CD3duContext::_DestroyDXBuffers(int)
     *  __thiscall(0x007B9057)
     *  Beschreibung hier.
     *  @param b int
     *  @return void
     */
    func int CD3duContext___DestroyDXBuffers(var CD3duContext a, var int b) {
      CALL_intParam(b);
      CALL__thiscall(a, 8097879);
    };
    
    /** static CD3duContext::_EnumSurfacesCallback2(IDirectDrawSurface7 * _DDSURFACEDESC2 * void *)
     *  __stdcall(0x007B9170)
     *  Beschreibung hier.
     *  @param a IDirectDrawSurface7 *
     *  @param b _DDSURFACEDESC2 *
     *  @param c void *
     *  @return long
     */
    func int CD3duContext___EnumSurfacesCallback2(var IDirectDrawSurface7 * a, var _DDSURFACEDESC2 * b, var void * c) {
      CALL_StructPtrParam(a);
      CALL_StructPtrParam(b);
      CALL_StructPtrParam(c);
      CALL__stdcall(8098160);
      CallRetValAsint();
    };
    
    /** CD3duContext::_InitCooperativeLevel(void)
     *  __thiscall(0x007B8AE7)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___InitCooperativeLevel(var CD3duContext a) {
      CALL__thiscall(a, 8096487);
    };
    
    /** CD3duContext::_InitViewport(void)
     *  __thiscall(0x007B8C86)
     *  Beschreibung hier.
     *  @return void
     */
    func int CD3duContext___InitViewport(var CD3duContext a) {
      CALL__thiscall(a, 8096902);
    };
    
    /** virtual CD3duContext::AddRef(void)
     *  __stdcall(0x007B83C7)
     *  Beschreibung hier.
     *  @return unsigned long
     */
    func int CD3duContext__AddRef() {
      CALL__stdcall(8094663);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::Clear(unsigned long)
     *  __stdcall(0x007B885C)
     *  Beschreibung hier.
     *  @param a unsigned long
     *  @return long
     */
    func int CD3duContext__Clear(var int a) {
      CALL_intParam(a);
      CALL__stdcall(8095836);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::DrawDebugText(float float unsigned long char *)
     *  __stdcall(0x007B94AC)
     *  Beschreibung hier.
     *  @param a float
     *  @param b float
     *  @param c unsigned long
     *  @param d char *
     *  @return long
     */
    func int CD3duContext__DrawDebugText(var int a, var int b, var int c, var string d) {
      CALL_floatParam(a);
      CALL_floatParam(b);
      CALL_intParam(c);
      CALL_cStringPtrParam(d);
      CALL__stdcall(8098988);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::GetBufferSize(unsigned long * unsigned long *)
     *  __stdcall(0x007B9295)
     *  Beschreibung hier.
     *  @param a unsigned long *
     *  @param b unsigned long *
     *  @return long
     */
    func int CD3duContext__GetBufferSize(var unsigned long * a, var unsigned long * b) {
      CALL_intParam(a);
      CALL_intParam(b);
      CALL__stdcall(8098453);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::GetCreationFlags(void)
     *  __stdcall(0x007B92ED)
     *  Beschreibung hier.
     *  @return unsigned long
     */
    func int CD3duContext__GetCreationFlags() {
      CALL__stdcall(8098541);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::GetDeviceIndex(unsigned long * unsigned long *)
     *  __stdcall(0x007B922C)
     *  Beschreibung hier.
     *  @param a unsigned long *
     *  @param b unsigned long *
     *  @return long
     */
    func int CD3duContext__GetDeviceIndex(var unsigned long * a, var unsigned long * b) {
      CALL_intParam(a);
      CALL_intParam(b);
      CALL__stdcall(8098348);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::GetNumBackBuffers(void)
     *  __stdcall(0x007B924F)
     *  Beschreibung hier.
     *  @return unsigned long
     */
    func int CD3duContext__GetNumBackBuffers() {
      CALL__stdcall(8098383);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::GetNumBits(unsigned long * unsigned long * unsigned long * unsigned long *)
     *  __stdcall(0x007B9259)
     *  Beschreibung hier.
     *  @param a unsigned long *
     *  @param b unsigned long *
     *  @param c unsigned long *
     *  @param d unsigned long *
     *  @return long
     */
    func int CD3duContext__GetNumBits(var unsigned long * a, var unsigned long * b, var unsigned long * c, var unsigned long * d) {
      CALL_intParam(a);
      CALL_intParam(b);
      CALL_intParam(c);
      CALL_intParam(d);
      CALL__stdcall(8098393);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::GetRefreshRate(void)
     *  __stdcall(0x007B92B8)
     *  Beschreibung hier.
     *  @return unsigned long
     */
    func int CD3duContext__GetRefreshRate() {
      CALL__stdcall(8098488);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::QueryInterface(_GUID const & void * *)
     *  __stdcall(0x007B93CC)
     *  Beschreibung hier.
     *  @param a _GUID const &
     *  @param b void * *
     *  @return long
     */
    func int CD3duContext__QueryInterface(var int a, var void * * b) {
      CALL__GUID const &Param(a);
      CALL_StructPtrParam(b);
      CALL__stdcall(8098764);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::Release(void)
     *  __stdcall(0x007B83D4)
     *  Beschreibung hier.
     *  @return unsigned long
     */
    func int CD3duContext__Release() {
      CALL__stdcall(8094676);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::Resize(unsigned long unsigned long)
     *  __stdcall(0x007B9AF2)
     *  Beschreibung hier.
     *  @param a unsigned long
     *  @param b unsigned long
     *  @return long
     */
    func int CD3duContext__Resize(var int a, var int b) {
      CALL_intParam(a);
      CALL_intParam(b);
      CALL__stdcall(8100594);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::RestoreSurfaces(void)
     *  __stdcall(0x007B84E3)
     *  Beschreibung hier.
     *  @return long
     */
    func int CD3duContext__RestoreSurfaces() {
      CALL__stdcall(8094947);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::SetClearColor(unsigned long)
     *  __stdcall(0x007B88FF)
     *  Beschreibung hier.
     *  @param a unsigned long
     *  @return long
     */
    func int CD3duContext__SetClearColor(var int a) {
      CALL_intParam(a);
      CALL__stdcall(8095999);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::SetClearDepth(float)
     *  __stdcall(0x007B8912)
     *  Beschreibung hier.
     *  @param a float
     *  @return long
     */
    func int CD3duContext__SetClearDepth(var int a) {
      CALL_floatParam(a);
      CALL__stdcall(8096018);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::SetClearStencil(unsigned long)
     *  __stdcall(0x007B8925)
     *  Beschreibung hier.
     *  @param a unsigned long
     *  @return long
     */
    func int CD3duContext__SetClearStencil(var int a) {
      CALL_intParam(a);
      CALL__stdcall(8096037);
      CallRetValAsint();
    };
    
    /** virtual CD3duContext::UpdateFrame(unsigned long)
     *  __stdcall(0x007B8562)
     *  Beschreibung hier.
     *  @param a unsigned long
     *  @return long
     */
    func int CD3duContext__UpdateFrame(var int a) {
      CALL_intParam(a);
      CALL__stdcall(8095074);
      CallRetValAsint();
    };
    
    /** CD3duContextList::DestroyD3duContext(CD3duContext *)
     *  __thiscall(0x007B8074)
     *  Beschreibung hier.
     *  @param b CD3duContext *
     *  @return void
     */
    func int CD3duContextList__DestroyD3duContext(var CD3duContextList a, var CD3duContext * b) {
      CALL_StructPtrParam(b);
      CALL__thiscall(a, 8093812);
    };
    Ingenieur
    Zitat Zitat von Dalai Zoll Beitrag anzeigen
    Ich hab ´ne bessere Idee!
    World of Players Usermap

  9. Beiträge anzeigen #249
    Ritter Avatar von Zerxes
    Registriert seit
    Aug 2003
    Ort
    Regensburg
    Beiträge
    1.556
     
    Zerxes ist offline
    Wie wärs statt...
    Code:
    (($type)( $type)*)
    ...mit:
    Code:
    ([($type)+( $type)*]*)
    Deutschland - "ein Gefängnis, das du weder riechen, noch schmecken, noch berühren kannst"
    [Bild: ssp-362-60.gif]

  10. Beiträge anzeigen #250
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.244
     
    Milky-Way ist offline
    Ich tue mich gerade schwer zu verstehen, wofür man die Liste dann benutzen kann. Bzw. ich verstehe, wofür man die Excel-Liste nutzen kann, aber was bringt die Funktionsliste?
    Könnte man irgendwie in die Excel-Liste auch gleich noch die Länge des ersten Befehls einbinden (die man ja für Hooks braucht) oder möchte jemand das Problem gleich ganz beseitigen? Lehona hatte, glaube ich, einmal angedeutet, dass dieser Parameter im Prinzip gar nicht notwendig sei (bzw. die Funktion die Länge ermitteln könnte).

    Und um das Hooken noch mehr zu vereinfachen, könnte man doch bestimmt auch automatisiert die Hex-Adresse umwandeln, oder? Wenn man da auf einen Schwung alle macht und sich dann die Liste anguckt, ist das ja schon deutlich bequemer, als jedes Mal einen Konverter zu bemühen.

    Wenn es all das gäbe, dann könnte man sogar vergleichsweise schnell Hooks an unterschiedlichen Stellen ausprobieren, bis man die richtige gefunden hat.

  11. Beiträge anzeigen #251
    Ritter Avatar von Zerxes
    Registriert seit
    Aug 2003
    Ort
    Regensburg
    Beiträge
    1.556
     
    Zerxes ist offline
    Zitat Zitat von Milky-Way Beitrag anzeigen
    Ich tue mich gerade schwer zu verstehen, wofür man die Liste dann benutzen kann. Bzw. ich verstehe, wofür man die Excel-Liste nutzen kann, aber was bringt die Funktionsliste?
    Könnte man irgendwie in die Excel-Liste auch gleich noch die Länge des ersten Befehls einbinden (die man ja für Hooks braucht) oder möchte jemand das Problem gleich ganz beseitigen? Lehona hatte, glaube ich, einmal angedeutet, dass dieser Parameter im Prinzip gar nicht notwendig sei (bzw. die Funktion die Länge ermitteln könnte).

    Und um das Hooken noch mehr zu vereinfachen, könnte man doch bestimmt auch automatisiert die Hex-Adresse umwandeln, oder? Wenn man da auf einen Schwung alle macht und sich dann die Liste anguckt, ist das ja schon deutlich bequemer, als jedes Mal einen Konverter zu bemühen.

    Wenn es all das gäbe, dann könnte man sogar vergleichsweise schnell Hooks an unterschiedlichen Stellen ausprobieren, bis man die richtige gefunden hat.
    Naja, die Liste ist eben dafür da, um sich entweder schneller als mit IDA die Adressen zu besorgen, oder gleich wie Ingenieur die Liste in Code umzuwandeln.
    Verstehe nicht, wieso gerade du die Frage stellst, da ja du so eine Liste verlangt hast. Oder sprichst du von etwas spezifischem?
    Wenn ihr die Länge der/des ersten Befehl(e) braucht, könnte ich die vll. noch hinzufügen.

    Was die Hex-Adresse angeht, weiß ich nicht, was ihr da braucht. Geht es nur darum, dass ihr Dezimal-Werte braucht?
    Diese Umwandlung sollte man direkt in Excel vornehmen können, da gibt es soweit ich weiß, eine Funktion.
    Deutschland - "ein Gefängnis, das du weder riechen, noch schmecken, noch berühren kannst"
    [Bild: ssp-362-60.gif]

  12. Beiträge anzeigen #252
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Prinzipiell ist es möglich, die Hook kurzeitig zu fixen und danach wieder zu hooken (Auch wenn ich mir noch nicht ganz sicher bin wie ich das machen würde... man müsste vermutlich die Rücksprungadresse "hacken" und hoffen, dass die Funktion nicht rekursiv arbeitet). Finde ich persönlich aber umständlich, IDA zu installieren und eben kurz nachzuschauen dauert nicht lange (Die erste Analyse dauert ein wenig, aber das ist halt einmalig).

  13. Beiträge anzeigen #253
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.244
     
    Milky-Way ist offline
    Zitat Zitat von Zerxes Beitrag anzeigen
    Naja, die Liste ist eben dafür da, um sich entweder schneller als mit IDA die Adressen zu besorgen, oder gleich wie Ingenieur die Liste in Code umzuwandeln.
    Verstehe nicht, wieso gerade du die Frage stellst, da ja du so eine Liste verlangt hast. Oder sprichst du von etwas spezifischem?
    Ich hatte mich zu verworren ausgedrückt. Ich weiß wozu die Liste ist, sehe aber nicht direkt, wie man den Code von Ingenieur verwenden soll.

    Zitat Zitat von Zerxes Beitrag anzeigen
    Wenn ihr die Länge der/des ersten Befehl(e) braucht, könnte ich die vll. noch hinzufügen.
    Das wäre sehr praktisch
    (Wie war das noch mit der Mindestlänge der zu kopierenden Befehle?)

    Zitat Zitat von Zerxes Beitrag anzeigen
    Was die Hex-Adresse angeht, weiß ich nicht, was ihr da braucht. Geht es nur darum, dass ihr Dezimal-Werte braucht?
    Ja.

    @ Lehona:
    ich habe wirklich keine Ahnung, wie aufwändig es ist, das umzusetzen. Aber für jemanden, der nicht sonderlich geübt mit IDA ist, dauert es schon so seine Zeit, alles rauszusuchen. Wenn Zerxes das aber noch mit in die Liste aufnimmt, dann ist es ja nur noch eine Frage, eine Zahl mehr zu kopieren, damit bin ich dann auch schon zufrieden
    Geändert von Milky-Way (06.11.2011 um 22:45 Uhr)

  14. Beiträge anzeigen #254
    Ritter Avatar von Zerxes
    Registriert seit
    Aug 2003
    Ort
    Regensburg
    Beiträge
    1.556
     
    Zerxes ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Prinzipiell ist es möglich, die Hook kurzeitig zu fixen und danach wieder zu hooken (Auch wenn ich mir noch nicht ganz sicher bin wie ich das machen würde... man müsste vermutlich die Rücksprungadresse "hacken" und hoffen, dass die Funktion nicht rekursiv arbeitet). Finde ich persönlich aber umständlich, IDA zu installieren und eben kurz nachzuschauen dauert nicht lange (Die erste Analyse dauert ein wenig, aber das ist halt einmalig).
    Aufwändig ist das grundsätzlich nicht, allerdings wäre es wohl angenehmer für alle, eine Liste aller Funktionen inkl. "Hook-Daten" für die beiden Gothic-Teile zu haben.

    EDIT: Ich werde, wenn möglich morgen, die benötigten Daten hinzufügen. Sollte kein allzu großes Problem sein, da ich noch ne Disassembler-Lib rumliegen habe.
    Deutschland - "ein Gefängnis, das du weder riechen, noch schmecken, noch berühren kannst"
    [Bild: ssp-362-60.gif]

  15. Beiträge anzeigen #255
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Die Instruktion muss mind. 5 Byte haben (jmp + Offset), also evtl. mehrere Instruktionen zusammen.

  16. Beiträge anzeigen #256
    Ritter Avatar von Zerxes
    Registriert seit
    Aug 2003
    Ort
    Regensburg
    Beiträge
    1.556
     
    Zerxes ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Die Instruktion muss mind. 5 Byte haben (jmp + Offset), also evtl. mehrere Instruktionen zusammen.
    Klar, ich habe Erfahrung mit Hooks, siehe GothicX (auch wenn's nie released wurde).
    Deutschland - "ein Gefängnis, das du weder riechen, noch schmecken, noch berühren kannst"
    [Bild: ssp-362-60.gif]

  17. Beiträge anzeigen #257
    Veteran Avatar von Ingenieur
    Registriert seit
    Apr 2006
    Ort
    A-MD-BA-PRAHA
    Beiträge
    683
     
    Ingenieur ist offline
    Zitat Zitat von Zerxes Beitrag anzeigen
    Wie wärs statt...
    Code:
    (($type)( $type)*)
    ...mit:
    Code:
    ([($type)+( $type)*]*)
    Du hast ja schon gesagt, dass die Regexausdrücke nicht ganz dein Fall sind. Die eckigen Klammern sind dazu da, Zeichenklassen zu definieren und dadurch aus den Sonderzeichen "(": runde Klammer auf, oder ")": runde Klammer zu, Literale zu machen, die genau so im Ergebnis vorhanden sein müssen.

    Zitat Zitat von Lehona Beitrag anzeigen
    Die erste Analyse dauert ein wenig, aber das ist halt einmalig[...]
    Lässt sich das nicht automatisieren, für den Fall dass man nur von einem Sprung oder schieben in ein Register oder auf den Stack ausgeht?

    Zitat Zitat von Zerxes Beitrag anzeigen
    Aufwändig ist das grundsätzlich nicht, allerdings wäre es wohl angenehmer für alle, eine Liste aller Funktionen inkl. "Hook-Daten" für die beiden Gothic-Teile zu haben.

    EDIT: Ich werde, wenn möglich morgen, die benötigten Daten hinzufügen. Sollte kein allzu großes Problem sein, da ich noch ne Disassembler-Lib rumliegen habe.
    Am angenehmsten wäre es einfach bereits definierte Funktionen aufrufen zu können.

    Es gibt hier einen Auszug. Allerdings müssen zur Verwendung noch ein paar Funktionen definiert werden. Jedenfalls prinzipiell würde ich es mir auf diese Weise vorstellen.

    Für alle, die automatisiert Hook-Funktionen oder Engine-Calls nutzen möchten, das php-Skript gepackt als ZIP.

    Grüße, Ingenieur
    Code:
    /** oCInfo::AddChoice(zSTRING int)
     *  __thiscall(0x00703B20)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @param b zSTRING
     *  @param c int
     *  @return void
     */
    func void Info__AddChoice(var C_INFO a, var string b, var int c) {
      CALL_StructParam(MEM_InstToPtr(b), sizeof(b));
      CALL_IntParam(c);
      CALL__thiscall(MEM_InstToPtr(a), 7355168);
    };
    
    func int Hook_oCInfo__AddChoice(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7355168, NextFullInstrSize(7355168), b.name);
        return !(1 < 0);
    };
    
    /** virtual oCInfo::Archive(zCArchiver &)
     *  __thiscall(0x00703990)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @param b zCArchiver &
     *  @return void
     */
    func void Info__Archive(var C_INFO a, var zCPar_Symbol b) {
      CALL_RefParam(b);
      CALL__thiscall(MEM_InstToPtr(a), 7354768);
    };
    
    func int Hook_oCInfo__Archive(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354768, NextFullInstrSize(7354768), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::DoCheck(void)
     *  __thiscall(0x007036F0)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return int
     */
    func int Info__DoCheck(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7354096);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfo__DoCheck(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354096, NextFullInstrSize(7354096), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::GetConditionFunc(void)
     *  __thiscall(0x007038F0)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return int
     */
    func int Info__GetConditionFunc(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7354608);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfo__GetConditionFunc(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354608, NextFullInstrSize(7354608), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::GetDataAdr(void)
     *  __thiscall(0x00703930)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return void *
     */
    func C_VOID Info__GetDataAdr(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7354672);
      Call_RetValAsPtr();
    };
    
    func int Hook_oCInfo__GetDataAdr(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354672, NextFullInstrSize(7354672), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::GetDataSize(void)
     *  __thiscall(0x00703920)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return int
     */
    func int Info__GetDataSize(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7354656);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfo__GetDataSize(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354656, NextFullInstrSize(7354656), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::GetInstance(void)
     *  __thiscall(0x007036E0)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return int
     */
    func int Info__GetInstance(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7354080);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfo__GetInstance(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354080, NextFullInstrSize(7354080), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::GetNpcID(void)
     *  __thiscall(0x007038E0)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return int
     */
    func int Info__GetNpcID(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7354592);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfo__GetNpcID(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354592, NextFullInstrSize(7354592), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::GetText(void)
     *  __thiscall(0x00703940)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return zSTRING &
     */
    func zCPar_Symbol Info__GetText(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7354688);
      Call_RetValAsRef();
    };
    
    func int Hook_oCInfo__GetText(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354688, NextFullInstrSize(7354688), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::Info(void)
     *  __thiscall(0x00703970)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return void
     */
    func void Info__Info(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7354736);
    };
    
    func int Hook_oCInfo__Info(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354736, NextFullInstrSize(7354736), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::InfoConditions(void)
     *  __thiscall(0x00703950)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return int
     */
    func int Info__InfoConditions(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7354704);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfo__InfoConditions(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354704, NextFullInstrSize(7354704), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::RemoveAllChoices(void)
     *  __thiscall(0x00703D70)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return void
     */
    func void Info__RemoveAllChoices(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7355760);
    };
    
    func int Hook_oCInfo__RemoveAllChoices(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7355760, NextFullInstrSize(7355760), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::RemoveChoice(zSTRING)
     *  __thiscall(0x00703C20)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @param b zSTRING
     *  @return void
     */
    func void Info__RemoveChoice(var C_INFO a, var string b) {
      CALL_StructParam(MEM_InstToPtr(b), sizeof(b));
      CALL__thiscall(MEM_InstToPtr(a), 7355424);
    };
    
    func int Hook_oCInfo__RemoveChoice(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7355424, NextFullInstrSize(7355424), b.name);
        return !(1 < 0);
    };
    
    /** virtual oCInfo::RestoreParserInstance(void)
     *  __thiscall(0x00703B00)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return void
     */
    func void Info__RestoreParserInstance(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7355136);
    };
    
    func int Hook_oCInfo__RestoreParserInstance(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7355136, NextFullInstrSize(7355136), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::SetInstance(int)
     *  __thiscall(0x00703540)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @param b int
     *  @return void
     */
    func void Info__SetInstance(var C_INFO a, var int b) {
      CALL_IntParam(b);
      CALL__thiscall(MEM_InstToPtr(a), 7353664);
    };
    
    func int Hook_oCInfo__SetInstance(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7353664, NextFullInstrSize(7353664), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::SetTold(int)
     *  __thiscall(0x00703910)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @param b int
     *  @return void
     */
    func void Info__SetTold(var C_INFO a, var int b) {
      CALL_IntParam(b);
      CALL__thiscall(MEM_InstToPtr(a), 7354640);
    };
    
    func int Hook_oCInfo__SetTold(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354640, NextFullInstrSize(7354640), b.name);
        return !(1 < 0);
    };
    
    /** virtual oCInfo::Unarchive(zCArchiver &)
     *  __thiscall(0x007039D0)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @param b zCArchiver &
     *  @return void
     */
    func void Info__Unarchive(var C_INFO a, var zCPar_Symbol b) {
      CALL_RefParam(b);
      CALL__thiscall(MEM_InstToPtr(a), 7354832);
    };
    
    func int Hook_oCInfo__Unarchive(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354832, NextFullInstrSize(7354832), b.name);
        return !(1 < 0);
    };
    
    /** oCInfo::WasTold(void)
     *  __thiscall(0x00703900)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return int
     */
    func int Info__WasTold(var C_INFO a) {
      CALL__thiscall(MEM_InstToPtr(a), 7354624);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfo__WasTold(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7354624, NextFullInstrSize(7354624), b.name);
        return !(1 < 0);
    };
    
    /** virtual oCInfoManager::Archive(zCArchiver &)
     *  __thiscall(0x007031E0)
     *  Beschreibung hier.
     *  @param a oCInfoManager *
     *  @param b zCArchiver &
     *  @return void
     */
    func void oCInfoManager__Archive(var oCInfoManager a, var zCPar_Symbol b) {
      CALL_RefParam(b);
      CALL__thiscall(MEM_InstToPtr(a), 7352800);
    };
    
    func int Hook_oCInfoManager__Archive(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7352800, NextFullInstrSize(7352800), b.name);
        return !(1 < 0);
    };
    
    /** static oCInfoManager::CompareInfos(oCInfo * oCInfo *)
     *  __cdecl(0x007026F0)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @param b oCInfo *
     *  @return int
     */
    func int oCInfoManager__CompareInfos(var C_INFO a, var C_INFO b) {
      CALL_PtrParam(a);
      CALL_PtrParam(b);
      CALL__cdecl(7350000);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfoManager__CompareInfos(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7350000, NextFullInstrSize(7350000), b.name);
        return !(1 < 0);
    };
    
    /** oCInfoManager::GetInfoCount(oCNpc * oCNpc *)
     *  __thiscall(0x00702940)
     *  Beschreibung hier.
     *  @param a oCInfoManager *
     *  @param b oCNpc *
     *  @param c oCNpc *
     *  @return int
     */
    func int oCInfoManager__GetInfoCount(var oCInfoManager a, var C_NPC b, var C_NPC c) {
      CALL_PtrParam(b);
      CALL_PtrParam(c);
      CALL__thiscall(MEM_InstToPtr(a), 7350592);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfoManager__GetInfoCount(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7350592, NextFullInstrSize(7350592), b.name);
        return !(1 < 0);
    };
    
    /** oCInfoManager::GetInfoCountImportant(oCNpc * oCNpc *)
     *  __thiscall(0x00702AA0)
     *  Beschreibung hier.
     *  @param a oCInfoManager *
     *  @param b oCNpc *
     *  @param c oCNpc *
     *  @return int
     */
    func int oCInfoManager__GetInfoCountImportant(var oCInfoManager a, var C_NPC b, var C_NPC c) {
      CALL_PtrParam(b);
      CALL_PtrParam(c);
      CALL__thiscall(MEM_InstToPtr(a), 7350944);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfoManager__GetInfoCountImportant(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7350944, NextFullInstrSize(7350944), b.name);
        return !(1 < 0);
    };
    
    /** oCInfoManager::GetInfoCountUnimportant(oCNpc * oCNpc *)
     *  __thiscall(0x00702C00)
     *  Beschreibung hier.
     *  @param a oCInfoManager *
     *  @param b oCNpc *
     *  @param c oCNpc *
     *  @return int
     */
    func int oCInfoManager__GetInfoCountUnimportant(var oCInfoManager a, var C_NPC b, var C_NPC c) {
      CALL_PtrParam(b);
      CALL_PtrParam(c);
      CALL__thiscall(MEM_InstToPtr(a), 7351296);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfoManager__GetInfoCountUnimportant(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7351296, NextFullInstrSize(7351296), b.name);
        return !(1 < 0);
    };
    
    /** oCInfoManager::GetInformation(int)
     *  __thiscall(0x00702910)
     *  Beschreibung hier.
     *  @param a oCInfoManager *
     *  @param b int
     *  @return oCInfo *
     */
    func C_INFO oCInfoManager__GetInformation(var oCInfoManager a, var int b) {
      CALL_IntParam(b);
      CALL__thiscall(MEM_InstToPtr(a), 7350544);
      Call_RetValAsPtr();
    };
    
    func int Hook_oCInfoManager__GetInformation(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7350544, NextFullInstrSize(7350544), b.name);
        return !(1 < 0);
    };
    
    /** oCInfoManager::GetInformation(oCNpc * oCNpc * int)
     *  __thiscall(0x007027B0)
     *  Beschreibung hier.
     *  @param a oCInfoManager *
     *  @param b oCNpc *
     *  @param c oCNpc *
     *  @param d int
     *  @return oCInfo *
     */
    func C_INFO oCInfoManager__GetInformation(var oCInfoManager a, var C_NPC b, var C_NPC c, var int d) {
      CALL_PtrParam(b);
      CALL_PtrParam(c);
      CALL_IntParam(d);
      CALL__thiscall(MEM_InstToPtr(a), 7350192);
      Call_RetValAsPtr();
    };
    
    func int Hook_oCInfoManager__GetInformation(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7350192, NextFullInstrSize(7350192), b.name);
        return !(1 < 0);
    };
    
    /** oCInfoManager::GetInfoUnimportant(oCNpc * oCNpc * int)
     *  __thiscall(0x00703030)
     *  Beschreibung hier.
     *  @param a oCInfoManager *
     *  @param b oCNpc *
     *  @param c oCNpc *
     *  @param d int
     *  @return oCInfo *
     */
    func C_INFO oCInfoManager__GetInfoUnimportant(var oCInfoManager a, var C_NPC b, var C_NPC c, var int d) {
      CALL_PtrParam(b);
      CALL_PtrParam(c);
      CALL_IntParam(d);
      CALL__thiscall(MEM_InstToPtr(a), 7352368);
      Call_RetValAsPtr();
    };
    
    func int Hook_oCInfoManager__GetInfoUnimportant(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7352368, NextFullInstrSize(7352368), b.name);
        return !(1 < 0);
    };
    
    /** oCInfoManager::InformationTold(int)
     *  __thiscall(0x007031A0)
     *  Beschreibung hier.
     *  @param a oCInfoManager *
     *  @param b int
     *  @return int
     */
    func int oCInfoManager__InformationTold(var oCInfoManager a, var int b) {
      CALL_IntParam(b);
      CALL__thiscall(MEM_InstToPtr(a), 7352736);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInfoManager__InformationTold(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7352736, NextFullInstrSize(7352736), b.name);
        return !(1 < 0);
    };
    
    /** virtual oCInfoManager::RestoreParserInstances(void)
     *  __thiscall(0x00703390)
     *  Beschreibung hier.
     *  @param a oCInfoManager *
     *  @return void
     */
    func void oCInfoManager__RestoreParserInstances(var oCInfoManager a) {
      CALL__thiscall(MEM_InstToPtr(a), 7353232);
    };
    
    func int Hook_oCInfoManager__RestoreParserInstances(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(7353232, NextFullInstrSize(7353232), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::CameraRefresh(void)
     *  __fastcall(0x00661590)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__CameraRefresh() {
      CALL__fastcall(0, 0, 6690192);
    };
    
    func int Hook_oCInformationManager__CameraRefresh(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6690192, NextFullInstrSize(6690192), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::CameraStart(void)
     *  __fastcall(0x006613A0)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__CameraStart() {
      CALL__fastcall(0, 0, 6689696);
    };
    
    func int Hook_oCInformationManager__CameraStart(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6689696, NextFullInstrSize(6689696), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::CameraStop(void)
     *  __fastcall(0x00661520)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__CameraStop() {
      CALL__fastcall(0, 0, 6690080);
    };
    
    func int Hook_oCInformationManager__CameraStop(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6690080, NextFullInstrSize(6690080), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::CollectChoices(oCInfo *)
     *  __fastcall(0x00661CD0)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return int
     */
    func int oCInformationManager__CollectChoices(var C_INFO a) {
      CALL__fastcall(a, 0, 6692048);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInformationManager__CollectChoices(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6692048, NextFullInstrSize(6692048), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::CollectInfos(void)
     *  __fastcall(0x00661AA0)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__CollectInfos() {
      CALL__fastcall(0, 0, 6691488);
    };
    
    func int Hook_oCInformationManager__CollectInfos(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6691488, NextFullInstrSize(6691488), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::Exit(void)
     *  __fastcall(0x00661240)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__Exit() {
      CALL__fastcall(0, 0, 6689344);
    };
    
    func int Hook_oCInformationManager__Exit(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6689344, NextFullInstrSize(6689344), b.name);
        return !(1 < 0);
    };
    
    /** static oCInformationManager::GetInformationManager(void)
     *  __cdecl(0x0065F790)
     *  Beschreibung hier.
     *  @return oCInformationManager &
     */
    func zCPar_Symbol oCInformationManager__GetInformationManager() {
      CALL__cdecl(6682512);
      Call_RetValAsRef();
    };
    
    func int Hook_oCInformationManager__GetInformationManager(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6682512, NextFullInstrSize(6682512), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::HasFinished(void)
     *  __fastcall(0x006609D0)
     *  Beschreibung hier.
     *  @return int
     */
    func int oCInformationManager__HasFinished() {
      CALL__fastcall(0, 0, 6687184);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInformationManager__HasFinished(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6687184, NextFullInstrSize(6687184), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::InfoWaitForEnd(void)
     *  __fastcall(0x00661990)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__InfoWaitForEnd() {
      CALL__fastcall(0, 0, 6691216);
    };
    
    func int Hook_oCInformationManager__InfoWaitForEnd(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6691216, NextFullInstrSize(6691216), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnChoice(int)
     *  __fastcall(0x00662780)
     *  Beschreibung hier.
     *  @param a int
     *  @return void
     */
    func void oCInformationManager__OnChoice(var int a) {
      CALL__fastcall(a, 0, 6694784);
    };
    
    func int Hook_oCInformationManager__OnChoice(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6694784, NextFullInstrSize(6694784), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnChoice(oCInfoChoice *)
     *  __fastcall(0x006629A0)
     *  Beschreibung hier.
     *  @param a oCInfoChoice *
     *  @return void
     */
    func void oCInformationManager__OnChoice(var oCInfoChoice a) {
      CALL__fastcall(a, 0, 6695328);
    };
    
    func int Hook_oCInformationManager__OnChoice(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6695328, NextFullInstrSize(6695328), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnChoiceBegin(void)
     *  __fastcall(0x00662570)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__OnChoiceBegin() {
      CALL__fastcall(0, 0, 6694256);
    };
    
    func int Hook_oCInformationManager__OnChoiceBegin(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6694256, NextFullInstrSize(6694256), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnChoiceEnd(void)
     *  __fastcall(0x00662B90)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__OnChoiceEnd() {
      CALL__fastcall(0, 0, 6695824);
    };
    
    func int Hook_oCInformationManager__OnChoiceEnd(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6695824, NextFullInstrSize(6695824), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnExit(void)
     *  __fastcall(0x006630D0)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__OnExit() {
      CALL__fastcall(0, 0, 6697168);
    };
    
    func int Hook_oCInformationManager__OnExit(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6697168, NextFullInstrSize(6697168), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnImportantBegin(void)
     *  __fastcall(0x00661DB0)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__OnImportantBegin() {
      CALL__fastcall(0, 0, 6692272);
    };
    
    func int Hook_oCInformationManager__OnImportantBegin(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6692272, NextFullInstrSize(6692272), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnImportantEnd(void)
     *  __fastcall(0x00661E90)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__OnImportantEnd() {
      CALL__fastcall(0, 0, 6692496);
    };
    
    func int Hook_oCInformationManager__OnImportantEnd(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6692496, NextFullInstrSize(6692496), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnInfo(int)
     *  __fastcall(0x006620B0)
     *  Beschreibung hier.
     *  @param a int
     *  @return void
     */
    func void oCInformationManager__OnInfo(var int a) {
      CALL__fastcall(a, 0, 6693040);
    };
    
    func int Hook_oCInformationManager__OnInfo(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6693040, NextFullInstrSize(6693040), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnInfo(oCInfo *)
     *  __fastcall(0x00662290)
     *  Beschreibung hier.
     *  @param a oCInfo *
     *  @return void
     */
    func void oCInformationManager__OnInfo(var C_INFO a) {
      CALL__fastcall(a, 0, 6693520);
    };
    
    func int Hook_oCInformationManager__OnInfo(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6693520, NextFullInstrSize(6693520), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnInfoBegin(void)
     *  __fastcall(0x00661FF0)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__OnInfoBegin() {
      CALL__fastcall(0, 0, 6692848);
    };
    
    func int Hook_oCInformationManager__OnInfoBegin(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6692848, NextFullInstrSize(6692848), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnInfoEnd(void)
     *  __fastcall(0x00662CF0)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__OnInfoEnd() {
      CALL__fastcall(0, 0, 6696176);
    };
    
    func int Hook_oCInformationManager__OnInfoEnd(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6696176, NextFullInstrSize(6696176), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnTermination(void)
     *  __fastcall(0x006631A0)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__OnTermination() {
      CALL__fastcall(0, 0, 6697376);
    };
    
    func int Hook_oCInformationManager__OnTermination(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6697376, NextFullInstrSize(6697376), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnTradeBegin(void)
     *  __fastcall(0x00662E60)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__OnTradeBegin() {
      CALL__fastcall(0, 0, 6696544);
    };
    
    func int Hook_oCInformationManager__OnTradeBegin(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6696544, NextFullInstrSize(6696544), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::OnTradeEnd(void)
     *  __fastcall(0x00662F60)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__OnTradeEnd() {
      CALL__fastcall(0, 0, 6696800);
    };
    
    func int Hook_oCInformationManager__OnTradeEnd(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6696800, NextFullInstrSize(6696800), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::PrintStatus(void)
     *  __fastcall(0x0065FF70)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__PrintStatus() {
      CALL__fastcall(0, 0, 6684528);
    };
    
    func int Hook_oCInformationManager__PrintStatus(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6684528, NextFullInstrSize(6684528), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::ProcessImportant(void)
     *  __fastcall(0x006615B0)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__ProcessImportant() {
      CALL__fastcall(0, 0, 6690224);
    };
    
    func int Hook_oCInformationManager__ProcessImportant(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6690224, NextFullInstrSize(6690224), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::ProcessNextImportant(void)
     *  __fastcall(0x006617B0)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__ProcessNextImportant() {
      CALL__fastcall(0, 0, 6690736);
    };
    
    func int Hook_oCInformationManager__ProcessNextImportant(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6690736, NextFullInstrSize(6690736), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::SetNpc(oCNpc *)
     *  __fastcall(0x006609F0)
     *  Beschreibung hier.
     *  @param a oCNpc *
     *  @return void
     */
    func void oCInformationManager__SetNpc(var C_NPC a) {
      CALL__fastcall(a, 0, 6687216);
    };
    
    func int Hook_oCInformationManager__SetNpc(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6687216, NextFullInstrSize(6687216), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::ToggleStatus(void)
     *  __fastcall(0x0065FF20)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__ToggleStatus() {
      CALL__fastcall(0, 0, 6684448);
    };
    
    func int Hook_oCInformationManager__ToggleStatus(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6684448, NextFullInstrSize(6684448), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::Update(void)
     *  __fastcall(0x00660BB0)
     *  Beschreibung hier.
     *  @return void
     */
    func void oCInformationManager__Update() {
      CALL__fastcall(0, 0, 6687664);
    };
    
    func int Hook_oCInformationManager__Update(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6687664, NextFullInstrSize(6687664), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::UpdateViewSettings(void)
     *  __thiscall(0x0065F7E0)
     *  Beschreibung hier.
     *  @param a oCInformationManager *
     *  @return void
     */
    func void oCInformationManager__UpdateViewSettings(var oCInformationManager a) {
      CALL__thiscall(MEM_InstToPtr(a), 6682592);
    };
    
    func int Hook_oCInformationManager__UpdateViewSettings(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6682592, NextFullInstrSize(6682592), b.name);
        return !(1 < 0);
    };
    
    /** oCInformationManager::WaitingForEnd(void)
     *  __fastcall(0x006609E0)
     *  Beschreibung hier.
     *  @return int
     */
    func int oCInformationManager__WaitingForEnd() {
      CALL__fastcall(0, 0, 6687200);
      Call_RetValAsInt();
    };
    
    func int Hook_oCInformationManager__WaitingForEnd(var func a) {
        var zCPar_Symbol b;
        if Assigned(b) { return 1 < 0; };
        b = Symbol(b - 1 /* a */);
        b = Symbol(b.content);
        HookEngine(6687200, NextFullInstrSize(6687200), b.name);
        return !(1 < 0);
    };
    Angehängte Dateien
    Zitat Zitat von Dalai Zoll Beitrag anzeigen
    Ich hab ´ne bessere Idee!
    World of Players Usermap
    Geändert von Ingenieur (07.11.2011 um 18:46 Uhr) Grund: Datei angehängt

  18. Beiträge anzeigen #258
    Ritter Avatar von Zerxes
    Registriert seit
    Aug 2003
    Ort
    Regensburg
    Beiträge
    1.556
     
    Zerxes ist offline
    Wenn ihr euch darauf festlegt, wie eine Callback-Funktion standardmäßig aussehen soll, könnte ich das auch mit einbauen.
    Außer du möchtest das tun.
    Deutschland - "ein Gefängnis, das du weder riechen, noch schmecken, noch berühren kannst"
    [Bild: ssp-362-60.gif]

  19. Beiträge anzeigen #259
    Veteran Avatar von Ingenieur
    Registriert seit
    Apr 2006
    Ort
    A-MD-BA-PRAHA
    Beiträge
    683
     
    Ingenieur ist offline
    Mach das bitte. Callback-Funktionen haben im einfachen Fall keinen Rückgabewert und keine Parameter.

    Im etwas umständlicheren Fall besitzen sie einen der gehookten Funktion entsprechenden Rückgabewert, der den der Funktion überschreibt.

    Ingenieur
    Zitat Zitat von Dalai Zoll Beitrag anzeigen
    Ich hab ´ne bessere Idee!
    World of Players Usermap

  20. Beiträge anzeigen #260
    Ritter Avatar von Zerxes
    Registriert seit
    Aug 2003
    Ort
    Regensburg
    Beiträge
    1.556
     
    Zerxes ist offline
    Ich werde mich einfach mal an deinem Code orientieren.
    Mir fehlt die Praxis mit Daedalus - mein Bereich ist eher C++.
    Deutschland - "ein Gefängnis, das du weder riechen, noch schmecken, noch berühren kannst"
    [Bild: ssp-362-60.gif]

Seite 13 von 21 « Erste ... 269101112131415161720 ... Letzte »

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide