Script für Szenarienziele anzeigen

    • Script für Szenarienziele anzeigen

      Hallo zusammen.

      ich suche nach einer Möglichkeit, Ziele bei einem Szenarie erst anzuzeigen, wenn man eine bestimmte Aktion tätigt.
      (Das passiert in der Kampagne ständig)

      Mein Held soll nun den ersten Obelisken findet, und erst dann soll das Ziel auftauchen: "Ashas Träne finden"

      Dazu habe ich das Ziel bereits in Objectives erstellt und auf unsichtbar gestellt.
      Und ich habe eine Trigger_Region um den Obelisken mit einer Messagebox.
      Aber ich finde keine Option, IsActive und IsHidden per Script umzustellen.

      Das Ganze sieht nun so aus:


      (Der Graal soll doch die Träne sein oder?)

      Was kommt nun in die 4. Zeile?



      Falls jemand eine weitere Lösungsidee für dieses Problem hat, bitte posten. Ich weiss nicht, ob meine erste Idee auch zum Ziel führt.

      (Alles der HoMM5 Editor)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Lya ()

    • ohje ... :traurig:

      na falls ich selber noch ne Lösung finde, werd ich es posten, aber bisher weiss ich da einfach nicht weiter.
      Das Editorhandbuch mit den Syntaxbefehlen bin ich auch schon durchgegangen...
      Ich bin da etwas bewandert in Sachen C, aber mit lua bin ich ziemlich wackelig auf den Beinen.... :shy:
    • Disclaimer: Bin nur zufällig mal wieder hier reingestolpert, und habe seit über einem Jahr den Editor nicht mehr angefasst, also kanns sein dass das hier nicht (mehr) stimmt ;)

      Aber such mal im script funktionen handbuch nach dieser funktion:

      SetObjectiveVisible
      SetObjectiveVisible – show/hide the objective in the specified player’s interface

      oder eventuell auch
      SetObjectiveState
      SetObjectiveState – change the objective’s status
      "Well, things just got simpler. And a lot more complicated."
    • Danke Makrise. Es funktioniert. :daumen:
      Und hier mein frischgewonnenes Wissen für alle:
      Und unten noch ne Frage an die Kenner!

      ICH MUSS DAS GANZE TRENNEN, WEIL 7 BILDER ZUVIEL FÜR EINEN POST SIND -.-
      ______________________________________________________

      Ziele im Szenario mit dem Helden verändern
      (Anleitung für den Editor von Heroes of Might and Magic 5, ohne Addons)

      Ihr kennt das von Kampagnen, ihr lauft über eine Stelle der Karte, ein kleines Video läuft, und dann haben sich eure Szenarienziele plötzlich verändert. Wir erstellen hier kein Video, aber Ziele können wir verändern!

      Ich gebe hier ein Beispiel für "Ashas Träne finden". (Dies wird eine Einzelspielermap)

      Erstmal erstellen wir um unseren ersten Obelisken, den der Held womöglich als erstes erreichen wird, eine Region und geben dem Ganzen einen markanten Namen!


      Nun müssen wir auf der Karte die Ziele definieren.
      Geht dazu in "Map Properties Tree"


      Der erste Spieler ist unser Held in dem Szenario, also verändern wir seine Ziele.
      Auf einer frischen Karte sollte unter Objectives nichts stehen.
      Wir fügen mit Add 2 neue Elemente hinzu.

      Standartmäßig ist das Ziel "Kill'm all" angegeben. Das sieht im Spiel hässlich aus. Das können wir unter Common -> Objectives ->[0] löschen oder verändern. Ich habe es gelöscht, und gebe nur dem ersten Spieler das Ziel, alle Gegner zu töten.

      ...

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Lya ()

    • ...


      Ich öffne [0] für das erste Ziel:

      Hier muss wieder ein markanter Name stehen. Ohne einen Namen lässt sich im Script nicht draufzugreifen.
      Geht auf CaptionFileRef -> Edit, um die Überschrift für das Ziel zu geben.
      Geht auf DescriptionFileRef -> Edit, um den Text dazu zu schreiben.

      Achtet bei allem dadrauf, dass ihr nicht den selben Namen für unterschiedliche Dinge verwendet.

      KIND gibt uns die Art des Zieles wieder.

      Das war nun das bekannte Ziel "Kill'm all" verschönert.

      Jetzt kommen wir zu Ashas Träne:
      Dazu öffne ich [1] für das zweite Ziel:

      Wir wollen nun, dass der Spieler dieses Ziel erst sieht, wenn er am Obelisken ist!
      Heroes muss es natürlich vorher schon kennen, deswegen habe ich es erstellt, aber für den Spieler auf unsichtbar gesetzt!
      Der fleissige Leser hat den Unterschied zum ersten Bild bereits bei IsInitialyActive und IsInitialyVisible gesehen.


      Setz kommt der Trigger!
      Geht auf -> Script -> Edit Script
      So sollte es im Editor dann eingetragen werden:


      Hier der Code zum kopieren:

      Quellcode

      1. function Erster_obelisk()
      2. MessageBox("/Maps/SingleMissions/Lapislazuli/ersterObelisk.txt"); --Zeigt die Nachricht aus der Textdatei an
      3. SetObjectiveVisible("Primary2", true, PLAYER_1); --Macht das Ziel sichtbar fuer den Spieler
      4. Trigger(REGION_ENTER_AND_STOP_TRIGGER,"erster_obelisk",nil); --Schaltet den Ausloeser wieder ab, um das Ereignis nicht nochmal auszuloesen
      5. end;
      6. Trigger(REGION_ENTER_AND_STOP_TRIGGER,"erster_obelisk","Erster_obelisk"); --Setzt den Ausloeser zum Aufruf der Funktion


      Kurze Erklärung:
      Zeile 11: Den Trigger brauchen wir, um das ganze mit der Region, die wir erstellt haben, zu verknüpfen.
      Dieses Ding wird aufgerufen, und startet die Funktion, die Erster_obelisk() heisst.

      Zeile 4: Was das Ding MessageBox kann, erklärt euch makrise.

      Zeile 5: SetObjectiveVisiible macht unser erstelltes Ziel "Primary2" sichtbar für den Spieler. Genauso könnten Bastelfreunde, true durch false ersetzen, ein bereits gegebenes Ziel unsichtbar machen...

      Zeile 7: Stellt den Trigger aus, damit man nicht (spürbarer Grund) jedesmal ein lästiges Blabla von der Messagebox bekommt.



      ende.

      ______________________________________________________

      PS: Ich hab kein Dingdong und keine optisch große Schrift "Szenarienziele haben sich verändert".... wie es in der Kampagne und bei "Neue Woche der xy" üblich ist.
      Ich dachte, das geht automatisch? 8o
    • Original von Lya
      PS: Ich hab kein Dingdong und keine optisch große Schrift "Szenarienziele haben sich verändert".... wie es in der Kampagne und bei "Neue Woche der xy" üblich ist.
      Ich dachte, das geht automatisch? 8o


      Ersetze

      Quellcode

      1. SetObjectiveVisible("Primary2", true, PLAYER_1);

      durch

      Quellcode

      1. SetObjectiveState("Primary2", OBJECTIVE_ACTIVE, PLAYER_1);


      Macht es ebenso sichtbar, aber mit optischem und akustischem Klang!

      :king: