ubi.com    Ubi.com Foren  Springen zu Forum Kategorie  Die Siedler  Springen zu Foren  DIE SIEDLER - Aufstieg eines Königreichs / Editor & Maps    Patch 1.5 - Questverbesserungen
Start
Neu
Suche
Benachrichtigen
Werkzeuge
Antwort
  
  Anmelden/Beitreten 
Bild von BB_ScriptError
Geschrieben am
In diesem Posting werden die Neuerungen und Verbesserungen vorgestellt, die Patch 1.5 für Mapper und Scripter bereithält.
Hier noch kurz die Punke bevor es losgeht:

  • Neue Trigger, Goals, Rewards und Reprisals
  • Verbesserte Goals und Rewards
  • Scriptfehler finden
  • Questfehler finden
  • GraphViz Ausgabe
  • Ein paar Quest Hilfskonstrukte
  • Automatische Sprachausgabe
  • Erste Gehversuche der NPCs
  • KI Debugging
  • Vermischtes



Neue Trigger, Goals, Rewards und Reprisals

  • Trigger_OnQuestNotTriggered
    Startet einen Quest, wenn ein anderer Quest noch nicht gestartet wurde.
    Als alleiniger Trigger macht dies wenig Sinn. Aber in Kombination mit anderen Triggern lassen sich nützliche Dinge erreichen.
    In Kombination mit Trigger_Time kann man so dem Spieler beispielsweise einen Tipp geben, wenn er nach 20 Minuten immer noch nicht beim 4. Quest angekommen ist.

  • Trigger_OnQuestInterrupted
    Manchmal gibt es verschiedene Bedingungen die dazu führen können, dass ein Quest abgebrochen wird. Anstelle sich mit vielen Trigger_OnAtLeastOneQuestSuccess einen Check dafür zu bauen, kann man viel bequemer Trigger_OnQuestInterrupted nutzen um dann beispielsweise einen Alternativquest zu starten.

  • Goal_DestroyType
    Hier kann ein Typ angegeben werden, den der Spieler vernichten soll. Beispielsweise 6 Schwertkämpfer, oder drei Holzfäller (3x den gleichen Holzfäller wenn sich dieser wieder aufbaut wäre auch ok).

  • Goal_DestroyAllPlayerUnits
    Das vorhandene Goal_Destroy prüft nur, ob das Hauptquartier zerstört worden ist. Insbesondere bei Banditen hat das die unschöne Nebenwirkung, dass die Banditen auch ohne Hauptquartier noch weiterexistieren wenn sie weitere Zelte haben. Hierbei ist zu beachten, dass keine unzerstörbaren Einheiten mit der ID des zu vernichtenden Gegners gesetzt werden dürfen - ansonsten kann der Spieler dies nie erfüllen.

  • Goal_Capture
    Der Auftrag eine gegnerische Einheit, wie beispielsweise einen Rammbock oder Handelskarren zu übernehmen.
    Nur werden Handelskarren meistens erst während des Spiels erstellt und haben keinen Namen - mehr dazu später....

  • Goal_CaptureType
    Genau wie bei Goal_DestroyType kann hier ein Typ angegeben werden. Der Spieler kann also den Auftrag erhalten mehrere Rammböcke oder auch Handelskarren eines Gegenspielers zu erbeuten.

  • Goal_NoChange
    Dieses Goal macht nichts. Setzt man es in einen Quest wird es niemals erfolgreich sein oder fehlschlagen. Dies ermöglicht viele interessante Konstruktionen. Man kann einen Quest hiermit so lange offen lassen, bis er durch andere Quests mit Reward_QuestSuccess, Reward_QuestFailure oder auch Reward_QuestInterrupt beendet wird.
    Gibt man dem Quest ein Zeitlimit hat man einen Timer (und als versteckten Quest eine Wartezeit). Goal_NoChange ist nach Ablauf der eingestellten Zeit automatisch erfolgreich. Fügt man nun noch einen Reward_RestartQuest auf den eigenen Quest hinzu, kann man einen Reward regelmäßig ausführen lassen.

  • Goal_GoodAmount
    Das Goal_CustomDataExample war eigentlich nur zu Demonstrationszwecken für Scripter gedacht. Da es aber häufig regulär eingesetzt wurde, gibt es nun eine leicht verbesserte Version mit dem Namen Goal_GoodAmount.

  • Goal_BuildRoad
    Der Auftrag zwei Punkte mit einer Straße zu verbinden. Indem man die Länge vorgeben kann (aber nicht muss), kann man dem Spieler vorgeben eine möglichst kurze Straße zum Ziel zu bauen (bitte hier darauf achten, dass das Limit nicht zu eng ist). Alternativ kann man natürlich auch vorgeben, dass es ein möglichst umständlicher Weg gebaut werden soll ;-)

  • Goal_ClaimXTerritories
    Der Spieler muss eine vorgegebene Anzahl von Territorien erobern, bzw insgesamt besitzen. Vorsicht: Das Startterritorium zählt mit.

  • Goal_ActivateBuff
    Es gibt vielerlei Buffs, dies ist der Auftrag einen davon zu aktivieren. Beispielsweise den für eine ausgewogene Ernährung der Siedler.

  • Goal_ResourceAmount
    Hiermit kann abgefragt werden, wie viele Ressourcen noch in einer Steinmine oder auch in einem Fischschwarm vorhanden sind. Normalerweise wird dieses Goal nur in Hidden Quests eingesetzt. Damit kann man vielerlei interessante Dinge machen, beispielsweise kann ein Händler überteuerte Steine anbieten wenn dem Spieler bald selbige ausgehen.

  • Goal_Refill
    Dieses Goal existiert nur im Mission Pack. Es ist der Auftrag für den Spieler eine Stein/Eisenmine oder einen Brunnen per Geologe wieder aufzufüllen.

  • Reward_SendCart
    Dies ist ein guter Ersatz für Reward_Resources - denn hier wurden dem Spieler die Rohstoffe einfach ins Lager teleportiert.
    Mit Reward_Resources kann man einen regulären Handelskarren losschicken, der dem Spieler die entsprechenden Rohstoffe liefert.
    Möchte man mehrere Lieferungen schicken solle dies nicht gleichzeitig geschehen, sondern leicht zeitversetzt - ansonsten fahren die Karren unschön ineinander.

  • Reward_CreateBattalion
    Dies funktioniert exakt wie CreateSettler - abgesehen davon, dass man hiermit Truppen erstellen kann. Diese können dann beispielsweise mit MoveSettler durch die Landschaft geschickt oder auch dem Spieler geschenkt werden.

  • Reward_QuestForceInterrupt
    Die "nachdrücklichere" Version von Reward_QuestInterrupt. Während die normale Version nur gerade laufende Quests abbricht, kann dieser Reward auch Quests abbrechen die noch nicht gestartet, oder bereits beendet worden sind. So kann u.a. verhindert werden, dass ein Quest später mal gestartet wird, wenn sich der Spieler vorher durch eine andere Aktion den Weg dorthin "verbaut" hat. Soll ein sich selbst neustartender Quest unterbrochen werden, so muss Reward_QuestForceInterrupt mit der Einstellung "beendete Quests" verwendet werden. Ansonsten kann es zu sporadischen Fehlern kommen.

  • Reprisal_MapScriptFunction
    Wie Reward_MapScriptFunction, denn auch wenn ein Quest fehlschlägt möchte man manchmal eine Scriptfunktion aufrufen.

  • Reward_FakeVictory
    Zeigt ein Siegesicon unter dem entsprechenden Quest an wie Reward_Victory. Allerdings ohne dass der Spieler bei Erfüllung gewonnen hat.
    Daher sollte dies mit Bedacht eingesetzt werden. Eine gute Verwendungsmöglichkeit ist die Nutzung in einem Quest, bei dem der Spieler zwar nicht sofort gewinnt, dies aber automatisch 10 Sekunden später passiert.

  • Reward_DefeatVictory
    Hier gilt das gleiche wie für Reward_FakeVictory. Nur dass wie bei Reward_Defeat ein neu hinzugekommenes Symbol angezeigt wird, dass den Spieler warnt, dass er das Spiel verliert wenn er den angezeigten Quest nicht erfüllt.



