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 1 von 2 12 Letzte »
Ergebnis 1 bis 20 von 23
  1. Beiträge anzeigen #1 Zitieren
    Abenteurer Avatar von BusfahrerCharlie
    Registriert seit
    Dec 2016
    Ort
    Hessen
    Beiträge
    56
     
    BusfahrerCharlie ist offline

    Weltenwechsel

    Falls es sowas schon mal irgendwo gab: Sorry schon mal, aber mit der Suchfunktion im Forum kann ich so gut wie nichts anfangen und nachdem ich ein paar Seiten nach einem ähnlichen Thema durchsucht und nichts gefunden habe, kommt jetzt einfach das Thema hier.


    Das Problem ist, dass nach einem Weltenwechsel die NPCs in der neuen Welt nicht spawnen, obwohl sie in der Startup stehen und auch nochmal explizit im Dialog gespawned werden sollten. Zumindest hat das immer in der Startwelt funktioniert.
    Spoiler:(zum lesen bitte Text markieren)


    Spoiler:(zum lesen bitte Text markieren)


    Spoiler:(zum lesen bitte Text markieren)


    "WELTNAME" ist natürlich nicht der richtige Name und die Namen der Waypoints stimmen auch alle.
    Mit den Funktionen B_Kapitelwechsel und FF_ApplyExt kenne ich mich auch überhaupt nicht aus. Aber es wird zum 2. Kapitel gewechselt und der eigene Name für das Kapitel taucht auch auf. Wenn jemand die zusätzlich erklären könnte, bzw. mir sagen kann, wo ich sowas nachlesen kann, wäre das super.

    Danke schon mal im Voraus

  2. Beiträge anzeigen #2 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Zitat Zitat von BusfahrerCharlie Beitrag anzeigen
    "WELTNAME" ist natürlich nicht der richtige Name
    Das du deinen code verfälschst bevor du postest macht es nicht unbedingt einfacher dir zu helfen. Auch sind screenshots von code eher nervig, besser du kopierst das in den post rein.

    Allgemein macht es keinen Sinn zu Versuchen in Zen X einen NPC einzufügen während du gerade in Zen Y bist.
    Auch werden die Startup Funktionen nur aufgerufen wenn du zum ersten mal die entsprechende zen betrittst.

    Was du wahrscheinlich möchtest:
    Code:
    var int NPCsK2WurdenEingefuegt;
    
    func void INIT_WELTNAME (){
        if(!NPCsK2WurdenEingefuegt){ // nur genau einmal machen
            if(kapitel >= 2){
                NPCsK2WurdenEingefuegt = true; // merken das es einmal gemacht wurde
                Wld_InsertNpc (X, "WP1");
                Wld_InsertNpc (Y, "WP2");
                [...]
            };
        };
    };

  3. Beiträge anzeigen #3 Zitieren
    Abenteurer Avatar von BusfahrerCharlie
    Registriert seit
    Dec 2016
    Ort
    Hessen
    Beiträge
    56
     
    BusfahrerCharlie ist offline
    Das hat leider nicht funktioniert

    Ist es denn überhaupt möglich, einen Weltenwechsel über einen Dialog zu machen? Also in dem Sinne, dass dann auch die NPCs spawnen. Weil der restliche Code des Dialogs wird ja vermutlich noch ausgeführt, während die Welt gerade gewechselt wird.

    Wenn ich zum Beispiel beim FF_ApplyExt (Teleport, 10000, 1) eingebe, also 10 Sekunden warte, bevor ich teleportiert werde, dann wird der Kapitelwechsel schon gemacht, obwohl der erst nach dem Funktion aufgerufen wird.
    Gibt es denn eine Möglichkeit, den Aufruf einer Funktion zu verzögern?

    Und ich bin dann noch auf was Interessantes gestoßen. Beim B_Kapitelwelchsel(2, NEWWORLD_ZEN) steht ja hinten NEWWORLD_ZEN. Ich hab' mal ein bisschen im Code danach gesucht und es, wen wundert es, bei den Konstanten gefunden
    Code:
    const int NEWWORLD_ZEN      = 1;
    const int OLDWORLD_ZEN      = 2;
    const int DRAGONISLAND_ZEN    = 3;
    const int ADDONWORLD_ZEN    = 4;
    Aber wie und wo sind die Konstanten mit der .zen verknüpft? Weil vielleicht ist ja das das Problem. Vielleicht muss ja beim Kapitelwechsel als zweites Argument die richtige Variable angegeben werden.
    Geändert von BusfahrerCharlie (18.02.2019 um 16:11 Uhr)

  4. Beiträge anzeigen #4 Zitieren
    Serima Avatar von Fisk2033
    Registriert seit
    Dec 2010
    Ort
    Dresden
    Beiträge
    5.803
     
    Fisk2033 ist offline
    Zitat Zitat von BusfahrerCharlie Beitrag anzeigen
    Gibt es denn eine Möglichkeit, den Aufruf einer Funktion zu verzögern?
    Genau das machst du ja, wenn du "FF_ApplyExt (Teleport, 10000, 1)" aufrufst. Dann schreibt die Kapitelwechsel-Funtkion halt noch mit in die Teleportfunktion, die nach 10 Sekunden aufgerufen wird. Oder schreibe einfach eine neue FF_Apply-Funtkion!

    Mehr zum verzögerten Aufrufen von Funktionen auch hier: https://lego.worldofplayers.de/?Beis...FrameFunctions

  5. Beiträge anzeigen #5 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.246
     
    Milky-Way ist offline
    Zitat Zitat von BusfahrerCharlie Beitrag anzeigen
    Das hat leider nicht funktioniert

    Ist es denn überhaupt möglich, einen Weltenwechsel über einen Dialog zu machen? Also in dem Sinne, dass dann auch die NPCs spawnen. Weil der restliche Code des Dialogs wird ja vermutlich noch ausgeführt, während die Welt gerade gewechselt wird.

    Wenn ich zum Beispiel beim FF_ApplyExt (Teleport, 10000, 1) eingebe, also 10 Sekunden warte, bevor ich teleportiert werde, dann wird der Kapitelwechsel schon gemacht, obwohl der erst nach dem Funktion aufgerufen wird.
    Gibt es denn eine Möglichkeit, den Aufruf einer Funktion zu verzögern?

    Und ich bin dann noch auf was Interessantes gestoßen. Beim B_Kapitelwelchsel(2, NEWWORLD_ZEN) steht ja hinten NEWWORLD_ZEN. Ich hab' mal ein bisschen im Code danach gesucht und es, wen wundert es, bei den Konstanten gefunden
    Code:
    const int NEWWORLD_ZEN      = 1;
    const int OLDWORLD_ZEN      = 2;
    const int DRAGONISLAND_ZEN    = 3;
    const int ADDONWORLD_ZEN    = 4;
    Aber wie und wo sind die Konstanten mit der .zen verknüpft? Weil vielleicht ist ja das das Problem. Vielleicht muss ja beim Kapitelwechsel als zweites Argument die richtige Variable angegeben werden.
    Der Ansatz von Cryp18Struct ist schon der richtige Weg. Zeig uns mal den Code, den du dafür verwendet hast, mit dem es nicht funktioniert. Die Npc in der anderen Welt können erst nach Laden der Welt gespawnt werden -- aus deinem Dialog heraus also noch nicht.

    Vor dem Wechsel der Welt musst du darauf warten, dass der Dialog komplett beendet ist. Das lässt sich zum Beispiel mit einer FrameFunction (LeGo) machen, die solange aufgerufen wird, bis Npc_IsInState(DIALOGPARTNER, ZS_Talk) FALSE zurückgibt.

    Du kannst etwas abfragen wie CurrentLevel == NEWWORLD_ZEN, aber wie gesagt, das ist vermutlich nicht der zielführende Ansatz hier.

  6. Beiträge anzeigen #6 Zitieren
    Abenteurer Avatar von BusfahrerCharlie
    Registriert seit
    Dec 2016
    Ort
    Hessen
    Beiträge
    56
     
    BusfahrerCharlie ist offline
    Zitat Zitat von Milky-Way
    Zeig uns mal den Code, den du dafür verwendet hast, mit dem es nicht funktioniert.
    Ich hoffe das ist, was du haben willst:

    Code:
    Instance DIA_HauptmannGarret_SKIPPROLOG (C_INFO) { // Im Moment unwichtig
     npc = Mil_90004_HauptmannGarret;
     nr = 100;
     condition = DIA_HauptmannGarret_SKIPPROLOG_Condition;
     information = DIA_HauptmannGarret_SKIPPROLOG_Info;
     description = "Prolog überspringen";
    };
    Code:
    Func int DIA_HauptmannGarret_SKIPPROLOG_Condition() {
     return true;
    };
    Func int DIA_HauptmannGarret_SKIPPROLOG_Info() {
     AI_StopProcessInfos (self); // Dialog wird beendet
     FF_ApplyExt (Teleport, 0, 1); // Funktion wird aufgerufen (ich weiß leider nur, was die 0 bedeutet. Nämlich nach wie viele Millisekunden man teleportiert werden will
     B_Kapitelwechsel (2, NEWWORLD_ZEN); // Kapitelwechsel (Keine Ahnung, was das mit der ZEN hinten zu tun hat
    };
    Code:
    var int weltInitalized;
    Code:
    func void STARTUP_WELT () {
    //NPCs
     Wld_InsertNpc (VLK_90011_Haendler, "WELT_TOWN_HARBOR_01");
     Wld_InsertNpc (MIL_90012_Miliz1, "WELT_TOWN_GATE_01");
     Wld_InsertNpc (MIL_90013_Miliz2, "WELT_TOWN_GATE_02");
    //Monster
     
     B_InitMonsterAttitudes ();
     B_InitGuildAttitudes ();
     B_InitNpcGlobals ();
    };
    Code:
    func void STARTUP_Mod () {
     
     STARTUP_ISLAND ();
     if(!weltInitalized && kapitel >= 2) {
      weltInitalized = true;
      STARTUP_WELT ();
     };
    Code:
     B_InitMonsterAttitudes ();
     B_InitGuildAttitudes ();
     B_InitNpcGlobals ();
     stopAllSounds ();
    };
    (( Irgendwie klappt das mit dem Code nicht so richtig Ich entschuldige mich schon mal im Voraus dafür, dass das alles einzelne Segmente sind ))
    Geändert von BusfahrerCharlie (18.02.2019 um 18:56 Uhr)

  7. Beiträge anzeigen #7 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    1.: Einfügen von NPCs nach Weltwechsel:
    Es sollte für jede .zen jeweils eine Funktion STARTUP_WELTNAME und eine Funktion INIT_WELTNAME existieren.
    Die STARTUP_WELTNAME Funktion wird nur beim 1. Betreten der WELTNAME.zen aufgerufen.
    Die INIT_WELTNAME funktion wird jedes mal aufgerufen wenn man diese WELTNAME.zen betritt(auch wenn man einen Spielstand lädt und man sich in dieser WELTNAME.zen befindet).

    In meinem post:
    https://forum.worldofplayers.de/foru...1#post26037831
    hatte ich das einfügen von neuen NPCs in die INIT_WELTNAME gesetzt, nicht in die STARTUP_WELTNAME. Das ist da der entschiedene Unterschied.

    Es sieht auch immer noch so aus als würdest du deinen code verfälschen bevor du ihn postest(STARTUP_Mod, STARTUP_WELT würden nur Sinn machen wenn du eine mod.zen und eine welt.zen hättest). Diese "Geheimniskrämerei" ist unnötig, niemand wird dir hier deine Story Ideen "klauen". Das macht es nur schwerer dir zu helfen.

    2. Befehle werden noch im Dialog ausgeführt, du möchtest sie aber erst nach dem Dialog ausgeführt haben:
    Das einfachste wäre wohl das du die AI_Function aus LeGo benutzt:
    Code:
    func void verzoegerteFunktion(){
        B_Kapitelwechsel (2, NEWWORLD_ZEN);
        Teleport();
    };
    
    Func int DIA_HauptmannGarret_SKIPPROLOG_Info() {
        AI_StopProcessInfos (self); // In die AI-queue von NPC self wird geschrieben: Dialog beenden sobald die AI_Queue hier ankommt
        AI_Function(self, verzoegerteFunktion); // In die AI-Queue von self wird geschrieben: Funktion "verzoegerteFunktion" aufrufen sobald die AI_Queue hier ankommt
    };
    Dadurch wird dann die Funktion "verzoegerteFunktion" erst aufgerufen nachdem der Dialog beendet wurde.

    Was die Konstante NEWWORLD_ZEN angeht die in B_Kapitelwechsel als Parameter übergeben wird:
    Wenn du dir den Inhalt von der normalen Gothic2 B_Kapitelwechsel anschaust, kannst du sehen das abhängig von der Konstante unterschiedliche Funktionen aufgerufen werden. Ob/Wie das in deiner Mod sinnvoll ist, musst du entscheiden.

    Soll das eine "Erweiterungsmod" für Gothic 2 werden oder baust du dir eine "total conversion" mit eigenen Welten?

  8. Beiträge anzeigen #8 Zitieren
    Abenteurer Avatar von BusfahrerCharlie
    Registriert seit
    Dec 2016
    Ort
    Hessen
    Beiträge
    56
     
    BusfahrerCharlie ist offline
    Ist jetzt schon eine ganze Weile her, in der ich hier im Forum war. Seit dem vor Kurzem ein Update zur Modifikation kam, habe ich wieder etwas mehr Motivation, hier weiterzuarbeiten. Deshalb jetzt nochmal der ganze und unverfälschte Code, damit man vielleicht einen besseren Einblick erhält, was schieflaufen könnte. Bisher bin ich nämlich nicht weitergekommen.

    Spoiler:(zum lesen bitte Text markieren)
    Code:
    /******************************************/
    /********** Der Kreuzzug Beliars **********/
    /******************************************/
    
    var int faluaInitalized;
    
    /******************************************/
    /***************** Insel ******************/
    /******************************************/
    
    func void STARTUP_ISLAND()
    {
        //NPCs
        Wld_InsertNpc (Mil_90002_Herman, "WP_PFAD2_14");
        Wld_InsertNpc (Mil_90003_Olaf, "WP_MIDEBENE_17");
        Wld_InsertNpc (BAU_90005_Pathos, "WP_HAUS1_02");
        Wld_InsertNpc (BAU_90006_Sins, "WP_HOCHEBENE_35");
        Wld_InsertNpc (BAU_90007_Belethor, "WP_RUIN1_03");
        Wld_InsertNpc (BAU_90009_Alfred, "WP_STRAND4_09");
        Wld_InsertNpc (KDF_90008_Yormund, "WP_TURM_31");
        Wld_InsertNpc (Mil_90004_HauptmannGarret ,"WP_TURM_03");
        Wld_InsertNpc (Mil_90010_Peck ,"WP_STRAND4_26"); 
    
        //Monster
        Wld_InsertNpc (Gobbo_Black_01, "WP_SCHLUCHT_02");
        Wld_InsertNpc (Gobbo_Green_01, "WP_SCHLUCHT_01");
        Wld_InsertNpc (Lurker ,"WP_STRAND2_07");
        Wld_InsertNpc (Lurker ,"WP_STRAND2_08");
        Wld_InsertNpc (Lurker ,"WP_STRAND2_05");
        Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_31");
        Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_26");
        Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_30");
        Wld_InsertNpc (Gobbo_Black ,"WP_TIEFEBENE_02");
        Wld_InsertNpc (Scavenger ,"77");
        Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_79");
        Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_80");
        Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_78");
        Wld_InsertNpc (Scavenger ,"WP_PFAD1_12");
        Wld_InsertNpc (Gobbo_Green ,"WP_STRAND3_01");
        Wld_InsertNpc (Gobbo_Green ,"WP_TIEFEBENE_29");
        Wld_InsertNpc (Gobbo_Green ,"WP_TIEFEBENE_20");
        Wld_InsertNpc (Gobbo_Black ,"WP_TIEFEBENE_19");
        Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_54");
        Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_48");
        Wld_InsertNpc (Gobbo_Warrior,"WP_STRAND1_06");
        Wld_InsertNpc (Gobbo_Green ,"WP_STRAND1_05");
        Wld_InsertNpc (Gobbo_Green ,"WP_STRAND1_10");
        Wld_InsertNpc (Skeleton ,"WP_CAVE7_07");
        Wld_InsertNpc (Skeleton ,"WP_CAVE1_06");
        Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_68");
        Wld_InsertNpc  (Giant_Rat, "WP_STRAND4_21");
        Wld_InsertNpc  (Giant_Rat, "WP_STRAND4_20");
    };
    
    /******************************************/
    /***************** AKT I ******************/
    /******************************************/
    
    func void STARTUP_MM_PART_BEACH()
    {
        //NPCs
        Wld_InsertNpc (VLK_90011_Haendler, "FALUA_TOWN_HARBOR_01");
        Wld_InsertNpc (MIL_90012_Miliz1, "FALUA_TOWN_GATE_01");
        Wld_InsertNpc (MIL_90013_Miliz2, "FALUA_TOWN_GATE_02");
    
        //Monster
        B_InitMonsterAttitudes ();
        B_InitGuildAttitudes ();
        B_InitNpcGlobals ();
        //CurrentLevel = MM_PART_BEACH_ZEN;
    
    };
    
    func void INIT_MM_PART_BEACH()
    {
        if(!faluaInitalized)
        {
            if(kapitel >= 2)
            {
                faluaInitalized = true;
                Wld_InsertNpc (VLK_90011_Haendler, "FALUA_TOWN_HARBOR_01");
                Wld_InsertNpc (MIL_90012_Miliz1, "FALUA_TOWN_GATE_01");
                Wld_InsertNpc (MIL_90013_Miliz2, "FALUA_TOWN_GATE_02");
            };
        };
    };
    
    func void STARTUP_Mod()
    {
     
        STARTUP_ISLAND();
        STARTUP_MM_PART_BEACH();
        B_InitMonsterAttitudes();
        B_InitGuildAttitudes();
        B_InitNpcGlobals();
        stopAllSounds();
        PlayVideo ("Beliar_Intro.BIK");
    };


    Spoiler:(zum lesen bitte Text markieren)
    Code:
    // ************************************************************
    //       SKIP_PROLOG
    // ************************************************************
    
    Func void verzoegerteFunktion()
    {
        B_Kapitelwechsel (2, NEWWORLD_ZEN);
        FF_ApplyExt (Teleport, 0, 1);
    };
    
    Instance DIA_HauptmannGarret_SKIPPROLOG(C_INFO)
    {
        npc = Mil_90004_HauptmannGarret;
        nr = 100;
        condition = DIA_HauptmannGarret_SKIPPROLOG_Condition;
        information = DIA_HauptmannGarret_SKIPPROLOG_Info;
        description = "Prolog überspringen";
    };
    
    Func int DIA_HauptmannGarret_SKIPPROLOG_Condition()
    {
        return true;
    };
    
    Func int DIA_HauptmannGarret_SKIPPROLOG_Info()
    {
        AI_StopProcessInfos (self);
        AI_Function (self, verzoegerteFunktion);
        FF_ApplyExt (Teleport, 0, 1);
        B_Kapitelwechsel (2, MM_PART_BEACH_ZEN);
        Wld_InsertNpc (VLK_90011_Haendler, "FALUA_TOWN_HARBOR_01");
        Wld_InsertNpc (MIL_90012_Miliz1, "FALUA_TOWN_GATE_01");
        Wld_InsertNpc (MIL_90013_Miliz2, "FALUA_TOWN_GATE_02");
    };


    Schon mal danke im Voraus für die Hilfe.
    Geändert von BusfahrerCharlie (11.08.2019 um 21:19 Uhr)

  9. Beiträge anzeigen #9 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Wie heißt die .zen in welcher die NPCs eingefügt werden sollen?
    Falls die Beach.zen heißt, dann kannst du eine Funktion mit dem Namen STARTUP_BEACH und eine Funktion mit dem Namen INIT_BEACH erstellen und diese werden dann von der engine automatisch aufgerufen(STARTUP_XXX nur beim ersten betreten, INIT_XXX jedes mal).

    Schreib bitte mal wie alle Welten heißen. (Hast du wirklich eine .zen die Mod.zen heißt?)
    Geändert von Cryp18Struct (11.08.2019 um 21:25 Uhr)

  10. Beiträge anzeigen #10 Zitieren
    Abenteurer Avatar von BusfahrerCharlie
    Registriert seit
    Dec 2016
    Ort
    Hessen
    Beiträge
    56
     
    BusfahrerCharlie ist offline
    Die Zen auf der man startet heißt MOD.zen, die zu der man wechselt heißt MM_PART_BEACH.zen

  11. Beiträge anzeigen #11 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Zitat Zitat von BusfahrerCharlie Beitrag anzeigen
    Code:
    func void STARTUP_Mod()
    {
     
        STARTUP_ISLAND();
        STARTUP_MM_PART_BEACH();
        B_InitMonsterAttitudes();
        B_InitGuildAttitudes();
        B_InitNpcGlobals();
        stopAllSounds();
        PlayVideo ("Beliar_Intro.BIK");
    };
    Der hier rot markierte Aufruf von STARTUP_MM_PART_BEACH innerhalb der STARTUP_Mod() macht eher keinen Sinn.

    Keine der original gothic Welten haben Unterstriche(_) im Namen, evt. ist das ein Problem.
    Du könntest testweise mal deine MM_PART_BEACH.zen umbenennen in BEACH.zen und dann allen code anpassen.
    (Also den Weltwechsel und die INIT_XXX und STARTUP_XXX funktionen)

  12. Beiträge anzeigen #12 Zitieren
    Abenteurer Avatar von BusfahrerCharlie
    Registriert seit
    Dec 2016
    Ort
    Hessen
    Beiträge
    56
     
    BusfahrerCharlie ist offline
    Ich hab die Datei umbenannt und aus der Funktion STARTUP_Mod den Aufruf von STARTUP_MM_PART_BEACH (jetzt STARTUP_BEACH) entfernt. Leider ist das Problem damit nicht behoben.

  13. Beiträge anzeigen #13 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Zeig bitte nochmal allen code wie er jetzt aussieht.
    Die Funktion Teleport bitte auch.

    Ist das Problem das du in der beach.zen ankommst und keine NPCs gespawnt werden?
    Und die waypoints "FALUA_TOWN_HARBOR_01", "FALUA_TOWN_GATE_01" und "FALUA_TOWN_GATE_02" existieren in der beach.zen?

  14. Beiträge anzeigen #14 Zitieren
    Abenteurer Avatar von BusfahrerCharlie
    Registriert seit
    Dec 2016
    Ort
    Hessen
    Beiträge
    56
     
    BusfahrerCharlie ist offline
    Ist das Problem das du in der beach.zen ankommst und keine NPCs gespawnt werden?
    Genau das ist das Problem. Der Weltenwechsel an sich funktioniert zwar, aber die NPCs erscheinen nicht.

    Startup.d
    Code:
    /******************************************/
    /********** Der Kreuzzug Beliars **********/
    /******************************************/
    (( Keine Ahnung, warum der Editor die beiden Blöcke hier immer trennt. Eigentlich gehören sie zusammen ))

    Code:
    var int faluaInitalized;
    
    /******************************************/
    /***************** Insel ******************/
    /******************************************/
    
    
    func void STARTUP_Island ()
    {
     //NPCs
     Wld_InsertNpc (Mil_90002_Herman, "WP_PFAD2_14");
     Wld_InsertNpc (Mil_90003_Olaf, "WP_MIDEBENE_17");
     Wld_InsertNpc (BAU_90005_Pathos, "WP_HAUS1_02");
     Wld_InsertNpc (BAU_90006_Sins, "WP_HOCHEBENE_35");
     Wld_InsertNpc (BAU_90007_Belethor, "WP_RUIN1_03");
     Wld_InsertNpc (BAU_90009_Alfred, "WP_STRAND4_09");
     Wld_InsertNpc (KDF_90008_Yormund, "WP_TURM_31");
     Wld_InsertNpc (Mil_90004_HauptmannGarret ,"WP_TURM_03");
     Wld_InsertNpc (Mil_90010_Peck ,"WP_STRAND4_26"); 
    
    
     //Monster
     Wld_InsertNpc (Gobbo_Black_01, "WP_SCHLUCHT_02");
     Wld_InsertNpc (Gobbo_Green_01, "WP_SCHLUCHT_01");
     Wld_InsertNpc (Lurker ,"WP_STRAND2_07");
     Wld_InsertNpc (Lurker ,"WP_STRAND2_08");
     Wld_InsertNpc (Lurker ,"WP_STRAND2_05");
     Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_31");
     Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_26");
     Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_30");
     Wld_InsertNpc (Gobbo_Black ,"WP_TIEFEBENE_02");
     Wld_InsertNpc (Scavenger ,"77");
     Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_79");
     Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_80");
     Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_78");
     Wld_InsertNpc (Scavenger ,"WP_PFAD1_12");
     Wld_InsertNpc (Gobbo_Green ,"WP_STRAND3_01");
     Wld_InsertNpc (Gobbo_Green ,"WP_TIEFEBENE_29");
     Wld_InsertNpc (Gobbo_Green ,"WP_TIEFEBENE_20");
     Wld_InsertNpc (Gobbo_Black ,"WP_TIEFEBENE_19");
     Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_54");
     Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_48");
     Wld_InsertNpc (Gobbo_Warrior,"WP_STRAND1_06");
     Wld_InsertNpc (Gobbo_Green ,"WP_STRAND1_05");
     Wld_InsertNpc (Gobbo_Green ,"WP_STRAND1_10");
     Wld_InsertNpc (Skeleton ,"WP_CAVE7_07");
     Wld_InsertNpc (Skeleton ,"WP_CAVE1_06");
     Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_68");
     Wld_InsertNpc  (Giant_Rat, "WP_STRAND4_21");
     Wld_InsertNpc  (Giant_Rat, "WP_STRAND4_20");
    };
    
    
    /******************************************/
    /***************** AKT I ******************/
    /******************************************/
    
    
    func void STARTUP_Beach ()
    {
     //NPCs
     Wld_InsertNpc (VLK_90011_Haendler, "FALUA_TOWN_HARBOR_01");
     Wld_InsertNpc (MIL_90012_Miliz1, "FALUA_TOWN_GATE_01");
     Wld_InsertNpc (MIL_90013_Miliz2, "FALUA_TOWN_GATE_02");
    
    
     //Monster
     B_InitMonsterAttitudes ();
     B_InitGuildAttitudes ();
     B_InitNpcGlobals ();
     CurrentLevel = BEACH_ZEN;
    };
    
    
    func void INIT_BEACH ()
    {
        if (!faluaInitalized)
        {
            if (kapitel >= 2)
            {
                faluaInitalized = true;
                Wld_InsertNpc (VLK_90011_Haendler, "FALUA_TOWN_HARBOR_01");
       Wld_InsertNpc (MIL_90012_Miliz1, "FALUA_TOWN_GATE_01");
       Wld_InsertNpc (MIL_90013_Miliz2, "FALUA_TOWN_GATE_02");
            };
        };
        CurrentLevel = BEACH_ZEN;
    };
    
    
    func void STARTUP_Mod()
    {
     
     STARTUP_Island ();
     //STARTUP_Beach ();
     B_InitMonsterAttitudes ();
     B_InitGuildAttitudes ();
     B_InitNpcGlobals ();
     stopAllSounds ();
     //PlayVideo ("Beliar_Intro.BIK");
    };


    Teleportfunktion
    Code:
    func void Teleport()
    {
        AI_Teleport (PC_Hero, "WP_CHANGE");
    };
    Dialog mit dem Teleportbefehl
    Code:
    // ************************************************************
    //       SKIP_PROLOG
    // ************************************************************
    Func void verzoegerteFunktion()
    {
     B_Kapitelwechsel (2, NEWWORLD_ZEN);
     FF_ApplyExt (Teleport, 0, 1);
    };
    Instance DIA_HauptmannGarret_SKIPPROLOG(C_INFO)
    {
     npc = Mil_90004_HauptmannGarret;
     nr = 100;
     condition = DIA_HauptmannGarret_SKIPPROLOG_Condition;
     information = DIA_HauptmannGarret_SKIPPROLOG_Info;
     description = "Prolog überspringen";
    };
    Func int DIA_HauptmannGarret_SKIPPROLOG_Condition()
    {
     return true;
    };
    Func int DIA_HauptmannGarret_SKIPPROLOG_Info()
    {
     AI_StopProcessInfos (self);
     AI_Function (self, verzoegerteFunktion);
     FF_ApplyExt (Teleport, 0, 1);
     B_Kapitelwechsel (2, BEACH_ZEN);
     Wld_InsertNpc (VLK_90011_Haendler, "FALUA_TOWN_HARBOR_01");
     Wld_InsertNpc (MIL_90012_Miliz1, "FALUA_TOWN_GATE_01");
     Wld_InsertNpc (MIL_90013_Miliz2, "FALUA_TOWN_GATE_02");
    };


    Wegpunkte:
    Spoiler:(zum lesen bitte Text markieren)


    Spoiler:(zum lesen bitte Text markieren)


    Spoiler:(zum lesen bitte Text markieren)
    Geändert von BusfahrerCharlie (12.08.2019 um 15:24 Uhr)

  15. Beiträge anzeigen #15 Zitieren
    Veteran Avatar von N1kX
    Registriert seit
    Aug 2018
    Ort
    Serov
    Beiträge
    643
     
    N1kX ist offline
    Zitat Zitat von BusfahrerCharlie Beitrag anzeigen

    Genau das ist das Problem. Der Weltenwechsel an sich funktioniert zwar, aber die NPCs erscheinen nicht.

    Hi. Try moving in that direction.
    Startup.d
    Code:
    func void startup_global()
    {
        Game_InitGerman();
    };
    
    func void init_global()
    {
        Game_InitGerman();
    };
    
    /******************************************/
    /***************** Insel ******************/
    /******************************************/
    
    func void STARTUP_Island ()
    {
     //NPCs
     Wld_InsertNpc (Mil_90002_Herman, "WP_PFAD2_14");
     Wld_InsertNpc (Mil_90003_Olaf, "WP_MIDEBENE_17");
     Wld_InsertNpc (BAU_90005_Pathos, "WP_HAUS1_02");
     Wld_InsertNpc (BAU_90006_Sins, "WP_HOCHEBENE_35");
     Wld_InsertNpc (BAU_90007_Belethor, "WP_RUIN1_03");
     Wld_InsertNpc (BAU_90009_Alfred, "WP_STRAND4_09");
     Wld_InsertNpc (KDF_90008_Yormund, "WP_TURM_31");
     Wld_InsertNpc (Mil_90004_HauptmannGarret ,"WP_TURM_03");
     Wld_InsertNpc (Mil_90010_Peck ,"WP_STRAND4_26"); 
    
    
     //Monster
     Wld_InsertNpc (Gobbo_Black_01, "WP_SCHLUCHT_02");
     Wld_InsertNpc (Gobbo_Green_01, "WP_SCHLUCHT_01");
     Wld_InsertNpc (Lurker ,"WP_STRAND2_07");
     Wld_InsertNpc (Lurker ,"WP_STRAND2_08");
     Wld_InsertNpc (Lurker ,"WP_STRAND2_05");
     Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_31");
     Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_26");
     Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_30");
     Wld_InsertNpc (Gobbo_Black ,"WP_TIEFEBENE_02");
     Wld_InsertNpc (Scavenger ,"77");
     Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_79");
     Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_80");
     Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_78");
     Wld_InsertNpc (Scavenger ,"WP_PFAD1_12");
     Wld_InsertNpc (Gobbo_Green ,"WP_STRAND3_01");
     Wld_InsertNpc (Gobbo_Green ,"WP_TIEFEBENE_29");
     Wld_InsertNpc (Gobbo_Green ,"WP_TIEFEBENE_20");
     Wld_InsertNpc (Gobbo_Black ,"WP_TIEFEBENE_19");
     Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_54");
     Wld_InsertNpc (Molerat ,"WP_TIEFEBENE_48");
     Wld_InsertNpc (Gobbo_Warrior,"WP_STRAND1_06");
     Wld_InsertNpc (Gobbo_Green ,"WP_STRAND1_05");
     Wld_InsertNpc (Gobbo_Green ,"WP_STRAND1_10");
     Wld_InsertNpc (Skeleton ,"WP_CAVE7_07");
     Wld_InsertNpc (Skeleton ,"WP_CAVE1_06");
     Wld_InsertNpc (Scavenger ,"WP_HOCHEBENE_68");
     Wld_InsertNpc  (Giant_Rat, "WP_STRAND4_21");
     Wld_InsertNpc  (Giant_Rat, "WP_STRAND4_20");
    };
    
    /******************************************/
    /***************** AKT I ******************/
    /******************************************/
    
    func void STARTUP_Beach ()
    {
     //NPCs
     Wld_InsertNpc (VLK_90011_Haendler, "FALUA_TOWN_HARBOR_01");
     Wld_InsertNpc (MIL_90012_Miliz1, "FALUA_TOWN_GATE_01");
     Wld_InsertNpc (MIL_90013_Miliz2, "FALUA_TOWN_GATE_02");
    
     //Monster
    };
    
    func void INIT_BEACH()
    {
        B_InitMonsterAttitudes ();
        B_InitGuildAttitudes ();
        B_InitNpcGlobals ();
    };
    
    func void STARTUP_Mod()
    {
        STARTUP_Island ();
        STARTUP_Beach ();
        Kapitel = 1;
    };
    
    func void init_mod()
    {
        B_InitMonsterAttitudes ();
        B_InitGuildAttitudes ();
        B_InitNpcGlobals ();
        stopAllSounds ();
     };
    Add the following script to the project \Content\Story\B_Story\B_ENTER_BEACH.d
    B_ENTER_BEACH
    Code:
    var int faluaInitalized;
    
    func void B_ENTER_BEACH_Kapitel_1()
    {
        //
    };
    
    func void B_ENTER_BEACH_Kapitel_2()
    {
        if (!faluaInitalized)
        {
            faluaInitalized = true;
            Wld_InsertNpc (VLK_90011_Haendler, "FALUA_TOWN_HARBOR_01");
            Wld_InsertNpc (MIL_90012_Miliz1, "FALUA_TOWN_GATE_01");
            Wld_InsertNpc (MIL_90013_Miliz2, "FALUA_TOWN_GATE_02");
            };
        };
    };
    
    func void B_ENTER_BEACH()
    {
        B_InitNpcGlobals();
        if(Kapitel >= 1)
        {
            B_ENTER_BEACH_Kapitel_1();
        };
        if(Kapitel >= 2)
        {
            B_ENTER_BEACH_Kapitel_2();
        };
        CurrentLevel = BEACH_ZEN;
        B_InitNpcGlobals();
    };

  16. Beiträge anzeigen #16 Zitieren
    Abenteurer Avatar von BusfahrerCharlie
    Registriert seit
    Dec 2016
    Ort
    Hessen
    Beiträge
    56
     
    BusfahrerCharlie ist offline
    This sadly didn't work. But I found out that zSpy prints an info when a NPC is inserted (AI: Inserted NPC : Hauptmann Garret / MIL_90004_HAUPTMANNGARRET …. <oNpc.cpp,#9188>)
    After the world change nothing like this happens.

  17. Beiträge anzeigen #17 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Ich denke es wäre sinnvoll erstmal zu prüfen ob die init/startup Funktionen überhaupt aufgerufen werden. probier mal bitte folgendes:
    Diese beiden Funktionen irgendwo einfügen(ganz oben in der startup.d?)
    Code:
    func void printWorldName(){
    	print(MEM_World.worldName);
    	printDebug(MEM_World.worldName);
    };
    
    func void printInitBeachWasCalled(){
    	print("init_beach was executed");
    	printDebug("init_beach was executed");
    };
    Dann in der Funktion init_global ganz unten diesen FF_ApplyOneExt Aufruf einfügen:
    Code:
    func void init_global(){
        [...]
        FF_ApplyOnceExt(printWorldName, 2000, -1);
    };
    und in der init_beach ganz unten diesen FF_ApplyOneExt Aufruf einfügen:
    Code:
    func void init_beach(){
        [...]
        FF_ApplyOnceExt(printInitBeachWasCalled, 2000, -1);
    };
    Wenn du dich dann in die 2.Welt teleportieren lässt, Was wird dir dann an prints angezeigt?

  18. Beiträge anzeigen #18 Zitieren
    Abenteurer Avatar von BusfahrerCharlie
    Registriert seit
    Dec 2016
    Ort
    Hessen
    Beiträge
    56
     
    BusfahrerCharlie ist offline
    Ich denke damit haben wir das Problem identifiziert. Entgegen meiner Erwartung werde ich nicht in die BEACH.zen teleportiert, sondern in die TEST.zen. Wo kann man denn festlegen, in welche .zen man teleportiert werden möchte?

  19. Beiträge anzeigen #19 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Dieser code von dir:
    Code:
    func void Teleport()
    {
        AI_Teleport (PC_Hero, "WP_CHANGE");
    };
    sieht so aus als würde der hero zu einem waypoint teleportiert werden wo er dann in einem levelchange objekt(oCTriggerChangeLevel) landet.
    Du müsstest also die mod.zen im spacer öffnen und dieses Objekt(nahe dem waypoint WP_CHANGE) suchen und dort in den vob Eigenschaften Veränderungen machen und die mod.zen abspeichern.

  20. Beiträge anzeigen #20 Zitieren
    Abenteurer Avatar von BusfahrerCharlie
    Registriert seit
    Dec 2016
    Ort
    Hessen
    Beiträge
    56
     
    BusfahrerCharlie ist offline
    Okay, ich bin jetzt zwar in der richtigen Welt, aber nicht am richtigen Startpunkt. Wie lege ich den fest? (Hab leider nicht viel Ahnung vom Spacer)
    Geändert von BusfahrerCharlie (15.08.2019 um 21:19 Uhr)

Seite 1 von 2 12 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