"Function" bei Scripten

  • hier nochmal der Versuch bei Scripten Hilfe zu erhalten.


    Habe mich in die Befehlszeilen von Scripten eingelesen und mit Hilfe auch begriffen.
    Das Problem: wir haben beide nicht herausbekommen wo die Funktion "New Day" eingefügt werden muss.
    Hintergrund: an einem Bestimmten Tag soll ein ReserveHeld (Z.B. am Tag 30) an einem bestimmten Punkt der Karte erscheinen und die Befehlsfolge im Script befolgen. Beispielscript hat der Mentat ja in den Thread"Nützliche Scripte" beschrieben. Nur wo in der MapPropertiesLeiste muss die Info hinterlegt werden, dass das Script auch abläuft. ? Beim Testen der Karte läuft es nicht ab und beim Check des Script erhalte ich die Meldung "Function Line 1 not defined". Wenn ich die Zeile herausnehme bekomme ich nach "Check" die Info dass das Script fehlerfrei ist.


    Wäre schön wenn mir einer die Augen öffnen könnte - Danke


    Gruß Dirk

    Vom Affen enttäscht schuf Gott den Menschen.
    Danach verzichtete er auf weitere Experimente. :D

  • In der MapProperties-Leiste muss eigentlich gar nichts geändert werden; ich vermute, dass der Fehler irgendwo direkt im Script liegt, vielleicht hast du z.B. nicht den Original-Heldennamen verwendet. Am einfachsten wäre es, wenn du den Code hier mal postest…


    Dass beim Check des Scripts eine Fehlermeldung erscheint, hat eigentlich nichts zu bedeuten, weil das Programm auch bei korrekten Zeilen immer wieder Fehler liefert. :-# Und die Funktion „New Day“ (also die Funktion für temporäre Auslöser – du kannst sie natürlich auch ganz anders nennen, wichtig ist nur der New Day Trigger) solltest du eigentlich überall im Scriptfenster einfügen können. Da man daran häufig etwas ändern muss, stelle ich es meistens gleich ziemlich an den Anfang.


    Die nächste Woche habe ich übrigens wieder etwas mehr Zeit, da kommen meine Antworten auch etwas schneller. ;)

    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

  • so, nun komm ich endlich mal dazu das skript einzustellen.
    function NewDay()
    if GetDate(DAY) == 60 then
    DeployReserveHero( "Gombath", 60,100, GROUND);
    EnableHeroAI( "Gombath", nil );
    MoveHero( "Gombath", 17, 201 );
    end;
    if GetDate(DAY) == 75 then
    IsHeroAlive("Gombath") == true then
    EnableHeroAI( "Gombath", nil );
    MoveHero( "Gombath", 172, 18 );
    end;
    end;


    Trigger( NEW_DAY_TRIGGER, "NewDay" );


    ablauf sollte sein, dass der Reserveheld am Tag 60 erstmals erscheint, dann zu den koordinaten läuft (Stadt erobert)
    Nach 75 - sofern er noch existiert - weiter zur zweiten Stadt maschiert. Nur erscheint er leider nicht ;(

    Vom Affen enttäscht schuf Gott den Menschen.
    Danach verzichtete er auf weitere Experimente. :D

  • Ein Problem habe ich schon gefunden 8) : Der Held hat in Wirklichkeit den (seltsamen) Script-Namen „Hero4“. Um den Script-Namen zu finden, musst du zuerst den entsprechenden Helden auswählen und dann auf „Settings“ klicken.


    Außerden würde ich empfehlen, hinter
    DeployReserveHero( "Hero4", 60,100, GROUND);
    die Zeile
    sleep(1);
    einzufügen. Dann wird nämlich sofort der Held auf der Karte plaziert, bevor die weiteren Scriptzeilen ausgeführt werden. Am besten fügst du die Zeile auch nochmal hinter
    EnableHeroAI( "Hero4", nil );
    ein. Möglicherweise funktioniert es auch ohne diesen Zusatz, aber meiner Erfahrung nach ist es nie verkehrt, immer wieder sleep-Befehle einzubauen. ;)


    Die Move-Funktion ist leider auch nicht immer ganz zuverlässig, weil da kein gegnerischer Held den Weg blockieren darf (z.B. wenn er genau ein Feld vor der anzugreifenden Stadt steht). Aber zumindest sollte der Held mit den obigen Änderungen mal auf der Karte auftauchen. :rolleyes:

    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

  • danke für die info mit dem "Heroname" jetzt erscheint er wenigstens auf dem spielfeld. Leider bewegt er sich keinen millimeter weiter.
    für mich schaut das script i.o aus.
    Befehlsfolge = erscheinen, dann warten, keine übernahme, warten und anschließend bewegen
    function NewDay()
    if GetDate(DAY) == 2 then
    DeployReserveHero( "Hero4", 30,30, GROUND);
    sleep(1);
    EnableHeroAI( "Hero4", nil );
    sleep(1);
    MoveHero( "Hero4", 21, 42 );


    end;
    end;


    Trigger( NEW_DAY_TRIGGER, "NewDay" );

    Vom Affen enttäscht schuf Gott den Menschen.
    Danach verzichtete er auf weitere Experimente. :D

  • Ich sehe jetzt auch keine Fehler mehr. Versuch mal statt der Koordinaten der Stadt einen Punkt zu wählen, der direkt in der Nähe des Helden ist, also z.B.


    MoveHero( "Hero4", 32, 30 );


    Damit kannst du praktisch überprüfen, ob das Problem im Script liegt oder in der Karte. Wenn es mit der obigen Zeile funktioniert, hilft es vielleicht, den Weg zur Stadt zu verbreitern oder den MoveHero-Befehl aufzusplitten und erst einen Zielpunkt vor der Stadt zu setzen und dann am entsprechenden Tag nochmal direkt auf die Stadt.

    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

  • bin nun ein paar schritte weiter.
    habe Deinen Rat ausprobiert - keine Änderung
    habe neuen helden genommen - keine Änderung
    habe festgestellt das schon der Befehl "Enable hero..." versagt, da ich gleich nach erscheinen Kontrolle über den ReserveHero gelangen kann.Am Zweiten Tag Anklicken und bewegen funiert.
    Nun hat mein Editor leider ein Problem. Sofort nach speichern kommt "keine Rückmeldung" muss wohl erst mal das regeln :S

    Vom Affen enttäscht schuf Gott den Menschen.
    Danach verzichtete er auf weitere Experimente. :D

  • Heißt das, dass das der Held den du einfügst, dir selbst gehört? Dann kann nämlich EnableHeroAI( "Hero4", nil ); nicht funktionieren. Dadurch wird nur die KI-Kontrolle ausgeschaltet!
    Du solltest den Held also einem anderen Spieler zuordnen; später lässt sich das ja über SetObjectOwner("Hero4", PLAYER_1); schnell wieder ändern.

    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

  • da sieht man mal wieder wieviele Steine man sich selbst in den Weg legen kann. :whistling:


    Nachdem ich den Reserveheld einem KI zugewiesen habe ist er auch zu den ersten Koordinaten gelaufen und hat die Stadt erobert.
    Ist aber in der Stadt geblieben und rührt sich nicht mehr obwohl die Befehlsfolge in der Testkarte lautet:


    function NewDay()


    if GetDate(DAY) == 2 then


    DeployReserveHero( "Hero4", 30,30, GROUND);


    sleep(2);


    EnableHeroAI( "Hero4", nil );


    sleep(2);


    MoveHero( "Hero4", 21, 42 );
    end;
    if GetDate(DAY) == 8 then


    IsHeroAlive("Hero4") == true then


    EnableHeroAI( "Hero4", nil );
    sleep(2);

    MoveHero( "Hero4", 40, 53 );

    end;
    end;


    Trigger( NEW_DAY_TRIGGER, "NewDay" );


    Kann man das umgehen indem man erneut die Funktion New Day() aufruft und den Helden dann wieder nur eine Koordinate ansteuern lässt?

    Vom Affen enttäscht schuf Gott den Menschen.
    Danach verzichtete er auf weitere Experimente. :D

  • Ich denke, es müsste heißen


    if IsHeroAlive("Hero4") == true then


    auch wenn „is hero alive“ schon wie eine Frage klingt. ;) Außerdem fehlt noch ein "end;". Das zweite EnableHeroAI brauchst du nicht, aber es stört im Prinzip auch nicht.


    Wenn es danach immer noch Probleme gibt, würde ich neue Koordinaten ausprobieren. Dann liegt es ziemlich sicher an einem Hindernis …

    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

  • Danke für Deine Unterstützung.
    habe mich nun, nach mehreren vergeblichen Versuchen den zweiten "Move" Befehl zum laufen zu bringen dazu entschlossen, einfach mehrere Reservehero´s in´s Rennen zu bringen.
    Hat auch in der Testkarte super geklappt - haben alle, trotz Überwindung einer Bastion, die angesteuerten Städte erobert.
    Ist jetzt nur noch eine Frage der Stärke der Armee, ob der Spieler auch dazu in der Lage ist die Stadt zurückzuerobern (ein wenig fies - ich weiß) :D
    Doch so ist das Leben - Gemein und Fies, Hart und ein wenig Ungerecht. :-# Weil ! - muss ja meine eingesetzten ReseveHelden so ausstatten, dass sie die Ihnen zugewiesene Aufgabe auch erreichen :thumbup:


    Bin gespannt wie man die Karte im Archiv beurteilt - wobei ich sehe alle Rückmeldungen als Infomich selbst zu verbessern, da garantiert noch Fehler auftauchen, die ich übersehen habe.


    Jetzt noch die Frage - wie kann man mit der Seherhütte "Teilaufgaben" in der Karte einfügen ? Bin noch nicht dahintergestiegen wie das geht.

    Vom Affen enttäscht schuf Gott den Menschen.
    Danach verzichtete er auf weitere Experimente. :D

  • Besser die Karte ist zu schwer als zu leicht. Die meisten, die das Kartenarchiv nutzen, dürften inzwischen sowieso schon ziemliche Profis sein. 8)


    Zu den Seherhütten: Solche Aufgaben zu konstruieren kann ziemlich aufwändig sein. Jedenfalls gibt es keine allgemein verwendbare Vorgehensweise, sondern es hängt ganz davon ab, welchen Auftrag man von dem Seher bekommen soll.
    Auf meiner eigenen Karte gibt es z.B. das folgende Seherscript (gekürzte Fassung):



    Dabei passiert folgendes: Sobald man die Heldin „OrnellaNecro“ besiegt, erhält man ein Amulett und die Nachricht, dass man es zu einem Schmied (Seherhütte) bringen soll. Dieser erklärt dem Spieler dessen Bedeutung und man hat die Wahl, ob man es verwenden will oder nicht. Im ersten Fall wird die Funktion „Transformation“ ausgeführt, die dem Held u.a. 60 Spellpower bringen, aber auch einige (im obigen Script nicht sichtbare) negative Effekte.


    Die Funktion „Schmied“ basiert auf dem OBJECT_TOUCH_TRIGGER, der in der Liste nützlicher Scripte unter „Gebäude umfunktionieren“ erklärt ist. Z.B. musst du der Seherhütte dafür zuerst einen Namen (heißt hier ebenfalls „Schmied“) geben.
    Wichtig ist auch der Befehl QuestionBox, durch den man die Auswahl zwischen zwei Möglichkeiten (z.B. Artefakt verwenden oder nicht) bekommt. Auch dazu gibt’s eine Erklärung in der Scriptliste.
    Außerdem taucht oben oft die Zeile „Amu = …“ auf. Dadurch habe ich eine Variable definiert, die mir anzeigt, wie weit der Held bei seiner Aufgabe ist. Sobald „OrnellaNecro“ besiegt ist, wechselt Amu z.B. von 0 auf 1.


    Das sind jetzt nur ein paar allgemeine Punkte. Die genaue Ausführung hängt natürlich ganz davon ab, welche Funktionen du für deine Seherquest überhaupt brauchst - und es ist oft gar nicht so einfach, eine Aufgabe in scriptbare Einzelschritte zu zerlegen. :rolleyes:

    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

  • Ih finde es macht eine Karte interessanter, wenn man kleine
    Zwischenaufgaben erledigen muss um ans Ziel zu gelangen, oder wenn etwas
    unvorhergesehens passiert, was die Erreichung des Ziels spannender
    macht. Das Thema gehört dann aber wohl zu denen für Fortgeschrittene - hier komm ich an den Punkt : Erst mal laufen lernen, bevor man einen Marathon gewinnen will :whistling: .


    Nun folgendes: Habe noch eins Deiner Nützliches Skript, das mit der Region ausprobiert.
    Habe über den Reiter "Regions" in meiner Testkarte eine Region erstellt und benannt mit "Region1". Anschließend Dein Script kopiert, in die Properties eingefügt, mir aus den Handbuch die Kennung für die Engel rausgesucht, eingetragen und den Namen der Region an meine Karte angepasst.


    Leider passiert nichts - nix wenn ein Held die Region durchquert noch wenn er in der Region stehenbleibt.
    Wie gesagt - nur Kennung Engel und Regionname geändert.
    Und wieder die Frage - was mach ich falsch ?

    Vom Affen enttäscht schuf Gott den Menschen.
    Danach verzichtete er auf weitere Experimente. :D

  • Messagebox habe ich noch nicht ausprobiert. Weis auch noch nicht wie die genau funktionieren, sorry.


    Stecke noch in den Kinderschuhen was Scripte angeht.

    Vom Affen enttäscht schuf Gott den Menschen.
    Danach verzichtete er auf weitere Experimente. :D

  • Dirk B.: Mit deinen Änderungen sollte das Script dann so ausschauen:


    Code
    function Ziel(heroname) 
    AddHeroCreatures( heroname, CREATURE_ANGEL, 10 ); 
    Trigger( REGION_ENTER_AND_STOP_TRIGGER, "Region1", nil); 
    end; 
    
    
    Trigger( REGION_ENTER_AND_STOP_TRIGGER, "Region1", "Ziel" );


    Vergleich mal, ob das mit deinem zusammenpasst.



    Cliarc: Zu den Messageboxen gibt es hier einen richtig guten Thread von makrise. Außderdem hast du ja auch schon meine Karte runtergeladen, da sind jede Menge Beispiele enthalten.
    Als Kurzzusammenfassung: Du musst im Ordner HeroesV\Editor\H5MMods\<Kartenname>\Maps\SingleMissions\<Kartenname>\
    eine txt-Datei mit dem entsprechenden Text erstellen und im Unicode-Format speichern.

    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

  • Danke für die schnelle Antwort, ich hab eben schon mal kurz rein geschaut, ich werds mal die Tage versuchen, da Ostern und natürlich auch noch etwas an einigen anfängen am schrauben bin, damit ich dann gleich mehrere machen kann ;)


    Müsste aber schnell dazu kommen, da ich schon den Anfang von meiner Map bald fertig habe.

  • Danke für die korrektur, habe bei Buchstabengenauer kontrolle bemerkt, dass ich versehentlich beim Eintragen des Codes für die Engel das Komma mit überschrieben habe.
    nun funktioniert es.

    Vom Affen enttäscht schuf Gott den Menschen.
    Danach verzichtete er auf weitere Experimente. :D

  • Forum

    Hat das Thema geschlossen.