+1 Person bei gezielten Sprüchen sind Mehrfachangriffe #4

Open
opened 3 months ago by lortas · 35 comments

Aborea-Spielerheft, Kapitel "Magie", Abschnitt "Gezielte Sprüche":

Die Regeln für Überraschung im Kampf usw. gelten entsprechend – auch die für den Mehrfachangriff und die Beidhändigkeit (Kampf mit zwei Waffen: Spielleiterheft, Seite 16).

D.h. mMn, alle gezielten Zauber mit der Erweiterungsmöglichkeit "+1 Person" werden zu Mehrfachangriffen und jeder Angriff muss dann separat gewürfelt werden. Mit der Folge, dass man seinen OB (Wert in "Gezielte Sprüche" + Attribut-Bonus) auf die Angriffs-Würfe verteilen muss.

Es wäre daher super, wenn man das mit dem Charakterbogen direkt machen könnte.

Aborea-Spielerheft, Kapitel "Magie", Abschnitt "Gezielte Sprüche": > Die Regeln für Überraschung im Kampf usw. gelten entsprechend – auch die für den Mehrfachangriff und die Beidhändigkeit (Kampf mit zwei Waffen: Spielleiterheft, Seite 16). D.h. mMn, alle gezielten Zauber mit der Erweiterungsmöglichkeit "+1 Person" werden zu Mehrfachangriffen und jeder Angriff muss dann separat gewürfelt werden. Mit der Folge, dass man seinen OB (Wert in "Gezielte Sprüche" + Attribut-Bonus) auf die Angriffs-Würfe verteilen muss. Es wäre daher super, wenn man das mit dem Charakterbogen direkt machen könnte.
Tealk added the
Kind: Enhancement
label 3 months ago
Owner

Da wäre mir aktuell keine Möglichkeit bekannt, wie das in einem Makro umgesetzt werden könnte.

Abgesehen davon denke ich nicht, dass das so ist. Warum sollte ich mehr Mana ausgeben, um dann noch einen Malus auf den Wurf zu bekommen?

Bestes beispiel ist der Feuerball:

+3 MP: + 1 Geschoss/Lanze (maximal 5),Regel Mehrfachschuss anwenden

Da wäre mir aktuell keine Möglichkeit bekannt, wie das in einem Makro umgesetzt werden könnte. Abgesehen davon denke ich nicht, dass das so ist. Warum sollte ich mehr Mana ausgeben, um dann noch einen Malus auf den Wurf zu bekommen? Bestes beispiel ist der Feuerball: > +3 MP: + 1 Geschoss/Lanze (maximal 5),Regel Mehrfachschuss anwenden
Poster

Der Feuerball ist kein „Gezielter Spruch“ mit der Option „+1 Person“, das sind nur die folgenden Zauber:

  • Weiße Magie 1 Schutz
  • Schwarze Magie 2 Trübung
  • (Schwarze Magie 10 Dauerhafte Belebung)
  • Elementare Magie 1 Wasserfreund
  • Elementare Magie 4 Blitz
  • Freie Magie 6 Schlaf
  • Bardenmagie 5 Laut des Vergessens

Beim Feuerball erhält man die Option auf mehrere Geschosse und muss dann die Regel vom Schießen von mehreren Pfeilen anwenden. Da muss man nicht seinen OB aufteilen, sondern erhält einen Malus abhängig von den Anzahl der „Pfeile“.

„Dauerhafte Belebung“ würde ich eine Sonderrolle zukommen lassen, da die Zauberbeschreibung hier eine andere Auslegung suggeriert.

Der Feuerball ist kein „Gezielter Spruch“ mit der Option „+1 Person“, das sind nur die folgenden Zauber: * Weiße Magie 1 *Schutz* * Schwarze Magie 2 *Trübung* * (Schwarze Magie 10 *Dauerhafte Belebung*) * Elementare Magie 1 *Wasserfreund* * Elementare Magie 4 *Blitz* * Freie Magie 6 *Schlaf* * Bardenmagie 5 *Laut des Vergessens* Beim Feuerball erhält man die Option auf mehrere Geschosse und muss dann die Regel vom Schießen von mehreren Pfeilen anwenden. Da muss man nicht seinen OB aufteilen, sondern erhält einen Malus abhängig von den Anzahl der „Pfeile“. „Dauerhafte Belebung“ würde ich eine Sonderrolle zukommen lassen, da die Zauberbeschreibung hier eine andere Auslegung suggeriert.
Owner

