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 6 von 6
  1. Homepage besuchen Beiträge anzeigen #1 Zitieren
    Team Velen
    Registriert seit
    Aug 2015
    Beiträge
    952
     
    Bloodfly91 ist offline

    Komplette Zen wieder in einzelne Zens aufteilen - möglich?

    Es geht darum, dass ich eine komplette Zen, die ich damals mit Macros zusammengefügt habe, wieder in einzelne Zens aufteilen will. Geht das irgendwie? Vielleicht mit zSlang? Ich habe schon hier im Forum gesucht, aber noch nichts dazu gefunden.

  2. Beiträge anzeigen #2 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Das geht, ist aber (glaube ich) relativ viel Arbeit. Das LoA-Team hat das gemacht, wenn ich mich nicht irre, die können dir da bestimmt mehr zu sagen.

  3. Beiträge anzeigen #3 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.204
     
    Milky-Way ist offline
    Ja, mit zSlang. In den Beispiel-Skripten gibt es sogar schon eins für Weltenteilung.

    Es läuft im Endeffekt darauf hinaus, dass du in deiner Gesamtwelt WP erstellst, die die gewünschten Einzelwelten-Grenzen markieren. Dann nach und nach die Gesamtwelt aufteilen
    Welt0 -> Teil1 + Rest1
    Rest1 -> Teil2 + Rest2
    ...

    Dann teilt zSlang dir die Objekte auf. Anschließend / Vorher an denselben Stellen in einem 3D-Programm auch das Mesh zerschneiden (mit Kerrax lässt sich das Mesh in Blender importieren).

    Anschließend mit Macro die Vobs von Teil1 mit dem Mesh von Teil1 verbinden, etc.

    Letztlich noch Fehler (z.B. vom Kerrax Importer) beheben.


    Insgesamt kann es sehr aufwändig sein, bei uns (LoA) haben wir so aber das Problem lösen können.

  4. Homepage besuchen Beiträge anzeigen #4 Zitieren
    Team Velen
    Registriert seit
    Aug 2015
    Beiträge
    952
     
    Bloodfly91 ist offline
    Zitat Zitat von Milky-Way Beitrag anzeigen
    Ja, mit zSlang. In den Beispiel-Skripten gibt es sogar schon eins für Weltenteilung.

    Es läuft im Endeffekt darauf hinaus, dass du in deiner Gesamtwelt WP erstellst, die die gewünschten Einzelwelten-Grenzen markieren. Dann nach und nach die Gesamtwelt aufteilen
    Welt0 -> Teil1 + Rest1
    Rest1 -> Teil2 + Rest2
    ...

    Dann teilt zSlang dir die Objekte auf. Anschließend / Vorher an denselben Stellen in einem 3D-Programm auch das Mesh zerschneiden (mit Kerrax lässt sich das Mesh in Blender importieren).

    Anschließend mit Macro die Vobs von Teil1 mit dem Mesh von Teil1 verbinden, etc.

    Letztlich noch Fehler (z.B. vom Kerrax Importer) beheben.


    Insgesamt kann es sehr aufwändig sein, bei uns (LoA) haben wir so aber das Problem lösen können.
    Das klingt wirklich so, als wäre es ziemlich viel Aufwand, vor allem für mein eher kleines Vorhaben.

    Vielleicht gibt es ja auch eine einfachere Möglichkeit, als die Zen wieder aufzuteilen. Was ich eigentlich erreichen will, ist, von der mit Makros zusammengefügten Zen die Vobs, Mobs, Waypoints, Freepoints, Items etc. aus einem bestimmten Bereich (der damals mal eine einzelne Zen war) zu kopieren, und in eine andere leere Zen, die ich aus der 3DS dieses Bereiches erstellt habe, einzufügen. Ich probiere jetzt auch schon ewig, das irgendwie hinzukriegen, bis jetzt aber leider ohne Erfolg. Habe schon einige zSlang Skripte geschrieben, getestet, immer wieder mal geändert etc. Das einzige Skript, das wirklich teilweise das gemacht hat, was ich wollte, war das:

    Code:
    #include<stdlib.zsl>
    
    func void main() 
    {
        WLD_Load("DIV_VELEN_PROLOG_01.ZEN");
        
        WLD_Delete(HULL_SelectByHull(HULL_CHull2D(WLD_GetVobsByName("DELETESTUFF"))));
        
        WLD_Save("DIV_VELEN_PROLOG_NEW.ZEN");
    }
    Allerdings wurde auch alles in dem nicht markierten Bereich entfernt, bis auf die Way- und Freepoints (im markierten Bereich aber schon, so wie es ja auch sein soll).

    Dann hätte ich für die restlichen Teile der Zen einfach leere Meshes erstellt und die Welt neu compiliert, damit nur noch dieser eine Teil der Welt sichtbar ist. Wäre wohl das einfachste gewesen. Aber vielleicht weiß ja auch jemand, wo der Fehler liegt?

  5. Beiträge anzeigen #5 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.204
     
    Milky-Way ist offline
    Hast du dir das zSlang Beispielskript (bei mir heißt die Datei 02_LoA_Weltenteilung) einmal angesehen?
    Code:
    #include<stdlib.zsl>
    
    /* Dies ist ein Skript das ich verwendet habe um die LOA Welt zu zerschneiden.
     * Genauer: Die Wüste soll in einer ZEN landen und der Rest in einer anderen ZEN.
     * Zuben hat zu diesem Zweck bereits Waypoints in der Welt platziert,
     * die die Wüste umschließen. Die Waypoints heißen WUESTE_001, WUESTE_002, usw.
     * Sie bilden einen (nicht notwendig konvexes) Polygon. */
    
    func void main() {
        /* Lade die Welt mit Wüste, Rest und den Markierungswaypoints */
        WLD_Load("WORLDWUESTE_WAYPOINT.zen");
        
        /* Hier suche ich die Waypoints zusammen, die Zuben gesetzt hat
         * und speichere sie im Array randPunkt ab. */
        var object randPunkte[];
        for(var int i = 1; ; i += 1) {
            /* Hier wird aus der Zahl "i" ein String der die Zahl
             * repräsentiert und mindestens drei Stellen hat
             * (zum Beispiel wird aus 7 der String "007").
             * Hätte Zuben in den Waypointnamen keine führenden Nullen
             * wäre dieser Schritt unnötig gewesen. */
            var string name = i;
            while(name.length < 3) { name = "0" + name; }
            
            /* Der Waypoint wird gesucht. Ich wusste nicht wieviele Waypoints
             * Zuben letztendlich verwendet hat, daher mache ich weiter, bis
             * kein Waypoint mehr gefunden wird (durch prüfen ob der
             * Rückgabewert von WLD_GetObject Null war oder nicht). */
            var object o = WLD_GetObject("WUESTE_" + name);
            if (!o) {
                /* Ich gebe aus, wieviele Waypoints ich gefunden habe. */
                Info("Last WP Index: " + (i-1));
                break;
            }
            
            /* Der Waypoint wurde gefunden, er wird in das Array eingefügt. */
            randPunkte |= o;
        }
        
        /* Ich wähle alle Objekte aus, die im von den Waypoints
         * beschriebenen Bereich liegen. */
        var selection sel = HULL_SelectByHull(HULL_Polygon(randPunkte));
        
        /* Die Waypoints waren nur Hilfswaypoints, ich möchte sie entfernen.
         * Leider nimmt WLD_Delete nur Selektionen, keine Arrays.
         * Ich entferne die Waypoints die ich lösche aus der Selektion,
         * sonst wird später versucht auf ein Objekt zuzugreifen, was gar nicht
         * existiert! */
        var selection randPunkteSel = CVT_ArrToSel(randPunkte);
        sel -= randPunkteSel;
        WLD_Delete(randPunkteSel);
        
        /* Im Grunde passiert hier in etwa folgendes:
         *   WLD_SaveSelection("test_wueste.ZEN", sel);
         *   WLD_SaveSelection("test_keinewueste.ZEN", WLD_GetAll() - sel);
         * Allerdings ist WLD_SplitWorld etwas klüger:
         * Waypoints die an der Grenze sind, das heißt Waypoints in der Selektion,
         * die mit einem Waypoint verbunden sind, der nicht in der Selektion ist
         * oder umgekehrt, landen in beiden Welten. Nach Ausführung eines Spacermakros
         * werden diese Welten sowieso wieder verschmolzen.
         * Ohne diese Spezialbehandlung der Grenzwaypoints
         * würde das Wegenetz auseinandergerissen. */
        WLD_SplitWorld(sel, "test_wueste.ZEN", "test_keinewueste.zen");
    }

  6. Homepage besuchen Beiträge anzeigen #6 Zitieren
    Team Velen
    Registriert seit
    Aug 2015
    Beiträge
    952
     
    Bloodfly91 ist offline
    Zitat Zitat von Milky-Way Beitrag anzeigen
    Hast du dir das zSlang Beispielskript (bei mir heißt die Datei 02_LoA_Weltenteilung) einmal angesehen?
    Code:
    #include<stdlib.zsl>
    
    /* Dies ist ein Skript das ich verwendet habe um die LOA Welt zu zerschneiden.
     * Genauer: Die Wüste soll in einer ZEN landen und der Rest in einer anderen ZEN.
     * Zuben hat zu diesem Zweck bereits Waypoints in der Welt platziert,
     * die die Wüste umschließen. Die Waypoints heißen WUESTE_001, WUESTE_002, usw.
     * Sie bilden einen (nicht notwendig konvexes) Polygon. */
    
    func void main() {
        /* Lade die Welt mit Wüste, Rest und den Markierungswaypoints */
        WLD_Load("WORLDWUESTE_WAYPOINT.zen");
        
        /* Hier suche ich die Waypoints zusammen, die Zuben gesetzt hat
         * und speichere sie im Array randPunkt ab. */
        var object randPunkte[];
        for(var int i = 1; ; i += 1) {
            /* Hier wird aus der Zahl "i" ein String der die Zahl
             * repräsentiert und mindestens drei Stellen hat
             * (zum Beispiel wird aus 7 der String "007").
             * Hätte Zuben in den Waypointnamen keine führenden Nullen
             * wäre dieser Schritt unnötig gewesen. */
            var string name = i;
            while(name.length < 3) { name = "0" + name; }
            
            /* Der Waypoint wird gesucht. Ich wusste nicht wieviele Waypoints
             * Zuben letztendlich verwendet hat, daher mache ich weiter, bis
             * kein Waypoint mehr gefunden wird (durch prüfen ob der
             * Rückgabewert von WLD_GetObject Null war oder nicht). */
            var object o = WLD_GetObject("WUESTE_" + name);
            if (!o) {
                /* Ich gebe aus, wieviele Waypoints ich gefunden habe. */
                Info("Last WP Index: " + (i-1));
                break;
            }
            
            /* Der Waypoint wurde gefunden, er wird in das Array eingefügt. */
            randPunkte |= o;
        }
        
        /* Ich wähle alle Objekte aus, die im von den Waypoints
         * beschriebenen Bereich liegen. */
        var selection sel = HULL_SelectByHull(HULL_Polygon(randPunkte));
        
        /* Die Waypoints waren nur Hilfswaypoints, ich möchte sie entfernen.
         * Leider nimmt WLD_Delete nur Selektionen, keine Arrays.
         * Ich entferne die Waypoints die ich lösche aus der Selektion,
         * sonst wird später versucht auf ein Objekt zuzugreifen, was gar nicht
         * existiert! */
        var selection randPunkteSel = CVT_ArrToSel(randPunkte);
        sel -= randPunkteSel;
        WLD_Delete(randPunkteSel);
        
        /* Im Grunde passiert hier in etwa folgendes:
         *   WLD_SaveSelection("test_wueste.ZEN", sel);
         *   WLD_SaveSelection("test_keinewueste.ZEN", WLD_GetAll() - sel);
         * Allerdings ist WLD_SplitWorld etwas klüger:
         * Waypoints die an der Grenze sind, das heißt Waypoints in der Selektion,
         * die mit einem Waypoint verbunden sind, der nicht in der Selektion ist
         * oder umgekehrt, landen in beiden Welten. Nach Ausführung eines Spacermakros
         * werden diese Welten sowieso wieder verschmolzen.
         * Ohne diese Spezialbehandlung der Grenzwaypoints
         * würde das Wegenetz auseinandergerissen. */
        WLD_SplitWorld(sel, "test_wueste.ZEN", "test_keinewueste.zen");
    }
    Oh Mann... Ich hätte es mir tatsächlich nochmal genauer anschauen sollen. Und ja, ich hatte es mir angeschaut, aber nur sehr kurz und dachte gleich, dass das zu kompliziert ist. Aber eigentlich war es doch ganz leicht.
    Geändert von Bloodfly91 (27.05.2017 um 03:30 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