Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2e389704ea | |||
| 6f030bd6b5 | |||
| 512d0de4e5 | |||
| ef6cc11bcb | |||
| bb5d29e28e | |||
| d42988e859 |
18
README.md
18
README.md
@@ -0,0 +1,18 @@
|
|||||||
|
# Kopparhavets Hjältar
|
||||||
|
Detta är utveklat privat och inte officielt stöttat av personerna bakom Kopparhavets Hjältar.
|
||||||
|
|
||||||
|
## Installera Kopparhavet game system
|
||||||
|
|
||||||
|
1. Öppna Foundry VTT
|
||||||
|
2. Gå till "Game Systems" fliken
|
||||||
|
3. Klicka på "Install System" knappen
|
||||||
|
4. Kopiera följande länk och klistra in i "Manifest URL" fältet:
|
||||||
|
https://pi.rikspolisen.se/foundryvtt/kopparhavet/raw/branch/master/system.json
|
||||||
|
5. Klicka Install, efter en kort tid borde systemet vara installerat.
|
||||||
|
|
||||||
|
## Rustning
|
||||||
|
Instruktioner för hur man skapar en rustning hittas i Wikin
|
||||||
|
|
||||||
|
https://pi.rikspolisen.se/foundryvtt/kopparhavet/wiki/Skapa-rustning.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
19
lang/en.json
19
lang/en.json
@@ -17,11 +17,13 @@
|
|||||||
"BIO.AGE": "Age",
|
"BIO.AGE": "Age",
|
||||||
"BIO.KIN": "Kin",
|
"BIO.KIN": "Kin",
|
||||||
"BIO.NAME": "Name",
|
"BIO.NAME": "Name",
|
||||||
|
"BIO.NICKNAME": "Nickname",
|
||||||
"BIO.PROFESSION": "Profession",
|
"BIO.PROFESSION": "Profession",
|
||||||
|
|
||||||
"CURRENCY.QUARTER": "Quarter",
|
"CURRENCY.QUARTER": "Quarter",
|
||||||
"CURRENCY.SHEKEL": "Shekel",
|
"CURRENCY.SHEKEL": "Shekel",
|
||||||
"CURRENCY.TITLE": "Currency",
|
"CURRENCY.TITLE": "Currency",
|
||||||
|
"CURRENCY.SILVER": "Silver",
|
||||||
|
|
||||||
"DICE.ROLL": "Dice roll",
|
"DICE.ROLL": "Dice roll",
|
||||||
|
|
||||||
@@ -33,6 +35,9 @@
|
|||||||
|
|
||||||
"FEATURES.TITLE": "Features",
|
"FEATURES.TITLE": "Features",
|
||||||
|
|
||||||
|
"HT.FEATURES.TITLE": "Features",
|
||||||
|
"HT.RELATIONSHIP.TITLE": "Relationships",
|
||||||
|
|
||||||
"ITEM.ARMOR": "Rustning",
|
"ITEM.ARMOR": "Rustning",
|
||||||
"ITEM.ATTACK": "Attack",
|
"ITEM.ATTACK": "Attack",
|
||||||
"ITEM.DAMAGE": "Damage",
|
"ITEM.DAMAGE": "Damage",
|
||||||
@@ -48,6 +53,8 @@
|
|||||||
"ITEM.TALENT": "Talent",
|
"ITEM.TALENT": "Talent",
|
||||||
"ITEM.WEAPON": "Weapon",
|
"ITEM.WEAPON": "Weapon",
|
||||||
|
|
||||||
|
"LEARNING.TITLE": "Learning",
|
||||||
|
|
||||||
"MENU.SENTTOCHAT": "Send To Chat",
|
"MENU.SENTTOCHAT": "Send To Chat",
|
||||||
|
|
||||||
"MOD.INIT": "Initiative",
|
"MOD.INIT": "Initiative",
|
||||||
@@ -56,6 +63,14 @@
|
|||||||
|
|
||||||
"ROLL.SUCCESS": "Success",
|
"ROLL.SUCCESS": "Success",
|
||||||
"ROLL.FAILURE": "Failure",
|
"ROLL.FAILURE": "Failure",
|
||||||
|
"ROLL.TITLE": "Roll dice",
|
||||||
|
"BUTTON.ROLL": "Roll",
|
||||||
|
"BUTTON.CANCEL": "Cancel",
|
||||||
|
"ROLL.CLOSED": "Closed",
|
||||||
|
"ROLL.OPENED": "Opened",
|
||||||
|
"MENU.SHOWROLLDIALOG": "Show diceroller dialog",
|
||||||
|
"ROLL.OPENCLOSE": "Open / Close",
|
||||||
|
"ROLL.EXCEPTIONAL": "Exceptional",
|
||||||
|
|
||||||
"SKILL.TYPE": "Type",
|
"SKILL.TYPE": "Type",
|
||||||
"SKILL.BASE": "Basic",
|
"SKILL.BASE": "Basic",
|
||||||
@@ -67,6 +82,9 @@
|
|||||||
"SPELL.DIFFICULTY": "Difficulty",
|
"SPELL.DIFFICULTY": "Difficulty",
|
||||||
"SPELL.ROLL": "Roll",
|
"SPELL.ROLL": "Roll",
|
||||||
"SPELL.COST": "Cost",
|
"SPELL.COST": "Cost",
|
||||||
|
"SPELL.ATTACKROLL": "Attack roll",
|
||||||
|
"SPELL.OPPOSITE": "Opposite",
|
||||||
|
"SPELL.RITUAL": "Ritual",
|
||||||
|
|
||||||
"STATS.HEALTH": "Health",
|
"STATS.HEALTH": "Health",
|
||||||
"STATS.MANA": "Mana",
|
"STATS.MANA": "Mana",
|
||||||
@@ -76,6 +94,7 @@
|
|||||||
"TAB.COMBAT": "Combat",
|
"TAB.COMBAT": "Combat",
|
||||||
"TAB.DESCRIPTION": "Description",
|
"TAB.DESCRIPTION": "Description",
|
||||||
"TAB.GEAR": "Gear",
|
"TAB.GEAR": "Gear",
|
||||||
|
"TAB.MAIN": "Main",
|
||||||
"TAB.MODIFICATION": "Modifications",
|
"TAB.MODIFICATION": "Modifications",
|
||||||
"TAB.NOTE": "Note",
|
"TAB.NOTE": "Note",
|
||||||
"TAB.SKILLS": "Skills",
|
"TAB.SKILLS": "Skills",
|
||||||
|
|||||||
24
lang/sv.json
24
lang/sv.json
@@ -17,11 +17,14 @@
|
|||||||
"BIO.AGE": "Ålder",
|
"BIO.AGE": "Ålder",
|
||||||
"BIO.KIN": "Folkslag",
|
"BIO.KIN": "Folkslag",
|
||||||
"BIO.NAME": "Namn",
|
"BIO.NAME": "Namn",
|
||||||
|
"BIO.NICKNAME": "Tillnamn",
|
||||||
"BIO.PROFESSION": "Värv",
|
"BIO.PROFESSION": "Värv",
|
||||||
|
"BIO.APPEARANCE": "Utseende",
|
||||||
|
|
||||||
"CURRENCY.QUARTER": "Kvarting",
|
"CURRENCY.QUARTER": "Kvarting",
|
||||||
"CURRENCY.SHEKEL": "Shekel",
|
"CURRENCY.SHEKEL": "Shekel",
|
||||||
"CURRENCY.TITLE": "Mynt",
|
"CURRENCY.TITLE": "Mynt",
|
||||||
|
"CURRENCY.SILVER": "Silver",
|
||||||
|
|
||||||
"DICE.ROLL": "Tärningsslag",
|
"DICE.ROLL": "Tärningsslag",
|
||||||
|
|
||||||
@@ -33,6 +36,9 @@
|
|||||||
|
|
||||||
"FEATURES.TITLE": "Särdrag",
|
"FEATURES.TITLE": "Särdrag",
|
||||||
|
|
||||||
|
"HT.FEATURES.TITLE": "Karaktärsdrag",
|
||||||
|
"HT.RELATIONSHIP.TITLE": "Relationer",
|
||||||
|
|
||||||
"ITEM.ARMOR": "Rustning",
|
"ITEM.ARMOR": "Rustning",
|
||||||
"ITEM.ATTACK": "Anfall",
|
"ITEM.ATTACK": "Anfall",
|
||||||
"ITEM.DAMAGE": "Skada",
|
"ITEM.DAMAGE": "Skada",
|
||||||
@@ -48,6 +54,8 @@
|
|||||||
"ITEM.TALENT": "Förmåga",
|
"ITEM.TALENT": "Förmåga",
|
||||||
"ITEM.WEAPON": "Vapen",
|
"ITEM.WEAPON": "Vapen",
|
||||||
|
|
||||||
|
"LEARNING.TITLE": "Inlärning",
|
||||||
|
|
||||||
"MENU.SENTTOCHAT": "Skicka till chat",
|
"MENU.SENTTOCHAT": "Skicka till chat",
|
||||||
|
|
||||||
"MOD.INIT": "Turordning",
|
"MOD.INIT": "Turordning",
|
||||||
@@ -57,6 +65,15 @@
|
|||||||
"ROLL.SUCCESS": "Lyckat",
|
"ROLL.SUCCESS": "Lyckat",
|
||||||
"ROLL.FAILURE": "Misslyckat",
|
"ROLL.FAILURE": "Misslyckat",
|
||||||
|
|
||||||
|
"ROLL.TITLE": "Slå tärningar",
|
||||||
|
"BUTTON.ROLL": "Slå",
|
||||||
|
"BUTTON.CANCEL": "Avbryt",
|
||||||
|
"ROLL.CLOSED": "Stängd",
|
||||||
|
"ROLL.OPENED": "Öppnad",
|
||||||
|
"MENU.SHOWROLLDIALOG": "Visa tärningsdialog",
|
||||||
|
"ROLL.OPENCLOSE": "Öppna / Stäng",
|
||||||
|
"ROLL.EXCEPTIONAL": "Exceptionellt",
|
||||||
|
|
||||||
"SKILL.TYPE": "Typ",
|
"SKILL.TYPE": "Typ",
|
||||||
"SKILL.BASE": "Grundfärdigheter",
|
"SKILL.BASE": "Grundfärdigheter",
|
||||||
"SKILL.ADVENTURE": "Äventyrsfärdigheter",
|
"SKILL.ADVENTURE": "Äventyrsfärdigheter",
|
||||||
@@ -65,8 +82,12 @@
|
|||||||
"SKILL.LANGUAGE": "Språk",
|
"SKILL.LANGUAGE": "Språk",
|
||||||
|
|
||||||
"SPELL.DIFFICULTY": "Svårighet",
|
"SPELL.DIFFICULTY": "Svårighet",
|
||||||
"SPELL.ROLL": "Slag",
|
"SPELL.ROLLTITLE": "Slag",
|
||||||
"SPELL.COST": "Kostnad",
|
"SPELL.COST": "Kostnad",
|
||||||
|
"SPELL.ROLL": "Färdighetsslag",
|
||||||
|
"SPELL.ATTACKROLL": "Anfallsslag",
|
||||||
|
"SPELL.OPPOSITE": "Motsatt",
|
||||||
|
"SPELL.RITUAL": "Ritual",
|
||||||
|
|
||||||
"STATS.HEALTH": "Hälsa",
|
"STATS.HEALTH": "Hälsa",
|
||||||
"STATS.MANA": "Skuld",
|
"STATS.MANA": "Skuld",
|
||||||
@@ -76,6 +97,7 @@
|
|||||||
"TAB.COMBAT": "Strid",
|
"TAB.COMBAT": "Strid",
|
||||||
"TAB.DESCRIPTION": "Beskrivning",
|
"TAB.DESCRIPTION": "Beskrivning",
|
||||||
"TAB.GEAR": "Utrustning",
|
"TAB.GEAR": "Utrustning",
|
||||||
|
"TAB.MAIN": "Allmänt",
|
||||||
"TAB.MODIFICATION": "Modifikationer",
|
"TAB.MODIFICATION": "Modifikationer",
|
||||||
"TAB.NOTE": "Anteckning",
|
"TAB.NOTE": "Anteckning",
|
||||||
"TAB.SKILLS": "Färdigheter",
|
"TAB.SKILLS": "Färdigheter",
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import KHDiceRoller from "../helpers/dice-helper.js"
|
import KHDiceRoller from "../helpers/dice-helper.js"
|
||||||
|
import ActorHelpers from "../helpers/actor-helper.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extend the basic ActorSheet with some very simple modifications
|
* Extend the basic ActorSheet with some very simple modifications
|
||||||
@@ -9,12 +10,23 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
|
if(game.settings.get("kopparhavet", "gameSystem") === "hjaltarnas-tid") {
|
||||||
|
return mergeObject(super.defaultOptions, {
|
||||||
|
classes: ["kopparhavet", "sheet", "actor"],
|
||||||
|
template: "systems/kopparhavet/templates/actors/ht-character-sheet.html",
|
||||||
|
width: 710,
|
||||||
|
height: 650,
|
||||||
|
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "main" }],
|
||||||
|
scrollY: [".skills-tab .skills", ".talent-tab .items"],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return mergeObject(super.defaultOptions, {
|
return mergeObject(super.defaultOptions, {
|
||||||
classes: ["kopparhavet", "sheet", "actor"],
|
classes: ["kopparhavet", "sheet", "actor"],
|
||||||
template: "systems/kopparhavet/templates/actors/character-sheet.html",
|
template: "systems/kopparhavet/templates/actors/character-sheet.html",
|
||||||
width: 710,
|
width: 710,
|
||||||
height: 650,
|
height: 650,
|
||||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" }],
|
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "main" }],
|
||||||
scrollY: [".skills-tab .skills", ".talent-tab .items"],
|
scrollY: [".skills-tab .skills", ".talent-tab .items"],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -22,7 +34,13 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
/** @override */
|
/** @override */
|
||||||
get template() {
|
get template() {
|
||||||
const path = "systems/kopparhavet/templates/actors";
|
const path = "systems/kopparhavet/templates/actors";
|
||||||
return `${path}/${this.actor.data.type}-sheet.html`;
|
let prefix = "";
|
||||||
|
|
||||||
|
if(game.settings.get("kopparhavet", "gameSystem") === "hjaltarnas-tid") {
|
||||||
|
prefix = "ht-";
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${path}/${prefix}${this.actor.data.type}-sheet.html`;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -121,6 +139,186 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
new ContextMenu(html, "li.item-weapon", [
|
||||||
|
{
|
||||||
|
name: game.i18n.localize("MENU.SHOWROLLDIALOG"),
|
||||||
|
icon: '<i class="far dice"></i>',
|
||||||
|
callback: (li) => {
|
||||||
|
let itemId = li.data("itemId");
|
||||||
|
let _item = this.actor.items.find((element) => element._id == itemId);
|
||||||
|
|
||||||
|
// Retrieve skill based on name
|
||||||
|
let skill = this.actor.items.find((element) => element.name === _item.data.data.skill.value);
|
||||||
|
|
||||||
|
let skillName = skill.name
|
||||||
|
let skillValue = skill.data.data.value
|
||||||
|
let showValue = false
|
||||||
|
|
||||||
|
if(this.actor.data.type === "character") {
|
||||||
|
showValue = true
|
||||||
|
}
|
||||||
|
|
||||||
|
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: game.i18n.localize("MENU.SENTTOCHAT"),
|
||||||
|
icon: '<i class="far fa-comment"></i>',
|
||||||
|
callback: (li) => {
|
||||||
|
let itemId = li.data("itemId");
|
||||||
|
this._itemDetailsToChat(itemId);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
new ContextMenu(html, "li.item-skill", [
|
||||||
|
{
|
||||||
|
name: game.i18n.localize("MENU.SHOWROLLDIALOG"),
|
||||||
|
icon: '<i class="far dice"></i>',
|
||||||
|
callback: (li) => {
|
||||||
|
let itemId = li.data("itemId");
|
||||||
|
let _item = this.actor.items.find((element) => element._id == itemId);
|
||||||
|
|
||||||
|
let skillName = _item.name
|
||||||
|
let skillValue = _item.data.data.value
|
||||||
|
let showValue = false
|
||||||
|
|
||||||
|
if(this.actor.data.type === "character") {
|
||||||
|
showValue = true
|
||||||
|
}
|
||||||
|
|
||||||
|
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: game.i18n.localize("MENU.SENTTOCHAT"),
|
||||||
|
icon: '<i class="far fa-comment"></i>',
|
||||||
|
callback: (li) => {
|
||||||
|
let itemId = li.data("itemId");
|
||||||
|
this._itemDetailsToChat(itemId);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
new ContextMenu(html, "li.item-spell", [
|
||||||
|
{
|
||||||
|
name: game.i18n.localize("MENU.SHOWROLLDIALOG"),
|
||||||
|
icon: '<i class="far dice"></i>',
|
||||||
|
callback: (li) => {
|
||||||
|
let itemId = li.data("itemId");
|
||||||
|
let _item = this.actor.items.find((element) => element._id == itemId);
|
||||||
|
|
||||||
|
if (!_item) {
|
||||||
|
_item = game.items.get(itemId);
|
||||||
|
|
||||||
|
if (!_item) {
|
||||||
|
console.log("IMPORT ERROR")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let showValue = false
|
||||||
|
let difficulty = 0
|
||||||
|
|
||||||
|
if(this.actor.data.type === "character") {
|
||||||
|
showValue = true
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (_item.data.data.difficulty.value) {
|
||||||
|
case "simple":
|
||||||
|
difficulty = 5
|
||||||
|
break;
|
||||||
|
case "easy":
|
||||||
|
difficulty = 2
|
||||||
|
break;
|
||||||
|
case "hard":
|
||||||
|
difficulty = -2
|
||||||
|
break;
|
||||||
|
case "daunting":
|
||||||
|
difficulty = -5
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_item.data.data.roll.value === "roll" || _item.data.data.roll.value === "attackroll") {
|
||||||
|
// Retrieve skill based on name
|
||||||
|
let skill = this.actor.items.find((element) => element.name === _item.data.data.roll.skill);
|
||||||
|
|
||||||
|
let skillName = _item.name
|
||||||
|
let skillValue = skill.data.data.value
|
||||||
|
|
||||||
|
if(this.actor.data.type === "character") {
|
||||||
|
skillName = _item.name + " (" + skill.name + ")"
|
||||||
|
}
|
||||||
|
|
||||||
|
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor, difficulty)
|
||||||
|
} else if(_item.data.data.roll.value === "opposite") {
|
||||||
|
// Retrieve skill based on name
|
||||||
|
let skill = this.actor.items.find((element) => element.name === _item.data.data.roll.skill);
|
||||||
|
|
||||||
|
let skillName = _item.name
|
||||||
|
let skillValue = skill.data.data.value
|
||||||
|
|
||||||
|
if(this.actor.data.type === "character") {
|
||||||
|
skillName = _item.name + " (" + skill.name + ")"
|
||||||
|
}
|
||||||
|
|
||||||
|
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor, difficulty)
|
||||||
|
} else if(_item.data.data.roll.value === "ritual") {
|
||||||
|
console.log("Not supported yet")
|
||||||
|
this.khRoller.rollSkillDialogInChat("Ritual", -1, showValue, this.actor, difficulty)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: game.i18n.localize("MENU.SENTTOCHAT"),
|
||||||
|
icon: '<i class="far fa-comment"></i>',
|
||||||
|
callback: (li) => {
|
||||||
|
let itemId = li.data("itemId");
|
||||||
|
this._itemDetailsToChat(itemId);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
new ContextMenu(html, "li.item-attack", [
|
||||||
|
{
|
||||||
|
name: game.i18n.localize("MENU.SHOWROLLDIALOG"),
|
||||||
|
icon: '<i class="far dice"></i>',
|
||||||
|
callback: (li) => {
|
||||||
|
let skillValue = li.data("ability");
|
||||||
|
let skillName = "ITEM.ATTACK";
|
||||||
|
let showValue = false
|
||||||
|
|
||||||
|
if(this.actor.data.type === "character") {
|
||||||
|
showValue = true
|
||||||
|
}
|
||||||
|
|
||||||
|
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: game.i18n.localize("MENU.SENTTOCHAT"),
|
||||||
|
icon: '<i class="far fa-comment"></i>',
|
||||||
|
callback: (li) => {
|
||||||
|
let itemId = li.data("itemId");
|
||||||
|
this._itemDetailsToChat(itemId);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
new ContextMenu(html, "li.item-defence", [
|
||||||
|
{
|
||||||
|
name: game.i18n.localize("MENU.SHOWROLLDIALOG"),
|
||||||
|
icon: '<i class="far dice"></i>',
|
||||||
|
callback: (li) => {
|
||||||
|
const skillValue = li.data("defence");
|
||||||
|
|
||||||
|
let skillName = "ADVERSARY.DEFENCE";
|
||||||
|
|
||||||
|
this.khRoller.rollSkillDialogInChat(skillName, skillValue, false, this.actor)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
html.find(".feature").click(async (ev) => {
|
html.find(".feature").click(async (ev) => {
|
||||||
const featureName = $(ev.currentTarget).data("feature");
|
const featureName = $(ev.currentTarget).data("feature");
|
||||||
const featureValue = this.actor.data.data.feature[featureName].value;
|
const featureValue = this.actor.data.data.feature[featureName].value;
|
||||||
@@ -138,7 +336,35 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
|
|
||||||
// Delete Inventory Item
|
// Delete Inventory Item
|
||||||
html.find(".item-delete").click((ev) => {
|
html.find(".item-delete").click((ev) => {
|
||||||
const li = $(ev.currentTarget).parents(".item");
|
let parent = $(ev.currentTarget).data("parent")
|
||||||
|
const li = $(ev.currentTarget).parents(parent);
|
||||||
|
const item = this.actor.getOwnedItem(li.data("itemId"));
|
||||||
|
|
||||||
|
if(item) {
|
||||||
|
if (item.type === "armor") {
|
||||||
|
let initValue = -1
|
||||||
|
|
||||||
|
if (item.data.data.equipable.equipped) {
|
||||||
|
initValue = 4
|
||||||
|
|
||||||
|
this.actor.items.map((i) => {
|
||||||
|
if (i.type === "armor") {
|
||||||
|
if (i._id !== item._id && i.data.data.equipable.equipped && i.data?.data?.modifications) {
|
||||||
|
for (let k of Object.keys(i.data.data.modifications)) {
|
||||||
|
if (i.data.data.modifications[k].modtype === "init") {
|
||||||
|
initValue = i.data.data.modifications[k].value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (initValue > 0) {
|
||||||
|
this.actor.update({["data.combat.init"]: initValue});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.actor.deleteOwnedItem(li.data("itemId"));
|
this.actor.deleteOwnedItem(li.data("itemId"));
|
||||||
|
|
||||||
@@ -147,7 +373,8 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
|
|
||||||
// Edit Inventory Item
|
// Edit Inventory Item
|
||||||
html.find(".item-edit").click(async (ev) => {
|
html.find(".item-edit").click(async (ev) => {
|
||||||
const li = $(ev.currentTarget).parents(".item");
|
let parent = $(ev.currentTarget).data("parent")
|
||||||
|
let li = $(ev.currentTarget).parents(parent);
|
||||||
let itemId = li.data("itemId");
|
let itemId = li.data("itemId");
|
||||||
let item = this.actor.getOwnedItem(itemId);
|
let item = this.actor.getOwnedItem(itemId);
|
||||||
|
|
||||||
@@ -166,7 +393,7 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
|
|
||||||
/* Roll spell cost */
|
/* Roll spell cost */
|
||||||
html.find(".roll-spell-cost").click((ev) => {
|
html.find(".roll-spell-cost").click((ev) => {
|
||||||
const li = $(ev.currentTarget).parents(".item");
|
const li = $(ev.currentTarget).parents(".item-spell");
|
||||||
let itemId = li.data("itemId");
|
let itemId = li.data("itemId");
|
||||||
let spell = this.actor.getOwnedItem(itemId);
|
let spell = this.actor.getOwnedItem(itemId);
|
||||||
|
|
||||||
@@ -189,9 +416,74 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
html.find(".roll-spell-skill").click((ev) => {
|
||||||
|
const li = $(ev.currentTarget).parents(".item-spell");
|
||||||
|
let itemId = li.data("itemId");
|
||||||
|
let spell = this.actor.getOwnedItem(itemId);
|
||||||
|
|
||||||
|
if (!spell) {
|
||||||
|
spell = game.items.get(itemId);
|
||||||
|
|
||||||
|
if (!spell) {
|
||||||
|
console.log("IMPORT ERROR")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let showValue = false
|
||||||
|
let difficulty = 0
|
||||||
|
|
||||||
|
if(this.actor.data.type === "character") {
|
||||||
|
showValue = true
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (spell.data.data.difficulty.value) {
|
||||||
|
case "simple":
|
||||||
|
difficulty = 5
|
||||||
|
break;
|
||||||
|
case "easy":
|
||||||
|
difficulty = 2
|
||||||
|
break;
|
||||||
|
case "hard":
|
||||||
|
difficulty = -2
|
||||||
|
break;
|
||||||
|
case "daunting":
|
||||||
|
difficulty = -5
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(spell.data.data.roll.value === "roll" || spell.data.data.roll.value === "attackroll") {
|
||||||
|
// Retrieve skill based on name
|
||||||
|
let skill = this.actor.items.find((element) => element.name === spell.data.data.roll.skill);
|
||||||
|
|
||||||
|
let skillName = spell.name
|
||||||
|
let skillValue = skill.data.data.value
|
||||||
|
|
||||||
|
if(this.actor.data.type === "character") {
|
||||||
|
skillName = spell.name + " (" + skill.name + ")"
|
||||||
|
}
|
||||||
|
|
||||||
|
this.khRoller.rollSkillInChat(skillName, skillValue, showValue, this.actor, difficulty)
|
||||||
|
} else if(spell.data.data.roll.value === "opposite") {
|
||||||
|
// Retrieve skill based on name
|
||||||
|
let skill = this.actor.items.find((element) => element.name === spell.data.data.roll.skill);
|
||||||
|
|
||||||
|
let skillName = spell.name
|
||||||
|
let skillValue = skill.data.data.value
|
||||||
|
|
||||||
|
if(this.actor.data.type === "character") {
|
||||||
|
skillName = spell.name + " (" + skill.name + ")"
|
||||||
|
}
|
||||||
|
|
||||||
|
this.khRoller.rollSkillInChat(skillName, skillValue, showValue, this.actor, difficulty)
|
||||||
|
} else if(spell.data.data.roll.value === "ritual") {
|
||||||
|
console.log("Not supported yet")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
/* Roll skill */
|
/* Roll skill */
|
||||||
html.find(".roll-skill").click((ev) => {
|
html.find(".roll-skill").click((ev) => {
|
||||||
const li = $(ev.currentTarget).parents(".item");
|
const li = $(ev.currentTarget).parents(".item-skill");
|
||||||
let itemId = li.data("itemId");
|
let itemId = li.data("itemId");
|
||||||
let _item = this.actor.items.find((element) => element._id == itemId);
|
let _item = this.actor.items.find((element) => element._id == itemId);
|
||||||
|
|
||||||
@@ -208,7 +500,7 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
|
|
||||||
/* Roll weapon skill */
|
/* Roll weapon skill */
|
||||||
html.find(".roll-weapon-skill").click((ev) => {
|
html.find(".roll-weapon-skill").click((ev) => {
|
||||||
const li = $(ev.currentTarget).parents(".item");
|
const li = $(ev.currentTarget).parents(".item-weapon");
|
||||||
let itemId = li.data("itemId");
|
let itemId = li.data("itemId");
|
||||||
let weapon = this.actor.getOwnedItem(itemId);
|
let weapon = this.actor.getOwnedItem(itemId);
|
||||||
|
|
||||||
@@ -237,7 +529,7 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
|
|
||||||
/* Roll weapon damage */
|
/* Roll weapon damage */
|
||||||
html.find(".roll-damage").click((ev) => {
|
html.find(".roll-damage").click((ev) => {
|
||||||
const li = $(ev.currentTarget).parents(".item");
|
const li = $(ev.currentTarget).parents(".item-weapon");
|
||||||
let itemId = li.data("itemId");
|
let itemId = li.data("itemId");
|
||||||
let weapon = this.actor.getOwnedItem(itemId);
|
let weapon = this.actor.getOwnedItem(itemId);
|
||||||
|
|
||||||
@@ -278,15 +570,17 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
let defence = armor.data.data.defence.value;
|
let defence = armor.data.data.defence.value;
|
||||||
let hasHelmet = false;
|
let hasHelmet = false;
|
||||||
|
|
||||||
|
if(game.settings.get("kopparhavet", "gameSystem") === "kopparhavet") {
|
||||||
this.actor.items.map((i) => {
|
this.actor.items.map((i) => {
|
||||||
if(i.type === "armor") {
|
if (i.type === "armor") {
|
||||||
if(i.data.data.equipable.equipped && i.data.data.helmet.value) {
|
if (i.data.data.equipable.equipped && i.data.data.helmet.value) {
|
||||||
if(CONFIG.KH.armor_types[i.data.data.type.value]?.ac >= CONFIG.KH.armor_types[armor.data.data.type.value]?.ac) {
|
if (CONFIG.KH.armor_types[i.data.data.type.value]?.ac >= CONFIG.KH.armor_types[armor.data.data.type.value]?.ac) {
|
||||||
hasHelmet = true
|
hasHelmet = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
let regex = /([0-9]*)t([0-9]*)/g;
|
let regex = /([0-9]*)t([0-9]*)/g;
|
||||||
let regexMatch;
|
let regexMatch;
|
||||||
@@ -298,6 +592,7 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
|
|
||||||
/* Toggle item equipped */
|
/* Toggle item equipped */
|
||||||
html.find(".items .item a.toggle-equipped").click(this._toggleEquippedItem.bind(this));
|
html.find(".items .item a.toggle-equipped").click(this._toggleEquippedItem.bind(this));
|
||||||
|
html.find(".items .item-weapon a.toggle-equipped").click(this._toggleEquippedItem.bind(this));
|
||||||
|
|
||||||
/* Handle increase of items in inventory */
|
/* Handle increase of items in inventory */
|
||||||
html.find(".item-quantity .quantity.increase").click(this._increaseQuantity.bind((this)));
|
html.find(".item-quantity .quantity.increase").click(this._increaseQuantity.bind((this)));
|
||||||
@@ -311,16 +606,38 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
|
|
||||||
/* Adversary specific */
|
/* Adversary specific */
|
||||||
html.find(".roll-adversary-attack").click((ev) => {
|
html.find(".roll-adversary-attack").click((ev) => {
|
||||||
const li = $(ev.currentTarget).parents(".item");
|
const li = $(ev.currentTarget).parents(".item-attack");
|
||||||
let skillValue = li.data("ability");
|
let skillValue = li.data("ability");
|
||||||
|
|
||||||
console.log(skillValue)
|
|
||||||
|
|
||||||
let skillName = "ITEM.ATTACK";
|
let skillName = "ITEM.ATTACK";
|
||||||
|
|
||||||
this.khRoller.rollSkillInChat(skillName, skillValue, false, this.actor)
|
this.khRoller.rollSkillInChat(skillName, skillValue, false, this.actor)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
html.find(".roll-attack-damage").click((ev) => {
|
||||||
|
const li = $(ev.currentTarget).parents(".item-attack");
|
||||||
|
let itemId = li.data("itemId");
|
||||||
|
let weapon = this.actor.getOwnedItem(itemId);
|
||||||
|
|
||||||
|
if (!weapon) {
|
||||||
|
weapon = game.items.get(itemId);
|
||||||
|
|
||||||
|
if (!weapon) {
|
||||||
|
console.log("IMPORT ERROR")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let damage = weapon.data.data.damage.value;
|
||||||
|
|
||||||
|
let regex = /([0-9]*)t([0-9]*)/g;
|
||||||
|
let regexMatch;
|
||||||
|
|
||||||
|
while (regexMatch = regex.exec(damage.toLowerCase())) {
|
||||||
|
this.khRoller.rollDamageInChat(regexMatch[1], this.actor)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
html.find(".roll-defence").click((ev) => {
|
html.find(".roll-defence").click((ev) => {
|
||||||
const skillValue = $(ev.currentTarget).data("defence");
|
const skillValue = $(ev.currentTarget).data("defence");
|
||||||
|
|
||||||
@@ -357,6 +674,104 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
this.khRoller.rollArmorInChat(regexMatch[1], hasHelmet, this.actor)
|
this.khRoller.rollArmorInChat(regexMatch[1], hasHelmet, this.actor)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Add or Remove relationship
|
||||||
|
html.find(".learning-control").click(this._onClickLearningControl.bind(this));
|
||||||
|
html.find(".learning-click").click(this._onClickLearingLearned.bind(this));
|
||||||
|
|
||||||
|
/* Hjältarnas Tid specefic */
|
||||||
|
if(game.settings.get("kopparhavet", "gameSystem") === "hjaltarnas-tid") {
|
||||||
|
// Add or Remove relationship
|
||||||
|
html.find(".relation-control").click(this._onClickRelationshipControl.bind(this));
|
||||||
|
html.find(".relation-click").click(this._onClickRelationshipUsed.bind(this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async _onClickLearingLearned(event) {
|
||||||
|
event.stopPropagation();
|
||||||
|
const li1 = $(event.currentTarget);
|
||||||
|
const li2 = $(event.currentTarget).parents(".learning");
|
||||||
|
let box = li1.data("num")
|
||||||
|
let learingKey = li2.data("attribute");
|
||||||
|
|
||||||
|
const clickedValue = (this.actor.data.data.learning[learingKey][box] == undefined ? false : this.actor.data.data.learning[learingKey][box]);
|
||||||
|
let dataName = "data.learning." + learingKey + "." + box
|
||||||
|
let tempData = {}
|
||||||
|
|
||||||
|
tempData[dataName] = !clickedValue
|
||||||
|
|
||||||
|
this.actor.update(tempData);
|
||||||
|
|
||||||
|
this._render();
|
||||||
|
}
|
||||||
|
|
||||||
|
async _onClickLearningControl(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
const a = event.currentTarget;
|
||||||
|
const action = a.dataset.action;
|
||||||
|
const attrs = this.object.data.data.learning;
|
||||||
|
const form = this.form;
|
||||||
|
|
||||||
|
// Add new modification
|
||||||
|
if (action === "create") {
|
||||||
|
const nk = new Date().getTime();
|
||||||
|
let newKey = document.createElement("div");
|
||||||
|
|
||||||
|
newKey.innerHTML = `<input class="learning-key" type="text" name="data.learning.attr${nk}.key" value="attr${nk}" style="display: none;" /><input class="learning-key" type="text" name="data.learning.attr${nk}.value" value="" style="display: none;" />`;
|
||||||
|
|
||||||
|
form.appendChild(newKey);
|
||||||
|
await this._onSubmit(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove existing modification
|
||||||
|
else if (action === "delete") {
|
||||||
|
const li = a.closest(".learning");
|
||||||
|
li.parentElement.removeChild(li);
|
||||||
|
await this._onSubmit(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async _onClickRelationshipControl(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
const a = event.currentTarget;
|
||||||
|
const action = a.dataset.action;
|
||||||
|
const attrs = this.object.data.data.relationships;
|
||||||
|
const form = this.form;
|
||||||
|
|
||||||
|
// Add new modification
|
||||||
|
if (action === "create") {
|
||||||
|
const nk = new Date().getTime();
|
||||||
|
let newKey = document.createElement("div");
|
||||||
|
|
||||||
|
newKey.innerHTML = `<input class="relation-key" type="text" name="data.relationships.attr${nk}.key" value="attr${nk}" style="display: none;" /><input class="relation-key" type="text" name="data.relationships.attr${nk}.value" value="" style="display: none;" />`;
|
||||||
|
|
||||||
|
form.appendChild(newKey);
|
||||||
|
await this._onSubmit(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove existing modification
|
||||||
|
else if (action === "delete") {
|
||||||
|
const li = a.closest(".relation");
|
||||||
|
li.parentElement.removeChild(li);
|
||||||
|
await this._onSubmit(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async _onClickRelationshipUsed(event) {
|
||||||
|
event.stopPropagation();
|
||||||
|
|
||||||
|
const li = $(event.currentTarget).parents(".relation");
|
||||||
|
let relationshipKey = li.data("attribute");
|
||||||
|
|
||||||
|
const clickedValue = (this.actor.data.data.relationships[relationshipKey].check == undefined ? false : this.actor.data.data.relationships[relationshipKey].check);
|
||||||
|
let dataName = "data.relationships." + relationshipKey + ".check"
|
||||||
|
let tempData = {}
|
||||||
|
|
||||||
|
tempData[dataName] = !clickedValue
|
||||||
|
|
||||||
|
this.actor.update(tempData);
|
||||||
|
|
||||||
|
this._render();
|
||||||
}
|
}
|
||||||
|
|
||||||
async _toggleEquippedItem(event) {
|
async _toggleEquippedItem(event) {
|
||||||
@@ -364,7 +779,7 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
const item = this.actor.getOwnedItem(li.data("itemId"));
|
const item = this.actor.getOwnedItem(li.data("itemId"));
|
||||||
const actor = this.actor;
|
const actor = this.actor;
|
||||||
|
|
||||||
if (item) {
|
if(item) {
|
||||||
if(item.type === "armor") {
|
if(item.type === "armor") {
|
||||||
let initValue = -1
|
let initValue = -1
|
||||||
|
|
||||||
@@ -469,6 +884,13 @@ export class ActorSheetKH extends ActorSheet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
_updateObject(event, formData) {
|
||||||
|
const actorUpdate = ActorHelpers.actorUpdate.bind(this);
|
||||||
|
|
||||||
|
actorUpdate(event, formData);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send details of an item to chat.
|
* Send details of an item to chat.
|
||||||
* @private
|
* @private
|
||||||
|
|||||||
@@ -12,7 +12,5 @@ export class ActorKH extends Actor {
|
|||||||
const data = actorData.data;
|
const data = actorData.data;
|
||||||
const flags = actorData.flags;
|
const flags = actorData.flags;
|
||||||
data.type = actorData.type;
|
data.type = actorData.type;
|
||||||
|
|
||||||
console.log("ACTOR DATA")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
54
module/helpers/actor-helper.js
Normal file
54
module/helpers/actor-helper.js
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
export default class ActorHelpers {
|
||||||
|
static async actorUpdate(event, formData) {
|
||||||
|
formData = expandObject(formData);
|
||||||
|
|
||||||
|
// Handle the free-form relationship list
|
||||||
|
const formAttrs = expandObject(formData)?.data?.relationships || {};
|
||||||
|
|
||||||
|
const relationships = Object.values(formAttrs).reduce((obj, v) => {
|
||||||
|
let k = v["key"].trim();
|
||||||
|
delete v["key"];
|
||||||
|
obj[k] = v;
|
||||||
|
return obj;
|
||||||
|
}, {});
|
||||||
|
|
||||||
|
// Remove modifications which are no longer used
|
||||||
|
if (this.object.data?.data?.relationships) {
|
||||||
|
for (let k of Object.keys(this.object.data.data.relationships)) {
|
||||||
|
if (!relationships.hasOwnProperty(k)) relationships[`-=${k}`] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// recombine modifications to formData
|
||||||
|
if (Object.keys(relationships).length > 0) {
|
||||||
|
setProperty(formData, `data.relationships`, relationships);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Handle the free-form learnign list
|
||||||
|
const formAttrsLearning = expandObject(formData)?.data?.learning || {};
|
||||||
|
|
||||||
|
const learning = Object.values(formAttrsLearning).reduce((obj, v) => {
|
||||||
|
let k = v["key"].trim();
|
||||||
|
delete v["key"];
|
||||||
|
obj[k] = v;
|
||||||
|
return obj;
|
||||||
|
}, {});
|
||||||
|
|
||||||
|
// Remove modifications which are no longer used
|
||||||
|
if (this.object.data?.data?.learning) {
|
||||||
|
for (let k of Object.keys(this.object.data.data.learning)) {
|
||||||
|
if (!learning.hasOwnProperty(k)) learning[`-=${k}`] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// recombine modifications to formData
|
||||||
|
if (Object.keys(learning).length > 0) {
|
||||||
|
setProperty(formData, `data.learning`, learning);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the Item
|
||||||
|
this.actor.data.flags.loaded = false;
|
||||||
|
this.object.update(formData);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -84,7 +84,7 @@ export default class KHDiceRoller {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async rollSkillInChat(skillName, skillValue, showValue, speaker) {
|
async rollSkillInChat(skillName, skillValue, showValue, speaker, openclosed) {
|
||||||
const roll = new Roll(`1d100`);
|
const roll = new Roll(`1d100`);
|
||||||
|
|
||||||
let res = roll.roll();
|
let res = roll.roll();
|
||||||
@@ -95,19 +95,46 @@ export default class KHDiceRoller {
|
|||||||
computedName += " (" + skillValue + ")"
|
computedName += " (" + skillValue + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(openclosed === undefined) {
|
||||||
|
openclosed = 0
|
||||||
|
}
|
||||||
|
|
||||||
let rollData = {
|
let rollData = {
|
||||||
name: computedName,
|
name: computedName,
|
||||||
res: res
|
res: res
|
||||||
};
|
};
|
||||||
|
|
||||||
if(skillValue > 0) {
|
if(skillValue > 0) {
|
||||||
if(res.total <= skillValue) {
|
let oneRes = Math.floor((res.total / 1) % 10);
|
||||||
|
let tenRes = Math.floor((res.total / 10) % 10);
|
||||||
|
|
||||||
|
if(openclosed < 0) {
|
||||||
|
rollData.closed = Math.abs(openclosed)
|
||||||
|
}
|
||||||
|
|
||||||
|
if(openclosed > 0) {
|
||||||
|
rollData.opened = Math.abs(openclosed)
|
||||||
|
}
|
||||||
|
|
||||||
|
if(openclosed < 0 && oneRes !== 0 && Math.abs(openclosed) >= oneRes) {
|
||||||
|
// roll is closed
|
||||||
|
rollData.failure = true
|
||||||
|
} else if(openclosed > 0 && oneRes !== 0 && Math.abs(openclosed) >= oneRes){
|
||||||
|
// roll is opened
|
||||||
|
rollData.success = true
|
||||||
|
} else {
|
||||||
|
if (res.total <= skillValue) {
|
||||||
rollData.success = true
|
rollData.success = true
|
||||||
} else {
|
} else {
|
||||||
rollData.failure = true
|
rollData.failure = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(oneRes === tenRes) {
|
||||||
|
rollData.excetional = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const html = await renderTemplate("systems/kopparhavet/templates/dice/roll.html", rollData);
|
const html = await renderTemplate("systems/kopparhavet/templates/dice/roll.html", rollData);
|
||||||
|
|
||||||
await roll.toMessage({
|
await roll.toMessage({
|
||||||
@@ -121,4 +148,101 @@ export default class KHDiceRoller {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async rollSkillDialogInChat(skillName, skillValue, showValue, speaker, startopen) {
|
||||||
|
const id = randomID();
|
||||||
|
|
||||||
|
if(startopen === undefined) {
|
||||||
|
startopen = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
const content = await renderTemplate("systems/kopparhavet/templates/roll-dialog.html", {
|
||||||
|
id,
|
||||||
|
startopen,
|
||||||
|
skillName,
|
||||||
|
skillValue,
|
||||||
|
});
|
||||||
|
|
||||||
|
await new Dialog({
|
||||||
|
title: game.i18n.localize("ROLL.TITLE"),
|
||||||
|
content,
|
||||||
|
buttons: {
|
||||||
|
one: {
|
||||||
|
icon: '<i class="fas fa-check"></i>',
|
||||||
|
label: game.i18n.localize("BUTTON.ROLL"),
|
||||||
|
callback: async () => {
|
||||||
|
const container = document.getElementById(id);
|
||||||
|
let openclosed = container.querySelector('[name="openclosed"]').value
|
||||||
|
|
||||||
|
const roll = new Roll(`1d100`);
|
||||||
|
|
||||||
|
let res = roll.roll();
|
||||||
|
|
||||||
|
let computedName = skillName
|
||||||
|
|
||||||
|
if(showValue) {
|
||||||
|
computedName += " (" + skillValue + ")"
|
||||||
|
}
|
||||||
|
|
||||||
|
let rollData = {
|
||||||
|
name: computedName,
|
||||||
|
res: res
|
||||||
|
};
|
||||||
|
|
||||||
|
// Evaluate result only if we have a positive skillvalue
|
||||||
|
if(skillValue > 0) {
|
||||||
|
let oneRes = Math.floor((res.total / 1) % 10);
|
||||||
|
let tenRes = Math.floor((res.total / 10) % 10);
|
||||||
|
|
||||||
|
if(openclosed < 0) {
|
||||||
|
rollData.closed = Math.abs(openclosed)
|
||||||
|
}
|
||||||
|
|
||||||
|
if(openclosed > 0) {
|
||||||
|
rollData.opened = Math.abs(openclosed)
|
||||||
|
}
|
||||||
|
|
||||||
|
if(openclosed < 0 && oneRes !== 0 && Math.abs(openclosed) >= oneRes) {
|
||||||
|
// roll is closed
|
||||||
|
rollData.failure = true
|
||||||
|
} else if(openclosed > 0 && oneRes !== 0 && Math.abs(openclosed) >= oneRes){
|
||||||
|
// roll is opened
|
||||||
|
rollData.success = true
|
||||||
|
} else {
|
||||||
|
if (res.total <= skillValue) {
|
||||||
|
rollData.success = true
|
||||||
|
} else {
|
||||||
|
rollData.failure = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(oneRes === tenRes) {
|
||||||
|
rollData.excetional = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const html = await renderTemplate("systems/kopparhavet/templates/dice/roll.html", rollData);
|
||||||
|
|
||||||
|
await roll.toMessage({
|
||||||
|
create: true,
|
||||||
|
content: html,
|
||||||
|
user: game.user._id,
|
||||||
|
speaker: {
|
||||||
|
actor: speaker._id,
|
||||||
|
token: speaker.token,
|
||||||
|
alias: speaker.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
two: {
|
||||||
|
icon: '<i class="fas fa-times"></i>',
|
||||||
|
label: game.i18n.localize("BUTTON.CANCEL"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
classes: ["dialog", "kopparhavet"],
|
||||||
|
}).render(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
21
module/helpers/migration-helper.js
Normal file
21
module/helpers/migration-helper.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/**
|
||||||
|
* Perform a system migration for the entire World, applying migrations for Actors, Items, and Compendium packs
|
||||||
|
* @return {Promise} A Promise which resolves once the migration is completed
|
||||||
|
*/
|
||||||
|
export const migrateWorld = async function () {
|
||||||
|
ui.notifications.info(
|
||||||
|
`Applying System Migration for version ${game.system.data.version}. Please be patient and do not close your game or shut down your server.`,
|
||||||
|
{permanent: true}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Migrate to v0.0.3 from v0.0.2 and v0.0.1
|
||||||
|
game.items.forEach((item) => {
|
||||||
|
if(item.data.type === "spell") {
|
||||||
|
item.update({"data.roll.label": "SPELL.ROLLTITLE"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Set the migration as complete
|
||||||
|
game.settings.set("kopparhavet", "worldSchemaVersion", game.system.data.version);
|
||||||
|
ui.notifications.info(`System Migration to version ${game.system.data.version} completed!`, { permanent: true });
|
||||||
|
};
|
||||||
@@ -8,7 +8,7 @@ export class ItemSheetKH extends ItemSheet {
|
|||||||
/** @override */
|
/** @override */
|
||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
return mergeObject(super.defaultOptions, {
|
return mergeObject(super.defaultOptions, {
|
||||||
classes: ["starwarsffg", "sheet", "item"],
|
classes: ["kopparhavet", "sheet", "item"],
|
||||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description" }],
|
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description" }],
|
||||||
scrollY: [".sheet-body", ".tab"],
|
scrollY: [".sheet-body", ".tab"],
|
||||||
});
|
});
|
||||||
@@ -36,7 +36,13 @@ export class ItemSheetKH extends ItemSheet {
|
|||||||
switch (this.object.data.type) {
|
switch (this.object.data.type) {
|
||||||
case "weapon":
|
case "weapon":
|
||||||
// Load Skills Compendium skills
|
// Load Skills Compendium skills
|
||||||
let skillList2 = await game.packs.get("kopparhavet.skills").getContent();
|
let skillList2
|
||||||
|
|
||||||
|
if(game.settings.get("kopparhavet", "gameSystem") === "hjaltarnas-tid") {
|
||||||
|
skillList2 = await game.packs.get("kopparhavet.skills-ht").getContent();
|
||||||
|
} else {
|
||||||
|
skillList2 = await game.packs.get("kopparhavet.skills").getContent();
|
||||||
|
}
|
||||||
|
|
||||||
for (let item of skillList2) {
|
for (let item of skillList2) {
|
||||||
if(item.data.type === "skill" && item.data.data.type.value === "combat") {
|
if(item.data.type === "skill" && item.data.data.type.value === "combat") {
|
||||||
@@ -66,6 +72,28 @@ export class ItemSheetKH extends ItemSheet {
|
|||||||
this.position.width = 405;
|
this.position.width = 405;
|
||||||
this.position.height = 570;
|
this.position.height = 570;
|
||||||
break;
|
break;
|
||||||
|
case "spell":
|
||||||
|
// Load Skills Compendium skills
|
||||||
|
let skillList3
|
||||||
|
|
||||||
|
if(game.settings.get("kopparhavet", "gameSystem") === "hjaltarnas-tid") {
|
||||||
|
skillList3 = await game.packs.get("kopparhavet.skills-ht").getContent();
|
||||||
|
} else {
|
||||||
|
skillList3 = await game.packs.get("kopparhavet.skills").getContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let item of skillList3) {
|
||||||
|
if(item.data.type === "skill") {
|
||||||
|
skillList.push(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve any created skills as well
|
||||||
|
for (let item of game.items.entities) {
|
||||||
|
if(item.data.type === "skill") {
|
||||||
|
skillList.push(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
this.position.width = 450;
|
this.position.width = 450;
|
||||||
this.position.height = 605;
|
this.position.height = 605;
|
||||||
@@ -139,6 +167,7 @@ export class ItemSheetKH extends ItemSheet {
|
|||||||
/** @override */
|
/** @override */
|
||||||
_updateObject(event, formData) {
|
_updateObject(event, formData) {
|
||||||
const itemUpdate = ItemHelpers.itemUpdate.bind(this);
|
const itemUpdate = ItemHelpers.itemUpdate.bind(this);
|
||||||
|
|
||||||
itemUpdate(event, formData);
|
itemUpdate(event, formData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,3 +24,81 @@ KH.armor_types = {
|
|||||||
"ac": 30,
|
"ac": 30,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
KH.baseSkills = [
|
||||||
|
"Smidighet",
|
||||||
|
"Trolldom",
|
||||||
|
"Fingerfärdighet",
|
||||||
|
"Finna dolda ting",
|
||||||
|
"Förleda",
|
||||||
|
"Gömma sig",
|
||||||
|
"Handel",
|
||||||
|
"Hantverk",
|
||||||
|
"Insikt",
|
||||||
|
"Jakt",
|
||||||
|
"Kastvapen",
|
||||||
|
"Knivar",
|
||||||
|
"Lagkunskap",
|
||||||
|
"Legender",
|
||||||
|
"Läkekonst",
|
||||||
|
"Lärdom",
|
||||||
|
"Musik",
|
||||||
|
"Rida",
|
||||||
|
"Sjömanskap",
|
||||||
|
"Skytte",
|
||||||
|
"Sköldar",
|
||||||
|
"Slagsmål",
|
||||||
|
"Spana",
|
||||||
|
"Spel",
|
||||||
|
"Spjut",
|
||||||
|
"Språk",
|
||||||
|
"Status",
|
||||||
|
"Stigvana",
|
||||||
|
"Styrka",
|
||||||
|
"Svärd",
|
||||||
|
"Taktik",
|
||||||
|
"Uthållighet",
|
||||||
|
"Utstrålning",
|
||||||
|
"Viljestyrka",
|
||||||
|
"Väderkunskap",
|
||||||
|
"Yxor"
|
||||||
|
]
|
||||||
|
|
||||||
|
KH.baseSkillsHT = [
|
||||||
|
"Fingerfärdighet",
|
||||||
|
"Gömma sig",
|
||||||
|
"Handel",
|
||||||
|
"Härkonst",
|
||||||
|
"Jakt",
|
||||||
|
"Lagkunskap",
|
||||||
|
"Ledarskap",
|
||||||
|
"Leta",
|
||||||
|
"Läkekonst",
|
||||||
|
"Lärdom",
|
||||||
|
"Manövrer",
|
||||||
|
"Rida",
|
||||||
|
"Sjömannaskap",
|
||||||
|
"Skaldekonst",
|
||||||
|
"Skapa",
|
||||||
|
"Spana",
|
||||||
|
"Spel",
|
||||||
|
"Spelmannaskap",
|
||||||
|
"Språk",
|
||||||
|
"Status",
|
||||||
|
"Stigvana",
|
||||||
|
"Styrkeprov",
|
||||||
|
"Trolldom",
|
||||||
|
"Uthållighet",
|
||||||
|
"Viljestyrka",
|
||||||
|
"Väderkunskap",
|
||||||
|
"Vältalighet",
|
||||||
|
"Wyrd",
|
||||||
|
"Kastvapen",
|
||||||
|
"Knivkamp",
|
||||||
|
"Skytte",
|
||||||
|
"Sköldkamp",
|
||||||
|
"Slagsmål",
|
||||||
|
"Spjutkamp",
|
||||||
|
"Svärdskamp",
|
||||||
|
"Yxkamp"
|
||||||
|
]
|
||||||
@@ -1,15 +1,25 @@
|
|||||||
export default class KHHooks {
|
export default class KHHooks {
|
||||||
static async onCreateActor(actor, options, userId) {
|
static async onCreateActor(actor, options, userId) {
|
||||||
if (actor.data.type == "character") {
|
if (actor.data.type == "character") {
|
||||||
const actorbaseSkills = actor.data.data.baseSkills;
|
// Load Skills Compendium skills
|
||||||
|
let skillIndex;
|
||||||
|
let actorbaseSkills;
|
||||||
|
|
||||||
|
if(game.settings.get("kopparhavet", "gameSystem") === "hjaltarnas-tid") {
|
||||||
|
// Set currency name
|
||||||
|
actor.update({ "data.currency.shekel.label": "CURRENCY.SILVER" });
|
||||||
|
|
||||||
|
actorbaseSkills = CONFIG.KH.baseSkillsHT
|
||||||
|
skillIndex = await game.packs.get("kopparhavet.skills-ht").getContent();
|
||||||
|
} else {
|
||||||
|
actorbaseSkills = CONFIG.KH.baseSkills;
|
||||||
|
skillIndex = await game.packs.get("kopparhavet.skills").getContent();
|
||||||
|
}
|
||||||
|
|
||||||
// Check if skill already exists by some chance
|
// Check if skill already exists by some chance
|
||||||
const existingSkills = actor.items.filter((i) => i.type === ItemType.Skill).map((i) => i.name);
|
const existingSkills = actor.items.filter((i) => i.type === ItemType.Skill).map((i) => i.name);
|
||||||
const skillsToAdd = actorbaseSkills.filter((s) => !existingSkills.includes(s));
|
const skillsToAdd = actorbaseSkills.filter((s) => !existingSkills.includes(s));
|
||||||
|
|
||||||
// Load Skills Compendium skills
|
|
||||||
const skillIndex = await game.packs.get("kopparhavet.skills").getContent();
|
|
||||||
|
|
||||||
// Filter skillIndex array to include only skills for Actor Type.
|
// Filter skillIndex array to include only skills for Actor Type.
|
||||||
let _skillsList = skillIndex.filter((i) => skillsToAdd.includes(i.data.name));
|
let _skillsList = skillIndex.filter((i) => skillsToAdd.includes(i.data.name));
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import KHHooks from "./kh-hooks.js";
|
|||||||
import { ActorKH } from "./actors/actor.js";
|
import { ActorKH } from "./actors/actor.js";
|
||||||
import { ActorSheetKH } from "./actors/actor-sheet.js";
|
import { ActorSheetKH } from "./actors/actor-sheet.js";
|
||||||
import { KH } from "./kh-config.js";
|
import { KH } from "./kh-config.js";
|
||||||
|
import * as migrations from "./helpers/migration-helper.js";
|
||||||
|
|
||||||
Hooks.once("init", () => {
|
Hooks.once("init", () => {
|
||||||
CONFIG.Combat.initiative = { formula: "(@combat.init)d6kh2", decimals: 0 };
|
CONFIG.Combat.initiative = { formula: "(@combat.init)d6kh2", decimals: 0 };
|
||||||
@@ -14,22 +15,44 @@ Hooks.once("init", () => {
|
|||||||
// Give global access to FFG config.
|
// Give global access to FFG config.
|
||||||
CONFIG.KH = KH;
|
CONFIG.KH = KH;
|
||||||
|
|
||||||
//registerFonts();
|
|
||||||
registerSheets();
|
|
||||||
preloadHandlebarsTemplates();
|
|
||||||
registerHandlebarsHelpers();
|
|
||||||
game.settings.register("kopparhavet", "worldSchemaVersion", {
|
game.settings.register("kopparhavet", "worldSchemaVersion", {
|
||||||
name: "World Version",
|
name: "World Version",
|
||||||
hint: "Used to automatically upgrade worlds data when the system is upgraded.",
|
hint: "Used to automatically upgrade worlds data when the system is upgraded.",
|
||||||
scope: "world",
|
scope: "world",
|
||||||
config: true,
|
config: true,
|
||||||
default: 0,
|
default: 0,
|
||||||
type: Number,
|
type: String,
|
||||||
});
|
});
|
||||||
|
game.settings.register("kopparhavet", "gameSystem", {
|
||||||
|
name: "Game System",
|
||||||
|
hint: "Select what game system is being used..",
|
||||||
|
scope: "world",
|
||||||
|
config: true,
|
||||||
|
default: "kopparhavet",
|
||||||
|
choices: {
|
||||||
|
"kopparhavet": "Kopparhavets Hjältar",
|
||||||
|
"hjaltarnas-tid": "Hjältarnas Tid"
|
||||||
|
},
|
||||||
|
type: String,
|
||||||
|
onChange: (rule) => {
|
||||||
|
window.location.reload();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
//registerFonts();
|
||||||
|
registerSheets();
|
||||||
|
|
||||||
|
if(game.settings.get("kopparhavet", "gameSystem") === "hjaltarnas-tid") {
|
||||||
|
preloadHandlebarsTemplatesHT();
|
||||||
|
} else {
|
||||||
|
preloadHandlebarsTemplates();
|
||||||
|
}
|
||||||
|
|
||||||
|
registerHandlebarsHelpers();
|
||||||
});
|
});
|
||||||
|
|
||||||
Hooks.once("ready", () => {
|
Hooks.once("ready", () => {
|
||||||
//migrateWorld();
|
migrateWorld();
|
||||||
});
|
});
|
||||||
|
|
||||||
/* POPULATE CHARACTER WITH DEFAULT SKILLS */
|
/* POPULATE CHARACTER WITH DEFAULT SKILLS */
|
||||||
@@ -37,8 +60,6 @@ Hooks.on("createActor", async (actor, options, userId) => KHHooks.onCreateActor(
|
|||||||
|
|
||||||
function registerSheets() {
|
function registerSheets() {
|
||||||
// Register sheet application classes
|
// Register sheet application classes
|
||||||
console.log("Registerting sheets")
|
|
||||||
|
|
||||||
Actors.unregisterSheet("core", ActorSheet);
|
Actors.unregisterSheet("core", ActorSheet);
|
||||||
Actors.registerSheet("kopparhavet", ActorSheetKH, { types: ["character"], makeDefault: true });
|
Actors.registerSheet("kopparhavet", ActorSheetKH, { types: ["character"], makeDefault: true });
|
||||||
Actors.registerSheet("kopparhavet", ActorSheetKH, { types: ["adversary"], makeDefault: true });
|
Actors.registerSheet("kopparhavet", ActorSheetKH, { types: ["adversary"], makeDefault: true });
|
||||||
@@ -66,6 +87,7 @@ function preloadHandlebarsTemplates() {
|
|||||||
"systems/kopparhavet/templates/items/spell-sheet.html",
|
"systems/kopparhavet/templates/items/spell-sheet.html",
|
||||||
"systems/kopparhavet/templates/items/talent-sheet.html",
|
"systems/kopparhavet/templates/items/talent-sheet.html",
|
||||||
"systems/kopparhavet/templates/items/weapon-sheet.html",
|
"systems/kopparhavet/templates/items/weapon-sheet.html",
|
||||||
|
"systems/kopparhavet/templates/parts/actor/main.html",
|
||||||
"systems/kopparhavet/templates/parts/actor/bio.html",
|
"systems/kopparhavet/templates/parts/actor/bio.html",
|
||||||
"systems/kopparhavet/templates/parts/actor/combat.html",
|
"systems/kopparhavet/templates/parts/actor/combat.html",
|
||||||
"systems/kopparhavet/templates/parts/actor/gear.html",
|
"systems/kopparhavet/templates/parts/actor/gear.html",
|
||||||
@@ -76,6 +98,29 @@ function preloadHandlebarsTemplates() {
|
|||||||
return loadTemplates(templatePaths);
|
return loadTemplates(templatePaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function preloadHandlebarsTemplatesHT() {
|
||||||
|
const templatePaths = [
|
||||||
|
"systems/kopparhavet/templates/chat/item-card.html",
|
||||||
|
"systems/kopparhavet/templates/actors/ht-adversary-sheet.html",
|
||||||
|
"systems/kopparhavet/templates/actors/ht-character-sheet.html",
|
||||||
|
"systems/kopparhavet/templates/dice/roll.html",
|
||||||
|
"systems/kopparhavet/templates/items/adversaryAttack-sheet.html",
|
||||||
|
"systems/kopparhavet/templates/items/armor-sheet.html",
|
||||||
|
"systems/kopparhavet/templates/items/gear-sheet.html",
|
||||||
|
"systems/kopparhavet/templates/items/skill-sheet.html",
|
||||||
|
"systems/kopparhavet/templates/items/spell-sheet.html",
|
||||||
|
"systems/kopparhavet/templates/items/talent-sheet.html",
|
||||||
|
"systems/kopparhavet/templates/items/weapon-sheet.html",
|
||||||
|
"systems/kopparhavet/templates/parts/actor/ht-main.html",
|
||||||
|
"systems/kopparhavet/templates/parts/actor/ht-combat.html",
|
||||||
|
"systems/kopparhavet/templates/parts/actor/gear.html",
|
||||||
|
"systems/kopparhavet/templates/parts/actor/ht-skills.html",
|
||||||
|
"systems/kopparhavet/templates/parts/actor/talent.html",
|
||||||
|
"systems/kopparhavet/templates/parts/shared/modifications.html",
|
||||||
|
];
|
||||||
|
return loadTemplates(templatePaths);
|
||||||
|
}
|
||||||
|
|
||||||
function normalize(data, defaultValue) {
|
function normalize(data, defaultValue) {
|
||||||
if (data) {
|
if (data) {
|
||||||
return data.toLowerCase();
|
return data.toLowerCase();
|
||||||
@@ -124,8 +169,42 @@ function registerHandlebarsHelpers() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Handlebars.registerHelper("spellRoll", function (roll) {
|
||||||
|
roll = normalize(roll, "roll");
|
||||||
|
switch (roll) {
|
||||||
|
case "roll":
|
||||||
|
return game.i18n.localize("SPELL.ROLL");
|
||||||
|
case "attackroll":
|
||||||
|
return game.i18n.localize("SPELL.ATTACKROLL");
|
||||||
|
case "opposite":
|
||||||
|
return game.i18n.localize("SPELL.OPPOSITE");
|
||||||
|
case "ritual":
|
||||||
|
return game.i18n.localize("SPELL.RITUAL");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Handlebars.registerHelper('plaintextToHTML', function(value) {
|
Handlebars.registerHelper('plaintextToHTML', function(value) {
|
||||||
// strip tags, add <br/> tags
|
// strip tags, add <br/> tags
|
||||||
return new Handlebars.SafeString(value.replace(/(<([^>]+)>)/gi, "").replace(/(?:\r\n|\r|\n)/g, '<br/>'));
|
return new Handlebars.SafeString(value.replace(/(<([^>]+)>)/gi, "").replace(/(?:\r\n|\r|\n)/g, '<br/>'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function migrateWorld() {
|
||||||
|
// Determine whether a system migration is required and feasible
|
||||||
|
const currentVersion = game.settings.get("kopparhavet", "worldSchemaVersion");
|
||||||
|
const NEEDS_MIGRATION_VERSION = "0.0.3";
|
||||||
|
const COMPATIBLE_MIGRATION_VERSION = '0' || isNaN('NaN');
|
||||||
|
let needMigration = currentVersion < NEEDS_MIGRATION_VERSION || currentVersion === null;
|
||||||
|
|
||||||
|
// Perform the migration
|
||||||
|
if (needMigration && game.user.isGM) {
|
||||||
|
if (currentVersion && currentVersion < COMPATIBLE_MIGRATION_VERSION) {
|
||||||
|
ui.notifications.error(
|
||||||
|
`Your system data is from a version that cannot be reliably migrated to the latest version. The process will be attempted, but errors may occur.`,
|
||||||
|
{ permanent: true }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
migrations.migrateWorld();
|
||||||
|
}
|
||||||
|
}
|
||||||
37
packs/skills-ht.db
Normal file
37
packs/skills-ht.db
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{"name":"Fingerfärdighet","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.tmNI5YIYYjGuZK5i"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"AY9pFa3b9qB65CVM"}
|
||||||
|
{"name":"Gömma sig","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.Ewo6mu7WdoOcF6DD"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"LsEwsYN90mrMAwJC"}
|
||||||
|
{"name":"Handel","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.syxeJlio8vIrx0Lr"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"JjXlb1GNQEmgXut1"}
|
||||||
|
{"name":"Härkonst","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.Yvy3Ej3tDNhp0VVA"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"a1AxdXijThSi6VNG"}
|
||||||
|
{"name":"Jakt","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.orNrL49vWUePhLaU"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"tPSscak2iUxVNKyP"}
|
||||||
|
{"name":"Kastvapen","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.YpheXmaKsX9omtBA"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"BN9Y5YRwBk8rbWba"}
|
||||||
|
{"name":"Knivkamp","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.uctwxo07FCKCk2K4"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"TVRH99cyiGmAkUNY"}
|
||||||
|
{"name":"Lagkunskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.b9U8BXjNvI4LwlRX"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"fJQm2snkj0C6GcGG"}
|
||||||
|
{"name":"Läkekonst","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.bVEJBtXhXOkqIBek"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"RHcwYXp1WfnPDcTT"}
|
||||||
|
{"name":"Lärdom","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.5wz37ypKMn6tgtTr"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"2G92IWn9BCGtmqHv"}
|
||||||
|
{"name":"Ledarskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.DDZkgceLisZOYHEi"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"tHF9QafgX9sqfpAW"}
|
||||||
|
{"name":"Leta","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.0m5bA14oR16bB2Gt"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"sWHSbMOOBlhShKrP"}
|
||||||
|
{"name":"Manövrer","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.XF2eNRo6uMhDs5Uv"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"N4nreeMOFTOCmJWa"}
|
||||||
|
{"name":"Rida","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.boR4AGF8LD12ykoc"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"kEi1G8CoDO8R2Yqw"}
|
||||||
|
{"name":"Sjömannaskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.8org0OaWuKO6rCqm"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"12sCrhriIkvlBhZR"}
|
||||||
|
{"name":"Skaldekonst","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.dYcVgFgx6WmBWCeZ"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Lgp89BnjQQ0QbWFG"}
|
||||||
|
{"name":"Skapa","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.DSWruhUT6DT9kY7Z"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"58gGOTfVYLJaYly0"}
|
||||||
|
{"name":"Sköldkamp","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Qg4PmjVCFSylYlHM"}
|
||||||
|
|
||||||
|
{"name":"Skytte","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.KJLF5fDrZaA1DKg1"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"izHncfq2g44vxrOj"}
|
||||||
|
{"name":"Slagsmål","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.UkwUABDT8NB8y1mQ"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"LK3tbOXHrBpWxALq"}
|
||||||
|
{"name":"Spana","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.5oQCvQNiDSeIe8vI"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"YuPS88e7mNq0Ixm1"}
|
||||||
|
{"name":"Spel","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.bcRVOx8M3Ue6tgGz"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"bwfnRUbXSNEluqgP"}
|
||||||
|
{"name":"Spelmannaskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.eFeMJtv30eImpUMn"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"kpmj729kiYYHe8kS"}
|
||||||
|
{"name":"Spjutkamp","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.GxkoQ2KdPh9ogGuJ"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"MCw0iaS0jicX4EhH"}
|
||||||
|
{"name":"Språk","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.BkCe8HPX1wVYlsmV"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"082XSYN2gkCu7eiw"}
|
||||||
|
{"name":"Status","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.5NCkdBZ4lWwLzGwk"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Hgpw4KoUqsE69Tgm"}
|
||||||
|
{"name":"Stigvana","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.NBRV1tzrIV9AmGka"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"DKSzGZr7iKavSq7A"}
|
||||||
|
{"name":"Styrkeprov","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.IC2RGKp9cEYzyIln"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"ULy4VKzv7TpbjBdK"}
|
||||||
|
{"name":"Svärdskamp","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.b9no6ZeE5KyG9AfT"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"tibPHZGChVumrm2B"}
|
||||||
|
{"name":"Trolldom","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.EVCN4lxeferZYP0P"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"WvUs3O5F7aksjM6D"}
|
||||||
|
{"name":"Uthållighet","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.Uc9XLdzkI7mGMTLL"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"bazsFyBhvZMOWKxh"}
|
||||||
|
{"name":"Väderkunskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.elGMSOQROaYXCEPA"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"AvQobAh7dQ3coziY"}
|
||||||
|
{"name":"Vältalighet","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.F5lkuwhO3WGl5yWk"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"qijUm0Gz9zSIr55P"}
|
||||||
|
{"name":"Viljestyrka","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.qbi9SN1V4bPT3T3Y"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"sqInbChYhQ1VhVUv"}
|
||||||
|
{"name":"Wyrd","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.TjVsmOs0PqbAzNUf"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"MD7Gz5QJYw1C98NM"}
|
||||||
|
{"name":"Yxkamp","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.VWaRRqiUlMw1nPUn"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"UJhsMDi2VNNFN9st"}
|
||||||
@@ -1,36 +1,36 @@
|
|||||||
{"name":"Smidighet","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"base","label":"SKILL.TYPE"},"value":"25","used":false},"flags":{"core":{"sourceId":"Item.tmNI5YIYYjGuZK5i"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"INlHwwv9wG4VA13D"}
|
{"name":"Fingerfärdighet","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.syxeJlio8vIrx0Lr"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"IVuFDobCZTw5sEOw"}
|
||||||
{"name":"Trolldom","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.Ewo6mu7WdoOcF6DD"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"kIu2AL79urDjZV8z"}
|
{"name":"Finna dolda ting","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.Yvy3Ej3tDNhp0VVA"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Jp0pc8PlQ08uIQ81"}
|
||||||
{"name":"Fingerfärdighet","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.syxeJlio8vIrx0Lr"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"9gkb0ONyCuBcWwoB"}
|
{"name":"Förleda","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.orNrL49vWUePhLaU"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"4WYeODaMqXG2Urxb"}
|
||||||
{"name":"Finna dolda ting","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.Yvy3Ej3tDNhp0VVA"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"PaieUawcyfKhfSCv"}
|
{"name":"Gömma sig","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.b9U8BXjNvI4LwlRX"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"fUAmqrS5m3rlBqu3"}
|
||||||
{"name":"Förleda","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.orNrL49vWUePhLaU"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"JN1b5A5QHoinB5Gd"}
|
{"name":"Handel","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.DDZkgceLisZOYHEi"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Mw5OL5irndqEV0Cf"}
|
||||||
{"name":"Gömma sig","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.b9U8BXjNvI4LwlRX"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"A8DBqRLBJ0yU3Ebp"}
|
{"name":"Hantverk","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.0m5bA14oR16bB2Gt"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"4XKApBWTI9agpijF"}
|
||||||
{"name":"Handel","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.DDZkgceLisZOYHEi"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"GS4NknpWIKYWceky"}
|
{"name":"Insikt","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.bVEJBtXhXOkqIBek"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"DnixLDN5YqDmQ3w7"}
|
||||||
{"name":"Hantverk","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.0m5bA14oR16bB2Gt"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"imcYcYl21T4xewNa"}
|
{"name":"Jakt","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.5wz37ypKMn6tgtTr"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"dhjKxKklgTKDQ6LI"}
|
||||||
{"name":"Insikt","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.bVEJBtXhXOkqIBek"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"NXJMfsrhYeCCEFP2"}
|
{"name":"Kastvapen","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.XF2eNRo6uMhDs5Uv"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"MTwMDLf5SyNPpPaM"}
|
||||||
{"name":"Jakt","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.5wz37ypKMn6tgtTr"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"3EuThKpVWrtV1Myy"}
|
{"name":"Knivar","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.boR4AGF8LD12ykoc"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"4Qz1KWm2vzYSviGo"}
|
||||||
{"name":"Kastvapen","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.XF2eNRo6uMhDs5Uv"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"33aM81M73ZyO1NNT"}
|
{"name":"Lagkunskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.8org0OaWuKO6rCqm"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"OZZNcLo8kJEl5bxz"}
|
||||||
{"name":"Knivar","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.boR4AGF8LD12ykoc"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"dGpYfI8CLwxKSzas"}
|
{"name":"Läkekonst","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.DSWruhUT6DT9kY7Z"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"39W3RKp0OYJ6ODHc"}
|
||||||
{"name":"Lagkunskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.8org0OaWuKO6rCqm"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"SYa97JM5u0aCNJMA"}
|
{"name":"Lärdom","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.5oQCvQNiDSeIe8vI"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"3SIpCpZrFJ0Wo1yG"}
|
||||||
{"name":"Legender","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.dYcVgFgx6WmBWCeZ"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"JcmDWE2GxJ9HKIuT"}
|
{"name":"Legender","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.dYcVgFgx6WmBWCeZ"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"9U3LFDwN8maRuB4O"}
|
||||||
{"name":"Läkekonst","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.DSWruhUT6DT9kY7Z"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"DqnFfN91ovo86QOn"}
|
{"name":"Musik","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.bcRVOx8M3Ue6tgGz"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"07lF8ECXawymH6sJ"}
|
||||||
{"name":"Lärdom","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.5oQCvQNiDSeIe8vI"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Y6kDWokNA81POqvG"}
|
{"name":"Rida","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.eFeMJtv30eImpUMn"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"KwypnNBcjbpJHgNw"}
|
||||||
{"name":"Musik","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.bcRVOx8M3Ue6tgGz"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"5nMScpCnMbb77QfD"}
|
{"name":"Sjömanskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.BkCe8HPX1wVYlsmV"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"dGFnaEQAwsbMe06A"}
|
||||||
{"name":"Rida","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.eFeMJtv30eImpUMn"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"lqRRrd1Qdmbv5Nay"}
|
{"name":"Sköldar","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.NBRV1tzrIV9AmGka"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"h0t1HszSchtAU4CD"}
|
||||||
{"name":"Sjömanskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.BkCe8HPX1wVYlsmV"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"JIEl6a3sIkH2V5wX"}
|
{"name":"Skytte","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.5NCkdBZ4lWwLzGwk"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"IuE45fz0yTGXeAeg"}
|
||||||
{"name":"Skytte","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.5NCkdBZ4lWwLzGwk"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"jEoMTkqoxQ9iSaoB"}
|
{"name":"Slagsmål","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.IC2RGKp9cEYzyIln"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"93J8eMq8Ruii7HGQ"}
|
||||||
{"name":"Sköldar","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.NBRV1tzrIV9AmGka"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"OkDh0xCD26hUrthN"}
|
{"name":"Smidighet","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"base","label":"SKILL.TYPE"},"value":"25","used":false},"flags":{"core":{"sourceId":"Item.tmNI5YIYYjGuZK5i"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"bj1YnS866BInFyBC"}
|
||||||
{"name":"Slagsmål","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.IC2RGKp9cEYzyIln"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"afCvHSTrmDWNkj31"}
|
{"name":"Spana","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.EVCN4lxeferZYP0P"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"9thUjlghPlpJCeVu"}
|
||||||
{"name":"Spana","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.EVCN4lxeferZYP0P"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Z0pWniEH3MBU69g6"}
|
{"name":"Spel","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.Uc9XLdzkI7mGMTLL"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"kPJ2fnAXyQJYn9r7"}
|
||||||
{"name":"Spel","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.Uc9XLdzkI7mGMTLL"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"HigGBE4oUC9yYMYw"}
|
{"name":"Spjut","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.qbi9SN1V4bPT3T3Y"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"yFBhPZrfG35GZlJ6"}
|
||||||
{"name":"Spjut","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.qbi9SN1V4bPT3T3Y"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Ab22ZgWUiHl83kLQ"}
|
{"name":"Språk","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.elGMSOQROaYXCEPA"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"YjhRgpl5EKPuLfqd"}
|
||||||
{"name":"Språk","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.elGMSOQROaYXCEPA"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"VZx4zxd72g4tKvAd"}
|
{"name":"Status","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.F5lkuwhO3WGl5yWk"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"B9l1Gg5jDycSRvmN"}
|
||||||
{"name":"Status","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.F5lkuwhO3WGl5yWk"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"eaooVeqja7pzzC1X"}
|
{"name":"Stigvana","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.TjVsmOs0PqbAzNUf"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"nBfDHdCERZngNS3o"}
|
||||||
{"name":"Stigvana","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.TjVsmOs0PqbAzNUf"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"dR4UbIXYyCovTGzA"}
|
{"name":"Styrka","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"base","label":"SKILL.TYPE"},"value":"25","used":false},"flags":{"core":{"sourceId":"Item.YpheXmaKsX9omtBA"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"K47Rdtaomx6ixCj6"}
|
||||||
{"name":"Styrka","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"base","label":"SKILL.TYPE"},"value":"25","used":false},"flags":{"core":{"sourceId":"Item.YpheXmaKsX9omtBA"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"anObCIyX3DdSjNPY"}
|
{"name":"Svärd","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.uctwxo07FCKCk2K4"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"BLw8iWU04QAVCwI1"}
|
||||||
{"name":"Svärd","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.uctwxo07FCKCk2K4"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"IketG7YFZuGHnihF"}
|
{"name":"Taktik","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.KJLF5fDrZaA1DKg1"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"my0qR3hj3MW6q0pW"}
|
||||||
{"name":"Taktik","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.KJLF5fDrZaA1DKg1"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"5xTZzjUd7x2EgmG2"}
|
{"name":"Trolldom","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.Ewo6mu7WdoOcF6DD"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"LUq6INKpJDcNtG20"}
|
||||||
{"name":"Uthållighet","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"base","label":"SKILL.TYPE"},"value":"25","used":false},"flags":{"core":{"sourceId":"Item.VWaRRqiUlMw1nPUn"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"4yFL38tdvBenZKBQ"}
|
{"name":"Utstrålning","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"base","label":"SKILL.TYPE"},"value":"25","used":false},"flags":{"core":{"sourceId":"Item.VWaRRqiUlMw1nPUn"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"7Bu4TQh7TvH01Kld"}
|
||||||
{"name":"Viljestyrka","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"base","label":"SKILL.TYPE"},"value":"25","used":false},"flags":{"core":{"sourceId":"Item.UkwUABDT8NB8y1mQ"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"vyW9DUMDPYqBSCtz"}
|
{"name":"Väderkunskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.GxkoQ2KdPh9ogGuJ"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"BkBOOXT7r5D1O2dd"}
|
||||||
{"name":"Väderkunskap","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"adventure","label":"SKILL.TYPE"},"value":"15","used":false},"flags":{"core":{"sourceId":"Item.GxkoQ2KdPh9ogGuJ"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"TEOcwEm0Z9GzJS6h"}
|
{"name":"Viljestyrka","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"base","label":"SKILL.TYPE"},"value":"25","used":false},"flags":{"core":{"sourceId":"Item.UkwUABDT8NB8y1mQ"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"f3hTLYs6zBhLfpTE"}
|
||||||
{"name":"Yxor","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.b9no6ZeE5KyG9AfT"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"BKu4BwEspAMQ5Yn3"}
|
{"name":"Yxor","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"combat","label":"SKILL.TYPE"},"value":"30","used":false},"flags":{"core":{"sourceId":"Item.b9no6ZeE5KyG9AfT"},"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"cn51JP1hsyEz8u56"}
|
||||||
{"name":"Utstrålning","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"base","label":"SKILL.TYPE"},"value":"25","used":false},"flags":{"core":{"sourceId":"Item.VWaRRqiUlMw1nPUn"}},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"4yFL38tdvBenZKBQ"}
|
{"name":"Uthållighet","permission":{"default":0,"tSnD115pP1EPBAXK":3},"type":"skill","data":{"description":{"value":"","type":"String","label":"ITEM.DESCRIPTION"},"type":{"value":"base","label":"SKILL.TYPE"},"value":"25","used":false},"flags":{"loaded":false},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"MnkH6ttZ29JN1vI6"}
|
||||||
|
|||||||
@@ -188,4 +188,20 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.sheet-tabs {
|
.sheet-tabs {
|
||||||
|
min-height: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.relation-list li:not(:last-child) {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.learning-list li:not(:last-child) {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.learning-list .learning,
|
||||||
|
.relation-list .relation {
|
||||||
|
padding: 0 0 5px;
|
||||||
|
border-bottom: 1px solid #bbb;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
@@ -97,17 +97,24 @@
|
|||||||
margin: auto;
|
margin: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.items .items-list .item {
|
.items .items-list .item,
|
||||||
|
.items .items-list .item-spell,
|
||||||
|
.items .items-list .item-weapon,
|
||||||
|
.items .items-list .item-skill,
|
||||||
|
.items .items-list .item-nor,
|
||||||
|
.items .items-list .item-defence {
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
padding: 3px 0;
|
padding: 3px 0;
|
||||||
border-bottom: 1px solid #bbb;
|
border-bottom: 1px solid #bbb;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.items .items-list .item .toggle-equipped {
|
.items .items-list .item .toggle-equipped,
|
||||||
|
.items .items-list .item-weapon .toggle-equipped {
|
||||||
color: #888;
|
color: #888;
|
||||||
}
|
}
|
||||||
|
|
||||||
.items .items-list .item .toggle-equipped.active {
|
.items .items-list .item .toggle-equipped.active,
|
||||||
|
.items .items-list .item-weapon .toggle-equipped.active{
|
||||||
color: #191813;
|
color: #191813;
|
||||||
}
|
}
|
||||||
15
system.json
15
system.json
@@ -2,10 +2,10 @@
|
|||||||
"name": "kopparhavet",
|
"name": "kopparhavet",
|
||||||
"title": "Kopparhavets Hjältar",
|
"title": "Kopparhavets Hjältar",
|
||||||
"description": "The Molten Sea is a dangerous but exciting place, where pirates, sorcerers and secretive orders of knighthood struggle for power, wealth and ancient lore.",
|
"description": "The Molten Sea is a dangerous but exciting place, where pirates, sorcerers and secretive orders of knighthood struggle for power, wealth and ancient lore.",
|
||||||
"version": "0.0.1",
|
"version": "0.0.3",
|
||||||
"minimumCoreVersion": "0.7.5",
|
"minimumCoreVersion": "0.7.5",
|
||||||
"compatibleCoreVersion": "0.7.7",
|
"compatibleCoreVersion": "0.7.7",
|
||||||
"templateVersion": 3,
|
"templateVersion": 4,
|
||||||
"author": "Erebus",
|
"author": "Erebus",
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"esmodules": [
|
"esmodules": [
|
||||||
@@ -21,10 +21,17 @@
|
|||||||
"packs": [
|
"packs": [
|
||||||
{
|
{
|
||||||
"name": "skills",
|
"name": "skills",
|
||||||
"label": "Skills",
|
"label": "Kopparhavets Hjältar Färdigheter",
|
||||||
"system": "kopparhavet",
|
"system": "kopparhavet",
|
||||||
"path": "./packs/skills.db",
|
"path": "./packs/skills.db",
|
||||||
"entity": "Item"
|
"entity": "Item"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "skills-ht",
|
||||||
|
"label": "Hjältarnas Tid Färdigheter",
|
||||||
|
"system": "kopparhavet",
|
||||||
|
"path": "./packs/skills-ht.db",
|
||||||
|
"entity": "Item"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"languages": [
|
"languages": [
|
||||||
@@ -46,6 +53,6 @@
|
|||||||
"url": "https://pi.rikspolisen.se/foundryvtt/kopparhavet",
|
"url": "https://pi.rikspolisen.se/foundryvtt/kopparhavet",
|
||||||
"socket": true,
|
"socket": true,
|
||||||
"manifest": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/raw/branch/master/system.json",
|
"manifest": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/raw/branch/master/system.json",
|
||||||
"download": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/archive/v0.0.1.zip",
|
"download": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/archive/v0.0.3.zip",
|
||||||
"license": ""
|
"license": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,44 +41,6 @@
|
|||||||
"stats",
|
"stats",
|
||||||
"combat"
|
"combat"
|
||||||
],
|
],
|
||||||
"baseSkills": [
|
|
||||||
"Smidighet",
|
|
||||||
"Trolldom",
|
|
||||||
"Fingerfärdighet",
|
|
||||||
"Finna dolda ting",
|
|
||||||
"Förleda",
|
|
||||||
"Gömma sig",
|
|
||||||
"Handel",
|
|
||||||
"Hantverk",
|
|
||||||
"Insikt",
|
|
||||||
"Jakt",
|
|
||||||
"Kastvapen",
|
|
||||||
"Knivar",
|
|
||||||
"Lagkunskap",
|
|
||||||
"Legender",
|
|
||||||
"Läkekonst",
|
|
||||||
"Lärdom",
|
|
||||||
"Musik",
|
|
||||||
"Rida",
|
|
||||||
"Sjömanskap",
|
|
||||||
"Skytte",
|
|
||||||
"Sköldar",
|
|
||||||
"Slagsmål",
|
|
||||||
"Spana",
|
|
||||||
"Spel",
|
|
||||||
"Spjut",
|
|
||||||
"Språk",
|
|
||||||
"Status",
|
|
||||||
"Stigvana",
|
|
||||||
"Styrka",
|
|
||||||
"Svärd",
|
|
||||||
"Taktik",
|
|
||||||
"Uthållighet",
|
|
||||||
"Utstrålning",
|
|
||||||
"Viljestyrka",
|
|
||||||
"Väderkunskap",
|
|
||||||
"Yxor"
|
|
||||||
],
|
|
||||||
"bio": {
|
"bio": {
|
||||||
"kin": {
|
"kin": {
|
||||||
"label": "BIO.KIN",
|
"label": "BIO.KIN",
|
||||||
@@ -88,9 +50,17 @@
|
|||||||
"label": "BIO.PROFESSION",
|
"label": "BIO.PROFESSION",
|
||||||
"value": ""
|
"value": ""
|
||||||
},
|
},
|
||||||
|
"nickname": {
|
||||||
|
"label": "BIO.NICKNAME",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
"age": {
|
"age": {
|
||||||
"label": "BIO.AGE",
|
"label": "BIO.AGE",
|
||||||
"value": ""
|
"value": ""
|
||||||
|
},
|
||||||
|
"appearance": {
|
||||||
|
"label": "BIO.APPEARANCE",
|
||||||
|
"value": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"background": {
|
"background": {
|
||||||
@@ -142,7 +112,8 @@
|
|||||||
"label": "CURRENCY.QUARTER",
|
"label": "CURRENCY.QUARTER",
|
||||||
"value": 0
|
"value": 0
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"relationships": {}
|
||||||
},
|
},
|
||||||
"adversary": {
|
"adversary": {
|
||||||
"templates": [
|
"templates": [
|
||||||
@@ -259,9 +230,12 @@
|
|||||||
"core"
|
"core"
|
||||||
],
|
],
|
||||||
"roll": {
|
"roll": {
|
||||||
"value": "",
|
"value": "roll",
|
||||||
"type": "String",
|
"type": "String",
|
||||||
"label": "SPELL.ROLL"
|
"label": "SPELL.ROLLTITLE",
|
||||||
|
"skill": "Trolldom",
|
||||||
|
"oppositeskill": "",
|
||||||
|
"ritual": {}
|
||||||
},
|
},
|
||||||
"cost": {
|
"cost": {
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
<form class="{{cssClass}}" autocomplete="off">
|
<form class="{{cssClass}}" autocomplete="off">
|
||||||
<div class="character">
|
<div class="character">
|
||||||
<div class="header grid-container" style="grid-template-columns: auto auto 1.7fr 2fr;">
|
<div class="header grid-container" style="grid-template-columns: auto auto 1fr auto 1fr; margin-bottom: 10px;">
|
||||||
<div class="avatar flex-group-center" style="grid-row: 1/7;">
|
<div class="avatar flex-group-center" style="grid-row: 1/7;">
|
||||||
<img class="profile-img actor-avatar-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" />
|
<img class="profile-img actor-avatar-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<label style="margin: auto;">{{localize "BIO.NAME"}}:</label>
|
<label style="margin: auto;">{{localize "BIO.NAME"}}:</label>
|
||||||
<h1 class="charname" style="margin-bottom: 0;grid-column: 3/5;"><input name="name" type="text" value="{{actor.name}}" placeholder="{{localize "BIO.NAME"}}" /></h1>
|
<h1 class="charname" style="margin-bottom: 0;grid-column: 3/6;"><input name="name" type="text" value="{{actor.name}}" placeholder="{{localize "BIO.NAME"}}" /></h1>
|
||||||
|
|
||||||
<label style="margin: auto;">{{localize data.bio.profession.label}}:</label>
|
|
||||||
<input name="data.bio.profession.value" type="text" value="{{data.bio.profession.value}}" placeholder="{{localize data.bio.profession.label}}" />
|
|
||||||
|
|
||||||
<label style="margin: auto;">{{localize data.bio.kin.label}}:</label>
|
<label style="margin: auto;">{{localize data.bio.kin.label}}:</label>
|
||||||
<input name="data.bio.kin.value" type="text" value="{{data.bio.kin.value}}" placeholder="{{localize data.bio.kin.label}}" />
|
<input name="data.bio.kin.value" type="text" value="{{data.bio.kin.value}}" placeholder="{{localize data.bio.kin.label}}" />
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize data.bio.profession.label}}:</label>
|
||||||
|
<input name="data.bio.profession.value" type="text" value="{{data.bio.profession.value}}" placeholder="{{localize data.bio.profession.label}}" />
|
||||||
|
|
||||||
<label style="margin: auto;">{{localize data.health.label}}:</label>
|
<label style="margin: auto;">{{localize data.health.label}}:</label>
|
||||||
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
|
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
|
||||||
<input class="center-text" type="text" name="data.health.value" value="{{data.health.value}}" data-dtype="Number" />
|
<input class="center-text" type="text" name="data.health.value" value="{{data.health.value}}" data-dtype="Number" />
|
||||||
@@ -34,35 +34,11 @@
|
|||||||
<span> / </span>
|
<span> / </span>
|
||||||
<input class="center-text" type="text" name="data.mana.max" value="{{data.mana.max}}" data-dtype="Number" />
|
<input class="center-text" type="text" name="data.mana.max" value="{{data.mana.max}}" data-dtype="Number" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="border grid-container" style="grid-column-gap: 5px; grid-column: 4; grid-row: 2/7; grid-template-columns: 1fr auto;">
|
|
||||||
<h2 style="margin-bottom: 0; grid-column: 1/3;">{{localize "FEATURES.TITLE"}}</h2>
|
|
||||||
|
|
||||||
<input name="data.feature.one.label" class="roll-feature" type="text" value="{{data.feature.one.label}}" />
|
|
||||||
<a style="margin: auto;" class="feature {{#if data.feature.one.value}}active{{/if}}" data-feature="one">
|
|
||||||
<i class="far {{#if data.feature.one.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<input name="data.feature.two.label" class="roll-feature" type="text" value="{{data.feature.two.label}}" />
|
|
||||||
<a style="margin: auto;" class="feature {{#if data.feature.two.value}}active{{/if}}" data-feature="two">
|
|
||||||
<i class="far {{#if data.feature.two.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<input name="data.feature.three.label" class="roll-feature" type="text" value="{{data.feature.three.label}}" />
|
|
||||||
<a style="margin: auto;" class="feature {{#if data.feature.three.value}}active{{/if}}" data-feature="three">
|
|
||||||
<i class="far {{#if data.feature.three.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<input name="data.feature.four.label" class="roll-feature" type="text" value="{{data.feature.four.label}}" />
|
|
||||||
<a style="margin: auto;" class="feature {{#if data.feature.four.value}}active{{/if}}" data-feature="four">
|
|
||||||
<i class="far {{#if data.feature.four.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sheet-tabs tabs flex row" data-group="primary">
|
<div class="sheet-tabs tabs flex row" data-group="primary">
|
||||||
|
<b class="item" data-tab="main">{{localize "TAB.MAIN"}}</b>
|
||||||
<b class="item" data-tab="skills">{{localize "TAB.SKILLS"}}</b>
|
<b class="item" data-tab="skills">{{localize "TAB.SKILLS"}}</b>
|
||||||
<!-- <b class="item" data-tab="combat">{{localize "TAB.COMBAT"}}</b> -->
|
|
||||||
<b class="item" data-tab="talent">{{localize "TAB.TALENTS"}}</b>
|
<b class="item" data-tab="talent">{{localize "TAB.TALENTS"}}</b>
|
||||||
<b class="item" data-tab="gear">{{localize "TAB.GEAR"}}</b>
|
<b class="item" data-tab="gear">{{localize "TAB.GEAR"}}</b>
|
||||||
<b class="item" data-tab="bio">{{localize "TAB.BIO"}}</b>
|
<b class="item" data-tab="bio">{{localize "TAB.BIO"}}</b>
|
||||||
@@ -70,14 +46,12 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sheet-body">
|
<div class="sheet-body">
|
||||||
|
<div class="tab" data-group="primary" data-tab="main">
|
||||||
|
{{> systems/kopparhavet/templates/parts/actor/main.html}}
|
||||||
|
</div>
|
||||||
<div class="tab" data-group="primary" data-tab="skills">
|
<div class="tab" data-group="primary" data-tab="skills">
|
||||||
{{> systems/kopparhavet/templates/parts/actor/skills.html}}
|
{{> systems/kopparhavet/templates/parts/actor/skills.html}}
|
||||||
</div>
|
</div>
|
||||||
<!--
|
|
||||||
<div class="tab" data-group="primary" data-tab="combat">
|
|
||||||
{{> systems/kopparhavet/templates/parts/actor/combat.html}}
|
|
||||||
</div>
|
|
||||||
-->
|
|
||||||
<div class="tab" data-group="primary" data-tab="talent">
|
<div class="tab" data-group="primary" data-tab="talent">
|
||||||
{{> systems/kopparhavet/templates/parts/actor/talent.html}}
|
{{> systems/kopparhavet/templates/parts/actor/talent.html}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
51
templates/actors/ht-adversary-sheet.html
Normal file
51
templates/actors/ht-adversary-sheet.html
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<form class="{{cssClass}}" autocomplete="off">
|
||||||
|
<div class="adversary">
|
||||||
|
<div class="header grid-container" style="grid-template-columns: auto 1fr auto 1fr auto;margin-bottom: 5px">
|
||||||
|
<div class="avatar flex-group-center" style="grid-row: 1/7;">
|
||||||
|
<img class="profile-img actor-avatar-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize "BIO.NAME"}}:</label>
|
||||||
|
<h1 class="charname" style="margin-bottom: 0;grid-column: 3/6;"><input name="name" type="text" value="{{actor.name}}" placeholder="{{localize "BIO.NAME"}}" /></h1>
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize data.health.label}}:</label>
|
||||||
|
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
|
||||||
|
<input class="center-text" type="text" name="data.health.value" value="{{data.health.value}}" data-dtype="Number" />
|
||||||
|
<span> / </span>
|
||||||
|
<input class="center-text" type="text" name="data.health.max" value="{{data.health.max}}" data-dtype="Number" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize data.stamina.label}}:</label>
|
||||||
|
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
|
||||||
|
<input class="center-text" type="text" name="data.stamina.value" value="{{data.stamina.value}}" data-dtype="Number" />
|
||||||
|
<span> / </span>
|
||||||
|
<input class="center-text" type="text" name="data.stamina.max" value="{{data.stamina.max}}" data-dtype="Number" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize data.mana.label}}:</label>
|
||||||
|
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
|
||||||
|
<input class="center-text" type="text" name="data.mana.value" value="{{data.mana.value}}" data-dtype="Number" />
|
||||||
|
<span> / </span>
|
||||||
|
<input class="center-text" type="text" name="data.mana.max" value="{{data.mana.max}}" data-dtype="Number" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sheet-tabs tabs flex row" data-group="primary">
|
||||||
|
<b class="item" data-tab="combat">{{localize "TAB.COMBAT"}}</b>
|
||||||
|
<b class="item" data-tab="talent">{{localize "TAB.TALENTS"}}</b>
|
||||||
|
<b class="item" data-tab="note">{{localize "TAB.NOTE"}}</b>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sheet-body">
|
||||||
|
<div class="tab" data-group="primary" data-tab="combat">
|
||||||
|
{{> systems/kopparhavet/templates/parts/actor/ht-combat.html}}
|
||||||
|
</div>
|
||||||
|
<div class="tab" data-group="primary" data-tab="talent">
|
||||||
|
{{> systems/kopparhavet/templates/parts/actor/talent.html}}
|
||||||
|
</div>
|
||||||
|
<div class="tab border note" data-group="primary" data-tab="note" style="height: 100%; border-top: none;">
|
||||||
|
{{editor content=data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
68
templates/actors/ht-character-sheet.html
Normal file
68
templates/actors/ht-character-sheet.html
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
<form class="{{cssClass}}" autocomplete="off">
|
||||||
|
<div class="character">
|
||||||
|
<div class="header grid-container" style="grid-template-columns: auto auto 1fr auto 1fr; margin-bottom: 10px;">
|
||||||
|
<div class="avatar flex-group-center" style="grid-row: 1/8;">
|
||||||
|
<img class="profile-img actor-avatar-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize "BIO.NAME"}}:</label>
|
||||||
|
<h1 class="charname" style="margin-bottom: 0; grid-column: 3/6;"><input name="name" type="text" value="{{actor.name}}" placeholder="{{localize "BIO.NAME"}}" /></h1>
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize data.bio.nickname.label}}:</label>
|
||||||
|
<input name="data.bio.nickname.value" style="grid-column: 3/6;" type="text" value="{{data.bio.nickname.value}}" placeholder="{{localize data.bio.nickname.label}}" />
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize data.bio.kin.label}}:</label>
|
||||||
|
<input name="data.bio.kin.value" type="text" value="{{data.bio.kin.value}}" placeholder="{{localize data.bio.kin.label}}" />
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize data.bio.profession.label}}:</label>
|
||||||
|
<input name="data.bio.profession.value" type="text" value="{{data.bio.profession.value}}" placeholder="{{localize data.bio.profession.label}}" />
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize data.health.label}}:</label>
|
||||||
|
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
|
||||||
|
<input class="center-text" type="text" name="data.health.value" value="{{data.health.value}}" data-dtype="Number" />
|
||||||
|
<span> / </span>
|
||||||
|
<input class="center-text" type="text" name="data.health.max" value="{{data.health.max}}" data-dtype="Number" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize data.stamina.label}}:</label>
|
||||||
|
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
|
||||||
|
<input class="center-text" type="text" name="data.stamina.value" value="{{data.stamina.value}}" data-dtype="Number" />
|
||||||
|
<span> / </span>
|
||||||
|
<input class="center-text" type="text" name="data.stamina.max" value="{{data.stamina.max}}" data-dtype="Number" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label style="margin: auto;">{{localize data.mana.label}}:</label>
|
||||||
|
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
|
||||||
|
<input class="center-text" type="text" name="data.mana.value" value="{{data.mana.value}}" data-dtype="Number" />
|
||||||
|
<span> / </span>
|
||||||
|
<input class="center-text" type="text" name="data.mana.max" value="{{data.mana.max}}" data-dtype="Number" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sheet-tabs tabs flex row" data-group="primary">
|
||||||
|
<b class="item" data-tab="main">{{localize "TAB.MAIN"}}</b>
|
||||||
|
<b class="item" data-tab="skills">{{localize "TAB.SKILLS"}}</b>
|
||||||
|
<b class="item" data-tab="talent">{{localize "TAB.TALENTS"}}</b>
|
||||||
|
<b class="item" data-tab="gear">{{localize "TAB.GEAR"}}</b>
|
||||||
|
<b class="item" data-tab="note">{{localize "TAB.NOTE"}}</b>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sheet-body">
|
||||||
|
<div class="tab" data-group="primary" data-tab="main">
|
||||||
|
{{> systems/kopparhavet/templates/parts/actor/ht-main.html}}
|
||||||
|
</div>
|
||||||
|
<div class="tab" data-group="primary" data-tab="skills">
|
||||||
|
{{> systems/kopparhavet/templates/parts/actor/ht-skills.html}}
|
||||||
|
</div>
|
||||||
|
<div class="tab" data-group="primary" data-tab="talent">
|
||||||
|
{{> systems/kopparhavet/templates/parts/actor/talent.html}}
|
||||||
|
</div>
|
||||||
|
<div class="tab" data-group="primary" data-tab="gear">
|
||||||
|
{{> systems/kopparhavet/templates/parts/actor/gear.html}}
|
||||||
|
</div>
|
||||||
|
<div class="tab note border" data-group="primary" data-tab="note" style="border-top: none;">
|
||||||
|
{{editor content=data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
@@ -74,8 +74,7 @@
|
|||||||
<strong>{{localize data.cost.label}}:</strong> {{data.cost.value}}
|
<strong>{{localize data.cost.label}}:</strong> {{data.cost.value}}
|
||||||
<strong>{{localize data.difficulty.label}}:</strong> {{rollDifficulty data.difficulty.value}}
|
<strong>{{localize data.difficulty.label}}:</strong> {{rollDifficulty data.difficulty.value}}
|
||||||
<div style="grid-column-start: 1; grid-column-end: 5;">
|
<div style="grid-column-start: 1; grid-column-end: 5;">
|
||||||
<strong>{{localize data.roll.label}}</strong>
|
<strong>{{localize data.roll.label}}:</strong> {{spellRoll data.roll.value}}
|
||||||
{{data.roll.value}}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{#if data.description}}
|
{{#if data.description}}
|
||||||
|
|||||||
@@ -4,6 +4,16 @@
|
|||||||
|
|
||||||
<div class="roll">
|
<div class="roll">
|
||||||
<div class="dice-roll">
|
<div class="dice-roll">
|
||||||
|
{{#if closed}}
|
||||||
|
<div style="text-align: center; margin-bottom: 0.5rem;">
|
||||||
|
{{localize "ROLL.CLOSED"}}: {{closed}}
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{#if opened}}
|
||||||
|
<div style="text-align: center; margin-bottom: 0.5rem;">
|
||||||
|
{{localize "ROLL.OPENED"}}: {{opened}}
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
<div class="dice-result">
|
<div class="dice-result">
|
||||||
{{#if showFormula}}
|
{{#if showFormula}}
|
||||||
<div class="dice-formula-kh">{{res.formula}}</div>
|
<div class="dice-formula-kh">{{res.formula}}</div>
|
||||||
@@ -13,14 +23,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{#if success}}
|
{{#if success}}
|
||||||
<div style="text-align: center; width: 100%; font-weight: bold; color: limegreen;">
|
<h2 style="border: none; text-align: center; width: 100%; font-weight: bold; color: limegreen;">
|
||||||
{{localize "ROLL.SUCCESS"}}
|
{{#if excetional}}{{localize "ROLL.EXCEPTIONAL"}}{{/if}} {{localize "ROLL.SUCCESS"}}
|
||||||
</div>
|
</h2>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if failure}}
|
{{#if failure}}
|
||||||
<div style="text-align: center; width: 100%; font-weight: bold; color: darkred;">
|
<h2 style="border: none; text-align: center; width: 100%; font-weight: bold; color: darkred;">
|
||||||
{{localize "ROLL.FAILURE"}}
|
{{#if excetional}}{{localize "ROLL.EXCEPTIONAL"}}{{/if}} {{localize "ROLL.FAILURE"}}
|
||||||
</div>
|
</h2>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -26,7 +26,24 @@
|
|||||||
</div>
|
</div>
|
||||||
<div style="grid-column-start: 1; grid-column-end: 3;">
|
<div style="grid-column-start: 1; grid-column-end: 3;">
|
||||||
<label>{{localize data.roll.label}}</label>
|
<label>{{localize data.roll.label}}</label>
|
||||||
<input name="data.roll.value" type="text" value="{{data.roll.value}}" />
|
<select class="item-weapon-cat-select" name="data.roll.value">
|
||||||
|
{{#select data.roll.value}}
|
||||||
|
<option value="roll">{{localize "SPELL.ROLL"}}</option>
|
||||||
|
<option value="attackroll">{{localize "SPELL.ATTACKROLL"}}</option>
|
||||||
|
<option value="opposite">{{localize "SPELL.OPPOSITE"}}</option>
|
||||||
|
<option value="ritual">{{localize "SPELL.RITUAL"}}</option>
|
||||||
|
{{/select}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div style="grid-column-start: 1; grid-column-end: 3;">
|
||||||
|
<label>{{localize "ITEM.SKILL"}}</label>
|
||||||
|
<select class="item-weapon-skill-select" name="data.roll.skill">
|
||||||
|
{{#select data.roll.skill}}
|
||||||
|
{{#each this.khskills as |t|}}
|
||||||
|
<option value="{{t.name}}">{{t.name}}</option>
|
||||||
|
{{/each}}
|
||||||
|
{{/select}}
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
|
|||||||
@@ -2,16 +2,16 @@
|
|||||||
<div class="combat border">
|
<div class="combat border">
|
||||||
<ul class="items">
|
<ul class="items">
|
||||||
<ul class="items-list">
|
<ul class="items-list">
|
||||||
<li class="item flexrow">
|
<li class="item-nor flexrow">
|
||||||
<div class="item-name" style="flex-grow: 8;">{{localize "MOD.INIT"}}</div>
|
<div class="item-name" style="flex-grow: 8;">{{localize "MOD.INIT"}}</div>
|
||||||
<div class="item-value" style="flex: none;"><input name="data.combat.init" class="skill-value" type="number" value="{{data.combat.init}}" data-dtype="Number" /></div>
|
<div class="item-value" style="flex: none;"><input name="data.combat.init" class="skill-value" type="number" value="{{data.combat.init}}" data-dtype="Number" /></div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="item flexrow">
|
<li class="item-defence flexrow" data-defence="{{data.combat.defence}}">
|
||||||
<div class="item-name roll-defence rollable" data-defence="{{data.combat.defence}}" style="flex-grow: 8;">{{localize "ADVERSARY.DEFENCE"}}</div>
|
<div class="item-name roll-defence rollable" data-defence="{{data.combat.defence}}" style="flex-grow: 8;">{{localize "ADVERSARY.DEFENCE"}}</div>
|
||||||
<div class="item-value" style="flex: none;"><input name="data.combat.defence" class="skill-value" type="text" value="{{data.combat.defence}}" /></div>
|
<div class="item-value" style="flex: none;"><input name="data.combat.defence" class="skill-value" type="text" value="{{data.combat.defence}}" /></div>
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow">
|
<li class="item-nor flexrow">
|
||||||
<div class="item-name" style="flex-grow: 8;">{{localize "ADVERSARY.HASHELMET"}}</div>
|
<div class="item-name" style="flex-grow: 8;">{{localize "ADVERSARY.HASHELMET"}}</div>
|
||||||
<div style="align-self: flex-end">
|
<div style="align-self: flex-end">
|
||||||
<a style="margin: auto;" class="adversary-helmet-click {{#if data.combat.helmet}}active{{/if}}">
|
<a style="margin: auto;" class="adversary-helmet-click {{#if data.combat.helmet}}active{{/if}}">
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="item flexrow">
|
<li class="item-nor flexrow">
|
||||||
<div class="item-name roll-adversary-armor rollable" data-armor="{{data.combat.armor}}" style="flex-grow: 8;">{{localize "ITEM.DEFENCE"}}</div>
|
<div class="item-name roll-adversary-armor rollable" data-armor="{{data.combat.armor}}" style="flex-grow: 8;">{{localize "ITEM.DEFENCE"}}</div>
|
||||||
<div class="item-value" style="flex: none;"><input name="data.combat.armor" class="skill-value" type="text" value="{{data.combat.armor}}" /></div>
|
<div class="item-value" style="flex: none;"><input name="data.combat.armor" class="skill-value" type="text" value="{{data.combat.armor}}" /></div>
|
||||||
</li>
|
</li>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<ul class="items">
|
<ul class="items">
|
||||||
<ul class="items-list">
|
<ul class="items-list">
|
||||||
{{#each actor.skills as |skill key|}}
|
{{#each actor.skills as |skill key|}}
|
||||||
<li class="item flexrow" data-item-id="{{skill._id}}">
|
<li class="item-skill flexrow" data-item-id="{{skill._id}}">
|
||||||
<div class="item-name roll-skill rollable" style="flex-grow: 8;">{{skill.name}}</div>
|
<div class="item-name roll-skill rollable" style="flex-grow: 8;">{{skill.name}}</div>
|
||||||
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
||||||
</li>
|
</li>
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
<ul class="items-list">
|
<ul class="items-list">
|
||||||
{{#each actor.attacks as |item key|}}
|
{{#each actor.attacks as |item key|}}
|
||||||
<li class="item flexrow" data-item-id="{{item._id}}" data-ability="{{item.data.skill.value}}">
|
<li class="item-attack flexrow" data-item-id="{{item._id}}" data-ability="{{item.data.skill.value}}">
|
||||||
<div class="item-name">{{item.name}}</div>
|
<div class="item-name">{{item.name}}</div>
|
||||||
<div class="skill-roll">
|
<div class="skill-roll">
|
||||||
<div class="roll-button">
|
<div class="roll-button">
|
||||||
@@ -61,12 +61,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="skill-roll">
|
<div class="skill-roll">
|
||||||
<div class="roll-button">
|
<div class="roll-button">
|
||||||
<div class="roll-damage rollable">{{item.data.damage.value}}</div>
|
<div class="roll-attack-damage rollable">{{item.data.damage.value}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-controls">
|
<div class="item-controls">
|
||||||
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
|
<a class="item-control item-edit" data-parent=".item-attack" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
<a class="item-control item-delete" data-parent=".item-attack" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<ul class="items-list">
|
<ul class="items-list">
|
||||||
{{#each actor.weapons as |item id|}}
|
{{#each actor.weapons as |item id|}}
|
||||||
<li class="item flexrow" data-item-id="{{item._id}}" data-ability="{{item.data.skill.value}}">
|
<li class="item-weapon flexrow" data-item-id="{{item._id}}" data-ability="{{item.data.skill.value}}">
|
||||||
<div class="item-name">{{item.name}}</div>
|
<div class="item-name">{{item.name}}</div>
|
||||||
<div>
|
<div>
|
||||||
{{#if item.data.equipable.equipped}}
|
{{#if item.data.equipable.equipped}}
|
||||||
@@ -40,8 +40,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-controls">
|
<div class="item-controls">
|
||||||
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
|
<a class="item-control item-edit" data-parent=".item-weapon" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
<a class="item-control item-delete" data-parent=".item-weapon" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@@ -79,8 +79,8 @@
|
|||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<div class="item-controls">
|
<div class="item-controls">
|
||||||
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
|
<a class="item-control item-edit" data-parent=".item" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
<a class="item-control item-delete" data-parent=".item" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@@ -105,8 +105,8 @@
|
|||||||
<div class="quantity decrease"><i class="far fa-minus-square"></i></div>
|
<div class="quantity decrease"><i class="far fa-minus-square"></i></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-controls">
|
<div class="item-controls">
|
||||||
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
|
<a class="item-control item-edit" data-parent=".item" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
<a class="item-control item-delete" data-parent=".item" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|||||||
68
templates/parts/actor/ht-combat.html
Normal file
68
templates/parts/actor/ht-combat.html
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
<div class="border grid-container" style="height: 100%; border-top: none; grid-template-columns: 1fr 1fr; grid-template-rows: auto 1fr;">
|
||||||
|
<div class="combat border">
|
||||||
|
<ul class="items">
|
||||||
|
<ul class="items-list">
|
||||||
|
<li class="item-nor flexrow">
|
||||||
|
<div class="item-name" style="flex-grow: 8;">{{localize "MOD.INIT"}}</div>
|
||||||
|
<div class="item-value" style="flex: none;"><input name="data.combat.init" class="skill-value" type="number" value="{{data.combat.init}}" data-dtype="Number" /></div>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="item-defence flexrow" data-defence="{{data.combat.defence}}">
|
||||||
|
<div class="item-name roll-defence rollable" data-defence="{{data.combat.defence}}" style="flex-grow: 8;">{{localize "ADVERSARY.DEFENCE"}}</div>
|
||||||
|
<div class="item-value" style="flex: none;"><input name="data.combat.defence" class="skill-value" type="text" value="{{data.combat.defence}}" /></div>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="item-nor flexrow">
|
||||||
|
<div class="item-name roll-adversary-armor rollable" data-armor="{{data.combat.armor}}" style="flex-grow: 8;">{{localize "ITEM.DEFENCE"}}</div>
|
||||||
|
<div class="item-value" style="flex: none;"><input name="data.combat.armor" class="skill-value" type="text" value="{{data.combat.armor}}" /></div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="talents border" style="grid-row: 1/3; grid-column-start: 2;">
|
||||||
|
<h1 style="margin-bottom: 0; grid-column: 1/4;">{{localize "TAB.SKILLS"}}</h1>
|
||||||
|
<ul class="items">
|
||||||
|
<ul class="items-list">
|
||||||
|
{{#each actor.skills as |skill key|}}
|
||||||
|
<li class="item-skill flexrow" data-item-id="{{skill._id}}">
|
||||||
|
<div class="item-name roll-skill rollable" style="flex-grow: 8;">{{skill.name}}</div>
|
||||||
|
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
||||||
|
</li>
|
||||||
|
{{/each}}
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="attacks border">
|
||||||
|
<ul class="items">
|
||||||
|
<li class="items-header flexrow">
|
||||||
|
<div class="header-name">{{localize "ITEM.ATTACK"}}</div>
|
||||||
|
<div class="">{{localize "ITEM.SKILL"}}</div>
|
||||||
|
<div>{{localize "ITEM.DAMAGE"}}</div>
|
||||||
|
<div></div>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<ul class="items-list">
|
||||||
|
{{#each actor.attacks as |item key|}}
|
||||||
|
<li class="item-attack flexrow" data-item-id="{{item._id}}" data-ability="{{item.data.skill.value}}">
|
||||||
|
<div class="item-name">{{item.name}}</div>
|
||||||
|
<div class="skill-roll">
|
||||||
|
<div class="roll-button">
|
||||||
|
<div class="roll-adversary-attack rollable">{{item.data.skill.value}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="skill-roll">
|
||||||
|
<div class="roll-button">
|
||||||
|
<div class="roll-attack-damage rollable">{{item.data.damage.value}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item-controls">
|
||||||
|
<a class="item-control item-edit" data-parent=".item-attack" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||||
|
<a class="item-control item-delete" data-parent=".item-attack" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{/each}}
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
99
templates/parts/actor/ht-main.html
Normal file
99
templates/parts/actor/ht-main.html
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
<div class="bio-tab border scroll-y" style="height: 100%; border-top: none;">
|
||||||
|
<div class="grid-container" style="height: fit-content; border-top: none; grid-template-rows: 1fr auto auto; grid-template-columns: 1fr 1fr;">
|
||||||
|
<div class="border grid-container" style="height: 100%; grid-row: 1/4; grid-template-rows: auto 1fr; height: fit-content; min-height: 200px;">
|
||||||
|
<h2 style="margin-bottom: 0;">{{localize data.bio.appearance.label}}</h2>
|
||||||
|
<div class="description">
|
||||||
|
{{editor content=data.bio.appearance.value target="data.bio.appearance.value" button=true owner=owner editable=editable}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="border grid-container" style="grid-column-gap: 5px; grid-template-columns: 1fr auto; max-height: 163px;">
|
||||||
|
<h2 style="margin-bottom: 0; grid-column: 1/3;">{{localize "HT.FEATURES.TITLE"}}</h2>
|
||||||
|
|
||||||
|
<input name="data.feature.one.label" class="roll-feature" type="text" value="{{data.feature.one.label}}" />
|
||||||
|
<a style="margin: auto;" class="feature {{#if data.feature.one.value}}active{{/if}}" data-feature="one">
|
||||||
|
<i class="far {{#if data.feature.one.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<input name="data.feature.two.label" class="roll-feature" type="text" value="{{data.feature.two.label}}" />
|
||||||
|
<a style="margin: auto;" class="feature {{#if data.feature.two.value}}active{{/if}}" data-feature="two">
|
||||||
|
<i class="far {{#if data.feature.two.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<input name="data.feature.three.label" class="roll-feature" type="text" value="{{data.feature.three.label}}" />
|
||||||
|
<a style="margin: auto;" class="feature {{#if data.feature.three.value}}active{{/if}}" data-feature="three">
|
||||||
|
<i class="far {{#if data.feature.three.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<input name="data.feature.four.label" class="roll-feature" type="text" value="{{data.feature.four.label}}" />
|
||||||
|
<a style="margin: auto;" class="feature {{#if data.feature.four.value}}active{{/if}}" data-feature="four">
|
||||||
|
<i class="far {{#if data.feature.four.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="border">
|
||||||
|
<header class="relation-header" >
|
||||||
|
<h2 class="grid-container" style="margin-bottom: 0; grid-template-columns: 2fr 1fr auto;">
|
||||||
|
{{localize "HT.RELATIONSHIP.TITLE"}}
|
||||||
|
<div></div>
|
||||||
|
<a class="relation-control" data-action="create"><i class="fas fa-plus"></i></a>
|
||||||
|
</h2>
|
||||||
|
</header>
|
||||||
|
<ol class="relation-list" style="padding: 0;">
|
||||||
|
{{#each data.relationships as |attr key|}}
|
||||||
|
<li class="relation grid-container" style="grid-template-columns: 2fr auto auto;" data-attribute="{{key}}">
|
||||||
|
<input class="relation-key" type="text" name="data.relationships.{{key}}.key" value="{{key}}" style="display: none;" />
|
||||||
|
<input class="relation-value" type="text" name="data.relationships.{{key}}.value" value="{{attr.value}}" />
|
||||||
|
<a style="margin: auto 10px;" class="relation-click {{#if attr.check}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.check}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a style="margin: auto;" class="relation-control" data-action="delete"><i class="fas fa-trash"></i></a>
|
||||||
|
</li>
|
||||||
|
{{/each}}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
<div class="border">
|
||||||
|
<header class="learning-header" >
|
||||||
|
<h2 class="grid-container" style="margin-bottom: 0; grid-template-columns: 2fr 1fr auto;">
|
||||||
|
{{localize "LEARNING.TITLE"}}
|
||||||
|
<div></div>
|
||||||
|
<a class="learning-control" data-action="create"><i class="fas fa-plus"></i></a>
|
||||||
|
</h2>
|
||||||
|
</header>
|
||||||
|
<ol class="learning-list" style="padding: 0;">
|
||||||
|
{{#each data.learning as |attr key|}}
|
||||||
|
<li class="learning grid-container" style="grid-template-columns: 2fr auto auto;" data-attribute="{{key}}">
|
||||||
|
<input class="learning-key" type="text" name="data.learning.{{key}}.key" value="{{key}}" style="display: none;" />
|
||||||
|
<input style="margin-top: auto; margin-bottom: auto;" class="learning-value" type="text" name="data.learning.{{key}}.value" value="{{attr.value}}" />
|
||||||
|
<div class="grid-container" style="margin: auto 10px; grid-template-rows: auto auto; grid-template-columns: auto auto auto auto;">
|
||||||
|
<a data-num="one" class="learning-click {{#if attr.one}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.one}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="two" class="learning-click {{#if attr.two}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.two}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="three" class="learning-click {{#if attr.three}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.three}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="four" class="learning-click {{#if attr.four}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.four}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="five" class="learning-click {{#if attr.five}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.five}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="six" class="learning-click {{#if attr.six}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.six}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="seven" class="learning-click {{#if attr.seven}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.seven}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="eight" class="learning-click {{#if attr.eight}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.eight}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<a style="margin: auto;" class="learning-control" data-action="delete"><i class="fas fa-trash"></i></a>
|
||||||
|
</li>
|
||||||
|
{{/each}}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
46
templates/parts/actor/ht-skills.html
Normal file
46
templates/parts/actor/ht-skills.html
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<div class="skills-tab border scroll-y grid-container" style="grid-template-columns: 1fr 1fr; border-top: none;">
|
||||||
|
<div class="skills border" style="grid-column: 2; grid-row: 1/5;">
|
||||||
|
<h1 style="margin-bottom: 0; grid-column: 1/4;">{{localize "SKILL.ADVENTURE"}}</h1>
|
||||||
|
<ul class="items">
|
||||||
|
<ul class="items-list">
|
||||||
|
{{#each actor.skills as |skill key|}}
|
||||||
|
{{#if skill.hasAdventure}}
|
||||||
|
<li class="item-skill flexrow" data-item-id="{{skill._id}}">
|
||||||
|
<div class="item-name roll-skill rollable" style="flex-grow: 8;">{{skill.name}}</div>
|
||||||
|
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
||||||
|
<div style="align-self: flex-end; margin-top: auto; margin-bottom: auto;">
|
||||||
|
<a style="margin: auto;" class="click-skill {{#if skill.data.used}}active{{/if}}" data-item-id="{{skill._id}}">
|
||||||
|
<i class="far {{#if skill.data.used}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
{{/each}}
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="skills border">
|
||||||
|
<h1 style="margin-bottom: 0; grid-column: 1/4;">{{localize "SKILL.COMBAT"}}</h1>
|
||||||
|
<ul class="items">
|
||||||
|
<ul class="items-list">
|
||||||
|
{{#each actor.skills as |skill key|}}
|
||||||
|
{{#if skill.hasCombat}}
|
||||||
|
<li class="item-skill flexrow" data-item-id="{{skill._id}}">
|
||||||
|
<div class="item-name roll-skill rollable" style="flex-grow: 8;">{{skill.name}}</div>
|
||||||
|
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
||||||
|
<div style="align-self: flex-end; margin-top: auto; margin-bottom: auto;">
|
||||||
|
<a style="margin: auto;" class="click-skill {{#if skill.data.used}}active{{/if}}" data-item-id="{{skill._id}}">
|
||||||
|
<i class="far {{#if skill.data.used}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
{{/each}}
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="skills border grid-container" style="grid-column-gap: 5px; grid-template-columns: 1fr;">
|
||||||
|
<h1 style="grid-column: unset;">{{localize data.languages.label}}</h1>
|
||||||
|
<input name="data.languages.value" type="text" value="{{data.languages.value}}" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
78
templates/parts/actor/main.html
Normal file
78
templates/parts/actor/main.html
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<div class="bio-tab border scroll-y" style="height: 100%; border-top: none;">
|
||||||
|
<div class="grid-container" style="height: fit-content; border-top: none; grid-template-rows: 1fr auto; grid-template-columns: 1fr 1fr;">
|
||||||
|
<div class="border grid-container" style="height: 100%; grid-row: 1/4; grid-template-rows: auto 1fr; height: fit-content; min-height: 200px;">
|
||||||
|
<h2 style="margin-bottom: 0;">{{localize data.bio.appearance.label}}</h2>
|
||||||
|
<div class="description">
|
||||||
|
{{editor content=data.bio.appearance.value target="data.bio.appearance.value" button=true owner=owner editable=editable}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="border grid-container" style="grid-column-gap: 5px; grid-template-columns: 1fr auto; max-height: 163px;">
|
||||||
|
<h2 style="margin-bottom: 0; grid-column: 1/3;">{{localize "FEATURES.TITLE"}}</h2>
|
||||||
|
|
||||||
|
<input name="data.feature.one.label" class="roll-feature" type="text" value="{{data.feature.one.label}}" />
|
||||||
|
<a style="margin: auto;" class="feature {{#if data.feature.one.value}}active{{/if}}" data-feature="one">
|
||||||
|
<i class="far {{#if data.feature.one.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<input name="data.feature.two.label" class="roll-feature" type="text" value="{{data.feature.two.label}}" />
|
||||||
|
<a style="margin: auto;" class="feature {{#if data.feature.two.value}}active{{/if}}" data-feature="two">
|
||||||
|
<i class="far {{#if data.feature.two.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<input name="data.feature.three.label" class="roll-feature" type="text" value="{{data.feature.three.label}}" />
|
||||||
|
<a style="margin: auto;" class="feature {{#if data.feature.three.value}}active{{/if}}" data-feature="three">
|
||||||
|
<i class="far {{#if data.feature.three.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<input name="data.feature.four.label" class="roll-feature" type="text" value="{{data.feature.four.label}}" />
|
||||||
|
<a style="margin: auto;" class="feature {{#if data.feature.four.value}}active{{/if}}" data-feature="four">
|
||||||
|
<i class="far {{#if data.feature.four.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="border">
|
||||||
|
<header class="learning-header" >
|
||||||
|
<h2 class="grid-container" style="margin-bottom: 0; grid-template-columns: 2fr 1fr auto;">
|
||||||
|
{{localize "LEARNING.TITLE"}}
|
||||||
|
<div></div>
|
||||||
|
<a class="learning-control" data-action="create"><i class="fas fa-plus"></i></a>
|
||||||
|
</h2>
|
||||||
|
</header>
|
||||||
|
<ol class="learning-list" style="padding: 0;">
|
||||||
|
{{#each data.learning as |attr key|}}
|
||||||
|
<li class="learning grid-container" style="grid-template-columns: 2fr auto auto;" data-attribute="{{key}}">
|
||||||
|
<input class="learning-key" type="text" name="data.learning.{{key}}.key" value="{{key}}" style="display: none;" />
|
||||||
|
<input style="margin-top: auto; margin-bottom: auto;" class="learning-value" type="text" name="data.learning.{{key}}.value" value="{{attr.value}}" />
|
||||||
|
<div class="grid-container" style="margin: auto 10px; grid-template-rows: auto auto; grid-template-columns: auto auto auto auto;">
|
||||||
|
<a data-num="one" class="learning-click {{#if attr.one}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.one}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="two" class="learning-click {{#if attr.two}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.two}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="three" class="learning-click {{#if attr.three}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.three}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="four" class="learning-click {{#if attr.four}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.four}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="five" class="learning-click {{#if attr.five}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.five}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="six" class="learning-click {{#if attr.six}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.six}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="seven" class="learning-click {{#if attr.seven}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.seven}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
<a data-num="eight" class="learning-click {{#if attr.eight}}active{{/if}}">
|
||||||
|
<i class="far {{#if attr.eight}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<a style="margin: auto;" class="learning-control" data-action="delete"><i class="fas fa-trash"></i></a>
|
||||||
|
</li>
|
||||||
|
{{/each}}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -5,10 +5,10 @@
|
|||||||
<ul class="items-list">
|
<ul class="items-list">
|
||||||
{{#each actor.skills as |skill key|}}
|
{{#each actor.skills as |skill key|}}
|
||||||
{{#if skill.hasBase}}
|
{{#if skill.hasBase}}
|
||||||
<li class="item flexrow" data-item-id="{{skill._id}}">
|
<li class="item-skill flexrow" data-item-id="{{skill._id}}">
|
||||||
<div class="item-name roll-skill" style="flex-grow: 8;">{{skill.name}}</div>
|
<div class="item-name roll-skill rollable" style="flex-grow: 8;">{{skill.name}}</div>
|
||||||
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
||||||
<div style="align-self: flex-end">
|
<div style="align-self: flex-end; margin-top: auto; margin-bottom: auto;">
|
||||||
<a style="margin: auto;" class="click-skill {{#if skill.data.used}}active{{/if}}" data-item-id="{{skill._id}}">
|
<a style="margin: auto;" class="click-skill {{#if skill.data.used}}active{{/if}}" data-item-id="{{skill._id}}">
|
||||||
<i class="far {{#if skill.data.used}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
<i class="far {{#if skill.data.used}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
</a>
|
</a>
|
||||||
@@ -25,10 +25,10 @@
|
|||||||
<ul class="items-list">
|
<ul class="items-list">
|
||||||
{{#each actor.skills as |skill key|}}
|
{{#each actor.skills as |skill key|}}
|
||||||
{{#if skill.hasAdventure}}
|
{{#if skill.hasAdventure}}
|
||||||
<li class="item flexrow" data-item-id="{{skill._id}}">
|
<li class="item-skill flexrow" data-item-id="{{skill._id}}">
|
||||||
<div class="item-name roll-skill" style="flex-grow: 8;">{{skill.name}}</div>
|
<div class="item-name roll-skill rollable" style="flex-grow: 8;">{{skill.name}}</div>
|
||||||
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
||||||
<div style="align-self: flex-end">
|
<div style="align-self: flex-end; margin-top: auto; margin-bottom: auto;">
|
||||||
<a style="margin: auto;" class="click-skill {{#if skill.data.used}}active{{/if}}" data-item-id="{{skill._id}}">
|
<a style="margin: auto;" class="click-skill {{#if skill.data.used}}active{{/if}}" data-item-id="{{skill._id}}">
|
||||||
<i class="far {{#if skill.data.used}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
<i class="far {{#if skill.data.used}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
</a>
|
</a>
|
||||||
@@ -45,10 +45,10 @@
|
|||||||
<ul class="items-list">
|
<ul class="items-list">
|
||||||
{{#each actor.skills as |skill key|}}
|
{{#each actor.skills as |skill key|}}
|
||||||
{{#if skill.hasCombat}}
|
{{#if skill.hasCombat}}
|
||||||
<li class="item flexrow" data-item-id="{{skill._id}}">
|
<li class="item-skill flexrow" data-item-id="{{skill._id}}">
|
||||||
<div class="item-name roll-skill" style="flex-grow: 8;">{{skill.name}}</div>
|
<div class="item-name roll-skill rollable" style="flex-grow: 8;">{{skill.name}}</div>
|
||||||
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
|
||||||
<div style="align-self: flex-end">
|
<div style="align-self: flex-end; margin-top: auto; margin-bottom: auto;">
|
||||||
<a style="margin: auto;" class="click-skill {{#if skill.data.used}}active{{/if}}" data-item-id="{{skill._id}}">
|
<a style="margin: auto;" class="click-skill {{#if skill.data.used}}active{{/if}}" data-item-id="{{skill._id}}">
|
||||||
<i class="far {{#if skill.data.used}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
<i class="far {{#if skill.data.used}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
<li class="item flexrow" data-item-id="{{talent._id}}">
|
<li class="item flexrow" data-item-id="{{talent._id}}">
|
||||||
<div class="item-name">{{talent.name}}</div>
|
<div class="item-name">{{talent.name}}</div>
|
||||||
<div class="item-controls">
|
<div class="item-controls">
|
||||||
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
|
<a class="item-control item-edit" data-parent=".item" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
<a class="item-control item-delete" data-parent=".item" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@@ -25,13 +25,13 @@
|
|||||||
<ul class="items">
|
<ul class="items">
|
||||||
<ul class="items-list">
|
<ul class="items-list">
|
||||||
{{#each actor.spells as |spell key|}}
|
{{#each actor.spells as |spell key|}}
|
||||||
<li class="item flexrow" data-item-id="{{spell._id}}">
|
<li class="item-spell flexrow" data-item-id="{{spell._id}}">
|
||||||
<div class="item-name">{{spell.name}}</div>
|
<div class="item-name roll-spell-skill rollable" style="margin-top: auto; margin-bottom: auto;">{{spell.name}}</div>
|
||||||
<div class="cost roll-spell-cost rollable">{{spell.data.cost.value}}</div>
|
<div class="cost roll-spell-cost rollable">{{spell.data.cost.value}}</div>
|
||||||
<div class="difficulty">{{rollDifficulty spell.data.difficulty.value}}</div>
|
<div class="difficulty">{{rollDifficulty spell.data.difficulty.value}}</div>
|
||||||
<div class="item-controls">
|
<div class="item-controls">
|
||||||
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
|
<a class="item-control item-edit" data-parent=".item-spell" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
<a class="item-control item-delete" data-parent=".item-spell" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|||||||
55
templates/roll-dialog.html
Normal file
55
templates/roll-dialog.html
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<div id="{{id}}" class="roll-dialog">
|
||||||
|
<h1 style="text-align: center;">{{localize skillName}} ({{skillValue}})</h1>
|
||||||
|
<div class="flexrow" style="margin-bottom: 10px;">
|
||||||
|
<label style="margin: auto;">{{localize "ROLL.OPENCLOSE"}}</label>
|
||||||
|
<input type="button" name="openclosed" min="0" value="{{startopen}}" style="min-height: 30px; min-width: 45px;" />
|
||||||
|
<label name="notopenedorclosed" style="margin: auto; display: inline-block;"> </label>
|
||||||
|
<label name="closed" style="margin: auto; display: none; text-align: center;">{{localize "ROLL.CLOSED"}}</label>
|
||||||
|
<label name="opened" style="margin: auto; display: none; text-align: center;">{{localize "ROLL.OPENED"}}</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
const scope = document.getElementById("{{{id}}}");
|
||||||
|
const input = scope.querySelector(`[name="openclosed"`);
|
||||||
|
const closed = scope.querySelector(`[name="closed"`);
|
||||||
|
const opened = scope.querySelector(`[name="opened"`);
|
||||||
|
const none = scope.querySelector(`[name="notopenedorclosed"`);
|
||||||
|
|
||||||
|
input.addEventListener("click", (event) => {
|
||||||
|
event.target.value++;
|
||||||
|
|
||||||
|
if(event.target.value > 0) {
|
||||||
|
closed.style.display = "none"
|
||||||
|
none.style.display = "none"
|
||||||
|
opened.style.display = "inline-block"
|
||||||
|
} else if(event.target.value < 0) {
|
||||||
|
opened.style.display = "none"
|
||||||
|
none.style.display = "none"
|
||||||
|
closed.style.display = "inline-block"
|
||||||
|
} else {
|
||||||
|
opened.style.display = "none"
|
||||||
|
closed.style.display = "none"
|
||||||
|
none.style.display = "inline-block"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
input.addEventListener("contextmenu", (event) => {
|
||||||
|
event.target.value--;
|
||||||
|
|
||||||
|
if(event.target.value > 0) {
|
||||||
|
closed.style.display = "none"
|
||||||
|
none.style.display = "none"
|
||||||
|
opened.style.display = "inline-block"
|
||||||
|
} else if(event.target.value < 0) {
|
||||||
|
opened.style.display = "none"
|
||||||
|
none.style.display = "none"
|
||||||
|
closed.style.display = "inline-block"
|
||||||
|
} else {
|
||||||
|
opened.style.display = "none"
|
||||||
|
closed.style.display = "none"
|
||||||
|
none.style.display = "inline-block"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
Reference in New Issue
Block a user