#91 Automatische Praxispunkte #93
|
|
@ -295,10 +295,11 @@
|
|||
"midgard5.spell-process-nekromantie": "Nekromantie",
|
||||
"midgard5.spell-process-runenstaebe": "Runenstäbe",
|
||||
"midgard5.spell-process-thaumatherapie": "Thaumatherapie",
|
||||
"midgard5.spell-process-thaumagraphie": "Thaumagraphie",
|
||||
"midgard5.spell-process-veraendern": "Verändern",
|
||||
"midgard5.spell-process-vigilsignien": "Vigilsignien",
|
||||
"midgard5.spell-process-wundertat": "Wundertat",
|
||||
"midgard5.spell-process-wilder_Dweomer": "Wilder Dweomer",
|
||||
"midgard5.spell-process-wilder_dweomer": "Wilder Dweomer",
|
||||
"midgard5.spell-process-zerstoeren": "Zerstören",
|
||||
"midgard5.spell-process-zauberlied": "Zauberlieder",
|
||||
"midgard5.spell-process-zaubersalz": "Zaubersalze",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,110 @@
|
|||
/* 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;
|
||||
});
|
||||
};
|
||||
107
source/index.ts
107
source/index.ts
|
|
@ -2,112 +2,17 @@ import Logger from "./utils/Logger";
|
|||
import M5CharacterSheet from "./module/sheets/M5CharacterSheet";
|
||||
import preloadTemplates from "./PreloadTemplates";
|
||||
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 { M5Item } from "./module/items/M5Item";
|
||||
import { loadHelpers } from "./helpers";
|
||||
import { loadSettings } from "./settings";
|
||||
|
||||
Hooks.once("init", async () => {
|
||||
Logger.log("M5 | Initialisierung Midgard 5");
|
||||
|
||||
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;
|
||||
});
|
||||
// Load settings into Foundry
|
||||
loadSettings();
|
||||
|
||||
// Default Sheet für Items definieren und das Standardsheet deaktivieren
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
|
|
@ -121,6 +26,8 @@ Hooks.once("init", async () => {
|
|||
CONFIG.Item.documentClass = M5Item;
|
||||
//RegisterSettings();
|
||||
await preloadTemplates();
|
||||
|
||||
loadHelpers();
|
||||
});
|
||||
|
||||
Hooks.once("setup", () => {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ export interface M5RollData {
|
|||
c: any;
|
||||
i: any;
|
||||
iType: string;
|
||||
rolls: {};
|
||||
rolls: any;
|
||||
res: {
|
||||
label: string;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -323,7 +323,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();
|
||||
} else {
|
||||
ChatMessage.create({
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ export class M5Roll {
|
|||
public _total: number = 0;
|
||||
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)
|
||||
//this.data = rollData
|
||||
}
|
||||
|
|
@ -88,6 +88,42 @@ export class M5Roll {
|
|||
});
|
||||
|
||||
this.data.res.label = this.label;
|
||||
if ((game as Game).settings.get("midgard5", "automatedPP")) {
|
||||
if ((this.data.i.type === "language" || this.data.i.type === "general") && this.data.rolls[0].dice[0] >= 0) {
|
||||
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 === "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;
|
||||
return this;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
});
|
||||
};
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
{{#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}}" type="number" value={{wert.kosten}} data-dtype="Number" />
|
||||
<input style="width:35px" name="data.lernKostenZauber.{{name}}.wert" type="number" value={{wert.kosten}} data-dtype="Number" />
|
||||
</span>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Reference in New Issue