Merge branch 'develop'

This commit is contained in:
Byroks 2024-03-29 14:33:58 +01:00
commit 58c8d814e3
30 changed files with 1689 additions and 683 deletions

View File

@ -12,375 +12,442 @@
"TYPES.Item.effect": "Aktiver Effekt", "TYPES.Item.effect": "Aktiver Effekt",
"TYPES.Item.kampfkunst": "Kampfkunst", "TYPES.Item.kampfkunst": "Kampfkunst",
"TYPES.Item.container": "Aufbewahrung", "TYPES.Item.container": "Aufbewahrung",
"TYPES.Item.class": "Klasse",
"midgard5.phase-action": "Handlungsphase", "midgard5": {
"midgard5.phase-movement": "Bewegungsphase", "phase-action": "Handlungsphase",
"midgard5.no-encounter": "Kein Kampf", "phase-movement": "Bewegungsphase",
"midgard5.encounter-not-started": "Kein aktiver Kampf", "no-encounter": "Kein Kampf",
"midgard5.initiative": "Handlungsrang", "encounter-not-started": "Kein aktiver Kampf",
"initiative": "Initiative",
"actionrank": "Handlungsrang",
"midgard5.combat-join": "Kampf Beitreten/Handlungsrang zurücksetzen", "combat-join": "Kampf Beitreten/Handlungsrang zurücksetzen",
"midgard5.combat-ranged": "Fernangriff", "combat-ranged": "Fernangriff",
"midgard5.combat-spell": "Zaubern (10 Sec)", "combat-spell": "Zaubern (10 Sec)",
"midgard5.time-duration": "Dauer", "time-duration": "Dauer",
"midgard5.time-round": "Runde(n)", "time-round": "Runde(n)",
"midgard5.time-minute": "Minute(n)", "time-minute": "Minute(n)",
"midgard5.time-hour": "Stunde(n)", "time-hour": "Stunde(n)",
"midgard5.time-limitless": "Unbegrenzt", "time-limitless": "Unbegrenzt",
"midgard5.doRoll": "Würfeln", "doRoll": "Würfeln",
"midgard5.learn": "Lernen", "learn": "Lernen",
"midgard5.label": "Bezeichnung", "label": "Bezeichnung",
"midgard5.description": "Beschreibung", "description": "Beschreibung",
"midgard5.Characteristic": "Merkmal", "Characteristic": "Merkmal",
"midgard5.characteristics": "Merkmale", "characteristics": "Merkmale",
"midgard5.background": "Hintergrund", "background": "Hintergrund",
"midgard5.attribute": "Eigenschaft", "attribute": "Eigenschaft",
"midgard5.attributes": "Eigenschaften", "attributes": "Eigenschaften",
"midgard5.points": "Punkte", "points": "Punkte",
"midgard5.calculated-value": "Berechneter Wert", "calculated-value": "Berechneter Wert",
"midgard5.calculated-values": "Sonstige Werte", "calculated-values": "Werte und Boni",
"midgard5.skill": "Fertigkeit", "skill": "Fertigkeit",
"midgard5.skill-value": "Fertigkeitswert", "skill-value": "Fertigkeitswert",
"midgard5.fw": "FW", "fw": "FW",
"midgard5.bonus": "Bonus", "bonus": "Bonus",
"midgard5.bonuses": "Boni", "bonuses": "Boni",
"midgard5.ew": "EW", "ew": "EW",
"midgard5.pp-short": "PP", "pp-short": "PP",
"midgard5.pp": "Praxispunkte", "pp": "Praxispunkte",
"midgard5.item-value": "Wert", "item-value": "Wert",
"midgard5.item-quantity": "Menge", "item-quantity": "Menge",
"midgard5.item-onbody": "Am Körper", "item-onbody": "Am Körper",
"midgard5.item-ismagic": "Ist Magisch", "item-ismagic": "Ist Magisch",
"midgard5.item-wealth": "Vermögenswert", "item-wealth": "Vermögenswert",
"midgard5.item-weight": "Gewicht", "item-weight": "Gewicht",
"midgard5.actor-lp": "Lebenspunkte", "actor-lp": "Lebenspunkte",
"midgard5.actor-lp-short": "LP", "actor-lp-short": "LP",
"midgard5.actor-ap": "Ausdauerpunkte", "actor-ap": "Ausdauerpunkte",
"midgard5.actor-ap-short": "AP", "actor-ap-short": "AP",
"midgard5.actor-st": "St", "actor-st": "St",
"midgard5.actor-st-long": "Stärke", "actor-st-long": "Stärke",
"midgard5.actor-ko": "Ko", "actor-ko": "Ko",
"midgard5.actor-ko-long": "Konstitution", "actor-ko-long": "Konstitution",
"midgard5.actor-au": "Au", "actor-au": "Au",
"midgard5.actor-au-long": "Aussehen", "actor-au-long": "Aussehen",
"midgard5.actor-gs": "Gs", "actor-gs": "Gs",
"midgard5.actor-gs-long": "Geschicklichkeit", "actor-gs-long": "Geschicklichkeit",
"midgard5.actor-in": "In", "actor-in": "In",
"midgard5.actor-in-long": "Intelligenz", "actor-in-long": "Intelligenz",
"midgard5.actor-pa": "pA", "actor-pa": "pA",
"midgard5.actor-pa-long": "persönliche Ausstrahlung", "actor-pa-long": "persönliche Ausstrahlung",
"midgard5.actor-gw": "Gw", "actor-gw": "Gw",
"midgard5.actor-gw-long": "Gewandtheit", "actor-gw-long": "Gewandtheit",
"midgard5.actor-zt": "Zt", "actor-zt": "Zt",
"midgard5.actor-zt-long": "Zaubertalent", "actor-zt-long": "Zaubertalent",
"midgard5.actor-wk": "Wk", "actor-wk": "Wk",
"midgard5.actor-wk-long": "Willenskraft", "actor-wk-long": "Willenskraft",
"midgard5.actor-git": "GiT", "actor-git": "GiT",
"midgard5.actor-git-long": "Gifttolleranz", "actor-git-long": "Gifttolleranz",
"midgard5.aktuell": "Akt.", "aktuell": "Akt.",
"midgard5.maximum": "Max.", "maximum": "Max.",
"midgard5.attrvalue": "Wert", "attrvalue": "Wert",
"midgard5.movementRange": "Bewegungsweite", "movementRange": "Bewegungsweite",
"midgard5.base_values": "Grundwerte", "base_values": "Grundwerte",
"midgard5.skills": "Fertigkeiten", "skills": "Fertigkeiten",
"midgard5.gear": "Ausrüstung", "gear": "Ausrüstung",
"midgard5.spells": "Zauber", "spells": "Zauber",
"midgard5.effects": "Aktive Effekte", "effects": "Aktive Effekte",
"midgard5.kampfkuenste": "Kampfkünste", "kampfkuenste": "Kampfkünste",
"midgard5.combat": "Kampf", "combat": "Kampf",
"midgard5.actor-name": "Figur", "actor-name": "Figur",
"midgard5.level": "Grad", "level": "Grad",
"midgard5.class": "Typ", "class": "Typ",
"midgard5.race": "Rasse", "race": "Rasse",
"midgard5.magicUsing": "Zauberkundig", "magicUsing": "Zauberkundig",
"midgard5.gender": "Geschlecht", "gender": "Geschlecht",
"midgard5.weight": "Gewicht", "weight": "Gewicht",
"midgard5.height": "Größe", "height": "Größe",
"midgard5.shape": "Gestalt", "shape": "Gestalt",
"midgard5.age": "Alter", "age": "Alter",
"midgard5.caste": "Stand", "caste": "Stand",
"midgard5.occupation": "Beruf", "occupation": "Beruf",
"midgard5.origin": "Heimat", "origin": "Heimat",
"midgard5.faith": "Glaube", "faith": "Glaube",
"midgard5.currency": "Geld", "currency": "Geld",
"midgard5.currency-gold": "Gold", "currency-gold": "Gold",
"midgard5.currency-silver": "Silber", "currency-silver": "Silber",
"midgard5.currency-copper": "Kupfer", "currency-copper": "Kupfer",
"midgard5.currency-wealth": "Vermögen in GS", "currency-wealth": "Vermögen in GS",
"midgard5.currency-available": "verfügbares Vermögen", "currency-available": "verfügbares Vermögen",
"midgard5.hoard": "aktueller Hort", "hoard": "aktueller Hort",
"midgard5.hoardMin": "benötigter Mindesthort", "hoardMin": "benötigter Mindesthort",
"midgard5.hoard-next": "Hort für nächsten Grad", "hoard-next": "Hort für nächsten Grad",
"midgard5.hoarded": "Hort", "hoarded": "Hort",
"midgard5.no-container": "Ohne", "no-container": "Ohne",
"midgard5.encumbrance": "Getragene Last", "encumbrance": "Getragene Last",
"midgard5.load": "Normallast", "load": "Normallast",
"midgard5.heavy-load": "Schwere Last", "heavy-load": "Schwere Last",
"midgard5.thrust-load": "Schublast", "thrust-load": "Schublast",
"midgard5.load-max": "Höchstlast", "load-max": "Höchstlast",
"midgard5.load-capacity": "Tragkraft", "load-capacity": "Tragkraft",
"midgard5.exp-overall": "Erfahrungsschatz", "exp-overall": "Erfahrungsschatz",
"midgard5.exp-available": "Erfahrungspunkte", "exp-available": "Erfahrungspunkte",
"midgard5.grace": "Göttliche Gnade", "grace": "Göttliche Gnade",
"midgard5.destiny": "Schicksalsgunst", "destiny": "Schicksalsgunst",
"midgard5.luckPoints": "Glückspunkte", "luckPoints": "Glückspunkte",
"midgard5.abrichten": "Abrichten", "abrichten": "Abrichten",
"midgard5.akrobatik": "Akrobatik", "akrobatik": "Akrobatik",
"midgard5.alchimie": "Alchimie", "alchimie": "Alchimie",
"midgard5.anfuehren": "Anführen", "anfuehren": "Anführen",
"midgard5.askese": "Askese", "askese": "Askese",
"midgard5.astrologie": "Astrologie", "astrologie": "Astrologie",
"midgard5.athletik": "Athletik", "athletik": "Athletik",
"midgard5.balancieren": "Balancieren", "balancieren": "Balancieren",
"midgard5.beidhaendigerKampf": "Beidhändiger Kampf", "beidhaendigerKampf": "Beidhändiger Kampf",
"midgard5.bergreiten": "Bergreiten", "bergreiten": "Bergreiten",
"midgard5.beredsamkeit": "Beredsamkeit", "beredsamkeit": "Beredsamkeit",
"midgard5.betaeuben": "Betäuben", "betaeuben": "Betäuben",
"midgard5.betaeubungsgriff": "Betäubungsgriff", "betaeubungsgriff": "Betäubungsgriff",
"midgard5.bootfahren": "Bootfahren", "bootfahren": "Bootfahren",
"midgard5.dickhaeuterLenken": "Dickhäuter lenken", "dickhaeuterLenken": "Dickhäuter lenken",
"midgard5.ersteHilfe": "Erste Hilfe", "ersteHilfe": "Erste Hilfe",
"midgard5.etikette": "Etikette", "etikette": "Etikette",
"midgard5.fallenEntdecken": "Fallen entdecken", "fallenEntdecken": "Fallen entdecken",
"midgard5.fallenmechanik": "Fallenmechanik", "fallenmechanik": "Fallenmechanik",
"midgard5.faelschen": "Fälschen", "faelschen": "Fälschen",
"midgard5.fangen": "Fangen", "fangen": "Fangen",
"midgard5.fechten": "Fechten", "fechten": "Fechten",
"midgard5.feueralchimie": "Feueralchimie", "fechtkunst": "Fechtkunst",
"midgard5.gassenwissen": "Gassenwissen", "feueralchimie": "Feueralchimie",
"midgard5.gaukeln": "Gaukeln", "gassenwissen": "Gassenwissen",
"midgard5.gelaendelauf": "Geländelauf", "gaukeln": "Gaukeln",
"midgard5.geraetekunde": "Gerätekunde", "gelaendelauf": "Geländelauf",
"midgard5.geschaeftssinn": "Geschäftssinn", "geraetekunde": "Gerätekunde",
"midgard5.gluecksspiel": "Glücksspiel", "geschaeftssinn": "Geschäftssinn",
"midgard5.heilkunde": "Heilkunde", "gluecksspiel": "Glücksspiel",
"midgard5.kampfInVollruestung": "Kampf in Vollrüstung", "heilkunde": "Heilkunde",
"midgard5.kampfInSchlachtreihe": "Kampf in Schlachtreihe", "kampfInVollruestung": "Kampf in Vollrüstung",
"midgard5.kampfkunst": "Kampfkunst", "kampfInSchlachtreihe": "Kampf in Schlachtreihe",
"midgard5.kido": "Kido", "kampfkunst": "Kampfkunst",
"midgard5.klettern": "Klettern", "kido": "Kido",
"midgard5.landeskunde": "Landeskunde", "klettern": "Klettern",
"midgard5.laufen": "Laufen", "landeskunde": "Landeskunde",
"midgard5.lesenVonZauberschrift": "Lesen von Zauberschrift", "laufen": "Laufen",
"midgard5.lesenVonZauberrunen": "Lesen von Zauberrunen", "lesenVonZauberschrift": "Lesen von Zauberschrift",
"midgard5.meditieren": "Meditieren", "lesenVonZauberrunen": "Lesen von Zauberrunen",
"midgard5.menschenkenntnis": "Menschenkenntnis", "meditieren": "Meditieren",
"midgard5.meucheln": "Meucheln", "menschenkenntnis": "Menschenkenntnis",
"midgard5.musizieren": "Musizieren", "meucheln": "Meucheln",
"midgard5.naturkunde": "Naturkunde", "musizierenFloete": "Musizieren (Flöten)",
"midgard5.ninjutsu": "NinJutsu", "musizierenBlas": "Musizieren (Blasinstrumente)",
"midgard5.orakelkunst": "Orakelkunst", "musizierenRythmus": "Musizieren (Rythmusinstrumente)",
"midgard5.pflanzenkunde": "Pflanzenkunde", "musizierenStreich": "Musizieren (Streichinstrumente)",
"midgard5.raunen": "Raunen", "musizierenZupf": "Musizieren (Zupfinstrumente)",
"midgard5.reiten": "Reiten", "naturkunde": "Naturkunde",
"midgard5.reiterkampf": "Reiterkampf", "ninjutsu": "NinJutsu",
"midgard5.rutengehen": "Rutengehen", "orakelkunst": "Orakelkunst",
"midgard5.scharfschiessen": "Scharfschießen", "pflanzenkunde": "Pflanzenkunde",
"midgard5.schiesskunst": "Schießkunst", "raunen": "Raunen",
"midgard5.schleichen": "Schleichen", "reiten": "Reiten",
"midgard5.schloesserOeffnen": "Schlösser öffnen", "reiterkampf": "Reiterkampf",
"midgard5.schmerzErtragen": "Schmerzen ertragen", "rutengehen": "Rutengehen",
"midgard5.schwimmen": "Schwimmen", "scharfschiessen": "Scharfschießen",
"midgard5.seilkunst": "Seilkunst", "schiesskunst": "Schießkunst",
"midgard5.selbstkontrolle": "Selbstkontrolle", "schleichen": "Schleichen",
"midgard5.singen": "Singen", "schloesserOeffnen": "Schlösser öffnen",
"midgard5.skifahren": "Skifahren", "schmerzErtragen": "Schmerzen ertragen",
"midgard5.spinnengang": "Spinnengang", "schwimmen": "Schwimmen",
"midgard5.speerfechten": "Speerfechten", "seilkunst": "Seilkunst",
"midgard5.spurensuche": "Spurensuche", "selbstkontrolle": "Selbstkontrolle",
"midgard5.stehlen": "Stehlen", "singen": "Singen",
"midgard5.taitschi": "TaiTschi", "skifahren": "Skifahren",
"midgard5.tarnen": "Tarnen", "spinnengang": "Spinnengang",
"midgard5.tanzen": "Tanzen", "speerfechten": "Speerfechten",
"midgard5.tauchen": "Tauchen", "spurensuche": "Spurensuche",
"midgard5.thaumagraphie": "Thaumagraphie", "stehlen": "Stehlen",
"midgard5.thaumalogie": "Thaumalogie", "taitschi": "TaiTschi",
"midgard5.tierkunde": "Tierkunde", "tarnen": "Tarnen",
"midgard5.ueberleben": "Überleben", "tanzen": "Tanzen",
"midgard5.verfuehren": "Verführen", "tauchen": "Tauchen",
"midgard5.verhoeren": "Verhören", "thaumagraphie": "Thaumagraphie",
"midgard5.verstellen": "Verstellen", "thaumalogie": "Thaumalogie",
"midgard5.volkstanz": "Volkstanz", "tierkunde": "Tierkunde",
"midgard5.wagenlenken": "Wagenlenken", "ueberlebenWald": "Überleben (Wald)",
"midgard5.wahrsagen": "Wahrsagen", "ueberlebenSteppe": "Überleben (Steppe)",
"midgard5.wasserkampf": "Wasserkampf", "ueberlebenGebirge": "Überleben (Gebirge)",
"midgard5.zauberkunde": "Zauberkunde", "verfuehren": "Verführen",
"verhoeren": "Verhören",
"verstellen": "Verstellen",
"volkstanz": "Volkstanz",
"wagenlenken": "Wagenlenken",
"wahrsagen": "Wahrsagen",
"wasserkampf": "Wasserkampf",
"zauberkunde": "Zauberkunde",
"midgard5.armor": "Rüstung", "armor": "Rüstung",
"midgard5.defense": "Abwehr", "defense": "Abwehr",
"midgard5.damageBonus": "Schadensbonus", "damageBonus": "Schadensbonus",
"midgard5.damageBonus-short": "SchB", "damageBonus-short": "SchB",
"midgard5.attackBonus": "Angriffsbonus", "attackBonus": "Angriffsbonus",
"midgard5.attackBonus-short": "AnB", "attackBonus-short": "AnB",
"midgard5.defenseBonus": "Abwehrbonus", "defenseBonus": "Abwehrbonus",
"midgard5.defenseBonus-short": "AbB", "defenseBonus-short": "AbB",
"midgard5.movementBonus": "Bewegunsbonus", "movementBonus": "Bewegunsbonus",
"midgard5.resistanceMind": "Resistenz Geist", "resistanceMind": "Resistenz Geist",
"midgard5.resistanceBody": "Resistenz Körper", "resistanceBody": "Resistenz Körper",
"midgard5.spellCasting": "Zaubern", "spellCasting": "Zaubern",
"midgard5.spellBonus": "Zauberbonus", "spellBonus": "Zauberbonus",
"midgard5.brawl": "Raufen", "brawl": "Raufen",
"midgard5.poisonResistance": "Gifttolleranz", "poisonResistance": "Gifttolleranz",
"midgard5.enduranceBonus": "Ausdauerbonus", "enduranceBonus": "Ausdauerbonus",
"midgard5.lpProtection": "Rüstungsschutz (LP)", "lpProtection": "Rüstungsschutz (LP)",
"midgard5.apProtection": "Rüstungsschutz (AP)", "apProtection": "Rüstungsschutz (AP)",
"midgard5.perception": "Wahrnehmung", "deprivation": "Zähigkeit",
"midgard5.drinking": "Trinken", "deprivations": "Entbehrungen",
"deprivationCold": "Zähigkeit Kälte",
"deprivationHeat": "Zähigkeit Hitze",
"deprivationFood": "Zähigkeit Durst/Hunger",
"midgard5.new-skill": "Neue Fertigkeit", "new-skill": "Neue Fertigkeit",
"midgard5.special": "Spezial", "special": "Spezial",
"midgard5.learned-skill": "Gelernte Fertigkeit", "learned-skill": "Gelernte Fertigkeit",
"midgard5.learned-skills": "Gelernte Fertigkeiten", "learned-skills": "Gelernte Fertigkeiten",
"midgard5.language": "Sprache", "language": "Sprache",
"midgard5.languages": "Sprachen", "languages": "Sprachen",
"midgard5.weapon-skill": "Waffenfertigkeit", "writings": "Schriften",
"midgard5.weapon-skills": "Waffenfertigkeiten", "weapon-skill": "Waffenfertigkeit",
"midgard5.unlearned-skill": "Ungelernte Fertigkeit", "weapon-skills": "Waffenfertigkeiten",
"midgard5.unlearned-skills": "Ungelernte Fertigkeiten", "unlearned-skill": "Ungelernte Fertigkeit",
"midgard5.innate-ability": "Angeborene/Besondere Fertigkeit", "unlearned-skills": "Ungelernte Fertigkeiten",
"midgard5.innate-abilities": "Angeborene/Besondere Fertigkeit", "innate-ability": "Angeborene/Besondere Fähigkeit",
"innate-abilities": "Angeborene und besondere Fähigkeiten",
"midgard5.base-damage": "Grundschaden", "base-damage": "Grundschaden",
"midgard5.weapon": "Waffe", "weapon": "Waffe",
"midgard5.weapons": "Waffen", "weapons": "Waffen",
"midgard5.defensive-weapon": "Verteidigungswaffe", "defensive-weapon": "Verteidigungswaffe",
"midgard5.defensive-weapons": "Verteidigungswaffen", "defensive-weapons": "Verteidigungswaffen",
"midgard5.no-skill": "Keine Fertigkeit", "no-skill": "Keine Fertigkeit",
"midgard5.magic": "magisch", "magic": "magisch",
"midgard5.valuable": "Vermögen", "valuable": "Vermögen",
"midgard5.equipped": "Ausgerüstet", "equipped": "Ausgerüstet",
"midgard5.active": "Aktiv", "active": "Aktiv",
"midgard5.rangedWeapon": "Schusswaffe", "rangedWeapon": "Schusswaffe",
"midgard5.assignItemToCharacter": "Füge Gegenstand einem Charakter hinzu, um hier etwas auswählen zu können", "assignItemToCharacter": "Füge Gegenstand einem Charakter hinzu, um hier etwas auswählen zu können",
"midgard5.showAll": "Alle anzeigen", "showAll": "Alle anzeigen",
"midgard5.wealthAndWeight": "Vermögen und Lasten", "wealthAndWeight": "Vermögen und Lasten",
"midgard5.itemsInContainers": "Gegenstände in Aufbewahrung", "itemsInContainers": "Gegenstände in Aufbewahrung",
"midgard5.allItems": "Alle Gegenstände", "allItems": "Alle Gegenstände",
"midgard5.pw": "Prüfwurf", "pw": "Prüfwurf",
"midgard5.attack": "Angriff", "attack": "Angriff",
"midgard5.damage": "Schaden", "damage": "Schaden",
"midgard5.spell-process-none": "Ohne", "skill-goup-alltag": "Alltag",
"midgard5.spell-process-beherrschen": "Beherrschen", "skill-goup-freiland": "Freiland",
"midgard5.spell-process-bewegen": "Bewegen", "skill-goup-halbwelt": "Halbwelt",
"midgard5.spell-process-blutzauber": "Blutmagie", "skill-goup-kampf": "Kampf",
"midgard5.spell-process-chaoswunder": "Chaoswunder", "skill-goup-koerper": "Körper",
"midgard5.spell-process-erkennen": "Erkennen", "skill-goup-sozial": "Sozial",
"midgard5.spell-process-erschaffen": "Erschaffen", "skill-goup-unterwelt": "Unterwelt",
"midgard5.spell-process-formen": "Formen", "skill-goup-waffen": "Waffen",
"midgard5.spell-process-finstere_magie": "Finstere Magie", "skill-goup-wissen": "Wissen",
"midgard5.spell-process-veraendern": "Verändern",
"midgard5.spell-process-zerstoeren": "Zerstören",
"midgard5.spell-process-wundertat": "Wundertat",
"midgard5.spell-process-dweomer": "Dweomer",
"midgard5.spell-process-wilder_Dweomer": "Wilder Dweomer",
"midgard5.spell-process-zauberlied": "Zauberlied",
"midgard5.spell-process-salz": "Salz",
"midgard5.spell-process-thaumagraphie": "Thaumagraphie",
"midgard5.spell-process-beschwoeren": "Beschwören",
"midgard5.spell-process-nekromantie": "Nekromantie",
"midgard5.spell-process-thaumatherapie": "Thaumatherapie",
"midgard5.spell-process-zaubermittel": "Zaubermittel",
"midgard5.spell-process-zauberschutz": "Zauberschutz",
"midgard5.spell-process-zauberrunen": "Zauberrunen",
"midgard5.spell-process-zaubersiegel": "Zaubersiegel",
"midgard5.spell-type-gedanke": "Gedanke", "spell-process-none": "Ohne",
"midgard5.spell-type-geste": "Geste", "spell-process-artefakte": "Artefakte",
"midgard5.spell-type-wort": "Wort", "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-thaumagraphie": "Thaumagraphie",
"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-target-umgebung": "Umgebung", "spell-type-gedanke": "Gedanke",
"midgard5.spell-target-geist": "Geist", "spell-type-geste": "Geste",
"midgard5.spell-target-koerper": "Körper", "spell-type-wort": "Wort",
"midgard5.spell-type": "Art", "spell-target-umgebung": "Umgebung",
"midgard5.spell-process": "Prozess", "spell-target-geist": "Geist",
"midgard5.spell-castDuration": "Zauberdauer", "spell-target-koerper": "Körper",
"midgard5.spell-range": "Reichweite",
"midgard5.spell-effectTarget": "Wirkunsziel",
"midgard5.spell-effectArea": "Wirkungsbereich",
"midgard5.spell-effectDuration": "Wirkungsdauer",
"midgard5.spell-origin": "Ursprung",
"midgard5.spell-agens": "Agens",
"midgard5.spell-reagens": "Reagens",
"midgard5.spell-material": "Zaubermaterial",
"midgard5.kampfkunst-type": "Kampfkunst Art", "spell-type": "Art",
"midgard5.kampfkunst-variante": "Kampfkunst Variante", "spell-process": "Prozess",
"midgard5.kampfkunst-variante-short": "Var", "spell-castDuration": "Zauberdauer",
"midgard5.kido-type": "Kido Art", "spell-castDuration-short": "Zd",
"midgard5.kido-variante": "Kido Variante", "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-angriff": "Angriffstechnik", "kampfkunst-type": "Form",
"midgard5.kampfkunst-type-verteidigung": "Verteidigungstechnik", "kampfkunst-variante": "Variante",
"midgard5.kampfkunst-type-finte": "Finte", "kampfkunst-variante-short": "Var",
"midgard5.kampfkunst-type-geist": "Geistestechnik", "kampfkunst-ep": "Erfahrungspunkte",
"midgard5.kampfkunst-type-schießkunst": "Schießkunst", "kampfkunst-rank": "Stufe",
"midgard5.kampfkunst-type-fechten": "Fechtkunst", "kampfkunst-weapon": "Waffengruppe",
"midgard5.kido-type-angriff": "Kido Angriffstechnik", "kampfkunst-enemy": "Einschränkungen durch Art der Gegner",
"midgard5.kido-type-verteidigung": "Kido Verteidigungstechnik",
"midgard5.kido-type-finte": "Kido Finte",
"midgard5.kido-type-leib": "Kido Leibestechnik",
"midgard5.kampfkunst-variante-anstuermen": "Anstürmen", "kampfkunst-type-angriff": "Angriff",
"midgard5.kampfkunst-variante-attackieren": "Attackieren", "kampfkunst-type-verteidigung": "Verteidigung",
"midgard5.kampfkunst-variante-entwaffnen": "Entwaffnen", "kampfkunst-type-finte": "Finte",
"kampfkunst-type-geist": "Geistestechnik",
"kampfkunst-type-schießkunst": "Schießkunst",
"kampfkunst-type-fechtkunst": "Fechtkunst",
"midgard5.kido-variante-anspringen": "Anspringen", "kampfkunst-variante-anstuermen": "Anstürmen",
"midgard5.kido-variante-attackieren": "Attackieren", "kampfkunst-variante-attackieren": "Attackieren",
"midgard5.kido-variante-entwaffnen": "Entwaffnen", "kampfkunst-variante-entwaffnen": "Entwaffnen",
"midgard5.kido-variante-werfen": "Werfen", "kampfkunst-variante-fechten": "Fechten",
"midgard5.kido-variante-ausweichen": "Ausweichen", "kampfkunst-variante-schusstechnik": "Schusstechnik",
"midgard5.kido-variante-blockieren": "Blockieren", "kampfkunst-variante-finten": "Finten",
"midgard5.kido-variante-bewegen": "Bewegen", "kampfkunst-variante-geistestechnik": "Geistestechnik",
"midgard5.kido-variante-kontrollieren": "Kontrollieren", "kampfkunst-variante-verteidigung": "Verteidigung",
"midgard5.mod-operation-add100": "Addieren (max 100)", "kido-type": "KiDo Form",
"midgard5.mod-operation-roll": "Wurf Modifikation", "kido-variante": "KiDo Variante",
"midgard5.mod-operation-add": "Addieren", "kido-color": "Kampfstilfarbe",
"midgard5.mod-operation-set": "Basiswert", "kido-style": "Art der Technik",
"midgard5.mod-operation-fixed": "Fester Wert",
"midgard5.mod-operation-subtract": "Subtrahieren",
"midgard5.mod-operation-multiply": "Multiplizieren",
"midgard5.mod-operation-division": "Dividieren",
"midgard5.mod-stat-defenseBonus": "Abwehrbonus", "kido-type-angriff": "Kido Angriff",
"midgard5.mod-stat-attackBonus": "Angriffsbonus", "kido-type-verteidigung": "Kido Verteidigung",
"midgard5.mod-stat-damageBonus": "Schadensbonus", "kido-type-finte": "Kido Finte",
"midgard5.mod-stat-movement": "Bewegung", "kido-type-leib": "Kido Leibestechnik",
"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",
"midgard5.mod-type": "Typ der Modifikation", "kido-variante-anspringen": "Anspringen",
"midgard5.mod-id": "Was soll modifiziert werden", "kido-variante-attackieren": "Attackieren",
"midgard5.mod-operation": "Wie soll modifiziert werden", "kido-variante-entwaffnen": "Entwaffnen",
"midgard5.mod-value": "Wert", "kido-variante-werfen": "Werfen",
"kido-variante-ausweichen": "Ausweichen",
"kido-variante-blockieren": "Blockieren",
"kido-variante-bewegen": "Bewegen",
"kido-variante-kontrollieren": "Kontrollieren",
"midgard5.type": "Typ", "mod-operation-add100": "Addieren (max 100)",
"midgard5.formula": "Formel", "mod-operation-roll": "Wurf Modifikation",
"midgard5.roll": "Wurf" "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",
"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-deprivationCold": "Entbehrungen Kälte",
"mod-stat-deprivationHeat": "Entbehrungen Hitze",
"mod-stat-deprivationFood": "Entbehrungen Durst/Hunger",
"mod-type": "Typ der Modifikation",
"mod-id": "Was soll modifiziert werden",
"mod-operation": "Wie soll modifiziert werden",
"mod-value": "Wert",
"type": "Typ",
"formula": "Formel",
"roll": "Wurf",
"chat": {
"luckPoint": "Glückspunkt",
"destiny": "Schicksalsgunst",
"modify": "Nachträglich",
"cancel": "Abbrechen",
"roll": "Würfeln",
"reroll": "Neuwürfeln",
"options": {
"modifier": "Modifikator",
"difficulty": "Schwellenwert",
"rollMode": "Würfel Modus"
}
}
}
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "foundry-system-midgard5", "name": "foundry-system-midgard5",
"version": "2.5.0", "version": "2.6.0",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