Wie bereits erwähnt:

Abgesehen davon denke ich nicht, dass das so ist. Warum sollte ich mehr Mana ausgeben, um dann noch einen Malus auf den Wurf zu bekommen?

Du zahlst dafür, dass du mehrere Personen einschließt ja schon mit Mana, warum sollte man dann auch noch einen Nachteil auf den Wurf bekommen? Das macht den Magier fast useless.

Ich glaube der Passus den du meinst, bezieht sich auf Zauber, die keine mehreren Personen vorsehen.

Wie bereits erwähnt: > Abgesehen davon denke ich nicht, dass das so ist. Warum sollte ich mehr Mana ausgeben, um dann noch einen Malus auf den Wurf zu bekommen? Du zahlst dafür, dass du mehrere Personen einschließt ja schon mit Mana, warum sollte man dann auch noch einen Nachteil auf den Wurf bekommen? Das macht den Magier fast useless. Ich glaube der Passus den du meinst, bezieht sich auf Zauber, die keine mehreren Personen vorsehen.
Tealk added the
Kind: Question
label 3 months ago
Poster

Ich gebe zu, ohne Sebastians Erläuterungen hätte ich es so auch nicht herausgelesen.

Ich gebe zu, ohne Sebastians Erläuterungen hätte ich es so auch nicht herausgelesen.
Owner

Wo stehen die?

Dennoch werde ich das nicht automatisieren können, da wird man dann einfach mit mehrmals mit aktivierten Modifier Würfeln arbeiten müssen.

Wo stehen die? Dennoch werde ich das nicht automatisieren können, da wird man dann einfach mit mehrmals mit aktivierten Modifier Würfeln arbeiten müssen.
Poster

In den E-Mails, die wir ausgetauscht haben. Ich hab im Forum mal ein Thema auf gemacht, damit Du was hast worauf Du referenzieren kannst. Oder ich dort widerlegt werde. :-)

Das das eventuell mit der Roll20-API nicht geht, habe ich fast befürchtet. Ich hoffte aber schon.

