Fight: Unterschied zwischen den Versionen
Coen (Diskussion | Beiträge) K |
Helix (Diskussion | Beiträge) |
||
(25 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Es sollte zwar in Mini-Quests, die ja auch für Nicht-Kämpfer sein sollen, immer Pfade ohne Kampf | + | Es sollte zwar in Mini-Quests, die ja auch für Nicht-Kämpfer sein sollen, immer Pfade ohne Kampf geben, aber wenn der Held sich entsprechend anstellt, wird ein Kampf oft nicht zu vermeiden sein. Daher kann man in Quests natürlich auch Kämpfe aufsetzen: |
− | geben, aber wenn der Held sich entsprechend anstellt, wird ein Kampf oft nicht zu vermeiden sein. | + | |
− | Daher kann man in Quests natürlich auch Kämpfe aufsetzen: | + | == Kampf definieren == |
+ | |||
+ | <code xml n> | ||
+ | <fight> | ||
+ | <rivals> | ||
+ | <!-- gegen einen Goblin kämpfen --> | ||
+ | <npc npcid="326" /> | ||
+ | </rivals> | ||
+ | <victory takeDroppedWeapons="true"> | ||
+ | <p>Gewonnen!</p> | ||
+ | </victory> | ||
+ | <escape> | ||
+ | <p>Du bist vor dem Goblin geflohen.</p> | ||
+ | </escape> | ||
+ | <defeat> | ||
+ | <p>Du wurdest besiegt.</p> | ||
+ | </defeat> | ||
+ | </fight> | ||
+ | </code> | ||
+ | |||
+ | Kämpfe werden also mit dem Tag <fight> durchgeführt, Gegner mit via ''npc''-Tag innerhalb von <rivals> eingebaut. Wenn der Held gesiegt hat, wird der <victory>-Zweig ausgeführt. Ist er geflüchtet, wird der <escape>-Zweig ausgeführt. Hat der Held verloren, wird der <defeat>-Zweig ausgeführt. | ||
+ | |||
+ | Das Attribut takeDroppedWeapons="true" in <victory> bewirkt, dass bei einem Sieg des Helden dieser die Waffen und Schilde bzw. Parierwaffen der Gegner, die den Kampf verloren haben, automatisch aufsammelt. Mit anderen Worten: Die Beutewaffen werden automatisch aufgehoben. | ||
+ | |||
+ | |||
+ | Erlaubte Attribute für <fight> sind: | ||
+ | |||
+ | |||
+ | {| class="wikitable sortable" | ||
+ | |- | ||
+ | !Attribut!! Standardwert!! Erklärung | ||
+ | |- | ||
+ | |max-rounds||in Kampfengine||Man kann eine maximale Anzahl an Kampfrunden festlegen. Danach wird der Kampf automatisch [[Fight#Einen_Kampf_nach_X_Kampfrunden_unterbrechen|angehalten/unterbrochen]]. | ||
+ | |- | ||
+ | |start-distance||in Kampfengine||Legt die Distanz fest in denen die Gegner sich bemerken. Ist sie "0" gibt es keine zusätzlichen [[Fernkampf|Fernkampfaktionen]] vor dem Kampf. | ||
+ | |- | ||
+ | |brawl||false||Wenn 'true', dann kämpft der Held nicht mit seinen Waffen, sondern nur mit seinen Fäusten. | ||
+ | |- | ||
+ | |no-crits||false||Wenn 'true', dann landet der Held keine [[kritischer Treffer|kritischen Treffer]]. | ||
+ | |- | ||
+ | |no-botches||false||Wenn 'true', dann begeht der Held keine [[Patzer]]. | ||
+ | |- | ||
+ | |escape||true||Wenn 'false', kann er Held nicht fliehen. | ||
+ | |} | ||
+ | |||
+ | == Gegner definieren == | ||
+ | |||
+ | Möchte man mehrere Gegner nutzen, kann man das ''npc''-Tag mehrfach angeben. | ||
+ | <code xml n> | ||
+ | ... | ||
+ | <rivals> | ||
+ | <!-- 3 Goblins als Gegner --> | ||
+ | <npc npcid="326" /> | ||
+ | <npc npcid="326" /> | ||
+ | <npc npcid="326" /> | ||
+ | </rivals> | ||
+ | ... | ||
+ | </code> | ||
+ | |||
+ | Erlaubte Attribute für <npc> innerhalb von <rivals> oder <friends> sind: | ||
+ | |||
+ | |||
+ | {| class="wikitable sortable" | ||
+ | |- | ||
+ | !Attribut!! Standardwert!! Erklärung | ||
+ | |- | ||
+ | |npcid||||(wird immer benötigt): eine GegnerID aus der Datenbank, siehe [[NPC Liste]]. Dieser Gegner wird aus der Datenbank geladen und kann durch weitere Attribute angepasst/individualisiert werden | ||
+ | |- | ||
+ | |weapon||||entweder den Namen der Waffe eintragen oder die WaffeID mit führendem #, siehe [[Waffenliste]] | ||
+ | |- | ||
+ | |lefthand||||entweder den Namen des Schildes oder die WareID mit führendem # angeben | ||
+ | |- | ||
+ | |enter-in-round||1||Wenn der NPC erst später im Kampf eintreffen soll, kann hier die Kampfrunde angegeben werden. | ||
+ | |- | ||
+ | |gender||||'male' der Vorgabewert oder 'female' | ||
+ | |- | ||
+ | |surrender-below||||Dient dazu, den Gegner einen Fluchtversuch unternehmen zu lassen, wenn die LE unter den angegebenen Wert gefallen ist | ||
+ | |- | ||
+ | |escape||true||gibt an, ob eine Flucht für diesen Gegner möglich sein soll, standardmäßig ist 'true' eingestellt. Um eine Flucht des Gegners zu verhindern, muss also escape="false" angegeben werden. | ||
+ | |- | ||
+ | |wounds||0||eine Zahl, die angibt, wie viele Wunden der NPC bereits hat (natürlich standardmäßig 0, also keine Wunden). | ||
+ | |- | ||
+ | |LEP||||Zu setzende Lebenspunkte des NPC | ||
+ | |- | ||
+ | |AUP||||Zu setzende Ausdauerpunkte des NPC | ||
+ | |- | ||
+ | |ini||||Die Basis-Initiative des NPC | ||
+ | |- | ||
+ | |RS||||Ein allgemeiner Wert für den Rüstunggschutz. Dieser Wert wird für alle Trefferzonen übernommen. | ||
+ | |- | ||
+ | |BE||||Zu setzende Behinderung des NPC | ||
+ | |- | ||
+ | |brawl||false||Wenn 'true', dann kämpft der NPC nicht mit seinen Waffen, sondern nur mit seinen Fäusten. | ||
+ | |- | ||
+ | |no-crits||false||Wenn 'true', dann landet der Kämpfer keine [[kritischer Treffer|kritischen Treffer]]. | ||
+ | |- | ||
+ | |no-botches||false||Wenn 'true', dann begeht der Kämpfer keine [[Patzer]]. | ||
+ | |- | ||
+ | |npctype||||Erlaubte Angaben sind 'normal' (menschlich), 'tier' (wenn der NPC als Tier gelten soll), 'untot', 'skelett', 'daemon'. Die Unterschiede werden weiter unten erklärt. | ||
+ | |- | ||
+ | |id||||Wenn der NPC referenzierbar sein soll, kann man hier eine eigene ID für den NPC vergeben. Die ID wird für ''follows'' (anderer NPCs) benötigt. | ||
+ | |- | ||
+ | |follows||||Wenn das Fluchtverhalten des NPC sich an einen Anführer anpassen soll, kann hier ein Anführer referenziert werden. Sobald der Anführer bewusstlos wird oder flieht, flieht auch dieser NPC. | ||
+ | |- | ||
+ | |enabled||true||Wenn 'false' kämpft dieser NPC im Kampf nicht mit. Dieses Attribut kann dabei helfen, zufallsbedingt unterschiedliche Anzahl an Gegnern für einen Kampf festzulegen. | ||
+ | |} | ||
+ | |||
+ | |||
+ | |||
<code xml n> | <code xml n> | ||
... | ... | ||
− | + | <!-- ein Wütender Goblin mit Holzspeer und Lederschild, der bereits eine Wunde hat --> | |
− | + | <npc npcid="326" name="Wütender Goblin" gender="male" weapon="Holzspeer" lefthand="Lederschild" surrender-below="10" wounds="1" escape="true" /> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
... | ... | ||
</code> | </code> | ||
− | |||
− | |||
− | + | Zu den Unterschieden der NPC-Typen (Attribut ''npctype''): | |
− | < | + | *Untote erlangen keine Mali bei schlechter Sicht und erleiden keinen Zusatzschaden bei Wundtreffern. Untote erleiden keinen Abzug aus niedriger LE. Weiterhin können sie keinen Gezielten Stich einsetzen. |
− | + | *Skelett ist fast dasselbe wie untot, nur dass es für den Kampf andere Textpassagen erhält. | |
− | + | *Dämonen sind ganz ähnlich wie Untote, nur dass sie im Kampf gar keine Wunden erhalten. | |
− | + | *Tiere fliehen bei weniger als 1/3 ihrer LE. | |
− | + | ||
+ | Mit folgendem Code könnte man einen Ork mit der NPC-ID 331 zu einem Ork-Dämon machen: | ||
+ | <code xml> | ||
+ | <npc npcid="331" npctype="daemon" name="Ork-Dämon"/> | ||
+ | </code> | ||
+ | |||
+ | == Hinweise für Gruppenkämpfe == | ||
+ | |||
+ | Bei Gruppenquests/-zb erstellt man einen Kampf ebenfalls mit ''fight''. Zu beachten ist hierbei, dass für gewöhnlich alle [[select|selektierten]] Gruppenmitglieder automatisch mitkämpfen - ohne dass man als Autor hier eine weitere Regelung treffen muss. Eine Ausnahme stellen hier ''Mitreisende'' dar. Diese kämpfen niemals mit. Sollten daher aktuell nur Mitreisende selektiert sein bei Ausführung von ''fight'', wird automatisch der Gruppenführer den Kampf alleine bestreiten. | ||
− | + | == Mitstreiter hinzufügen == | |
− | |||
− | |||
+ | Um Freunde/Mitstreiter auf der Seite der Helden kämpfen zu lassen, kann das <friends>-Tag benutzt werden, das sich analog zum <rivals>-Tag benutzen lässt: | ||
+ | |||
+ | <code xml n> | ||
+ | <fight> | ||
+ | <friends> | ||
+ | <!-- z.B. Gruumsh 1:1 aus der DB; soll nicht fliehen dürfen --> | ||
+ | <npc npcid="67" escape="false" /> | ||
+ | </friends> | ||
+ | <rivals> | ||
+ | <!-- z.B. ein Hauptmann aus der DB als Salina mit einem Säbel --> | ||
+ | <npc npcid="34" name="Salina" gender="female" weapon="Säbel" surrender-below="10"/> | ||
+ | </rivals> | ||
+ | <defeat> | ||
+ | <include target="kampf-verloren"/> | ||
+ | </defeat> | ||
+ | <escape> | ||
+ | <include target="kampf-gefluechtet"/> | ||
+ | </escape> | ||
+ | <victory> | ||
+ | <include target="kampf-gewonnen"/> | ||
+ | </victory> | ||
+ | </fight> | ||
+ | </code> | ||
+ | |||
+ | |||
+ | == Gegner variieren == | ||
+ | |||
+ | Um für einen Kampf unterschiedliche Gegner auswählen zu können gibt es folgende Möglichkeit: Zunächst wird per Random oder einer beliebigen anderen Möglichkeit eine Variable gespeichert, deren Inhalt '''true''' oder '''false''' lauten muss. Diese kann dann wie folgt in den Kampf integriert werden: | ||
+ | |||
+ | <code xml n> | ||
+ | <store name="AlbertEnabled">true</store> | ||
+ | <store name="AlgolfEnabled">false</store> | ||
+ | <store name="AlbertaEnabled">false</store> | ||
+ | |||
+ | ... | ||
+ | <fight> | ||
+ | <rivals> | ||
+ | <npc npcid="32" name="Albert" gender="male" enabled="${AlbertEnabled}"/><!-- Kämpft mit, da true --> | ||
+ | <npc npcid="32" name="Algolf" gender="male" enabled="${AlgolfEnabled}"/><!-- Kämpft nicht, da false --> | ||
+ | <npc npcid="32" name="Alberta" gender="female" enabled="${AlbertaEnabled}"/><!-- dito --> | ||
+ | </code> | ||
+ | |||
+ | == Keine Flucht des Helden == | ||
+ | |||
+ | Das Fluchtverhalten des Helden kann durch das Attribut 'escape' im fight-Tag definiert werden, bei 'false' kämpft er bis zuletzt. | ||
+ | <code xml n> | ||
+ | <fight escape="false"><!-- Held kämpft bis zum bitteren Ende --> | ||
+ | ... | ||
+ | </fight> | ||
+ | </code> | ||
+ | bewirkt, dass der Held nie fliehen darf. Standardmäßig ist escape="true" - das escape-Attribut kann also auch weggelassen werden. | ||
+ | |||
+ | |||
+ | == NPC soll erst später dem Kampf beitreten == | ||
+ | |||
+ | Soll ein NPC noch nicht von Anfang an mitkämpfen, kann dies via ''enter-in-round'' definiert werden: | ||
+ | <code xml> | ||
+ | <fight> | ||
+ | <friends> | ||
+ | <npc npcid="4" name="Soldat" enter-in-round="5" /><!-- dieser NPC trifft erst in Kampfrunde 5 dem Kampf bei --> | ||
+ | </friends> | ||
+ | <rivals> | ||
+ | <npc npcid="331" /> | ||
+ | <npc npcid="331" enter-in-round="3" /><!-- dieser NPC kommt erst in Kampfrunde 3 dazu --> | ||
+ | </rivals> | ||
+ | ... | ||
+ | </fight> | ||
+ | </code> | ||
+ | |||
+ | |||
+ | == Waffenloser Kampf == | ||
+ | |||
+ | Wenn der Held ohne seine Waffen kämpfen soll, kann dies im fight-Tag angegeben werden: | ||
+ | <code xml> | ||
+ | <fight brawl="true"> | ||
+ | <rivals> | ||
+ | <npcid="4" name="Wegelagerer"/> | ||
+ | </rivals> | ||
+ | </fight> | ||
+ | </code> | ||
+ | In dem Beispiel würde der Held selbst ohne Waffe gegen einen NPC kämpfen, der eine Waffe trägt (die NPCID 4 hat standardmäßig eine Waffe eingestellt). | ||
+ | |||
+ | Soll auch der NPC ohne seine Waffe kämpfen, dann kann für ihn ebenfalls ein ''brawl'' angegeben werden: | ||
+ | |||
+ | <code xml> | ||
+ | <fight brawl="true"> | ||
+ | <rivals> | ||
+ | <npcid="4" name="Wegelagerer" brawl="true"/> | ||
+ | </rivals> | ||
+ | </fight> | ||
+ | </code> | ||
+ | Somit würde sowohl der Held als auch der Wegelagerer mit bloßen Händen kämpfen. | ||
+ | |||
+ | |||
+ | Man kann dem NPC auch seine Waffe "abnehmen" wie folgt: | ||
+ | <code xml> | ||
+ | <npcid="4" name="Wegelagerer" weapon="none"/> | ||
+ | </code> | ||
+ | Sollte der NPC jedoch eine Parierwaffe/Schild haben, würde er dieses behalten. Auch dieses kann ihm abgenommen werden: | ||
+ | <code xml> | ||
+ | <npcid="4" name="Wegelagerer" lefthand="none"/><!-- NPC kämpft ohne Parierwaffe/Schild --> | ||
+ | <npcid="4" name="Wegelagerer" weapon="none" lefthand="none"/><!-- NPC kämpft ohne Waffe und ohne Parierwaffe/Schild --> | ||
+ | </code> | ||
+ | |||
+ | == Fluchtverhalten eines NPC anhand Flucht/Tod eines Anführers == | ||
+ | Soll ein NPC fliehen, wenn der "Anführer" der Gruppe bewusstlos wird oder flieht, kann dies wie folgt definiert werden: | ||
+ | <code xml> | ||
+ | <fight> | ||
+ | <rivals> | ||
+ | <npc npcid="331" name="Ork-Boss" id="Boss" /> | ||
+ | <npc npcid="71" follows="Boss" /><!-- dieser NCP flieht, sobald der Ork-Boss stirbt oder flieht --> | ||
+ | </rivals> | ||
+ | </fight> | ||
+ | </code> | ||
+ | |||
+ | == Gegner tot oder geflohen? == | ||
+ | Alle NPCs, die im Kampf mitgekämpft haben, können im Nachhinein auf bestimmte Attribute abgefragt werden. | ||
+ | Die abfragbaren Attribute sind: | ||
+ | *'''lep''' -> liefert die verbliebenen LEP | ||
+ | *'''wounds''' -> liefert die Anzahl an Wunden | ||
+ | *'''status''' -> liefert 'gewonnen', 'verloren', 'geflohen', 'unentschieden' (wenn Kampf noch im Gang), 'nicht_gekaempft' (wenn NPC erst später dem Kampf beitritt und der Kampf bis dahin bereits beendet ist) | ||
+ | |||
+ | Beachte, dass auch bei einer Niederlage (Status 'verloren') die LEP durchaus noch größer als 0 sein können. | ||
+ | |||
+ | Zugriff auf diese Attribute erfolgt über eine Variable nach dem Schema '''''rivals:#1:lep''''' (für die Gegner) bzw. '''''friends:#1:lep''''' (für NPC-Freunde). Die Variable steht nur in der kampfausführenden Szene bereit, sie hat also den [[scope]] 'scene'. | ||
+ | |||
+ | Beispiel: | ||
+ | <code xml n> | ||
+ | <fight> | ||
+ | <friends> | ||
+ | <npc npcid="1" /> | ||
+ | </friends> | ||
+ | <rivals> | ||
+ | <npc npcid="331" name="Ork 1" /> | ||
+ | <npc npcid="331" name="Ork 2" /> | ||
+ | <npc npcid="331" name="Ork 3" LEP="50" AUP="100" RS="6" BE="8" ini="1" /> | ||
+ | </rivals> | ||
+ | <victory takeDroppedWeapons="false"> | ||
+ | <p>Sieg!</p> | ||
+ | <switch name="rivals:#1:status"> | ||
+ | <case val="geflohen"> | ||
+ | <p>Ork 1 ist geflohen!</p> | ||
+ | </case> | ||
+ | <else> | ||
+ | <p>Ork 1 ist tot!</p> | ||
+ | </else> | ||
+ | </switch> | ||
+ | </victory> | ||
+ | <escape> | ||
+ | <p>Du bist geflohen</p> | ||
+ | </escape> | ||
+ | <defeat> | ||
+ | <p>Du bist zu Boden gegangen.</p> | ||
+ | </defeat> | ||
+ | </fight> | ||
+ | |||
+ | <p>Ork1-Status: <fetch name="rivals:#1:status" /></p> | ||
+ | <p>Ork1-Leben: <fetch name="rivals:#1:lep" /></p> | ||
+ | <p>Ork1-Wunden: <fetch name="rivals:#1:wounds" /></p> | ||
+ | |||
+ | <p>Ork2-Status: <fetch name="rivals:#2:status" /></p> | ||
+ | <p>Ork2-Leben: <fetch name="rivals:#2:lep" /></p> | ||
+ | <p>Ork2-Wunden: <fetch name="rivals:#2:wounds" /></p> | ||
+ | |||
+ | <p>Ork3-Status: <fetch name="rivals:#3:status" /></p> | ||
+ | <p>Ork3-Leben: <fetch name="rivals:#3:lep" /></p> | ||
+ | <p>Ork3-Wunden: <fetch name="rivals:#3:wounds" /></p> | ||
+ | |||
+ | <p>Freund-Status: <fetch name="friends:#1:status" /></p> | ||
+ | <p>Freund-Leben: <fetch name="friends:#1:lep" /></p> | ||
+ | <p>Freund-Wunden: <fetch name="friends:#1:wounds" /></p> | ||
+ | </code> | ||
+ | |||
+ | |||
+ | == Einen Kampf nach X Kampfrunden unterbrechen == | ||
+ | |||
+ | Man kann eine maximale Anzahl an Kampfrunden festlegen mittels ''max-rounds''. Danach wird der Kampf automatisch angehalten/unterbrochen. Da der Kampf zu dem Zeitpunkt theoretisch noch im Gange sein kann, wurde ein neuer Status 'draw' eingeführt, der mittels des Subtags 'draw' ausgewertet werden kann: | ||
+ | <code xml> | ||
+ | <fight max-rounds="5"> | ||
+ | <rivals> | ||
+ | <npc npcid="200" /> | ||
+ | <npc npcid="200" /> | ||
+ | <npc npcid="200" /> | ||
+ | </rivals> | ||
+ | <draw> | ||
+ | <p>Kampf noch im Gange...</p> | ||
+ | </draw> | ||
+ | <victory takeDroppedWeapons="false"> | ||
+ | <p>Sieg!</p> | ||
+ | </victory> | ||
+ | <escape> | ||
+ | <p>Du bist geflohen.</p> | ||
+ | </escape> | ||
+ | <defeat> | ||
+ | <p>Du bist zu Boden gegangen.</p> | ||
+ | </defeat> | ||
+ | </fight> | ||
+ | </code> | ||
+ | |||
+ | == Patzer und kritische Treffer deaktivieren == | ||
+ | |||
+ | Für jeden Kämpfer kann individuell angegeben werden, ob [[kritische Treffer]] (''no-crits'') und [[Patzer]] (''no-botches'') deaktiviert werden sollen. | ||
+ | |||
+ | Für den Held erfolgt die Einstellung innerhalb des ''fight''-Tags. | ||
+ | Für Gegner erfolgt die Einstellung innerhalb des rivals - npc Tag. | ||
+ | Für Mitstreiter erfolgt die Einstellung innerhalb des friends - npc Tag. | ||
+ | |||
+ | Beispiel bei dem weder der Held noch der Gegner Patzer und kritische Treffer vornehmen kann: | ||
+ | <code xml> | ||
+ | <fight no-crits="true" no-botches="true"> | ||
+ | <rivals> | ||
+ | <npc npcid="863" no-crits="true" no-botches="true"/> | ||
+ | </rivals> | ||
+ | <victory takeDroppedWeapons="false"> | ||
+ | <p>Sieg!</p> | ||
+ | </victory> | ||
+ | <escape> | ||
+ | <p>Du bist geflohen.</p> | ||
+ | </escape> | ||
+ | <defeat> | ||
+ | <p>Du bist zu Boden gegangen.</p> | ||
+ | </defeat> | ||
+ | </fight> | ||
+ | </code> | ||
+ | |||
+ | == Kampf ohne Teilnahme des Helden == | ||
+ | Um einen Kampf ohne die Teilnahme des Helden oder der Heldin stattfinden zu lassen, speichert man die aktuellen LEP, setzt sie danach auf 0, startet den Kampf und stellt die vorherigen LEP wieder her. | ||
+ | |||
+ | <code xml> | ||
+ | <store name="aktuelle-LEP"><get attribute="LEP"/></store><!-- Speichern der aktuellen LEP --> | ||
+ | <set attribute="LEP" val="0"/><!-- Die LEP auf 0 setzen --> | ||
+ | <fight> | ||
+ | <friends> | ||
+ | <npc npcid="4" name="Soldat"/> | ||
+ | </friends> | ||
+ | <rivals> | ||
+ | <npc npcid="331" /> | ||
+ | </rivals> | ||
+ | ... | ||
+ | </fight> | ||
+ | <set attribute="LEP" val="${aktuelle-LEP}"/><!-- Die LEP auf vorherigen Zustand setzen --> | ||
+ | </code> | ||
[[Kategorie:AOQML-Tags]] | [[Kategorie:AOQML-Tags]] | ||
− |
Aktuelle Version vom 9. Dezember 2020, 17:17 Uhr
Es sollte zwar in Mini-Quests, die ja auch für Nicht-Kämpfer sein sollen, immer Pfade ohne Kampf geben, aber wenn der Held sich entsprechend anstellt, wird ein Kampf oft nicht zu vermeiden sein. Daher kann man in Quests natürlich auch Kämpfe aufsetzen:
Inhaltsverzeichnis
- 1 Kampf definieren
- 2 Gegner definieren
- 3 Hinweise für Gruppenkämpfe
- 4 Mitstreiter hinzufügen
- 5 Gegner variieren
- 6 Keine Flucht des Helden
- 7 NPC soll erst später dem Kampf beitreten
- 8 Waffenloser Kampf
- 9 Fluchtverhalten eines NPC anhand Flucht/Tod eines Anführers
- 10 Gegner tot oder geflohen?
- 11 Einen Kampf nach X Kampfrunden unterbrechen
- 12 Patzer und kritische Treffer deaktivieren
- 13 Kampf ohne Teilnahme des Helden
Kampf definieren
<fight>
<rivals>
<!-- gegen einen Goblin kämpfen -->
<npc npcid="326" />
</rivals>
<victory takeDroppedWeapons="true">
<p>Gewonnen!</p>
</victory>
<escape>
<p>Du bist vor dem Goblin geflohen.</p>
</escape>
<defeat>
<p>Du wurdest besiegt.</p>
</defeat>
</fight>
Kämpfe werden also mit dem Tag <fight> durchgeführt, Gegner mit via npc-Tag innerhalb von <rivals> eingebaut. Wenn der Held gesiegt hat, wird der <victory>-Zweig ausgeführt. Ist er geflüchtet, wird der <escape>-Zweig ausgeführt. Hat der Held verloren, wird der <defeat>-Zweig ausgeführt.
Das Attribut takeDroppedWeapons="true" in <victory> bewirkt, dass bei einem Sieg des Helden dieser die Waffen und Schilde bzw. Parierwaffen der Gegner, die den Kampf verloren haben, automatisch aufsammelt. Mit anderen Worten: Die Beutewaffen werden automatisch aufgehoben.
Erlaubte Attribute für <fight> sind:
Attribut | Standardwert | Erklärung |
---|---|---|
max-rounds | in Kampfengine | Man kann eine maximale Anzahl an Kampfrunden festlegen. Danach wird der Kampf automatisch angehalten/unterbrochen. |
start-distance | in Kampfengine | Legt die Distanz fest in denen die Gegner sich bemerken. Ist sie "0" gibt es keine zusätzlichen Fernkampfaktionen vor dem Kampf. |
brawl | false | Wenn 'true', dann kämpft der Held nicht mit seinen Waffen, sondern nur mit seinen Fäusten. |
no-crits | false | Wenn 'true', dann landet der Held keine kritischen Treffer. |
no-botches | false | Wenn 'true', dann begeht der Held keine Patzer. |
escape | true | Wenn 'false', kann er Held nicht fliehen. |
Gegner definieren
Möchte man mehrere Gegner nutzen, kann man das npc-Tag mehrfach angeben.
...
<rivals>
<!-- 3 Goblins als Gegner -->
<npc npcid="326" />
<npc npcid="326" />
<npc npcid="326" />
</rivals>
...
Erlaubte Attribute für <npc> innerhalb von <rivals> oder <friends> sind:
Attribut | Standardwert | Erklärung |
---|---|---|
npcid | (wird immer benötigt): eine GegnerID aus der Datenbank, siehe NPC Liste. Dieser Gegner wird aus der Datenbank geladen und kann durch weitere Attribute angepasst/individualisiert werden | |
weapon | entweder den Namen der Waffe eintragen oder die WaffeID mit führendem #, siehe Waffenliste | |
lefthand | entweder den Namen des Schildes oder die WareID mit führendem # angeben | |
enter-in-round | 1 | Wenn der NPC erst später im Kampf eintreffen soll, kann hier die Kampfrunde angegeben werden. |
gender | 'male' der Vorgabewert oder 'female' | |
surrender-below | Dient dazu, den Gegner einen Fluchtversuch unternehmen zu lassen, wenn die LE unter den angegebenen Wert gefallen ist | |
escape | true | gibt an, ob eine Flucht für diesen Gegner möglich sein soll, standardmäßig ist 'true' eingestellt. Um eine Flucht des Gegners zu verhindern, muss also escape="false" angegeben werden. |
wounds | 0 | eine Zahl, die angibt, wie viele Wunden der NPC bereits hat (natürlich standardmäßig 0, also keine Wunden). |
LEP | Zu setzende Lebenspunkte des NPC | |
AUP | Zu setzende Ausdauerpunkte des NPC | |
ini | Die Basis-Initiative des NPC | |
RS | Ein allgemeiner Wert für den Rüstunggschutz. Dieser Wert wird für alle Trefferzonen übernommen. | |
BE | Zu setzende Behinderung des NPC | |
brawl | false | Wenn 'true', dann kämpft der NPC nicht mit seinen Waffen, sondern nur mit seinen Fäusten. |
no-crits | false | Wenn 'true', dann landet der Kämpfer keine kritischen Treffer. |
no-botches | false | Wenn 'true', dann begeht der Kämpfer keine Patzer. |
npctype | Erlaubte Angaben sind 'normal' (menschlich), 'tier' (wenn der NPC als Tier gelten soll), 'untot', 'skelett', 'daemon'. Die Unterschiede werden weiter unten erklärt. | |
id | Wenn der NPC referenzierbar sein soll, kann man hier eine eigene ID für den NPC vergeben. Die ID wird für follows (anderer NPCs) benötigt. | |
follows | Wenn das Fluchtverhalten des NPC sich an einen Anführer anpassen soll, kann hier ein Anführer referenziert werden. Sobald der Anführer bewusstlos wird oder flieht, flieht auch dieser NPC. | |
enabled | true | Wenn 'false' kämpft dieser NPC im Kampf nicht mit. Dieses Attribut kann dabei helfen, zufallsbedingt unterschiedliche Anzahl an Gegnern für einen Kampf festzulegen. |
...
<!-- ein Wütender Goblin mit Holzspeer und Lederschild, der bereits eine Wunde hat -->
<npc npcid="326" name="Wütender Goblin" gender="male" weapon="Holzspeer" lefthand="Lederschild" surrender-below="10" wounds="1" escape="true" />
...
Zu den Unterschieden der NPC-Typen (Attribut npctype):
- Untote erlangen keine Mali bei schlechter Sicht und erleiden keinen Zusatzschaden bei Wundtreffern. Untote erleiden keinen Abzug aus niedriger LE. Weiterhin können sie keinen Gezielten Stich einsetzen.
- Skelett ist fast dasselbe wie untot, nur dass es für den Kampf andere Textpassagen erhält.
- Dämonen sind ganz ähnlich wie Untote, nur dass sie im Kampf gar keine Wunden erhalten.
- Tiere fliehen bei weniger als 1/3 ihrer LE.
Mit folgendem Code könnte man einen Ork mit der NPC-ID 331 zu einem Ork-Dämon machen:
<npc npcid="331" npctype="daemon" name="Ork-Dämon"/>
Hinweise für Gruppenkämpfe
Bei Gruppenquests/-zb erstellt man einen Kampf ebenfalls mit fight. Zu beachten ist hierbei, dass für gewöhnlich alle selektierten Gruppenmitglieder automatisch mitkämpfen - ohne dass man als Autor hier eine weitere Regelung treffen muss. Eine Ausnahme stellen hier Mitreisende dar. Diese kämpfen niemals mit. Sollten daher aktuell nur Mitreisende selektiert sein bei Ausführung von fight, wird automatisch der Gruppenführer den Kampf alleine bestreiten.
Mitstreiter hinzufügen
Um Freunde/Mitstreiter auf der Seite der Helden kämpfen zu lassen, kann das <friends>-Tag benutzt werden, das sich analog zum <rivals>-Tag benutzen lässt:
<fight>
<friends>
<!-- z.B. Gruumsh 1:1 aus der DB; soll nicht fliehen dürfen -->
<npc npcid="67" escape="false" />
</friends>
<rivals>
<!-- z.B. ein Hauptmann aus der DB als Salina mit einem Säbel -->
<npc npcid="34" name="Salina" gender="female" weapon="Säbel" surrender-below="10"/>
</rivals>
<defeat>
<include target="kampf-verloren"/>
</defeat>
<escape>
<include target="kampf-gefluechtet"/>
</escape>
<victory>
<include target="kampf-gewonnen"/>
</victory>
</fight>
Gegner variieren
Um für einen Kampf unterschiedliche Gegner auswählen zu können gibt es folgende Möglichkeit: Zunächst wird per Random oder einer beliebigen anderen Möglichkeit eine Variable gespeichert, deren Inhalt true oder false lauten muss. Diese kann dann wie folgt in den Kampf integriert werden:
<store name="AlbertEnabled">true</store>
<store name="AlgolfEnabled">false</store>
<store name="AlbertaEnabled">false</store>
...
<fight>
<rivals>
<npc npcid="32" name="Albert" gender="male" enabled="${AlbertEnabled}"/><!-- Kämpft mit, da true -->
<npc npcid="32" name="Algolf" gender="male" enabled="${AlgolfEnabled}"/><!-- Kämpft nicht, da false -->
<npc npcid="32" name="Alberta" gender="female" enabled="${AlbertaEnabled}"/><!-- dito -->
Keine Flucht des Helden
Das Fluchtverhalten des Helden kann durch das Attribut 'escape' im fight-Tag definiert werden, bei 'false' kämpft er bis zuletzt.
<fight escape="false"><!-- Held kämpft bis zum bitteren Ende -->
...
</fight>
bewirkt, dass der Held nie fliehen darf. Standardmäßig ist escape="true" - das escape-Attribut kann also auch weggelassen werden.
NPC soll erst später dem Kampf beitreten
Soll ein NPC noch nicht von Anfang an mitkämpfen, kann dies via enter-in-round definiert werden:
<fight>
<friends>
<npc npcid="4" name="Soldat" enter-in-round="5" /><!-- dieser NPC trifft erst in Kampfrunde 5 dem Kampf bei -->
</friends>
<rivals>
<npc npcid="331" />
<npc npcid="331" enter-in-round="3" /><!-- dieser NPC kommt erst in Kampfrunde 3 dazu -->
</rivals>
...
</fight>
Waffenloser Kampf
Wenn der Held ohne seine Waffen kämpfen soll, kann dies im fight-Tag angegeben werden:
<fight brawl="true">
<rivals>
<npcid="4" name="Wegelagerer"/>
</rivals>
</fight>
In dem Beispiel würde der Held selbst ohne Waffe gegen einen NPC kämpfen, der eine Waffe trägt (die NPCID 4 hat standardmäßig eine Waffe eingestellt).
Soll auch der NPC ohne seine Waffe kämpfen, dann kann für ihn ebenfalls ein brawl angegeben werden:
<fight brawl="true">
<rivals>
<npcid="4" name="Wegelagerer" brawl="true"/>
</rivals>
</fight>
Somit würde sowohl der Held als auch der Wegelagerer mit bloßen Händen kämpfen.
Man kann dem NPC auch seine Waffe "abnehmen" wie folgt:
<npcid="4" name="Wegelagerer" weapon="none"/>
Sollte der NPC jedoch eine Parierwaffe/Schild haben, würde er dieses behalten. Auch dieses kann ihm abgenommen werden:
<npcid="4" name="Wegelagerer" lefthand="none"/><!-- NPC kämpft ohne Parierwaffe/Schild -->
<npcid="4" name="Wegelagerer" weapon="none" lefthand="none"/><!-- NPC kämpft ohne Waffe und ohne Parierwaffe/Schild -->
Fluchtverhalten eines NPC anhand Flucht/Tod eines Anführers
Soll ein NPC fliehen, wenn der "Anführer" der Gruppe bewusstlos wird oder flieht, kann dies wie folgt definiert werden:
<fight>
<rivals>
<npc npcid="331" name="Ork-Boss" id="Boss" />
<npc npcid="71" follows="Boss" /><!-- dieser NCP flieht, sobald der Ork-Boss stirbt oder flieht -->
</rivals>
</fight>
Gegner tot oder geflohen?
Alle NPCs, die im Kampf mitgekämpft haben, können im Nachhinein auf bestimmte Attribute abgefragt werden. Die abfragbaren Attribute sind:
- lep -> liefert die verbliebenen LEP
- wounds -> liefert die Anzahl an Wunden
- status -> liefert 'gewonnen', 'verloren', 'geflohen', 'unentschieden' (wenn Kampf noch im Gang), 'nicht_gekaempft' (wenn NPC erst später dem Kampf beitritt und der Kampf bis dahin bereits beendet ist)
Beachte, dass auch bei einer Niederlage (Status 'verloren') die LEP durchaus noch größer als 0 sein können.
Zugriff auf diese Attribute erfolgt über eine Variable nach dem Schema rivals:#1:lep (für die Gegner) bzw. friends:#1:lep (für NPC-Freunde). Die Variable steht nur in der kampfausführenden Szene bereit, sie hat also den scope 'scene'.
Beispiel:
<fight>
<friends>
<npc npcid="1" />
</friends>
<rivals>
<npc npcid="331" name="Ork 1" />
<npc npcid="331" name="Ork 2" />
<npc npcid="331" name="Ork 3" LEP="50" AUP="100" RS="6" BE="8" ini="1" />
</rivals>
<victory takeDroppedWeapons="false">
<p>Sieg!</p>
<switch name="rivals:#1:status">
<case val="geflohen">
<p>Ork 1 ist geflohen!</p>
</case>
<else>
<p>Ork 1 ist tot!</p>
</else>
</switch>
</victory>
<escape>
<p>Du bist geflohen</p>
</escape>
<defeat>
<p>Du bist zu Boden gegangen.</p>
</defeat>
</fight>
<p>Ork1-Status: <fetch name="rivals:#1:status" /></p>
<p>Ork1-Leben: <fetch name="rivals:#1:lep" /></p>
<p>Ork1-Wunden: <fetch name="rivals:#1:wounds" /></p>
<p>Ork2-Status: <fetch name="rivals:#2:status" /></p>
<p>Ork2-Leben: <fetch name="rivals:#2:lep" /></p>
<p>Ork2-Wunden: <fetch name="rivals:#2:wounds" /></p>
<p>Ork3-Status: <fetch name="rivals:#3:status" /></p>
<p>Ork3-Leben: <fetch name="rivals:#3:lep" /></p>
<p>Ork3-Wunden: <fetch name="rivals:#3:wounds" /></p>
<p>Freund-Status: <fetch name="friends:#1:status" /></p>
<p>Freund-Leben: <fetch name="friends:#1:lep" /></p>
<p>Freund-Wunden: <fetch name="friends:#1:wounds" /></p>
Einen Kampf nach X Kampfrunden unterbrechen
Man kann eine maximale Anzahl an Kampfrunden festlegen mittels max-rounds. Danach wird der Kampf automatisch angehalten/unterbrochen. Da der Kampf zu dem Zeitpunkt theoretisch noch im Gange sein kann, wurde ein neuer Status 'draw' eingeführt, der mittels des Subtags 'draw' ausgewertet werden kann:
<fight max-rounds="5">
<rivals>
<npc npcid="200" />
<npc npcid="200" />
<npc npcid="200" />
</rivals>
<draw>
<p>Kampf noch im Gange...</p>
</draw>
<victory takeDroppedWeapons="false">
<p>Sieg!</p>
</victory>
<escape>
<p>Du bist geflohen.</p>
</escape>
<defeat>
<p>Du bist zu Boden gegangen.</p>
</defeat>
</fight>
Patzer und kritische Treffer deaktivieren
Für jeden Kämpfer kann individuell angegeben werden, ob kritische Treffer (no-crits) und Patzer (no-botches) deaktiviert werden sollen.
Für den Held erfolgt die Einstellung innerhalb des fight-Tags. Für Gegner erfolgt die Einstellung innerhalb des rivals - npc Tag. Für Mitstreiter erfolgt die Einstellung innerhalb des friends - npc Tag.
Beispiel bei dem weder der Held noch der Gegner Patzer und kritische Treffer vornehmen kann:
<fight no-crits="true" no-botches="true">
<rivals>
<npc npcid="863" no-crits="true" no-botches="true"/>
</rivals>
<victory takeDroppedWeapons="false">
<p>Sieg!</p>
</victory>
<escape>
<p>Du bist geflohen.</p>
</escape>
<defeat>
<p>Du bist zu Boden gegangen.</p>
</defeat>
</fight>
Kampf ohne Teilnahme des Helden
Um einen Kampf ohne die Teilnahme des Helden oder der Heldin stattfinden zu lassen, speichert man die aktuellen LEP, setzt sie danach auf 0, startet den Kampf und stellt die vorherigen LEP wieder her.
<store name="aktuelle-LEP"><get attribute="LEP"/></store><!-- Speichern der aktuellen LEP -->
<set attribute="LEP" val="0"/><!-- Die LEP auf 0 setzen -->
<fight>
<friends>
<npc npcid="4" name="Soldat"/>
</friends>
<rivals>
<npc npcid="331" />
</rivals>
...
</fight>
<set attribute="LEP" val="${aktuelle-LEP}"/><!-- Die LEP auf vorherigen Zustand setzen -->