Verbesserte Goals und Rewards

Diese Goals funktionieren jetzt auch mit Gebäuden oder NPCs die nicht im Editor gesetzt worden sind und erst während des Spiels erstellt werden:

  • Goal_DestroyScriptEntity
  • Goal_Protect
  • Goal_Capture
  • Goal_KnightDistance
  • Goal_ActivateObject

Also wäre es nun möglich per CreateSettler einen Castellan zu erstellen, und dem Spieler mit Goal_Protect den Auftrag zu geben den Castellan zu beschützen.
Falls man die betreffende Einheit unbedingt per Script erstellen möchte hat man ein Problem: Der Name den man irgendwann per Script vergibt ist nicht im Wizard auswählbar. Hier kann man sich mit einem kleinen Trick behelfen:
1) Eine ScriptEntity mit dem entsprechenden Namen auf der Karte platzieren.
2) Im entsprechenden Goal den Namen einstellen.
3) In der Scriptfunktion die ScriptEntity löschen und den Namen für die eigene Einheit weiterverwenden.

Mit Goal_UnitsOnTerritory kann nun auch die Anzahl von Tieren abgefragt werden, sofern ein Territorium angegeben wird. Hierbei ist zu beachten, dass Raubtiere gelegentlich in angrenzenden Territorien nach Nahrung suchen.

Das Goal_DestroyScriptEntity kann nun mit gesetzten Raubtieren umgehen. Wird per MapEditor ein S_WolfPack gesetzt und diesem der Scriptname "Predators" gegeben, dann wird das hierfür gesetzte Goal_DestroyScriptEntity erfolgreich sein sobald der Spieler alle vier Wölfe getötet hat.
Als Reward sollte man dann per DestroySettler "Predators" zerstören, damit auch keine neuen Wölfe nachkommen können.

Goal_Deliver wurde erweitert. Es ist nun einstellbar, dass nicht automatisch ein neuer Karren geschickt werden muss sobald beispielsweise Banditen den Karren übernommen haben. Der Spieler erhält also die Möglichkeit einen Karren zurückzuerobern und so die Lieferung erfolgreich abzuschließen. Weiterhin gibt es nun die Möglichkeit, dass ein Dorf den Spieler bitten kann, Waren zu einem anderen Dorf zu senden.

Alle MapScriptFunction Goals/Rewards/Reprisals übergeben den Questnamen als Parameter an die aufgerufene Funktion. Hierdurch kann eine einzelne Funktion für verschiedene ähnliche Quests verwendet werden, wenn diese nur ein minimal unterschiedliches Verhalten benötigen. Hierbei ist zu beachten, dass nicht völlig unterschiedliche Dinge basierend auf dem Questnamen gemacht werden sollten.

Alle Rewards die mit "AI_SpawnAnd" beginnen wurden deutlich verbessert. Es kann nun der zu verwendende Soldatentyp angegeben werden. Weiterhin kann die KI untätige Soldaten für neue Angriffe verwenden, so dass nicht bei jedem Aufruf Soldaten erzeugt werden müssen. Dadurch werden wiederholte Angriffe ermöglicht, die nicht zu einer Anhäufung von Soldaten beim Gegner führen. Werden vorhandene Soldaten erneut für einen Angriff verwendet, kann allerdings nicht garantiert werden, dass alle Soldaten vom gleichen Typ sind (aber Soldatentypen sollte man sowieso nicht vermischen).

