Mehrere Konditionen gebündelt abfragen

XML-Variante AOQML, ihre Möglichkeiten, Ergänzungen und Entwicklung...

Moderatoren: Ratsgruppe Programmierer, A-Team

Mehrere Konditionen gebündelt abfragen

Beitragvon Varthac » Di 27 Okt, 2020 12:15

Gibt es in AOQML die Möglichkeit Variablen gebündelt abzufragen im Sinne des klassischen if(var1 && var2 && var3)?

Ich habe momentan eine Quest, wo ich auf 10 Fälle testen muss, für die jeweils 3 Variablen relevant sind. Wenn ich für jeden Fall bei jeder Variable ein eigenes switch erstellen müsste, wäre das schon sehr unübersichtlich.
Varthac
:: Ratsmitglied :: Programmierung
:: Ratsmitglied :: Programmierung
 
Beiträge: 83
Registriert: Mi 29 Apr, 2020 01:38
Heldenname: Galrok, Sohn des Dwain

Re: Mehrere Konditionen gebündelt abfragen

Beitragvon Lowlander » Di 27 Okt, 2020 20:24

Kannst du noch etwas ausführen, was genau du mit den drei Variablen machen willst?
Lowlander
:: Ratsmitglied :: Programmierung
:: Ratsmitglied :: Programmierung
 
Beiträge: 2203
Registriert: So 25 Nov, 2007 18:05
Wohnort: Hamburg + Hage/Ostfriesland
Heldenname: Markorka Faargh

Re: Mehrere Konditionen gebündelt abfragen

Beitragvon Varthac » Mi 28 Okt, 2020 11:38

Kannst du noch etwas ausführen, was genau du mit den drei Variablen machen willst?


Hallo Lowlander, die Variablen sollen schlicht auf ihren Wahrheitsgehalt geprüft werden, damit die jeweilige Szene eintreten kann. Hier mal ein Beispiel wie ich bislang eine Szene dafür umgesetzt habe:

Code: Alles auswählen
<switch name="SR1">
  <case val="false">
   
    <switch attribute="weg_nach">
     <case val="Augweide">
       
        <switch attribute="weg_von">
           <case val="Fürstenbrunn">
              <include target="SR1_start"/>
           </case>

           <else>
              <quest status="pending" target="uebersicht"/>
           </else>
        </switch>
     </case>
   
     <else>
       <quest status="pending" target="uebersicht"/>
     </else>
   </switch>
  </case>

  <else>
    <quest status="pending" target="uebersicht"/>
  </else>
</switch>


Theoretisch würde ich hier gerne auch noch eine Wahrscheinlichkeitsvariable einbauen, damit die Szene nicht zwingend sofort feuert, sondern man die Strecke eventuell mehrfach ablaufen muss. Außerdem soll die Szene hier erst am Ende der Wegstrecke von Fürstenbrunn nach Augweide eintreten, d.h. ich müssste auch nochmal auf das Attribut "weg_restzeit" prüfen. Damit hätte ich dann eine fünffach verschachtelte Kontrollstruktur nur für eine von zehn Teilquesten innerhalb der "uebersicht"-Szene.

Daher hatte ich gehofft es gibt irgendwie eine Möglichkeit in einem switch auf mehrere Konditionen zu prüfen in etwa nach dem Vorbild:

Code: Alles auswählen
<switch name="SR1" && attribute="weg_nach" && attribute="weg_von">
  <case val="false", val="Augweide", val ="Fürstenbrunn">
    <!-- Do something -->
  </case>

  <else>
    <!-- Do something else -->
  </else>
</switch>
Varthac
:: Ratsmitglied :: Programmierung
:: Ratsmitglied :: Programmierung
 
Beiträge: 83
Registriert: Mi 29 Apr, 2020 01:38
Heldenname: Galrok, Sohn des Dwain

Re: Mehrere Konditionen gebündelt abfragen

Beitragvon Tommek » Mi 28 Okt, 2020 11:40

Nur als Hinweis ohne den Hintergrund der Abfrage zu kennen:

Questen oder ZBs können auf spezifische Wege festgelegt werden beim Einbau.
Benutzeravatar
Tommek
Site Admin
Site Admin
 
