Würfel transparent

Bild: © Michael Schwarzenberger / Pixabay (modifiziert)

@RollButler – eine Würfel App für Twitter

Lesezeit etwa 9 Minuten

Noch eine Würfel App? Ja und nicht ganz App… Aus einer Tüftelei und Machbarkeitsstudie heraus ist dieses Würfel Tool entstanden, dass primär via Twitter funktioniert. Wer also seine Würfel vergessen hat oder komplexe Würfeleien lieber digital ausführen möchte, kann das nun also auch per Twitter tun. Die Installation einer separaten Software ist damit nicht erforderlich, lediglich ein Twitter Account (und der Zugriff auf Twitter) sind für die Nutzung von RollButler erforderlich.

Mit der Implementierung des RollButlers habe ich ein wenig Gas gegeben, um dieses Würfel Tool in diesem Monat noch im Rahmen des Karnevals der Rollenspielblogs veröffentlichen zu können, bei dem es um Softwaretools im und für das Rollenspiel geht.

Karneval der Rollenspielblogs im Oktober 2016
Karneval der Rollenspielblogs im Oktober 2016

Eine Online/Offline Lösung hatte ich bereits mit dem JavaScript Online Würfel Tool realisiert. Für die Anbindung an Twitter ist allerdings eine serverseitige Lösung erforderlich. Also die eingerosteten PHP Kenntnisse herausgekramt und Voilá. Die Syntax der Würfelanweisungen sind in weiten Teilen mit denen der JavaScript Lösung identisch. In einem Punkt wurde eine sinnvolle Anpassung vorgenommen, ansonsten wurden noch diverse Funktionserweiterungen vorgenommen. Das ein oder andere muss/wird nun bei Gelegenheit im Online Würfel Tool nachgepflegt werden, so dass beide Tools gleich reagieren.

Zwei Möglichkeiten bestehen, um den RollButler mit einem Würfelauftrag zu betrauen: Eine Direktnachricht an @RollButler oder eine namentliche Erwähnung des RollButlers in einem Tweet mit dem Kommando “/roll”.

Der Tweet “@RollButler /roll 3w6” veranlasst RollButler drei sechsseitige Würfel zu werfen. Die Antwort darauf kommt dann in der Regel binnen 10 Sekunden mit der Angabe der Augensumme und den einzelnen Würfelergebnissen. Bei einer Direktnachricht an @RollButtler kommt die Antwort dann auch “promt” als Direktnachricht zurück.

Wer über keinen Twitter Account verfügt, kann den RollButler auch über eine [noch] rudimentäre Weboberfläche bedient werden, eine API Schnittstelle ist ebenfalls vorhanden..

Kurzreferenz zum @RollButler

Wie die Würfelinstruktionen im Einzelnen aufgebaut sind, kann im Wesentlichen der detaillierten Anleitung für den @RollButler entnommen werden. Hier folgt nun eine Kurzreferenz.

Das Würfelkommando besteht mindestens aus zwei Zeichen, dem Buchstaben “W” (für Würfel) oder alternativ “D” (für das englische Wort dice), gefolgt von der Anzahl der Seiten, die der Würfel haben soll. “W8” steht somit für einen achtseitigen Würfel.

Vor das Würfelkommando kann nun noch die Anzahl der zu werfenden Würfel angegeben werden. “2W6” fordert den RollButler damit auf zwei sechsseitige Würfel zu werfen.

Interessant wird das Würfelkommando durch zusätzliche Parameter, die aus einem Buchstaben und optional einer Zahl (oder Menge) bestehen. “E”, bzw. “S” steht für Erfolge, “F” für Fehlschläge und “T” für sogenannte Trigger. “2W10E8” wirft zwei zehnseitige Würfel, liefert die Augensumme und wertet jede geworfene Zahl größer oder gleich 8 als Erfolg. Trigger sind besondere Erfolge und funktionieren identisch wie Erfolge. Fehlschläge nutzen den angegebenen Zahlenwert mit einem kleiner oder gleich Vergleich. Wurde kein Zahlenwert mitgegeben, wird der für den Würfel jeweils maximale (bei Erfolgen und Triggern), bzw. kleinste Wert (für Fehlschläge) herangezogen.

Beispiel: “7W6FE5T” wirft sieben sechsseitige Würfel, wertet alle einsen (niedrigster Wert bei einem W6) als Fehlschlag, Werte ab fünf als Erfolg und alle sechsen (maximaler Wert eines W6) als Trigger. Dies ist ein klassischer Shadowrun Wurf.

