From 05bed77ce5589b4091e94ae890fef61accbe5d6b Mon Sep 17 00:00:00 2001 From: Byroks Date: Wed, 27 Mar 2024 12:10:10 +0100 Subject: [PATCH] Implement Reroll --- lang/de.json | 746 ++++++++++++++------------- source/index.ts | 12 + source/module/rolls/M5Roll.ts | 28 +- source/module/rolls/reroll.ts | 107 ++++ templates/chat/reroll-dialog.hbs | 18 + templates/chat/task-check-dialog.hbs | 36 +- 6 files changed, 550 insertions(+), 397 deletions(-) create mode 100644 source/module/rolls/reroll.ts create mode 100644 templates/chat/reroll-dialog.hbs diff --git a/lang/de.json b/lang/de.json index 4ed4493..a083c65 100644 --- a/lang/de.json +++ b/lang/de.json @@ -12,402 +12,420 @@ "TYPES.Item.effect": "Aktiver Effekt", "TYPES.Item.kampfkunst": "Kampfkunst", "TYPES.Item.container": "Aufbewahrung", + "TYPES.Item.class": "Klasse", - "midgard5.phase-action": "Handlungsphase", - "midgard5.phase-movement": "Bewegungsphase", - "midgard5.no-encounter": "Kein Kampf", - "midgard5.encounter-not-started": "Kein aktiver Kampf", - "midgard5.initiative": "Initiative", - "midgard5.actionrank": "Handlungsrang", + "midgard5": { + "phase-action": "Handlungsphase", + "phase-movement": "Bewegungsphase", + "no-encounter": "Kein Kampf", + "encounter-not-started": "Kein aktiver Kampf", + "initiative": "Initiative", + "actionrank": "Handlungsrang", - "midgard5.combat-join": "Kampf Beitreten/Handlungsrang zurücksetzen", - "midgard5.combat-ranged": "Fernangriff", - "midgard5.combat-spell": "Zaubern (10 Sec)", + "combat-join": "Kampf Beitreten/Handlungsrang zurücksetzen", + "combat-ranged": "Fernangriff", + "combat-spell": "Zaubern (10 Sec)", - "midgard5.time-duration": "Dauer", - "midgard5.time-round": "Runde(n)", - "midgard5.time-minute": "Minute(n)", - "midgard5.time-hour": "Stunde(n)", - "midgard5.time-limitless": "Unbegrenzt", + "time-duration": "Dauer", + "time-round": "Runde(n)", + "time-minute": "Minute(n)", + "time-hour": "Stunde(n)", + "time-limitless": "Unbegrenzt", - "midgard5.doRoll": "Würfeln", - "midgard5.learn": "Lernen", + "doRoll": "Würfeln", + "learn": "Lernen", - "midgard5.label": "Bezeichnung", - "midgard5.description": "Beschreibung", - "midgard5.Characteristic": "Merkmal", - "midgard5.characteristics": "Merkmale", - "midgard5.background": "Hintergrund", - "midgard5.attribute": "Eigenschaft", - "midgard5.attributes": "Eigenschaften", - "midgard5.points": "Punkte", - "midgard5.calculated-value": "Berechneter Wert", - "midgard5.calculated-values": "Werte und Boni", + "label": "Bezeichnung", + "description": "Beschreibung", + "Characteristic": "Merkmal", + "characteristics": "Merkmale", + "background": "Hintergrund", + "attribute": "Eigenschaft", + "attributes": "Eigenschaften", + "points": "Punkte", + "calculated-value": "Berechneter Wert", + "calculated-values": "Werte und Boni", - "midgard5.skill": "Fertigkeit", - "midgard5.skill-value": "Fertigkeitswert", - "midgard5.fw": "FW", - "midgard5.bonus": "Bonus", - "midgard5.bonuses": "Boni", - "midgard5.ew": "EW", - "midgard5.pp-short": "PP", - "midgard5.pp": "Praxispunkte", + "skill": "Fertigkeit", + "skill-value": "Fertigkeitswert", + "fw": "FW", + "bonus": "Bonus", + "bonuses": "Boni", + "ew": "EW", + "pp-short": "PP", + "pp": "Praxispunkte", - "midgard5.item-value": "Wert", - "midgard5.item-quantity": "Menge", - "midgard5.item-onbody": "Am Körper", - "midgard5.item-ismagic": "Ist Magisch", - "midgard5.item-wealth": "Vermögenswert", - "midgard5.item-weight": "Gewicht", + "item-value": "Wert", + "item-quantity": "Menge", + "item-onbody": "Am Körper", + "item-ismagic": "Ist Magisch", + "item-wealth": "Vermögenswert", + "item-weight": "Gewicht", - "midgard5.actor-lp": "Lebenspunkte", - "midgard5.actor-lp-short": "LP", - "midgard5.actor-ap": "Ausdauerpunkte", - "midgard5.actor-ap-short": "AP", - "midgard5.actor-st": "St", - "midgard5.actor-st-long": "Stärke", - "midgard5.actor-ko": "Ko", - "midgard5.actor-ko-long": "Konstitution", - "midgard5.actor-au": "Au", - "midgard5.actor-au-long": "Aussehen", - "midgard5.actor-gs": "Gs", - "midgard5.actor-gs-long": "Geschicklichkeit", - "midgard5.actor-in": "In", - "midgard5.actor-in-long": "Intelligenz", - "midgard5.actor-pa": "pA", - "midgard5.actor-pa-long": "persönliche Ausstrahlung", - "midgard5.actor-gw": "Gw", - "midgard5.actor-gw-long": "Gewandtheit", - "midgard5.actor-zt": "Zt", - "midgard5.actor-zt-long": "Zaubertalent", - "midgard5.actor-wk": "Wk", - "midgard5.actor-wk-long": "Willenskraft", - "midgard5.actor-git": "GiT", - "midgard5.actor-git-long": "Gifttolleranz", + "actor-lp": "Lebenspunkte", + "actor-lp-short": "LP", + "actor-ap": "Ausdauerpunkte", + "actor-ap-short": "AP", + "actor-st": "St", + "actor-st-long": "Stärke", + "actor-ko": "Ko", + "actor-ko-long": "Konstitution", + "actor-au": "Au", + "actor-au-long": "Aussehen", + "actor-gs": "Gs", + "actor-gs-long": "Geschicklichkeit", + "actor-in": "In", + "actor-in-long": "Intelligenz", + "actor-pa": "pA", + "actor-pa-long": "persönliche Ausstrahlung", + "actor-gw": "Gw", + "actor-gw-long": "Gewandtheit", + "actor-zt": "Zt", + "actor-zt-long": "Zaubertalent", + "actor-wk": "Wk", + "actor-wk-long": "Willenskraft", + "actor-git": "GiT", + "actor-git-long": "Gifttolleranz", - "midgard5.aktuell": "Akt.", - "midgard5.maximum": "Max.", - "midgard5.attrvalue": "Wert", - "midgard5.movementRange": "Bewegungsweite", + "aktuell": "Akt.", + "maximum": "Max.", + "attrvalue": "Wert", + "movementRange": "Bewegungsweite", - "midgard5.base_values": "Grundwerte", - "midgard5.skills": "Fertigkeiten", - "midgard5.gear": "Ausrüstung", - "midgard5.spells": "Zauber", - "midgard5.effects": "Aktive Effekte", - "midgard5.kampfkuenste": "Kampfkünste", - "midgard5.combat": "Kampf", + "base_values": "Grundwerte", + "skills": "Fertigkeiten", + "gear": "Ausrüstung", + "spells": "Zauber", + "effects": "Aktive Effekte", + "kampfkuenste": "Kampfkünste", + "combat": "Kampf", - "midgard5.actor-name": "Figur", - "midgard5.level": "Grad", - "midgard5.class": "Typ", - "midgard5.race": "Rasse", - "midgard5.magicUsing": "Zauberkundig", - "midgard5.gender": "Geschlecht", - "midgard5.weight": "Gewicht", - "midgard5.height": "Größe", - "midgard5.shape": "Gestalt", - "midgard5.age": "Alter", - "midgard5.caste": "Stand", - "midgard5.occupation": "Beruf", - "midgard5.origin": "Heimat", - "midgard5.faith": "Glaube", + "actor-name": "Figur", + "level": "Grad", + "class": "Typ", + "race": "Rasse", + "magicUsing": "Zauberkundig", + "gender": "Geschlecht", + "weight": "Gewicht", + "height": "Größe", + "shape": "Gestalt", + "age": "Alter", + "caste": "Stand", + "occupation": "Beruf", + "origin": "Heimat", + "faith": "Glaube", - "midgard5.currency": "Geld", - "midgard5.currency-gold": "Gold", - "midgard5.currency-silver": "Silber", - "midgard5.currency-copper": "Kupfer", - "midgard5.currency-wealth": "Vermögen in GS", - "midgard5.currency-available": "verfügbares Vermögen", - "midgard5.hoard": "aktueller Hort", - "midgard5.hoardMin": "benötigter Mindesthort", - "midgard5.hoard-next": "Hort für nächsten Grad", - "midgard5.hoarded": "Hort", + "currency": "Geld", + "currency-gold": "Gold", + "currency-silver": "Silber", + "currency-copper": "Kupfer", + "currency-wealth": "Vermögen in GS", + "currency-available": "verfügbares Vermögen", + "hoard": "aktueller Hort", + "hoardMin": "benötigter Mindesthort", + "hoard-next": "Hort für nächsten Grad", + "hoarded": "Hort", - "midgard5.no-container": "Ohne", + "no-container": "Ohne", - "midgard5.encumbrance": "Getragene Last", - "midgard5.load": "Normallast", - "midgard5.heavy-load": "Schwere Last", - "midgard5.thrust-load": "Schublast", - "midgard5.load-max": "Höchstlast", - "midgard5.load-capacity": "Tragkraft", + "encumbrance": "Getragene Last", + "load": "Normallast", + "heavy-load": "Schwere Last", + "thrust-load": "Schublast", + "load-max": "Höchstlast", + "load-capacity": "Tragkraft", - "midgard5.exp-overall": "Erfahrungsschatz", - "midgard5.exp-available": "Erfahrungspunkte", - "midgard5.grace": "Göttliche Gnade", - "midgard5.destiny": "Schicksalsgunst", - "midgard5.luckPoints": "Glückspunkte", + "exp-overall": "Erfahrungsschatz", + "exp-available": "Erfahrungspunkte", + "grace": "Göttliche Gnade", + "destiny": "Schicksalsgunst", + "luckPoints": "Glückspunkte", - "midgard5.abrichten": "Abrichten", - "midgard5.akrobatik": "Akrobatik", - "midgard5.alchimie": "Alchimie", - "midgard5.anfuehren": "Anführen", - "midgard5.askese": "Askese", - "midgard5.astrologie": "Astrologie", - "midgard5.athletik": "Athletik", - "midgard5.balancieren": "Balancieren", - "midgard5.beidhaendigerKampf": "Beidhändiger Kampf", - "midgard5.bergreiten": "Bergreiten", - "midgard5.beredsamkeit": "Beredsamkeit", - "midgard5.betaeuben": "Betäuben", - "midgard5.betaeubungsgriff": "Betäubungsgriff", - "midgard5.bootfahren": "Bootfahren", - "midgard5.dickhaeuterLenken": "Dickhäuter lenken", - "midgard5.ersteHilfe": "Erste Hilfe", - "midgard5.etikette": "Etikette", - "midgard5.fallenEntdecken": "Fallen entdecken", - "midgard5.fallenmechanik": "Fallenmechanik", - "midgard5.faelschen": "Fälschen", - "midgard5.fangen": "Fangen", - "midgard5.fechten": "Fechten", - "midgard5.feueralchimie": "Feueralchimie", - "midgard5.gassenwissen": "Gassenwissen", - "midgard5.gaukeln": "Gaukeln", - "midgard5.gelaendelauf": "Geländelauf", - "midgard5.geraetekunde": "Gerätekunde", - "midgard5.geschaeftssinn": "Geschäftssinn", - "midgard5.gluecksspiel": "Glücksspiel", - "midgard5.heilkunde": "Heilkunde", - "midgard5.kampfInVollruestung": "Kampf in Vollrüstung", - "midgard5.kampfInSchlachtreihe": "Kampf in Schlachtreihe", - "midgard5.kampfkunst": "Kampfkunst", - "midgard5.kido": "Kido", - "midgard5.klettern": "Klettern", - "midgard5.landeskunde": "Landeskunde", - "midgard5.laufen": "Laufen", - "midgard5.lesenVonZauberschrift": "Lesen von Zauberschrift", - "midgard5.lesenVonZauberrunen": "Lesen von Zauberrunen", - "midgard5.meditieren": "Meditieren", - "midgard5.menschenkenntnis": "Menschenkenntnis", - "midgard5.meucheln": "Meucheln", - "midgard5.musizieren": "Musizieren", - "midgard5.naturkunde": "Naturkunde", - "midgard5.ninjutsu": "NinJutsu", - "midgard5.orakelkunst": "Orakelkunst", - "midgard5.pflanzenkunde": "Pflanzenkunde", - "midgard5.raunen": "Raunen", - "midgard5.reiten": "Reiten", - "midgard5.reiterkampf": "Reiterkampf", - "midgard5.rutengehen": "Rutengehen", - "midgard5.scharfschiessen": "Scharfschießen", - "midgard5.schiesskunst": "Schießkunst", - "midgard5.schleichen": "Schleichen", - "midgard5.schloesserOeffnen": "Schlösser öffnen", - "midgard5.schmerzErtragen": "Schmerzen ertragen", - "midgard5.schwimmen": "Schwimmen", - "midgard5.seilkunst": "Seilkunst", - "midgard5.selbstkontrolle": "Selbstkontrolle", - "midgard5.singen": "Singen", - "midgard5.skifahren": "Skifahren", - "midgard5.spinnengang": "Spinnengang", - "midgard5.speerfechten": "Speerfechten", - "midgard5.spurensuche": "Spurensuche", - "midgard5.stehlen": "Stehlen", - "midgard5.taitschi": "TaiTschi", - "midgard5.tarnen": "Tarnen", - "midgard5.tanzen": "Tanzen", - "midgard5.tauchen": "Tauchen", - "midgard5.thaumagraphie": "Thaumagraphie", - "midgard5.thaumalogie": "Thaumalogie", - "midgard5.tierkunde": "Tierkunde", - "midgard5.ueberleben": "Überleben", - "midgard5.verfuehren": "Verführen", - "midgard5.verhoeren": "Verhören", - "midgard5.verstellen": "Verstellen", - "midgard5.volkstanz": "Volkstanz", - "midgard5.wagenlenken": "Wagenlenken", - "midgard5.wahrsagen": "Wahrsagen", - "midgard5.wasserkampf": "Wasserkampf", - "midgard5.zauberkunde": "Zauberkunde", + "abrichten": "Abrichten", + "akrobatik": "Akrobatik", + "alchimie": "Alchimie", + "anfuehren": "Anführen", + "askese": "Askese", + "astrologie": "Astrologie", + "athletik": "Athletik", + "balancieren": "Balancieren", + "beidhaendigerKampf": "Beidhändiger Kampf", + "bergreiten": "Bergreiten", + "beredsamkeit": "Beredsamkeit", + "betaeuben": "Betäuben", + "betaeubungsgriff": "Betäubungsgriff", + "bootfahren": "Bootfahren", + "dickhaeuterLenken": "Dickhäuter lenken", + "ersteHilfe": "Erste Hilfe", + "etikette": "Etikette", + "fallenEntdecken": "Fallen entdecken", + "fallenmechanik": "Fallenmechanik", + "faelschen": "Fälschen", + "fangen": "Fangen", + "fechten": "Fechten", + "feueralchimie": "Feueralchimie", + "gassenwissen": "Gassenwissen", + "gaukeln": "Gaukeln", + "gelaendelauf": "Geländelauf", + "geraetekunde": "Gerätekunde", + "geschaeftssinn": "Geschäftssinn", + "gluecksspiel": "Glücksspiel", + "heilkunde": "Heilkunde", + "kampfInVollruestung": "Kampf in Vollrüstung", + "kampfInSchlachtreihe": "Kampf in Schlachtreihe", + "kampfkunst": "Kampfkunst", + "kido": "Kido", + "klettern": "Klettern", + "landeskunde": "Landeskunde", + "laufen": "Laufen", + "lesenVonZauberschrift": "Lesen von Zauberschrift", + "lesenVonZauberrunen": "Lesen von Zauberrunen", + "meditieren": "Meditieren", + "menschenkenntnis": "Menschenkenntnis", + "meucheln": "Meucheln", + "musizieren": "Musizieren", + "naturkunde": "Naturkunde", + "ninjutsu": "NinJutsu", + "orakelkunst": "Orakelkunst", + "pflanzenkunde": "Pflanzenkunde", + "raunen": "Raunen", + "reiten": "Reiten", + "reiterkampf": "Reiterkampf", + "rutengehen": "Rutengehen", + "scharfschiessen": "Scharfschießen", + "schiesskunst": "Schießkunst", + "schleichen": "Schleichen", + "schloesserOeffnen": "Schlösser öffnen", + "schmerzErtragen": "Schmerzen ertragen", + "schwimmen": "Schwimmen", + "seilkunst": "Seilkunst", + "selbstkontrolle": "Selbstkontrolle", + "singen": "Singen", + "skifahren": "Skifahren", + "spinnengang": "Spinnengang", + "speerfechten": "Speerfechten", + "spurensuche": "Spurensuche", + "stehlen": "Stehlen", + "taitschi": "TaiTschi", + "tarnen": "Tarnen", + "tanzen": "Tanzen", + "tauchen": "Tauchen", + "thaumagraphie": "Thaumagraphie", + "thaumalogie": "Thaumalogie", + "tierkunde": "Tierkunde", + "ueberleben": "Überleben", + "verfuehren": "Verführen", + "verhoeren": "Verhören", + "verstellen": "Verstellen", + "volkstanz": "Volkstanz", + "wagenlenken": "Wagenlenken", + "wahrsagen": "Wahrsagen", + "wasserkampf": "Wasserkampf", + "zauberkunde": "Zauberkunde", - "midgard5.armor": "Rüstung", - "midgard5.defense": "Abwehr", - "midgard5.damageBonus": "Schadensbonus", - "midgard5.damageBonus-short": "SchB", - "midgard5.attackBonus": "Angriffsbonus", - "midgard5.attackBonus-short": "AnB", - "midgard5.defenseBonus": "Abwehrbonus", - "midgard5.defenseBonus-short": "AbB", - "midgard5.movementBonus": "Bewegunsbonus", - "midgard5.resistanceMind": "Resistenz Geist", - "midgard5.resistanceBody": "Resistenz Körper", - "midgard5.spellCasting": "Zaubern", - "midgard5.spellBonus": "Zauberbonus", - "midgard5.brawl": "Raufen", - "midgard5.poisonResistance": "Gifttolleranz", - "midgard5.enduranceBonus": "Ausdauerbonus", - "midgard5.lpProtection": "Rüstungsschutz (LP)", - "midgard5.apProtection": "Rüstungsschutz (AP)", - "midgard5.perception": "Wahrnehmung", - "midgard5.drinking": "Trinken", + "armor": "Rüstung", + "defense": "Abwehr", + "damageBonus": "Schadensbonus", + "damageBonus-short": "SchB", + "attackBonus": "Angriffsbonus", + "attackBonus-short": "AnB", + "defenseBonus": "Abwehrbonus", + "defenseBonus-short": "AbB", + "movementBonus": "Bewegunsbonus", + "resistanceMind": "Resistenz Geist", + "resistanceBody": "Resistenz Körper", + "spellCasting": "Zaubern", + "spellBonus": "Zauberbonus", + "brawl": "Raufen", + "poisonResistance": "Gifttolleranz", + "enduranceBonus": "Ausdauerbonus", + "lpProtection": "Rüstungsschutz (LP)", + "apProtection": "Rüstungsschutz (AP)", + "perception": "Wahrnehmung", + "drinking": "Trinken", - "midgard5.new-skill": "Neue Fertigkeit", - "midgard5.special": "Spezial", - "midgard5.learned-skill": "Gelernte Fertigkeit", - "midgard5.learned-skills": "Gelernte Fertigkeiten", - "midgard5.language": "Sprache", - "midgard5.languages": "Sprachen", - "midgard5.writings": "Schriften", - "midgard5.weapon-skill": "Waffenfertigkeit", - "midgard5.weapon-skills": "Waffenfertigkeiten", - "midgard5.unlearned-skill": "Ungelernte Fertigkeit", - "midgard5.unlearned-skills": "Ungelernte Fertigkeiten", - "midgard5.innate-ability": "Angeborene/Besondere Fähigkeit", - "midgard5.innate-abilities": "Angeborene und besondere Fähigkeiten", + "new-skill": "Neue Fertigkeit", + "special": "Spezial", + "learned-skill": "Gelernte Fertigkeit", + "learned-skills": "Gelernte Fertigkeiten", + "language": "Sprache", + "languages": "Sprachen", + "writings": "Schriften", + "weapon-skill": "Waffenfertigkeit", + "weapon-skills": "Waffenfertigkeiten", + "unlearned-skill": "Ungelernte Fertigkeit", + "unlearned-skills": "Ungelernte Fertigkeiten", + "innate-ability": "Angeborene/Besondere Fähigkeit", + "innate-abilities": "Angeborene und besondere Fähigkeiten", - "midgard5.base-damage": "Grundschaden", - "midgard5.weapon": "Waffe", - "midgard5.weapons": "Waffen", - "midgard5.defensive-weapon": "Verteidigungswaffe", - "midgard5.defensive-weapons": "Verteidigungswaffen", - "midgard5.no-skill": "Keine Fertigkeit", - "midgard5.magic": "magisch", - "midgard5.valuable": "Vermögen", - "midgard5.equipped": "Ausgerüstet", - "midgard5.active": "Aktiv", - "midgard5.rangedWeapon": "Schusswaffe", - "midgard5.assignItemToCharacter": "Füge Gegenstand einem Charakter hinzu, um hier etwas auswählen zu können", - "midgard5.showAll": "Alle anzeigen", - "midgard5.wealthAndWeight": "Vermögen und Lasten", - "midgard5.itemsInContainers": "Gegenstände in Aufbewahrung", - "midgard5.allItems": "Alle Gegenstände", + "base-damage": "Grundschaden", + "weapon": "Waffe", + "weapons": "Waffen", + "defensive-weapon": "Verteidigungswaffe", + "defensive-weapons": "Verteidigungswaffen", + "no-skill": "Keine Fertigkeit", + "magic": "magisch", + "valuable": "Vermögen", + "equipped": "Ausgerüstet", + "active": "Aktiv", + "rangedWeapon": "Schusswaffe", + "assignItemToCharacter": "Füge Gegenstand einem Charakter hinzu, um hier etwas auswählen zu können", + "showAll": "Alle anzeigen", + "wealthAndWeight": "Vermögen und Lasten", + "itemsInContainers": "Gegenstände in Aufbewahrung", + "allItems": "Alle Gegenstände", - "midgard5.pw": "Prüfwurf", - "midgard5.attack": "Angriff", - "midgard5.damage": "Schaden", + "pw": "Prüfwurf", + "attack": "Angriff", + "damage": "Schaden", - "midgard5.spell-process-none": "Ohne", - "midgard5.spell-process-artefakte": "Artefakte", - "midgard5.spell-process-beherrschen": "Beherrschen", - "midgard5.spell-process-bewegen": "Bewegen", - "midgard5.spell-process-beschwoeren": "Beschwören", - "midgard5.spell-process-blutmagie": "Blutmagie", - "midgard5.spell-process-chaoswunder": "Chaoswunder", - "midgard5.spell-process-dweomer": "Dweomer", - "midgard5.spell-process-erkennen": "Erkennen", - "midgard5.spell-process-erschaffen": "Erschaffen", - "midgard5.spell-process-erhaltung": "Erhaltung", - "midgard5.spell-process-formen": "Formen", - "midgard5.spell-process-finstere_magie": "Finstere Magie", - "midgard5.spell-process-kampfverse": "Kampfverse", - "midgard5.spell-process-namensmagie": "Namensmagie", - "midgard5.spell-process-nekromantie": "Nekromantie", - "midgard5.spell-process-runenstaebe": "Runenstäbe", - "midgard5.spell-process-thaumatherapie": "Thaumatherapie", - "midgard5.spell-process-veraendern": "Verändern", - "midgard5.spell-process-vigilsignien": "Vigilsignien", - "midgard5.spell-process-wundertat": "Wundertat", - "midgard5.spell-process-wilder_Dweomer": "Wilder Dweomer", - "midgard5.spell-process-zerstoeren": "Zerstören", - "midgard5.spell-process-zauberlied": "Zauberlieder", - "midgard5.spell-process-zaubersalz": "Zaubersalze", - "midgard5.spell-process-zaubermittel": "Zaubermittel", - "midgard5.spell-process-zauberschutz": "Zauberschutz", - "midgard5.spell-process-zauberrunen": "Zauberrunen", - "midgard5.spell-process-zaubersiegel": "Zaubersiegel", - "midgard5.spell-process-zaubertaenze": "Zaubertänze", - "midgard5.spell-process-zauberblaetter": "Zauberblätter", + "spell-process-none": "Ohne", + "spell-process-artefakte": "Artefakte", + "spell-process-beherrschen": "Beherrschen", + "spell-process-bewegen": "Bewegen", + "spell-process-beschwoeren": "Beschwören", + "spell-process-blutmagie": "Blutmagie", + "spell-process-chaoswunder": "Chaoswunder", + "spell-process-dweomer": "Dweomer", + "spell-process-erkennen": "Erkennen", + "spell-process-erschaffen": "Erschaffen", + "spell-process-erhaltung": "Erhaltung", + "spell-process-formen": "Formen", + "spell-process-finstere_magie": "Finstere Magie", + "spell-process-kampfverse": "Kampfverse", + "spell-process-namensmagie": "Namensmagie", + "spell-process-nekromantie": "Nekromantie", + "spell-process-runenstaebe": "Runenstäbe", + "spell-process-thaumatherapie": "Thaumatherapie", + "spell-process-veraendern": "Verändern", + "spell-process-vigilsignien": "Vigilsignien", + "spell-process-wundertat": "Wundertat", + "spell-process-wilder_Dweomer": "Wilder Dweomer", + "spell-process-zerstoeren": "Zerstören", + "spell-process-zauberlied": "Zauberlieder", + "spell-process-zaubersalz": "Zaubersalze", + "spell-process-zaubermittel": "Zaubermittel", + "spell-process-zauberschutz": "Zauberschutz", + "spell-process-zauberrunen": "Zauberrunen", + "spell-process-zaubersiegel": "Zaubersiegel", + "spell-process-zaubertaenze": "Zaubertänze", + "spell-process-zauberblaetter": "Zauberblätter", - "midgard5.spell-type-gedanke": "Gedanke", - "midgard5.spell-type-geste": "Geste", - "midgard5.spell-type-wort": "Wort", + "spell-type-gedanke": "Gedanke", + "spell-type-geste": "Geste", + "spell-type-wort": "Wort", - "midgard5.spell-target-umgebung": "Umgebung", - "midgard5.spell-target-geist": "Geist", - "midgard5.spell-target-koerper": "Körper", + "spell-target-umgebung": "Umgebung", + "spell-target-geist": "Geist", + "spell-target-koerper": "Körper", - "midgard5.spell-type": "Art", - "midgard5.spell-process": "Prozess", - "midgard5.spell-castDuration": "Zauberdauer", - "midgard5.spell-castDuration-short": "Zd", - "midgard5.spell-range": "Reichweite", - "midgard5.spell-range-short": "Rw", - "midgard5.spell-effectTarget": "Wirkunsziel", - "midgard5.spell-effectTarget-short": "Wz", - "midgard5.spell-effectArea": "Wirkungsbereich", - "midgard5.spell-effectArea-short": "Wb", - "midgard5.spell-effectDuration": "Wirkungsdauer", - "midgard5.spell-effectDuration-short": "Wd", - "midgard5.spell-origin": "Ursprung", - "midgard5.spell-agens": "Agens", - "midgard5.spell-reagens": "Reagens", - "midgard5.spell-material": "Zaubermaterial", + "spell-type": "Art", + "spell-process": "Prozess", + "spell-castDuration": "Zauberdauer", + "spell-castDuration-short": "Zd", + "spell-range": "Reichweite", + "spell-range-short": "Rw", + "spell-effectTarget": "Wirkunsziel", + "spell-effectTarget-short": "Wz", + "spell-effectArea": "Wirkungsbereich", + "spell-effectArea-short": "Wb", + "spell-effectDuration": "Wirkungsdauer", + "spell-effectDuration-short": "Wd", + "spell-origin": "Ursprung", + "spell-agens": "Agens", + "spell-reagens": "Reagens", + "spell-material": "Zaubermaterial", - "midgard5.kampfkunst-type": "Form", - "midgard5.kampfkunst-variante": "Variante", - "midgard5.kampfkunst-variante-short": "Var", - "midgard5.kampfkunst-ep": "Erfahrungspunkte", - "midgard5.kampfkunst-rank": "Stufe", - "midgard5.kampfkunst-weapon": "Waffengruppe", - "midgard5.kampfkunst-enemy": "Einschränkungen durch Art der Gegner", + "kampfkunst-type": "Form", + "kampfkunst-variante": "Variante", + "kampfkunst-variante-short": "Var", + "kampfkunst-ep": "Erfahrungspunkte", + "kampfkunst-rank": "Stufe", + "kampfkunst-weapon": "Waffengruppe", + "kampfkunst-enemy": "Einschränkungen durch Art der Gegner", - "midgard5.kampfkunst-type-angriff": "Angriff", - "midgard5.kampfkunst-type-verteidigung": "Verteidigung", - "midgard5.kampfkunst-type-finte": "Finte", - "midgard5.kampfkunst-type-geist": "Geistestechnik", - "midgard5.kampfkunst-type-schießkunst": "Schießkunst", - "midgard5.kampfkunst-type-fechtkunst": "Fechtkunst", + "kampfkunst-type-angriff": "Angriff", + "kampfkunst-type-verteidigung": "Verteidigung", + "kampfkunst-type-finte": "Finte", + "kampfkunst-type-geist": "Geistestechnik", + "kampfkunst-type-schießkunst": "Schießkunst", + "kampfkunst-type-fechtkunst": "Fechtkunst", - "midgard5.kampfkunst-variante-anstuermen": "Anstürmen", - "midgard5.kampfkunst-variante-attackieren": "Attackieren", - "midgard5.kampfkunst-variante-entwaffnen": "Entwaffnen", - "midgard5.kampfkunst-variante-fechten": "Fechten", - "midgard5.kampfkunst-variante-schusstechnik": "Schusstechnik", - "midgard5.kampfkunst-variante-finten": "Finten", - "midgard5.kampfkunst-variante-geistestechnik": "Geistestechnik", - "midgard5.kampfkunst-variante-verteidigung": "Verteidigung", + "kampfkunst-variante-anstuermen": "Anstürmen", + "kampfkunst-variante-attackieren": "Attackieren", + "kampfkunst-variante-entwaffnen": "Entwaffnen", + "kampfkunst-variante-fechten": "Fechten", + "kampfkunst-variante-schusstechnik": "Schusstechnik", + "kampfkunst-variante-finten": "Finten", + "kampfkunst-variante-geistestechnik": "Geistestechnik", + "kampfkunst-variante-verteidigung": "Verteidigung", - "midgard5.kido-type": "KiDo Form", - "midgard5.kido-variante": "KiDo Variante", - "midgard5.kido-color": "Kampfstilfarbe", - "midgard5.kido-style": "Art der Technik", + "kido-type": "KiDo Form", + "kido-variante": "KiDo Variante", + "kido-color": "Kampfstilfarbe", + "kido-style": "Art der Technik", - "midgard5.kido-type-angriff": "Kido Angriff", - "midgard5.kido-type-verteidigung": "Kido Verteidigung", - "midgard5.kido-type-finte": "Kido Finte", - "midgard5.kido-type-leib": "Kido Leibestechnik", + "kido-type-angriff": "Kido Angriff", + "kido-type-verteidigung": "Kido Verteidigung", + "kido-type-finte": "Kido Finte", + "kido-type-leib": "Kido Leibestechnik", - "midgard5.kido-variante-anspringen": "Anspringen", - "midgard5.kido-variante-attackieren": "Attackieren", - "midgard5.kido-variante-entwaffnen": "Entwaffnen", - "midgard5.kido-variante-werfen": "Werfen", - "midgard5.kido-variante-ausweichen": "Ausweichen", - "midgard5.kido-variante-blockieren": "Blockieren", - "midgard5.kido-variante-bewegen": "Bewegen", - "midgard5.kido-variante-kontrollieren": "Kontrollieren", + "kido-variante-anspringen": "Anspringen", + "kido-variante-attackieren": "Attackieren", + "kido-variante-entwaffnen": "Entwaffnen", + "kido-variante-werfen": "Werfen", + "kido-variante-ausweichen": "Ausweichen", + "kido-variante-blockieren": "Blockieren", + "kido-variante-bewegen": "Bewegen", + "kido-variante-kontrollieren": "Kontrollieren", - "midgard5.mod-operation-add100": "Addieren (max 100)", - "midgard5.mod-operation-roll": "Wurf Modifikation", - "midgard5.mod-operation-add": "Addieren", - "midgard5.mod-operation-set": "Basiswert", - "midgard5.mod-operation-fixed": "Fester Wert", - "midgard5.mod-operation-subtract": "Subtrahieren", - "midgard5.mod-operation-multiply": "Multiplizieren", - "midgard5.mod-operation-division": "Dividieren", + "mod-operation-add100": "Addieren (max 100)", + "mod-operation-roll": "Wurf Modifikation", + "mod-operation-add": "Addieren", + "mod-operation-set": "Basiswert", + "mod-operation-fixed": "Fester Wert", + "mod-operation-subtract": "Subtrahieren", + "mod-operation-multiply": "Multiplizieren", + "mod-operation-division": "Dividieren", - "midgard5.mod-stat-defenseBonus": "Abwehrbonus", - "midgard5.mod-stat-attackBonus": "Angriffsbonus", - "midgard5.mod-stat-damageBonus": "Schadensbonus", - "midgard5.mod-stat-movement": "Bewegung", - "midgard5.mod-stat-resistanceMind": "Resistenz Geist", - "midgard5.mod-stat-resistanceBody": "Resistenz Körper", - "midgard5.mod-stat-spellCasting": "Zaubern", - "midgard5.mod-stat-brawl": "Raufen", - "midgard5.mod-stat-poisonResistance": "Gifttolleranz", - "midgard5.mod-stat-lp": "Lebenspunkte", - "midgard5.mod-stat-ap": "Ausdauerpunkte", - "midgard5.mod-stat-lpProtection": "Rüstungsschutz (LP)", - "midgard5.mod-stat-apProtection": "Rüstungsschutz (AP)", - "midgard5.mod-stat-perception": "Wahrnehmung", - "midgard5.mod-stat-drinking": "Trinken", + "mod-stat-defenseBonus": "Abwehrbonus", + "mod-stat-attackBonus": "Angriffsbonus", + "mod-stat-damageBonus": "Schadensbonus", + "mod-stat-movement": "Bewegung", + "mod-stat-resistanceMind": "Resistenz Geist", + "mod-stat-resistanceBody": "Resistenz Körper", + "mod-stat-spellCasting": "Zaubern", + "mod-stat-brawl": "Raufen", + "mod-stat-poisonResistance": "Gifttolleranz", + "mod-stat-lp": "Lebenspunkte", + "mod-stat-ap": "Ausdauerpunkte", + "mod-stat-lpProtection": "Rüstungsschutz (LP)", + "mod-stat-apProtection": "Rüstungsschutz (AP)", + "mod-stat-perception": "Wahrnehmung", + "mod-stat-drinking": "Trinken", - "midgard5.mod-type": "Typ der Modifikation", - "midgard5.mod-id": "Was soll modifiziert werden", - "midgard5.mod-operation": "Wie soll modifiziert werden", - "midgard5.mod-value": "Wert", + "mod-type": "Typ der Modifikation", + "mod-id": "Was soll modifiziert werden", + "mod-operation": "Wie soll modifiziert werden", + "mod-value": "Wert", - "midgard5.type": "Typ", - "midgard5.formula": "Formel", - "midgard5.roll": "Wurf" + "type": "Typ", + "formula": "Formel", + "roll": "Wurf", + + "chat": { + "luckPoint": "Glückspunkt", + "destiny": "Schicksalsgunst", + "modify": "Nachträglich +2", + "cancel": "Abbrechen", + "roll": "Würfeln", + "reroll": "Neuwürfeln", + + "options": { + "modifier": "Modifikator", + "difficulty": "Schwellenwert", + "rollMode": "Würfel Modus" + } + } + } } diff --git a/source/index.ts b/source/index.ts index 49f7311..693967e 100644 --- a/source/index.ts +++ b/source/index.ts @@ -5,6 +5,7 @@ import { M5Character } from "./module/actors/M5Character"; import { M5ItemMod, M5ModOperation, M5Skill, M5TimeUnit } from "./module/M5Base"; import { M5ItemSheet } from "./module/sheets/M5ItemSheet"; import { M5Item } from "./module/items/M5Item"; +import { reroll } from "./module/rolls/reroll"; Hooks.once("init", async () => { Logger.log("M5 | Initialisierung Midgard 5"); @@ -172,6 +173,17 @@ Hooks.on("getChatLogEntryContext", function (html, options) { return (game["user"].character || game["canvas"].tokens.controlled) && damageRolls > 0; }, callback: (li) => applyDamage(li, -2), + }, + { + name: "Redo", + icon: '', + condition: (li) => { + const message = (game as Game).messages.get(li.attr("data-message-id")); + + // All must be true to show the reroll dialogue + return game["user"].character.id === (game as Game).actors.get(message["speaker"].actor).id && !message["flags"].rerolled; + }, + callback: (li) => reroll(li), } ); }); diff --git a/source/module/rolls/M5Roll.ts b/source/module/rolls/M5Roll.ts index ffa61bb..7d57af8 100644 --- a/source/module/rolls/M5Roll.ts +++ b/source/module/rolls/M5Roll.ts @@ -109,7 +109,7 @@ export class M5Roll { if (!this._evaluated) await this.evaluate(); - const rMode = (game as Game).settings.get("core", "rollMode"); + const rMode = checkOptions["rollMode"] || (game as Game).settings.get("core", "rollMode"); const chatData = { type: CONST.CHAT_MESSAGE_TYPES.ROLL, @@ -117,10 +117,11 @@ export class M5Roll { speaker: ChatMessage.getSpeaker({ actor: this.actor }), sound: CONFIG.sounds.dice, roll: Roll.fromTerms([this.pool]), + flags: { data: this.data }, }; - ChatMessage.applyRollMode(chatData, rMode); - return ChatMessage.create(chatData); + let foo = ChatMessage.applyRollMode(chatData, rMode); + return ChatMessage.implementation["create"](foo, { rollMode: rMode }); } static fromAttributeValue(actor: any, attributeKey: string, attributeValue: number) { @@ -323,31 +324,29 @@ export class M5Roll { } async popUp({ - hasFortune = true, - taskType = null, useFortune = false, difficulty = 20, modifier = 0, - closedRoll = false, + rollModes = CONFIG.Dice.rollModes, + rollMode = "", template = "systems/midgard5/templates/chat/task-check-dialog.hbs", } = {}) { - const html = await renderTemplate(template, { hasFortune, useFortune, difficulty, modifier, closedRoll }); - + const html = await renderTemplate(template, { useFortune, difficulty, modifier, rollModes, rollMode }); return new Promise((resolve) => { const data = { - title: (game as Game).i18n.format("midgard5.chat.taskCheck.title", { type: taskType }), + title: (game as Game).i18n.localize("midgard5.chat.roll"), content: html, buttons: { - normal: { - label: (game as Game).i18n.localize("midgard5.chat.actions.roll"), + roll: { + label: (game as Game).i18n.localize("midgard5.chat.roll"), callback: (html) => resolve(this._processTaskCheckOptions(html[0].querySelector("form"))), }, cancel: { - label: (game as Game).i18n.localize("midgard5.chat.actions.cancel"), + label: (game as Game).i18n.localize("midgard5.chat.cancel"), callback: (html) => resolve({ cancelled: true }), }, }, - default: "normal", + default: "roll", close: () => resolve({ cancelled: true }), }; @@ -359,8 +358,7 @@ export class M5Roll { return { difficulty: parseInt(form.difficulty?.value), modifier: parseInt(form.modifier?.value), - useFortune: form.useFortune?.checked, - closedRoll: form.closedRoll?.checked, + rollMode: form.rollMode?.value, }; } } diff --git a/source/module/rolls/reroll.ts b/source/module/rolls/reroll.ts new file mode 100644 index 0000000..32eee57 --- /dev/null +++ b/source/module/rolls/reroll.ts @@ -0,0 +1,107 @@ +import { M5RollData, M5RollResult } from "../M5Base"; +import { M5Roll } from "./M5Roll"; + +export const reroll = async (roll) => { + const message = (game as Game).messages.get(roll.attr("data-message-id")); + const actor = (game as Game).actors.get(message["speaker"].actor); + + const template = "systems/midgard5/templates/chat/reroll-dialog.hbs"; + const html = await renderTemplate(template, { sg: actor.system.sg, gp: actor.system.gp }); + // Button defining + let buttons = {}; + buttons = { + destiny: { + icon: '', + label: (game as Game).i18n.localize("midgard5.chat.destiny"), + callback: () => rerollDie("destiny", "sg"), + }, + luckPoints: { + icon: '', + label: (game as Game).i18n.localize("midgard5.chat.luckPoint"), + callback: () => rerollDie("luckPoint", "gp"), + }, + modify: { + icon: '', + label: (game as Game).i18n.localize("midgard5.chat.modify"), + callback: () => rerollDie("modify", "gp"), + }, + cancel: { + icon: '', + label: (game as Game).i18n.localize("midgard5.chat.cancel"), + }, + }; + + // Dialog object + new Dialog( + { + title: (game as Game).i18n.localize("midgard5.chat.reroll"), + content: html, + buttons, + render: function () {}, + default: "luckPoints", + }, + { + classes: ["midgard5"], + } + ).render(true); + + async function rerollDie(type, target) { + // Update the "content" field + let rollData = actor.getRollData() as M5RollData; + const flagData = message["flags"].data; + rollData.i = flagData.i; + rollData.b = flagData.b; + rollData.iType = flagData.iType; + rollData.res.label = flagData.res.label + " (" + (game as Game).i18n.localize(`midgard5.chat.${type}`) + ")"; + actor.update({ + system: { + [target]: actor.system[target] - 1, + }, + }); + if (type !== "modify") { + for (var key in flagData.rolls) { + if (!!flagData.rolls[key]) { + rollData.rolls[key] = { + formula: flagData.rolls[key]?.formula, + enabled: flagData.rolls[key]?.enabled, + label: flagData.rolls[key]?.label, + result: "", + total: 0, + totalStr: "", + dice: {}, + css: "", + } as M5RollResult; + } + } + } else { + for (var key in flagData.rolls) { + if (!!flagData.rolls[key]) { + rollData.rolls[key] = { + formula: key === "0" ? flagData.rolls[key]?.result + " + 2" : flagData.rolls[key]?.result, + enabled: flagData.rolls[key]?.enabled, + label: flagData.rolls[key]?.label, + result: "", + total: 0, + totalStr: "", + dice: {}, + css: "", + } as M5RollResult; + } + } + } + + const newRoll = new M5Roll(rollData, actor, rollData.res.label); + if (!newRoll._evaluated) await newRoll.evaluate(); + + const chatData = { + type: CONST.CHAT_MESSAGE_TYPES.ROLL, + content: await newRoll.render(), + speaker: ChatMessage.getSpeaker({ actor: actor }), + sound: CONFIG.sounds.dice, + roll: Roll.fromTerms([newRoll.pool]), + flags: { rerolled: true }, + }; + + message.update(chatData); + } +}; diff --git a/templates/chat/reroll-dialog.hbs b/templates/chat/reroll-dialog.hbs new file mode 100644 index 0000000..a1b9583 --- /dev/null +++ b/templates/chat/reroll-dialog.hbs @@ -0,0 +1,18 @@ +
+
+ +
+ +
+
+ {{localize "midgard5.destiny"}}: + {{sg}} +
+
+ {{localize "midgard5.luckPoints"}}: + {{gp}} +
+
+
+
+
\ No newline at end of file diff --git a/templates/chat/task-check-dialog.hbs b/templates/chat/task-check-dialog.hbs index 74482ce..fe969f5 100644 --- a/templates/chat/task-check-dialog.hbs +++ b/templates/chat/task-check-dialog.hbs @@ -1,20 +1,20 @@
-
- - -
-
- - -
- {{#if hasFortune}} -
- - -
- {{/if}} -
- - -
+
+ + +
+
+ + +
+
+ + +
\ No newline at end of file