114
source/helpers.ts Normal file
View File

@ -0,0 +1,114 @@
/* global Handlebars, game, TextEditor, WOD5E */
import { M5Skill } from "./module/M5Base";
import { M5Character } from "./module/actors/M5Character";
/**
* Define any helpers necessary for working with Handlebars
* @return {Promise}
*/
export const loadHelpers = async function () {
Handlebars.registerHelper("times", (n: number, block) => {
var accum = "";
for (let i = 0; i < n; ++i) accum += block.fn(i);
return accum;
});
Handlebars.registerHelper("array", (arr: any[], index: number) => {
return arr[index];
});
Handlebars.registerHelper("m5concat", (...values) => {
const options = values.pop();
const join = options.hash?.join || "";
//return new Handlebars.SafeString(values.join(join));
return values.map((val) => val.toString()).join(join);
});
Handlebars.registerHelper("add", (...values) => {
const options = values.pop();
return values.reduce((prev, cur) => prev + cur);
});
Handlebars.registerHelper("localizeMidgard", (str: string) => {
const template = Handlebars.compile("{{localize value}}");
return template({
value: "midgard5." + str,
});
});
Handlebars.registerHelper("skillBonus", (actorId: string, skill: M5Skill) => {
const actor = (game as Game).actors.get(actorId) as M5Character;
return actor.skillBonus(skill).toString();
});
Handlebars.registerHelper("skillEw", (actorId: string, skill: M5Skill) => {
const actor = (game as Game).actors.get(actorId) as M5Character;
return actor.skillEw(skill).toString();
});
Handlebars.registerHelper("skill", (skillId: string) => {
return (game as Game).items.get(skillId);
});
Handlebars.registerHelper("itemValue", (id: string, path: string) => {
let obj = (game as Game).items.get(id);
path.split(".").forEach((p) => (obj = obj[p]));
return `${obj}`;
});
Handlebars.registerHelper("actorItemValue", (actorId: any, itemId: string, path: string, token?: boolean) => {
//console.log("actorItemValue", actorId, itemId, path)
const actor = (game as Game).actors.get(actorId);
let obj = actor.items.get(itemId)?.system;
path.split(".").forEach((p) => {
if (obj) obj = obj[p];
});
return `${obj}`;
});
Handlebars.registerHelper("icon", (relpath: string) => {
return `systems/midgard5/assets/icons/${relpath}`;
});
Handlebars.registerHelper("isSkillInList", (skillName: string, list: any) => {
for (let key in list) {
if (list[key]?.label?.toLowerCase() === skillName?.toLowerCase()) {
return true;
}
}
return false;
});
Handlebars.registerHelper("skillEwInList", (skillName: string, list: any) => {
for (let key in list) {
if (list[key]?.label?.toLowerCase() === skillName?.toLowerCase()) {
return list[key].calc.ew;
}
}
return false;
});
Handlebars.registerHelper("stripHtml", function (param) {
var regex = /(<([^>]+)>)/gi;
return param.replace(regex, "");
});
Handlebars.registerHelper("contains", (label: string, contains: string) => {
return label.toLowerCase().includes(contains.toLowerCase());
});
Handlebars.registerHelper("count", (object: any) => {
var length = 0;
for (var key in object) {
if (object.hasOwnProperty(key)) {
++length;
}
}
return length;
});
Handlebars.registerHelper("console", (object: any) => {
console.log(object);
});
};

View File