Ein weiterer Parameter stellt das Ausrufezeichen “!” dar. Wird dies dem Würfelkommando mitgegeben, “explodieren” die Würfel mit dem angegebenen Wert (oder dem maximalen Wert, wenn kein Wert angegeben wurde). Explodierende Würfel führen zu einem Neuwurf der betroffenen Würfel, wobei das neue Ergebnis zur Augensumme addiert wird. Möchte man diese Explosion auch auf die neugeworfenen Würfel anwenden lassen, bis kein explosionsrelevanter Wert mehr auftritt, muss dies durch zwei Ausrufezeichen “!!” angegeben werden.

Beispiel: Wieder einmal Shadowrun, wobei nun Edge für explodierende Würfel ausgegeben wurde. Bei “7W6FE5T!!” wird ebenso geworfen und gewertet wie im vorangegangenen Beispiel, nur werden alle sechsen so lange erneut geworfen und gewertet, bis keine sechs mehr gewürfelt wird.

Gratiserfolge oder Strafen, etc. können durch “+E” angegeben werden. “+2E” rechnet auf die erwürfelten Erfolge 2 hinzu. Analog ist dies bei Fehlschlägen und Triggern möglich.

Um die Augensumme mehrerer Würfel zu addieren können die Würfelinstruktionen einfach mit einem Pluszeichen verbunden werden, z.B. W6+W4. Natürlich kann jeder Würfel dazu noch seine eigenen Parameter erhalten.

Einige mathematischen Funktionen sind ebenfalls enthalten. “max(3;W6)” liefert so den höchsten Wert aus der drei und dem Würfelergebnis eines sechsseitigen Würfels. Weitere Funktionen sind:

  • max(a; b;…) – Maximum der übergebenen Werte a, b…
  • min(a; b;…) – Minimum der übergebenen Werte a, b…
  • aufrunden(a) oder ceil(a) – rundet den übergebenen Wert a auf die nächste ganze Zahl auf
  • abrunden(a) oder floor(a) – rundet den übergebenen Wert a auf die nächste ganze Zahl ab
  • runden(a) oder round(a) – rundet den übergebenen Wert a kaufmännisch korrekt
  • abs(a) – liefert den Absolutbetrag des übergebenen Werts a [wer weiß, wozu das gut ist…]
  • rand(min; max) oder zufall(min; max) – liefert eine Zufallszahl, wenn min und max übergeben wurden, stellen diese die Grenzen des Intervalls dar

Natürlich können für den RollButler auch die regulären mathematischen Operatoren +, -, * und /, bzw. : verwendet werden. Die Funktionen und Operatoren beziehen sich alle auf die Augensumme der betroffenen Würfel – so es sich dabei um Zahlen handelt.

[Logische und Vergleichsoperatoren sind vorbereitet, aber aktuell noch nicht getestet nun auch implementiert.]

Mengen

