Gaddezwerch hat geschrieben:Bei der Umfrage wurde öfter genannt, dass ihr euch echte Schleifen wünscht. Kann mir bitte jemand ein Beispiel geben, wo sowas hilfreich wäre (ich vermute, beim Durchgehen von Gruppenmitgliedern??) und hat eventuell schon eine Vorstellung wie das AOQML-mäßig aussehen könnte?
<for name="wolfNummer" from="1" inc="1" to="5"> ... </for>
<for all="sys:heroes">... </for>
<set name="fertigkeiten">
<element>Athletik</element>
<element>Geländelauf</element>
<element>Körperbeherrschung</element>
</set>
<for all="fertigkeiten" name="fertigkeit">
<challenge talent="${fertigkeit}">...</challenge>
</for>
<for all="${sys:heroes}" name="hero">... </for>
<for all="Athletik|Geländelauf|Körperbeherrschung" name="fertigkeit">... </for>
<set name="fertigkeiten">
<element>Athletik</element>
<element>Geländelauf</element>
<element>Körperbeherrschung</element>
</set>
<for all="fertigkeiten" name="fertigkeit">
<challenge talent="${fertigkeit}">...</challenge>
</for>
<fertigkeiten-set name="fertigkeiten">
<element>Athletik</element>
<element>Geländelauf</element>
<element>Körperbeherrschung</element>
</fertigkeiten-set>
<set t="Fertigeit" name="fertigkeiten">
<element>Athletik</element>
<element>Geländelauf</element>
<element>Körperbeherrschung</element>
</set>
Enno hat geschrieben:danach schreibst du "Was dann aber fehlt" - Ist hier dein Beitrag unvollständig oder meinst du die fehlende XSD-Validierung auf gültige Fertigkeits-Bezeichnungen, die du im Absatz davor erwähnst?
Enno hat geschrieben:Das Problem sehe ich auch, und ggf. kann man es noch einmal umgehen, indem man beispielsweise "typisierte Mengen einführt. Bspw.
- Code: Alles auswählen
<fertigkeiten-set name="fertigkeiten">
<element>Athletik</element>
<element>Geländelauf</element>
<element>Körperbeherrschung</element>
</fertigkeiten-set>
Enno hat geschrieben:oder
- Code: Alles auswählen
<set t="Fertigeit" name="fertigkeiten">
<element>Athletik</element>
<element>Geländelauf</element>
<element>Körperbeherrschung</element>
</set>
Enno hat geschrieben:Was vielleicht eine Überlegung Wert ist, wenn AOQML jetzt immer komplexer wird: passt die Abbildung der Sprachdefinition überhaupt noch in eine XSD, oder brauchen wir einen richtigen Parser?
Gaddezwerch hat geschrieben:Nach wie vor vermute ich den größten Bedarf bei Gruppen-ZB/-Quests, um da durch alle Helden durchzuiterieren, damit jeder Held was macht oder damit jeder Held auf etwas bestimmtes geprüft wird. Ein paar "handfeste" Beispiele wären schön.
<?xml version="1.0" encoding="UTF-8"?>
<scene xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://eisentrutz.antamar.eu/aoqml.xsd">
<retain name="tauchenprobe_einzeln" id="tauchenprobe_einzeln-1">
<set name="aktuelle_nr" inc="1" show="none"/>
<!-- Held selektieren -->
<store name="heroAttr">nr_1<fetch name="aktuelle_nr"/></store>
<select hero="${heroAttr}"/>
<challenge talent="Tauchen">
<success>
<include target="tauchen_bestanden_1_sf4"/>
</success>
<failure>
<include target="tauchen_nicht_bestanden_1_sf4"/>
</failure>
</challenge>
<!-- gibt es noch weitere Gruppenmitglieder? -->
<switch attribute="anzahl_gruppenmitglieder">
<case name="aktuelle_nr">
<!-- Unsere Variable 'aktuelle_nr' entspricht jetzt dem Attribut 'anzahl_gruppenmitglieder'.
Daher wurden alle Gruppenmitglieder einmal aufgerufen.
Daher nichts weiter machen. -->
</case>
<else>
<!-- sich erneut aufrufen -->
<replay name="tauchenprobe_einzeln" />
</else>
</switch>
</retain>
<store name="aktuelle_nr">0</store>
<replay name="tauchenprobe_einzeln"/>
</scene>
<has item="Seil" group-min="5">
<for all="sys:heroes">... </for>
<for all="sys:heroes" name="heldid">
<select hero="${heldid}"/><!-- einzelner Held wird selektiert -->
</for>
<!-- jetzt ist noch der zuletzt selektierte Held selektiert -->
<foreach-hero>
<!-- hier genau ein Held selektiert -->
</foreach-hero>
<!-- hier wird automatisch vorheriger Select wiederhergestellt -->
<foreach-hero only="selected">
<!-- hier ein Held selektiert, der zuvor auch schon selektiert war -->
</foreach-hero>
<foreach-hero only="non-selected">
<!-- hier ein Held selektiert, der zuvor nicht selektiert war -->
</foreach>
<foreach-hero role="Kämpfer">
<!-- hier ein Kämpfer-Held selektiert -->
</foreach>
Gaddezwerch hat geschrieben:Beim Tauchen-Beispiel: Wieso nicht Tauchen-Probe für alle ablegen, und diejenigen, die die Probe verhauen werden mittels <failure select-heroes="true"> selektieren?
Gaddezwerch hat geschrieben:Was das Abfragen von den 5 Seilen oder der Geldmenge angeht, ist wohl eher etwas, das man direkt bei has nachrüsten sollte ... komisch, dass das erst jetzt auffällt. Mit <has item="Seil" min="5"> fragt man derzeit ab, ob EIN Held 5 Seile dabei hat. Ich könnte mir da soetwas vorstellen:
- Code: Alles auswählen
<has item="Seil" group-min="5">
Gaddezwerch hat geschrieben:
- Code: Alles auswählen
<for all="sys:heroes">... </for>
erscheint mir da ganz logisch, wobei man hier vermutlich immer EIN Held im Rumpf der Schleife selektiert haben möchte und dieser implizite Select geht schon etwas über eine reines "for" hinaus.
- Code: Alles auswählen
<for all="sys:heroes" name="heldid">
<select hero="${heldid}"/><!-- einzelner Held wird selektiert -->
</for>
<!-- jetzt ist noch der zuletzt selektierte Held selektiert -->
Ist halt ein bisschen unintuitiv. Aber generalistisch.
Gaddezwerch hat geschrieben:Ich wäre auch für eine <foreach-hero>...</foreach-hero> Lösung zu haben, wo im Rumpf ein implizites Select stattfindet und nach der Schleife der vorherige Select wiederhergestellt wird.
[code]
<foreach-hero>
<!-- hier genau ein Held selektiert -->
</foreach-hero>
<for all="sys:heroes" name="heldid">
<select hero="${heldid}"/><!-- einzelner Held wird selektiert -->
</for>
<!-- jetzt ist noch der zuletzt selektierte Held selektiert -->
Gaddezwerch hat geschrieben:Dann könnte man ja zusätzlich noch sys:selected-heroes und sys:unselected-heroes zur Verfügung stellen.
Als Separatoren für Array-Elemente könnte man das | akzeptieren, wie oben bei den Fertigkeiten beschrieben.
<for all="${sys:heroes}" name="heldid">
<select hero="${heldid}"/>
<p>HeldID: <fetch name="heldid"/>, Name: <get attribute="name"/></p>
</for>
<for all="Singen|Schleichen|Schwimmen" name="talent">
<challenge talent="${talent}">
</challenge>
</for>
Gaddezwerch hat geschrieben:@Pergor: Gib mir mal bitte Rückmeldung, ob das den Umgang erleichtert und was noch fehlt.
Übrigens ist mir aufgefallen, dass du mit der Gruppe auch die Funktion <function name="ermittle-item-anzahl" param1="%seil"/> benutzen kannst, wenn du wissen willst, wie viele Seile die Gruppe dabei hat.
<store name="besterHeldID"><hero select="best" by-quality="ST" output="id" /></store>
<select hero="${besterHeldID}"/>
Mitglieder in diesem Forum: 0 Mitglieder und 18 Gäste