Scripts funktionieren überhaupt nicht

  • Hey Leute,


    ich habe jetzt seit gestern die ganzen Dokumentationen vom H5 Map-Editor gefunden und mich gleich mal rangesetzt, etwas zu scripten.
    Mein Problem: Es funktioniert vorne und hinten nicht.
    Hier erstmal ein paar Infos:
    Ich habe nen Laptop und Windows 7.
    Ich habe ToE auf Version 3.1 gepatcht.


    Das hier ist das fragwürdige Script:



    Eigentlich sollte das ganze so ablaufen:
    Zu Beginn der Mission kriegt der Spieler eine Story-Nachricht angezeigt.
    Aus dieser geht hervor, dass er auf eine bestimmte Weise "Macht" bekommt, daher soll er anschließen 4mal Leveln um auf Level 5 zu kommen.
    Anschließend geht er durch die Landschaft, bis er eine enge Passage erreicht, sich ihm ein Haufen Inferno-Kreaturen anschließen sollen (Die Region heißt "Armee").
    Der letzte Teil des Scripts ist hier aus dem Forum kopiert und soll einfach nur eine Textnachricht zeigen.


    Und das hier passiert:
    NICHTS.
    Es kommt weder eine Nachricht, noch levelt der Held oder kriegt Kreaturen. Weder, wenn er in der Region stehen bleibt, noch wenn er durchläuft.


    Das 1. Script hab ich aus der Originalanleitung rausgezogen, und mich wundert's sehr, dass er nichtmal das nimmt...


    Muss man vielleicht irgendwie Scripts aktivieren oder ihm am Anfang iwelche Befehle eingeben?


    Bin für jeden Tipp dankbar.


    P.S.: Ubisoft, gebt den H4-Editor wieder, das war der geilste Editor ever!!!

  • Das ist zur Abwechslung sogar nur indirekt Ubis Schuld im gegensatz zu sonst. Das der Editor so schei..e ist liegt am Programmierteam und das sind halt inzwischen die Russischen Nival anstatt der guten alten New World Computing Jungs.


    1. habe noch nie gesehen das man eine Textdatei " (1) " benennt. da würde ich lieber nen Dateinamen wählen den man nicht gleich wieder selbst für nen Unterscriptaufruf halten könnte vom Namen her.


    2. Ist der Scriptname (nicht der Name im Spiel) des Helden wirklich so wie er da steht?


    3. Bei AddHeroCreature würde ich dann auch anstatt "heroname" wirklich den Scriptnamen des Helden einsetzen.

    Die Sense gehört zwar nicht zu den wichtigsten und bedeutsamsten Kriegswaffen, aber wer sich auf der falschen Seite einer Bauernrevolte befindet macht rasch die Erfahrung daß sie in geübten Händen eine Menge Unheil anrichten kann.

  • Hab's jz wie folgt geändert:



    Funktionieren tut's immer noch nicht.
    Der Held heißt wirklich "Jazaz" im Skriptnamen, den Namen im Spiel hab ich auf Arkyras geändert, aber das heißt ja eig nix...


    Habe auch die Häkchen mal weggelassen (bei LevelUpHero und bei AddHeroCreature), das half auch nicht.


    Kann es vielleicht damit zu tun haben, dass die Karte 2 Ebenen hat? (Untergrund) In diesem liegt nämlich der "Armee"-Bereich, den die Kreatur-Funktion ansprechen soll...

  • Es ist fast unvermeidlich, dass man jedes Script mindestens dreimal ausprobieren muss, bis es funktioniert. Ich teste meistens jede Funktion einzeln, weil oft das ganze Script nicht mehr geht, wenn ein Teil falsch ist (, wenn man z.B. einen Namen falsch schreibt.) :-#


    Zu deinem Script: Den LevelUp Teil brauchst du nicht in eine Funktion schreiben, weil er nicht durch einen Trigger ausgelöst wird. Ich hab gerade das folgende Script ausprobiert und bei mir hats funktioniert:


    LevelUpHero("Jazaz");


    Außerdem würde ich hinter jede Zeile einen Strichpunkt setzten, auch innerhalb einer Funktion.
    Für den zweiten Teil gibt es in der praktischen Einführung ein ähnliches Script, das du einfach mal direkt kopieren kannst (mit Copy + Paste, um Rechtschreibfehler zu vermeiden, nur den Region- und Heldennamen ändern)


    function Meeting( heroname )
    if heroname == "Christian" then
    AddHeroCreatures( heroname, CREATURE_ARCHANGEL, 1 );
    Trigger( REGION_ENTER_AND_STOP_TRIGGER, "meeting", nil );
    end;
    end;
    Trigger( REGION_ENTER_AND_STOP_TRIGGER, "meeting", "Meeting" );


    In deiner ersten Version könnte das Problem z.B. darin liegen, dass du zwischen heroname und der jeweils ersten Zahl kein Komma eingefügt hast.
    Einfach immer wieder anpassen, umschreiben und ausprobieren. Irgendwann funktionierts dann normalerweise schon :aua:

    Die kausale Unabhängigkeit der Quarks von unserer Rede ist kein Merkmal der Realität (im Sinne des Gegenteils der Welt des Scheins), sondern sie ist einfach ein unbezweifelter Bestandteil unseres Redens über Quarks.
    Richard Rorty

  • Aua, das trifft nen Abiturienten jetzt doch ziemlich hart :D Ich Trottel hab die Semikolons (Semikola/Semikolotons, wie heißt das?) vergessen^^ gleich mal testen, mom...


    Hm, doof, klappt immer noch nicht.
    Habs jz so:


    Ergebnis ist nach wie vor dasselbe, der Held levelt nicht und Kreaturen gibt's auch keine. Die Textnachricht will auch nicht, im richtigen Verzeichnis ist sie auch...


    Wenn ich auf "Check" klicke, krieg ich grundsätzlich die Meldung "function Kreatur not defined", aber ich habe in der Anleitung von Celestial Heaven gelesen, dass das egal wäre... Die Funktion "CREATURE_ARCHANGEL" (bzw. jede andere Kreatur) ist auch nicht definiert, also irgendwie will er gar nichts. Nichtmal das von UbiSof gegebene Script funktioniert bei mir... kanns sein, dass ich i-wie nen falschen Editor oder was auch immer benutze? Verwende den aus dem ToE-Verzeichnis im Ordner "bin".
    Oder muss man i-wo ne Zeile einfügen, dass er Scripts überhaupt annehmen will?


    Btw, mal was anderes: Hier steht auch i-wo im Forum, dass man bei Problemen mal die Konsole aufrufen soll, nur klappt das auch nicht. Habe die nötigen Daten in meine ToE-Verzeichnisse eingefügt, aber die Konsole lässt sich trotzdem nicht öffnen...


    Weiß noch irgendjemand Rat?

  • mal eine theoretische Antwort als Programmierer, ohne es ausprobiert zu haben:


    'Trigger( REGION_ENTER_AND_STOP_TRIGGER, "Armee", "Kreatur" );'


    -> die Funktion "Kreatur" müßte mMn eine Funktion mit einem Parameter, nämlich dem Helden, sein; bei dir hat sie aber in Wirklichkeit keinen Parameter (bzw. einen fest gesetzten); deshalb würde ich deine Funktion ersetzen durch


    function Kreatur(heroname)
    if heroname == "Jazaz" then
    AddHeroCreatures(heroname, CREATURE_FAMILIAR, 50);
    AddHeroCreatures(heroname, CREATURE_HORNED_DEMON, 30);
    AddHeroCreatures(heroname, CREATURE_VERMIN, 50);
    AddHeroCreatures(heroname, CREATURE_HORNED_GRUNT, 30);
    Trigger( REGION_ENTER_AND_STOP_TRIGGER, "Armee", nil );
    end;
    end;


    statt CREATURE_ARCHANGEL kannst du ja mal testweise die 14 nehmen - ist zwar unübersichtlich, aber funktioniert vielleicht...
    keinerlei Garantie für eventuelle Programmierfehler ;)


    wenn im Programm bei der Abarbeitung der 1.Fehler auftritt, macht das script garnichts mehr - d.h. wenn du am Anfang einen Fehler drin hast, nützen dir die richtigen Programmteile garnichts mehr - deshalb würde ich als ungeübter Programmierer die Sachen langsam aufbauen und immer wieder testen - also z.B.


    Start mit RegionEnterTrigger, bei der bei der Funktion einfach nur ein Text ausgegeben wird (kannst in der Karte ja erstmal den richtigen Helden daneben stellen) -> wenn das Textfenster wirklich kommt -> Textfenster ersetzen durch die Kreaturengabe - so kriegst du schneller eventuelle Fehler raus!

    lest Terry Pratchett(RIP) ... und Stephen King, John Katzenbach, Hohlbein, Frank Schätzing, Anne Rice, Andrzej Sapkowski, Anne Bishop, Bernhard Hennen, George R.R. Martin, Markus Heitz, ... (wurde ja langsam Zeit, dass was dazu kommt)

  • Sehr schön, sehr schön, jetzt bin ich schonmal weiter. Die Kreaturen gibt's mit diesem Script im Zielgebiet:



    Die Nachricht gibt's leider nicht, blöderweise kann ich's jz auch net mehr testen, weil meine Karte jetzt leider gecrasht ist. Beim Laden fehlt der Boden in der Oberwelt (der Untergrund ist vollständig da) und beim Starten im Spiel stürzt dieses gleich ab. Naja...


    Aber immerhin hat die Sache mit den Kreaturen jetzt geklappt. Dafür schonmal danke. Wenn ich jetzt noch die Sache mit dem Text hinkriege (MessageBox), dann bin ich super zufrieden.
    Weiß wer, woran die Sache bei dem Script oben liegen könnte?

  • ich könnte mir vorstellen, daß der Pfad bei der Messagebox nicht stimmt;


    "/Maps/SingleMissions/Der_Anfang/Einleitung.txt"


    probier es mal mit "./Maps/SingleMissions/Der_Anfang/Einleitung.txt");
    oder
    "Maps/SingleMissions/Der_Anfang/Einleitung.txt");

    lest Terry Pratchett(RIP) ... und Stephen King, John Katzenbach, Hohlbein, Frank Schätzing, Anne Rice, Andrzej Sapkowski, Anne Bishop, Bernhard Hennen, George R.R. Martin, Markus Heitz, ... (wurde ja langsam Zeit, dass was dazu kommt)

  • Daran lag's leider nicht...


    Im Guide von CelestialHeaven steht folgendes:

    Code
    Referring to text files requires full path starting from Maps directory.
    For example:
    MessageBox(Maps/SingleMissions/MyMap/textfilename.txt);
    -- MyMap is the name of your map
    -- textfilename.txt is the text file name you created. (Open map properties tree and
    chose resources  SavesFilenames  right click and add make a new file and add
    message text into it)


    Vor allem der letzte Teil klingt interessant, damit kann man ja irgendwie auch eine "Ressource" einstellen. Wie genau das funktionieren soll habe ich aber noch nicht raus.
    Kennt noch irgendjemand Rat, wie man die Textnachricht gescheit eingebunden bekommt? Habe derzeit dieses Script auf einer neuen Testmap:


    Code
    function Kreatur(heroname)
    	if heroname == "Jazaz" then
    		AddHeroCreatures(heroname, 1,100);
    		MessageBox("Maps/SingleMissions/Testmap/bla.txt");
    		Trigger(REGION_ENTER_AND_STOP_TRIGGER, "Region1", nil);
    	end;
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "Region1", "Kreatur");


    Funktioniert wie folgt: Jedes mal, wenn der entsprechende Held in das Gebiet geht, kriegt er 100 Bauern, Text wird allerdings nicht angezeigt. Ob ein anderer Held auch die Bauern kriegt, weiß ich nicht.
    Argh, ich will doch nur eine unschuldige Text-Box...^^

  • Vielleicht hilft dir die Anleitung von makrise bei den Message-Boxen. Am wichtigsten ist der richtige Ordner für die Erstellung der Textdatei


    HeroesV\Editor\H5MMods\<Kartenname>\Maps\Singleplayer\<Kartenname>\


    das Abspeichern mit Unicode:


    Zitat

    Original von makrise
    Wir klicken auf eine freie Stelle in dem Ordner und wählen "Neu\Textdokument" aus. Wir benennen die "Neu Textdatei.txt" um, etwa in "hallo_welt.txt". Wir doppelklicken auf die Datei, um sie im Windows-Editor(notepad) zu Ãffnen. Jetzt müssen wir den Text schreiben, der nachher in der Nachricht angezeigt wird. Für den Anfang reicht etwa "Hallo Welt!". Im Datei Menü wählen wir "Speichern unter..." aus.(Wichtig: beim ersten Speichern der neuen Datei darf nicht nur "Speichern" benutzt werden, sonst funktioniert es nicht.) Im Fenster "Datei speichern unter" wählen wir die Textdatei, die wir erstellt haben aus. Jetzt muss in dem Auswahlfeld neben "Codierung:" der Wert "Unicode" eingestellt werden. Nach dem Klick auf Speichern muss nur noch die Frage zum Ãberschreiben der Datei bestätigt werden.


    und, dass der Editor geöffnet ist, während man die Texte erstellt.



    Ich verstehe nur nicht ganz, warum der LevelUpHero-Befehl bei dir nicht funktioniert. Bei mir gabs da überhaupt keine Probleme. ?(

    Die kausale Unabhängigkeit der Quarks von unserer Rede ist kein Merkmal der Realität (im Sinne des Gegenteils der Welt des Scheins), sondern sie ist einfach ein unbezweifelter Bestandteil unseres Redens über Quarks.
    Richard Rorty

    Einmal editiert, zuletzt von Der Mentat ()

  • warum kommen die Texte in den Mods- und nicht den Maps-Ordner ??? ?(

    lest Terry Pratchett(RIP) ... und Stephen King, John Katzenbach, Hohlbein, Frank Schätzing, Anne Rice, Andrzej Sapkowski, Anne Bishop, Bernhard Hennen, George R.R. Martin, Markus Heitz, ... (wurde ja langsam Zeit, dass was dazu kommt)

  • Das kann ICH dir jetzt sagen^^ Im "HMM5Mods" Ordner sind die Ressourcen, aus denen der Editor seine Map baut. Wenn man ne .h5m Datei mit WinRar öffnet, dann findet man da drin genau den gleichen Kram, der beim entsprechenden Level im Mods-Ordner ist. Folglich gehört da alles rein, was in die Map eingebunden werden soll ;)


    Soweit, so gut, ich bin jetzt einen großen Schritt weiter auf dem Weg zu meiner Kampagne (Was ist denn auch eine Kampagne ohne Storytiefe?^^).
    Habe jetzt dieses Script und das macht Folgendes:



    Beim Eintritt in Region1 wird die Nachricht angezeigt und es gibt 100 Bauern. Beim Wiederbetreten passiert nix. Verstehe ich zwar nicht, denn das Skript sagt "Enter without stop trigger", was nach meinem Englisch-Verständnis eigentlich das Gegenteil bedeuten sollte, aber irgendwie ist da was vertauscht: REGION_ENTER_AND_STOP_TRIGGER bewirkt, dass das Ereignis immer wieder ausgelöst wird, REGION_ENTER_WITHOUT_STOP_TRIGGER bewirkt, dass das Ereignis nach einmaligem Betreten der Region endet. Komisch, komisch..


    Naja, Kurzum, der Kram bei Region 1 funktioniert so, wie er soll.


    Nur der Rest... beim Betreten von Region 2 wird der Text angezeigt und der Held levelt um 1. Aber auch nur um eins... gibt's da irgendwie ne Möglichkeit, ihn mehrfach leveln zu lassen, ohne pro Levelup ne eigene Funktion schreiben zu müssen?


    Übrigens: Der Trick war wirklich die Sache mit dem Unicode. Textnachrichten werden nur angezeigt, wenn man die .txt-Datei via "Speichern unter..." als Unicode abspeichert, das hat alle Probleme sofort behoben ;)


    -----------------------------------------------------------------------------------------------------


    : Es lebe die Eigeninitiative! Aber ich will euch den Erfolg nicht vorenthalten:
    In den Editor-Dokus fand ich den Befehl "ChangeHeroStats".
    Die Zeile

    Code
    ChangeHeroStats(heroname, STAT_EXPERIENCE, 4600);


    brachte den gewünschten Erfolg. 4600xp entsprechen Level 5, die nötigen Zahlen finden sich auch in einer pdf in der Editor-Dokumentation (LEVEL_ID oder so heißt die).
    Damit ist es dann möglich, dem Helden die gewünschte Zahl an Erfahrungspunkte sofort zukommen zu lassen :)


    -----------------------------------------------------------------------------------------------------


    ²: So, jetzt bin ich glücklich. Habe grade nochmal die letzten Schritte getan und bin zufrieden, alles, was im ursprünglichen Script geplant war, kann ich jetzt umsetzen, vielen Dank für eure Hilfe.
    Mein Script der Testmap sieht jetzt so aus und hat alle Effekte:
    - Am Anfang des Spiels wird die Nachricht gezeigt und der Held levelt einmal.
    - Beim Betreten von Region1 gibt's 100 Bauern und die Nachricht.
    - Beim Betreten von Region2 gibt's 4600EXP und die Nachricht.


    Der Trick war letztendlich nur, die Textdatei in den Ordner HMM5Mods zu tun und als Unicode zu speichern.


    Dann kann die Kampagne ja los gehen ;)

  • der Befehl
    Trigger(REGION_ENTER_WITHOUT_STOP_TRIGGER, "Region1", nil);


    bewirkt, daß nach dem 1. Auslösen des Scripts beim 2. mal nichts mehr passiert, weil jetzt der Trigger keine Funktion mehr hat, die ausgelöst wird!

    lest Terry Pratchett(RIP) ... und Stephen King, John Katzenbach, Hohlbein, Frank Schätzing, Anne Rice, Andrzej Sapkowski, Anne Bishop, Bernhard Hennen, George R.R. Martin, Markus Heitz, ... (wurde ja langsam Zeit, dass was dazu kommt)

  • Forum

    Hat das Thema geschlossen.