wywoływanie funkcji z hooka w g1 3549 6

O temacie

Autor pawbuj

Zaczęty 12.09.2011 roku

Wyświetleń 3549

Odpowiedzi 6

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy

pawbuj

wywoływanie funkcji z hooka w g1
2011-09-12, 21:55(Ostatnia zmiana: 2011-09-13, 09:06)
czy może ktos napisac jak wywołuje się funkcje z hooka?

 wiem,że robimy to ze startup.d

wiem, że po ikarusie parsujemy  hookengine.d , który powinien być zaktualizowany o zmiany Orca.


mamy coś takiego z WOGa. jednak nie działa, choć zrobiłem wg tego co było napisane.
FUNC VOID INIT_WORLD ()
{
   Init_Global();
   INIT_Sub_Newcamp      ();
   INIT_Sub_Oldcamp      ();
   INIT_Sub_Psicamp      ();
   INIT_Sub_Demontower    ();
   INIT_Sub_Freeminecamp   ();
   INIT_Sub_Surface       ();
   
    B_InitMonsterAttitudes ();
   B_InitGuildAttitudes();
     
};

var String Gothic_Restarted;
const int oCGame__UpdateStatus_X = 7093113; //0x6C3B79
  HookEngine(oCGame__UpdateStatus_X,           8, "EVT_UPDATESTATUS_FOCUSNAME");
 
func void Init_Global() {
   if (!Hlp_StrCmp(Gothic_Restarted, "Yes") {
      Gothic_Restarted = "Yes";
      HookEngine(oCGame__UpdateStatus_X,           8, "EVT_UPDATESTATUS_FOCUSNAME");
      // Hook
   };
};
 

Shothic

Shothic

Użytkownicy
posty38
Propsy17
  • Użytkownicy
Pisałem już o tym wcześniej, ale jeszcze raz napisze w G1 pod adresem 0x6C3B79 masz
.text:006C3B77                 push    offset ?classDef@oCMsgManipulate@@0VzCClassDef@@A ; zCClassDef oCMsgManipulate::classDef

więc ten adres jest nie użyteczny. Musisz odszukać funkcje która wywołuje się dosyć często(w Gothic 2 UpdateStatus_X)
w Gothic 1 i do niej przypisać swoja funkcje. Albo wywołać z ticktoca , chociaż jak pamiętam masz z tym jakieś problemy...
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Pisałem już o tym wcześniej, ale jeszcze raz napisze w G1 pod adresem 0x6C3B79 masz
.text:006C3B77                 push    offset ?classDef@oCMsgManipulate@@0VzCClassDef@@A ; zCClassDef oCMsgManipulate::classDef

więc ten adres jest nie użyteczny. Musisz odszukać funkcje która wywołuje się dosyć często(w Gothic 2 UpdateStatus_X)
w Gothic 1 i do niej przypisać swoja funkcje. Albo wywołać z ticktoca , chociaż jak pamiętam masz z tym jakieś problemy...
spróbowałem inaczej... i tu myslę, że idę dużo lepszym torem, choc jeszcze nie udało mi się znależć rozwiązania. dałem cos takiego (z posta orka, gdy wywoływał funkcję w g1 z hookengine i tak:
func VOID INIT_OLDCAMP ()
{
    INIT_SUB_OLDCAMP ();
    //Engine Hook#msg1006993s:
    if(!Hlp_StrCmp(HooksReinited, "Yes"))
    {
     
        HooksReinited="Yes";
        HookEngine_Hook_PreUnconscious_JmpAdress = HookEngine(7630776,6,"HOOK_EVT_UPDATESTATUS_FOCUSNAME",COPY_INSTR);
        //HookEngine_Hook_PreUnconscious_JmpAdress = HookEngine(7630776,6,"HOOK_PREUNCONSCIOUS",COPY_INSTR); //funkcja orka
        //HookEngine_Hook_PreDropVob_JmpAdress = HookEngine(7023277,5,"HOOK_PREDROPVOB",COPY_INSTR);
   
    };

};
 

Shothic

Shothic

Użytkownicy
posty38
Propsy17
  • Użytkownicy
Teraz twoja funkcja wywoła się wtedy gdy kogoś pobijesz

próbuj dalej
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Teraz twoja funkcja wywoła się wtedy gdy kogoś pobijesz

próbuj dalej
ok, gdzie szukać tych adresów?
 

Shothic

Shothic

Użytkownicy
posty38
Propsy17
  • Użytkownicy
W Gothicu ;p
najlepsza do szukania tego będzie IDA Pro Disassembler. A jeżeli jesteś w tym zielony to polecam ReverseCraft.
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
W Gothicu ;p
najlepsza do szukania tego będzie IDA Pro Disassembler. A jeżeli jesteś w tym zielony to polecam ReverseCraft.
niestety nie czuję się programistą. Umiem co prawda tworzyć kombinację skryptów na bazie funkcji z externals.d i tych od innnych modderów,które są juz dostepne - ale to tyle.

z doswiadczenia wiem, że takie innowacyjne sprawy są bardzo czasochłonne... a i nie dają gwarancji sukcesu.

wiem, że rozwiązanie problemu jest na tej stronie:

http://forum.worldofplayers.de/forum/showthread.php?t=986670&highlight=hook

swoja droga spróbuje jeszcze uzyc tej funkcji:HookEngine(oCNpc__DropUnconscious_offset+2,5,"TEST_HOOK");
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry