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 10 von 10
  1. Beiträge anzeigen #1 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline

    Verbindung zwischen Waypoints mit Skripten aufheben

    Hallo, ich hab folgendes Problem, in meiner Modifikation ändert sich das Aussehen der Welt dynamisch.
    In einer aktuellen Situation ist ein Weg nicht mehr passierbar, da er versperrt ist. Den NPCS ist das aber egal und die versuchen sich da irgendwie rüber/durch zu buggen.

    Darum dachte ich mir, wenn ich diese Verbindung im Waynet auflöse, werden sie dann einen alternativen Weg nehmen.

    Jedoch frag ich mich wie ich das angehen soll.

    Jemand Vorschläge?

  2. Beiträge anzeigen #2 Zitieren
    Legend of Ahssûn Avatar von TheEternal
    Registriert seit
    Jun 2013
    Ort
    Frankfurt
    Beiträge
    4.546
     
    TheEternal ist offline
    Wenn du Ikarus vermeiden willst. Würde ich ihn über zwei Wegpunkte laufen lassen.
    Da du ihn um den versperrten Weg herum führen willst, machste einmal nen TA wechsel, wo du den Npc zu einem WP führst, der nicht auf dem versperrten Weg liegt. und dann etwa sowas in einer Framefunktion/EVENT abfragst.

    Code:
    if (Npc_GetDistToWp(npc, "WP_AUßERHALB_DES_VERSPERRTEN_WEGES") < 500 || Npc_GetDistToNpc(npc, hero) < 3000){
       B_StartOtherRoutine(npc, "TAzumursprünglichenZielWP");
    }
    Dadurch wird das event dann auch ausgeführt, wenn der Npc zu weit vom helden weg ist und wird gleich zum ziel wp geportet. Ansonsten geht er vom ersten umwegwp zum Ziel.
    [Bild: LoA_Banner_Skyline2.jpg]
    LoA Website
    Checkout Cloudevo: unlimited Cloud-Drive


  3. Beiträge anzeigen #3 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Hm diese Lösung ist nicht ganz optimal... aber ich werde sie im Hinterkopf behalten.


    Mal angenommen ich lösche einen der Verbindungswegpunkte, würde Gothic das checken?

    Also zb so:

    WP_A ----- WP_X ----- WP_B, wenn ich jetzt WP_X lösche sollte ja auch die Verbindung zwischen den WP_A und WP_B weg sein un der NPC versucht einen anderen Weg um zu WP_A zu kommen?

  4. Beiträge anzeigen #4 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Damit könntest du es versuchen:

    Code:
    .text:007B01B0                             ; public: class zCWay * __thiscall zCWaypoint::HasWay(class zCWaypoint *)
    .text:007B0150                             ; protected: void __thiscall zCWaypoint::RemoveWay(class zCWay *)

  5. Beiträge anzeigen #5 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Ich hab es mal versucht.

    Dabei hab ich die Funktion SearchWaypointByName verwendet.

    zCWay * __thiscall zCWaypoint::HasWay(zCWaypoint *) 0x007B01B0
    void __thiscall zCWaypoint::RemoveWay(class zCWay *) 0x007B0150


    Code:
    func void deleteWay() 
    {
    VAR zCWaypoint meinWp;    MEM_AssignInst (meinWp, SearchWaypointByName("OC1"));
    var int meinWpPointer; meinWpPointer = MEM_InstToPtr(meinWp);
    
    
    CALL_IntParam(meinWpPointer);
    CALL__thiscall(MEM_InstToPtr(meinWp), 8061360);
    var oCWay meinWay; 
    meinWay = CALL_RetValAsStructPtr();
    
    
    
    var int meinWayPointer; meinWayPointer = MEM_InstToPtr(meinWay);
    
    
    CALL_IntParam(meinWayPointer);
    CALL__thiscall(MEM_InstToPtr(meinWp), 8061264);
    
    
    };

    Das Spiel stürzt nicht ab, aber sonst passiert auch nichts. Getestet hab ich mit Marvin "toogle waynet"

    Hab ich evt einen offensichtlichen Fehler im Code?

  6. Beiträge anzeigen #6 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    So direkt sieht das richtig aus. Aber ich glaube, das WayNet ist quasi eine zusätzliche Entität, das sieht doch vielversprechender aus:

    Code:
    .text:007AD2B0                             ; public: void __thiscall zCWayNet::DeleteWaypoint(class zCWaypoint *)
    //oder
    .text:007AD4F0                             ; public: void __thiscall zCWayNet::DeleteWay(class zCWaypoint *, class zCWaypoint *)
    Es gibt in Ikarus die globale Instanz MEM_Waynet.

    SearchWaypointByName() kann ich übrigens nicht finden, das wurde glaube ich nur irgendwo hier im Forum gepostet? Musst aufpassen, dass du auch tatsächlich ein zCWayPoint bekommst und nicht oCWayPoint oder das Vob vom Waypoint.

  7. Beiträge anzeigen #7 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Super! Vielen Dank für die Hilfe, haut hin.

    Hier das Skript falls es jemand benötigt, ihr benötigt aber auch die Funktion SearchWaypointByName von mud-freak.

    Code:
    func void deleteWay(var string wp1, var string wp2)  {
        VAR zCWaypoint _wp1;    MEM_AssignInst (_wp1, SearchWaypointByName(STR_Upper(wp1)));
        var int _wp1Pointer; _wp1Pointer= MEM_InstToPtr(_wp1);
    
    
        VAR zCWaypoint _wp2;    MEM_AssignInst (_wp2, SearchWaypointByName(STR_Upper(wp2)));
        var int _wp2Pointer; _wp2Pointer= MEM_InstToPtr(_wp2);
    
    
        CALL_IntParam(_wp2Pointer);
        CALL_IntParam(_wp1Pointer);
        CALL__thiscall(MEM_InstToPtr(MEM_Waynet), 8049904);
    };
    Geändert von Umfi (08.01.2016 um 07:53 Uhr) Grund: STR_Upper hinzugefügt

  8. Beiträge anzeigen #8 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.246
     
    Milky-Way ist offline
    Wird das mitgespeichert oder sollte es einmalig pro Session (oder bei jedem Laden?) ausgefuehrt werden?

    Und um noch eine moegliche Fehlerquelle bei zukuenftiger Verwendung direkt auszuschliessen: Die WP sollten in GROSSBUCHSTABEN uebergeben werden?

    Was passiert, wenn gar keine direkte Verbindung zwischen den beiden WP besteht?

  9. Beiträge anzeigen #9 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Zitat Zitat von Milky-Way Beitrag anzeigen
    Wird das mitgespeichert oder sollte es einmalig pro Session (oder bei jedem Laden?) ausgefuehrt werden?
    Es wird mitgespeichert. Einmalige Ausführung reicht das überlebt dann Lade und Neustarts.

    Zitat Zitat von Milky-Way Beitrag anzeigen
    Und um noch eine moegliche Fehlerquelle bei zukuenftiger Verwendung direkt auszuschliessen: Die WP sollten in GROSSBUCHSTABEN uebergeben werden?
    Gute Idee, ich hab gleich mal STR_Upper() eingefügt.

    Zitat Zitat von Milky-Way Beitrag anzeigen
    Was passiert, wenn gar keine direkte Verbindung zwischen den beiden WP besteht?
    Nichts


    Weitere Ergebnisse von meinem kurzen Test, wenn die Funktion mehrmals für die selben WPs aufgerufen wird passiert auch nichts.
    Und die NPCs checken das auch und suchen sich einen neuen Weg.

    Sollten doch Fehler auftreten beim testen, werde ich das hier bekannt geben.

  10. Beiträge anzeigen #10 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Ich muss den Thread noch mal aufmachen.

    Leider funktioniert der Code nicht mehr.

    Code:
    [w] 02:28 Warn:  0 X:     [RND3D-Destructor]: Can't uninitialize D3DX Utility Library ! Error: D3DXERR_D3DXNOTSTARTEDYET .... <zRndD3D.h,#127>
    [i] 02:28 Info:  5 X:     [RND3D-Destructor]: D3DXUninitialize done .... <zRndD3D_Render.cpp,#309>
    [i] 02:52 Info:  8 C:     WM_ACTIVATE received .... <zWin32.cpp,#1720>
    [i] 02:52 Info:  8 C:     WM_ACTIVATEAPP received .... <zWin32.cpp,#1738>
    [i] 02:52 Info:  8 C:     WM_ACTIVATEAPP received .... <zWin32.cpp,#1738>
    [w] 02:52 Warn:  0 ==    ===================================== UNHANDLED EXCEPTION OCCURED ====================================================== .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 ==    ============================================ CRASH INFOS: ============================================================== .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 Go    thic II - 2.6 (fix), Parser Version: 50 .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 Us    er:  Michael,  CPUType: 586,  Mem: 2048 MB total, 2048 MB free .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 Ca    mera: Pos(2813.2832/-658.102112/-5377.98145), At(0.587876379/-0.340320766/0.733882248) .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 St    artup Options: .... <zWin32.cpp,#2976>
    [w] 02:52 Warn:  0 -g    ame:vinv.ini -zreparse -zwindow -znomusic -znosound -zlog:10,s -zmaxframerate:35
    
    
     .... <zWin32.cpp,#2977>
    [w] 02:52 Warn:  0 ==    ============================================= CALLSTACK : ============================================================== .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 00    23:007B2E1F (0x47766A14 0x43141F9A 0x0135FA9C 0x0A5BAEF4) Gothic2.exe, zCRoute::GetInterpolatedPosition()+127 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zWaynet.cpp, line 1826+13 byte(s) .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 00    23:007758A0 (0x0135FB9C 0x00000009 0x0361CC0C 0x0083C10C) Gothic2.exe, oCRtnManager::GetRoutinePos()+208 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oRoutine.cpp, line 611 .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 00    23:007787D2 (0x08A820A4 0x00000000 0x0135FCA0 0x00000000) Gothic2.exe, oCSpawnManager::CheckInsertNpc()+1826 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oSpawn.cpp, line 324+19 byte(s) .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 00    23:006C87FB (0x00400000 0x013B3ACB 0x0135FEC4 0x00298000) Gothic2.exe, oCGame::Render()+347 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oGame.cpp, line 2664 .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 00    23:00425E6E (0x0082F0EC 0x00000000 0x00020FFA 0x08A820A4) Gothic2.exe, CGameManager::Run()+1598 byte(s), P:\dev\g2addon\release\Gothic\_bert\oGameManager.cpp, line 767+47 byte(s) .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 00    23:0078188B (0x0000002C 0x01DA861C 0x0000010D 0x00000000) Gothic2.exe, MainProg()+75 byte(s), P:\dev\g2addon\release\Gothic\_ulf\Phoenix.cpp, line 111 .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 00    23:00503270 (0x00400000 0x00000000 0x013B3ACB 0x00000007) Gothic2.exe, HandledWinMain()+928 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1169 .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 00    23:00502DFD (0x0135FEC8 0x00000000 0x013B3ACB 0x00000007) Gothic2.exe, WinMain()+141 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1054+17 byte(s) .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 00    23:007D43F8 (0x00000004 0x0000FFFF 0x000000B8 0x00000000) Gothic2.exe, WinMainCRTStartup()+224 byte(s) .... <zError.cpp,#474>
    [w] 02:52 Warn:  0 ==    ===================================== UNHANDLED EXCEPTION OCCURED ====================================================== .... <zError.cpp,#474>

    Kann jemand von euch damit etwas anfangen?

    Im Spiel ist es so mit "toggle waynet" seh ich wie die verbindung entfernt wird, aber kurz drauf kommt es dann zum crash.

    EDIT: Wenn ich die Funktion aufrufe aber ich nicht in der Nähe von den WPs bin passiert nichts. Wenn ich mich dann aber zu den WP teleportiere kommt es zum Absturz mit dem gleichen Stacktrace.

    Selbest Problem auch bei zCWayNet:: DeleteWaypoint.

    Ich denke da brächte man eine Möglichkeit das Waynet und die Routen zu aktualisieren.
    Geändert von Umfi (20.09.2018 um 14:38 Uhr)

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