W pliku Trialoge znajduje się funkcja EquipWeapon. Działa prawidłowo na broni do walki wręcz jak i tarczach. Funkcja sama zdejmuje broń, jeśli próbujesz założyć tą sama broń, co masz już założoną. Niestety nie działa za dobrze z bronią dystansową. Ale to działa prawidłowo:
CALL_PtrParam (itemPtr);
CALL__thiscall (MEM_InstToPtr (hero), 7578384);
I jeszcze coś. Okazuje się, że Frame Functions nie zawsze lubi się z funkcjami, których metodą jest klasa oCNpc (nie wykluczam innych). A dokładnie chodzi o funkcję, która jest hookowana do ich funkcjonowania - oCGame::Render. Funkcja jest wywoływana co klatkę przez silnik, dlatego postanowiłem podpiąć do niej swoją funkcję za pomocą HookEngine. Efekt? Gra się scrashowała, a treść błędu z okna access violation wyglądała tak:
[w] 03:53 Warn: 0 == ============================================= CALLSTACK : ============================================================== .... <zError.cpp,#474>
[w] 03:53 Warn: 0 00 1B:00780D86 (0x0135FCA8 0x00000000 0x0135FCA8 0x00000000) Gothic2.exe, oCWorldTimer::Timer()+6 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oWorld.cpp, line 1001+6 byte(s) .... <zError.cpp,#474>
[w] 03:53 Warn: 0 00 1B:006C87A5 (0x0082F0EC 0x00000014 0x00380D4C 0x0EBE8410) Gothic2.exe, oCGame::Render()+261 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oGame.cpp, line 2648 .... <zError.cpp,#474>
[w] 03:53 Warn: 0 00 1B:0078188B (0x0000002C 0x000A61EC 0x00000006 0x00000000) Gothic2.exe, MainProg()+75 byte(s), P:\dev\g2addon\release\Gothic\_ulf\Phoenix.cpp, line 111 .... <zError.cpp,#474>
[w] 03:53 Warn: 0 00 1B:00503270 (0x00400000 0x00000000 0x00162747 0x00000001) Gothic2.exe, HandledWinMain()+928 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1169 .... <zError.cpp,#474>
[w] 03:53 Warn: 0 00 1B:00502DFD (0x0135FED0 0x00000000 0x00162747 0x00000001) Gothic2.exe, WinMain()+141 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1054+17 byte(s) .... <zError.cpp,#474>
[w] 03:53 Warn: 0 00 1B:007D43F8 (0x00000000 0x00000000 0x00000000 0x00000000) Gothic2.exe, WinMainCRTStartup()+224 byte(s) .... <zError.cpp,#474>
[w] 03:53 Warn: 0 == ===================================== UNHANDLED EXCEPTION OCCURED ====================================================== .... <zError.cpp,#474>
Dla niektórych wygląda ona znajomo. Gdy zhookowałem inną funkcję, moja funkcja wywoła się prawidłowo. Nie mam pojęcia czym jest to spowodowane. Wiem tylko tyle, że Gothic ma swoje humorki i trzeba znaleźć inny sposób na wywołanie funkcji.