Bei Reward_AI_SpawnAndProtectArea kann zusätzlich eingestellt werden, dass Soldaten gegnerische Handelskarren im Gebiet übernehmen.

Reward_CreateSettler kann die erstellten Einheiten vor der eigenen KI verstecken. Bisher gab es ein Problem wenn man einen Castellan für eine Stadt mit KI erstellt hat. Dieser rannte sofort zum Marktplatz und war nicht mehr zu steuern. Gibt man bei der Erstellung nun an, dass die Einheit vor der KI versteckt werden soll, kann man sie anschließend problemlos mit Reward_MoveSettler auf die Reise schicken.


Scriptfehler finden
Es gibt einen neuen Kommandozeilenparameter für das Spiel: -DisplayScriptErrors
Wird das Spiel mit diesem Parameter gestartet, werden fortan ausführliche Fehlermeldungen bei Scriptfehlern angezeigt. Somit können Scriptfehler in eigenen Karten schneller und einfacher gefunden und behoben werden.
Dies wird ausdrücklich jedem ans Herz gelegt, der selber Scripte schreibt.
Auch Mapper die keine eigenen Scripte schreiben, sondern Quests schnell und einfach mit dem Wizard erstellen, können hiervon profitieren. Bei Verwendung des Quest Wizards ist das Risiko von Scriptfehlern zwar sehr gering, aber sollte dennoch einer auftreten, wird man ihn so bemerken.


Questfehler finden
Auch mit dem Questwizard kann man Fehler machen.
Vielleicht wird einem NPC ein Bewegungskommando gegeben, obwohl dieser noch nicht erstellt worden ist - somit steht dieser später einfach rum. Oder eine neue Mitteilung erscheint einfach nicht, obwohl der Spieler endlich 150 Siedler hat. Vielleicht ist auch irgendwann kein Quest mehr offen, obwohl die Karte noch nicht gewonnen ist.
Bei solchen Fehlern fragt man sich dann: Wo hakt es?
Auf diese Frage liefern die neuen Hilfsmittel (hoffentlich) die entsprechende Antwort Smile

Zunächst muss diese Funktion aus der Mission_FirstMapAction() heraus aufgerufen werden:
DEBUG_EnableQuestDebugKeys()


Ist dies geschehen, stehen dem fehlersuchenden Mapper zwei neue Tastenkombinationen zur Verfügung:

  • STRG + SHIFT + W (Write QuestDump)
    Alle vorhandenen Quests werden zusammen mit ihrem Status (Nicht gestartet, gestartet, beendet) angezeigt.
    Da dies spätestens bei 20 Quests reichlich unübersichtlich auf dem Bildschirm wird, steht die Ausgabe zusätzlich noch in der Logdatei.
    Die so erhaltene "Momentaufnahme" kann man mit dem "Soll-Zustand" und den Vorbedingungen für die weiteren Quests abgleichen, und so herausfinden wo es hakt. Bei diesem Abgleich ist eine ausgedruckte GraphViz Version der Quests sehr hilfreich.
  • STRG + SHIFT + Q (QuestTrace)
    In einigen Fällen reich ein QuestDump nicht aus, da man manchmal nicht darauf kommt wie die Quests in den Zustand gelangen aus dem heraus es nicht weiter geht. Hier schafft der QuestTrace Abhilfe - dieser wird mit der genannten Tastenkombination an- und abgeschaltet.
    Ist der QuestTrace aktiviert, werden alle Zustandsänderungen der Quests augenblicklich angezeigt. Damit man nicht ständig Screenshots erstellen muss, werden auch diese Informationen natürlich in der Logdatei gespeichert.
    Aus diesen Informationen kann man - spätestens parallel mit dem Finger auf dem GraphViz Ausdruck - nachvollziehen warum ein Quest in den Zustand gelangt in dem er ist.


Die Logdatei befindet sich unter "Eigene Dateien" im Unterverzeichnis "DIE SIEDLER - Aufstieg eines Königreichs\Temp\Logs"
Generell ist es eine gute Idee die Debugtasten während der gesamten Testphase der eigenen Karte aktiv zu lassen, damit Fehler sofort näher eingegrenzt werden können.
Alternativ können die Funktionen auch automatisch per Script aufgerufen werden:
DEBUG_DumpQuestStatus()
DEBUG_QuestTrace( true )


Angenommen es wird ein Fehler in einem der letzten Quests gefunden und behoben, dann müssen vielleicht 10 oder 20 Quests erfüllt werden, damit man wieder an diese Stelle gelangt und sie erneut prüfen kann. Das kostet viel Zeit, es sei denn man ändert schnell ein paar Trigger damit man eher zu dem entsprechenden Quest kommt. Vielleicht vergisst man aber nach dem Test (insbesondere bei komplexeren "Verdrahtungen") einige Trigger wieder zurückzustellen und handelt sich damit neue Probleme ein.
Daher gibt es eine neue Methode zu einem Quest zu springen:
DEBUG_SucceedQuest( _Name, _Exact )
DEBUG_FailQuest( _Name, _Exact )


Mit diesen beiden Funktionen kann man beliebige Quests erfolgreich beenden oder fehlschlagen lassen - selbst wenn diese noch gar nicht aktiv waren.
Angenommen man möchte Q_32_HelpTheLocalVillages erfolgreich abschließen um an den folgenden Quest heranzukommen, dann genügt folgender Aufruf (in der FirstMapAction):
DEBUG_SucceedQuest( "Q_32" )

Hierdurch sind alle mit "Q_32" beginnenden Quests sofort erfolgreich. Für den Fall, dass viele Quest mit ähnlichem Namen existieren (sollte vermieden werden), kann auch der exakte Name im Aufruf verwendet werden:
DEBUG_SucceedQuest( "Q_32_HelpTheLocalVillages", true )


