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 7 von 21 « Erste ... 345678910111418 ... Letzte »
Ergebnis 121 bis 140 von 410
  1. Homepage besuchen Beiträge anzeigen #121
    Schwertmeister Avatar von Godfather75
    Registriert seit
    May 2005
    Beiträge
    972
     
    Godfather75 ist offline
    Da ich auch auf das Inventar des Helden zugreifen möchte, dachte ich mir mal daß ich hier mit reinschreibe.

    Ich möchte nämlich das Inventar-System etwas modifizieren. Sprich ein neues Äußeres Erscheinungsbild, so daß es dann möglich ist über die Maus auf ein Icon zu klicken und das Inventar damit zu öffnen und zu schließen.

    Maus und Icon ist schon fertig, fehlt also nur noch der "kleine" Rest.

    Ich hab nun mal folgendes probiert:

    Code:
    var oCNpc her; her = Hlp_GetNpc(hero);
    var oCItem dat;
    dat = MEM_PtrToInst(her.inventory2_inventory_data);
    	
    PrintScreen(ConcatStrings("Data: ", dat._zCObject_objectName), 1, 9, font, 1);
    Laut ZSpy wird aber immer versucht eine leere Instanz zu adressieren, aber ich denke mal daß ich bei den inventory2_* schon ganz richtig unterwegs bin oder muß ich das ganz anders angehen, um daß Inventar auszulesen?!

  2. Homepage besuchen Beiträge anzeigen #122
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline
    Npc_GetInventoryItemBySlot(hero, 0, [position]) ist eventuell bequemer.

    Dein Ansatz ist im Prinzip richtig, allerdings ist das erste Element einer Liste (der Listenkopf) immer leer (sonst wäre es schwierig eine leere Liste von einer Liste mit nur einem Element zu unterscheiden).

    Das heißt wenn du das erste Element im Inventar des Spielers haben willst müsstest du folgendes tun:

    Code:
    var oCNpc her; her = Hlp_GetNpc(hero);
    
    var zCListSort list;
    list = MEM_PtrToInst(her.inventory2_inventory_next);
    
    var oCItem dat;
    dat = MEM_PtrToInst(list.data);
    	
    PrintScreen(ConcatStrings("Data: ", dat._zCObject_objectName), 1, 9, font, 1);
    Das funktioniert so, falls das Inventar nicht leer ist.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  3. Homepage besuchen Beiträge anzeigen #123
    Schwertmeister Avatar von Godfather75
    Registriert seit
    May 2005
    Beiträge
    972
     
    Godfather75 ist offline
    Hat mal wieder bestens funktioniert, Danke

    Allerdings führt ein erneuter Aufruf von list = MEM_PtrToInst(her.inventory2_inventory_next); leider nicht dazu, daß nächste Element abzufangen, sondern es wird dann wieder das 1. Element ausgegeben. Evtl. wird ja bei jedem Aufruf die Liste wieder von vorne abgegrast.

    Ich werde mir aber auch noch mal Npc_GetInventoryItemBySlot(hero, 0, [position]) anschauen, vielleicht bringt mich das ja auch weiter.

    Im Grunde benötige ich ja nur ein Array oder was auch immer was so ähnlich aussieht wie folgt:
    item[0] = "Item";
    item[1] = "noch ein Item";
    item[2] = EOF oder NULL oder wie auch immer

    Dann könnte man das Ganze auch weiter verarbeiten, bis hin zur Darstellung in einem grafischen Inventar.

  4. Homepage besuchen Beiträge anzeigen #124
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline
    Du hast das konzept der verketteten Liste nicht verstanden.

    Code:
    list = MEM_PtrToInst(her.inventory2_inventory_next);
    Das ist kein Funktionsaufruf der irgendetwas tut. Du schaust nur in die Datenstruktur rein. Wenn du nochmal reinschaust siehst du das selbe.

    was du bräuchtest wäre ein
    Code:
    list = MEM_PtrToInst(list.next);
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  5. Beiträge anzeigen #125
    Ritter Avatar von Der Ahnungslose
    Registriert seit
    Nov 2009
    Ort
    wo der Brunnen aus der Mitte entsprang
    Beiträge
    1.048
     
    Der Ahnungslose ist offline
    Hi, nochmal eine grundsätzliche Frage: Wie verdammt nochmal lernt man in IDA zu sehen, was worauf steht? Woher wisst Ihr immer, was z.B. eax oder esp, oder auch esp+4 usw. ist?

    Wenn ich mir nachstehende FUnktion ansehe, erwarte ich eigentlich, das irgendwo ein Pointer auf das Item ist. Aber woran sehe ich, wo er sich verbirgt

    Code:
    .text:00671F60 public: int __thiscall oCItem::GetValue(void) proc near
    .text:00671F60                                         ; CODE XREF: oCStealContainer::CreateList(void)+FFp
    .text:00671F60                                         ; oCViewDialogItemContainer::SetItemContainer(oCItemContainer *)+FDp
    .text:00671F60                                         ; oCViewDialogItemContainer::SetItemContainer(oCItemContainer *)+183p
    .text:00671F60                                         ; oCViewDialogItemContainer::SetItemContainer(oCItemContainer *)+203p
    .text:00671F60                                         ; oCViewDialogItemContainer::SetItemContainer(oCItemContainer *)+32Fp
    .text:00671F60                                         ; oCViewDialogStealContainer::SetStealContainer(oCStealContainer *)+13Fp
    .text:00671F60                                         ; oCViewDialogStealContainer::SetStealContainer(oCStealContainer *)+1CCp
    .text:00671F60                                         ; oCViewDialogStealContainer::SetStealContainer(oCStealContainer *)+28Cp
    .text:00671F60                                         ; oCViewDialogStealContainer::SetStealContainer(oCStealContainer *)+3FCp
    .text:00671F60
    .text:00671F60 var_4           = dword ptr -4
    .text:00671F60
    .text:00671F60                 push    ecx
    .text:00671F61                 mov     eax, [ecx+2F4h]
    .text:00671F67                 add     eax, [ecx+140h]
    .text:00671F6D                 push    esi
    .text:00671F6E                 mov     esi, [ecx+130h]
    .text:00671F74                 test    esi, esi
    .text:00671F76                 mov     [esp+8+var_4], eax
    .text:00671F7A                 fild    [esp+8+var_4]
    .text:00671F7E                 jle     short loc_00671F91
    .text:00671F80                 mov     eax, [ecx+12Ch]
    .text:00671F86                 cdq
    .text:00671F87                 idiv    esi
    .text:00671F89                 mov     [esp+8+var_4], eax
    .text:00671F8D                 fimul   [esp+8+var_4]
    .text:00671F91
    .text:00671F91 loc_00671F91:                           ; CODE XREF: oCItem::GetValue(void)+1Ej
    .text:00671F91                 pop     esi
    .text:00671F92                 add     esp, 4
    .text:00671F95                 jmp     __ftol
    .text:00671F95 public: int __thiscall oCItem::GetValue(void) endp
    verbirgt sich auch irgendwo schon der Value-Wert?

  6. Homepage besuchen Beiträge anzeigen #126
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline
    Beschäftige dich dazu mal mit Calling Conventions. Diese Stellen eine Konvention (ein Protokoll) dar, wie Funktionen miteinander umgehen.

    Etwa besagt die Calling Convention __thiscall, dass der "this"-Pointer, also der Zeiger auf das Objekt, auf dem die Funktion ausgeführt werden soll (nur in der objektorientierten Programmierung verwendet), im Register ecx stehen muss, zum Zeitpunkt zu dem die Funktion aufgerufen wird. Andere Parameter stehen je nach Calling Convention an anderen Stellen (typischerweise auf dem Stack).

    esp ist der Stackzeiger und zeigt auf das letzte benutzte Stackwort. Deshalb sind Parameter in der Regel relativ zu diesem Stackpointer abgelegt (Achtung: Der Stack wächst von hohen Adressen in Richtung niedrigen Adressen).

    Rückgabewerte werden in eax geschrieben, der Aufrufer erwartet dann, dass dort das Ergebnis steht.

    Weitere Details solltest du Problemlos finden, wenn du nach x86 calling conventions suchst.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  7. Beiträge anzeigen #127
    Ritter Avatar von Der Ahnungslose
    Registriert seit
    Nov 2009
    Ort
    wo der Brunnen aus der Mitte entsprang
    Beiträge
    1.048
     
    Der Ahnungslose ist offline
    Eigentlich wollte ich den LeGo-Thread nicht mehr mit meinen Anliegen belasten, aber ich komme leider nicht weiter, obwohl es für mich keinen Sinn ergibt, warum nicht geht, was ich tun möchte.

    Wie Ihr wisst, habe ich mit Zugriff auf c_npc (var int inventory2_vtbl; // 0x0550) und dieser Funktion

    Code:
    func void Npc_DisableTransferMoreThanOneItem(var c_npc slf, var int disable) {
        const int adr = 6710736; //0x6665D0
        CALL_IntParam(!!disable);
        CALL__thiscall(MEM_InstToPtr(slf) + 1360, adr);
    };
    über Npc_DisableTransferMoreThanOneItem(hero, 1); in bestimmten Fällen Items nur einzeln aus dem Inventar in einen anderen ItemContainer zu übertragen. Neben MobContainern wollte ich nun auch die ItemContainer von anderen NPCs so manipulieren, dass ich Items nur einzeln rüberziehen kann. Wie Sektenspinner dachte auch ich, wenn das mit dem hero klappt, sollte das doch auch mit allen anderen NPCs gehen, wenn man sich vorher die Instanz holt. Komischerweise geht es nicht und ich würde gern wissen, warum es nicht geht. Kann es sein, dass die var int inventory2_vtbl nur beim hero so esxistiert?

    Ich habe folgendes gemacht:
    Ich habe mir über
    Code:
    [...] else if (Hlp_Is_oCNpc(her.focus_vob)) 
        	{
             toth = MEM_PtrToInst(her.focus_vob);
    		 coth = MEM_PtrToInst(her.focus_vob);
    		var string stri;    stri = ConcatStrings (coth.name, " Npc");
            PrintScreen(stri, -1, -1, "FONT_OLD_20_WHITE.TGA", 3);
            };
    [...]
    den NPC geholt (Print des Namens funktioniert) und dann an gleicher Stelle wie Npc_DisableTransferMoreThanOneItem(hero, 1); auch noch Npc_DisableTransferMoreThanOneItem(coth, 1); aufgerufen. Der Transfer von mehr als einem Item mit Strg + Alt aus dem NPC-Inv zum Hero-Inv ist jedoch weiterhin möglich, während es vom Hero Inventar in das NPC-Inv funktioniert. Ich verstehe einfach nicht, warum das nicht geht. Bitte nochmals um Hilfe.

    Edit: Ok, Ich glaube ich bin der Sache auf der Spur. Ich habe jetzt gesehen, dass Npc_DisableTransferMoreThanOneItem(hero, 1); im Trade Manager auch keine Wirkung zeigt. D.h. es muss sich im Trade Manager bei allen vier ItemContainern um vier eigenständige handeln, ich vermute mal, dass es bei den zwei äußeren "neu generierte" ItemContainer sind, die jeweils zur Laufzeit bzw. beim Aufruf nur mit den Items aus dem jeweiligen NPC-Inventar gefüllt werden. Da sollte ich nochmal in IDA nachsehen, was ich da noch finden kann. Dennoch nehme ich Ideen gerne entgegen.
    Geändert von Der Ahnungslose (08.09.2011 um 23:19 Uhr)

  8. Beiträge anzeigen #128
    Sword Master
    Registriert seit
    May 2009
    Ort
    Österreich/Graz
    Beiträge
    889
     
    Umfi ist offline
    Kann es sein das ein paar Dialoggestures-animationen nicht im Archiv enthalten sind?

    Ich spreche von Hum_GreetGrd_M01.asc und Hum_GreetCool_M01.asc.

    mfg Umfi

  9. Homepage besuchen Beiträge anzeigen #129
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline
    Zitat Zitat von Umfi Beitrag anzeigen
    Kann es sein das ein paar Dialoggestures-animationen nicht im Archiv enthalten sind?

    Ich spreche von Hum_GreetGrd_M01.asc und Hum_GreetCool_M01.asc.

    mfg Umfi
    Das sind Gothic 2 Animationen. Du kannst sie mit dem Gothic Sourcer aus kompilierten Animationen gewinnen. Der Einfachheit halber, hab ich sie aber einfach mal angehängt.

    @Der Ahnungslose: Da sich das so hartnäckig sträubt: Wofür willst du das eigentlich haben? Vielleicht krieg ich noch eine Idee, wenn ich weiß, wieso du das benötigst.
    Angehängte Dateien
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  10. Beiträge anzeigen #130
    Sword Master
    Registriert seit
    May 2009
    Ort
    Österreich/Graz
    Beiträge
    889
     
    Umfi ist offline
    Zitat Zitat von Sektenspinner Beitrag anzeigen
    Das sind Gothic 2 Animationen. Du kannst sie mit dem Gothic Sourcer aus kompilierten Animationen gewinnen. Der Einfachheit halber, hab ich sie aber einfach mal angehängt.

    Danke fürs hochladen. Hast mir gleich eine Frage erspart.

  11. Beiträge anzeigen #131
    General Avatar von Rantragon
    Registriert seit
    May 2008
    Beiträge
    3.902
     
    Rantragon ist offline
    @Sektenspinner: Wie ist das eigentlich bei C_NPCs und oCNpcs? "Erbt" oCNpc von C_NPC (oder andersherum) oder wie sieht der Zusammenhang da aus?

    @Der Ahnungslose: Ich habe bisher immer die Erfahrung gemacht, dass die Call Funktionen vor allem oCNpcs oder oCItems annehmen und damit funktionieren (C_NPCs haben da irgendwie immer nicht funktioniert, warum auch immer...). Vielleicht irre ich mich, aber du kannst es ja mal mit einem oCNpc probieren.

  12. Beiträge anzeigen #132
    Ritter Avatar von Der Ahnungslose
    Registriert seit
    Nov 2009
    Ort
    wo der Brunnen aus der Mitte entsprang
    Beiträge
    1.048
     
    Der Ahnungslose ist offline
    Zitat Zitat von Sektenspinner Beitrag anzeigen
    @Der Ahnungslose: Da sich das so hartnäckig sträubt: Wofür willst du das eigentlich haben? Vielleicht krieg ich noch eine Idee, wenn ich weiß, wieso du das benötigst.
    Ich will einfach nur noch Item für Item plündern können. Bisher geht es aus der Truhe heraus ja schon, aber aus dem NPC-Inv hraus will es einfach nicht gehen. Der ignoriert die Einstellung von toth.inventory2_oCItemContainer_m_bCanTransferMoreThanOneItem=0; obwohl Sie 0 ist, was ich durch einen Print bestätigen lasse.

    Zitat Zitat von Rantragon Beitrag anzeigen

    @Der Ahnungslose: Ich habe bisher immer die Erfahrung gemacht, dass die Call Funktionen vor allem oCNpcs oder oCItems annehmen und damit funktionieren (C_NPCs haben da irgendwie immer nicht funktioniert, warum auch immer...). Vielleicht irre ich mich, aber du kannst es ja mal mit einem oCNpc probieren.
    Glaub mir, in dieser Sache habe ich nichts unversucht gelassen, aber es will einfach nicht.

  13. Homepage besuchen Beiträge anzeigen #133
    Exodus Avatar von Sektenspinner
    Registriert seit
    Jul 2004
    Ort
    Karlsruhe
    Beiträge
    7.827
     
    Sektenspinner ist offline
    Zitat Zitat von Rantragon Beitrag anzeigen
    @Sektenspinner: Wie ist das eigentlich bei C_NPCs und oCNpcs? "Erbt" oCNpc von C_NPC (oder andersherum) oder wie sieht der Zusammenhang da aus?
    Es ist das gleiche. Stell dir vor ein C_NPC ist genau das selbe wie in oCNpc, nur dass einige Eigenschaften als "private" deklariert sind.

    Die Klassenvariable C_NPC.id hat auch nicht den Offset 0 wie man es erwarten wurde (weil ID das erste Member von C_NPC ist), sondern den Offset 0x120. Es gibt also eine Spezialbehandlung in der Engine, die alle Member von C_NPC um den passenden Wert "nach hinten verschiebt".

    Jede Funktion, die einen C_NPC erwartet kann auch einen oCNpc entgegennehmen und umgekehrt, denn beides sind letztlich Pointer auf oCNpcs.

    @Der Ahnungslose: Ich meinte eigentlich mehr in welcher Situation du das einsetzen willst. Grundsätzlich wäre das ja eher nervig. Wenn ich weiß, dass du es für ein tolles Feature brauchst, kann ich mich vielleichte her motivieren das nochmal genauer anzuschauen.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  14. Beiträge anzeigen #134
    Sword Master
    Registriert seit
    May 2009
    Ort
    Österreich/Graz
    Beiträge
    889
     
    Umfi ist offline
    Hallo, ich habe mal eine Frage zu den Engine Hooks.

    Wo genau soll man die aufrufen?

    Ich rufe sie momentan im der Startup auf. Aber nicht in der Init_Global ().
    Denn sonst stürzt G2 nach einem Levelwechsel + Item aufheben in der neuen Welt ab.

    Code:
    func void INIT_SOJ_Prolog_NEW ()
    {
        B_InitMonsterAttitudes();
        B_InitGuildAttitudes();
        B_InitNpcGlobals();
        Wld_SendTrigger("PARKTOS_NEW");
    
        Hook_oCNpc__DoTakeVob();
    };
        
    
        
    func void STARTUP_SOJ_Prolog_NEW()
    {
    .
    .
    .
    };
    Hier mal, der Hook. Ich habe ihn hier im Thread gefunden und nur etwas verändert. (rot makiert)

    Code:
    ///////////////////////////////////////////////////////////////////////////////
    // Hook: Item aufheben
    //////////////////////////////////////////////////////////////////////////////
    
    func void Hook_oCNpc__DoTakeVob() {
        const int oCNpc__DoTakeVob = 7621056; //0x7449C0
        HookEngine(oCNpc__DoTakeVob, 6, "EVT_NPCTAKEVOB");
    };
    
    func void EVT_NpcTakeVob()
    {
        //    ----- an den NPC und das item kommen -----
        var c_npc slf; slf = MEM_PtrToInst(ECX);                // der NPC, der das Item einsammelt
        var C_ITEM itm; itm = MEM_PtrToInst(MEM_ReadInt(ESP + 4));        // Pointer auf das Item
        //    ----- an den NPC und das item kommen -----
        
        //    ----- stimmt das item? -----
        if (!Hlp_IsValidItem (itm))
        {
            return;
        }
        else
        {
             if (Hlp_StrCmp    (itm.name, "Unkraut"))
             {
                 Weed_Counter = Weed_Counter+1;
             };         
        };    
    };
    Es funktioniert auch, aber wenn ich das Spiel starte -> 'Neues Spiel starten' und gleich nach dem laden noch mal 'Neues Spiel starten' klicke, und dann ein Item aufhebe crashed G2.

    Spoiler:(zum lesen bitte Text markieren)

    Code:
    ======================================= UNHANDLED EXCEPTION OCCURED ======================================================
    ======================================= CRASH INFOS: =====================================================================
    Gothic II - 2.6 (fix), Parser Version: 50
    User:  Michael Umfahrer,  CPUType: 586,  Mem: 1024 MB total, 790 MB free0023:29B61693 (0x140F4820 0x00000000 0x00000000 0x167F17D8) <UNKNOWN>
    Camera: Pos(-672.576294/194.071701/1236.6582), At(-0.944495142/-0.314978838/-0.0933661014)
    Startup Options:-game:secretofjumanga.ini -zreparse -zlog:5,s -zmaxframerate:40
    =============================================== CALLSTACK : ==============================================================
    0023:29B61693 (0x140F4820 0x00000000 0x00000000 0x167F17D8) <UNKNOWN>
    0023:00753A52 (0x14C2C680 0x00000000 0x167F17D8 0x14C2C680) Gothic2.exe, oCNpc::EV_DropVob()+402 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oNpc.cpp, line 13113
    0023:0074C391 (0x14C2C680 0x00000000 0x14C2C680 0x13B05974) Gothic2.exe, oCNpc::OnMessage()+4977 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oNpc.cpp, line 10817+8 byte(s)
    0023:00786DD3 (0x14C2C680 0x167F17D8 0x00000000 0x13298280) Gothic2.exe, zCEventManager::SendMessageToHost()+371 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zEventMan.cpp, line 269
    0023:007870CA (0x13298034 0x00621903 0x08C8D614 0x0083C10C) Gothic2.exe, zCEventManager::ProcessMessageList()+202 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zEventMan.cpp, line 376
    0023:00785F96 (0x08C8D614 0x0083C10C 0x08C8F3F4 0x00000000) Gothic2.exe, zCEventManager::DoFrameActivity()+38 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zEventMan.cpp, line 145+9 byte(s)
    0023:00621903 (0x00000001 0x08C8F3F4 0x00000000 0x0135FCA8) Gothic2.exe, zCWorld::Render()+515 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zWorld.cpp, line 825
    0023:006C87EB (0x00400000 0x015430E2 0x0135FECC 0x7EFDE000) Gothic2.exe, oCGame::Render()+331 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oGame.cpp, line 2658
    0023:00425E6E (0x0082F0EC 0x00000000 0x00270730 0x08C8F3F4) Gothic2.exe, CGameManager::Run()+1598 byte(s), P:\dev\g2addon\release\Gothic\_bert\oGameManager.cpp, line 767+47 byte(s)
    0023:0078188B (0x0000002C 0x000B00EA 0x00000006 0x00000000) Gothic2.exe, MainProg()+75 byte(s), P:\dev\g2addon\release\Gothic\_ulf\Phoenix.cpp, line 111
    0023:00503270 (0x00400000 0x00000000 0x015430E2 0x00000001) Gothic2.exe, HandledWinMain()+928 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1169
    0023:00502DFD (0x0135FED0 0x00000000 0x015430E2 0x00000001) Gothic2.exe, WinMain()+141 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1054+17 byte(s)
    0023:007D43F8 (0x00000004 0x0000FFFF 0x000000B8 0x00000000) Gothic2.exe, WinMainCRTStartup()+224 byte(s)


    Liegt es daran, wo ich den Hook aufrufe oder an etwas anderem?

    mfg Umfi

  15. Beiträge anzeigen #135
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    12.440
     
    Milky-Way ist offline
    Aufruf nur einmal pro Gothic-Start in der Init_Global. Zugleich eine Stringkonstante verändern und nur hooken, wenn die Konstante unverändert ist.

  16. Beiträge anzeigen #136
    Ritter Avatar von Der Ahnungslose
    Registriert seit
    Nov 2009
    Ort
    wo der Brunnen aus der Mitte entsprang
    Beiträge
    1.048
     
    Der Ahnungslose ist offline
    Rufe den Hook bitte in der Init_Global bzw. Init_World (Gothic I) auf. Das sollte dein Problem beheben.

    Edit: Mist, zu langsam.

  17. Beiträge anzeigen #137
    Sword Master
    Registriert seit
    May 2009
    Ort
    Österreich/Graz
    Beiträge
    889
     
    Umfi ist offline
    Zitat Zitat von Milky-Way Beitrag anzeigen
    Zugleich eine Stringkonstante verändern und nur hooken, wenn die Konstante unverändert ist.

    Was genau meinst du damit, kannst du das kurz näher erläutern?

    Meinst du mit der Stringkonstante die Integer-Konstante oCNpc__DoTakeVob?

    Und dann in der Init_Global() abfragen:

    Code:
    if (oCNpc__DoTakeVob != 7621056) {
    Hook_oCNpc__DoTakeVob();
    };
    mfg Umfi

  18. Homepage besuchen Beiträge anzeigen #138
    Teutonic Team Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.212
     
    Bonne6 ist offline
    So:

    Code:
    if (!Hlp_StrCmp(GOTHIC_RESTART, "Y"))
    	{
    		// hier hooken
    
    		GOTHIC_RESTART = "Y";
    	};
    Und irgendwo halt noch ein

    var string GOTHIC_RESTART;

  19. Beiträge anzeigen #139
    Sword Master
    Registriert seit
    May 2009
    Ort
    Österreich/Graz
    Beiträge
    889
     
    Umfi ist offline
    Zitat Zitat von Bonne6 Beitrag anzeigen
    So:

    Code:
    if (!Hlp_StrCmp(GOTHIC_RESTART, "Y"))
        {
            // hier hooken
    
            GOTHIC_RESTART = "Y";
        };
    Und irgendwo halt noch ein

    var string GOTHIC_RESTART;
    Verstehe.

    Danke.

  20. Beiträge anzeigen #140
    Ehrengarde Avatar von Gottfried
    Registriert seit
    Mar 2006
    Beiträge
    2.512
     
    Gottfried ist offline
    Eine wohl bessere Alternative zu den strings sind const ints, die haben den selben Effekt und können ohne Hilfsfunktion verglichen werden:
    Code:
    const int Hooked = 0;
    
    func void Init_Global() {
        [...] // Inits    
        
        if(!Hooked) {
            DoHook();
            Hooked = 1;
        };
    
        [...]
    };
    MfG Gottfried

Seite 7 von 21 « Erste ... 345678910111418 ... 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