Compare commits

..

11 Commits

Author SHA1 Message Date
Byroks 4a9afcf150 v2.7.2 2024-09-21 10:21:19 +02:00
Byroks 6a90581c4e Fix Versteckte Würfe & Ungelernte Würfe auf EW 2024-09-21 10:17:53 +02:00
LeFrique 7c7ba3679b KUS-Update (#116)
+ Fine Arts from KUS-QB
+ Bugfix for Wealth (again parseFloat) on higher and mixed values for gold, silver and copper

Neuer/alter Mitspieler mit viel zuviel Vermögen deckt kleine Mängel auf, immer diese reichen Elfen... und ich hab schnell noch die neuen Fertigkeiten für die Küstenstaaten eingetragen.

Reviewed-on: #116
Reviewed-by: Byroks <byroks@gmail.com>
Co-authored-by: LeFrique <lefrique@live.de>
Co-committed-by: LeFrique <lefrique@live.de>
2024-06-02 20:17:20 +02:00
Byroks 28e960dbf1 V2.7.1 2024-05-27 11:59:28 +02:00
Byroks e1c27bb3f1 Remove Console.log 2024-05-27 11:57:05 +02:00
Byroks f06fbb2687 Hot Fix
Changes:
 + NPC Stat anzeige updaten damit boni mit angezeigt werden
 + Shit fix Mods da attribute Mods Sekundäre effekte (Schadensbonus zb.) nicht angepasst haben
2024-05-27 11:56:10 +02:00
Byroks c5ce058f44 V2.7.0 2024-05-27 10:12:23 +02:00
Byroks 32bf1ba747 Fix PP anzeige von Zaubern (#115)
Changes:
 + PP werden wieder angezeigt
 + Es werden nur PP Angezeigt von Zauberschulen wo die lernkosten ungleich 0 sind
Reviewed-on: #115
2024-05-27 10:04:26 +02:00
Byroks 38f1c90c09 Fix Bonus bei Wurf anzeige (#114)
Changes:
 + Situations Boni wird nicht mehr auf den Würfel gerechnet sondern seperat angezeigt wie andere Boni
Reviewed-on: #114
Reviewed-by: Le-Frique <lefrique@live.de>
2024-05-27 10:03:54 +02:00
Byroks 1852f2bf08 Sneak Fixes
Changes:
 + EP Input vergrößert
 + Verstecke Ungelernte Fähigkeiten auf Spieler Bogen wie bei NPC Bogen
 + Fix Mods (again)
 + nutze richtige movement wert bei NPC Bogen
2024-05-26 09:56:02 +02:00
Byroks 918b32fda0 Attribute Mods verändern Boni nicht (#111)
Problem:
 + Mods für die Attribute (wie zb. bei dem Zauber Stärke) haben davon abgeleitete Werte (Wie Schadensbonus) nicht verändert

Changes:
 + Mods werden vor den abgeleiteten Werten ausgewertet

Reviewed-on: #111
Reviewed-by: Le-Frique <lefrique@live.de>
2024-05-22 08:15:47 +02:00
19 changed files with 96 additions and 302 deletions

View File

@ -1,6 +1,6 @@
{ {
"TYPES.Actor.character": "Charakter", "TYPES.Actor.character": "Charakter",
"ACTOR.TypeNpc": "Kreatur / Nichtspielerfigur", "TYPES.Actor.npc": "Kreatur / Nichtspielerfigur",
"ACTOR.TypeVehicle": "Transportmittel / Pferd etc.", "ACTOR.TypeVehicle": "Transportmittel / Pferd etc.",
"TYPES.Item.item": "Gegenstand", "TYPES.Item.item": "Gegenstand",
@ -16,18 +16,10 @@
"midgard5": { "midgard5": {
"phase-action": "Handlungsphase", "phase-action": "Handlungsphase",
"actionThisTurn": "Handlung",
"phase-movement": "Bewegungsphase", "phase-movement": "Bewegungsphase",
"no-encounter": "Kein Kampf", "no-encounter": "Kein Kampf",
"encounter-not-started": "Kein aktiver Kampf", "encounter-not-started": "Kein aktiver Kampf",
"initiative": "Initiative", "initiative": "Initiative",
"initiativeRoll": "Initiative würfeln",
"unableToAct": "Handlungsunfähig",
"unablesToAct": "Macht handlungsunfähig",
"continue": "Weiter",
"endTurn": "Zug beenden",
"group": "Gruppe",
"leader": "Anführer",
"actionrank": "Handlungsrang", "actionrank": "Handlungsrang",
"combat-join": "Kampf Beitreten/Handlungsrang zurücksetzen", "combat-join": "Kampf Beitreten/Handlungsrang zurücksetzen",
@ -101,7 +93,6 @@
"maximum": "Max.", "maximum": "Max.",
"attrvalue": "Wert", "attrvalue": "Wert",
"movementRange": "Bewegungsweite", "movementRange": "Bewegungsweite",
"movedThisTurn": "Bewegt",
"base_values": "Grundwerte", "base_values": "Grundwerte",
"skills": "Fertigkeiten", "skills": "Fertigkeiten",
@ -165,6 +156,10 @@
"beredsamkeit": "Beredsamkeit", "beredsamkeit": "Beredsamkeit",
"betaeuben": "Betäuben", "betaeuben": "Betäuben",
"betaeubungsgriff": "Betäubungsgriff", "betaeubungsgriff": "Betäubungsgriff",
"bildendeKuensteA": "Bildende Künste (Architektur)",
"bildendeKuensteB": "Bildende Künste (Bildhauerei)",
"bildendeKuensteG": "Bildende Künste (Grafik)",
"bildendeKuensteM": "Bildende Künste (Malerei)",
"bootfahren": "Bootfahren", "bootfahren": "Bootfahren",
"dickhaeuterLenken": "Dickhäuter lenken", "dickhaeuterLenken": "Dickhäuter lenken",
"ersteHilfe": "Erste Hilfe", "ersteHilfe": "Erste Hilfe",
@ -285,7 +280,7 @@
"defensive-weapon": "Verteidigungswaffe", "defensive-weapon": "Verteidigungswaffe",
"defensive-weapons": "Verteidigungswaffen", "defensive-weapons": "Verteidigungswaffen",
"no-skill": "Keine Fertigkeit", "no-skill": "Keine Fertigkeit",
"magic": "Magisch", "magic": "magisch",
"valuable": "Vermögen", "valuable": "Vermögen",
"equipped": "Ausgerüstet", "equipped": "Ausgerüstet",
"active": "Aktiv", "active": "Aktiv",

View File

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

View File

View File

@ -95,9 +95,6 @@ Hooks.on("getChatLogEntryContext", function (html, options) {
); );
}); });
Hooks.on("createCombatant", function () {
});
Hooks.on("updateCombat", function (combat: Combat, updateData: { round: number; turn: number }, updateOptions: { advanceTime: number; direction: number }) { Hooks.on("updateCombat", function (combat: Combat, updateData: { round: number; turn: number }, updateOptions: { advanceTime: number; direction: number }) {
if (combat.round % 2 === 0 && combat.turn !== null) { if (combat.round % 2 === 0 && combat.turn !== null) {
const tokenId = combat.current.tokenId; const tokenId = combat.current.tokenId;
@ -143,8 +140,15 @@ Hooks.on("updateCombat", function (combat: Combat, updateData: { round: number;
}); });
Hooks.on("renderCombatTracker", (combatTracker, html, context) => { Hooks.on("renderCombatTracker", (combatTracker, html, context) => {
handleRenderCombatTracker(combatTracker, html, context); if (context.combat === null) {
}); html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.no-encounter");
} else if (Math.ceil(context.round / 2) === 0) {
html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.encounter-not-started");
} else {
html.find("h3.encounter-title")[0].innerHTML =
(context.round % 2 == 1 ? game["i18n"].localize("midgard5.phase-movement") : game["i18n"].localize("midgard5.phase-action")) + " " + Math.ceil(context.round / 2);
}
});
Hooks.once("ready", () => { Hooks.once("ready", () => {
Logger.ok("Template module is now ready."); Logger.ok("Template module is now ready.");
@ -197,28 +201,3 @@ function limitHeal(heal: number, current: number, max: number): number {
} }
return heal; return heal;
} }
function handleRenderCombatTracker(combatTracker, html, context) {
let combatPhase = -1;
if (context.combat === null) {
combatPhase = 0;
html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.no-encounter");
} else if (Math.ceil(context.round / 2) === 0) {
combatPhase = 1;
html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.encounter-not-started");
} else if (context.round % 2 == 1) {
combatPhase = 2;
html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.phase-movement");
} else {
combatPhase = 3;
html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.phase-action") + " " + Math.ceil(context.round / 2);
}
console.log("Combat Phase: ", combatPhase);
context.combat?.setFlag('world', 'combatPhase', combatPhase);
for (const key in context.combat?.combatants.contents) {
let actorId = context.combat?.combatants.contents[key].actorId;
let actor = (game as Game).actors.get(actorId);
actor.render();
}
}

View File

@ -162,15 +162,6 @@ export interface M5AttributeCalculated extends M5ModResult {
export interface M5CharacterCalculatedData { export interface M5CharacterCalculatedData {
level: number; level: number;
initiative: number;
unableToAct: {
effectId: string;
enabled: boolean;
rounds: number;
reason: string;
};
group: string;
combatPhase: number;
movement: number; movement: number;
attributes: { attributes: {
st: M5AttributeCalculated; st: M5AttributeCalculated;

View File

@ -1,4 +1,3 @@
import { log } from "console";
import { M5Item } from "../items/M5Item"; import { M5Item } from "../items/M5Item";
import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ItemType, M5ModOperation, M5ModResult, M5RollData, M5Skill, M5SkillCalculated } from "../M5Base"; import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ItemType, M5ModOperation, M5ModResult, M5RollData, M5Skill, M5SkillCalculated } from "../M5Base";
import M5ModAggregate from "./M5ModAggregate"; import M5ModAggregate from "./M5ModAggregate";
@ -87,7 +86,6 @@ export class M5Character extends Actor {
): M5CharacterCalculatedData { ): M5CharacterCalculatedData {
let ret: M5CharacterCalculatedData = { let ret: M5CharacterCalculatedData = {
level: 0, level: 0,
initiative: 0,
attributes: { attributes: {
st: { value: 0, bonus: 0, mods: [] }, st: { value: 0, bonus: 0, mods: [] },
gs: { value: 0, bonus: 0, mods: [] }, gs: { value: 0, bonus: 0, mods: [] },
@ -153,11 +151,8 @@ export class M5Character extends Actor {
if (!data) return null; if (!data) return null;
ret.level = M5Character.levelFromExp(data.info.race === "Zwerg" ? Math.min(data.calc.stats?.hoard * 2 || 0, data.es) : data.es); ret.level = M5Character.levelFromExp(data.info.race === "Zwerg" ? Math.min(data.calc.stats?.hoard * 2 || 0, data.es) : data.es);
ret.initiative = M5Character.initiativeFromAnfuehren(data.calc.skills?.general, (game as Game).i18n.localize("midgard5.anfuehren"), data.skills.general.anfuehren.fw);
ret.unableToAct = M5Character.unableToActFromEffect(data.calc.gear?.effects);
ret.group = M5Character.groupFromDisposition(this);
ret.combatPhase = M5Character.combatPhaseFromEncounter(this);
//Set all values that are not dependent on another Value
ret.attributes.st.value = M5Character.attributeMinMax(data.attributes.st); // TODO item effects ret.attributes.st.value = M5Character.attributeMinMax(data.attributes.st); // TODO item effects
ret.attributes.gs.value = M5Character.attributeMinMax(data.attributes.gs); ret.attributes.gs.value = M5Character.attributeMinMax(data.attributes.gs);
ret.attributes.gw.value = M5Character.attributeMinMax(data.attributes.gw); ret.attributes.gw.value = M5Character.attributeMinMax(data.attributes.gw);
@ -182,11 +177,37 @@ export class M5Character extends Actor {
ret.stats.ap = this.modResult(data.ap); ret.stats.ap = this.modResult(data.ap);
ret.stats.lpProtection = this.modResult(0); ret.stats.lpProtection = this.modResult(0);
ret.stats.apProtection = this.modResult(0); ret.stats.apProtection = this.modResult(0);
ret.stats.movement = this.modResult(data.movement);
ret.stats.hoardMin = M5Character.levelThreshold.at(ret.level - 1) / 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(10));
ret.stats.hoard = 0;
ret.stats.encumbrance = 0;
if (!skip?.mods) {
const aggregate = new M5ModAggregate(data, ret);
context.items
?.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) => {
const mods = item.system.mods;
//console.log("Actor item mods", mods)
Object.keys(mods).forEach((modIndex) => {
const mod = mods[modIndex] as M5ItemMod;
aggregate.push(mod, item.name);
});
});
ret.skillMods = aggregate.calculate();
}
ret.stats.defense = this.modResult(M5Character.defenseFromLevel(ret.level)); ret.stats.defense = this.modResult(M5Character.defenseFromLevel(ret.level));
ret.stats.damageBonus = this.modResult(Math.floor(ret.attributes.st.value / 20) + Math.floor(ret.attributes.gs.value / 30) - 3); ret.stats.damageBonus = this.modResult(Math.floor(ret.attributes.st.value / 20) + Math.floor(ret.attributes.gs.value / 30) - 3);
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.resistanceMind = this.modResult(ret.stats.defense.value + (data.info.race === "Mensch" ? ret.attributes.in.bonus : this.raceBonus(data.info.race))); ret.stats.resistanceMind = this.modResult(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(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);
@ -197,15 +218,10 @@ export class M5Character extends Actor {
ret.stats.deprivationCold = this.modResult(Math.floor(ret.attributes.ko.value / 2)); ret.stats.deprivationCold = this.modResult(Math.floor(ret.attributes.ko.value / 2));
ret.stats.deprivationHeat = this.modResult(Math.floor(ret.attributes.ko.value / 2)); ret.stats.deprivationHeat = this.modResult(Math.floor(ret.attributes.ko.value / 2));
ret.stats.deprivationFood = this.modResult(Math.floor(40 + ret.attributes.ko.value / 2)); ret.stats.deprivationFood = this.modResult(Math.floor(40 + ret.attributes.ko.value / 2));
ret.stats.hoardMin = M5Character.levelThreshold.at(ret.level - 1) / 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.hoard = 0;
ret.stats.load = M5Character.loadValue(data.attributes.st); ret.stats.load = M5Character.loadValue(data.attributes.st);
ret.stats.heavyLoad = M5Character.heavyLoadValue(data.attributes.st); ret.stats.heavyLoad = M5Character.heavyLoadValue(data.attributes.st);
ret.stats.loadMax = M5Character.maxLoadValue(data.attributes.st); ret.stats.loadMax = M5Character.maxLoadValue(data.attributes.st);
ret.stats.thrustLoad = M5Character.thrustLoadValue(data.attributes.st); ret.stats.thrustLoad = M5Character.thrustLoadValue(data.attributes.st);
ret.stats.encumbrance = 0;
if (!skip?.mods) { if (!skip?.mods) {
const aggregate = new M5ModAggregate(data, ret); const aggregate = new M5ModAggregate(data, ret);
@ -500,7 +516,6 @@ export class M5Character extends Actor {
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,
unablesToAct: item.system?.unablesToAct || false,
duration: item.system?.duration || { time: 0, unit: "" }, duration: item.system?.duration || { time: 0, unit: "" },
}; };
}); });
@ -611,55 +626,6 @@ export class M5Character extends Actor {
return ret === -1 ? M5Character.levelThreshold.length : ret; return ret === -1 ? M5Character.levelThreshold.length : ret;
} }
static initiativeFromAnfuehren(list: object, anfuehren: string, unlearned: number): number {
for (const element in list) {
if (list[element].label.toLowerCase() === anfuehren.toLowerCase()) {
return list[element].calc.ew;
}
}
return unlearned;
}
static unableToActFromEffect(list: object): { effectId: string; enabled: boolean; rounds: number; reason: string } {
console.log("Effects:", list);
for (const element in list) {
if (list[element].unablesToAct) {
return {
effectId: list[element],
enabled: list[element].equipped,
rounds: list[element].duration.time,
reason: list[element].label,
};
}
}
return { effectId: "", enabled: false, rounds: 0, reason: "" };
}
static groupFromDisposition(actor: any): string {
// console.log("Group:", actor);
let disposition:number = 0;
if (actor.isToken) {
disposition = actor.token.disposition;
} else {
disposition = actor.prototypeToken.disposition;
}
switch ( disposition ) {
case 1: return "Spieler";
case -1: return "Gegner";
case 0: return "Gegner 2";
case 2: return "Gegner 3";
default: return "Unbekannt";
}
}
static combatPhaseFromEncounter(actor: any): any {
if (actor.inCombat) {
let combatPhase = (game as Game).combat.getFlag('world', 'combatPhase');
return combatPhase ? combatPhase : -1;
}
return -1;
}
static readonly defenseThreshold: Array<[number, number]> = [ static readonly defenseThreshold: Array<[number, number]> = [
[30, 18], [30, 18],
[25, 17], [25, 17],

View File

@ -11,7 +11,12 @@ 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, public id?: 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,7 +31,7 @@ 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; formula.formula = index === 0 && this.id !== "-1" ? formula.formula + `+ ${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;
}); });
@ -90,6 +95,7 @@ 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 ((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) { if ((this.data.i.type === "language" || this.data.i.type === "general") && this.data.rolls[0].dice[0] >= 16) {
ui.notifications.notify(`Praxispunkt eingetragen für ${this.actor.items.get(this.id).name}`);
this.actor.items.get(this.id).update({ this.actor.items.get(this.id).update({
system: { system: {
pp: this.data.i.pp + 1, pp: this.data.i.pp + 1,
@ -97,6 +103,7 @@ export class M5Roll {
}); });
} else if (this.data.rolls[0].dice[0] === 20) { } else if (this.data.rolls[0].dice[0] === 20) {
if (this.data.i.type === "combat") { if (this.data.i.type === "combat") {
ui.notifications.notify(`Praxispunkt eingetragen für ${this.actor.items.get(this.id).name}`);
// Rolling through skill // Rolling through skill
this.actor.items.get(this.id).update({ this.actor.items.get(this.id).update({
system: { system: {
@ -104,6 +111,7 @@ export class M5Roll {
}, },
}); });
} else if (this.data.iType === "weapon") { } else if (this.data.iType === "weapon") {
ui.notifications.notify(`Praxispunkt eingetragen für ${this.actor.items.get(this.id).name}`);
// Rolling through Weapon Item // Rolling through Weapon Item
const skill = this.actor.items.get(this.data.i.skillId); const skill = this.actor.items.get(this.data.i.skillId);
skill.update({ skill.update({
@ -112,6 +120,7 @@ export class M5Roll {
}, },
}); });
} else if (this.data.iType === "defensiveWeapon") { } else if (this.data.iType === "defensiveWeapon") {
ui.notifications.notify(`Praxispunkt eingetragen für ${this.actor.items.get(this.id).name}`);
// Rolling through defensiveWeapon Item // Rolling through defensiveWeapon Item
const skill = this.actor.items.get(this.data.i.skillId); const skill = this.actor.items.get(this.data.i.skillId);
skill.update({ skill.update({
@ -120,6 +129,7 @@ export class M5Roll {
}, },
}); });
} else if (this.data.iType === "spell") { } else if (this.data.iType === "spell") {
ui.notifications.notify(`Praxispunkt eingetragen für ${this.data.i.process}`);
// Rolling through Spell Item // Rolling through Spell Item
const klasse = this.actor.items.find((x) => x.type === "class" && x.system.equipped); const klasse = this.actor.items.find((x) => x.type === "class" && x.system.equipped);
klasse.update({ klasse.update({
@ -145,14 +155,14 @@ export class M5Roll {
async toMessage(toggleAutomatedRoll = false) { async toMessage(toggleAutomatedRoll = false) {
let automatedRoll = (game as Game).settings.get("midgard5", "automatedRoll"); let automatedRoll = (game as Game).settings.get("midgard5", "automatedRoll");
automatedRoll = toggleAutomatedRoll ? !automatedRoll : automatedRoll; automatedRoll = toggleAutomatedRoll ? !automatedRoll : automatedRoll;
const rMode = (game as Game).settings.get("core", "rollMode"); let rMode = (game as Game).settings.get("core", "rollMode");
if (!automatedRoll) { if (!automatedRoll) {
let checkOptions = await this.popUp({ isPW: this.data.rolls[0].label === (game as Game).i18n.localize("midgard5.pw") }); let checkOptions = await this.popUp({ isPW: this.data.rolls[0].label === (game as Game).i18n.localize("midgard5.pw") });
if (checkOptions["cancelled"]) { if (checkOptions["cancelled"]) {
return; return;
} else { } else {
const rMode = checkOptions["rollMode"]; rMode = checkOptions["rollMode"];
this.data.b = checkOptions; this.data.b = checkOptions;
} }
} else { } else {
@ -212,7 +222,7 @@ export class M5Roll {
rollData.rolls["0"] = { rollData.rolls["0"] = {
formula: "1d20 + @i.fw + @i.bonus", formula: "1d20 + @i.fw + @i.bonus",
enabled: true, enabled: true,
label: (game as Game).i18n.localize("midgard5.pw"), label: (game as Game).i18n.localize("midgard5.ew"),
result: "", result: "",
total: 0, total: 0,
totalStr: "", totalStr: "",

View File

@ -5,7 +5,6 @@
.midgard5 { .midgard5 {
.flexbox { .flexbox {
display: flex; display: flex;
align-items: stretch;
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
} }
@ -18,31 +17,26 @@
.flexcolumn-1 { .flexcolumn-1 {
flex-basis: 100%; flex-basis: 100%;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: column;
} }
.flexcolumn-2 { .flexcolumn-2 {
flex-basis: 50%; flex-basis: 50%;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: column;
} }
.flexcolumn-3 { .flexcolumn-3 {
flex-basis: 33%; flex-basis: 33%;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: column;
} }
.flexcolumn-4 { .flexcolumn-4 {
flex-basis: 25%; flex-basis: 25%;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: column;
} }
.flexcolumn-5 { .flexcolumn-5 {
flex-basis: 20%; flex-basis: 20%;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: column;
} }
.flexpart { .flexpart {
@ -69,7 +63,7 @@
} }
.flexrow { .flexrow {
flex-direction: row; align-items: center;
} }
h3 { h3 {
@ -85,11 +79,6 @@
border-radius: 10px; border-radius: 10px;
} }
.fixed-value {
width: 3rem;
text-align: center;
}
.profile-img { .profile-img {
display: block; display: block;
margin-left: auto; margin-left: auto;

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.6.0", "version": "2.7.2",
"compatibility": { "compatibility": {
"minimum": "10", "minimum": "10",
"verified": "11", "verified": "11",

View File

@ -23,16 +23,13 @@
"origin": "", "origin": "",
"faith": "", "faith": "",
"level": 1, "level": 1,
"leader": false,
"gold": 0, "gold": 0,
"silver": 0, "silver": 0,
"copper": 0 "copper": 0,
"showAllItems": false,
"showUnlearned": false
} }
}, },
"settings": {
"showAllItems": false,
"showUnlearned": false
},
"characterBars": { "characterBars": {
"lp": { "lp": {
"value": 15, "value": 15,
@ -84,6 +81,10 @@
"bergreiten": { "fw": 0, "attribute": "gw", "initial": 12, "pp": 0 }, "bergreiten": { "fw": 0, "attribute": "gw", "initial": 12, "pp": 0 },
"betaeuben": { "fw": 6, "attribute": "gs", "initial": 8, "pp": 0 }, "betaeuben": { "fw": 6, "attribute": "gs", "initial": 8, "pp": 0 },
"betaeubungsgriff": { "fw": 0, "attribute": "in", "initial": 8, "pp": 0 }, "betaeubungsgriff": { "fw": 0, "attribute": "in", "initial": 8, "pp": 0 },
"bildendeKuensteA": { "fw": 0, "attribute": "gs", "initial": 12, "pp": 0 },
"bildendeKuensteB": { "fw": 0, "attribute": "gs", "initial": 12, "pp": 0 },
"bildendeKuensteG": { "fw": 0, "attribute": "gs", "initial": 12, "pp": 0 },
"bildendeKuensteM": { "fw": 0, "attribute": "gs", "initial": 12, "pp": 0 },
"bootfahren": { "fw": 3, "attribute": "gs", "initial": 8, "pp": 0 }, "bootfahren": { "fw": 3, "attribute": "gs", "initial": 8, "pp": 0 },
"dickhaeuterLenken": { "fw": 0, "attribute": "gs", "initial": 8, "pp": 0 }, "dickhaeuterLenken": { "fw": 0, "attribute": "gs", "initial": 8, "pp": 0 },
"ersteHilfe": { "fw": 0, "attribute": "gs", "initial": 8, "pp": 0 }, "ersteHilfe": { "fw": 0, "attribute": "gs", "initial": 8, "pp": 0 },
@ -166,11 +167,11 @@
} }
}, },
"character": { "character": {
"templates": ["characterBars", "settings", "attributes", "characterDescription", "characterHeader", "skills", "gear"], "templates": ["characterBars", "attributes", "characterDescription", "characterHeader", "skills", "gear"],
"calc": {} "calc": {}
}, },
"npc": { "npc": {
"templates": ["characterBars", "settings", "attributes", "characterDescription", "skills", "gear"], "templates": ["characterBars", "attributes", "characterDescription", "skills", "gear"],
"calc": {} "calc": {}
} }
}, },
@ -377,7 +378,6 @@
}, },
"effect": { "effect": {
"templates": ["itemDescription", "equippable", "physical", "durationSelection"], "templates": ["itemDescription", "equippable", "physical", "durationSelection"],
"unablesToAct": false,
"rolls": { "rolls": {
"formulas": {}, "formulas": {},
"output": "" "output": ""

View File

@ -35,7 +35,7 @@
<td>{{localize "midgard5.grace"}}</td> <td>{{localize "midgard5.grace"}}</td>
<td><input name="data.gg" type="text" value="{{data.gg}}" data-dtype="Number" /></td> <td><input name="data.gg" type="text" value="{{data.gg}}" data-dtype="Number" /></td>
<td>{{localize "midgard5.exp-overall"}}</td> <td>{{localize "midgard5.exp-overall"}}</td>
<td><input name="data.es" type="text" value="{{data.es}}" data-dtype="Number" /></td> <td width="40%"><input name="data.es" type="text" value="{{data.es}}" data-dtype="Number" /></td>
</tr> </tr>
<tr> <tr>
<td>{{localize "midgard5.destiny"}}</td> <td>{{localize "midgard5.destiny"}}</td>

View File

@ -1,140 +1,5 @@
<h3>{{localize "midgard5.combatPhases"}}</h3>
<div class="flexbox flexpart">
<div class="flexcolumn-2 flexpart" style="flex: 1 1 200px;">
<div class="flexpart-header"><img src="icons/magic/time/arrows-circling-pink.webp" class="flexpart-icon">{{localize "midgard5.initiative"}}</div>
<br>
<div class="flexrow">
<div style="font-weight: 800;">{{localize "midgard5.group"}}:</div>
<div class="fixed-value" style="font-weight: 800;">{{data.calc.group}}</div>
</div>
<div class="flexrow">
<div style="font-weight: 800;">{{localize "midgard5.anfuehren"}}:</div>
<div class="fixed-value" style="font-weight: 800;">{{data.calc.initiative}}</div>
</div>
<br>
{{#if data.calc.unableToAct.enabled}}
<div class="flexrow">
<div>{{localize "midgard5.unableToAct"}}</div>
<div class="fixed-value;"><input type="checkbox" name="data.calc.unableToAct.enabled" {{checked data.calc.unableToAct.enabled}} disabled="disabled"></div>
<div class="fixed-value"><button class="roll-button roll-unableToAct-button"></button></div>
</div>
<div class="flexrow">
&nbsp; &nbsp;
<div>{{localize "midgard5.time-round"}}</div>
<div class="fixed-value"><input type="number" name="data.calc.unableToAct.roundsRemaining" value="{{data.calc.unableToAct.roundsRemaining}}"></div>
</div>
{{/if}}
{{#unless data.calc.unableToAct.enabled}}
<div class="flexrow">
<div>{{localize "midgard5.leader"}}</div>
<div class="fixed-value;"><input type="checkbox" name="data.info.leader" {{checked data.info.leader}}></div>
</div>
{{#if data.info.leader}}
<div class="flexrow">
<button class="wide-button rollInitiative">{{localize "midgard5.initiativeRoll"}}</button>
</div>
{{/if}}
{{/unless}}
<div class="flexpart-header"><img src="icons/magic/time/arrows-circling-pink.webp" class="flexpart-icon">{{localize "midgard5.phase-movement"}}</div>
<br>
<div class="flexrow">
<div style="font-weight: 800;">{{localize "midgard5.movementRange"}}:</div>
<div class="fixed-value" style="font-weight: 800;">{{data.calc.stats.movement.value}}</div>
</div>
<br>
<div class="flexrow">
<div><label for="tM1">{{localize "midgard5.movedThisTurn"}}: max. 1m</label></div>
<div><input type="radio" id="tM1" name="gwModificator" value="1"></div>
</div>
<div class="flexrow">
<div><label for="tM2">{{localize "midgard5.movedThisTurn"}}: max.B/2m</label></div>
<div><input type="radio" id="tM2" name="gwModificator" value="0.5"></div>
</div>
<div class="flexrow">
<div><label for="tM3">{{localize "midgard5.movedThisTurn"}}: max. {{data.calc.stats.movement.value}}m</label></div>
<div><input type="radio" id="tm3" name="gwModificator" value="0"></div>
</div>
<div class="flexrow">
<div><label for="tM4">Eigener GW Multiplikator</label></div>
<div><input type="radio" id="tm4" name="dedicatedgwModificator" value="1"></div>
</div>
<div class="flexrow">
<div>&nbsp;&nbsp;<label for="tM5">GW Multiplikator:</label></div>
<div class="fixed-value;"><input type="float" id="tm5" name="gwModificator" value="0" ></div>
</div>
<div class="flexrow">
<button class="wide-button continueToAction">{{localize "midgard5.continue"}}</button>
</div>
</div>
<div class="flexcolumn-2 flexpart" style="flex: 1 1 200px;">
<div class="flexpart-header"><img src="icons/magic/time/arrows-circling-pink.webp" class="flexpart-icon">{{localize "midgard5.phase-action"}}</div>
<br>
<div class="flexrow">
<div style="font-weight: 800;">{{localize "midgard5.actionrank"}} :</div>
<div class="fixed-value" style="font-weight: 800;">{{data.calc.attributes.gw.value}}</div>
</div>
<br>
<div class="flexrow">
<div><label for="a1">{{localize "midgard5.actionThisTurn"}}: 10s</label></div>
<div><input type="radio" id="a1" name="gwModificator" value="1"></div>
</div>
<div class="flexrow">
<div><label for="a2">{{localize "midgard5.actionThisTurn"}}: 5s</label></div>
<div><input type="radio" id="a2" name="gwModificator" value="0.5"></div>
</div>
<div class="flexrow">
<div><label for="a3">{{localize "midgard5.actionThisTurn"}}: 1s</label></div>
<div><input type="radio" id="a3" name="gwModificator" value="0"></div>
</div>
<div class="flexrow">
<div><label for="a4">Manuelle Eingabe</label></div>
<div><input type="radio" id="a4" name="dedicatedgwModificator" value="1"></div>
</div>
<div class="flexrow">
<div>&nbsp;&nbsp;<label for="a5">{{localize "midgard5.actionrank"}}:</label></div>
<div class="fixed-value;"><input type="float" id="a5" name="midgard5.actionThisTurn" value="0" ></div>
</div>
<div class="flexrow">
<button class="wide-button endTurn">{{localize "midgard5.endTurn"}}</button>
</div>
<div class="flexpart-header"><img src="icons/magic/time/arrows-circling-pink.webp" class="flexpart-icon">{{localize "midgard5.phase-action"}}</div>
<br>
<div class="flexrow">
<div style="font-weight: 800;">{{localize "midgard5.actionrank"}} :</div>
<div class="fixed-value" style="font-weight: 800;">{{data.calc.attributes.gw.value}}</div>
</div>
<br>
<div class="flexrow">
<div><label for="a1">{{localize "midgard5.actionThisTurn"}}: 10s</label></div>
<div><input type="radio" id="a1" name="gwModificator" value="1"></div>
</div>
<div class="flexrow">
<div><label for="a2">{{localize "midgard5.actionThisTurn"}}: 5s</label></div>
<div><input type="radio" id="a2" name="gwModificator" value="0.5"></div>
</div>
<div class="flexrow">
<div><label for="a3">{{localize "midgard5.actionThisTurn"}}: 1s</label></div>
<div><input type="radio" id="a3" name="gwModificator" value="0"></div>
</div>
<div class="flexrow">
<div><label for="a4">Manuelle Eingabe</label></div>
<div><input type="radio" id="a4" name="dedicatedgwModificator" value="1"></div>
</div>
<div class="flexrow">
<div>&nbsp;&nbsp;<label for="a5">{{localize "midgard5.actionrank"}}:</label></div>
<div class="fixed-value;"><input type="float" id="a5" name="midgard5.actionThisTurn" value="0" ></div>
</div>
<div class="flexrow">
<button class="wide-button endTurn">{{localize "midgard5.endTurn"}}</button>
</div>
</div>
</div>
<h3>{{localize "midgard5.combat"}}</h3>
<div class="flexbox"> <div class="flexbox">
<div class="flexcolumn-2"> <div class="flexcolumn-2">
<div class="flexpart"> <div class="flexpart">
<div class="flexpart-header"><img src="icons/magic/time/arrows-circling-pink.webp" class="flexpart-icon">{{localize "midgard5.calculated-values"}}</div> <div class="flexpart-header"><img src="icons/magic/time/arrows-circling-pink.webp" class="flexpart-icon">{{localize "midgard5.calculated-values"}}</div>

View File

@ -3,7 +3,7 @@
<tr> <tr>
<th class="title"><img src="/icons/svg/eye.svg" class="table-icon"></th> <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>
<th><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>
</tr> </tr>
</thead> </thead>

View File

@ -217,8 +217,8 @@
<h3> <h3>
{{localize "midgard5.allItems"}} {{localize "midgard5.allItems"}}
<input id="data.settings.showAllItems" class="checkbox" type="checkbox" name="data.settings.showAllItems" {{checked data.settings.showAllItems}} style="float: right;"> <input id="data.info.showAllItems" class="checkbox" type="checkbox" name="data.info.showAllItems" {{checked data.info.showAllItems}} style="float: right;">
<label for="data.settings.showAllItems" style="font-size: small; font-weight: normal; font-style: italic; float: right;">{{localize "midgard5.showAll"}}&nbsp;</label> <label for="data.info.showAllItems" style="font-size: small; font-weight: normal; font-style: italic; float: right;">{{localize "midgard5.showAll"}}&nbsp;</label>
</h3> </h3>
<div class="flexbox"> <div class="flexbox">
<div class="flexcolumn-2"> <div class="flexcolumn-2">
@ -295,7 +295,7 @@
<tbody class="items-list"> <tbody class="items-list">
<tr height = 10px></tr> <tr height = 10px></tr>
{{#each data.calc.gear.items as |item itemId|}} {{#each data.calc.gear.items as |item itemId|}}
{{#if (or ../data.settings.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="flexpart-img"><img src={{item.icon}} class="flexpart-icon"></td>
<td class="padding"> <td class="padding">
@ -351,7 +351,7 @@
</thead> </thead>
<tbody class="items-list"> <tbody class="items-list">
{{#each data.calc.gear.weapons as |item itemId|}} {{#each data.calc.gear.weapons as |item itemId|}}
{{#if (or ../data.settings.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="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>
@ -397,7 +397,7 @@
</thead> </thead>
<tbody class="items-list"> <tbody class="items-list">
{{#each data.calc.gear.defensiveWeapons as |item itemId|}} {{#each data.calc.gear.defensiveWeapons as |item itemId|}}
{{#if (or ../data.settings.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="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>
@ -443,7 +443,7 @@
</thead> </thead>
<tbody class="items-list"> <tbody class="items-list">
{{#each data.calc.gear.armor as |item itemId|}} {{#each data.calc.gear.armor as |item itemId|}}
{{#if (or ../data.settings.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="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>

View File

@ -142,6 +142,8 @@
<div class="flexpart"> <div class="flexpart">
<div class="flexpart-header"><img src="icons/sundries/gaming/dice-pair-white-green.webp" class="flexpart-icon">{{localize "midgard5.unlearned-skills"}}</div> <div class="flexpart-header"><img src="icons/sundries/gaming/dice-pair-white-green.webp" class="flexpart-icon">{{localize "midgard5.unlearned-skills"}}</div>
<input id="data.info.showUnlearned" class="checkbox" type="checkbox" name="data.info.showUnlearned" {{checked data.info.showUnlearned}} style="float: right;">
<label for="data.info.showUnlearned" style="font-size: small; font-weight: normal; font-style: italic; float: right;">{{localize "midgard5.showUnlearned"}}&nbsp;</label>
<table> <table>
<thead> <thead>
<tr> <tr>
@ -154,6 +156,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{#unless (not data.info.showUnlearned)}}
{{#each data.skills.general as |skill key|}} {{#each data.skills.general as |skill key|}}
{{#unless (isSkillInList (localizeMidgard key) ../actor.system.calc.skills.general) }} {{#unless (isSkillInList (localizeMidgard key) ../actor.system.calc.skills.general) }}
<tr data-skill="{{key}}"> <tr data-skill="{{key}}">
@ -166,6 +169,7 @@
</tr> </tr>
{{/unless}} {{/unless}}
{{/each}} {{/each}}
{{/unless}}
</tbody> </tbody>
</table> </table>
</div> </div>

View File

@ -77,7 +77,6 @@
</div> </div>
</div> </div>
{{#if (eq data.types.actor)}}
<div class="flexcolumn-1"> <div class="flexcolumn-1">
<div class="flexpart"> <div class="flexpart">
<div class="flexpart-header">{{localize "midgard5.pp"}} {{localize "midgard5.spells"}}</div> <div class="flexpart-header">{{localize "midgard5.pp"}} {{localize "midgard5.spells"}}</div>
@ -88,6 +87,7 @@
<div class="flexrow"> <div class="flexrow">
{{#each data.lernKostenZauber as |group name|}} {{#each data.lernKostenZauber as |group name|}}
{{#unless (eq group.kosten 0)}}
<span data-pp-name="{{name}}" class="pp-listing"> <span data-pp-name="{{name}}" class="pp-listing">
<label for="data.lernKostenZauber.{{name}}">{{localize (m5concat "midgard5.spell-process-" name)}}</label> <label for="data.lernKostenZauber.{{name}}">{{localize (m5concat "midgard5.spell-process-" name)}}</label>
<span > <span >
@ -96,6 +96,7 @@
<i class="fa fa-plus-circle pp-increase" style="cursor: pointer"></i> <i class="fa fa-plus-circle pp-increase" style="cursor: pointer"></i>
</span> </span>
</span> </span>
{{/unless}}
{{/each}} {{/each}}
</div> </div>
</td> </td>
@ -104,5 +105,4 @@
</table> </table>
</div> </div>
</div> </div>
{{/if}}
</div> </div>

View File

@ -16,11 +16,6 @@
<input id="data.magic" type="checkbox" name="data.magic" {{checked data.magic}}> <input id="data.magic" type="checkbox" name="data.magic" {{checked data.magic}}>
<label for="data.magic">{{localize "midgard5.magic"}}</label> <label for="data.magic">{{localize "midgard5.magic"}}</label>
</span> </span>
<span>
<input id="data.unablesToAct" type="checkbox" name="data.unablesToAct" {{checked data.unablesToAct}}>
<label for="data.unablesToAct">{{localize "midgard5.unablesToAct"}}</label>
</span>
</div> </div>
</td> </td>
</tr> </tr>

View File

@ -34,16 +34,16 @@
<table style="width: 100%;"> <table style="width: 100%;">
<tr> <tr>
<td class="attribute-value roll-attribute-button" data-attribute="st" data-value="{{data.attributes.st.value}}">{{data.attributes.st.value}}</td> <td class="attribute-value roll-attribute-button" data-attribute="st" data-value="{{data.calc.attributes.st.value}}">{{data.calc.attributes.st.value}}</td>
<td class="attribute-value roll-attribute-button" data-attribute="gs" data-value="{{data.attributes.gs.value}}">{{data.attributes.gs.value}}</td> <td class="attribute-value roll-attribute-button" data-attribute="gs" data-value="{{data.calc.attributes.gs.value}}">{{data.calc.attributes.gs.value}}</td>
<td class="attribute-value roll-attribute-button" data-attribute="gw" data-value="{{data.attributes.gw.value}}">{{data.attributes.gw.value}}</td> <td class="attribute-value roll-attribute-button" data-attribute="gw" data-value="{{data.calc.attributes.gw.value}}">{{data.calc.attributes.gw.value}}</td>
<td class="attribute-value roll-attribute-button" data-attribute="ko" data-value="{{data.attributes.ko.value}}">{{data.attributes.ko.value}}</td> <td class="attribute-value roll-attribute-button" data-attribute="ko" data-value="{{data.calc.attributes.ko.value}}">{{data.calc.attributes.ko.value}}</td>
<td class="attribute-value roll-attribute-button" data-attribute="in" data-value="{{data.attributes.in.value}}">{{data.attributes.in.value}}</td> <td class="attribute-value roll-attribute-button" data-attribute="in" data-value="{{data.calc.attributes.in.value}}">{{data.calc.attributes.in.value}}</td>
<td class="attribute-value roll-attribute-button" data-attribute="zt" data-value="{{data.attributes.zt.value}}">{{data.attributes.zt.value}}</td> <td class="attribute-value roll-attribute-button" data-attribute="zt" data-value="{{data.calc.attributes.zt.value}}">{{data.calc.attributes.zt.value}}</td>
<td class="attribute-value roll-attribute-button" data-attribute="au" data-value="{{data.attributes.au.value}}">{{data.attributes.au.value}}</td> <td class="attribute-value roll-attribute-button" data-attribute="au" data-value="{{data.calc.attributes.au.value}}">{{data.calc.attributes.au.value}}</td>
<td class="attribute-value roll-attribute-button" data-attribute="pa" data-value="{{data.attributes.pa.value}}">{{data.attributes.pa.value}}</td> <td class="attribute-value roll-attribute-button" data-attribute="pa" data-value="{{data.calc.attributes.pa.value}}">{{data.calc.attributes.pa.value}}</td>
<td class="attribute-value roll-attribute-button" data-attribute="wk" data-value="{{data.attributes.wk.value}}">{{data.attributes.wk.value}}</td> <td class="attribute-value roll-attribute-button" data-attribute="wk" data-value="{{data.calc.attributes.wk.value}}">{{data.calc.attributes.wk.value}}</td>
<td class="attribute-value roll-attribute-button" data-attribute="git" data-value="{{data.attributes.git.value}}">{{data.attributes.git.value}}</td> <td class="attribute-value roll-attribute-button" data-attribute="git" data-value="{{data.calc.stats.poisonResistance.value}}">{{data.calc.stats.poisonResistance.value}}</td>
</tr> </tr>
<tr> <tr>
<td class="attribute">{{localize "midgard5.actor-st"}}</td> <td class="attribute">{{localize "midgard5.actor-st"}}</td>

View File

@ -15,7 +15,7 @@
{{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="git" attribute=data.attributes.git}} {{> "systems/midgard5/templates/sheets/npc/attribute.hbs" attributeId="git" attribute=data.attributes.git}}
<div class="sheet-npc"> <div class="sheet-npc">
<div class="attribute-header">{{localize "midgard5.movementRange"}}</div> <div class="attribute-header">{{localize "midgard5.movementRange"}}</div>
<div class="attribute-value"><input name="data.movement" type="text" value="{{data.calc.stats.movement.mods.0.value}}" data-dtype="Number" /></div> <div class="attribute-value"><input name="data.movement" type="text" value="{{data.movement}}" data-dtype="Number" /></div>
</div> </div>
<div class="sheet-npc"> <div class="sheet-npc">
<div class="attribute-header">{{localize "midgard5.exp-overall"}}</div> <div class="attribute-header">{{localize "midgard5.exp-overall"}}</div>