Eine Besonderheit und Abweichung vom Online Würfel Tool ist die Handhabung von Mengen. Mengen kommen zum Einsatz, wenn irreguläre Würfel verwendet werden sollen. Möchte man also einen Würfel mit einer eins, zwei zweien und drei dreien werfen, so erfolgt dies mit dem Aufruf “D[1;2×2;3×3]”. In den Klammern werden die Seiten des Würfels bezeichnet. Gleichbeschriftete Seiten können vereinfacht durch deren Anzahl und ein “x” angegeben werden. Die eckigen Klammern stehen dabei für ein “Ziehen mit Zurücklegen” wie dies bei einem normalen Würfel der Fall ist. Um eine Lostrommel (Ziehen ohne Zurücklegen) zu simulieren, bei denen die gezogenen Elemente nicht zurückgelegt werden, verwendet man geschweifte Klammern “{“. “2D{Anton;Müller;Schulze}” wählt zwei Namen aus der Liste aus, ohne dass sich ein Name wiederholt.

Die Parameter zum Würfelwurf EFST und ! funktionieren auch hier. Als kleinstes Element gilt dann das erste Element der Liste des Würfels, als größtes das letzte Element. Bei nichtnummerischen Werten kann die Vergleichsliste mit runden Klammern hinter dem Parameter angegeben werden. Im Beispiel “2D[a;2xb;3xc]E(b;c)” werden zwei Werte aus den ungleich verteilten Werten a, b und c gewählt, ein Erfolg liegt dabei vor, wenn ein b oder ein c gezogen wurde.

Ergebnisausgabe

In der Ausgabe wird (sofern berechenbar) die Augensumme zurückgeliefert. Wenn Erfolge, Fehlschläge und Trigger definiert wurden, so auch diese sowie die Zahl der effektiven Erfolge (Erfolge – Fehlschläge). Die Einzelangabe der einzelnen Würfelergebnisse zeigt das Ergebnis jedes einzelnen Wurf an und markiert mögliche Ereignisse:

  • – = Fehlschlag
  • + = Erfolg
  • # = (Erfolg &) Trigger
  • ! = Explosion

Die Neuwürfe basierend auf Explosionen sind in Klammern eingefasst.

RollButler versucht die Sprache des Anwenders zu identifizieren und die Antwort passend zu liefern. Ein Erkennungsmerkmal ist dabei die Verwendung des Kürzels für den Würfel. Das “D” in “3D6” führt zu einer englischen Ausgaben (Standard), das “W” in “3W6” hingegen zu einer deutschsprachigen Ausgabe.

API Schnittstelle zu @RollButler

[Dieser Abschnitt ist im Zuge der Weiterentwicklung ggf. überholt und nicht mehr zutreffend.]

Der RollButler kann auch von Programmen direkt angesprochen werden. Hierzu wird der RollButler über

https://jaegers.net/apps/jn_rollbutler?format=json&roll=<WÜRFELVORSCHRIFT>

angesprochen. Dem Parameter roll ist dann die Würfelinstruktion zu übergeben. Die in der Würfelinstruktion enthaltenen Sonderzeichen müssen dabei korrekt codiert werden, Stichwort: “urlencode”.

Als Resultat wird das Resultat sehr detailliert im JSON-Format zurückgeliefert.

Beispiel:

Der folgende Aufruf veranlasst den RollButler die Würelinstruktion “3W6E5FT!!+B2T+5W6!!” auszuführen:

https://jaegers.net/apps/jn_rollbutler/index.php?format=json&roll=3W6E5FT!!%2B2T%2B5W6!!

Das Resultat im JSON Format kann dann (es wird ja jedes mal neu gewürfelt) wie folgt aussehen:
{
    "initial_instruction": "3W6E5FT!!+2T+5W6!!",
    "initial_comment": "",
    "comment": "",
    "instruction": "3W6E5FT!!+2T+5W6!!",
    "eval": {
        "roll": [
            {
                "resultstring": " 3 2 6#!",
                "roll": [
                    {
                        "value": 3,
                        "result": 3
                    },
                    {
                        "value": 2,
                        "result": 2
                    },
                    {
                        "value": 6,
                        "result": 6,
                        "success": true,
                        "trigger": true,
                        "explosion": true
                    }
                ],
                "reroll": [
                    {
                        "resultstring": " 6#!",
                        "roll": [
                            {
                                "value": 6,
                                "result": 6,
                                "success": true,
                                "trigger": true,
                                "explosion": true
                            }
                        ],
                        "reroll": [
                            {
                                "resultstring": " 2",
                                "roll": [
                                    {
                                        "value": 2,
                                        "result": 2
                                    }
                                ],
                                "total": 2
                            }
                        ],
                        "total": 8
                    }
                ],
                "total": 19,
                "instruction": "3D6E5FT!!"
            },
            {
                "resultstring": " 1 3 5 4 1",
                "roll": [
                    {
                        "value": 1,
                        "result": 1
                    },
                    {
                        "value": 3,
                        "result": 3
                    },
                    {
                        "value": 5,
                        "result": 5
                    },
                    {
                        "value": 4,
                        "result": 4
                    },
                    {
                        "value": 1,
                        "result": 1
                    }
                ],
                "total": 14,
                "instruction": "5D6!!"
            }
        ],
        "total": 33,
        "failsuccess": 2,
        "success": 2,
        "fails": 0,
        "triggers": 4
    },
    "fails": 0,
    "success": 2,
    "triggers": 4,
    "total": 33
}

Schreibe einen Kommentar

Nutze dieses Kommentarfeld um deine Meinung oder Ergänzung zu diesem Beitrag kundzutun. Verhalte dich bitte respektvoll und höflich! Kommentare werden vor der Veröffentlichung in der Regel moderiert und bei Verstößen gegen geltendes Recht, die guten Sitten, fehlendem Bezug oder missbräuchlicher Verwendung nicht freigegeben oder gelöscht.
Über die Angabe deines Namens, deiner E-Mail Adresse und deiner Webseite freuen wir uns, doch diese Felder sind optional. Deine E-Mail Adresse wird dabei zu keinem Zeitpunkt veröffentlicht.

Um mit dem Betreiber dieser Seite nicht-öffentlich in Kontakt zu treten, nutze die Möglichkeiten im Impressum.