@ -2,103 +2,18 @@ import Logger from "./utils/Logger";
import M5CharacterSheet from "./module/sheets/M5CharacterSheet"; import M5CharacterSheet from "./module/sheets/M5CharacterSheet";
import preloadTemplates from "./PreloadTemplates"; import preloadTemplates from "./PreloadTemplates";
import { M5Character } from "./module/actors/M5Character"; import { M5Character } from "./module/actors/M5Character";
import { M5ItemMod, M5ModOperation, M5Skill, M5TimeUnit } from "./module/M5Base"; import { M5ModOperation, M5TimeUnit } from "./module/M5Base";
import { M5ItemSheet } from "./module/sheets/M5ItemSheet"; import { M5ItemSheet } from "./module/sheets/M5ItemSheet";
import { M5Item } from "./module/items/M5Item"; import { M5Item } from "./module/items/M5Item";
import { reroll } from "./module/rolls/reroll";
import { loadHelpers } from "./helpers";
import { loadSettings } from "./settings";
Hooks.once("init", async () => { Hooks.once("init", async () => {
Logger.log("M5 | Initialisierung Midgard 5"); Logger.log("M5 | Initialisierung Midgard 5");
Handlebars.registerHelper("times", (n: number, block) => { // Load settings into Foundry
var accum = ""; loadSettings();
for (let i = 0; i < n; ++i) accum += block.fn(i);
return accum;
});
Handlebars.registerHelper("array", (arr: any[], index: number) => {
return arr[index];
});
Handlebars.registerHelper("m5concat", (...values) => {
const options = values.pop();
const join = options.hash?.join || "";
//return new Handlebars.SafeString(values.join(join));
return values.map((val) => val.toString()).join(join);
});
Handlebars.registerHelper("add", (...values) => {
const options = values.pop();
return values.reduce((prev, cur) => prev + cur);
});
Handlebars.registerHelper("localizeMidgard", (str: string) => {
const template = Handlebars.compile("{{localize value}}");
return template({
value: "midgard5." + str,
});
});
Handlebars.registerHelper("skillBonus", (actorId: string, skill: M5Skill) => {
const actor = (game as Game).actors.get(actorId) as M5Character;
return actor.skillBonus(skill).toString();
});
Handlebars.registerHelper("skillEw", (actorId: string, skill: M5Skill) => {
const actor = (game as Game).actors.get(actorId) as M5Character;
return actor.skillEw(skill).toString();
});
Handlebars.registerHelper("skill", (skillId: string) => {
return (game as Game).items.get(skillId);
});
Handlebars.registerHelper("itemValue", (id: string, path: string) => {
let obj = (game as Game).items.get(id);
path.split(".").forEach((p) => (obj = obj[p]));
return `${obj}`;
});
Handlebars.registerHelper("actorItemValue", (actorId: any, itemId: string, path: string, token?: boolean) => {
//console.log("actorItemValue", actorId, itemId, path)
const actor = (game as Game).actors.get(actorId);
let obj = actor.items.get(itemId)?.system;
path.split(".").forEach((p) => {
if (obj) obj = obj[p];
});
return `${obj}`;
});
Handlebars.registerHelper("icon", (relpath: string) => {
return `systems/midgard5/assets/icons/${relpath}`;
});
Handlebars.registerHelper("isSkillInList", (skillName: string, list: any) => {
for (let key in list) {
if (list[key]?.label?.toLowerCase() === skillName?.toLowerCase()) {
return true;
}
}
return false;
});
Handlebars.registerHelper("stripHtml", function (param) {
var regex = /(<([^>]+)>)/gi;
return param.replace(regex, "");
});
Handlebars.registerHelper("contains", (label: string, contains: string) => {
return label.toLowerCase().includes(contains.toLowerCase());
});
Handlebars.registerHelper("count", (object: any) => {
var length = 0;
for (var key in object) {
if (object.hasOwnProperty(key)) {
++length;
}
}
return length;
});
// Default Sheet für Items definieren und das Standardsheet deaktivieren // Default Sheet für Items definieren und das Standardsheet deaktivieren
Items.unregisterSheet("core", ItemSheet); Items.unregisterSheet("core", ItemSheet);
@ -112,6 +27,8 @@ Hooks.once("init", async () => {
CONFIG.Item.documentClass = M5Item; CONFIG.Item.documentClass = M5Item;
//RegisterSettings(); //RegisterSettings();
await preloadTemplates(); await preloadTemplates();
loadHelpers();
}); });
Hooks.once("setup", () => { Hooks.once("setup", () => {
@ -163,6 +80,17 @@ Hooks.on("getChatLogEntryContext", function (html, options) {
return (game["user"].character || game["canvas"].tokens.controlled) && damageRolls > 0; return (game["user"].character || game["canvas"].tokens.controlled) && damageRolls > 0;
}, },
callback: (li) => applyDamage(li, -2), callback: (li) => applyDamage(li, -2),
},
{
name: "Redo",
icon: '<i class="far fa-arrow-rotate-left"></i>',
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"].isGM || game["user"].character?.id === (game as Game).actors.get(message["speaker"].actor)?.id) && !message["flags"].rerolled;
},
callback: (li) => reroll(li),
} }
); );
}); });

View File

