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

 

Ergebnis 1 bis 5 von 5
  1. Beiträge anzeigen #1 Zitieren
    Lehrling
    Registriert seit
    Mar 2016
    Beiträge
    19
     
    DazzlingDjango ist offline

    Ikarus 1.2.2: Access Violation bei MEM_DeleteVob

    Mahlzeit,

    Daedalus- und Ikarus-Neuling hier. Ich versuche gerade, in einem Dialog zwischen PC und NPC ein VOB verschwinden zu lassen. Anwendungsfall ist, das nach einer bestimmten Dialogzeile als Teil der Quest eine Location aufgeräumt wird und bspw. Spinnweben verschwinden. Zum Testen wollte ich heute erstmal mit einem VOB, das einen eindeutigen Namen hat (nennen wir es einfallsreicherweise "VOBNAME"), anfangen. Dazu habe ich, wie hier beschrieben, das VOB mittels
    Code:
    MEM_DeleteVob(MEM_SearchVobByName("VOBNAME"));
    versucht zu löschen.

    Das Spiel startet und lädt auch den Spielstand, aber sobald ich den betreffenden Dialog triggere, bekomme ich immer folgende Access Violation:



    Spoiler:(zum lesen bitte Text markieren)

    Code:
    ======================================= UNHANDLED EXCEPTION OCCURED ======================================================
    ======================================= CRASH INFOS: =====================================================================
    GOTHIC 1.08k_mod, Parser Version: 50
    User:  xyz,  CPUType: 586,  Mem: 2048 MB total, 2048 MB free
    Camera: Pos(22391.916/7934.4126/-39916.832), At(0.991623938/0.0709636286/0.107917033)
    Startup Options:-game:neu.ini -zreparse -zlog:5,s
    =============================================== CALLSTACK : ==============================================================
    0023:006E87F5 (0x000004A9 0x008DCE50 0x00000000 0x008DCE08) GothicMod.exe, zCParser::DoStack()+501 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zParser.cpp, line 1369+19 byte(s)
    0023:006E91A4 (0x00000651 0x008DCE50 0x00000000 0x008DCE08) GothicMod.exe, zCParser::DoStack()+2980 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zParser.cpp, line 1415
    0023:006E91A4 (0x00000661 0x008DCE50 0x00000000 0x008DCE08) GothicMod.exe, zCParser::DoStack()+2980 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zParser.cpp, line 1415
    0023:006E91A4 (0x00000779 0x008DCE50 0x00000000 0x008DCE08) GothicMod.exe, zCParser::DoStack()+2980 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zParser.cpp, line 1415
    0023:006E91A4 (0x0000136E 0x008DCE50 0x00000000 0x008DCE08) GothicMod.exe, zCParser::DoStack()+2980 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zParser.cpp, line 1415
    0023:006E91A4 (0x00001651 0x008DCE50 0x00000000 0x008DCE08) GothicMod.exe, zCParser::DoStack()+2980 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zParser.cpp, line 1415
    0023:006E91A4 (0x0000173D 0x008DCE50 0x00000000 0x008DCE08) GothicMod.exe, zCParser::DoStack()+2980 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zParser.cpp, line 1415
    0023:006E91A4 (0x0000174E 0x008DCE08 0x008DCE60 0x007D06E8) GothicMod.exe, zCParser::DoStack()+2980 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zParser.cpp, line 1415
    0023:006E91A4 (0x0000603C 0x007D06E8 0x2C23F620 0x009D980C) GothicMod.exe, zCParser::DoStack()+2980 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zParser.cpp, line 1415
    0023:006E9957 (0x008DCE08 0x0000332B 0x2C23F620 0x0072D6C2) GothicMod.exe, zCParser::CallFunc()+711 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zParser.cpp, line 1548
    0023:006658B1 (0x0085765F 0x2C23F620 0x009D980C 0x009D9808) GothicMod.exe, oCInfo::Info()+17 byte(s), D:\dev\gothic\current_work\Gothic\_Ulf\oInfo.cpp, line 517+14 byte(s)
    0023:0072D6C2 (0x009D9808 0x27118078 0x2C271C48 0x00000000) GothicMod.exe, oCInformationManager::OnInfo()+354 byte(s), D:\dev\gothic\current_work\Gothic\_Roman\oInformationManager.cpp, line 993
    0023:0072C362 (0x00000000 0x27118078 0x2C271C48 0x00000000) GothicMod.exe, oCInformationManager::Update()+1234 byte(s), D:\dev\gothic\current_work\Gothic\_Roman\oInformationManager.cpp, line 639+46 byte(s)
    0023:006A797A (0x2C271C48 0x00000000 0x2C271C48 0x286629E8) GothicMod.exe, oCNpc::OnMessage()+3994 byte(s), D:\dev\gothic\current_work\Gothic\_Ulf\oNPC.cpp, line 10207+133 byte(s)
    0023:006DDAE3 (0x2C271C48 0x27118078 0x00000000 0x0AD1FE6C) GothicMod.exe, zCEventManager::SendMessageToHost()+371 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zEventMan.cpp, line 269
    0023:006DDDCF (0x0AD1FC38 0x005F405F 0x0B5670F8 0x007DCAC4) GothicMod.exe, zCEventManager::ProcessMessageList()+191 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zEventMan.cpp, line 356
    0023:006DCCA6 (0x0B5670F8 0x007DCAC4 0x0ABEA9D0 0x00000000) GothicMod.exe, zCEventManager::DoFrameActivity()+38 byte(s), D:\dev\gothic\current_work\ZenGin\_Ulf\zEventMan.cpp, line 145+9 byte(s)
    0023:005F405F (0x2C237010 0x0ABEA9D0 0x00000000 0x0126FCA4) GothicMod.exe, zCWorld::Render()+415 byte(s), D:\dev\gothic\current_work\ZenGin\_Dieter\zWorld.cpp, line 762
    0023:0063DC76 (0x0077A8D8 0x01333837 0x0126FEB4 0x00000000) GothicMod.exe, oCGame::Render()+150 byte(s), D:\dev\gothic\current_work\Gothic\_Ulf\oGame.cpp, line 2469
    0023:00424F73 (0x007D1078 0x76A44B61 0x00020692 0x0ABEA9D0) GothicMod.exe, CGameManager::Run()+1155 byte(s), D:\dev\gothic\current_work\Gothic\_Bert\oGameManager.cpp, line 699+25 byte(s)
    0023:006D867B (0x00300000 0x0000002C 0x00000003 0x00000014) GothicMod.exe, MainProg()+75 byte(s), D:\dev\gothic\current_work\Gothic\_Ulf\Phoenix.cpp, line 115
    0023:004F4326 (0x00400000 0x00000000 0x01333837 0x00000007) GothicMod.exe, HandledWinMain()+966 byte(s), D:\dev\gothic\current_work\ZenGin\_Carsten\zWin32.cpp, line 772
    0023:004F3E90 (0x00400000 0x00000000 0x01333837 0x00000007) GothicMod.exe, WinMain()+128 byte(s), D:\dev\gothic\current_work\ZenGin\_Carsten\zWin32.cpp, line 684+21 byte(s)
    0023:0077A9B8 (0xA468007E 0x6400779B 0x000000A1 0x89645000) GothicMod.exe, WinMainCRTStartup()+224 byte(s)


    Ich nutze Gothic 1.08k mit System Pack 1.8 und Ikarus 1.2.2 und freu mich, wenn mir jemand weiterhelfen kann!

  2. Beiträge anzeigen #2 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist gerade online
    Zeig mal bitte den gesamten Dialog code.

    Du könntest auch mal prüfen ob MEM_SearchVobByName da überhaupt einen brauchbaren pointer liefert.
    Also irgendwie so:
    Code:
        var int vobPtr; 
        vobPtr = MEM_SearchVobByName(vobName);
        if (!vobPtr) { 
            MEM_Error("ungültiger pointer!");
            return; 
        };
        var zCVob vob; vob = _^(vobPtr);
        // hier vielleicht ein paar Eigenschaften des vobs ausgeben lassen (visual?), um zu schauen ob das richtige vob gefunden wurde
        MEM_DeleteVob(vobPtr);
    Falls da ein brauchbarer pointer auf das richtige Objekt zurückgegeben wird, dann wäre wahrscheinlich interessant was genau du da löschst.
    Ist das vob Teil eines vobtrees (also: hat es ein parent vob)?

  3. Beiträge anzeigen #3 Zitieren
    Lehrling
    Registriert seit
    Mar 2016
    Beiträge
    19
     
    DazzlingDjango ist offline
    Danke für deine schnelle und ausführliche Rückmeldung!

    Über deinen Tipp habe ich gelernt, wie man mit Ikarus debuggt. Das hat mir geholfen, den Fehler zu finden, der aber letztlich ein anderer (und gar nicht mal so undummer) war: Ich hatte vergessen, vor dem Code "MEM_InitAll" aufzurufen.

    Wo sollte ich das eigentlich geschickterweise tun? Ich weiß es für Gothic 2 (in der INIT_GLOBAL der Startup.d), modde aber Gothic 1.

  4. Beiträge anzeigen #4 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von DazzlingDjango Beitrag anzeigen
    Wo sollte ich das eigentlich geschickterweise tun? Ich weiß es für Gothic 2 (in der INIT_GLOBAL der Startup.d), modde aber Gothic 1.
    Diese Erklärung ist für LeGo, lässt sich aber 1:1 auf Ikarus übertragen. Bedenke auch, dass man MEM_InitAll() so häufig aufrufen kann wie man möchte (also lieber zu viel als zu wenig).

  5. Beiträge anzeigen #5 Zitieren
    Lehrling
    Registriert seit
    Mar 2016
    Beiträge
    19
     
    DazzlingDjango ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Diese Erklärung ist für LeGo, lässt sich aber 1:1 auf Ikarus übertragen. Bedenke auch, dass man MEM_InitAll() so häufig aufrufen kann wie man möchte (also lieber zu viel als zu wenig).
    Danke, Lehona! Das muss ich übersehen haben. Und auch das mit den mehrmaligen Aufrufen ist gut zu wissen.

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