In den E-Mails, die wir ausgetauscht haben. Ich hab im [Forum mal ein Thema](https://forum.aborea.de/forum/index.php?thread/4178-gezielte-spr%C3%BCche-und-mehrfachangriffe/) auf gemacht, damit Du was hast worauf Du referenzieren kannst. Oder ich dort widerlegt werde. :-) Das das eventuell mit der Roll20-API nicht geht, habe ich fast befürchtet. Ich hoffte aber schon.
Owner

Mit den Worker Scripts könne das möglich sein, aber dafür habe ich zu wenig Erfahrung in JS

Mit den Worker Scripts könne das möglich sein, aber dafür habe ich zu wenig Erfahrung in JS
Poster

Könnte nicht sowas funktionieren:

{{rolling="1. Angriff [[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + @{mehrfachangriff_modifier} + ?{Modifier?|0}]], 2. Angriff [[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + @{mehrfachangriff_modifier} + ?{Modifier?|0}]]"}}

Wobei dann über Javascript-String-Concatenation die Anzahl der Angriffe aus der gewählten "+1"-Optionen erstellt werden. Nur so eine Idee.

Könnte nicht sowas funktionieren: ``` {{rolling="1. Angriff [[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + @{mehrfachangriff_modifier} + ?{Modifier?|0}]], 2. Angriff [[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + @{mehrfachangriff_modifier} + ?{Modifier?|0}]]"}} ``` Wobei dann über Javascript-String-Concatenation die Anzahl der Angriffe aus der gewählten "+1"-Optionen erstellt werden. Nur so eine Idee.
Owner

rolling= ist eine Variable, die darf auch dann nur einen Wert zurückgeben.

`rolling=` ist eine Variable, die darf auch dann nur einen Wert zurückgeben.
Poster

Ich dachte rolling ist ein String, der in den Chat geschrieben wird. Der Chat erkennt dann die [[...]] Kommandos, führt diese aus und ersetzt sie im String bevor er ausgegeben wird.

Deswegen die Anführungszeichen bzw. der Vorschlag mehrere Strings passend zusammen zufügen, damit ein String (eine "Wert") zurückgegeben wird.

Ich dachte `rolling` ist ein String, der in den Chat geschrieben wird. Der Chat erkennt dann die `[[...]]` Kommandos, führt diese aus und ersetzt sie im String bevor er ausgegeben wird. Deswegen die Anführungszeichen bzw. der Vorschlag mehrere Strings passend zusammen zufügen, damit ein String (eine "Wert") zurückgegeben wird.
Owner

Alles was in eckingen Klammern steht ist ein Würfelmakro: https://wiki.roll20.net/Macros

Alles was in eckingen Klammern steht ist ein Würfelmakro: https://wiki.roll20.net/Macros
Poster

Würfelmakro sind doch Strings und man kann in einem String mehrerer Würfelmakros haben. Das wäre damit noch kein Widerspruch zu meinem Vorschlag. Oder?

Siehe z.B. hier: https://codeberg.org/tealk-roll20-character-sheets/Aborea/src/branch/master/aborea.html#L432

Würfelmakro sind doch Strings und man kann in einem String mehrerer Würfelmakros haben. Das wäre damit noch kein Widerspruch zu meinem Vorschlag. Oder? Siehe z.B. hier: https://codeberg.org/tealk-roll20-character-sheets/Aborea/src/branch/master/aborea.html#L432
Owner

Was du markiert hast ist ein Button, der verhält sich ganz anders als ein würfeltemplate. Außerdem wird die gesamte ausgabe in einer Zeile ausgegeben, ich kann sie nicht weiter manipulieren.

Was du markiert hast ist ein Button, der verhält sich ganz anders als ein würfeltemplate. Außerdem wird die gesamte ausgabe in einer Zeile ausgegeben, ich kann sie nicht weiter manipulieren.
Owner

@lortas kannst das gern ja mal selbst in Roll20 ausprobieren, nimm einfach folgendes Template und setz die Werte so ein wie du dir das vorstellst:

&{template:default} {{name=Mage Bolt}} {{attack=[[1d20+3[int]+2[proficiency] ]]}} {{Damage= [[3d6[base dmg]+3[int mod]+1d8[Elder Wand bonus] force dmg]]}} {{DC [[14]] Will Save= The enemy must make the save, or take an extra [[1d8]] fire dmg. }}

https://wiki.roll20.net/Roll_Templates#Using_Roll_Templates

@lortas kannst das gern ja mal selbst in Roll20 ausprobieren, nimm einfach folgendes Template und setz die Werte so ein wie du dir das vorstellst: ``` &{template:default} {{name=Mage Bolt}} {{attack=[[1d20+3[int]+2[proficiency] ]]}} {{Damage= [[3d6[base dmg]+3[int mod]+1d8[Elder Wand bonus] force dmg]]}} {{DC [[14]] Will Save= The enemy must make the save, or take an extra [[1d8]] fire dmg. }} ``` https://wiki.roll20.net/Roll_Templates#Using_Roll_Templates
Poster

Folgenes Chat-Kommando

&{template:default} {{name=Mage Bolt}} {{attack=[[1d20+3[int]+2[proficiency] ]] and [[1d20+3[int]+2[proficiency] ]]}} {{Damage= [[3d6[base dmg]+3[int mod]+1d8[Elder Wand bonus] force dmg]] and [[3d6[base dmg]+3[int mod]+1d8[Elder Wand bonus] force dmg]]}} {{DC [[14]] Will Save= The enemy must make the save, or take an extra [[1d8]] fire dmg. }}

führte zum gewünschten Ergebniss. Siehe Anhang.

Folgenes Chat-Kommando ``` &{template:default} {{name=Mage Bolt}} {{attack=[[1d20+3[int]+2[proficiency] ]] and [[1d20+3[int]+2[proficiency] ]]}} {{Damage= [[3d6[base dmg]+3[int mod]+1d8[Elder Wand bonus] force dmg]] and [[3d6[base dmg]+3[int mod]+1d8[Elder Wand bonus] force dmg]]}} {{DC [[14]] Will Save= The enemy must make the save, or take an extra [[1d8]] fire dmg. }} ``` führte zum gewünschten Ergebniss. Siehe Anhang.
Poster

Bis hier hin bin ich schon mal gekommen.

&{template:default} {{name=Blitz}} {{anwendung=Sichtweite, (Gezielter Spruch)}} {{Grundkosten=[[4]] MP}} {{Ziele=[[?{Anzahl Ziele?|1}]] (+[[?{Anzahl Ziele?} - 1]] MP)}} {{Schaden=?{Schaden|entspricht dem Angriff|+1 (+1 MP)|+2 (+2 MP)|+3 (+3 MP)|+4 (+4 MP)|+5 (+5 MP)|+6 (+6 MP)|+7 (+7 MP)|+8 (+8 MP)}}} {{Schockeffekt=?{Schockeffekt|kein|nächstes Manöver des Opfers ist um 2 erschwert (+3 MP) }}} {{Gleißend=?{Gleißend|nein|alle die den Blitz sehen sind nächste Runde blind [-8 auf entsprechende Manöver] (+10 MP)}}} {{Angriff=[[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + ?{Modifier?|0} - (?{Anzahl Ziele?} - 1)*2]] [[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + ?{Modifier?|0} - (?{Anzahl Ziele?} - 1)*2]] [[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + ?{Modifier?|0} - (?{Anzahl Ziele?} - 1)*2]]}}

Und das Ergbniss sieht gar nicht mal so schlecht aus. Siehe Anhang.

Wobei ich einräumen muss, dass die Anzahl der Würfe noch statisch ist.

Soweit ich herausfinden konnte, kann man in den Roll20-Makros nicht "loopen". Somit wird man die Anzahl der Ziele per Javascript abfragen müssen und dann den String nach Angriff= mit Javascript entsprechend anpassen.

Bis hier hin bin ich schon mal gekommen. ``` &{template:default} {{name=Blitz}} {{anwendung=Sichtweite, (Gezielter Spruch)}} {{Grundkosten=[[4]] MP}} {{Ziele=[[?{Anzahl Ziele?|1}]] (+[[?{Anzahl Ziele?} - 1]] MP)}} {{Schaden=?{Schaden|entspricht dem Angriff|+1 (+1 MP)|+2 (+2 MP)|+3 (+3 MP)|+4 (+4 MP)|+5 (+5 MP)|+6 (+6 MP)|+7 (+7 MP)|+8 (+8 MP)}}} {{Schockeffekt=?{Schockeffekt|kein|nächstes Manöver des Opfers ist um 2 erschwert (+3 MP) }}} {{Gleißend=?{Gleißend|nein|alle die den Blitz sehen sind nächste Runde blind [-8 auf entsprechende Manöver] (+10 MP)}}} {{Angriff=[[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + ?{Modifier?|0} - (?{Anzahl Ziele?} - 1)*2]] [[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + ?{Modifier?|0} - (?{Anzahl Ziele?} - 1)*2]] [[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + ?{Modifier?|0} - (?{Anzahl Ziele?} - 1)*2]]}} ``` Und das Ergbniss sieht gar nicht mal so schlecht aus. Siehe Anhang. Wobei ich einräumen muss, dass die Anzahl der Würfe noch statisch ist. Soweit ich herausfinden konnte, kann man in den Roll20-Makros nicht "loopen". Somit wird man die Anzahl der Ziele per Javascript abfragen müssen und dann den String nach `Angriff=` mit Javascript entsprechend anpassen.
Owner

Jetzt hast du ja das problem das er immer mehrmals würfelt, ich wüsste gerade nicht wie man das Dynamisch gestalten sollte. Könnte sein das es mit JS geht.

Jetzt hast du ja das problem das er immer mehrmals würfelt, ich wüsste gerade nicht wie man das Dynamisch gestalten sollte. Könnte sein das es mit JS geht.
Owner

Einen Variablen wert als Feld im Charakterbogen zu machen ist nicht so wirklich sinnvoll
17a82fafa2/aborea.html (L159)

Benutz lieber ein Popup:

?{Ziele?|0}
Einen Variablen wert als Feld im Charakterbogen zu machen ist nicht so wirklich sinnvoll https://codeberg.org/lortas/AboreaRoll20CharSheet/src/commit/17a82fafa2f31206ab7d1e926eb295a65ab60be0/aborea.html#L159 Benutz lieber ein Popup: ``` ?{Ziele?|0} ```
Poster

Ich weiß. Aber aktuell habe ich noch keine bessere Idee.
Schau Dir mal diesen Versuch hier an:
https://codeberg.org/lortas/AboreaRoll20CharSheet/src/branch/gezieltesprueche

Eventuell hast Du ja dann noch eine Idee.

Ich weiß. Aber aktuell habe ich noch keine bessere Idee. Schau Dir mal diesen Versuch hier an: https://codeberg.org/lortas/AboreaRoll20CharSheet/src/branch/gezieltesprueche Eventuell hast Du ja dann noch eine Idee.
Owner

Hast du Matrix oder so? Weil dann könnte man sich da mal unterhalten: @tealk:tchncs.de

Hast du Matrix oder so? Weil dann könnte man sich da mal unterhalten: @tealk:tchncs.de
Poster

Sorry, Matrix hab ich nicht. Ich hab Dir mal eine E-Mail geschickt.

Sorry, Matrix hab ich nicht. Ich hab Dir mal eine E-Mail geschickt.
Poster

Was hällst Du von dieser Idee:
3195751420

Was hällst Du von dieser Idee: https://codeberg.org/lortas/AboreaRoll20CharSheet/commit/31957514204ea2d4a2072f598c22ee3d38a55a15 + Bugfix: https://codeberg.org/lortas/AboreaRoll20CharSheet/commit/e6e1743b7e87b393312ed46e0f87d6d1be65b151
Owner

so kann man in roll20 wohl kein js aufrufen; jedenfalls klappt das nicht.

DOM can't be used directly in basically any way, so event listeners like onclick won't work.

https://wiki.roll20.net/Sheet_Worker_Scripts

so kann man in roll20 wohl kein js aufrufen; jedenfalls klappt das nicht. > DOM can't be used directly in basically any way, so event listeners like onclick won't work. https://wiki.roll20.net/Sheet_Worker_Scripts
Poster

In Deinem Link stand doch die Lösung. So müsste es jetzt gehen.
b9c747cd49

In Deinem Link stand doch die Lösung. So müsste es jetzt gehen. https://codeberg.org/lortas/AboreaRoll20CharSheet/commit/b9c747cd49221c99e994884632b0d60747f73fc0
Owner

Also auch diese Verion scheint nicht zu funktionieren.

Also auch diese Verion scheint nicht zu funktionieren.
Poster

Vielleicht liegt es am prompt? Prüfe mal, ob es mit einer statischen anzahl_ziele.

Vielleicht liegt es am `prompt`? Prüfe mal, ob es mit einer statischen `anzahl_ziele`.
Owner

Will irgendwie auch nicht, wenn ich wüsste wie man das debuggen kann.

  function build_gezieltesprueche_rollcommand(anzahl_ziele, malus) {
    var value = "@{abilityroll} wirkt einen geziehlten Zauber auf " + anzahl_ziele.toString() + " Ziele mit dem Ergebnis:";
    malus *= anzahl_ziele - 1;
    var roll = "[[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + ?{Modifier?|0} - " + malus.toString() + "]]";
    while (anzahl_ziele > 0) {
      value += " " + roll;
      anzahl_ziele--;
    }
    return value;
  }

  on("clicked:rollgezsp", function () {
    getAttrs(["character_name"], function (values) {
      let anzahl_ziele = 3;
      let character_name = values.character_name || "";
      sendChat(character_name, build_gezieltesprueche_rollcommand(anzahl_ziele, 2));
    });
  });
Will irgendwie auch nicht, wenn ich wüsste wie man das debuggen kann. ``` function build_gezieltesprueche_rollcommand(anzahl_ziele, malus) { var value = "@{abilityroll} wirkt einen geziehlten Zauber auf " + anzahl_ziele.toString() + " Ziele mit dem Ergebnis:"; malus *= anzahl_ziele - 1; var roll = "[[1d10! + @{gezsp_attribut} + @{gezsp} + @{gezsp_bonus} + @{global_modifier} + ?{Modifier?|0} - " + malus.toString() + "]]"; while (anzahl_ziele > 0) { value += " " + roll; anzahl_ziele--; } return value; } on("clicked:rollgezsp", function () { getAttrs(["character_name"], function (values) { let anzahl_ziele = 3; let character_name = values.character_name || ""; sendChat(character_name, build_gezieltesprueche_rollcommand(anzahl_ziele, 2)); }); }); ```
Poster

In der Roll20-Dokumentation wird die intensive Nutzung von log() empfohlen. Eventuell fügst Du mal in jede Zeile ein log() ein, um zu sehen wo es knallt.

In der Roll20-Dokumentation wird die intensive Nutzung von `log()` empfohlen. Eventuell fügst Du mal in jede Zeile ein `log()` ein, um zu sehen wo es knallt.
Poster

so ungefähr: 1ea33fe983

so ungefähr: https://codeberg.org/lortas/AboreaRoll20CharSheet/commit/1ea33fe98355acda415478503030227d18a69420
Poster

Ich war mal so frei und hab nach Hilfe im roll20-Forum gefragt.

Was mir auch noch eingefallen ist, ob die Integer-Variablen wirklich mit .toString() in einen String ge'cast'et werden müssen, oder ob Javascript das implizit macht? Evntuell heist der Aufruf aber auch nur .toString statt .toString()?

Ich war mal so frei und hab nach [Hilfe im roll20-Forum gefragt](https://app.roll20.net/forum/permalink/11049224/). Was mir auch noch eingefallen ist, ob die Integer-Variablen wirklich mit `.toString()` in einen String ge'cast'et werden müssen, oder ob Javascript das implizit macht? Evntuell heist der Aufruf aber auch nur `.toString` statt `.toString()`?
Poster

Ein paar Kleinigkeiten hab ich noch gefunden. fde6ff3571

Ein paar Kleinigkeiten hab ich noch gefunden. https://codeberg.org/lortas/AboreaRoll20CharSheet/commit/fde6ff357120b85de5211eedfa92ee50b27dfbaa
Owner

Werd ich mal testen wenn ich @home bin

Werd ich mal testen wenn ich @home bin
Owner

Also ich bekomme keinerlei consolen output wenn ich auf den knopf drücke.

  on("clicked:rollgezsp", function () {
    console.log("klick");

selbst das klick, also das aufrufen funktioniert nicht

Also ich bekomme keinerlei consolen output wenn ich auf den knopf drücke. ``` on("clicked:rollgezsp", function () { console.log("klick"); ``` selbst das klick, also das aufrufen funktioniert nicht
Poster

was ist mir nur log("klick") ohne console?

By the way, sendChat steht im Sheetworker nicht zur Verfügung. :-(

Da muss man "Custom Roll Parsing" einsetzen.

was ist mir nur `log("klick")` ohne `console`? By the way, `sendChat` steht im Sheetworker nicht zur Verfügung. :-( Da muss man "Custom Roll Parsing" einsetzen.
Owner

was ist mir nur log("klick") ohne console?

Nö will auch nicht

> was ist mir nur `log("klick")` ohne `console`? Nö will auch nicht
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Notifications
Due Date

No due date set.

Reference: tealk-roll20-character-sheets/Aborea#4
Loading…
There is no content yet.