@ -28,8 +28,9 @@ export interface M5Attribute {
export interface M5RollData { export interface M5RollData {
c: any; c: any;
i: any; i: any;
b: any;
iType: string; iType: string;
rolls: {}; rolls: any;
res: { res: {
label: string; label: string;
}; };
@ -103,17 +104,9 @@ export enum M5Stats {
AP = "ap", AP = "ap",
PROTECTION_LP = "lpProtection", PROTECTION_LP = "lpProtection",
PROTECTION_AP = "apProtection", PROTECTION_AP = "apProtection",
PERCEPTION = "perception", DEPRIVATION_COLD = "deprivationCold",
DRINKING = "drinking", DEPRIVATION_HEAT = "deprivationHeat",
HOARD = "hoard", DEPRIVATION_FOOD = "deprivationFood",
HOARD_NEXT = "hoardNext",
HOARD_MIN = "hoardMin",
WEALTH = "wealth",
LOAD = "load",
HEAVY_LOAD = "heavyLoad",
LOAD_MAX = "loadMax",
THRUST_LOAD = "thrustLoad",
ENCUMBRANCE = "encumbrance",
} }
export enum M5ModType { export enum M5ModType {
@ -180,6 +173,7 @@ export interface M5CharacterCalculatedData {
pa: M5AttributeCalculated; pa: M5AttributeCalculated;
wk: M5AttributeCalculated; wk: M5AttributeCalculated;
}; };
stats: { stats: {
lp: M5ModResult; lp: M5ModResult;
ap: M5ModResult; ap: M5ModResult;
@ -197,10 +191,9 @@ export interface M5CharacterCalculatedData {
brawlFw: number; brawlFw: number;
poisonResistance: M5ModResult; poisonResistance: M5ModResult;
enduranceBonus: number; enduranceBonus: number;
perception: M5ModResult; deprivationCold: M5ModResult;
perceptionFW: number; deprivationHeat: M5ModResult;
drinking: M5ModResult; deprivationFood: M5ModResult;
drinkingFW: number;
hoard: number; hoard: number;
hoardNext: number; hoardNext: number;
hoardMin: number; hoardMin: number;

View File

@ -1,18 +1,5 @@
import { M5Item } from "../items/M5Item"; import { M5Item } from "../items/M5Item";
import { import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ItemType, M5ModOperation, M5ModResult, M5RollData, M5Skill, M5SkillCalculated } from "../M5Base";
M5Attribute,
M5CharacterCalculatedData,
M5ItemMod,
M5ItemType,
M5ModOperation,
M5ModResult,
M5ModType,
M5RollData,
M5Skill,
M5SkillCalculated,
M5SkillLearned,
M5SkillType,
} from "../M5Base";
import M5ModAggregate from "./M5ModAggregate"; import M5ModAggregate from "./M5ModAggregate";
export class M5Character extends Actor { export class M5Character extends Actor {
// constructor( // constructor(
@ -94,6 +81,7 @@ export class M5Character extends Actor {
containers?: boolean; containers?: boolean;
kampfkuenste?: boolean; kampfkuenste?: boolean;
encumbrance?: boolean; encumbrance?: boolean;
class?: boolean;
} = {} } = {}
): M5CharacterCalculatedData { ): M5CharacterCalculatedData {
let ret: M5CharacterCalculatedData = { let ret: M5CharacterCalculatedData = {
@ -126,10 +114,9 @@ export class M5Character extends Actor {
brawlFw: 0, brawlFw: 0,
poisonResistance: { value: 0, mods: [] }, poisonResistance: { value: 0, mods: [] },
enduranceBonus: 0, enduranceBonus: 0,
perception: { value: 0, mods: [] }, deprivationCold: { value: 0, mods: [] },
perceptionFW: 0, deprivationHeat: { value: 0, mods: [] },
drinking: { value: 0, mods: [] }, deprivationFood: { value: 0, mods: [] },
drinkingFW: 0,
hoard: 0, hoard: 0,
encumbrance: 0, encumbrance: 0,
load: 0, load: 0,
@ -194,21 +181,16 @@ export class M5Character extends Actor {
ret.stats.attackBonus = this.modResult(ret.attributes.gs.bonus); ret.stats.attackBonus = this.modResult(ret.attributes.gs.bonus);
ret.stats.defenseBonus = this.modResult(ret.attributes.gw.bonus); ret.stats.defenseBonus = this.modResult(ret.attributes.gw.bonus);
ret.stats.movement = this.modResult(data.movement); ret.stats.movement = this.modResult(data.movement);
ret.stats.resistanceMind = this.modResult( ret.stats.resistanceMind = this.modResult(ret.stats.defense.value + (data.info.race === "Mensch" ? ret.attributes.in.bonus : this.raceBonus(data.info.race)));
(data.info.magicUsing ? 2 : 0) + ret.stats.defense.value + (data.info.race === "Mensch" ? ret.attributes.in.bonus : this.raceBonus(data.info.race)) ret.stats.resistanceBody = this.modResult(ret.stats.defense.value + (data.info.race === "Mensch" ? ret.attributes.ko.bonus : this.raceBonus(data.info.race)));
);
ret.stats.resistanceBody = this.modResult(
(data.info.magicUsing ? 2 : 1) + ret.stats.defense.value + (data.info.race === "Mensch" ? ret.attributes.ko.bonus : this.raceBonus(data.info.race))
);
ret.stats.spellCasting = this.modResult((data.info.magicUsing ? M5Character.spellCastingFromLevel(ret.level) : 3) + ret.attributes.zt.bonus); ret.stats.spellCasting = this.modResult((data.info.magicUsing ? M5Character.spellCastingFromLevel(ret.level) : 3) + ret.attributes.zt.bonus);
ret.stats.brawl = this.modResult(Math.floor((ret.attributes.st.value + ret.attributes.gw.value) / 20)); ret.stats.brawl = this.modResult(Math.floor((ret.attributes.st.value + ret.attributes.gw.value) / 20));
ret.stats.brawlFw = ret.stats.brawl.value + ret.stats.attackBonus.value + (data.info.race === "Zwerg" ? 1 : 0); ret.stats.brawlFw = ret.stats.brawl.value + ret.stats.attackBonus.value + (data.info.race === "Zwerg" ? 1 : 0);
ret.stats.poisonResistance = this.modResult(30 + Math.floor(ret.attributes.ko.value / 2)); ret.stats.poisonResistance = this.modResult(30 + Math.floor(ret.attributes.ko.value / 2));
ret.stats.enduranceBonus = Math.floor(ret.attributes.ko.value / 10) + Math.floor(ret.attributes.st.value / 20); ret.stats.enduranceBonus = Math.floor(ret.attributes.ko.value / 10) + Math.floor(ret.attributes.st.value / 20);
ret.stats.perception = this.modResult(0); ret.stats.deprivationCold = this.modResult(Math.floor(ret.attributes.ko.value / 2));
ret.stats.perceptionFW = 6; ret.stats.deprivationHeat = this.modResult(Math.floor(ret.attributes.ko.value / 2));
ret.stats.drinking = this.modResult(0); ret.stats.deprivationFood = this.modResult(Math.floor(40 + ret.attributes.ko.value / 2));
ret.stats.drinkingFW = Math.floor(ret.attributes.ko.value / 10);
ret.stats.hoardMin = M5Character.levelThreshold.at(ret.level - 1) / 2; ret.stats.hoardMin = M5Character.levelThreshold.at(ret.level - 1) / 2;
ret.stats.hoardNext = M5Character.levelThreshold.at(ret.level) / 2; ret.stats.hoardNext = M5Character.levelThreshold.at(ret.level) / 2;
ret.stats.wealth = parseFloat((data.info.gold + data.info.silver / 10 + data.info.copper / 100).toPrecision(3)); ret.stats.wealth = parseFloat((data.info.gold + data.info.silver / 10 + data.info.copper / 100).toPrecision(3));
@ -223,7 +205,10 @@ export class M5Character extends Actor {
const aggregate = new M5ModAggregate(data, ret); const aggregate = new M5ModAggregate(data, ret);
context.items context.items
?.filter((item) => (item.type === "item" || item.type === "effect" || item.type === "armor" || item.type === "container") && item.system.equipped) ?.filter(
(item) =>
(item.type === "item" || item.type === "skill" || item.type === "effect" || item.type === "armor" || item.type === "container" || item.type === "class") && item.system.equipped
)
.forEach((item) => { .forEach((item) => {
const mods = item.system.mods; const mods = item.system.mods;
//console.log("Actor item mods", mods) //console.log("Actor item mods", mods)
@ -266,6 +251,7 @@ export class M5Character extends Actor {
calc: item.system.calc, calc: item.system.calc,
equipped: item.system?.equipped, equipped: item.system?.equipped,
weight: item.system.weight || 0, weight: item.system.weight || 0,
capacity: item.system.capacity || 0,
value: item.system.value || 0, value: item.system.value || 0,
currency: item.system.currency || "", currency: item.system.currency || "",
quantity: item.system.quantity || 0, quantity: item.system.quantity || 0,
@ -363,6 +349,7 @@ export class M5Character extends Actor {
ret.gear.weapons[item.id] = { ret.gear.weapons[item.id] = {
label: label, label: label,
icon: item.img,
skillId: item.system.skillId, skillId: item.system.skillId,
magic: item.system.magic, magic: item.system.magic,
valuable: item.system?.valuable, valuable: item.system?.valuable,
@ -405,6 +392,7 @@ export class M5Character extends Actor {
ret.gear.defensiveWeapons[item.id] = { ret.gear.defensiveWeapons[item.id] = {
label: label, label: label,
icon: item.img,
skillId: item.system.skillId, skillId: item.system.skillId,
magic: item.system.magic, magic: item.system.magic,
valuable: item.system?.valuable, valuable: item.system?.valuable,
@ -448,6 +436,7 @@ export class M5Character extends Actor {
ret.gear.armor[item.id] = { ret.gear.armor[item.id] = {
label: label, label: label,
icon: item.img,
magic: item.system.magic, magic: item.system.magic,
valuable: item.system?.valuable, valuable: item.system?.valuable,
hoarded: item.system?.hoarded, hoarded: item.system?.hoarded,
@ -460,56 +449,26 @@ export class M5Character extends Actor {
containerId: item.system.containerId || "", containerId: item.system.containerId || "",
}; };
}); });
}
// if (!skip?.encumbrance) { if (!skip?.class) {
// const item = context.items.filter((x) => x.name === "Belastung"); context.items
// if (ret.stats.encumbrance > ret.stats.heavyLoad) { ?.filter((item) => item.type === "class")
// if (item.length === 0) { .sort((a, b) => b?.system.magicUsing - a?.system.magicUsing)
// this.createEffect("Belastung", [{ id: "movement", operation: M5ModOperation.DIVISION, type: M5ModType.STAT, value: 2 }]); .forEach((item, index) => {
// } else if (item.length === 1) { if (index !== 0) {
// item[0].update({ item.system.equipped = false;
// data: { } else {
// equipped: true, item.system.equipped = true;
// }, data.info.magicUsing = item.system.magicUsing;
// }); data.lernKostenZauber = item.system.lernKostenZauber;
// } else if (item.length === 2) { }
// item[1]?.delete();
// }
// } else if (ret.stats.encumbrance <= ret.stats.heavyLoad) {
// if (item.length === 1) {
// item[0]?.update({
// data: {
// equipped: false,
// },
// });
// }
// }
// }
// if (!skip?.encumbrance) { if (typeof data.info.class === "string") {
// const item = context.items.filter((x) => x.name === "Höchstlast"); data.info.class = {};
// if (ret.stats.encumbrance > ret.stats.loadMax) { }
// if (item.length === 0) { data.info.class[item.id] = item.name;
// this.createEffect("Höchstlast", [{ id: "ap", operation: M5ModOperation.SUBTRACT, type: M5ModType.STAT, value: 1 }]); });
// } else if (item.length === 1) {
// item[0].update({
// data: {
// equipped: true,
// },
// });
// } else if (item.length === 2) {
// item[1]?.delete();
// }
// } else if (ret.stats.encumbrance <= ret.stats.loadMax) {
// if (item.length === 1) {
// item[0]?.update({
// data: {
// equipped: false,
// },
// });
// }
// }
// }
} }
if (!skip?.effects) { if (!skip?.effects) {
@ -526,6 +485,7 @@ export class M5Character extends Actor {
ret.gear.effects[item.id] = { ret.gear.effects[item.id] = {
label: label, label: label,
icon: item.img,
magic: item.system.magic, magic: item.system.magic,
calc: item.system.calc, calc: item.system.calc,
equipped: item.system?.equipped || false, equipped: item.system?.equipped || false,
@ -543,21 +503,12 @@ export class M5Character extends Actor {
const skillMap = ret.skills[item.system.type]; const skillMap = ret.skills[item.system.type];
skillMap[item.id] = { skillMap[item.id] = {
label: item.name, label: item.name,
icon: item.img,
fw: item.system.fw, fw: item.system.fw,
attribute: item.system.attribute, attribute: item.system.attribute,
pp: item.system.pp, pp: item.system.pp,
calc: item.system.calc, calc: item.system.calc,
} as M5SkillCalculated; } as M5SkillCalculated;
// Adjust attribute Aussehen based on Athletik skill
if (item.name === "Athletik") {
ret.attributes.au.value += Math.floor(item.system.fw / 3);
}
// Adjust stat Bewegungsweite based on Laufen skill
if (item.name === "Laufen") {
ret.stats.movement.value += Math.floor(item.system.fw / 3);
}
}); });
} }
@ -570,8 +521,17 @@ export class M5Character extends Actor {
ret.spells[item.id] = { ret.spells[item.id] = {
label: item.name, label: item.name,
icon: item.img,
process: "midgard5.spell-process-" + item.system.process, process: "midgard5.spell-process-" + item.system.process,
calc: item.system.calc, calc: item.system.calc,
type: item.system.type,
castDuration: item.system.castDuration || 0,
ap: item.system.ap || 0,
range: item.system.range || 0,
effectTarget: item.system.effectTarget,
effectArea: item.system.effectArea,
effectDuration: item.system.effectDuration || 0,
equipped: item.system?.equipped || false,
}; };
}); });
} }
@ -585,6 +545,7 @@ export class M5Character extends Actor {
ret.kampfkuenste[item.id] = { ret.kampfkuenste[item.id] = {
label: item.name, label: item.name,
icon: item.img,
isKido: item.system.isKido, isKido: item.system.isKido,
type: item.system.type, type: item.system.type,
variante: item.system.variante, variante: item.system.variante,

View File

@ -41,8 +41,9 @@ export default class M5ModAggregate {
this.push({ type: M5ModType.STAT, id: M5Stats.AP, operation: M5ModOperation.SET, value: calc.stats.ap.value }, characterString); this.push({ type: M5ModType.STAT, id: M5Stats.AP, operation: M5ModOperation.SET, value: calc.stats.ap.value }, characterString);
this.push({ type: M5ModType.STAT, id: M5Stats.PROTECTION_LP, operation: M5ModOperation.SET, value: calc.stats.lpProtection.value }, characterString); this.push({ type: M5ModType.STAT, id: M5Stats.PROTECTION_LP, operation: M5ModOperation.SET, value: calc.stats.lpProtection.value }, characterString);
this.push({ type: M5ModType.STAT, id: M5Stats.PROTECTION_AP, operation: M5ModOperation.SET, value: calc.stats.apProtection.value }, characterString); this.push({ type: M5ModType.STAT, id: M5Stats.PROTECTION_AP, operation: M5ModOperation.SET, value: calc.stats.apProtection.value }, characterString);
this.push({ type: M5ModType.STAT, id: M5Stats.PERCEPTION, operation: M5ModOperation.SET, value: calc.stats.perception.value }, characterString); this.push({ type: M5ModType.STAT, id: M5Stats.DEPRIVATION_COLD, operation: M5ModOperation.SET, value: calc.stats.deprivationCold.value }, characterString);
this.push({ type: M5ModType.STAT, id: M5Stats.DRINKING, operation: M5ModOperation.SET, value: calc.stats.drinking.value }, characterString); this.push({ type: M5ModType.STAT, id: M5Stats.DEPRIVATION_HEAT, operation: M5ModOperation.SET, value: calc.stats.deprivationHeat.value }, characterString);
this.push({ type: M5ModType.STAT, id: M5Stats.DEPRIVATION_FOOD, operation: M5ModOperation.SET, value: calc.stats.deprivationFood.value }, characterString);
} }
push(mod: M5ItemMod, source: string) { push(mod: M5ItemMod, source: string) {

View File

@ -13,12 +13,13 @@ export class M5Item extends Item {
const character = actor as M5Character; const character = actor as M5Character;
const itemData = (this as any).system; const itemData = (this as any).system;
const calc = itemData.calc; const calc = itemData.calc;
const name = (this as any).name;
if (itemType === "item") { if (itemType === "item") {
calc.containers = null; calc.containers = null;
if (actor) { if (actor) {
const actorCalc = actor.derivedData({ containers: false, items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true }); const actorCalc = actor.derivedData({ containers: false, items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true, class: true });
if (actorCalc) { if (actorCalc) {
calc.containers = actorCalc.gear.containers; calc.containers = actorCalc.gear.containers;
} }
@ -45,14 +46,39 @@ export class M5Item extends Item {
}, },
]; ];
// Adjust attribute Aussehen based on Athletik skill
if (name === "Athletik") {
itemData.mods[0] = { type: "attribute", id: "au", operation: "add100", value: Math.floor(calc.fw / 3) };
}
// Adjust stat Bewegungsweite based on Laufen skill
if (name === "Laufen") {
itemData.mods[0] = { type: "stat", id: "movement", operation: "add", value: Math.floor(calc.fw / 3) };
}
// Adjust stat Kälte based on Überleben (Gebirge) skill
if (name === "Überleben (Gebirge)") {
itemData.mods[0] = { type: "stat", id: "deprivationCold", operation: "add", value: Math.floor(calc.fw * 5) };
}
// // Adjust stat Kälte based on Überleben (Steppe) skill
if (name === "Überleben (Steppe)") {
itemData.mods[0] = { type: "stat", id: "deprivationHeat", operation: "add", value: Math.floor(calc.fw * 5) };
}
// // Adjust stat Durst & Hunger based on Robustheit skill
if (name === "Robustheit") {
itemData.mods[0] = { type: "stat", id: "deprivationFood", operation: "add", value: Math.floor(calc.fw * 5) };
}
if (character) { if (character) {
const actorCalc = character.derivedData({ const actorCalc = character.derivedData({
containers: true,
skills: true, skills: true,
items: true, items: true,
spells: true, spells: true,
effects: true, effects: true,
kampfkuenste: true, kampfkuenste: true,
encumbrance: true, encumbrance: true,
class: true,
}); });
if (actorCalc?.skillMods && Object.keys(actorCalc.skillMods).indexOf(itemId) !== -1) { if (actorCalc?.skillMods && Object.keys(actorCalc.skillMods).indexOf(itemId) !== -1) {
pairs = pairs.concat(actorCalc.skillMods[itemId]); pairs = pairs.concat(actorCalc.skillMods[itemId]);
@ -89,7 +115,7 @@ export class M5Item extends Item {
calc.containers = null; calc.containers = null;
if (actor) { if (actor) {
const actorCalc = character.derivedData({ items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true }); const actorCalc = character.derivedData({ items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true, class: true });
if (actorCalc) { if (actorCalc) {
calc.ew += actorCalc.stats.attackBonus.value; calc.ew += actorCalc.stats.attackBonus.value;
calc.combatSkills = actorCalc.skills.combat; calc.combatSkills = actorCalc.skills.combat;
@ -124,7 +150,7 @@ export class M5Item extends Item {
calc.containers = null; calc.containers = null;
if (actor) { if (actor) {
const actorCalc = character.derivedData({ items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true }); const actorCalc = character.derivedData({ items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true, class: true });
if (actorCalc) { if (actorCalc) {
calc.ew += actorCalc.stats.defense.value + actorCalc.stats.defenseBonus.value; calc.ew += actorCalc.stats.defense.value + actorCalc.stats.defenseBonus.value;
calc.combatSkills = actorCalc.skills.combat; calc.combatSkills = actorCalc.skills.combat;
@ -157,7 +183,7 @@ export class M5Item extends Item {
itemData.mods[5] = { type: "stat", id: "apProtection", operation: "set", value: itemData.apProtection }; itemData.mods[5] = { type: "stat", id: "apProtection", operation: "set", value: itemData.apProtection };
calc.containers = null; calc.containers = null;
if (actor) { if (actor) {
const actorCalc = actor.derivedData({ items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true }); const actorCalc = actor.derivedData({ items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true, class: true });
if (actorCalc) { if (actorCalc) {
calc.containers = actorCalc.gear.containers; calc.containers = actorCalc.gear.containers;
} }
@ -171,7 +197,7 @@ export class M5Item extends Item {
} else if (itemType === "spell") { } else if (itemType === "spell") {
calc.fw = 0; calc.fw = 0;
if (actor) { if (actor) {
const actorCalc = character.derivedData({ items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true }); const actorCalc = character.derivedData({ containers: true, items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true, class: true });
if (actorCalc) { if (actorCalc) {
calc.ew = actorCalc.stats.spellCasting.value; calc.ew = actorCalc.stats.spellCasting.value;
} }
@ -183,7 +209,7 @@ export class M5Item extends Item {
calc.generalSkills = null; calc.generalSkills = null;
if (actor) { if (actor) {
const actorCalc = character.derivedData({ items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true }); const actorCalc = character.derivedData({ containers: true, items: true, spells: true, effects: true, kampfkuenste: true, encumbrance: true, class: true });
if (actorCalc) { if (actorCalc) {
calc.generalSkills = actorCalc.skills.general; calc.generalSkills = actorCalc.skills.general;
} }
@ -197,6 +223,9 @@ export class M5Item extends Item {
itemData.rolls.formulas[0].label = skill.name; itemData.rolls.formulas[0].label = skill.name;
} }
} }
} else if (itemType === "class") {
itemData.mods[0] = { type: "stat", id: "resistanceBody", operation: "add", value: itemData.resistanceBody };
itemData.mods[1] = { type: "stat", id: "resistanceMind", operation: "add", value: itemData.resistanceMind };
} }
if (itemData?.mods) { if (itemData?.mods) {
calc.mods = {}; calc.mods = {};
@ -318,7 +347,7 @@ export class M5Item extends Item {
} }
} }
const roll = new M5Roll(rollData, this.actor, item.name); const roll = new M5Roll(rollData, this.actor, item.name, item.id);
return roll.toMessage(); return roll.toMessage();
} else { } else {
ChatMessage.create({ ChatMessage.create({

View File

@ -11,7 +11,7 @@ export class M5Roll {
public _total: number = 0; public _total: number = 0;
public pool: PoolTerm = null; public pool: PoolTerm = null;
constructor(public data: M5RollData, public actor: any, public label: string) { constructor(public data: M5RollData, public actor: any, public label: string, public id?: string) {
//super(null) //super(null)
//this.data = rollData //this.data = rollData
} }
@ -26,10 +26,10 @@ export class M5Roll {
.map((rollName, index) => { .map((rollName, index) => {
indexMap.set(index, rollName); indexMap.set(index, rollName);
const formula = this.data.rolls[rollName]; const formula = this.data.rolls[rollName];
formula.formula = index === 0 && this.id !== "-1" ? formula.formula.replace(/(\d*d\d*)/, `{$1 + ${this.data.b.modifier}}`) : formula.formula;
const roll = new Roll(formula.formula, this.data); const roll = new Roll(formula.formula, this.data);
return roll; return roll;
}); });
this.pool = PoolTerm.fromRolls(rolls); this.pool = PoolTerm.fromRolls(rolls);
console.log("evaluate", this._evaluated, this.pool); console.log("evaluate", this._evaluated, this.pool);
return this.pool.evaluate({ async: true }).then((results) => { return this.pool.evaluate({ async: true }).then((results) => {
@ -66,7 +66,7 @@ export class M5Roll {
const parseResult = M5Roll.parseDiceSides(rollResult.formula); const parseResult = M5Roll.parseDiceSides(rollResult.formula);
//console.log("evaluate roll", parseResult) //console.log("evaluate roll", parseResult)
if (parseResult?.sides === 20) { if (parseResult?.sides === 20) {
if (roll.total < 20) { if (roll.total < this.data.b.difficulty) {
if (rowRes === M5EwResult.TBD || rowRes === M5EwResult.HIGH) rowRes = M5EwResult.FAIL; if (rowRes === M5EwResult.TBD || rowRes === M5EwResult.HIGH) rowRes = M5EwResult.FAIL;
} else { } else {
if (rowRes === M5EwResult.TBD) rowRes = M5EwResult.PASS; if (rowRes === M5EwResult.TBD) rowRes = M5EwResult.PASS;
@ -88,6 +88,50 @@ export class M5Roll {
}); });
this.data.res.label = this.label; this.data.res.label = this.label;
if ((game as Game).settings.get("midgard5", "automatedPP") && this.data.iType !== null) {
if ((this.data.i.type === "language" || this.data.i.type === "general") && this.data.rolls[0].dice[0] >= 16) {
this.actor.items.get(this.id).update({
system: {
pp: this.data.i.pp + 1,
},
});
} else if (this.data.rolls[0].dice[0] === 20) {
if (this.data.i.type === "combat") {
// Rolling through skill
this.actor.items.get(this.id).update({
system: {
pp: this.data.i.pp + 1,
},
});
} else if (this.data.iType === "weapon") {
// Rolling through Weapon Item
const skill = this.actor.items.get(this.data.i.skillId);
skill.update({
system: {
pp: skill.system.pp + 1,
},
});
} else if (this.data.iType === "defensiveWeapon") {
// Rolling through defensiveWeapon Item
const skill = this.actor.items.get(this.data.i.skillId);
skill.update({
system: {
pp: skill.system.pp + 1,
},
});
} else if (this.data.iType === "spell") {
// Rolling through Spell Item
const klasse = this.actor.items.find((x) => x.type === "class" && x.system.equipped);
klasse.update({
system: {
lernKostenZauber: {
[this.data.i.process]: { pp: klasse.system.lernKostenZauber[this.data.i.process].pp + 1 },
},
},
});
}
}
}
this._evaluated = true; this._evaluated = true;
return this; return this;
@ -99,20 +143,28 @@ export class M5Roll {
} }
async toMessage() { async toMessage() {
let checkOptions = await this.popUp({ isPW: this.data.rolls[0].label === (game as Game).i18n.localize("midgard5.pw") });
if (checkOptions["cancelled"]) {
return;
} else {
this.data.b = checkOptions;
}
if (!this._evaluated) await this.evaluate(); if (!this._evaluated) await this.evaluate();
const faces = this.pool.dice.map((x) => x.faces);
const rMode = (game as Game).settings.get("core", "rollMode"); const rMode = checkOptions["rollMode"] || (game as Game).settings.get("core", "rollMode");
const chatData = { const chatData = {
type: CONST.CHAT_MESSAGE_TYPES.ROLL, type: CONST.CHAT_MESSAGE_TYPES.ROLL,
content: await this.render(), content: await this.render(),
speaker: ChatMessage.getSpeaker({ actor: this.actor }), speaker: ChatMessage.getSpeaker({ actor: this.actor }),
sound: CONFIG.sounds.dice, sound: CONFIG.sounds.dice,
roll: Roll.fromTerms([this.pool]), roll: Roll.fromTerms([this.pool]),
flags: { data: this.data, rerolled: false, faces: faces },
}; };
ChatMessage.applyRollMode(chatData, rMode); let foo = ChatMessage.applyRollMode(chatData, rMode);
return ChatMessage.create(chatData); return ChatMessage.implementation["create"](foo, { rollMode: rMode });
} }
static fromAttributeValue(actor: any, attributeKey: string, attributeValue: number) { static fromAttributeValue(actor: any, attributeKey: string, attributeValue: number) {
@ -195,13 +247,13 @@ export class M5Roll {
return new M5Roll(rollData, actor, (game as Game).i18n.localize("midgard5.brawl")); return new M5Roll(rollData, actor, (game as Game).i18n.localize("midgard5.brawl"));
} }
static perception(actor: any) { static deprivationCold(actor: any) {
const rollData = actor.getRollData() as M5RollData; const rollData = actor.getRollData() as M5RollData;
rollData.rolls["0"] = { rollData.rolls["0"] = {
formula: "1d20 + @c.calc.stats.perception.value + @c.calc.stats.perceptionFW", formula: "@c.calc.stats.deprivationCold.value -1D100",
enabled: true, enabled: true,
label: (game as Game).i18n.localize("midgard5.perception"), label: (game as Game).i18n.localize("midgard5.deprivationCold"),
result: "", result: "",
total: 0, total: 0,
totalStr: "", totalStr: "",
@ -209,16 +261,16 @@ export class M5Roll {
css: "", css: "",
} as M5RollResult; } as M5RollResult;
return new M5Roll(rollData, actor, (game as Game).i18n.localize("midgard5.perception")); return new M5Roll(rollData, actor, (game as Game).i18n.localize("midgard5.deprivationCold"));
} }
static drinking(actor: any) { static deprivationHeat(actor: any) {
const rollData = actor.getRollData() as M5RollData; const rollData = actor.getRollData() as M5RollData;
rollData.rolls["0"] = { rollData.rolls["0"] = {
formula: "1d20 + @c.calc.stats.drinking.value + @c.calc.stats.drinkingFW", formula: "@c.calc.stats.deprivationHeat.value -1D100",
enabled: true, enabled: true,
label: (game as Game).i18n.localize("midgard5.drinking"), label: (game as Game).i18n.localize("midgard5.deprivationHeat"),
result: "", result: "",
total: 0, total: 0,
totalStr: "", totalStr: "",
@ -226,7 +278,41 @@ export class M5Roll {
css: "", css: "",
} as M5RollResult; } as M5RollResult;
return new M5Roll(rollData, actor, (game as Game).i18n.localize("midgard5.drinking")); return new M5Roll(rollData, actor, (game as Game).i18n.localize("midgard5.deprivationHeat"));
}
static deprivationFood(actor: any) {
const rollData = actor.getRollData() as M5RollData;
rollData.rolls["0"] = {
formula: "@c.calc.stats.deprivationFood.value -1D100",
enabled: true,
label: (game as Game).i18n.localize("midgard5.deprivationFood"),
result: "",
total: 0,
totalStr: "",
dice: {},
css: "",
} as M5RollResult;
return new M5Roll(rollData, actor, (game as Game).i18n.localize("midgard5.deprivationFood"));
}
static cleanSpell(actor: any) {
const rollData = actor.getRollData() as M5RollData;
rollData.rolls["0"] = {
formula: "1d20 + @c.calc.stats.spellCasting.value",
enabled: true,
label: (game as Game).i18n.localize("midgard5.spellCasting"),
result: "",
total: 0,
totalStr: "",
dice: {},
css: "",
} as M5RollResult;
return new M5Roll(rollData, actor, (game as Game).i18n.localize("midgard5.spellCasting"));
} }
static defense(actor: any) { static defense(actor: any) {
@ -313,6 +399,46 @@ export class M5Roll {
return null; return null;
} }
async popUp({
useFortune = false,
difficulty = 20,
modifier = 0,
rollModes = CONFIG.Dice.rollModes,
rollMode = "",
template = "systems/midgard5/templates/chat/task-check-dialog.hbs",
isPW = false,
} = {}) {
const html = await renderTemplate(template, { useFortune, difficulty, modifier, rollModes, rollMode, isPW });
return new Promise((resolve) => {
const data = {
title: (game as Game).i18n.localize("midgard5.chat.roll"),
content: html,
buttons: {
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.cancel"),
callback: (html) => resolve({ cancelled: true }),
},
},
default: "roll",
close: () => resolve({ cancelled: true }),
};
new Dialog(data, null).render(true);
});
}
_processTaskCheckOptions(form) {
return {
difficulty: parseInt(form.difficulty?.value),
modifier: parseInt(form.modifier?.value),
rollMode: form.rollMode?.value,
};
}
} }
interface FormulaParseResult { interface FormulaParseResult {

View File

@ -0,0 +1,108 @@
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: '<i class="fas fa-rotate-left"></i>',
label: (game as Game).i18n.localize("midgard5.chat.destiny"),
callback: () => rerollDie("destiny", "sg"),
},
luckPoints: {
icon: '<i class="fas fa-rotate-left"></i>',
label: (game as Game).i18n.localize("midgard5.chat.luckPoint"),
callback: () => rerollDie("luckPoint", "gp"),
},
modify: {
icon: '<i class="fas fa-plus"></i>',
label: (game as Game).i18n.localize("midgard5.chat.modify") + " +" + (message["flags"].faces[0] === 100 ? 10 : 2),
callback: () => rerollDie("modify", "gp"),
},
cancel: {
icon: '<i class="fas fa-times"></i>',
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.c = flagData.c;
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 + " + " + (message["flags"].faces[0] === 100 ? 10 : 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, "-1");
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);
}
};

View File

@ -77,7 +77,6 @@ export default class M5CharacterSheet extends ActorSheet {
let target = event.target.closest("[data-attribute]") as HTMLElement; let target = event.target.closest("[data-attribute]") as HTMLElement;
let attributeValue = target ? parseInt(target.dataset.value) : null; let attributeValue = target ? parseInt(target.dataset.value) : null;
let attributeStr = target ? target.dataset.attribute : null; let attributeStr = target ? target.dataset.attribute : null;
const roll = M5Roll.fromAttributeValue(this.actor, attributeStr, attributeValue); const roll = M5Roll.fromAttributeValue(this.actor, attributeStr, attributeValue);
await roll.toMessage(); await roll.toMessage();
}); });
@ -194,6 +193,36 @@ export default class M5CharacterSheet extends ActorSheet {
}); });
}); });
html.find(".pp-increase").on("click", async (event) => {
let target = event.target.closest("[data-pp-name]") as HTMLElement;
let ppName = target ? target.dataset.ppName : null;
const context = this.actor as any;
const item = context.items.find((x) => x.type === "class" && x.system.equipped);
item.update({
system: {
lernKostenZauber: {
[ppName]: { pp: context.system.lernKostenZauber[ppName].pp + 1 },
},
},
});
this.render();
});
html.find(".pp-decrease").on("click", async (event) => {
let target = event.target.closest("[data-pp-name]") as HTMLElement;
let ppName = target ? target.dataset.ppName : null;
const context = this.actor as any;
const item = context.items.find((x) => x.type === "class" && x.system.equipped);
item.update({
system: {
lernKostenZauber: {
[ppName]: { pp: context.system.lernKostenZauber[ppName].pp - 1 },
},
},
});
this.render();
});
html.find(".fw-increase").on("click", async (event) => { html.find(".fw-increase").on("click", async (event) => {
let target = event.target.closest("[data-item-id]") as HTMLElement; let target = event.target.closest("[data-item-id]") as HTMLElement;
let itemId = target ? target.dataset.itemId : null; let itemId = target ? target.dataset.itemId : null;
@ -247,13 +276,23 @@ export default class M5CharacterSheet extends ActorSheet {
await roll.toMessage(); await roll.toMessage();
}); });
html.find(".roll-perception-button").on("click", async (event) => { html.find(".roll-cleanSpell-button").on("click", async (event) => {
const roll = M5Roll.perception(this.actor); const roll = M5Roll.cleanSpell(this.actor);
await roll.toMessage(); await roll.toMessage();
}); });
html.find(".roll-drinking-button").on("click", async (event) => { html.find(".roll-deprivationCold-button").on("click", async (event) => {
const roll = M5Roll.drinking(this.actor); const roll = M5Roll.deprivationCold(this.actor);
await roll.toMessage();
});
html.find(".roll-deprivationHeat-button").on("click", async (event) => {
const roll = M5Roll.deprivationHeat(this.actor);
await roll.toMessage();
});
html.find(".roll-deprivationFood-button").on("click", async (event) => {
const roll = M5Roll.deprivationFood(this.actor);
await roll.toMessage(); await roll.toMessage();
}); });
@ -433,6 +472,14 @@ export default class M5CharacterSheet extends ActorSheet {
} }
}); });
html.find(".class-item-edit").on("click", async (event) => {
this.actor.items.find((x) => x.type === "class").sheet.render(true);
});
html.find(".class-item-delete").on("click", async (event) => {
this.actor.items.find((x) => x.type === "class").delete();
});
// Drag & Drop // Drag & Drop
const dragDrop = new DragDrop({ const dragDrop = new DragDrop({
dragSelector: ".items-list .item", dragSelector: ".items-list .item",

View File

@ -7,6 +7,13 @@ export class M5ItemSheet extends ItemSheet {
width: 640, width: 640,
height: 480, height: 480,
classes: ["midgard5", "sheet", "item"], classes: ["midgard5", "sheet", "item"],
tabs: [
{
navSelector: ".sheet-navigation",
contentSelector: ".sheet-content",
initial: "base_values",
},
],
}); });
} }

16
source/settings.ts Normal file
View File

@ -0,0 +1,16 @@
/* global game */
/**
* Define all game settings here
* @return {Promise}
*/
export const loadSettings = async function () {
(game as Game).settings.register("midgard5", "automatedPP", {
name: "Automatische Praxispunkte",
hint: "Falls aktiv, werden Praxispunkte automatisch angerechnet.",
scope: "world",
config: true,
default: true,
type: Boolean,
});
};

View File

@ -374,4 +374,36 @@
} }
} }
} }
.chip {
display: inline-block;
padding: 0 25px;
height: 35px;
font-size: 16px;
line-height: 35px;
border-radius: 25px;
background-color: #f1f1f1;
}
.closebtn {
padding-left: 10px;
color: #888;
font-weight: bold;
float: right;
font-size: 20px;
cursor: pointer;
}
.closebtn:hover {
color: #000;
}
.pp-listing {
margin: 0 2rem;
flex: 1 0 16%;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: baseline;
}
} }

View File

@ -18,7 +18,8 @@
width: 64px; width: 64px;
} }
td, th { td,
th {
padding: 0 0.5rem 0 0.5rem; padding: 0 0.5rem 0 0.5rem;
&.center { &.center {

View File

@ -3,7 +3,7 @@
"name": "midgard5", "name": "midgard5",
"title": "Midgard 5. Edition", "title": "Midgard 5. Edition",
"description": "The German RPG Midgard 5. Edition", "description": "The German RPG Midgard 5. Edition",
"version": "2.5.0", "version": "2.6.0",
"compatibility": { "compatibility": {
"minimum": "10", "minimum": "10",
"verified": "11", "verified": "11",
@ -24,8 +24,8 @@
"primaryTokenAttribute": "lp", "primaryTokenAttribute": "lp",
"secondaryTokenAttribute": "ap", "secondaryTokenAttribute": "ap",
"url": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5", "url": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5",
"manifest": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/releases/download/v2.5.0/system.json", "manifest": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/releases/download/v2.6.0/system.json",
"download": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/releases/download/v2.5.0/midgard5-v2.5.0.zip", "download": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/releases/download/v2.6.0/midgard5-v2.6.0.zip",
"initiative": "@c.calc.attributes.gw.value", "initiative": "@c.calc.attributes.gw.value",
"license": "LICENSE.txt" "license": "LICENSE.txt"
} }

View File

@ -6,7 +6,7 @@
"info": { "info": {
"description": "", "description": "",
"background": "", "background": "",
"class": "", "class": {},
"race": "", "race": "",
"magicUsing": false, "magicUsing": false,
"showAllItems": false, "showAllItems": false,
@ -101,7 +101,11 @@
"meditieren": { "fw": 0, "attribute": "wk", "initial": 8, "pp": 0 }, "meditieren": { "fw": 0, "attribute": "wk", "initial": 8, "pp": 0 },
"menschenkenntnis": { "fw": 3, "attribute": "in", "initial": 8, "pp": 0 }, "menschenkenntnis": { "fw": 3, "attribute": "in", "initial": 8, "pp": 0 },
"meucheln": { "fw": 0, "attribute": "gs", "initial": 8, "pp": 0 }, "meucheln": { "fw": 0, "attribute": "gs", "initial": 8, "pp": 0 },
"musizieren": { "fw": 0, "attribute": "gs", "initial": 12, "pp": 0 }, "musizierenFloete": { "fw": 0, "attribute": "gs", "initial": 12, "pp": 0 },
"musizierenBlas": { "fw": 0, "attribute": "gs", "initial": 12, "pp": 0 },
"musizierenRythmus": { "fw": 0, "attribute": "gs", "initial": 12, "pp": 0 },
"musizierenStreich": { "fw": 0, "attribute": "gs", "initial": 12, "pp": 0 },
"musizierenZupf": { "fw": 0, "attribute": "gs", "initial": 12, "pp": 0 },
"ninjutsu": { "fw": 0, "attribute": "gw", "initial": 8, "pp": 0 }, "ninjutsu": { "fw": 0, "attribute": "gw", "initial": 8, "pp": 0 },
"naturkunde": { "fw": 0, "attribute": "in", "initial": 8, "pp": 0 }, "naturkunde": { "fw": 0, "attribute": "in", "initial": 8, "pp": 0 },
"orakelkunst": { "fw": 0, "attribute": "in", "initial": 8, "pp": 0 }, "orakelkunst": { "fw": 0, "attribute": "in", "initial": 8, "pp": 0 },
@ -131,7 +135,9 @@
"tauchen": { "fw": 6, "attribute": "ko", "initial": 8, "pp": 0 }, "tauchen": { "fw": 6, "attribute": "ko", "initial": 8, "pp": 0 },
"tanzen": { "fw": 6, "attribute": "ko", "initial": 8, "pp": 0 }, "tanzen": { "fw": 6, "attribute": "ko", "initial": 8, "pp": 0 },
"tierkunde": { "fw": 0, "attribute": "in", "initial": 8, "pp": 0 }, "tierkunde": { "fw": 0, "attribute": "in", "initial": 8, "pp": 0 },
"ueberleben": { "fw": 6, "attribute": "in", "initial": 8, "pp": 0 }, "ueberlebenWald": { "fw": 6, "attribute": "in", "initial": 8, "pp": 0 },
"ueberlebenSteppe": { "fw": 6, "attribute": "in", "initial": 8, "pp": 0 },
"ueberlebenGebirge": { "fw": 6, "attribute": "in", "initial": 8, "pp": 0 },
"verfuehren": { "fw": 3, "attribute": "pa", "initial": 8, "pp": 0 }, "verfuehren": { "fw": 3, "attribute": "pa", "initial": 8, "pp": 0 },
"verhoeren": { "fw": 3, "attribute": "pa", "initial": 8, "pp": 0 }, "verhoeren": { "fw": 3, "attribute": "pa", "initial": 8, "pp": 0 },
"verstellen": { "fw": 3, "attribute": "pa", "initial": 8, "pp": 0 }, "verstellen": { "fw": 3, "attribute": "pa", "initial": 8, "pp": 0 },
@ -144,8 +150,7 @@
} }
}, },
"gear": { "gear": {
"gear": { "gear": {}
}
} }
}, },
"character": { "character": {
@ -154,7 +159,7 @@
} }
}, },
"Item": { "Item": {
"types": ["skill", "weapon", "defensiveWeapon", "armor", "spell", "kampfkunst", "item", "effect", "container"], "types": ["skill", "weapon", "defensiveWeapon", "armor", "spell", "kampfkunst", "item", "effect", "container", "class"],
"templates": { "templates": {
"itemDescription": { "itemDescription": {
"description": "" "description": ""
@ -217,6 +222,7 @@
"physical": { "physical": {
"value": 0, "value": 0,
"weight": 0, "weight": 0,
"capacity": 0,
"containerId": "", "containerId": "",
"magic": false "magic": false
}, },
@ -231,29 +237,36 @@
"spellSelection": { "spellSelection": {
"spellProcessSelection": { "spellProcessSelection": {
"none": "midgard5.spell-process-none", "none": "midgard5.spell-process-none",
"artefakte": "midgard5.spell-process-artefakte",
"beherrschen": "midgard5.spell-process-beherrschen", "beherrschen": "midgard5.spell-process-beherrschen",
"bewegen": "midgard5.spell-process-bewegen", "bewegen": "midgard5.spell-process-bewegen",
"blutzauber": "midgard5.spell-process-blutzauber", "beschwoeren": "midgard5.spell-process-beschwoeren",
"blutmagie": "midgard5.spell-process-blutmagie",
"chaoswunder": "midgard5.spell-process-chaoswunder", "chaoswunder": "midgard5.spell-process-chaoswunder",
"dweomer": "midgard5.spell-process-dweomer",
"erhaltung": "midgard5.spell-process-erhaltung",
"erkennen": "midgard5.spell-process-erkennen", "erkennen": "midgard5.spell-process-erkennen",
"erschaffen": "midgard5.spell-process-erschaffen", "erschaffen": "midgard5.spell-process-erschaffen",
"formen": "midgard5.spell-process-formen", "formen": "midgard5.spell-process-formen",
"finstere_magie": "midgard5.spell-process-finstere_magie", "finstere_magie": "midgard5.spell-process-finstere_magie",
"veraendern": "midgard5.spell-process-veraendern", "kampfverse": "midgard5.spell-process-kampfverse",
"zerstoeren": "midgard5.spell-process-zerstoeren", "namensmagie": "midgard5.spell-process-namensmagie",
"wundertat": "midgard5.spell-process-wundertat",
"dweomer": "midgard5.spell-process-dweomer",
"wilder_dweomer": "midgard5.spell-process-wilder_dweomer",
"zauberlied": "midgard5.spell-process-zauberlied",
"salz": "midgard5.spell-process-salz",
"thaumagraphie": "midgard5.spell-process-thaumagraphie",
"beschwoeren": "midgard5.spell-process-beschwoeren",
"nekromantie": "midgard5.spell-process-nekromantie", "nekromantie": "midgard5.spell-process-nekromantie",
"thaumatherapie": "midgard5.spell-process-thaumatherapie", "runenstaebe": "midgard5.spell-process-zauberrunen",
"thaumatherapie": "midgard5.spell-process-runenstaebe",
"veraendern": "midgard5.spell-process-veraendern",
"vigilsignien": "midgard5.spell-process-vigilsignien",
"wilder_dweomer": "midgard5.spell-process-wilder_dweomer",
"wundertat": "midgard5.spell-process-wundertat",
"zauberblaetter": "midgard5.spell-process-zauberblaetter",
"zauberlied": "midgard5.spell-process-zauberlied",
"zaubermittel": "midgard5.spell-process-zaubermittel", "zaubermittel": "midgard5.spell-process-zaubermittel",
"zauberschutz": "midgard5.spell-process-zauberschutz",
"zauberrunen": "midgard5.spell-process-zauberrunen", "zauberrunen": "midgard5.spell-process-zauberrunen",
"zaubersiegel": "midgard5.spell-process-siegel" "zaubersalz": "midgard5.spell-process-zaubersalz",
"zauberschutz": "midgard5.spell-process-zauberschutz",
"zaubersiegel": "midgard5.spell-process-zaubersiegel",
"zaubertaenze": "midgard5.spell-process-zaubertaenze",
"zerstoeren": "midgard5.spell-process-zerstoeren"
}, },
"spellTypeSelection": { "spellTypeSelection": {
"gedanke": "midgard5.spell-type-gedanke", "gedanke": "midgard5.spell-type-gedanke",
@ -264,7 +277,8 @@
"umgebung": "midgard5.spell-target-umgebung", "umgebung": "midgard5.spell-target-umgebung",
"geist": "midgard5.spell-target-geist", "geist": "midgard5.spell-target-geist",
"koerper": "midgard5.spell-target-koerper" "koerper": "midgard5.spell-target-koerper"
} },
"spellSpecialization": "none"
}, },
"kampfkunstSelection": { "kampfkunstSelection": {
"kampfkunstTypeSelection": { "kampfkunstTypeSelection": {
@ -273,7 +287,7 @@
"finte": "midgard5.kampfkunst-type-finte", "finte": "midgard5.kampfkunst-type-finte",
"geist": "midgard5.kampfkunst-type-geist", "geist": "midgard5.kampfkunst-type-geist",
"schießkunst": "midgard5.kampfkunst-type-schießkunst", "schießkunst": "midgard5.kampfkunst-type-schießkunst",
"fechten": "midgard5.kampfkunst-type-fechten" "fechtkunst": "midgard5.kampfkunst-type-fechtkunst"
}, },
"kidoTypeSelection": { "kidoTypeSelection": {
"angriff": "midgard5.kido-type-angriff", "angriff": "midgard5.kido-type-angriff",
@ -284,7 +298,12 @@
"kampfkunstVarianteSelection": { "kampfkunstVarianteSelection": {
"anstuermen": "midgard5.kampfkunst-variante-anstuermen", "anstuermen": "midgard5.kampfkunst-variante-anstuermen",
"attackieren": "midgard5.kampfkunst-variante-attackieren", "attackieren": "midgard5.kampfkunst-variante-attackieren",
"entwaffnen": "midgard5.kampfkunst-variante-entwaffnen" "entwaffnen": "midgard5.kampfkunst-variante-entwaffnen",
"fechten": "midgard5.kampfkunst-variante-fechten",
"schusstechnik": "midgard5.kampfkunst-variante-schusstechnik",
"finten": "midgard5.kampfkunst-variante-finten",
"geistestechnik": "midgard5.kampfkunst-variante-geistestechnik",
"verteidigung": "midgard5.kampfkunst-variante-verteidigung"
}, },
"kidoVarianteSelection": { "kidoVarianteSelection": {
"none": "midgard5.spell-process-none", "none": "midgard5.spell-process-none",
@ -303,6 +322,7 @@
"templates": ["itemDescription", "attributeSelection"], "templates": ["itemDescription", "attributeSelection"],
"fw": 0, "fw": 0,
"attribute": "st", "attribute": "st",
"equipped": true,
"skill": "", "skill": "",
"type": "general", "type": "general",
"rolls": { "rolls": {
@ -316,7 +336,8 @@
"output": "" "output": ""
}, },
"pp": 0, "pp": 0,
"calc": {} "calc": {},
"mods": {}
}, },
"item": { "item": {
"templates": ["itemDescription", "equippable", "physical", "valuable", "hoarded"], "templates": ["itemDescription", "equippable", "physical", "valuable", "hoarded"],
@ -436,6 +457,12 @@
"variante": "", "variante": "",
"isKido": false, "isKido": false,
"ap": "", "ap": "",
"weapon": "",
"ep": "",
"rank": "",
"enemy": "",
"color": "",
"style": "",
"rolls": { "rolls": {
"formulas": { "formulas": {
"0": { "0": {
@ -447,6 +474,154 @@
"output": "" "output": ""
}, },
"calc": {} "calc": {}
},
"class": {
"templates": ["itemDescription"],
"magicUsing": false,
"equipped": true,
"resistanceBody": 1,
"resistanceMind": 0,
"calc": {},
"mods": {},
"lernKostenAllgemein": {
"alltag": 20,
"freiland": 20,
"halbwelt": 20,
"kampf": 20,
"koerper": 20,
"sozial": 20,
"unterwelt": 20,
"waffen": 20,
"wissen": 20
},
"lernKostenZauber": {
"beherrschen": {
"kosten": 0,
"pp": 0
},
"bewegen": {
"kosten": 0,
"pp": 0
},
"erkennen": {
"kosten": 0,
"pp": 0
},
"erschaffen": {
"kosten": 0,
"pp": 0
},
"formen": {
"kosten": 0,
"pp": 0
},
"veraendern": {
"kosten": 0,
"pp": 0
},
"zerstoeren": {
"kosten": 0,
"pp": 0
},
"wundertat": {
"kosten": 0,
"pp": 0
},
"dweomer": {
"kosten": 0,
"pp": 0
},
"zauberlied": {
"kosten": 0,
"pp": 0
},
"kampfverse": {
"kosten": 0,
"pp": 0
},
"zaubertaenze": {
"kosten": 0,
"pp": 0
},
"zaubersalz": {
"kosten": 0,
"pp": 0
},
"runenstaebe": {
"kosten": 0,
"pp": 0
},
"zaubersiegel": {
"kosten": 0,
"pp": 0
},
"zauberrunen": {
"kosten": 0,
"pp": 0
},
"thaumagraphie": {
"kosten": 0,
"pp": 0
},
"erhaltung": {
"kosten": 0,
"pp": 0
},
"zaubermittel": {
"kosten": 0,
"pp": 0
},
"zauberschutz": {
"kosten": 0,
"pp": 0
},
"zauberblaetter": {
"kosten": 0,
"pp": 0
},
"vigilsignien": {
"kosten": 0,
"pp": 0
},
"artefakte": {
"kosten": 0,
"pp": 0
},
"chaoswunder": {
"kosten": 0,
"pp": 0
},
"wilder_dweomer": {
"kosten": 0,
"pp": 0
},
"nekromantie": {
"kosten": 0,
"pp": 0
},
"finstere_magie": {
"kosten": 0,
"pp": 0
},
"blutmagie": {
"kosten": 0,
"pp": 0
},
"beschwoeren": {
"kosten": 0,
"pp": 0
},
"namensmagie": {
"kosten": 0,
"pp": 0
}
},
"lernKostenKamptechnik": {
"kampfkunst": 90,
"fechtkunst": 90,
"schiesskunst": 90,
"kido": 90
}
} }
} }
} }

View File

@ -0,0 +1,18 @@
<form>
<div class="window-content">
<label><b>Wahl der Kosten</b></label>
<hr />
<span class="dice-tooltip">
<div class="dice-rolls flexrow">
<div>
{{localize "midgard5.destiny"}}:
{{sg}}
</div>
<div>
{{localize "midgard5.luckPoints"}}:
{{gp}}
</div>
</div>
</span>
</div>
</form>

View File

@ -64,21 +64,43 @@
<td>{{localize "midgard5.actor-ap"}}</td> <td>{{localize "midgard5.actor-ap"}}</td>
<td class="roll-spell-details">{{i.ap}}</td> <td class="roll-spell-details">{{i.ap}}</td>
</tr> </tr>
<tr>
<td>{{localize "midgard5.kampfkunst-ep"}}</td>
<td class="roll-spell-details">{{i.ep}}</td>
</tr>
<tr> <tr>
<td>{{localize "midgard5.kampfkunst-type"}}</td> <td>{{localize "midgard5.kampfkunst-type"}}</td>
<td class="roll-spell-details">{{localize (m5concat "midgard5.kampfkunst-type-" i.type)}}</td> <td class="roll-spell-details">{{localize (m5concat "midgard5.kampfkunst-type-" i.type)}}</td>
</tr> </tr>
{{#if (eq i.type "angriff")}}
<tr> <tr>
<td>{{localize "midgard5.kampfkunst-variante"}}</td> <td>{{localize "midgard5.kampfkunst-variante"}}</td>
<td class="roll-spell-details">{{localize (m5concat "midgard5.kampfkunst-variante-" i.variante)}}</td> <td class="roll-spell-details">{{localize (m5concat "midgard5.kampfkunst-variante-" i.variante)}}</td>
</tr> </tr>
{{/if}} <tr>
<td>{{localize "midgard5.kampfkunst-enemy"}}</td>
<td class="roll-spell-details">{{i.enemy}}</td>
</tr>
<tr>
<td>{{localize "midgard5.kampfkunst-weapon"}}</td>
<td class="roll-spell-details">{{i.weapon}}</td>
</tr>
{{else}} {{else}}
<tr> <tr>
<td>{{localize "midgard5.actor-ap"}}</td> <td>{{localize "midgard5.actor-ap"}}</td>
<td class="roll-spell-details">{{i.ap}}</td> <td class="roll-spell-details">{{i.ap}}</td>
</tr> </tr>
<tr>
<td>{{localize "midgard5.kampfkunst-ep"}}</td>
<td class="roll-spell-details">{{i.ep}}</td>
</tr>
<tr>
<td>{{localize "midgard5.kampfkunst-color"}}</td>
<td class="roll-spell-details">{{i.color}}</td>
</tr>
<tr>
<td>{{localize "midgard5.kampfkunst-style"}}</td>
<td class="roll-spell-details">{{i.style}}</td>
</tr>
<tr> <tr>
<td>{{localize "midgard5.kido-type"}}</td> <td>{{localize "midgard5.kido-type"}}</td>
<td class="roll-spell-details">{{localize (m5concat "midgard5.kido-type-" i.type)}}</td> <td class="roll-spell-details">{{localize (m5concat "midgard5.kido-type-" i.type)}}</td>
@ -88,6 +110,14 @@
<td>{{localize "midgard5.kido-variante"}}</td> <td>{{localize "midgard5.kido-variante"}}</td>
<td class="roll-spell-details">{{localize (m5concat "midgard5.kido-variante-" i.variante)}}</td> <td class="roll-spell-details">{{localize (m5concat "midgard5.kido-variante-" i.variante)}}</td>
</tr> </tr>
<tr>
<td>{{localize "midgard5.kampfkunst-enemy"}}</td>
<td class="roll-spell-details">{{i.enemy}}</td>
</tr>
<tr>
<td>{{localize "midgard5.kampfkunst-weapon"}}</td>
<td class="roll-spell-details">{{i.weapon}}</td>
</tr>
{{/if}} {{/if}}
{{/unless}} {{/unless}}
{{/if}} {{/if}}
@ -95,7 +125,7 @@
{{#each rolls as |roll index|}} {{#each rolls as |roll index|}}
{{#if roll.enabled}} {{#if roll.enabled}}
<tr class="roll-row {{roll.css}}"> <tr class="roll-row {{roll.css}}">
<td>{{roll.label}}</td> <td>{{roll.label}} {{#if (eq index '0')}} {{#if (gt ../b.modifier 0)}}+{{../b.modifier}}{{/if}}{{#if (gt 0 ../b.modifier)}}{{../b.modifier}}{{/if}}{{/if}}</td>
<td class="roll-result"> <td class="roll-result">
<span class="roll-total {{#if (contains roll.label "Schaden")}}apply damage{{/if}}{{#if (contains roll.label "Heilung")}}apply heal{{/if}}">{{roll.totalStr}}</span> <span class="roll-total {{#if (contains roll.label "Schaden")}}apply damage{{/if}}{{#if (contains roll.label "Heilung")}}apply heal{{/if}}">{{roll.totalStr}}</span>
<span class="roll-detail">{{roll.result}}</span> <span class="roll-detail">{{roll.result}}</span>

View File

@ -0,0 +1,22 @@
<form>
<div class="form-group">
<label>{{localize "midgard5.chat.options.modifier"}}</label>
<input type="number" name="modifier" value="{{modifier}}" />
</div>
{{#unless isPW}}
<div class="form-group">
<label>{{localize "midgard5.chat.options.difficulty"}}</label>
<input type="number" name="difficulty" value="{{difficulty}}" />
</div>
{{/unless}}
<div class="form-group">
<label>{{localize "midgard5.chat.options.rollMode"}}</label>
<select name="rollMode">
{{#select rollMode}}
{{#each rollModes as |label mode|}}
<option value="{{mode}}">{{localize label}}</option>
{{/each}}
{{/select}}
</select>
</div>
</form>

View File

@ -46,8 +46,8 @@
<tr> <tr>
<td>{{localize "midgard5.luckPoints"}}</td> <td>{{localize "midgard5.luckPoints"}}</td>
<td><input name="data.gp" type="text" value="{{data.gp}}" data-dtype="Number" /></td> <td><input name="data.gp" type="text" value="{{data.gp}}" data-dtype="Number" /></td>
<td></td> <td>{{localize "midgard5.valuable"}}</td>
<td></td> <td class="fixed-value">{{data.calc.stats.wealth}}</td>
</tr> </tr>
<tr height = 10px></tr> <tr height = 10px></tr>
</tbody> </tbody>
@ -63,7 +63,7 @@
<tr height = 10px></tr> <tr height = 10px></tr>
<tr> <tr>
<td>{{localize "midgard5.magicUsing"}}</td> <td>{{localize "midgard5.magicUsing"}}</td>
<td><input id="data.info.magicUsing" type="checkbox" name="data.info.magicUsing" {{checked data.info.magicUsing}}></td> <td><input id="data.info.magicUsing" type="checkbox" disabled="true" name="data.info.magicUsing" {{checked data.info.magicUsing}}></td>
<td>{{localize "midgard5.movementRange"}}</td> <td>{{localize "midgard5.movementRange"}}</td>
<td><input name="data.movement" type="text" value="{{data.movement}}" data-dtype="Number" /></td> <td><input name="data.movement" type="text" value="{{data.movement}}" data-dtype="Number" /></td>
</tr> </tr>
@ -107,8 +107,6 @@
<tr> <tr>
<td>{{localize "midgard5.hoard"}}</td> <td>{{localize "midgard5.hoard"}}</td>
<td class="fixed-value">{{data.calc.stats.hoard}}</td> <td class="fixed-value">{{data.calc.stats.hoard}}</td>
<td></td>
<td></td>
</tr> </tr>
<tr> <tr>
<td>{{localize "midgard5.hoardMin"}}</td> <td>{{localize "midgard5.hoardMin"}}</td>
@ -117,10 +115,32 @@
<td class="fixed-value">{{data.calc.stats.hoardNext}}</td> <td class="fixed-value">{{data.calc.stats.hoardNext}}</td>
</tr> </tr>
{{/if}} {{/if}}
<tr height = 10px></tr> <tr height = 10px></tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
<div class="flexcolumn-1">
<div class="flexpart">
<div class="flexpart-header"><img src="icons/skills/wounds/injury-body-pain-gray.webp" class="flexpart-icon">{{localize "midgard5.deprivations"}} & {{localize "midgard5.deprivation"}}</div>
<table>
<tr height = 10px></tr>
<tr>
<td class="flexpart-img"><img src="/icons/consumables/food/plate-fish-bowl-bones-brown.webp" class="flexpart-icon"></td>
<td class="padding highlight">{{localize "midgard5.deprivationFood"}}</td>
<td class="center">{{data.calc.stats.deprivationFood.value}}</td>
<td class="fixed-value" style="border-right: 1px solid black;"><button class="roll-button roll-deprivationFood-button"></button></td>
<td class="flexpart-img"><img src="/icons/magic/fire/orb-lightning-sun.webp" class="flexpart-icon"></td>
<td class="padding highlight">{{localize "midgard5.deprivationHeat"}}</td>
<td class="center">{{ data.calc.stats.deprivationHeat.value}}</td>
<td class="fixed-value" style="border-right: 1px solid black;"><button class="roll-button roll-deprivationHeat-button"></button></td>
<td class="flexpart-img"><img src="/icons/magic/water/snowflake-ice-blue.webp" class="flexpart-icon"></td>
<td class="padding highlight">{{localize "midgard5.deprivationCold"}}</td>
<td class="center">{{data.calc.stats.deprivationCold.value}}</td>
<td class="fixed-value"><button class="roll-button roll-deprivationCold-button"></button></td>
</tr>
</table>
</div>
</div>

View File

@ -8,9 +8,22 @@
<tr> <tr>
<td>{{localize "midgard5.movementRange"}}</td> <td>{{localize "midgard5.movementRange"}}</td>
<td class="fixed-value">{{data.calc.stats.movement.value}}</td> <td class="fixed-value">{{data.calc.stats.movement.value}}</td>
<td></td>
<td class="fixed-value"></td>
</tr>
<tr>
<td>{{localize "midgard5.initiative"}}</td> <td>{{localize "midgard5.initiative"}}</td>
<td class="fixed-value">
{{#if (isSkillInList (localizeMidgard "anfuehren") data.calc.skills.general)}}
{{skillEwInList (localizeMidgard "anfuehren") data.calc.skills.general}}
{{else}}
{{skillEw actor._id data.skills.general.anfuehren}}
{{/if}}
</td>
<td>{{localize "midgard5.actionrank"}}</td>
<td class="fixed-value"><a class="join-combat">{{data.calc.attributes.gw.value}}</a></td> <td class="fixed-value"><a class="join-combat">{{data.calc.attributes.gw.value}}</a></td>
</tr> </tr>
<tr>
<td>{{localize "midgard5.defense"}}</td> <td>{{localize "midgard5.defense"}}</td>
<td class="fixed-value">{{data.calc.stats.defense.value}}</td> <td class="fixed-value">{{data.calc.stats.defense.value}}</td>
<td>{{localize "midgard5.defenseBonus"}}</td> <td>{{localize "midgard5.defenseBonus"}}</td>
@ -28,7 +41,7 @@
<div class="flexcolumn-2"> <div class="flexcolumn-2">
<div class="flexpart" style="padding: 0 0.5rem;"> <div class="flexpart" style="padding: 0 0.5rem;">
<div class="flexpart-header">{{localize "midgard5.initiative"}}</div> <div class="flexpart-header">{{localize "midgard5.actionrank"}}</div>
<button class="wide-button join-combat">{{localize "midgard5.combat-join"}}</button> <button class="wide-button join-combat">{{localize "midgard5.combat-join"}}</button>
<button class="wide-button ranged-combat">{{localize "midgard5.combat-ranged"}}</button> <button class="wide-button ranged-combat">{{localize "midgard5.combat-ranged"}}</button>
<button class="wide-button spell-combat">{{localize "midgard5.combat-spell"}}</button> <button class="wide-button spell-combat">{{localize "midgard5.combat-spell"}}</button>
@ -41,6 +54,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.weapon"}}</th> <th class="title">{{localize "TYPES.Item.weapon"}}</th>
<th class="title">{{localize "midgard5.ew"}}</th> <th class="title">{{localize "midgard5.ew"}}</th>
<th class="title">{{localize "midgard5.damage"}}</th> <th class="title">{{localize "midgard5.damage"}}</th>
@ -52,6 +66,7 @@
{{#each data.calc.gear.weapons as |item itemId|}} {{#each data.calc.gear.weapons as |item itemId|}}
{{#if item.equipped}} {{#if item.equipped}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding edit-item {{#if item.special}}highlight{{/if}}">{{item.label}}{{#if item.special}}(*){{/if}}</td> <td class="padding edit-item {{#if item.special}}highlight{{/if}}">{{item.label}}{{#if item.special}}(*){{/if}}</td>
<td class="fixed-value">{{item.calc.ew}}</td> <td class="fixed-value">{{item.calc.ew}}</td>
<td class="fixed-value">{{item.damageBase}}</td> <td class="fixed-value">{{item.damageBase}}</td>
@ -68,6 +83,7 @@
{{/each}} {{/each}}
<tr data-item-id="{{itemId}}"> <tr data-item-id="{{itemId}}">
<td class="flexpart-img"><img src="icons/skills/melee/unarmed-punch-fist-yellow-red.webp" class="flexpart-icon"></td>
<td class="padding edit-item">{{localize "midgard5.brawl"}}</td> <td class="padding edit-item">{{localize "midgard5.brawl"}}</td>
<td class="fixed-value">{{data.calc.stats.brawlFw}}</td> <td class="fixed-value">{{data.calc.stats.brawlFw}}</td>
<td class="fixed-value">1d6 -4</td> <td class="fixed-value">1d6 -4</td>
@ -80,6 +96,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.kampfkunst"}}</th> <th class="title">{{localize "TYPES.Item.kampfkunst"}}</th>
<th class="title">{{localize "midgard5.kampfkunst-variante-short"}}</th> <th class="title">{{localize "midgard5.kampfkunst-variante-short"}}</th>
<th class="title">{{localize "midgard5.ew"}}</th> <th class="title">{{localize "midgard5.ew"}}</th>
@ -90,6 +107,7 @@
<tbody class="items-list"> <tbody class="items-list">
{{#each data.calc.kampfkuenste as |item itemId|}} {{#each data.calc.kampfkuenste as |item itemId|}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding edit-item">{{item.label}}</td> <td class="padding edit-item">{{item.label}}</td>
<td> <td>
{{#if item.isKido}} {{#if item.isKido}}
@ -99,10 +117,8 @@
{{/unless}} {{/unless}}
{{else}} {{else}}
<span class="spell-process">{{localize (m5concat "midgard5.kampfkunst-type-" item.type)}}</span> <span class="spell-process">{{localize (m5concat "midgard5.kampfkunst-type-" item.type)}}</span>
{{#if (eq item.type "angriff")}}
<span class="spell-process">({{localize (m5concat "midgard5.kampfkunst-variante-" item.variante)}})</span> <span class="spell-process">({{localize (m5concat "midgard5.kampfkunst-variante-" item.variante)}})</span>
{{/if}} {{/if}}
{{/if}}
</td> </td>
<td class="fixed-value">{{item.calc.ew}}</td> <td class="fixed-value">{{item.calc.ew}}</td>
<td><button class="roll-button roll-weapon-button" /></td> <td><button class="roll-button roll-weapon-button" /></td>
@ -120,17 +136,20 @@
<table> <table>
<tr height = 10px></tr> <tr height = 10px></tr>
<tr> <tr>
<td class="flexpart-img"><img src="icons/magic/defensive/shield-barrier-glowing-blue.webp" class="flexpart-icon"></td>
<td class="padding edit-item highlight">{{localize "midgard5.defense"}}</td> <td class="padding edit-item highlight">{{localize "midgard5.defense"}}</td>
<td class="center">{{add data.calc.stats.defense.value data.calc.stats.defenseBonus.value}}</td> <td class="center">{{add data.calc.stats.defense.value data.calc.stats.defenseBonus.value}}</td>
<td class="fixed-value"><button class="roll-button roll-defense-button"></button></td> <td class="fixed-value"><button class="roll-button roll-defense-button"></button></td>
</tr> </tr>
<tr> <tr>
<td class="flexpart-img"><img src="icons/magic/nature/elemental-plant-humanoid.webp" class="flexpart-icon"></td>
<td class="padding edit-item highlight">{{localize "midgard5.resistanceMind"}}</td> <td class="padding edit-item highlight">{{localize "midgard5.resistanceMind"}}</td>
<td class="center">{{data.calc.stats.resistanceMind.value}}</td> <td class="center">{{data.calc.stats.resistanceMind.value}}</td>
<td class="fixed-value"><button class="roll-button roll-resistanceMind-button"></button></td> <td class="fixed-value"><button class="roll-button roll-resistanceMind-button"></button></td>
</tr> </tr>
<tr> <tr>
<td class="flexpart-img"><img src="icons/magic/control/silhouette-hold-change-green.webp" class="flexpart-icon"></td>
<td class="padding edit-item highlight">{{localize "midgard5.resistanceBody"}}</td> <td class="padding edit-item highlight">{{localize "midgard5.resistanceBody"}}</td>
<td class="center">{{data.calc.stats.resistanceBody.value}}</td> <td class="center">{{data.calc.stats.resistanceBody.value}}</td>
<td class="fixed-value"><button class="roll-button roll-resistanceBody-button"></button></td> <td class="fixed-value"><button class="roll-button roll-resistanceBody-button"></button></td>
@ -140,6 +159,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.defensiveWeapon"}}</th> <th class="title">{{localize "TYPES.Item.defensiveWeapon"}}</th>
<th class="title">{{localize "midgard5.ew"}}</th> <th class="title">{{localize "midgard5.ew"}}</th>
<th class="title">{{localize "midgard5.defenseBonus-short"}}</th> <th class="title">{{localize "midgard5.defenseBonus-short"}}</th>
@ -151,6 +171,7 @@
{{#each data.calc.gear.defensiveWeapons as |item itemId|}} {{#each data.calc.gear.defensiveWeapons as |item itemId|}}
{{#if item.equipped}} {{#if item.equipped}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding edit-item">{{item.label}}</td> <td class="padding edit-item">{{item.label}}</td>
<td class="fixed-value">{{item.calc.ew}}</td> <td class="fixed-value">{{item.calc.ew}}</td>
<td class="fixed-value">{{item.defenseBonus}}</td> <td class="fixed-value">{{item.defenseBonus}}</td>
@ -171,6 +192,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.armor"}}</th> <th class="title">{{localize "TYPES.Item.armor"}}</th>
<th class="title">{{localize "midgard5.actor-lp-short"}}</th> <th class="title">{{localize "midgard5.actor-lp-short"}}</th>
<th class="title center"><img src="/systems/midgard5/assets/icons/icon/battle-gear.svg" class="table-icon"></th> <th class="title center"><img src="/systems/midgard5/assets/icons/icon/battle-gear.svg" class="table-icon"></th>
@ -180,6 +202,7 @@
{{#each data.calc.gear.armor as |item itemId|}} {{#each data.calc.gear.armor as |item itemId|}}
{{#if item.equipped}} {{#if item.equipped}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding">{{item.label}}</td> <td class="padding">{{item.label}}</td>
<td class="fixed-value">{{lpProtection}}</td> <td class="fixed-value">{{lpProtection}}</td>
<td class="change-equipped"> <td class="change-equipped">
@ -196,4 +219,44 @@
</table> </table>
</div> </div>
</div> </div>
{{#if actor.system.info.magicUsing }}
<div class="flexcolumn-2">
<div class="flexpart">
<div class="flexpart-header"><img src="icons/magic/symbols/star-inverted-yellow.webp" class="flexpart-icon">{{localize "TYPES.Item.spell"}}</div>
<table>
<thead>
<tr>
<th class="title">{{localize "TYPES.Item.spell"}}</th>
<th class="title">{{localize "midgard5.spell-castDuration"}}</th>
<th class="title">{{localize "midgard5.actor-ap"}}</th>
<th class="title">{{localize "midgard5.ew"}}</th>
<th class="title center"><img src="/systems/midgard5/assets/icons/icon/battle-gear.svg" class="table-icon"></th>
<th class="title"><img src="/icons/svg/d20.svg" class="table-icon"></th>
</tr>
</thead>
<tbody class="items-list">
{{#each data.calc.spells as |item itemId|}}
{{#if item.equipped}}
<tr data-item-id="{{itemId}}" class="item">
<td class="padding edit-item {{#if item.special}}highlight{{/if}}">{{item.label}}{{#if item.special}}(*){{/if}}</td>
<td class="fixed-value">{{item.castDuration}}</td>
<td class="fixed-value">{{item.ap}}</td>
<td class="fixed-value">{{item.calc.ew}}</td>
<td class="change-equipped">
{{#if item.equipped}}
<i class="fa-solid fa-circle-check"></i>
{{else}}
<i class="fa-regular fa-circle"></i>
{{/if}}
</td>
<td><button class="roll-button roll-weapon-button"></button></td>
</tr>
{{/if}}
{{/each}}
</tbody>
</table>
</div>
</div>
{{/if}}
</div> </div>

View File

@ -1,6 +1,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.effect"}}</th> <th class="title">{{localize "TYPES.Item.effect"}}</th>
<td><a class="title add-effect"><i class="fa-regular fa-plus"></i></a></th> <td><a class="title add-effect"><i class="fa-regular fa-plus"></i></a></th>
@ -9,6 +10,7 @@
<tbody class="items-list"> <tbody class="items-list">
{{#each data.calc.gear.effects as |item itemId|}} {{#each data.calc.gear.effects as |item itemId|}}
<tr data-item-id="{{itemId}}" class="items"> <tr data-item-id="{{itemId}}" class="items">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding"> <td class="padding">
<span class="edit-item">{{item.label}}</span> <span class="edit-item">{{item.label}}</span>
{{#if item.equipped}} {{#if item.equipped}}
@ -18,7 +20,9 @@
{{/unless}} {{/unless}}
{{/if}} {{/if}}
</td> </td>
{{!--{{#unless (eq item.label "Belastung")}}--}}
<td class="fixed-value"><a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a></td> <td class="fixed-value"><a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a></td>
{{!--{{/unless}}--}}
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>

View File

@ -48,9 +48,9 @@
<tr height = 10px></tr> <tr height = 10px></tr>
<tr> <tr>
<td class="fixed-value"><input type="number" disabled="true" name="data.info.load" value="{{data.calc.stats.load}}"></td> <td class="fixed-value"><input type="number" disabled="true" name="data.info.load" value="{{data.calc.stats.load}}"></td>
<td class="fixed-value"><input type="number" disabled="true" {{#if (gte data.calc.stats.encumbrance data.calc.stats.heavyLoad) }}style="background:#FF6666"{{/if}} name="data.info.heavyLoad" value="{{data.calc.stats.heavyLoad}}"></td> <td class="fixed-value"><input type="number" disabled="true" {{#if (gt data.calc.stats.encumbrance data.calc.stats.heavyLoad) }}style="background:#FF6666"{{/if}} name="data.info.heavyLoad" value="{{data.calc.stats.heavyLoad}}"></td>
<td class="fixed-value"><input type="number" disabled="true" {{#if (gte data.calc.stats.encumbrance data.calc.stats.loadMax) }}style="background:#FF6666"{{/if}} name="data.info.loadMax" value="{{data.calc.stats.loadMax}}"></td> <td class="fixed-value"><input type="number" disabled="true" {{#if (gt data.calc.stats.encumbrance data.calc.stats.loadMax) }}style="background:#FF6666"{{/if}} name="data.info.loadMax" value="{{data.calc.stats.loadMax}}"></td>
<td class="fixed-value"><input type="number" disabled="true" {{#if (gte data.calc.stats.encumbrance data.calc.stats.thrustLoad) }}style="background:#FF6666"{{/if}} name="data.info.thrustLoad" value="{{data.calc.stats.thrustLoad}}"></td> <td class="fixed-value"><input type="number" disabled="true" {{#if (gt data.calc.stats.encumbrance data.calc.stats.thrustLoad) }}style="background:#FF6666"{{/if}} name="data.info.thrustLoad" value="{{data.calc.stats.thrustLoad}}"></td>
<td class="fixed-value"><input type="number" disabled="true" name="data.info.encumbrance" value="{{data.calc.stats.encumbrance}}"></td> <td class="fixed-value"><input type="number" disabled="true" name="data.info.encumbrance" value="{{data.calc.stats.encumbrance}}"></td>
</tr> </tr>
</tfoot> </tfoot>
@ -59,6 +59,7 @@
</div> </div>
</div> </div>
{{#unless (eq (count data.calc.gear.containers) 0)}}
<h3>{{localize "midgard5.itemsInContainers"}}</h3> <h3>{{localize "midgard5.itemsInContainers"}}</h3>
<div class="flexbox"> <div class="flexbox">
{{#each data.calc.gear.containers as |container containerId|}} {{#each data.calc.gear.containers as |container containerId|}}
@ -68,6 +69,7 @@
<table> <table>
<thead class="theader"> <thead class="theader">
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.item"}}</th> <th class="title">{{localize "TYPES.Item.item"}}</th>
<th class="title center">{{localize "midgard5.item-quantity"}}</th> <th class="title center">{{localize "midgard5.item-quantity"}}</th>
<th class="title center">{{localize "midgard5.item-value"}}</th> <th class="title center">{{localize "midgard5.item-value"}}</th>
@ -82,6 +84,7 @@
{{#each ../data.calc.gear.items as |item itemId|}} {{#each ../data.calc.gear.items as |item itemId|}}
{{#if (eq item.containerId containerId)}} {{#if (eq item.containerId containerId)}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding"> <td class="padding">
<span class="edit-item">{{item.label}}</span> <span class="edit-item">{{item.label}}</span>
</td> </td>
@ -115,6 +118,7 @@
{{#each ../data.calc.gear.weapons as |item itemId|}} {{#each ../data.calc.gear.weapons as |item itemId|}}
{{#if (eq item.containerId containerId)}} {{#if (eq item.containerId containerId)}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding"> <td class="padding">
<span class="edit-item">{{item.label}}</span> <span class="edit-item">{{item.label}}</span>
</td> </td>
@ -144,6 +148,7 @@
{{#each ../data.calc.gear.defensiveWeapons as |item itemId|}} {{#each ../data.calc.gear.defensiveWeapons as |item itemId|}}
{{#if (eq item.containerId containerId)}} {{#if (eq item.containerId containerId)}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding"> <td class="padding">
<span class="edit-item">{{item.label}}</span> <span class="edit-item">{{item.label}}</span>
</td> </td>
@ -173,6 +178,7 @@
{{#each ../data.calc.gear.armor as |item itemId|}} {{#each ../data.calc.gear.armor as |item itemId|}}
{{#if (eq item.containerId containerId)}} {{#if (eq item.containerId containerId)}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding"> <td class="padding">
<span class="edit-item">{{item.label}}</span> <span class="edit-item">{{item.label}}</span>
</td> </td>
@ -205,6 +211,9 @@
</div> </div>
{{/each}} {{/each}}
</div> </div>
{{/unless}}
<h3> <h3>
{{localize "midgard5.allItems"}} {{localize "midgard5.allItems"}}
@ -218,9 +227,11 @@
<table> <table>
<thead class="theader"> <thead class="theader">
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.container"}}</th> <th class="title">{{localize "TYPES.Item.container"}}</th>
<th class="title center">{{localize "midgard5.item-value"}}</th> <th class="title center">{{localize "midgard5.item-value"}}</th>
<th class="title center">{{localize "midgard5.item-weight"}}</th> <th class="title center">{{localize "midgard5.item-weight"}}</th>
<th class="title center">{{localize "midgard5.capacity"}}</th>
<th class="title center"><img src="/systems/midgard5/assets/icons/icon/battle-gear.svg" class="table-icon"></th> <th class="title center"><img src="/systems/midgard5/assets/icons/icon/battle-gear.svg" class="table-icon"></th>
<th class="title"><img src="/icons/svg/d20.svg" class="table-icon"></th> <th class="title"><img src="/icons/svg/d20.svg" class="table-icon"></th>
<td><a class="title add-container"><i class="fa-regular fa-plus"></i></a></th> <td><a class="title add-container"><i class="fa-regular fa-plus"></i></a></th>
@ -230,6 +241,7 @@
<tr height = 10px></tr> <tr height = 10px></tr>
{{#each data.calc.gear.containers as |item itemId|}} {{#each data.calc.gear.containers as |item itemId|}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding"> <td class="padding">
<span class="edit-item">{{item.label}}</span> <span class="edit-item">{{item.label}}</span>
</td> </td>
@ -243,6 +255,11 @@
<span class="spell-process">{{item.weight}} kg</span> <span class="spell-process">{{item.weight}} kg</span>
{{/unless}} {{/unless}}
</td> </td>
<td style="text-align: start">
{{#unless (eq item.capacity "")}}
<span class="spell-process">{{item.capacity}} kg</span>
{{/unless}}
</td>
<td class="change-equipped"> <td class="change-equipped">
{{#if item.equipped}} {{#if item.equipped}}
<i class="fa-solid fa-circle-check"></i> <i class="fa-solid fa-circle-check"></i>
@ -265,6 +282,7 @@
<table> <table>
<thead class="theader"> <thead class="theader">
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.item"}}</th> <th class="title">{{localize "TYPES.Item.item"}}</th>
<th class="title center">{{localize "midgard5.item-quantity"}}</th> <th class="title center">{{localize "midgard5.item-quantity"}}</th>
<th class="title center">{{localize "midgard5.item-value"}}</th> <th class="title center">{{localize "midgard5.item-value"}}</th>
@ -279,6 +297,7 @@
{{#each data.calc.gear.items as |item itemId|}} {{#each data.calc.gear.items as |item itemId|}}
{{#if (or ../data.info.showAllItems (eq item.containerId ""))}} {{#if (or ../data.info.showAllItems (eq item.containerId ""))}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding"> <td class="padding">
<span class="edit-item">{{item.label}}</span> <span class="edit-item">{{item.label}}</span>
</td> </td>
@ -321,6 +340,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.weapon"}}</th> <th class="title">{{localize "TYPES.Item.weapon"}}</th>
<th class="title center">{{localize "midgard5.item-value"}}</th> <th class="title center">{{localize "midgard5.item-value"}}</th>
<th class="title center">{{localize "midgard5.item-weight"}}</th> <th class="title center">{{localize "midgard5.item-weight"}}</th>
@ -333,6 +353,7 @@
{{#each data.calc.gear.weapons as |item itemId|}} {{#each data.calc.gear.weapons as |item itemId|}}
{{#if (or ../data.info.showAllItems (eq item.containerId ""))}} {{#if (or ../data.info.showAllItems (eq item.containerId ""))}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding edit-item">{{item.label}}</td> <td class="padding edit-item">{{item.label}}</td>
<td style="text-align: start"> <td style="text-align: start">
{{#unless (or (eq item.value 0) (eq item.currency ""))}} {{#unless (or (eq item.value 0) (eq item.currency ""))}}
@ -366,6 +387,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.defensiveWeapon"}}</th> <th class="title">{{localize "TYPES.Item.defensiveWeapon"}}</th>
<th class="title center">{{localize "midgard5.item-value"}}</th> <th class="title center">{{localize "midgard5.item-value"}}</th>
<th class="title center">{{localize "midgard5.item-weight"}}</th> <th class="title center">{{localize "midgard5.item-weight"}}</th>
@ -377,6 +399,7 @@
{{#each data.calc.gear.defensiveWeapons as |item itemId|}} {{#each data.calc.gear.defensiveWeapons as |item itemId|}}
{{#if (or ../data.info.showAllItems (eq item.containerId ""))}} {{#if (or ../data.info.showAllItems (eq item.containerId ""))}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding edit-item">{{item.label}}</td> <td class="padding edit-item">{{item.label}}</td>
<td style="text-align: start"> <td style="text-align: start">
{{#unless (or (eq item.value 0) (eq item.currency ""))}} {{#unless (or (eq item.value 0) (eq item.currency ""))}}
@ -410,6 +433,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.armor"}}</th> <th class="title">{{localize "TYPES.Item.armor"}}</th>
<th class="title center">{{localize "midgard5.item-value"}}</th> <th class="title center">{{localize "midgard5.item-value"}}</th>
<th class="title center">{{localize "midgard5.item-weight"}}</th> <th class="title center">{{localize "midgard5.item-weight"}}</th>
@ -421,6 +445,7 @@
{{#each data.calc.gear.armor as |item itemId|}} {{#each data.calc.gear.armor as |item itemId|}}
{{#if (or ../data.info.showAllItems (eq item.containerId ""))}} {{#if (or ../data.info.showAllItems (eq item.containerId ""))}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding edit-item">{{item.label}}</td> <td class="padding edit-item">{{item.label}}</td>
<td style="text-align: start"> <td style="text-align: start">
{{#unless (or (eq item.value 0) (eq item.currency ""))}} {{#unless (or (eq item.value 0) (eq item.currency ""))}}

View File

@ -15,7 +15,14 @@
</tr> </tr>
<tr> <tr>
<td >{{localize "midgard5.class"}}</td> <td >{{localize "midgard5.class"}}</td>
<td><input name="data.info.class" type="text" value="{{data.info.class}}" data-dtype="String" /></td> <td >
{{#each data.info.class as |class id|}}
<div class="chip" data-item-id="{{id}}">
<a class="edit-item" name="data.info.class" type="text" disabled="true" value="" data-dtype="String">{{class}}</a>
<span><a class="closebtn item-delete" title="Delete Item"><i class="fas fa-trash"></i></a></span>
</div>
{{/each}}
</td>
<td >{{localize "midgard5.level"}}</td> <td >{{localize "midgard5.level"}}</td>
<td>{{data.calc.level}}</td> <td>{{data.calc.level}}</td>
</table> </table>
@ -132,26 +139,26 @@
{{> "systems/midgard5/templates/sheets/character/base_values.hbs"}} {{> "systems/midgard5/templates/sheets/character/base_values.hbs"}}
</div> </div>
<div class="tab base_values flexcol" data-group="primary" data-tab="skills"> <div class="tab skills flexcol" data-group="primary" data-tab="skills">
{{> "systems/midgard5/templates/sheets/character/skills.hbs"}} {{> "systems/midgard5/templates/sheets/character/skills.hbs"}}
</div> </div>
<div class="tab base_values flexcol" data-group="primary" data-tab="gear"> <div class="tab gear flexcol" data-group="primary" data-tab="gear">
{{> "systems/midgard5/templates/sheets/character/gear.hbs"}} {{> "systems/midgard5/templates/sheets/character/gear.hbs"}}
</div> </div>
<div class="tab base_values flexcol" data-group="primary" data-tab="combat"> <div class="tab combat flexcol" data-group="primary" data-tab="combat">
{{> "systems/midgard5/templates/sheets/character/combat.hbs"}} {{> "systems/midgard5/templates/sheets/character/combat.hbs"}}
</div> </div>
<div class="tab base_values flexcol" data-group="primary" data-tab="spells"> <div class="tab spells flexcol" data-group="primary" data-tab="spells">
{{> "systems/midgard5/templates/sheets/character/spells.hbs"}} {{> "systems/midgard5/templates/sheets/character/spells.hbs"}}
</div> </div>
<div class="tab base_values flexcol" data-group="primary" data-tab="effects"> <div class="tab effects flexcol" data-group="primary" data-tab="effects">
{{> "systems/midgard5/templates/sheets/character/effects.hbs"}} {{> "systems/midgard5/templates/sheets/character/effects.hbs"}}
</div> </div>
<div class="tab base_values flexcol" data-group="primary" data-tab="description"> <div class="tab description flexcol" data-group="primary" data-tab="description">
{{> "systems/midgard5/templates/sheets/character/description.hbs"}} {{> "systems/midgard5/templates/sheets/character/description.hbs"}}
</div> </div>

View File

@ -6,6 +6,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "midgard5.innate-ability"}}</th> <th class="title">{{localize "midgard5.innate-ability"}}</th>
<th class="title">{{localize "midgard5.fw"}}</th> <th class="title">{{localize "midgard5.fw"}}</th>
<th class="title">{{localize "midgard5.bonus"}}</th> <th class="title">{{localize "midgard5.bonus"}}</th>
@ -17,6 +18,7 @@
<tbody class="items-list"> <tbody class="items-list">
{{#each data.calc.skills.innate as |skill skillId|}} {{#each data.calc.skills.innate as |skill skillId|}}
<tr data-item-id="{{skillId}}" class="item"> <tr data-item-id="{{skillId}}" class="item">
<td class="flexpart-img"><img src={{skill.icon}} class="flexpart-icon"></td>
<td class="padding edit-item">{{skill.label}}</td> <td class="padding edit-item">{{skill.label}}</td>
<td class="fixed-value">{{skill.fw}}</td> <td class="fixed-value">{{skill.fw}}</td>
<td class="fixed-value">{{skill.calc.bonus}}</td> <td class="fixed-value">{{skill.calc.bonus}}</td>
@ -25,22 +27,6 @@
<td><a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a></td> <td><a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a></td>
</tr> </tr>
{{/each}} {{/each}}
<tr data-item-id="{{itemId}}">
<td class="padding edit-item">{{localize "midgard5.perception"}}</td>
<td class="fixed-value">{{data.calc.stats.perceptionFW}}</td>
<td class="fixed-value">{{data.calc.stats.perception.value}}</td>
<td class="fixed-value">{{add data.calc.stats.perception.value data.calc.stats.perceptionFW}}</td>
<td><button class="roll-button roll-perception-button"></button></td>
<td class="fixed-value"></td>
</tr>
<tr data-item-id="{{itemId}}">
<td class="padding edit-item">{{localize "midgard5.drinking"}}</td>
<td class="fixed-value">{{data.calc.stats.drinkingFW}}</td>
<td class="fixed-value">{{data.calc.stats.drinking.value}}</td>
<td class="fixed-value">{{add data.calc.stats.drinking.value data.calc.stats.drinkingFW}}</td>
<td><button class="roll-button roll-drinking-button"></button></td>
<td class="fixed-value"></td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -67,7 +53,7 @@
<i class="fa fa-minus-circle fw-decrease" style="cursor: pointer"></i> <i class="fa fa-minus-circle fw-decrease" style="cursor: pointer"></i>
<span>{{skill.fw}}</span> <span>{{skill.fw}}</span>
<i class="fa fa-plus-circle fw-increase" style="cursor: pointer"></i> <i class="fa fa-plus-circle fw-increase" style="cursor: pointer"></i>
{{!-- {{</td><td class="fixed-value">{{skill.fw}}</td>}} --}} </td>
<td class="fixed-value">{{skill.calc.bonus}}</td> <td class="fixed-value">{{skill.calc.bonus}}</td>
<td class="fixed-value">{{skill.calc.ew}}</td> <td class="fixed-value">{{skill.calc.ew}}</td>
<td class="fixed-value">{{skill.pp}}</td> <td class="fixed-value">{{skill.pp}}</td>
@ -84,6 +70,7 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "midgard5.weapon-skill"}}</th> <th class="title">{{localize "midgard5.weapon-skill"}}</th>
<th class="title">{{localize "midgard5.fw"}}</th> <th class="title">{{localize "midgard5.fw"}}</th>
<th class="title">{{localize "midgard5.bonus"}}</th> <th class="title">{{localize "midgard5.bonus"}}</th>
@ -96,8 +83,13 @@
<tbody class="items-list"> <tbody class="items-list">
{{#each data.calc.skills.combat as |skill skillId|}} {{#each data.calc.skills.combat as |skill skillId|}}
<tr data-item-id="{{skillId}}" class="item"> <tr data-item-id="{{skillId}}" class="item">
<td class="flexpart-img"><img src={{skill.icon}} class="flexpart-icon"></td>
<td class="padding edit-item">{{skill.label}}</td> <td class="padding edit-item">{{skill.label}}</td>
<td class="fixed-value">{{skill.fw}}</td> <td>
<i class="fa fa-minus-circle fw-decrease" style="cursor: pointer"></i>
<span>{{skill.fw}}</span>
<i class="fa fa-plus-circle fw-increase" style="cursor: pointer"></i>
</td>
<td class="fixed-value">{{skill.calc.bonus}}</td> <td class="fixed-value">{{skill.calc.bonus}}</td>
<td class="fixed-value">{{skill.calc.ew}}</td> <td class="fixed-value">{{skill.calc.ew}}</td>
<td class="fixed-value">{{skill.pp}}</td> <td class="fixed-value">{{skill.pp}}</td>
@ -110,10 +102,11 @@
</div> </div>
<div class="flexpart"> <div class="flexpart">
<div class="flexpart-header"><img src="icons/sundries/scrolls/scroll-runed-worn-tan.webp" class="flexpart-icon">{{localize "midgard5.languages"}}</div> <div class="flexpart-header"><img src="icons/sundries/scrolls/scroll-runed-worn-tan.webp" class="flexpart-icon">{{localize "midgard5.languages"}} & {{localize "midgard5.writings"}}</div>
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "midgard5.language"}}</th> <th class="title">{{localize "midgard5.language"}}</th>
<th class="title">{{localize "midgard5.fw"}}</th> <th class="title">{{localize "midgard5.fw"}}</th>
<th class="title">{{localize "midgard5.bonus"}}</th> <th class="title">{{localize "midgard5.bonus"}}</th>
@ -126,8 +119,13 @@
<tbody class="items-list"> <tbody class="items-list">
{{#each data.calc.skills.language as |skill skillId|}} {{#each data.calc.skills.language as |skill skillId|}}
<tr data-item-id="{{skillId}}" class="item"> <tr data-item-id="{{skillId}}" class="item">
<td class="flexpart-img"><img src={{skill.icon}} class="flexpart-icon"></td>
<td class="padding edit-item">{{skill.label}}</td> <td class="padding edit-item">{{skill.label}}</td>
<td class="fixed-value">{{skill.fw}}</td> <td>
<i class="fa fa-minus-circle fw-decrease" style="cursor: pointer"></i>
<span>{{skill.fw}}</span>
<i class="fa fa-plus-circle fw-increase" style="cursor: pointer"></i>
</td>
<td class="fixed-value">{{skill.calc.bonus}}</td> <td class="fixed-value">{{skill.calc.bonus}}</td>
<td class="fixed-value">{{skill.calc.ew}}</td> <td class="fixed-value">{{skill.calc.ew}}</td>
<td class="fixed-value">{{skill.pp}}</td> <td class="fixed-value">{{skill.pp}}</td>

View File

@ -1,23 +1,106 @@
<div class="flexbox">
<div class="flexcolumn-1">
<div class="flexpart">
<div class="flexpart-header"><img src="icons/magic/symbols/star-inverted-yellow.webp" class="flexpart-icon">{{localize "midgard5.spellCasting"}}</div>
<table>
<tr height = 10px></tr>
<tr>
<td bgcolor="#eaead7" class="padding edit-item highlight" >{{localize "midgard5.spellCasting"}}</td>
<td bgcolor="#eaead7" class="center">{{data.calc.stats.spellCasting.value}}</td>
<td bgcolor="#eaead7" class="fixed-value" style="border-right: 1px solid black;"><button class="roll-button roll-cleanSpell-button" /></td>
<td class="padding edit-item highlight">{{localize "midgard5.defense"}}</td>
<td class="center">{{add data.calc.stats.defense.value data.calc.stats.defenseBonus.value}}</td>
<td class="fixed-value" style="border-right: 1px solid black;"><button class="roll-button roll-defense-button"></button></td>
<td bgcolor="#eaead7" class="padding edit-item highlight">{{localize "midgard5.resistanceMind"}}</td>
<td bgcolor="#eaead7" class="center">{{data.calc.stats.resistanceMind.value}}</td>
<td bgcolor="#eaead7" class="fixed-value" style="border-right: 1px solid black;"><button class="roll-button roll-resistanceMind-button"></button></td>
<td class="padding edit-item highlight">{{localize "midgard5.resistanceBody"}}</td>
<td class="center">{{data.calc.stats.resistanceBody.value}}</td>
<td class="fixed-value"><button class="roll-button roll-resistanceBody-button"></button></td>
</tr>
</table>
</div>
</div>
<div class="flexcolumn-1">
<div class="flexpart">
<div class="flexpart-header"><img src="icons/sundries/books/book-turquoise-moon.webp" class="flexpart-icon">{{localize "TYPES.Item.spell"}}</div>
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th>
<th class="title">{{localize "TYPES.Item.spell"}}</th> <th class="title">{{localize "TYPES.Item.spell"}}</th>
<th class="title">{{localize "midgard5.spell-type"}}</th>
<th class="title">{{localize "midgard5.spell-castDuration-short"}}</th>
<th class="title">{{localize "midgard5.actor-ap-short"}}</th>
<th class="title">{{localize "midgard5.spell-range-short"}}</th>
<th class="title">{{localize "midgard5.spell-effectTarget"}}</th>
<th class="title">{{localize "midgard5.spell-effectArea-short"}}</th>
<th class="title">{{localize "midgard5.spell-effectDuration-short"}}</th>
<th class="title">{{localize "midgard5.ew"}}</th> <th class="title">{{localize "midgard5.ew"}}</th>
<th class="title"></th> <th class="title"><img src="/systems/midgard5/assets/icons/icon/battle-gear.svg" class="table-icon"></th>
<th class="title"><img src="/icons/svg/d20.svg" class="table-icon"></th>
<td><a class="title add-spell"><i class="fa-regular fa-plus"></i></a></th> <td><a class="title add-spell"><i class="fa-regular fa-plus"></i></a></th>
</tr> </tr>
</thead> </thead>
<tbody class="items-list"> <tbody class="items-list">
{{#each data.calc.spells as |item itemId|}} {{#each data.calc.spells as |item itemId|}}
<tr data-item-id="{{itemId}}" class="item"> <tr data-item-id="{{itemId}}" class="item">
<td class="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding edit-item"> <td class="padding edit-item">
<span>{{item.label}}</span> <span>{{item.label}}</span>
<span class="spell-process">{{localize item.process}}</span> <span class="spell-process">{{localize item.process}}</span>
</td> </td>
<td class="fixed-value">{{localize (m5concat 'midgard5.spell-type-' item.type)}}</td>
<td class="fixed-value">{{item.castDuration}}</td>
<td class="fixed-value">{{item.ap}}</td>
<td class="fixed-value">{{item.range}}</td>
<td class="fixed-value">{{localize (m5concat 'midgard5.spell-target-' item.effectTarget)}}</td>
<td class="fixed-value">{{item.effectArea}}</td>
<td class="fixed-value">{{item.effectDuration}}</td>
<td class="fixed-value">{{item.calc.ew}}</td> <td class="fixed-value">{{item.calc.ew}}</td>
<td class="change-equipped">
{{#if item.equipped}}
<i class="fa-solid fa-circle-check"></i>
{{else}}
<i class="fa-regular fa-circle"></i>
{{/if}}
</td>
<td class="fixed-value"><button class="roll-button roll-weapon-button" /></td> <td class="fixed-value"><button class="roll-button roll-weapon-button" /></td>
<td class="fixed-value"><a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a></td> <td class="fixed-value"><a class="item-delete" title="Delete Item"><i class="fas fa-trash"></i></a></td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
</div>
</div>
</div>
<div class="flexcolumn-1">
<div class="flexpart">
<div class="flexpart-header">{{localize "midgard5.pp"}} {{localize "midgard5.spells"}}</div>
<table>
<tbody>
<tr>
<td colspan="4">
<div class="flexrow">
{{#each data.lernKostenZauber as |group name|}}
<span data-pp-name="{{name}}" class="pp-listing">
<label for="data.lernKostenZauber.{{name}}">{{localize (m5concat "midgard5.spell-process-" name)}}</label>
<span >
<i class="fa fa-minus-circle pp-decrease" style="cursor: pointer"></i>
<input style="width:15px" type="number" value={{group.pp}} data-dtype="Number" />
<i class="fa fa-plus-circle pp-increase" style="cursor: pointer"></i>
</span>
</span>
{{/each}}
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View File

@ -0,0 +1,109 @@
<form class="" autocomplete="off">
<header class="sheet-header">
<img class="item-img" src="{{item.img}}" data-edit="img" title="{{item.name}}" />
<h1><input name="name" type="text" value="{{item.name}}" placeholder="Name" /></h1>
</header>
<nav class="sheet-navigation tabs" data-group="primary">
<a class="item active" data-tab="base_values">{{localize "midgard5.base_values"}}</a>
<a class="item" data-tab="skills">{{localize "midgard5.skills"}}</a>
<a class="item" data-tab="combat">{{localize "midgard5.combat"}}</a>
{{#if data.magicUsing}}
<a class="item" data-tab="spells">{{localize "midgard5.spells"}}</a>
{{/if}}
<a class="item" data-tab="description">{{localize "midgard5.description"}}</a>
</nav>
<section class="sheet-content">
<div class="tab base_values flexcol" data-group="primary" data-tab="base_values">
<table>
<tbody>
<tr>
<td colspan="4">
<div class="flexrow">
<span>
<input id="data.magicUsing" type="checkbox" name="data.magicUsing" {{checked data.magicUsing}} />
<label for="data.magicUsing">{{localize "midgard5.magicUsing"}}</label>
</span>
</div>
</td>
</tr>
<tr>
<td>{{localize "midgard5.resistanceMind"}}</td>
<td><input style="width:35px" name="data.resistanceMind" type="number" value="{{data.resistanceMind}}" data-dtype="Number" /></td>
<td>{{localize "midgard5.resistanceBody"}}</td>
<td><input style="width:35px" name="data.resistanceBody" type="number" value="{{data.resistanceBody}}" data-dtype="Number" /></td>
</tr>
</tbody>
</table>
</div>
<div class="tab skills flexcol" data-group="primary" data-tab="skills">
<table>
<tbody>
<tr>
<td colspan="4">
<div class="flexrow">
{{#each data.lernKostenAllgemein as |wert name|}}
<span style="flex: 1 0 26%">
<label for="data.lernKostenAllgemein.{{name}}">{{localize (m5concat "midgard5.skill-goup-" name)}}</label>
<input style="width:35px" name="data.lernKostenAllgemein.{{name}}" type="number" value={{wert}} data-dtype="Number" />
</span>
{{/each}}
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="tab combat flexcol" data-group="primary" data-tab="combat">
<table>
<tbody>
<tr>
<td colspan="4">
<div class="flexrow">
{{#each data.lernKostenKamptechnik as |wert name|}}
<span style="flex: 1 0 26%">
<label for="data.lernKostenKamptechnik.{{name}}">{{localize (m5concat "midgard5." name)}}</label>
<input style="width:35px" name="data.lernKostenKamptechnik.{{name}}" type="number" value={{wert}} data-dtype="Number" />
</span>
{{/each}}
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="tab spells flexcol" data-group="primary" data-tab="spells">
<table>
<tbody>
<tr>
<td colspan="4">
<div class="flexrow">
{{#each data.lernKostenZauber as |wert name|}}
<span style="flex: 1 0 26%">
<label for="data.lernKostenZauber.{{name}}">{{localize (m5concat "midgard5.spell-process-" name)}}</label>
<input style="width:35px" name="data.lernKostenZauber.{{name}}.kosten" type="number" value={{wert.kosten}} data-dtype="Number" />
</span>
{{/each}}
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="tab description flexcol" data-group="primary" data-tab="description">
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
</div>
</section>
</form>

View File

@ -26,6 +26,12 @@
<input id="data.quantity" type="number" name="data.quantity" value="{{data.quantity}}"> <input id="data.quantity" type="number" name="data.quantity" value="{{data.quantity}}">
</div> </div>
</td> </td>
<td>
<div class="flexrow">
<span>{{localize "midgard5.capacity"}}</span>
<input id="data.capacity" type="number" name="data.capacity" value="{{data.capacity}}">
</div>
</td>
</tr> </tr>
<tr> <tr>
<td> <td>
@ -42,6 +48,12 @@
</select> </select>
</div> </div>
</td> </td>
<td>
<div class="flexrow">
<span>{{localize "midgard5.item-weight"}}</span>
<input id="data.weight" type="number" name="data.weight" value="{{data.weight}}">
</div>
</td>
</tr> </tr>
</table> </table>

View File

@ -22,6 +22,18 @@
<td>{{localize "midgard5.actor-ap"}}</td> <td>{{localize "midgard5.actor-ap"}}</td>
<td><input name="data.ap" type="text" value="{{data.ap}}" data-dtype="String" /></td> <td><input name="data.ap" type="text" value="{{data.ap}}" data-dtype="String" /></td>
</tr> </tr>
<tr>
<td>{{localize "midgard5.kampfkunst-ep"}}</td>
<td><input name="data.ep" type="text" value="{{data.ep}}" data-dtype="String" /></td>
<td>{{localize "midgard5.kampfkunst-rank"}}</td>
<td><input name="data.rank" type="text" value="{{data.rank}}" data-dtype="String" /></td>
</tr>
<tr>
<td>{{localize "midgard5.kampfkunst-weapon"}}</td>
<td><input name="data.weapon" type="text" value="{{data.weapon}}" data-dtype="String" /></td>
<td>{{localize "midgard5.kampfkunst-enemy"}}</td>
<td><input name="data.enemy" type="text" value="{{data.enemy}}" data-dtype="String" /></td>
</tr>
<tr> <tr>
{{#unless item.system.isKido}} {{#unless item.system.isKido}}
<td>{{localize "midgard5.kampfkunst-type"}}</td> <td>{{localize "midgard5.kampfkunst-type"}}</td>
@ -47,7 +59,6 @@
</td> </td>
{{/unless}} {{/unless}}
{{#unless item.system.isKido}} {{#unless item.system.isKido}}
{{#if (eq item.system.type "angriff")}}
<td>{{localize "midgard5.kampfkunst-variante"}}</td> <td>{{localize "midgard5.kampfkunst-variante"}}</td>
<td> <td>
<select class="select-variante" name="data.variante" data-type="String"> <select class="select-variante" name="data.variante" data-type="String">
@ -58,7 +69,6 @@
{{/select}} {{/select}}
</select> </select>
</td> </td>
{{/if}}
{{else}} {{else}}
{{#unless (eq item.system.type "finte")}} {{#unless (eq item.system.type "finte")}}
<td>{{localize "midgard5.kido-variante"}}</td> <td>{{localize "midgard5.kido-variante"}}</td>