Falls zuvor durchlaufene Quests die Diplomatie verändern oder NPCs erstellen, ist deren Erfolg möglicherweise eine zwingende Voraussetzung für die Folgequests. Daher müssen ggf. mehrere Quests per Funktionsaufruf erfolgreich abgeschlossen werden, damit sich der zu testende Quest so verhält, als hätte man regulär bis zu dieser Stelle gespielt.


GraphViz Ausgabe
Die GraphViz Ausgabe ist nicht neu - sie existiert schon seit Patch 1.3.
Mit diesem Punkt soll diese - bei komplexeren Questzusammenhängen geradezu unverzichtbare - Funktion erläutert werden.

Hier eine Beispielausgabe von Quests durch GraphViz:

Dazu gibt es noch eine Legende, damit bekannt ist was die verschiedenen Symbole und Pfeile bedeuten.

Hierdurch erhält man einen schnellen Überblick, den man so nicht bekommt wenn man ein Script ansieht.
Daher gibt es an dieser Stelle den Ratschlag: Wer bisher alles per Script gemacht hat,
sollte den Quest Wizard mal ausprobieren. Mit diesem lässt sich ein solider Rahmen schaffen,
in dem alle Bestandteile (meistens) zuverlässig und vorhersagbar funktionieren.
Dieser kann dann hier und da mit MapScriptFunctions verfeinert werden.
Macht man es richtig, hat man später deutlich weniger Probleme mit Fehlern und unerklärlichem Verhalten - die Kartenerstellung und der Test gehen einfach schneller.

Sobald die Zusammenhänge etwas komplexer werden kann es sehr lohnend sein, einen (auf mehrere A4 Blätter verteilten) Ausdruck auf dem Tisch liegen zu haben um Fehler zu suchen - oder um einfach nur abzuhaken welche Quests getestet worden sind.