Beiträge: 7526
Registriert: Mi 17 Mai, 2006 22:40
Wohnort: Eodatia
Heldenname: Alrik Dormwald
Mitglied bei: Orkwacht

Re: Mehrere Konditionen gebündelt abfragen

Beitragvon Varthac » Mi 28 Okt, 2020 11:56

Nur als Hinweis ohne den Hintergrund der Abfrage zu kennen:

Questen oder ZBs können auf spezifische Wege festgelegt werden beim Einbau.


Die Quest in 10 Miniquests zu teilen war auch mein erster Ansatz, allerdings müsste dann vorher nochmal eine Bestätigungsquest stattfindet, die eine entsprechende Hero-Variable setzt und einige Hintergründe erläutert, ohne die die Miniquests nicht starten dürfen. Dachte mir, dass es vom Aufwand für Dritte her weniger ist, wenn ich das einfach alles in einer Quest bündle.

Wenn das natürlich mit den ganzen Abfragen von Serverseite her unnötig viel Aufwand erzeugt, setze ich es auch gern in mehreren Miniquests um.
Varthac
:: Ratsmitglied :: Programmierung
:: Ratsmitglied :: Programmierung
 
Beiträge: 83
Registriert: Mi 29 Apr, 2020 01:38
Heldenname: Galrok, Sohn des Dwain

Re: Mehrere Konditionen gebündelt abfragen

Beitragvon Tommek » Mi 28 Okt, 2020 12:01

Kannst du den Aufbau einmal beschreiben? Vielleicht fällt uns noch etwas gutes ein:

Start:
Einstieg in die Quest der Held soll etwas erledigen in einem bestimmten Gebiet.

Mittelteil:
Der Held reist auf verschiedenen Wegen und soll dort irgendwas zufällig finden.

Ende:
Der Held reist irgendwo hin und gibt das erledigen bekannt.
Benutzeravatar
Tommek
Site Admin
Site Admin
 
Beiträge: 7526
Registriert: Mi 17 Mai, 2006 22:40
Wohnort: Eodatia
Heldenname: Alrik Dormwald
Mitglied bei: Orkwacht

Re: Mehrere Konditionen gebündelt abfragen

Beitragvon Varthac » Mi 28 Okt, 2020 12:19

Start:
Eingangsquest, bei der der Held zwischen 30k und 190k exp als Voraussetzung haben soll. Hier bekommt er Hinweise, wo die 10 Teilquests (Schriftrollen sammeln) zu finden sind, kann aber auch ablehnen die Quest zu machen.

Mittelteil:
Held reist durch Grünbergen und kann an bestimmten Stellen die Quests triggern, um die Schriftrollen zu sammeln. Teilquests müssen in keiner bestimmten Reihenfolge abgelegt werden und können nach meinem Verständnis bei scheitern wiederholt werden. Darüber hinaus soll der Held die Möglichkeit haben die gesamte Quest abzubrechen.

Mittelteil2:
Held erhält den Hinweis, dass er alle 10 Schriftrollen besitzt und kann diese schließlich ortsgebunden zu einem Buch binden lassen. Hierbei kann er scheitern, aber hat beliebig viele Versuche.

Ende:
Held hat schlussendlich das gebundene Buch und erhält seine Questbelohnungen.
Varthac
:: Ratsmitglied :: Programmierung
:: Ratsmitglied :: Programmierung
 
Beiträge: 83
Registriert: Mi 29 Apr, 2020 01:38
Heldenname: Galrok, Sohn des Dwain

Re: Mehrere Konditionen gebündelt abfragen

Beitragvon Lowlander » Mi 28 Okt, 2020 17:08

Varthac hat geschrieben:
Code: Alles auswählen
<switch name="SR1" && attribute="weg_nach" && attribute="weg_von">
  <case val="false", val="Augweide", val ="Fürstenbrunn">
    <!-- Do something -->
  </case>

  <else>
    <!-- Do something else -->
  </else>
</switch>


