Ein neues Maptool-Framework für DSA5

  • Es ist so lustig - Jahre geschieht nix, dann versuche ich stümperhaft an altem Code rumzupfriemeln und irgendwie geht links und rechts plötzlich die post ab und es gibt laufend neue features. DANKE! :)

  • Ich baue ja mehr so für Roll20 und habe meinen Ansatz eines Parser dort testweise eingebaut. Und ich muss sagen, es funktioniert für die Standardattribute schon ganz gut.

    Ich wollte mir die Roll20 API auch schon ansehen, hab aber bisher wenig Gutes gehört und den Eindruck, dass man mit Maptool doch sehr viel mehr erreichen kann.

  • Gut, die Frage hat sich mir nicht gestellt, ich habe erst mit Roll20 zwei Jahre gespielt, bevor ich vor lauter Frust einen eigenen Charakterbogen angefangen habe. Für mich funktioniert es ganz gut, auch wenn man bei bestimmten Sachen bei der Entwicklung sich die Finger bricht.

  • Das kann ich so bestätigen. R20 ist halt sehr verbreitet und das drumrum ist bequem (Kurz ein Bild reinziehen, Token auf die Map, los gehts).

    Für komplexe Systeme wie DSA mit der Würfelmechanik (1 Eigenschaft ist grad gebufft wegen Zauber, alle sind um 2 reduziert wegen Erschwernis, auf erste Fingerfertigkeit gibts noch eine Erleichterung von 1 wegen Nähzeug, +2 FP wegen Spezialisierung, wenns gelingt noch +1 QS wegen einer SF. Misslungen mit zwei Einsen drin ist dennoch bestanden, tadaaa) ist es ein Graus.

    Die (in meinen Augen) gröbsten Einschränkungen:

    - Keine Datenbankanbindung (! Ja, echt!). Daten werden im HTML abgelegt, weil...

    - Kein Kompendium für DSA vorhanden. Und selber kann man keines machen.

    - HTML und JavaScript haben keinen Zugriff auf das DOM. Ja, echt.

    - Würfelwerte können im Wurf nicht verarbeitet werden (zb. zähle, wie viele Einsen du hast, wenns 3 sind -> spiel lässige Musik).

    - Scripts können keinen Wurf auslösen, dafür muss der user klicken.

    Token und Statusmarker lassen sich auch nur beeinflussen, wenn du die API aktiv hast, und das braucht den 10Eur / Monat PRO Account.

    Für DnD, Pathfinder usw. sicher ganz toll, da ist alles dabei und echt gut umgesetzt. DSA gammelt da (wie auch auf Fantasy Grounds) unrühmlich vor sich hin. Ich liebe das Spielsystem und die Geschichte, und es geht mir echt auf den Sack wie nachlässig Ulisses mit der Marke umgeht. Tut echt weh.

    Wenn das Ding auf MapTools gut läuft, kann man gut und gerne behaupten, dass es das fortschrittlichste und kompletteste ist, was DSA weltweit im digitalbereich zu bieten hat, zumindest für Version 5. Ich hoffe, die kommen dann nicht um die Ecke und wollen das noch verbieten von wegen Urheberrecht und bäh!

  • Hallo Muwak. Ich könnte dir eventuell bei deinem Regex Problem behilflich sein, falls das noch aktuell ist. In meiner Abschlussarbeit hatte ich fast nur mit Regex zutun gehabt (Konvertierung von syntaktischen Ausdrücken zwischen Steuerungssystemen). Meine regulären Ausdrücke habe ich zwar immer mit C# geschrieben, das unterscheidet sich jedoch nur unwesentlich vom "Regex-Standard". Für VTT verwende ich persönlich roll20, sodass ich von der Maptools API gar keine Ahnung habe. Ich kann dir also nur mit dem Regex Problem selber helfen, aber weniger mit der Umsetzung in deinem Javascript.

    Mir fallen auf die schnelle mehrere Lösungsmöglichkeiten ein, von denen du einige schon selbst angesprochen hast:

    1.) Du könntest über zwei Lookarounds die Umgebung festlegen, in diesem Fall zum Beispiel "Größe" und Gewicht". Dabei solltest du aber die reinen Zahlen in eine Erfassungsgruppe schreiben, um die Zahlen später besser in deinem Code verarbeiten zu können

    2.) Falls bestimmte Wörter unveränderlich immer auftreten, beispielsweise das "bis" zwischen den Zahlen, kannst du auch alles als buchstäbliche Zeichen suchen lassen, dass sähe dann für dieses Beispiel ungefähr so aus: (?<=Größe:)\s+(?<Min>\d+,\d+)\n\s*?bis\s+(?<Max>\d+)m

    3.) Du kannst mithilfe von Alternierungskonstrukten die möglichen Fälle einschränken, zum Beispiel für die Fälle "1,68 bis 2m" und "1,68 - 2m. Das wäre aber eine ganz schöne Fleißarbeit. Stattdessen sollte die Eingabe des Benutzers so eingeschränkt sein, dass das Ergebnis später eindeutig ist.

  • Es ist so lustig - Jahre geschieht nix, dann versuche ich stümperhaft an altem Code rumzupfriemeln und irgendwie geht links und rechts plötzlich die post ab und es gibt laufend neue features. DANKE! :)

    Gern geschehen, mManchmal braucht es einfach einen Auslöser und als ich die Wahl hatte für Roll20 nen 10er im Monat abzudrücken (Mach gerade ne zweite Ausbildung und bin notorisch klamm) oder selbst was zu bauen, war der Fall für mich klar.

    Dass MT selbst so abgeht (die haben schon den nächsten Release in der Pipe und der wird mega!) macht es natürlich noch besser :).

    Gut, die Frage hat sich mir nicht gestellt, ich habe erst mit Roll20 zwei Jahre gespielt, bevor ich vor lauter Frust einen eigenen Charakterbogen angefangen habe. Für mich funktioniert es ganz gut, auch wenn man bei bestimmten Sachen bei der Entwicklung sich die Finger bricht.

    Maptool-Entwickliung ist auch alles andere als Schmerzfrei, aber man halt die volle Kontrolle, es kostet und man kann entscheiden mit welcher Version man spielt. Wobei natürlich bei Roll20 der Zugang Spieler einfacher ist weil die nichts installieren müssen.

    So was in der Art habe ich angenommen. Eine gescheite API zu entwickeln die sicher und flexibel ist, dürfte für nen relativ kleinen Verein auch eine Herausforderung sein. Wenn dann 90% der User nur mit dem Standard arbeiten, lohnt sich das auch nicht.

    Maptool hat halt keinen Finanzudruck, die arbeiten die Entwickler für Spaß und Reputation. Und weil Maptool auf dem Rechner der User und nicht auf einem Firmenserver läuft, kannst Du dem Spielleiter/Modder auch viel mehr (=Alle) Freiheiten lassen.

    Maptool war Fantasygrounds zu beginn hoffnungslos unterlegen, obwohl beide zeitlich ähnlich gestartet sind, aber mittlerweile müsste man nur das UI noch etwas aufhübschen (daran arbeiten sie), während Smiteworks, der Entwickler von FG, erstmal sein ganzes Tool in Unity neu unsetzt, weil es nicht mehr Zeitgemäß ist.

    Die API ist aber ähnlich gammlig wie zuvor.

    Hallo Muwak. Ich könnte dir eventuell bei deinem Regex Problem behilflich sein, falls das noch aktuell ist. In meiner Abschlussarbeit hatte ich fast nur mit Regex zutun gehabt (Konvertierung von syntaktischen Ausdrücken zwischen Steuerungssystemen). Meine regulären Ausdrücke habe ich zwar immer mit C# geschrieben, das unterscheidet sich jedoch nur unwesentlich vom "Regex-Standard". Für VTT verwende ich persönlich roll20, sodass ich von der Maptools API gar keine Ahnung habe. Ich kann dir also nur mit dem Regex Problem selber helfen, aber weniger mit der Umsetzung in deinem Javascript.

    Mir fallen auf die schnelle mehrere Lösungsmöglichkeiten ein, von denen du einige schon selbst angesprochen hast:

    1.) Du könntest über zwei Lookarounds die Umgebung festlegen, in diesem Fall zum Beispiel "Größe" und Gewicht". Dabei solltest du aber die reinen Zahlen in eine Erfassungsgruppe schreiben, um die Zahlen später besser in deinem Code verarbeiten zu können

    2.) Falls bestimmte Wörter unveränderlich immer auftreten, beispielsweise das "bis" zwischen den Zahlen, kannst du auch alles als buchstäbliche Zeichen suchen lassen, dass sähe dann für dieses Beispiel ungefähr so aus: (?<=Größe:)\s+(?<Min>\d+,\d+)\n\s*?bis\s+(?<Max>\d+)m

    3.) Du kannst mithilfe von Alternierungskonstrukten die möglichen Fälle einschränken, zum Beispiel für die Fälle "1,68 bis 2m" und "1,68 - 2m. Das wäre aber eine ganz schöne Fleißarbeit. Stattdessen sollte die Eingabe des Benutzers so eingeschränkt sein, dass das Ergebnis später eindeutig ist.

    Fein, dass man hier für alles die richtigen Spezialisten hat. Vielen lieben Dank, dass Du Dich anbietest.

    Ich bin bei Regex eine totale Null, (Was für nen FIA im 2. Ausbildungsjahr hoffentlich nicht zu verwerflich ist :) ). Die Ausdrücke im Maptool basieren wohl auf Java und die Syntax ist wieder ein bisschen anders als in JS, was für einen Kenner sicher kein Thema ist, als Halblaie tut man sich schwer

    Deine Version 1 versuche ich die ganze Zeit umzusetzen. Also einen Text á la

    Code
    Größe: 1,20
    
    bis 2 m
    Gewicht: 1-2 Tonnen

    Sauber zu zerlegen. Was ich brauche ist ein Ausdruck wie Dieser hier, nur in richtig:

    Code
    (Größe:)([alle, also wirklich alle zeichen incl umbrüche])(Gewicht:) 

    Ist es überhaupt möglich Einen belieben Begriff als "Trenner" zu nehmen? Andere Dinge (z.B. eine Waffenzeile) kriege ich ziemlich sauber hin. Hab auch nicht die Ambition einen Regex für alles zu verwenden, sondern bin durchaus zu "Fleißarbeit bereit". Ziel ist es für mich eine besitmmte Gruppe Begriffe zu haben und dann gezielt in der Usereingabe danach zu suchen. Bei Numerischen Werten easy, bei Sonderfertigkeiten mit Anmerkungen evtl fleißarbeit. Bei Freitexten sicher schwierig, aber wenn ich die nicht hinkriege ists auch kein Drama. Reicht ja, wenn sie als "Freitext" übernommen werden.

    Die Unsereingabe einschränken ist schwierig. Die Idee ist ja, dass der User einfach nen Text aus einem Abenteuer reinkopiert und das Tool macht den Rest.

    In jedem Fall werde ich etwas Theorie pauken müssen, viele Begriffe die Du verwendet hast sind zwar einleuchtend, aber ich habe sie zum ersten Mal gehört :)

    Eine Frage hab ich aber gleich: Was genau bewrkt das "?<="?

    Vielen Dank nochmal Euch allen für das Feedback und die Unterstützung, macht richtig Freude das Projekt voranzutreiben :)

  • Zu der RegEx-Geschichte: Könnte folgende Seite zum Testen hilfreich sein? https://regexr.com/

    Nachfolgend noch 2 Themen im MapTool-Forum, die sich mit RegEx beschäftigen:

    https://forums.rptools.net/viewtopic.php?f=3&t=28608

    https://forums.rptools.net/viewtopic.php?t=26569

  • Schau dir mal die Seite an, die hilft enorm wenn Du mit RegExp arbeitest: https://regex101.com

    Sein Ausdruck ist ein "positive Look-Behind". Sieht für mich so aus, dass du nicht den Inhalt einer Catchgroup zurückbekommst, sondern den Positions-Wert direkt nach dem Catch. Ist natürlich praktisch, weil Du dann im Code direkt diesen wert für String-Operationen verwenden kannst, ohne die Catchgroup selber noch aus dem String herauszulösen. Du brauchst auch keine Catchgroup für den Inhalt, nur die 2 Treffer über Look-Behind und Look-Ahead. Der String zwischen den zwei positionen kann dann direkt weiter verarbeitet und/oder in das array gepackt werden.

  • Hallo nochmal Muwak,

    Meine Vorredner haben das eigentlich schon perfekt ausgedrückt. Das ?<= ist einer von vier Lookarounds, mit denen du die Umgebung deines Matches untersuchen lassen kannst. Theoretisch könnte man diesen in dem Beispiel auch weglassen, die Lockarounds machen das ganze aber weniger Fehleranfällig.

    Zu deinem konkreten Problem:

    Code
    (Größe:)([alle, also wirklich alle zeichen incl umbrüche])(Gewicht:) 

    Regex: (?<=Größe:).*?(?=Gewicht:)

    Das würde ALLE Zeichen zwischen Gewicht und Größe finden. Du musst aber dann die Option Singleline aktivieren. In C# macht man das über die Variable regexOptions = Singleline. Zur Verwendung von Regex Optionen (manchmal auch "flags" genannt) in Java habe ich folgendes gefunden: https://www.logicbig.com/tutorials/core…dded-flags.html

    Mit dieser Option wird alles als einziger String behandelt, das heißt der Punkt matched wirklich alles, auch den Zeilenumbruch.

    Am Ende solltest du dann folgenden Ausdruck erhalten:

    1,20

    bis 2m

    Falls du aus diesem Ausdruck noch die beiden Zahlen herausholen möchtest, kannst du eine weitere RegEx-Operation ausführen. Als Grundlage nimmst du dann die Variable, in die du das Ergebnis deiner ersten Regex-Operation eingelesen hast. Diese könntest du dann beispielweise mit folgendem Ausdruck untersuchen:

    \d+((\.|,)\d*)?

    Dabei sollte dann nur noch "1,20" und "2" angezeigt werden. So kannst du sowohl Zahlen, die durch Komma oder Punkt getrennt sind einbeziehen (\.|,), als auch Ganzzahlen (dafür das Fragezeichen am Ende).

    Ich hoffe ich konnte weiter helfen. Möge Hesinde dich mit Weisheit segnen!

    Noch eine Frage aus reiner Neugier: Was ist ein FIA?:D

  • Es gibt ein neues Update für das DSA5-Maptool-Framework. Es ist nach wie vor eine frühe Version, aber wie spielen seit Wochen damit. Fehler werden regelmäßig korrigiert und neue Features kommen auch regelmäßig dazu.

    Hier ein paar Highlights der neuen Version:

    • Schicksalspunkte werden auf dem Charakterbogen angezeigt und können ausgegeben werden.
    • Der Einsatz von Schicksalspunkten für das Neu Würfeln von Talentproben füht automatisch einen neuen Wurf aus bei dem der Spieler bestimmen kann, welche Würfel er behalten will.
    • Die Schicksalspunktaktion Verteidigung erhöht den Paradewert automatisch um w bis zum Ende der Kampfrunde.
    • Schicksalspunkte können zum neu würfeln eines Schadenswurfes oder zum Wiederholen einer Attacke verwendet werden.
    • Es gibt jetzt ein Inventar in dem die Spieler ihre Ausrüstung eintragen können
    • Im Minisheet stehen jetzt die üblichen DSA-Würfel zur Verfügung, außerdem können von hier aus jetzt alle anderen Funktionen wie Karten, Handouts etc. aufgerufen werden.
    • Ihr könnt jetzt bei einer erweiterten Talentprobe das Anwendungsgebiet auswählen. Besitzt Ihr die passende Spezialisierung, so wird diese automatisch einberechnet.
    • Anwendungsgebiete, die erst durch eine bestimmte Sonderfertigkeit aktiviert werden, sind nur sichtbar, wenn der Charakter die passende SF besitzt
    • Es gibt einen Editor für Anwendungsgebiete (erreichbar den Einstellungsbutton im Minibogen), hier könnt Ihr weitere Anwendungsgebiete definieren.
    • Die Basismanöver im Kampf sind jetzt automatisiert, es wird geprüft, ob der Charakter sie anwenden kann, also die richte Kampftechnik benutzt und die passende Sonderfertigkeit beherrscht. Wenn ihr sie beim Angriff auswählt werden die Effekte vom Framework direkt berechnet.
    • Freie Aktionen werden jetzt angezeigt, Spieler können (und müssen) nun Ihre Aktion oder freie Aktion verwenden um sich zu bewegen.
    • Der Minibogen hat eine Kopfzeile bekommen, in der Ingame-Datum, Uhrzeit, Mondphase und Wetter angezeigt werden Der Spielleiter kann diese Werte natürlich einstellen bzw. das Wetter aiswürfeln. Ein passender Wettergenerator ist auch integriert, der unter anderem auf die Klimazone und die Jahreszeit Rücksicht nimmt.
    • Es gibt ein Tagebuch in dem Spieler und Spielleiter sich Notizen zum Abenteuer machen können. Im Tagebuch wird dabei automatisch die aktuelle Ingamezeit voreingestellt, lässt sich aber verändern um Nachträge zu machen.
    • (Experimentell:) Spielwerte können nicht mehr direkt im Maptool-Token-Dialog, sondern nur noch über den Charakterbogen bzw. die dafür vorgesehenen Funktionen des Frameworks verändert werden. Das Soll die Spieler daran hinder etwas kaputt zu machen :)
    • Das Infofenster das die Ergebnisse von Proben etc. im Chat ausgibt passt seine Größe jetzt der Ausgabe an.
  • Wow, hört sich super an! Ich muss bei dir mal einen kurs in MapTool buchen, dann steigen wir mit unserer Gruppe auch um :)

    https://www.youtube.com/channel/UCp4_y00XmYU9HTZDeUOl3SA

    genügt das für den Anfang?


    Wenn es weiterhilft freu mich auch über ein Abo/ Daumen hoch.

  • So, Zeit für ein Feedback eines absoluten Noobs :)

    1. In die Anleitung sollte mit rein, dass man nach dem auswürfeln der INI zuerst einmal via MapTools INI Fenster das ganze anstossen muss, danach geht das weiterschalten der INI via Framework wunderbar.
      Tut man das nicht, wirft es einen Error (Kampagne laden, Token wählen, INI würfeln, direkt auf "Nächster Kämpfer" drücken - Error
    2. Mir würde es sehr helfen, ein bisschen detaillierter gezeigt zu bekommen, wie die Aktionen, freien Aktionen, Bewegungspunkte usw. zusammenhängen. Ich denke, das gibt sich dann mit dem Update des Handbuchs in Zukunft von selbst.
    3. Stati / Bewegungspunkte
      1. Mehrere Stufen
        Bei mehreren Stufen eines Status wird das gleiche Symbol mehrfach angezeigt. Ich fände es wesentlich übersichtlicher, wenn das gleiche Symbol mit einer Nummer dazu angezeigt wird. Also quasi nur eine Grafik laden, die hat aber einen numerischen Wert sichtbar. (Wenn es hilft, kann ich das gerne für Dich zusammenbasteln, ist ja eigentlich nur Fleissarbeit)
      2. Verdeckung
        Die Zustände verdecken die anderen Grafiken wie die Aktionen, Bewegungspunkte. Sieht dann sehr verwirrend aus. Kenne da die Möglichkeiten von MapTools aber nicht, ob das überhaupt anders geht
      3. Bewegungspunkte
        [EDIT: Es hat einen Status für mehr GS, wird wohl auch mit hohen GS 9+ funktionieren. Alter Text der Vollständigkeit halber noch stehen gelassen.]
        Diese sind aktuell, so wie ich das verstehe, als Status drin - also bei 9 Punkten bekommt man den Status 9 Punkte und es wird entsprechend der Statusmarker gesetzt. Da ich aktuell einen Ritter spiele, ist mir sofort eingefallen, dass bei hohen GS hier ende Gelände ist... Wie geht man mit einem Pferd um, auf dem ich GS18 habe? Oder ein Axxeleratus-Heini mit GS 80 oder was die so für komische Sachen machen?
        Oder hast du die GS als reinen Zahlenwert, und mappst dann einfach den Status je nach Wert?
      4. Nachtrag - Tavernentool / Namensgenerator
        Wenn Du diese Funktionen, die Du als eigenständigen Download im Scriptorium hast, in dieses Framework integrieren könntest, wäre das super! Als SL Preise und NSC Namen zur Hand zu haben ist unbezahlbar.

    So, ich muss weiter herumprobieren :)

    2 Mal editiert, zuletzt von mckee14 (10. Mai 2020 um 23:29)

  • Vielen Dank für das Feedback, Ihr macht mir das Leben so viel leichter, wenn Ihr Eure Erfahrungen hier teilt und ich hoffe das macht Schule :)


    1. Ich denke eher, ich sollte den Bug fixen, dann kann ich mir das Update der Anleitung sparen. Ich sehe mir das sofort an :)
    2. Ich mache da das nächste Youtube-Video drüber und sehe auch zu, dass ich einen Abschnitt im Handbuch einbaue.
    3. Der einzige Weg in Maptool etwas auf einem Token anzuzeigen (abgesehen von Lebensbalken) sind Stati. Ich hab die daher für alles verwendet und das Statussystem von Maptool einfach ignoriert und stattdessen ein eigenes System gebaut, das es nur als Anzeigemodul nutzt.
      1. Sehr guter Input, wird sicher nicht sofort kommen, aber steht definitiv ab heute auf meinem Deckel und trägt zur Übersichtlichkeit bei
      2. Jain, das ist noch keine Ideallösung. Kurz gesagt, MT erlaubt es Stati in verschiedenen Rastern auf ein Token zu legen, vorstellen könnte ich mir, dass Die Stati über den Aktionsmarkern angezeigt werden, das war mit meiner Lösung nicht sinnvoll, aber mit Deinem Vorschlag aus 1 sollte es gehen.
      3. Die Bewegungspunkte habe ich noch aus meinem ersten Versuch übernommen,
        das nur für meine einenen Zwecke gedacht war. Da war ich schlicht und einfach zu Faul mehr als 9 Symbole zu bauen (es braucht halt eins für jeden Wert, denn Du hast schon richtig erkannt, dass der MT-Status auch hier herhalten muss). Aber das wird natürlich nachgerüstet. Wenn Du Lust hast, schicke ich Dir die Vorlagen gerne, wobei es wahrscheinlich schneller ist, wenn ich meinen Hintern hochkriege und eben weitere 10 Symbole mache als wenn ich das ganze Versandfertig mach :) .
    4. In der neuen Version ist der Namensgenerator bereits implementiert (gerade noch etwas rudimentär, aber ich mache den auch noch in schön. Der Zeitmesser ist auch schon drin (Also die Teile, die sich für uns bewährt haben) und auch das Tavernentool wird zu 100% im Framework landen :)

    Mach ja weiter mit dem Rumprobieren, Du hast meine erste Frage des Tages ("Was basteln wir denn heute in Maptool") sehr schön beantwortet.

  • Ich schlussfolgere (hoffentlich korrekt), dass Stati in verschiedenen Rastern angezeigt werden können, pro Raster jedoch automatisch einfach "aufgefüllt" wird, Du also nicht bestimmst, wo genau welcher Status liegt

    Wenn das stimmt, wäre eine mögliche Lösung (wobei man mit den grössen der Grafiken experimentieren müsste):
    Bewegung etc liegen auf dem grossen Raster (3x3?)

    Schmerz usw. liegen auf dem kleinen Raster (5x5, 6x6?) - Aber dieses Raster füllst Du pauschal erst einmal mit 5/6/x Zuständen, die als Grafik nur ein transparentes PNG haben. Dann liegen die sichbaren Stati automatisch höher auf dem Token.

    Funktioniert natürlich nur, wenn das Raster mit der Grösse skaliert. Falls die Grösse auslesbar ist, könnte man das ev. abfangen und die Anzahl transparenter Stati entsprechend dynamisch setzen.

    War nur eine Idee, vieleicht hilfts ja :)

  • Zu aller erst super Arbeit wir nutzen das Framework seit einigen Spielabenden. Bitte weiter dran bleiben es erleichtert das Spielen in der aktuellen Zeit ungemein.

    Achja wir vewenden Version 0.7.

    Zwei Punkte sind mir allerdings aufgefallen:

    1. Lässt sich das Charakterdokumentenfernster etwas größer in der Höhe einstellen, so das bei den Talenten kein Scrollbalcken erscheint (siehe Bild).
    Anmerkung 2020-07-10 204843.jpg

    2. Lässt sich hinter die Icon ein Alternativtext legen, so dass man weiß um was es sich handelt wenn man mit der Maus darüber fährt.

    Anmerkung 2020-07-10 204844.jpg