Nur: Wie erstellt man so eine Ausgabe überhaupt?

  • GraphViz installieren
    Um GraphViz zu installieren muss man sich erstmal zum Download durchklicken:
    http://www.graphviz.org -> Download -> Agreee -> Stable and development Windows Install packages -> graphviz-2.XX.exe

  • GraphViz starten
    Bei der Installation wurde eine Verknüpfung im Startmenü angelegt, hieraus wird "Dot" gestartet.

  • GraphViz einstellen
    Zunächst müssen eine Dinge eingestellt werden, damit das Programm die gewünschten Ergebnisse liefert.
    [LIST]
  • Layout engine: dot
  • Input file: Textdatei die vom GraphViz Export des Mapeditors erzeugt worden ist. Der GraphViz Export befindet sich im MapEditor unter "Datei" -> "Exportiere Quests für Graphviz"
  • Output file: Beliebiger Dateiname
  • Output file type: Beliebig, aber vorzugsweise PNG


  • Graph erstellen und ansehen (dieser Schritt kann beliebig oft wiederholt werden)

    • Bei Bedarf Quests aus dem Editor neu exportieren
    • "Do layout" anklicken
    • View Output anklicken. Falls nun ein Grafikbetrachter anfängt seinen minutenlangen Ladevorgang zu starten, sollte man eventuell auf ein schnelleres Programm wechseln - das spart enorm viel Zeit ein :-)


    Durch die GraphViz Version der Quests bietet kann man das Spielgeschehen deutlich besser überblicken.
    Wenn man bei der Erstellung der Quests einige Dinge beachtet, wird die graphische Darstellung sogar noch übersichtlicher.


    • Namenskonventionen für Quests:
      Quests kann man nennen wie man möchte. Eine einheitliche Namenskonvention hilft dabei den Überblick zu behalten.
      Beispiel: Direkt zu Spielbeginn gibt der Ritter dem Spieler den Auftrag die Stadt Bengasar zu finden. Hat der Spieler dies erledigt, bekommt er von der Stadt den Auftrag ein paar Steine zur Unterstützung zu senden.
      Die Questnamen sollten dann so aussehen:
      Q_01_Knight_FindBengasar
      Q_02_Bengasar_DeliverStone
      Hierdurch sieht man bereits am Namen wer den Auftrag gibt und was passieren soll. Natürlich kann man den Spielernamen auch anhand der Spielernummer erkennen - so geht es aber schneller. Abgesehen davon hilft es dabei, eine falsch eingestellte Spielernummer schneller zu finden.
      Die Nummerierung sollte dem Handlungsstrang angepasst sein. Beispielsweise geht der Hauptstrang von 1 bis 5. Dann startet ein Nebenstrang bei 6 und ein weiterer Nebenstrang bei 20. Diese Art der Nummerierung erfordert also eine Vorausplanung der Abläufe. Aber sollte es mal nicht hinkommen, kann man sich immer noch mit Q_8a und Q_21b behelfen ;-)
      In einigen Fällen werden versteckte Hilfsquest benötigt, um andere Quests vorzubereiten oder anschließend weitere Bedinungen zu prüfen und Aktionen zu starten. Diese können dann beispielsweise Q_02_Helper1, Q_02_Helper2, oder auch Q_02_Helper_CheckCartOnTerritory genannt werden.

    • Namenskonventionen für MapScriptFunctions:
      Angenommen in Q_01 ist ein Reward_MapScriptFunction eingebaut. Nachdem Bengasar entdeckt wurde, wird die Funktion "BegasarFound" aufgerufen.
      Schaut man sich dies in der Übersicht an, dann weiß man so viel wie vorher - nämlich, dass eine Funktion aufgerufen wird, nachdem Bengasar gefunden worden ist. Man kann daraus aber nicht entnehmen, dass durch diese Funktion ein Fest gestartet werden soll.
      Namensvorschlag: Quest_BengasarStartFestival
      Aus dem Namen ist sofort ersichtlich, dass es sich um eine von einem Quest aufgerufene Funktion handelt. Das vermeidet Verwechslungen mit anderen Funktionen im Script, die nur Scriptintern verwendet werden. Weiterhin kann man anhand des Namens sofort erkennen was die Funktion machen wird. Dies ist sehr wichtig wenn man die GraphViz Ausgabe schnell durchgehen und nach möglichen Problemen absuchen möchte.

    • Inhaltskonventionen für MapScriptFunctions:
      Es ist wichtig, dass sich die aufgerufenen MapScriptFunctions genau wie die regulären Goals und Rewards verhalten:
      Ein Goal prüft eine Bedingung, ohne das Spiel auf irgendeine Art zu verändern.
      Ein Reward führt eine Aktion aus, ohne vorher noch eine Bedingung zu prüfen um die Aktion dann möglicherweise zu unterlassen.
      Dementsprechend sollten sich die selbstgeschriebenen Funktionen verhalten.
      Ein Goal darf nur prüfen und ansonsten keine Auswirkung haben. Das gibt insbesondere für hier gesetzte globale Variablen, die in anderen Funktionen verwendet werden.
      Ein Reward darf nur eine Aktion ausführen, und nicht vorher noch irgendwelche Bedingungen prüfen, die dazu führen könnten, dass die Aktion nicht ausgeführt wird (oder noch viel schlimmer: Dass irgendeine andere Aktion ausgeführt wird).
      Dadurch kann man sich wenn man die GraphViz Ausgabe durchgeht darauf verlassen, dass exakt das passiert was man auch sieht. Man braucht nicht im Hinterkopf behalten, dass der Check ob der Ritter halbtot ist noch nebenbei eine Hilfslieferung startet, oder dass der Reward der den fahrenden Händler startet vorher noch schnell prüft ob der Spieler mehr als 100 Steine besitzt.



    Ein paar Quest Hilfskonstrukte
    Diese Hilfskonstrukte sollen ein kleines Beispiel für die Funktionalität sein, die man durch die Kombination von einfachen Komponenten erreichen kann.

    Eine Aktion wiederholt ausführen während (und solange) ein Quest läuft:
    Q_01:
    Trigger_AlwaysActive
    Goal_Deliver

    Q_02: (hidden, Timelimit 60)
    Trigger_OnQuestActive Q_01
    Goal_NoChange
    Reward_RestartQuest Q_02
    Reward_AI_SpawnAndAttackArea


    Eine Entscheidung - entweder A oder B (auch wenn beides "zeitgleich" passiert):
    Q_01:
    Trigger_AlwaysActive
    Goal_Deliver
    Reward_QuestSuccess Q_03
    Reward_QuestInterrupt Q_02

    Q_02:
    Trigger_AlwaysActive
    Goal_Destroy
    Reward_QuestFailure Q_03
    Reward_QuestInterrupt Q_01

    Q_03_Decision:
    Trigger_AlwaysActive
    Goal_NoChange

    Q_04_GoodSideQuests:
    Trigger_OnQuestSuccess Q_03_Decision

    Q_20_EvilSideQuests:
    Trigger_OnQuestFailure Q_03_Decision


    Prüfen ob der Spieler mehr als 10 Soldaten besitzt:

    Q_01 (hidden, Timelimit 2)
    Trigger_OnQuestSuccess ...
    Goal_SoldierCount > 10

    Q_01_Helper_SendMoreResources
    Trigger_OnQuestFailure Q_01
    Goal_InstantSuccess
    Reward_SendCart

    Q_01_Helper_AttackPlayer
    Trigger_OnQuestSuccess Q_01
    Goal_InstantSuccess
    Reward_SpawnAndAttackArea


    Automatische Sprachausgabe
    Zu vielen Quests wird automatisch ein passender Starttext mit Sprachausgabe erzeugt, wenn das Startnachricht-Feld im Quest-Wizard leergelassen wird.
    Dies funktioniert zunächst nur auf neu erstellten Karten (mit dem Patch 1.5 MapEditor neu erstellt).
    Für bestehende Karte gibt es aber auch noch Hoffnung. Wird die neue QuestSystemBehavior.lua in eine bestehende Karte importiert, so funktioniert die automatische Sprachausgabe auch dort. Mit Patch 1.5 bleiben übrigens alle Quests beim Import einer neuen Questbibliothek erhalten Smile
    Hinweis: Falls zuvor eine modifizierte Questbibliothek in eine Karte importiert worden ist, kann die neue offizielle Questbiblothek wahrscheinlich nicht problemlos importiert und verwendet werden.


    Erste Gehversuche der NPCs
    Aufgrund der großen Nachfrage wurde nun allen NPCs nachträglich das Laufen beigebracht.
    Sie können nun über Reward_MoveSettler (oder entsprechende Skripte) von A nach B geschickt werden.

    Um das neue Gewusel zu demonstrieren gibt es ein entsprechendes Testscript:

    function CreateAndMoveNPCs( _Spawn )
        assert(_Spawn)
        local X, Y = Logic.GetEntityPosition( assert(GetID(_Spawn)) )
        local NPCs = { SpawnX = X, SpawnY = Y }
        for Key, Value in pairs( Entities ) do
            if string.match( Key, "^U_NPC_" ) and not string.find( Key, "Castellan", 1, true ) then
                table.insert( NPCs, Logic.CreateEntity( Value, X + 2500 - Logic.GetRandom(5000), Y + 2500 - Logic.GetRandom(5000), 0, 2 ) )
            end
        end
        
        StartSimpleJobEx( MoveNPCs, NPCs )
    end
    
    function MoveNPCs( _NPCs )
        local X, Y = _NPCs.SpawnX, _NPCs.SpawnY
        for _, ID in ipairs( _NPCs ) do
            if not Logic.IsEntityMoving( ID ) then
                Logic.MoveSettler( ID, X + 2500 - Logic.GetRandom(5000), Y + 2500 - Logic.GetRandom(5000) )
            end
        end
    end
    


    Wurden diese Zeilen in das Kartenscript eingefügt, müssen nur noch zwei Dinge erledigt werden damit die NPCs loswuseln.
    1) Eine ScriptEntity mit dem Namen "Spawn" auf der Karte erstellen
    2) Die neue Funktion aus der Mission_FirstMapAction() heraus aufrufen: CreateAndMoveNPCs( "Spawn" )


    KI Debugging
    Hinweis: Dieser Punkt wird noch weniger unterstützt als der Mapeditor oder das Scripting und sollte nur von frustrationsresistenten Personen angewendet werden ;-)

    Manchmal fragt man sich, warum die KI etwas macht - oder auch nicht macht. Um ein wenig Licht ins Dunkel zu bringen gibt es eine Funktion, die hier und da einige Nachrichten über die aktuellen Handlungen der KI ausgibt:
    DEBUG_SetAIVerbose( true )

    Um dies zu Testen eignet sich eine kleine Karte mit eigenen Outer-Rim Gebäuden sowie einer gegnerischen Stadt in der Nähe.
    Nun noch per Quest alle ein oder zwei Minuten ein Reward_AI_SpawnAndAttackArea oder Reward_AI_SpawnAndProtectArea ausgelöst,
    und der Schirm wird voller (informativer) Meldungen stehen.


    Vermischtes

    • Die Anzeigedauer von Texten wurde erhöht. Hierbei erfolgt zusätzliche eine Anpassung an die Länge des Textes.
    • Möchte man, dass dem Spieler bei Start oder Ende eines Quests keinerlei Meldung angezeigt wird,
      kann man KEY(NO_MESSAGE) in das entsprechende Feld schreiben. Dieses sollte mit Bedacht verwendet werden,
      da es den Spieler verwirren kann wenn er keine entsprechenden Meldungen erhält.
    • Einige Quests haben keinen Titel und tauchen daher auch nicht im Quest-Log auf. Dies kann man ändern in dem man im Beschreibungsfeld einen Titel vorgibt. Schreibt man dort dies hinein "Nice quest ~ This is a realy nice quest", dann taucht "Nice quest" als Titel im Quest-Log auf, während der Quest selbst "This is a realy nice quest" im Beschreibungsfeld anzeigt.
    • Häufiges Speichern und viele Sicherungskopien können bei größeren Karten sehr viel Zeit sparen :-)

    Dieser Beitrag wurde editiert. Zuletzt editiert von: BB_ScriptError,
  •  
    Beiträge: 124 | Registriert: 21.12.2007Mit Zitat antwortenBeitrag editieren oder löschen
    Geschrieben am Beitrag ausblenden
    schön und nur noch den Link zum Download Smile
    Warum habt ihr nicht auch noch weitere Trigger mit eingebaut ?

    Script Entity funktioniert also auch wieder so das man sie auch als Spawnpunkt setzen kann für die AI Rewardfunktionen ? Die Einzelspielermap Kagunda hat also am Anfang auch wieder das kleine Gemetzel ?..

    Dieser Beitrag wurde editiert. Zuletzt editiert von: BW_SpiderFive,


    S3/S4:
    S6 steht vor der Tür, http://www.siedler-games.de ist schon da
     
    Beiträge: 1736 | Registriert: 14.04.2002Mit Zitat antwortenBeitrag editieren oder löschen
    Bild von BB_ScriptError
    Geschrieben am Beitrag ausblenden
    Einige zusätzliche Arten von Triggern (insbesondere Trigger_MapScriptFunction) würden verhindern, dass die GraphViz Ausgabe "intuitiv lesbar" bleibt.
    Ich kann dir aber versichern, dass man auch mit den vorhandenen Triggern sehr viel machen kann Smile

    Und der Download Link? Hmmm... moment... wo habe ich den nur hingelegt... Razz
     
    Beiträge: 124 | Registriert: 21.12.2007Mit Zitat antwortenBeitrag editieren oder löschen
    Geschrieben am Beitrag ausblenden
    liegt es an dem neuen Patch das Online derzeit nicht gespielt werden kann?
     
    Beiträge: 3 | Registriert: 26.03.2008Mit Zitat antwortenBeitrag editieren oder löschen
    Geschrieben am Beitrag ausblenden
    *ggg nun ja TriggerOnQuestSuccessWait also das man da eine Zeitverzögerung eingeben kann ist schon sehr praktisch *gggg

    Also die Map Kagunda siehe Änderung im ersten Post oben funktioniert wieder richtig ?

    zu neuen rewards
    Als hardcoregamer fehlt einem bei einer map ohne entsprechende regelmäßigen Ki Besuche mit der Möglichkeit zu verlieren einfach die Herausforderung ....
    Daher wäre ein reward praktisch bei dem man bestimmen kann wie oft und in welchem Abstand die Ki einen angreift, man bestimmen kann was sie angreift, wo sie spawnt , auch die Spawnpunkte abwechseln kann, und natürlich auch bestimmen kann mit was sie angreift. Man also auch hier bei den unterschiedlichen Angriffswellen varieren kann. Gut kann man ja per script lösen Wink aber es wäre ja auch schön wenn das Otto Normalmapper auch leicht einbinden könnte.Smile


    S3/S4:
    S6 steht vor der Tür, http://www.siedler-games.de ist schon da
     
    Beiträge: 1736 | Registriert: 14.04.2002Mit Zitat antwortenBeitrag editieren oder löschen
    Grand Poobah of the Ubi Forums
    Bild von Ubi_Marc
    Geschrieben am Beitrag ausblenden
    Patch gibt es ab 18:00.




    Mighty Grand Poobah of the Ubi Forums


     
    Beiträge: 2108 | Registriert: 12.04.2002Mit Zitat antwortenBeitrag editieren oder löschen
    Geschrieben am Beitrag ausblenden
    Neue QuestLibrary:
    http://www.ubi.com/DE/Downloads/DownloadFile.aspx?dfId=5163
    Patch:
    http://patches.ubi.com/settlers_6/settlers_6_v1.5.exe

    Wow, viel Arbeit in der questLibrary.
    Wird aufgearbeitet, ASAP

    Dieser Beitrag wurde editiert. Zuletzt editiert von: zweispeer,


    --
    Es wäre sinnvoll wenn Ihr Euch, auch nachdem Ihr erfolgreiche Tipps bekommen habt, noch mal für ein Feedback hier meldet. Das trägt viel zur Motivation der Antwortenden bei und verbessert vielleicht nochmal die Antwort für den Nächsten.
    Please note that according to the German law on data retention, information on every electronic information exchange with me is retained for a period of six months.
     
    Beiträge: 1000 | Ort: Dortmund | Registriert: 19.09.2007Mit Zitat antwortenBeitrag editieren oder löschen
    Geschrieben am Beitrag ausblenden
    Und Kagunda funktioniert auch wieder .. nur schade für meine SP map....


    S3/S4:
    S6 steht vor der Tür, http://www.siedler-games.de ist schon da
     
    Beiträge: 1736 | Registriert: 14.04.2002Mit Zitat antwortenBeitrag editieren oder löschen
    Geschrieben am Beitrag ausblenden
    Soch, WikiBibliothek ist aktualisiert

    Nette Sachen, vielen Dank, da habe ich lange dran zu knacken, glaube ich.

    Könntet Ihr bitte noch ein zwei Sätze zu :GetIcon und :GetMsgKey einwerfen?

    Wenn ich es richtig sehe, sind die nur bei den Goals hinzugekommen und bestimmen StandardNachrichten bzw. die angezeigten Icons.
    Lässt sich das für selbstgeschriebene Goals verwerten?

    Ansonsten: Mir gefällts, auf ganzer Linie

    Dieser Beitrag wurde editiert. Zuletzt editiert von: zweispeer,


    --
    Es wäre sinnvoll wenn Ihr Euch, auch nachdem Ihr erfolgreiche Tipps bekommen habt, noch mal für ein Feedback hier meldet. Das trägt viel zur Motivation der Antwortenden bei und verbessert vielleicht nochmal die Antwort für den Nächsten.
    Please note that according to the German law on data retention, information on every electronic information exchange with me is retained for a period of six months.
     
    Beiträge: 1000 | Ort: Dortmund | Registriert: 19.09.2007Mit Zitat antwortenBeitrag editieren oder löschen
    Bild von BB_ScriptError
    Geschrieben am Beitrag ausblenden
    quote:
    Zitat von BW_SpiderFive:
    *ggg nun ja TriggerOnQuestSuccessWait also das man da eine Zeitverzögerung eingeben kann ist schon sehr praktisch *gggg

    Das mag sein, allerdings sah die Darstellung in GraphViz wie ein Quest mit Zeitlimit aus, und das ist extrem störend.
    Eventuell lässt sich da eine bessere Darstellung finden (z.B. Pfeil mit Zahl).

    quote:
    Zitat von BW_SpiderFive:
    Also die Map Kagunda siehe Änderung im ersten Post oben funktioniert wieder richtig ?

    Davon gehe ich aus.

    quote:
    Zitat von BW_SpiderFive:
    Als hardcoregamer fehlt einem bei einer map ohne entsprechende regelmäßigen Ki Besuche mit der Möglichkeit zu verlieren einfach die Herausforderung ....
    Hol dir schnellstmöglich das Mission Pack Wink

    quote:
    Zitat von BW_SpiderFive:
    Daher wäre ein reward praktisch bei dem man bestimmen kann wie oft und in welchem Abstand die Ki einen angreift, man bestimmen kann was sie angreift, wo sie spawnt , auch die Spawnpunkte abwechseln kann, und natürlich auch bestimmen kann mit was sie angreift. Man also auch hier bei den unterschiedlichen Angriffswellen varieren kann. Gut kann man ja per script lösen Wink aber es wäre ja auch schön wenn das Otto Normalmapper auch leicht einbinden könnte.Smile

    Das kann man sehr einfach per Quest Wizard mit den vorhandenen Mitteln erledigen. Eine Abfrage auf die Anzahl der Soldaten, eine ob eine Mauer gebaut wurde, und vielleicht noch eine auf den Goldstand in der Schatzkammer. Daran kann man dann zwei bis acht verschiedene Angriffe hängen. Das sieht für mich erst mal nach einer Menge Abwechslung aus.
    Aber natürlich: Wenn es "stufenlos" sein soll, muss ein entsprechendes Script dafür geschrieben werden.
    Und zu einem Reward der für wiederholte Angriffe sorgt: Bitte nicht!
    In der GraphViz Darstellung muss, damit es eindeutig ist, immer ersichtlich sein was gerade passiert und was nicht.
    Wenn man nun einen Reward einführt der sofort etwas ausführt, und dann automatisch (ohne entsprechenden Questaufruf) noch mal ein paar Minuten später, dann ist diese Eindeutigkeit nicht mehr gegeben. Wenn man sich auf diese Darstellung verlassen will (was wirklich sehr viel Zeit spart), dann muss man auch sicher sein, dass das was dort sichtbar ist auch das ist, was in dem aktuellen Spielzustand passiert.


    quote:
    Zitat von zweispeer:
    Könntet Ihr bitte noch ein zwei Sätze zu :GetIcon und :GetMsgKey einwerfen?
    Wenn ich es richtig sehe, sind die nur bei den Goals hinzugekommen und bestimmen StandardNachrichten bzw. die angezeigten Icons.
    Lässt sich das für selbstgeschriebene Goals verwerten?

    Ja. Das kann regulär verwendet werden.
    Alle Objective.Custom(2) Quests haben das "Schriftrollen" Icon. Mit :GetIcon() kann man dieses durch ein passenderes Icon ersetzen.
    Wer damit ein wenig herumspielen möchte: Die es ist auch möglich die Icons als {1,1} bis {16,16} anzugeben, d.h. die Textform wie z.B. "QuestTypes.CreateMilitary" ist nicht notwendig (aber deutlich besser lesbar).
    Ruft man per Goal_MapFunction die Funktion "foo" auf, so kann man für diesen Quest das Icon mit dieser Funktion ändern:
    function foo_Icon()
        return {1,1}
    end
    


    Für den MsgKey ist es analog foo_MsgKey().
    Hierbei ist zu beachten, dass zwar alle NPCs und Ritter die in der QuestSystemBehavior.lua verwendeten Textkeys sprechen können, aber dies nicht für alle Textkeys gilt die einige vielleicht noch "ausgraben" Wink
    D.h. viele Textkeys sind NPC-spezifisch.
     
    Beiträge: 124 | Registriert: 21.12.2007Mit Zitat antwortenBeitrag editieren oder löschen
    Bild von creehawk
    Geschrieben am Beitrag ausblenden
    ActivateBuff! ActivateBuff!!!? Schtonk!!

    Dhatten tü de rraden hossssen doken Schtonk! Magarag Schtonk! It potten zetten dutten datten Schtonk! Wat teeden dadaden Schutten Schtonk !!!


    Bevor jetzt alle Spezialisten und Skriptschnitzer dem globalen Wahnsinn des Anton Hinkel verfallen und endgültig jeden Freizeit-Kartenbauer der Frustration überlassen eine abschließende Frage: Was in drei Gottesnamen sollen denn bitte Buff's sein? Selbst unser amerikanischer Kollege kann sich auf diesen blöden Begriff keinen Reim machen.

    creehawk
     
    Beiträge: 413 | Registriert: 29.09.2007Mit Zitat antwortenBeitrag editieren oder löschen
    Bild von creehawk
    Geschrieben am Beitrag ausblenden
    Und noch was bevor ich lange rumsuche: Wenn ich im editor mit den Bestandteilen des AddOn eine Karte gemacht habe kann das vermutlich nur jemand spielen der ebenfalls das AddOn hat, richtig?

    creehawk, heute mit kurzer Zündschnur
     
    Beiträge: 413 | Registriert: 29.09.2007Mit Zitat antwortenBeitrag editieren oder löschen
    Bild von BB_ScriptError
    Geschrieben am Beitrag ausblenden
    quote:
    Was in drei Gottesnamen sollen denn bitte Buff's sein?

    Da spielt wohl jemand keine MMORPGs ;-)
    Schau mal hier unter Buffs nach.
    Und bevor du fragst: Ja, mit Goal_ActivateBuff kann man auch Debuffs abfragen :P
    Im Spiel sind diese als kleine grüne (und rote) "Flecken" unter der Reputationsanzeige zu finden. Wenn du deinen Soldaten den Sold streichst bekommst du bald einen in rot zu sehen.

    Und ja, Karten die mit dem Mission Pack Editor erstellt worden sind können nur mit dem Mission Pack gespielt werden - ohne das Mission Pack hat man eben die neuen Spielbestandteile nicht.
     
    Beiträge: 124 | Registriert: 21.12.2007Mit Zitat antwortenBeitrag editieren oder löschen
    Qt_
    Geschrieben am Beitrag ausblenden
    This sounds very nice!

    But there is still something on my wish list; reward_plague (or an update for the script tutorial with a plague function).
     
    Beiträge: 10 | Registriert: 29.01.2008Mit Zitat antwortenBeitrag editieren oder löschen
    Geschrieben am Beitrag ausblenden
    Es gibt ja ein paar gute Sachen , aber warum kann ich meine alten maps nicht in den mission cd Edi laden ?
    Die einzige Unterscheidung dürfte doch nur die neue klimazone sein, damit ist doch eh sichergestellt das nur die Mission CD Besitzer damit arbeiten können.

    Was ist jetzt mit der Geologenfunktion ?
    Wo steht die zur Verfügung , nur bei den Mission CD Edi maps ?
    Nur für die Mission CD Besitzer oder ?


    S3/S4:
    S6 steht vor der Tür, http://www.siedler-games.de ist schon da
     
    Beiträge: 1736 | Registriert: 14.04.2002Mit Zitat antwortenBeitrag editieren oder löschen
    Geschrieben am Beitrag ausblenden
    Was ja auch nochmal ganz interesant wäre:
    Die Möglichkeit den Namen des Questnamens im Questedi ändern zu können.
    Daneben wäre es auch schön, wenn man eben die Quests einer map leicht in andere Maps einbinden könnte.
    Man hat ja so seine Standards.


    S3/S4:
    S6 steht vor der Tür, http://www.siedler-games.de ist schon da
     
    Beiträge: 1736 | Registriert: 14.04.2002Mit Zitat antwortenBeitrag editieren oder löschen
     Vorheriges Thema | Nächstes Thema powered by eve community  
     

    ubi.com    Ubi.com Foren  Springen zu Forum Kategorie  Die Siedler  Springen zu Foren  DIE SIEDLER - Aufstieg eines Königreichs / Editor & Maps    Patch 1.5 - Questverbesserungen

    Terms of Use