ja, das geht, aber nur mit Trick:
Code: Alles auswählen
    <!-- gegeben sei eine Variable -->
    <set name="SR1" scope="scene" val="false" show="none"/>

    <!-- nun fassen wir die alle zusammen - ACHTUNG: das darf dann nicht weiter umbrechen! -->
    <store name="alle-Bedingungen" scope="scene">
        SR1=${SR1}, von='<get attribute="weg_von"/>', nach='<get attribute="weg_nach"/>'
    </store>

    <switch name="alle-Bedingungen">
        <case val="SR1=false, von='Perničid', nach='Burg Birca'">
            alle Bedingungen erfüllt
        </case>
        <else>
            mindestens eine Bedingung nicht erfüllt
        </else>
    </switch>

    (${alle-Bedingungen})


Man könnte auch mit
Code: Alles auswählen
<eval>...</eval>
rumtricksen, wenn man nur 1 und 0 als Werte hätte, ggf. per store+iv umsetzen. Dann kann man mit Multiplikation ver-und-en und mit Addition ver-der-n. Aber das wird unübersichtlich.
Lowlander
:: Ratsmitglied :: Programmierung
:: Ratsmitglied :: Programmierung
 
Beiträge: 2203
Registriert: So 25 Nov, 2007 18:05
Wohnort: Hamburg + Hage/Ostfriesland
Heldenname: Markorka Faargh

Re: Mehrere Konditionen gebündelt abfragen

Beitragvon Tommek » Mi 28 Okt, 2020 17:30

Sind das im Mittelteil wirklich Questen oder einfache ZBs?
Benutzeravatar
Tommek
Site Admin
Site Admin
 
Beiträge: 7526
Registriert: Mi 17 Mai, 2006 22:40
Wohnort: Eodatia
Heldenname: Alrik Dormwald
Mitglied bei: Orkwacht

Re: Mehrere Konditionen gebündelt abfragen

Beitragvon Varthac » Mi 28 Okt, 2020 18:24

Lowlander hat geschrieben:ja, das geht, aber nur mit Trick:
Code: Alles auswählen
    <!-- gegeben sei eine Variable -->
    <set name="SR1" scope="scene" val="false" show="none"/>

    <!-- nun fassen wir die alle zusammen - ACHTUNG: das darf dann nicht weiter umbrechen! -->
    <store name="alle-Bedingungen" scope="scene">
        SR1=${SR1}, von='<get attribute="weg_von"/>', nach='<get attribute="weg_nach"/>'
    </store>

    <switch name="alle-Bedingungen">
        <case val="SR1=false, von='Perničid', nach='Burg Birca'">
            alle Bedingungen erfüllt
        </case>
        <else>
            mindestens eine Bedingung nicht erfüllt
        </else>
    </switch>

    (${alle-Bedingungen})


Raffiniert! Danke für den Tipp. Das macht die Abfrage gleich viel übersichtlicher.

Tommek hat geschrieben:Sind das im Mittelteil wirklich Questen oder einfache ZBs?


Bestehen durchaus aus mehreren Szenen - auch wenns i.d.R. nur 3-4 sind. Also eher keine ZBs. Wie sieht denn dein abschließendes Urteil aus? Magst dus lieber als Bündel aus mehreren voneinander abhängigen Quests oder soll ich alles in eines packen und mit Lowlanders Abfragetrick abfertigen? Kann halt nicht einschätzen wie ressourcenzehrend so ne "pending"-Quest über nen längeren Zeitraum ist. Die Quest zieht sich ja durchaus und wenn ein Held aus Grünbergen abreist, schleppt er die Abfrage im Hintergrund weiter mit.
Varthac
:: Ratsmitglied :: Programmierung
:: Ratsmitglied :: Programmierung
 
Beiträge: 83
Registriert: Mi 29 Apr, 2020 01:38
Heldenname: Galrok, Sohn des Dwain

Re: Mehrere Konditionen gebündelt abfragen

Beitragvon Tommek » Mi 28 Okt, 2020 19:34

Pending kostet nicht viel kannst du so machen. Wollte nur sicher gehen das der andere Ansatz nicht übersichtlicher wäre, aber deine Idee ist am besten da.
Benutzeravatar
Tommek
Site Admin
Site Admin
 
Beiträge: 7526
Registriert: Mi 17 Mai, 2006 22:40
Wohnort: Eodatia
Heldenname: Alrik Dormwald
Mitglied bei: Orkwacht


Zurück zu Questen, Abenteuer und Zufallsbegegnungen (inkl. AOQML)



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron