Fix Agent Sheet v2 tab navigation positioning.
Move items to ItemV2. More API deprecation fixes.
This commit is contained in:
+17
-25
@@ -3,7 +3,7 @@ import DG from "./config.js";
|
||||
import DeltaGreenActor from "./actor/actor.js";
|
||||
import DGAgentSheet from "./sheets/agent-sheet.js";
|
||||
import DeltaGreenItem from "./item/item.js";
|
||||
import DeltaGreenItemSheet from "./item/item-sheet.js";
|
||||
import DGItemSheet from "./sheets/base-item-sheet.js";
|
||||
import * as DGRolls from "./roll/roll.js";
|
||||
import registerSystemSettings from "./settings.js";
|
||||
import preloadHandlebarsTemplates from "./templates.js";
|
||||
@@ -103,16 +103,15 @@ Hooks.once("init", async () => {
|
||||
});
|
||||
});
|
||||
|
||||
// Don't register new sheet yet.
|
||||
// Actors.registerSheet(DG.ID, DGAgentSheetV2, {
|
||||
// makeDefault: false,
|
||||
// themes: null,
|
||||
// label: `Agent Sheet V2`,
|
||||
// types: ["agent"],
|
||||
// });
|
||||
Actors.registerSheet(DG.ID, DGAgentSheetV2, {
|
||||
makeDefault: false,
|
||||
themes: null,
|
||||
label: "DG.Sheet.class.agentV2",
|
||||
types: ["agent"],
|
||||
});
|
||||
|
||||
// Register item sheet.
|
||||
Items.registerSheet(DG.ID, DeltaGreenItemSheet, {
|
||||
Items.registerSheet(DG.ID, DGItemSheet, {
|
||||
makeDefault: true,
|
||||
label: "DG.Sheet.class.item",
|
||||
themes: null,
|
||||
@@ -164,32 +163,25 @@ Hooks.on("preCreateItem", (item) => {
|
||||
});
|
||||
|
||||
// Hook into the render call for the Actors Directory to add an extra button
|
||||
Hooks.on("renderActorDirectory", (app, html, data) => {
|
||||
if (!game.user.isGM) {
|
||||
return;
|
||||
}
|
||||
Hooks.on("renderActorDirectory", (app, element) => {
|
||||
if (!game.user.isGM) return;
|
||||
|
||||
if (html.querySelector("#statParserButton")) {
|
||||
return;
|
||||
}
|
||||
const footer = element?.querySelector?.(".directory-footer");
|
||||
if (!footer || footer.querySelector("#statParserButton")) return;
|
||||
|
||||
const button = document.createElement("button");
|
||||
button.id = "statParserButton";
|
||||
button.type = "button";
|
||||
|
||||
const icon = document.createElement("i");
|
||||
|
||||
icon.classList.add("fas", "fa-file-import");
|
||||
|
||||
button.appendChild(icon);
|
||||
button.append("Delta Green Stat Block Parser");
|
||||
|
||||
html.querySelector(".directory-footer").appendChild(button);
|
||||
|
||||
if (button) {
|
||||
button.addEventListener("click", function (event) {
|
||||
ParseDeltaGreenStatBlock();
|
||||
});
|
||||
}
|
||||
footer.appendChild(button);
|
||||
button.addEventListener("click", () => {
|
||||
ParseDeltaGreenStatBlock();
|
||||
});
|
||||
});
|
||||
|
||||
// Note - this event is fired on ALL connected clients...
|
||||
|
||||
+1
-196
@@ -1,196 +1 @@
|
||||
import {
|
||||
DGPercentileRoll,
|
||||
DGLethalityRoll,
|
||||
DGDamageRoll,
|
||||
DGSanityDamageRoll,
|
||||
} from "../roll/roll.js";
|
||||
|
||||
/**
|
||||
* Extend the basic ItemSheet with some very simple modifications
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export default class DeltaGreenItemSheet extends foundry.appv1.sheets
|
||||
.ItemSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["deltagreen", "sheet", "item"],
|
||||
width: 520,
|
||||
height: 600,
|
||||
tabs: [
|
||||
{
|
||||
navSelector: ".sheet-tabs",
|
||||
contentSelector: ".sheet-body",
|
||||
initial: "attributes",
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
/** @override */
|
||||
get template() {
|
||||
const path = "systems/deltagreen/templates/item";
|
||||
|
||||
// unique item sheet by type, like `weapon-sheet.html`.
|
||||
return `${path}/item-${this.item.type}-sheet.html`;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
async getData() {
|
||||
const data = super.getData();
|
||||
|
||||
data.enrichedDescription =
|
||||
await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
this.object.system.description,
|
||||
{ async: true },
|
||||
);
|
||||
|
||||
if (data.item.type === "tome" || data.item.type === "ritual") {
|
||||
data.enrichedHandlerNotes =
|
||||
await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
this.object.system.handlerNotes,
|
||||
{ async: true },
|
||||
);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
setPosition(options = {}) {
|
||||
const position = super.setPosition(options);
|
||||
const sheetBody = this.element.find(".sheet-body");
|
||||
const bodyHeight = position.height - 192;
|
||||
sheetBody.css("height", bodyHeight);
|
||||
return position;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
// eslint-disable-next-line no-useless-return
|
||||
if (!this.options.editable) return;
|
||||
|
||||
// Rollable abilities - bind to everything with the 'Rollable' class
|
||||
html.find(".rollable").click(this._onRoll.bind(this));
|
||||
html.find(".rollable").contextmenu(this._onRoll.bind(this)); // this is for right-click, which triggers the roll modifier dialogue for most rolls
|
||||
|
||||
// toggle whether information is shown to a player for a tome or not
|
||||
html.find(".tome-show-hide-info").click((event) => {
|
||||
event.preventDefault();
|
||||
|
||||
this.item.system.revealed = !this.item.system.revealed;
|
||||
|
||||
this.item.update({ "system.revealed": this.item.system.revealed });
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle clickable rolls.
|
||||
*
|
||||
* @param {Event} event The originating click event
|
||||
* @async
|
||||
* @private
|
||||
*/
|
||||
async _onRoll(event) {
|
||||
event.preventDefault();
|
||||
const element = event.currentTarget;
|
||||
const { dataset } = element;
|
||||
|
||||
if (event && event.which === 2) {
|
||||
// probably don't want rolls to trigger from a middle mouse click so just kill it here
|
||||
return;
|
||||
}
|
||||
|
||||
// const item = this.actor.items.get(dataset.iid);
|
||||
const rollOptions = {
|
||||
rollType: dataset.rolltype,
|
||||
key: dataset.key,
|
||||
// actor: this,
|
||||
specialTrainingName: dataset?.name || null, // Only applies to Special Training Rolls
|
||||
item: this.item,
|
||||
};
|
||||
|
||||
// Create a default 1d100 roll just in case.
|
||||
let roll = new Roll("1d100", {});
|
||||
switch (dataset.rolltype) {
|
||||
case "stat":
|
||||
case "skill":
|
||||
case "sanity":
|
||||
case "special-training":
|
||||
case "weapon":
|
||||
roll = new DGPercentileRoll("1D100", {}, rollOptions);
|
||||
break;
|
||||
case "lethality":
|
||||
roll = new DGLethalityRoll("1D100", {}, rollOptions);
|
||||
break;
|
||||
case "damage": {
|
||||
let diceFormula = this.item.system.damage;
|
||||
const { skill } = this.item.system;
|
||||
if (
|
||||
(this.actor.type === "agent" || this.actor.type === "npc") &&
|
||||
(skill === "unarmed_combat" || skill === "melee_weapons")
|
||||
) {
|
||||
diceFormula +=
|
||||
this.actor.system.statistics.str.meleeDamageBonusFormula;
|
||||
}
|
||||
roll = new DGDamageRoll(diceFormula, {}, rollOptions);
|
||||
break;
|
||||
}
|
||||
case "sanity-damage": {
|
||||
// Applies only to rituals, as far as Jalen can tell. Tomes have "study damage", but it just uses `sanity`.
|
||||
const isLearntDamage = element.hasAttribute("data-san-on-learn");
|
||||
|
||||
const { successLoss, failedLoss } = isLearntDamage
|
||||
? this.item.system.learnedSanity
|
||||
: this.item.system.sanity;
|
||||
const combinedFormula = `{${successLoss}, ${failedLoss}}`;
|
||||
|
||||
roll = new DGSanityDamageRoll(combinedFormula, {}, rollOptions);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
this.processRoll(event, roll, rollOptions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a dialog for the roll and then send to chat.
|
||||
* Broke this logic out from `_onRoll()` so that other files can call it,
|
||||
* namely the macro logic.
|
||||
*
|
||||
* TODO: Move this logic to the roll.js.
|
||||
*
|
||||
* @param {Event} event The originating click event
|
||||
* @param {Event} roll The roll to show a dialog for and then send to chat.
|
||||
* @async
|
||||
*/
|
||||
async processRoll(event, roll) {
|
||||
// Open dialog if user requests it (no dialog for Sanity Damage rolls)
|
||||
if (
|
||||
(event.shiftKey || event.which === 3) &&
|
||||
!(roll instanceof DGSanityDamageRoll)
|
||||
) {
|
||||
const dialogData = await roll.showDialog();
|
||||
if (!dialogData) return;
|
||||
if (dialogData.newFormula) {
|
||||
roll = new DGDamageRoll(dialogData.newFormula, {}, roll.options);
|
||||
}
|
||||
roll.modifier += dialogData.targetModifier;
|
||||
roll.options.rollMode = dialogData.rollMode;
|
||||
}
|
||||
// Evaluate the roll.
|
||||
await roll.evaluate();
|
||||
// Send the roll to chat.
|
||||
roll.toChat();
|
||||
}
|
||||
}
|
||||
export { default } from "../sheets/base-item-sheet.js";
|
||||
|
||||
@@ -83,9 +83,16 @@ export default function registerHandlebarsHelpers() {
|
||||
},
|
||||
);
|
||||
|
||||
/** Roll visibility modes for dialog selects (v14+ CONFIG.ChatMessage.modes keys). */
|
||||
const ROLL_MESSAGE_MODE_KEYS = ["public", "gm", "blind", "self"];
|
||||
|
||||
Handlebars.registerHelper("getAvailableRollModes", () => {
|
||||
try {
|
||||
return CONFIG.Dice.rollModes;
|
||||
return Object.fromEntries(
|
||||
ROLL_MESSAGE_MODE_KEYS.filter((key) => key in CONFIG.ChatMessage.modes).map(
|
||||
(key) => [key, CONFIG.ChatMessage.modes[key]],
|
||||
),
|
||||
);
|
||||
} catch (error) {
|
||||
return console.log(error);
|
||||
}
|
||||
@@ -93,7 +100,7 @@ export default function registerHandlebarsHelpers() {
|
||||
|
||||
Handlebars.registerHelper("getDefaultRollMode", () => {
|
||||
try {
|
||||
return game.settings.get("core", "rollMode");
|
||||
return game.settings.get("core", "messageMode");
|
||||
} catch (error) {
|
||||
return console.log(error);
|
||||
}
|
||||
|
||||
+120
-15
@@ -32,25 +32,30 @@ export class DGRoll extends Roll {
|
||||
/**
|
||||
* Simple function that actually creates the message and sends it to chat.
|
||||
* We override this to have a little more control over certain aspects of the message,
|
||||
* right now, its `speaker` and `rollMode`.
|
||||
* right now, its `speaker` and `messageMode`.
|
||||
*
|
||||
* @override
|
||||
* The following `@param` descriptions comes from the Foundry VTT code.
|
||||
* @param {object} messageData The data object to use when creating the message
|
||||
* @param {options} [options] Additional options which modify the created message.
|
||||
* @param {string} [options.rollMode] The template roll mode to use for the message from CONFIG.Dice.rollModes
|
||||
* @param {string} [options.messageMode] A key of CONFIG.ChatMessage.modes
|
||||
* @param {boolean} [options.create=true] Whether to automatically create the chat message, or only return the
|
||||
* prepared chatData object.
|
||||
* @returns {Promise<ChatMessage|object>} A promise which resolves to the created ChatMessage document if create is
|
||||
* true, or the Object of prepared chatData otherwise.
|
||||
*/
|
||||
async toMessage(messageData = {}, { rollMode, create = true } = {}) {
|
||||
async toMessage(messageData = {}, { messageMode, create = true } = {}) {
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
messageData.speaker = ChatMessage.getSpeaker({ actor: this.actor });
|
||||
return super.toMessage(messageData, {
|
||||
rollMode: this.options.rollMode || rollMode,
|
||||
create,
|
||||
});
|
||||
const mode =
|
||||
messageMode ??
|
||||
this.options.messageMode ??
|
||||
this.options.rollMode;
|
||||
const opts = { create };
|
||||
if (mode) {
|
||||
opts.messageMode = foundry.dice.Roll._mapLegacyRollMode(mode);
|
||||
}
|
||||
return super.toMessage(messageData, opts);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,12 +170,12 @@ export class DGPercentileRoll extends DGRoll {
|
||||
const sign = mod > 0 ? "Positive" : "Negative";
|
||||
return {
|
||||
action: `roll${Math.abs(mod)}${sign}`,
|
||||
label: String(mod),
|
||||
label: mod > 0 ? `+${mod}` : String(mod),
|
||||
callback: (event, button, dialog) => {
|
||||
try {
|
||||
const rollMode =
|
||||
const messageMode =
|
||||
dialog.element.querySelector("[name='rollMode']")?.value;
|
||||
resolve({ targetModifier: mod, rollMode });
|
||||
resolve({ targetModifier: mod, messageMode });
|
||||
} catch (ex) {
|
||||
reject(console.log(ex));
|
||||
}
|
||||
@@ -197,7 +202,7 @@ export class DGPercentileRoll extends DGRoll {
|
||||
"[name='targetModifier']",
|
||||
)?.value; // this is text as a heads up
|
||||
|
||||
const rollMode =
|
||||
const messageMode =
|
||||
dialog.element.querySelector("[name='rollMode']")?.value;
|
||||
|
||||
const plusMinus = dialog.element.querySelector(
|
||||
@@ -222,7 +227,7 @@ export class DGPercentileRoll extends DGRoll {
|
||||
});
|
||||
}
|
||||
}
|
||||
resolve({ targetModifier, rollMode });
|
||||
resolve({ targetModifier, messageMode });
|
||||
} catch (ex) {
|
||||
reject(console.log(ex));
|
||||
}
|
||||
@@ -253,7 +258,7 @@ export class DGPercentileRoll extends DGRoll {
|
||||
(this.type === "sanity" || this.key === "ritual") &&
|
||||
!game.user.isGM
|
||||
) {
|
||||
this.options.rollMode = "blindroll";
|
||||
this.options.messageMode = "blind";
|
||||
}
|
||||
|
||||
const diceSoNice =
|
||||
@@ -743,7 +748,7 @@ export class DGDamageRoll extends DGRoll {
|
||||
const modifiedBaseRoll = dialog.element.querySelector(
|
||||
"[name='originalFormula']",
|
||||
)?.value; // this is text as a heads up
|
||||
const rollMode = dialog.element.querySelector(
|
||||
const messageMode = dialog.element.querySelector(
|
||||
"[name='targetRollMode']",
|
||||
)?.value;
|
||||
|
||||
@@ -758,7 +763,7 @@ export class DGDamageRoll extends DGRoll {
|
||||
newFormula += modifiedBaseRoll + innerModifier.trim();
|
||||
}
|
||||
|
||||
resolve({ newFormula, rollMode });
|
||||
resolve({ newFormula, messageMode });
|
||||
} catch (ex) {
|
||||
reject(console.log(ex));
|
||||
}
|
||||
@@ -845,3 +850,103 @@ export class DGSanityDamageRoll extends DGRoll {
|
||||
return [lowResult?.result, highResult?.result];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a Delta Green roll from a click target's dataset.
|
||||
*
|
||||
* @param {DOMStringMap} dataset
|
||||
* @param {object} params
|
||||
* @param {Actor|null} [params.actor]
|
||||
* @param {Item|null} [params.item]
|
||||
* @param {HTMLElement} [params.element]
|
||||
* @param {"actor"|"item"} [params.sanityDamageSource]
|
||||
* @returns {Roll}
|
||||
*/
|
||||
export function createDGRollFromDataset(
|
||||
dataset,
|
||||
{ actor = null, item = null, element = null, sanityDamageSource = "actor" } = {},
|
||||
) {
|
||||
const rollOptions = {
|
||||
rollType: dataset.rolltype,
|
||||
key: dataset.key,
|
||||
actor,
|
||||
specialTrainingName: dataset?.name || null,
|
||||
item,
|
||||
};
|
||||
|
||||
let roll = new Roll("1d100", {});
|
||||
switch (dataset.rolltype) {
|
||||
case "stat":
|
||||
case "skill":
|
||||
case "sanity":
|
||||
case "special-training":
|
||||
case "weapon":
|
||||
roll = new DGPercentileRoll("1D100", {}, rollOptions);
|
||||
break;
|
||||
case "lethality":
|
||||
roll = new DGLethalityRoll("1D100", {}, rollOptions);
|
||||
break;
|
||||
case "damage": {
|
||||
let diceFormula = item.system.damage;
|
||||
const { skill } = item.system;
|
||||
if (
|
||||
actor &&
|
||||
(actor.type === "agent" || actor.type === "npc") &&
|
||||
(skill === "unarmed_combat" || skill === "melee_weapons")
|
||||
) {
|
||||
diceFormula += actor.system.statistics.str.meleeDamageBonusFormula;
|
||||
}
|
||||
roll = new DGDamageRoll(diceFormula, {}, rollOptions);
|
||||
break;
|
||||
}
|
||||
case "sanity-damage": {
|
||||
let successLoss;
|
||||
let failedLoss;
|
||||
if (sanityDamageSource === "item" && item) {
|
||||
const isLearntDamage = element?.hasAttribute("data-san-on-learn");
|
||||
const sanityData = isLearntDamage
|
||||
? item.system.learnedSanity
|
||||
: item.system.sanity;
|
||||
({ successLoss, failedLoss } = sanityData);
|
||||
} else if (actor) {
|
||||
({ successLoss, failedLoss } = actor.system.sanity);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
const combinedFormula = `{${successLoss}, ${failedLoss}}`;
|
||||
roll = new DGSanityDamageRoll(combinedFormula, {}, rollOptions);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return roll;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show an optional modifier dialog, evaluate, and send a roll to chat.
|
||||
*
|
||||
* @param {Event|object} event
|
||||
* @param {Roll} roll
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
export async function processDGRoll(event, roll) {
|
||||
const shiftKey = event?.shiftKey ?? false;
|
||||
const which = event?.which ?? 0;
|
||||
|
||||
if (shiftKey || which === 3) {
|
||||
if (!(roll instanceof DGSanityDamageRoll)) {
|
||||
const dialogData = await roll.showDialog();
|
||||
if (!dialogData) return;
|
||||
if (dialogData.newFormula) {
|
||||
roll = new DGDamageRoll(dialogData.newFormula, {}, roll.options);
|
||||
}
|
||||
roll.modifier += dialogData.targetModifier;
|
||||
if (dialogData.messageMode) {
|
||||
roll.options.messageMode = dialogData.messageMode;
|
||||
}
|
||||
}
|
||||
}
|
||||
await roll.evaluate();
|
||||
roll.toChat();
|
||||
}
|
||||
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
/* eslint-disable max-classes-per-file */
|
||||
import DG, { BASE_TEMPLATE_PATH } from "./config.js";
|
||||
import DGActorSheet from "./sheets/base-actor-sheet.js";
|
||||
import DGItemSheet from "./sheets/base-item-sheet.js";
|
||||
|
||||
const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
|
||||
|
||||
@@ -329,7 +330,7 @@ export default function registerSystemSettings() {
|
||||
default: "hover",
|
||||
onChange: () => {
|
||||
foundry.applications.instances.forEach((app) => {
|
||||
if (app instanceof DGActorSheet) {
|
||||
if (app instanceof DGActorSheet || app instanceof DGItemSheet) {
|
||||
app.render();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -308,7 +308,7 @@ export default class DGAgentSheet extends DGActorSheet {
|
||||
}),
|
||||
content,
|
||||
flavor,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
messageMode: game.settings.get("core", "messageMode"),
|
||||
};
|
||||
|
||||
return ChatMessage.create(chatData);
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import DG from "../config.js";
|
||||
import {
|
||||
DGDamageRoll,
|
||||
DGLethalityRoll,
|
||||
DGPercentileRoll,
|
||||
DGSanityDamageRoll,
|
||||
createDGRollFromDataset,
|
||||
processDGRoll,
|
||||
} from "../roll/roll.js";
|
||||
import DGSheetMixin from "./base-sheet.js";
|
||||
|
||||
@@ -1221,52 +1220,14 @@ export default class DGActorSheet extends DGSheetMixin(ActorSheetV2) {
|
||||
static async _onRoll(event, target) {
|
||||
if (target.classList.contains("not-rollable") || event.which === 2) return;
|
||||
|
||||
const { dataset } = target;
|
||||
const item = this.actor.items.get(dataset.iid);
|
||||
const rollOptions = {
|
||||
rollType: dataset.rolltype,
|
||||
key: dataset.key,
|
||||
const item = this.actor.items.get(target.dataset.iid);
|
||||
const roll = createDGRollFromDataset(target.dataset, {
|
||||
actor: this.actor,
|
||||
specialTrainingName: dataset?.name || null, // Only applies to Special Training Rolls
|
||||
item,
|
||||
};
|
||||
|
||||
// Create a default 1d100 roll just in case.
|
||||
let roll = new Roll("1d100", {});
|
||||
switch (dataset.rolltype) {
|
||||
case "stat":
|
||||
case "skill":
|
||||
case "sanity":
|
||||
case "special-training":
|
||||
case "weapon":
|
||||
roll = new DGPercentileRoll("1D100", {}, rollOptions);
|
||||
break;
|
||||
case "lethality":
|
||||
roll = new DGLethalityRoll("1D100", {}, rollOptions);
|
||||
break;
|
||||
case "damage": {
|
||||
let diceFormula = item.system.damage;
|
||||
const { skill } = item.system;
|
||||
if (
|
||||
(this.actor.type === "agent" || this.actor.type === "npc") &&
|
||||
(skill === "unarmed_combat" || skill === "melee_weapons")
|
||||
) {
|
||||
diceFormula +=
|
||||
this.actor.system.statistics.str.meleeDamageBonusFormula;
|
||||
}
|
||||
roll = new DGDamageRoll(diceFormula, {}, rollOptions);
|
||||
break;
|
||||
}
|
||||
case "sanity-damage": {
|
||||
const { successLoss, failedLoss } = this.actor.system.sanity;
|
||||
const combinedFormula = `{${successLoss}, ${failedLoss}}`;
|
||||
roll = new DGSanityDamageRoll(combinedFormula, {}, rollOptions);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
this.processRoll(event, roll, rollOptions);
|
||||
element: target,
|
||||
sanityDamageSource: "actor",
|
||||
});
|
||||
await this.processRoll(event, roll);
|
||||
}
|
||||
|
||||
// This only exists to give a chance to activate the modifier dialogue if desired
|
||||
@@ -1288,7 +1249,9 @@ export default class DGActorSheet extends DGSheetMixin(ActorSheetV2) {
|
||||
const dialogData = await roll.showDialog();
|
||||
if (!dialogData) return;
|
||||
roll.modifier += dialogData.targetModifier;
|
||||
roll.options.rollMode = dialogData.rollMode;
|
||||
if (dialogData.messageMode) {
|
||||
roll.options.messageMode = dialogData.messageMode;
|
||||
}
|
||||
}
|
||||
// Evaluate the roll.
|
||||
await roll.evaluate();
|
||||
@@ -1308,23 +1271,7 @@ export default class DGActorSheet extends DGSheetMixin(ActorSheetV2) {
|
||||
* @async
|
||||
*/
|
||||
async processRoll(event, roll) {
|
||||
// Open dialog if user requests it (no dialog for Sanity Damage rolls)
|
||||
if (
|
||||
(event.shiftKey || event.which === 3) &&
|
||||
!(roll instanceof DGSanityDamageRoll)
|
||||
) {
|
||||
const dialogData = await roll.showDialog();
|
||||
if (!dialogData) return;
|
||||
if (dialogData.newFormula) {
|
||||
roll = new DGDamageRoll(dialogData.newFormula, {}, roll.options);
|
||||
}
|
||||
roll.modifier += dialogData.targetModifier;
|
||||
roll.options.rollMode = dialogData.rollMode;
|
||||
}
|
||||
// Evaluate the roll.
|
||||
await roll.evaluate();
|
||||
// Send the roll to chat.
|
||||
roll.toChat();
|
||||
return processDGRoll(event, roll);
|
||||
}
|
||||
|
||||
/** Handler for generic toggle events */
|
||||
|
||||
@@ -0,0 +1,245 @@
|
||||
import { BASE_TEMPLATE_PATH } from "../config.js";
|
||||
import DGSheetMixin from "./base-sheet.js";
|
||||
import { createDGRollFromDataset, processDGRoll } from "../roll/roll.js";
|
||||
|
||||
const { ItemSheetV2 } = foundry.applications.sheets;
|
||||
const ITEM_PARTS_PATH = `${BASE_TEMPLATE_PATH}/item/parts`;
|
||||
|
||||
/** Tab and part layout per item type. */
|
||||
const ITEM_SHEET_LAYOUT = /** @type {const} */ ({
|
||||
weapon: {
|
||||
parts: {
|
||||
header: { template: `${ITEM_PARTS_PATH}/weapon-header.html` },
|
||||
description: {
|
||||
template: `${ITEM_PARTS_PATH}/weapon-description.html`,
|
||||
scrollable: [""],
|
||||
},
|
||||
},
|
||||
},
|
||||
gear: {
|
||||
parts: {
|
||||
header: { template: `${ITEM_PARTS_PATH}/gear-header.html` },
|
||||
description: {
|
||||
template: `${ITEM_PARTS_PATH}/gear-description.html`,
|
||||
scrollable: [""],
|
||||
},
|
||||
},
|
||||
},
|
||||
armor: {
|
||||
parts: {
|
||||
header: { template: `${ITEM_PARTS_PATH}/armor-header.html` },
|
||||
description: {
|
||||
template: `${ITEM_PARTS_PATH}/armor-description.html`,
|
||||
scrollable: [""],
|
||||
},
|
||||
},
|
||||
},
|
||||
bond: {
|
||||
parts: {
|
||||
header: { template: `${ITEM_PARTS_PATH}/bond-header.html` },
|
||||
description: {
|
||||
template: `${ITEM_PARTS_PATH}/bond-description.html`,
|
||||
scrollable: [""],
|
||||
},
|
||||
},
|
||||
},
|
||||
motivation: {
|
||||
tabs: {
|
||||
initial: "attributes",
|
||||
tabs: [
|
||||
{
|
||||
id: "attributes",
|
||||
label: "DG.ItemWindow.Motivations.Attributes",
|
||||
},
|
||||
{
|
||||
id: "description",
|
||||
label: "DG.ItemWindow.Motivations.Description",
|
||||
},
|
||||
],
|
||||
},
|
||||
parts: {
|
||||
tabs: { template: "templates/generic/tab-navigation.hbs" },
|
||||
attributes: { template: `${ITEM_PARTS_PATH}/motivation-attributes.html` },
|
||||
description: {
|
||||
template: `${ITEM_PARTS_PATH}/motivation-description.html`,
|
||||
scrollable: [""],
|
||||
},
|
||||
},
|
||||
},
|
||||
tome: {
|
||||
tabs: {
|
||||
initial: "description",
|
||||
tabs: [
|
||||
{ id: "description", label: "DG.ItemWindow.Tome.Description" },
|
||||
{
|
||||
id: "handler",
|
||||
label: "DG.ItemWindow.Tome.HandlerOnlyTabHeader",
|
||||
gmOnly: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
parts: {
|
||||
header: { template: `${ITEM_PARTS_PATH}/tome-header.html` },
|
||||
tabs: { template: "templates/generic/tab-navigation.hbs" },
|
||||
description: {
|
||||
template: `${ITEM_PARTS_PATH}/tome-description.html`,
|
||||
scrollable: [""],
|
||||
},
|
||||
handler: {
|
||||
template: `${ITEM_PARTS_PATH}/tome-handler.html`,
|
||||
scrollable: [""],
|
||||
},
|
||||
},
|
||||
},
|
||||
ritual: {
|
||||
tabs: {
|
||||
initial: "description",
|
||||
tabs: [
|
||||
{ id: "description", label: "DG.ItemWindow.Tome.Description" },
|
||||
{
|
||||
id: "handler",
|
||||
label: "DG.ItemWindow.Tome.HandlerOnlyTabHeader",
|
||||
gmOnly: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
parts: {
|
||||
header: { template: `${ITEM_PARTS_PATH}/ritual-header.html` },
|
||||
tabs: { template: "templates/generic/tab-navigation.hbs" },
|
||||
description: {
|
||||
template: `${ITEM_PARTS_PATH}/ritual-description.html`,
|
||||
scrollable: [""],
|
||||
},
|
||||
handler: {
|
||||
template: `${ITEM_PARTS_PATH}/ritual-handler.html`,
|
||||
scrollable: [""],
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* @extends {DGSheetMixin(ItemSheetV2)}
|
||||
*/
|
||||
export default class DGItemSheet extends DGSheetMixin(ItemSheetV2) {
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = /** @type {const} */ ({
|
||||
classes: ["item"],
|
||||
position: { width: 520, height: 600 },
|
||||
actions: {
|
||||
roll: DGItemSheet._onRoll,
|
||||
toggleTomeRevealed: DGItemSheet._toggleTomeRevealed,
|
||||
},
|
||||
});
|
||||
|
||||
/** @inheritdoc */
|
||||
get item() {
|
||||
return this.document;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
_configureRenderParts(options) {
|
||||
const layout = ITEM_SHEET_LAYOUT[this.item.type];
|
||||
if (!layout) return super._configureRenderParts(options);
|
||||
|
||||
const parts = foundry.utils.deepClone(layout.parts);
|
||||
if (layout.tabs) {
|
||||
const tabIds = layout.tabs.tabs
|
||||
.filter((tab) => !tab.gmOnly || game.user.isGM)
|
||||
.map((tab) => tab.id);
|
||||
for (const partId of Object.keys(parts)) {
|
||||
if (partId === "tabs" || partId === "header") continue;
|
||||
if (!tabIds.includes(partId)) delete parts[partId];
|
||||
}
|
||||
}
|
||||
Object.values(parts).forEach((p) => {
|
||||
p.templates ??= [];
|
||||
});
|
||||
return parts;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
_getTabsConfig(group) {
|
||||
const layout = ITEM_SHEET_LAYOUT[this.item.type];
|
||||
if (!layout?.tabs) return super._getTabsConfig(group);
|
||||
|
||||
const tabs = layout.tabs.tabs.filter((tab) => !tab.gmOnly || game.user.isGM);
|
||||
return { ...layout.tabs, tabs };
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
async _prepareContext(options) {
|
||||
const context = await super._prepareContext(options);
|
||||
|
||||
context.owner = this.document.isOwner;
|
||||
context.enrichedDescription =
|
||||
await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
this.item.system.description,
|
||||
{ async: true },
|
||||
);
|
||||
|
||||
if (this.item.type === "tome" || this.item.type === "ritual") {
|
||||
context.enrichedHandlerNotes =
|
||||
await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
this.item.system.handlerNotes,
|
||||
{ async: true },
|
||||
);
|
||||
}
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
async _onFirstRender(context, options) {
|
||||
await super._onFirstRender(context, options);
|
||||
this._setRightClickListeners();
|
||||
}
|
||||
|
||||
/**
|
||||
* Right-click on roll controls opens the modifier dialog.
|
||||
* @returns {void}
|
||||
*/
|
||||
_setRightClickListeners() {
|
||||
this.element.addEventListener("contextmenu", (event) => {
|
||||
const target = event.target.closest("[data-action='roll']");
|
||||
if (!target) return;
|
||||
event.preventDefault();
|
||||
DGItemSheet._onRoll.call(this, event, target);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {PointerEvent} event
|
||||
* @param {HTMLElement} target
|
||||
*/
|
||||
static async _onRoll(event, target) {
|
||||
if (event.which === 2) return;
|
||||
|
||||
const roll = createDGRollFromDataset(target.dataset, {
|
||||
actor: this.actor,
|
||||
item: this.item,
|
||||
element: target,
|
||||
sanityDamageSource: "item",
|
||||
});
|
||||
await processDGRoll(event, roll);
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle whether tome/ritual details are visible to players.
|
||||
* @param {PointerEvent} event
|
||||
*/
|
||||
static _toggleTomeRevealed(event) {
|
||||
event.preventDefault();
|
||||
const revealed = !this.item.system.revealed;
|
||||
this.item.update({ "system.revealed": revealed });
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Event|object} event
|
||||
* @param {Roll} roll
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async processRoll(event, roll) {
|
||||
return processDGRoll(event, roll);
|
||||
}
|
||||
}
|
||||
@@ -47,14 +47,15 @@
|
||||
height="24" />
|
||||
<span>
|
||||
<span style="display: inline;" class="item-name">{{item.name}}</span>
|
||||
<span class="rollable"
|
||||
data-action="roll"
|
||||
data-iid="{{item._id}}"
|
||||
data-rolltype="weapon"
|
||||
data-key="{{item.system.skill}}"
|
||||
title="{{localize 'DG.Tooltip.SkillLabel'}} ({{localizeWeaponSkill item.system.skill}})">
|
||||
<i class="fas fa-dice"></i>
|
||||
</span>
|
||||
<button type="button"
|
||||
class="rollable inline-roll"
|
||||
data-action="roll"
|
||||
data-iid="{{item._id}}"
|
||||
data-rolltype="weapon"
|
||||
data-key="{{item.system.skill}}"
|
||||
title="{{localize 'DG.Tooltip.SkillLabel'}} ({{localizeWeaponSkill item.system.skill}})">
|
||||
<i class="fas fa-dice" inert></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -80,10 +81,12 @@
|
||||
{{/if}}
|
||||
|
||||
{{#unless item.system.isLethal}}
|
||||
<span class="rollable"
|
||||
data-action="roll"
|
||||
data-rolltype="damage"
|
||||
data-iid="{{item._id}}">
|
||||
<button type="button"
|
||||
class="rollable inline-roll"
|
||||
data-action="roll"
|
||||
data-rolltype="damage"
|
||||
data-iid="{{item._id}}"
|
||||
title="{{localize 'DG.Gear.DamageOrLethality'}}">
|
||||
{{toUpperCase item.system.damage}}
|
||||
{{#if_eq item.system.skill 'unarmed_combat' }}
|
||||
{{actor.system.statistics.str.meleeDamageBonusFormula}}
|
||||
@@ -91,19 +94,20 @@
|
||||
{{#if_eq item.system.skill 'melee_weapons' }}
|
||||
{{actor.system.statistics.str.meleeDamageBonusFormula}}
|
||||
{{/if_eq}}
|
||||
<i class="fas fa-dice"></i>
|
||||
</span>
|
||||
<i class="fas fa-dice" inert></i>
|
||||
</button>
|
||||
{{/unless}}
|
||||
|
||||
{{#if item.system.isLethal }}
|
||||
<span class="rollable"
|
||||
data-action="roll"
|
||||
data-rolltype="lethality"
|
||||
data-iid="{{item._id}}"
|
||||
title="{{localize 'DG.ItemWindow.Weapons.LethalityTooltip'}}">
|
||||
<button type="button"
|
||||
class="rollable inline-roll"
|
||||
data-action="roll"
|
||||
data-rolltype="lethality"
|
||||
data-iid="{{item._id}}"
|
||||
title="{{localize 'DG.ItemWindow.Weapons.LethalityTooltip'}}">
|
||||
{{item.system.lethality}}%
|
||||
<i class="fas fa-dice"></i>
|
||||
</span>
|
||||
<i class="fas fa-dice" inert></i>
|
||||
</button>
|
||||
{{/if}}
|
||||
|
||||
</span>
|
||||
@@ -370,13 +374,14 @@
|
||||
<div class="horizontal-bar-section-divider">
|
||||
<span>
|
||||
{{localize 'DG.Gear.Rituals'}}
|
||||
<a class="rollable"
|
||||
data-action="roll"
|
||||
data-key="ritual"
|
||||
data-rolltype="skill"
|
||||
title="Ritual activation">
|
||||
<i class="fa-solid fa-dice"></i>
|
||||
</a>
|
||||
<button type="button"
|
||||
class="rollable inline-roll"
|
||||
data-action="roll"
|
||||
data-key="ritual"
|
||||
data-rolltype="skill"
|
||||
title="Ritual activation">
|
||||
<i class="fa-solid fa-dice" inert></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
src="{{actor.img}}"
|
||||
alt="{{actor.name}}"
|
||||
data-action="editImage"
|
||||
data-edit="img"
|
||||
height="150"
|
||||
width="100" />
|
||||
<div>
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
<form class="{{cssClass}} {{getCharacterSheetStyle}}" autocomplete="off">
|
||||
<header class="">
|
||||
<div class="armor-sheet-grid-2col">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-edit="img" title="{{item.name}}" />
|
||||
|
||||
<div class="armor-sheet-horizontal-grid-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Name'}}:</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Armor.NamePlaceholder'}}"/></h1>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Armor.Expense'}}:</span>
|
||||
<select name="system.expense" >
|
||||
<option {{#if_eq item.system.expense 'NA'}}selected{{/if_eq}} value="NA">{{localize 'DG.Gear.Expense.NA'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Incidental'}}selected{{/if_eq}} value="Incidental">{{localize 'DG.Gear.Expense.Incidental'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Standard'}}selected{{/if_eq}} value="Standard">{{localize 'DG.Gear.Expense.Standard'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Unusual'}}selected{{/if_eq}} value="Unusual">{{localize 'DG.Gear.Expense.Unusual'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Major'}}selected{{/if_eq}} value="Major">{{localize 'DG.Gear.Expense.Major'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Extreme'}}selected{{/if_eq}} value="Extreme">{{localize 'DG.Gear.Expense.Extreme'}}</option>
|
||||
</select>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Armor.Equipped'}}:</span>
|
||||
<input class="labeled-resource-checkbox" type="checkbox" name="system.equipped" {{checked item.system.equipped}} data-dtype="Boolean" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="armor-sheet-secondary-grid-2col">
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Armor.ArmorRating'}}:</span>
|
||||
<input class="item-sheet-short-input" type="text" name="system.protection" value="{{item.system.protection}}" data-dtype="Number"/>
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="description">{{localize 'DG.ItemWindow.Armor.Description'}}</a>
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{!-- Description Tab --}}
|
||||
<div class="tab top-div-border" data-group="primary" data-tab="description">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
@@ -1,35 +0,0 @@
|
||||
<form class="{{cssClass}} {{getCharacterSheetStyle}}" autocomplete="off">
|
||||
<header class="">
|
||||
<div class="bond-sheet-grid-2col">
|
||||
<img class="item-img" src="{{item.img}}" data-edit="img" title="{{item.name}}" />
|
||||
<div class="bond-sheet-horizontal-grid-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Name'}}:</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.Bonds.Name'}}" />
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Score'}}:</span>
|
||||
<input type="text" name="system.score" value="{{item.system.score}}" data-dtype="Number"
|
||||
title="{{localize 'DG.ItemWindow.Bonds.ScoreTooltip'}}" />
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Relationship'}}:</span>
|
||||
<input type="text" name="system.relationship" value="{{item.system.relationship}}" data-dtype="String" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="description">{{localize 'DG.ItemWindow.Bonds.Description'}}</a>
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
{{!-- Description Tab --}}
|
||||
<div class="tab top-div-border" data-group="primary" data-tab="description">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
@@ -1,47 +0,0 @@
|
||||
<form class="{{cssClass}} {{getCharacterSheetStyle}}" autocomplete="off">
|
||||
<header class="">
|
||||
<div class="gear-sheet-grid-2col">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-edit="img" title="{{item.name}}"/>
|
||||
|
||||
<div class="gear-sheet-horizontal-grid-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Name'}}:</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Gear.NamePlaceholder'}}"/>
|
||||
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Gear.Expense'}}:</span>
|
||||
<select name="system.expense" >
|
||||
<option {{#if_eq item.system.expense 'NA'}}selected{{/if_eq}} value="NA">{{localize 'DG.Gear.Expense.NA'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Incidental'}}selected{{/if_eq}} value="Incidental">{{localize 'DG.Gear.Expense.Incidental'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Standard'}}selected{{/if_eq}} value="Standard">{{localize 'DG.Gear.Expense.Standard'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Unusual'}}selected{{/if_eq}} value="Unusual">{{localize 'DG.Gear.Expense.Unusual'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Major'}}selected{{/if_eq}} value="Major">{{localize 'DG.Gear.Expense.Major'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Extreme'}}selected{{/if_eq}} value="Extreme">{{localize 'DG.Gear.Expense.Extreme'}}</option>
|
||||
</select>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Gear.Equipped'}}:</span>
|
||||
<input class="labeled-resource-checkbox" type="checkbox" name="system.equipped" {{checked item.system.equipped}} data-dtype="Boolean" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<!-- <a class="item" data-tab="attributes">{{localize 'DG.ItemWindow.Gear.Attributes'}}</a> -->
|
||||
<a class="item" data-tab="description">{{localize 'DG.ItemWindow.Gear.Description'}}</a>
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{!-- Description Tab --}}
|
||||
<div class="tab top-div-border" data-group="primary" data-tab="description">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
@@ -1,66 +0,0 @@
|
||||
<form class="{{cssClass}} {{getCharacterSheetStyle}}" autocomplete="off">
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item item-toggle" data-tab="attributes">{{localize 'DG.ItemWindow.Motivations.Attributes'}}</a>
|
||||
<a class="item" data-tab="description">{{localize 'DG.ItemWindow.Motivations.Description'}}</a>
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body motivation-sheet-horizontal-grid-2col --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
<div class="tab attributes top-div-border"
|
||||
data-group="primary"
|
||||
data-tab="attributes">
|
||||
|
||||
<div class="motivation-sheet-horizontal-grid-2col">
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Motivations.IsDisorder'}}:</span>
|
||||
<input type="checkbox"
|
||||
name="system.crossedOut"
|
||||
{{checked item.system.crossedOut}}
|
||||
data-dtype="Boolean"
|
||||
title="{{localize 'DG.ItemWindow.Motivations.IsDisorderTooltip'}}" />
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Motivations.Motivation'}}:</span>
|
||||
<input type="text"
|
||||
name="name"
|
||||
value="{{item.name}}"
|
||||
placeholder=""
|
||||
data-dtype="String"
|
||||
title="{{localize 'DG.ItemWindow.Motivations.MotivationNameTooltip'}}"
|
||||
{{!-- If a motivation has been crossed off after a breaking point, do a strikeout on it and disable it. --}}
|
||||
{{#if item.system.crossedOut }}
|
||||
style="text-decoration: line-through"
|
||||
disabled
|
||||
{{/if }} />
|
||||
{{!-- Only Show the Disorders Section if Motivation Lost Checked --}}
|
||||
{{#if item.system.crossedOut }}
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Motivations.Disorder'}}:</span>
|
||||
<input type="text"
|
||||
name="system.disorder"
|
||||
value="{{item.system.disorder}}"
|
||||
data-dtype="String"
|
||||
title="{{localize 'DG.ItemWindow.Motivations.DisorderNameTooltip'}}" />
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Motivations.DisorderHasBeenCured'}}:</span>
|
||||
<input class="labeled-resource-checkbox"
|
||||
type="checkbox"
|
||||
name="system.disorderCured"
|
||||
{{checked item.system.disorderCured}}
|
||||
data-dtype="Boolean"
|
||||
title="{{localize 'DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip'}}" />
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab attributes top-div-border"
|
||||
data-group="primary"
|
||||
data-tab="description">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
</form>
|
||||
@@ -1,113 +0,0 @@
|
||||
<form class="{{cssClass}} {{getCharacterSheetStyle}}" autocomplete="off">
|
||||
<header class="">
|
||||
<div class="gear-sheet-grid-2col">
|
||||
<img class="item-img" src="{{item.img}}" data-edit="img" title="{{item.name}}"/>
|
||||
|
||||
<div class="tome-sheet-horizontal-grid-2col">
|
||||
{{#if item.system.revealed}}
|
||||
<span class="resource-label">
|
||||
{{#if (playerHasGamemasterPrivileges)}}<a class="tome-show-hide-info"><i class="far fa-eye"></i></a>{{/if}}
|
||||
{{localize 'DG.Tome.Name'}}:
|
||||
</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Tome.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.StudyTime'}}:</span>
|
||||
<input name="system.studyTime" type="text" value="{{item.system.studyTime}}" placeholder="{{localize 'DG.ItemWindow.Tome.StudyTime'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationTime'}}:</span>
|
||||
<input name="system.activationTime" type="text" value="{{item.system.activationTime}}" placeholder="{{localize 'DG.ItemWindow.Ritual.ActivationTime'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationCosts'}}:</span>
|
||||
<input name="system.activationCosts" type="text" value="{{item.system.activationCosts}}" placeholder="{{localize 'DG.ItemWindow.Ritual.ActivationCosts'}}"/>
|
||||
{{else}}
|
||||
{{#if (playerHasGamemasterPrivileges)}}
|
||||
<span class="resource-label">
|
||||
{{#if (playerHasGamemasterPrivileges)}}<a class="tome-show-hide-info"><i class="far fa-eye-slash"></i></a>{{/if}}
|
||||
{{localize 'DG.Tome.Name'}}:
|
||||
</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Tome.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.StudyTime'}}:</span>
|
||||
<input name="system.studyTime" type="text" value="{{item.system.studyTime}}" placeholder="{{localize 'DG.ItemWindow.Tome.StudyTime'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationTime'}}:</span>
|
||||
<input name="system.activationTime" type="text" value="{{item.system.activationTime}}" placeholder="{{localize 'DG.ItemWindow.Ritual.ActivationTime'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationCosts'}}:</span>
|
||||
<input name="system.activationCosts" type="text" value="{{item.system.activationCosts}}" placeholder="{{localize 'DG.ItemWindow.Ritual.ActivationCosts'}}"/>
|
||||
{{else}}
|
||||
<span class="resource-label">
|
||||
{{#if (playerHasGamemasterPrivileges)}}<a class="tome-show-hide-info"><i class="far fa-eye-slash"></i></a>{{/if}}
|
||||
{{localize 'DG.Tome.Name'}}:
|
||||
</span>
|
||||
<span>???</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.StudyTime'}}:</span>
|
||||
<span>???</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationTime'}}:</span>
|
||||
<span>???</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationCosts'}}:</span>
|
||||
<span>???</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="description">{{localize 'DG.ItemWindow.Tome.Description'}}</a>
|
||||
{{#if (playerHasGamemasterPrivileges)}}
|
||||
<a class="item" data-tab="handler">{{localize 'DG.ItemWindow.Tome.HandlerOnlyTabHeader'}}</a>
|
||||
{{/if}}
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{!-- Description Tab --}}
|
||||
<div class="tab top-div-border" data-group="primary" data-tab="description">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Handler Notes Tab --}}
|
||||
{{#if (playerHasGamemasterPrivileges)}}
|
||||
<div class="tab" data-group="primary" data-tab="handler">
|
||||
<div class="tome-sheet-handler-info-horizontal-grid-2col">
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.UnnaturalIncrease'}}:</span>
|
||||
<input class="item-sheet-short-input" name="system.unnaturalSkillIncrease" type="text" value="{{item.system.unnaturalSkillIncrease}}" type="integer" data-dtype="Number"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.LearnedSanityDamage'}}:</span>
|
||||
<span>
|
||||
<input class="item-sheet-short-input" name="system.learnedSanity.successLoss" type="text" value="{{item.system.learnedSanity.successLoss}}" type="text" />
|
||||
/
|
||||
<input class="item-sheet-short-input" name="system.learnedSanity.failedLoss" type="text" value="{{item.system.learnedSanity.failedLoss}}" type="text" />
|
||||
<i class="fas fa-dice rollable" data-rolltype="sanity-damage" data-san-on-learn></i>
|
||||
</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationSanityDamage'}}:</span>
|
||||
<span>
|
||||
<input class="item-sheet-short-input" name="system.sanity.successLoss" type="text" value="{{item.system.sanity.successLoss}}" type="text" />
|
||||
/
|
||||
<input class="item-sheet-short-input" name="system.sanity.failedLoss" type="text" value="{{item.system.sanity.failedLoss}}" type="text" />
|
||||
<i class="fas fa-dice rollable" data-rolltype="sanity-damage"></i>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.HandlerNotes'}}:</span>
|
||||
|
||||
<div class="tab top-div-border">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedHandlerNotes target="system.handlerNotes" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</section>
|
||||
</form>
|
||||
@@ -1,99 +0,0 @@
|
||||
<form class="{{cssClass}} {{getCharacterSheetStyle}}" autocomplete="off">
|
||||
<header class="">
|
||||
<div class="gear-sheet-grid-2col">
|
||||
<img class="item-img" src="{{item.img}}" data-edit="img" title="{{item.name}}"/>
|
||||
|
||||
<div class="tome-sheet-horizontal-grid-2col">
|
||||
{{#if item.system.revealed}}
|
||||
<span class="resource-label">
|
||||
{{#if (playerHasGamemasterPrivileges)}}<a class="tome-show-hide-info"><i class="far fa-eye"></i></a>{{/if}}
|
||||
{{localize 'DG.Tome.Name'}}:
|
||||
</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Tome.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.Language'}}:</span>
|
||||
<input name="system.language" type="text" value="{{item.system.language}}" placeholder="{{localize 'DG.ItemWindow.Tome.LanguagePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.StudyTime'}}:</span>
|
||||
<input name="system.studyTime" type="text" value="{{item.system.studyTime}}" placeholder="{{localize 'DG.ItemWindow.Tome.StudyTime'}}"/>
|
||||
{{else}}
|
||||
{{#if (playerHasGamemasterPrivileges)}}
|
||||
<span class="resource-label">
|
||||
{{#if (playerHasGamemasterPrivileges)}}<a class="tome-show-hide-info"><i class="far fa-eye-slash"></i></a>{{/if}}
|
||||
{{localize 'DG.Tome.Name'}}:
|
||||
</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Tome.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.Language'}}:</span>
|
||||
<input name="system.language" type="text" value="{{item.system.language}}" placeholder="{{localize 'DG.ItemWindow.Tome.LanguagePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.StudyTime'}}:</span>
|
||||
<input name="system.studyTime" type="text" value="{{item.system.studyTime}}" placeholder="{{localize 'DG.ItemWindow.Tome.StudyTime'}}"/>
|
||||
{{else}}
|
||||
<span class="resource-label">
|
||||
{{#if (playerHasGamemasterPrivileges)}}<a class="tome-show-hide-info"><i class="far fa-eye-slash"></i></a>{{/if}}
|
||||
{{localize 'DG.Tome.Name'}}:
|
||||
</span>
|
||||
<span>???</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.Language'}}:</span>
|
||||
<span>???</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.StudyTime'}}:</span>
|
||||
<span>???</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="description">{{localize 'DG.ItemWindow.Tome.Description'}}</a>
|
||||
{{#if (playerHasGamemasterPrivileges)}}
|
||||
<a class="item" data-tab="handler">{{localize 'DG.ItemWindow.Tome.HandlerOnlyTabHeader'}}</a>
|
||||
{{/if}}
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{!-- Description Tab --}}
|
||||
<div class="tab top-div-border" data-group="primary" data-tab="description">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Handler Notes Tab --}}
|
||||
{{#if (playerHasGamemasterPrivileges)}}
|
||||
<div class="tab" data-group="primary" data-tab="handler">
|
||||
<div class="tome-sheet-handler-info-horizontal-grid-2col">
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.UnnaturalIncrease'}}:</span>
|
||||
<input class="item-sheet-short-input" name="system.unnaturalSkillIncrease" type="text" value="{{item.system.unnaturalSkillIncrease}}" type="integer" data-dtype="Number"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.OccultIncrease'}}:</span>
|
||||
<input class="item-sheet-short-input" name="system.occultSkillIncrease" type="text" value="{{item.system.occultSkillIncrease}}" type="integer" data-dtype="Number"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.StudySanityDamage'}}:</span>
|
||||
<span>
|
||||
<input class="item-sheet-short-input" name="system.sanity.successLoss" type="text" value="{{item.system.sanity.successLoss}}" type="text" />
|
||||
/
|
||||
<input class="item-sheet-short-input" name="system.sanity.failedLoss" type="text" value="{{item.system.sanity.failedLoss}}" type="text" />
|
||||
<i class="fas fa-dice rollable" data-rolltype="sanity-damage"></i>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.HandlerNotes'}}:</span>
|
||||
|
||||
<div class="tab top-div-border">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedHandlerNotes target="system.handlerNotes" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</section>
|
||||
</form>
|
||||
@@ -1,127 +0,0 @@
|
||||
<form class="{{cssClass}} {{getCharacterSheetStyle}}" autocomplete="off">
|
||||
<header class="">
|
||||
<div class="weapon-sheet-grid-2col">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-edit="img" title="{{item.name}}"/>
|
||||
|
||||
<div class="weapon-sheet-horizontal-grid-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Name'}}:</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Weapons.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Expense'}}:</span>
|
||||
<select name="system.expense" >
|
||||
<option {{#if_eq item.system.expense 'NA'}}selected{{/if_eq}} value="NA">{{localize 'DG.Gear.Expense.NA'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Incidental'}}selected{{/if_eq}} value="Incidental">{{localize 'DG.Gear.Expense.Incidental'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Standard'}}selected{{/if_eq}} value="Standard">{{localize 'DG.Gear.Expense.Standard'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Unusual'}}selected{{/if_eq}} value="Unusual">{{localize 'DG.Gear.Expense.Unusual'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Major'}}selected{{/if_eq}} value="Major">{{localize 'DG.Gear.Expense.Major'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Extreme'}}selected{{/if_eq}} value="Extreme">{{localize 'DG.Gear.Expense.Extreme'}}</option>
|
||||
</select>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Gear.Equipped'}}:</span>
|
||||
<input class="labeled-resource-checkbox" type="checkbox" name="system.equipped" {{checked item.system.equipped}} data-dtype="Boolean" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="weapon-sheet-outer-grid-2col">
|
||||
|
||||
<div class="weapon-sheet-horizontal-grid-left-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Skill'}}:</span>
|
||||
<select name="system.skill" >
|
||||
<option {{#if_eq item.system.skill 'firearms'}}selected{{/if_eq}} value="firearms">{{localize 'DG.Skills.firearms'}}</option>
|
||||
<option {{#if_eq item.system.skill 'melee_weapons'}}selected{{/if_eq}} value="melee_weapons">{{localize 'DG.Skills.melee_weapons'}}</option>
|
||||
<option {{#if_eq item.system.skill 'unarmed_combat'}}selected{{/if_eq}} value="unarmed_combat">{{localize 'DG.Skills.unarmed_combat'}}</option>
|
||||
<option {{#if_eq item.system.skill 'heavy_weapons'}}selected{{/if_eq}} value="heavy_weapons">{{localize 'DG.Skills.heavy_weapons'}}</option>
|
||||
<option {{#if_eq item.system.skill 'athletics'}}selected{{/if_eq}} value="athletics">{{localize 'DG.Skills.athletics'}}</option>
|
||||
<option {{#if_eq item.system.skill 'demolitions'}}selected{{/if_eq}} value="demolitions">{{localize 'DG.Skills.demolitions'}}</option>
|
||||
<option {{#if_eq item.system.skill 'artillery'}}selected{{/if_eq}} value="artillery">{{localize 'DG.Skills.artillery'}}</option>
|
||||
<option {{#if_eq item.system.skill 'str'}}selected{{/if_eq}} value="str">{{localize 'DG.Attributes.str'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'con'}}selected{{/if_eq}} value="con">{{localize 'DG.Attributes.con'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'dex'}}selected{{/if_eq}} value="dex">{{localize 'DG.Attributes.dex'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'int'}}selected{{/if_eq}} value="int">{{localize 'DG.Attributes.int'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'pow'}}selected{{/if_eq}} value="pow">{{localize 'DG.Attributes.pow'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'cha'}}selected{{/if_eq}} value="cha">{{localize 'DG.Attributes.cha'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'custom'}}selected{{/if_eq}} value="custom">{{localize 'DG.ItemWindow.Custom'}}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="weapon-sheet-horizontal-grid-right-2col">
|
||||
{{#if_eq item.system.skill 'custom'}}
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.CustomSkillTarget'}}:</span>
|
||||
<input type="text" name="system.customSkillTarget" value="{{../item.system.customSkillTarget}}" data-dtype="Number"/>
|
||||
{{/if_eq}}
|
||||
</div>
|
||||
|
||||
<!-- left 'column' (label and value)-->
|
||||
<div class="weapon-sheet-horizontal-grid-left-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.ArmorPiercing'}}:</span>
|
||||
<input type="text" name="system.armorPiercing" value="{{item.system.armorPiercing}}" data-dtype="Number"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.SkillModifier'}}:</span>
|
||||
<input type="text" name="system.skillModifier" value="{{item.system.skillModifier}}" data-dtype="Number"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.IsLethality'}}:</span>
|
||||
<input class="labeled-resource-checkbox" type="checkbox" name="system.isLethal" {{checked item.system.isLethal}} data-dtype="Boolean"
|
||||
title="{{localize 'DG.ItemWindow.Weapons.IsLethalityTooltip'}}"
|
||||
/>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- right 'column' (label and value)-->
|
||||
<div class="weapon-sheet-horizontal-grid-right-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Range'}}:</span>
|
||||
<input type="text" name="system.range" value="{{item.system.range}}" data-dtype="String"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.KillRadius'}}:</span>
|
||||
<input type="text" name="system.killRadius" value="{{item.system.killRadius}}" data-dtype="String"/>
|
||||
|
||||
{{!-- If a weapon is 'Lethal', need to show the d100% Lethality input, otherwise only show the regular Damage formula (e.g. 1D6, 1D4+2, etc...) --}}
|
||||
|
||||
{{#unless item.system.isLethal}}
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Damage'}}:</span>
|
||||
<input type="text" name="system.damage" value="{{item.system.damage}}" data-dtype="String"/>
|
||||
|
||||
{{/unless}}
|
||||
|
||||
{{#if item.system.isLethal}}
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Lethality'}} %:</span>
|
||||
<input class="" type="text" name="system.lethality" value="{{item.system.lethality}}" data-dtype="Number"
|
||||
title="{{localize 'DG.ItemWindow.Weapons.LethalityTooltip'}}"
|
||||
/>
|
||||
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="weapon-sheet-secondary-grid-2col">
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Ammo'}}:</span>
|
||||
<input type="text" name="system.ammo" value="{{item.system.ammo}}" data-dtype="String"/>
|
||||
</div>
|
||||
<br>
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="description">{{localize 'DG.ItemWindow.Weapons.Description'}}</a>
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body" style="max-height: 25%;">
|
||||
|
||||
{{!-- Description Tab --}}
|
||||
<div class="tab" data-group="primary" data-tab="description">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
@@ -0,0 +1,7 @@
|
||||
<section class="sheet-body">
|
||||
<div class="tab top-div-border">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,32 @@
|
||||
<header class="">
|
||||
<div class="armor-sheet-grid-2col">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-action="editImage" title="{{item.name}}" />
|
||||
|
||||
<div class="armor-sheet-horizontal-grid-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Name'}}:</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Armor.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Armor.Expense'}}:</span>
|
||||
<select name="system.expense" >
|
||||
<option {{#if_eq item.system.expense 'NA'}}selected{{/if_eq}} value="NA">{{localize 'DG.Gear.Expense.NA'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Incidental'}}selected{{/if_eq}} value="Incidental">{{localize 'DG.Gear.Expense.Incidental'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Standard'}}selected{{/if_eq}} value="Standard">{{localize 'DG.Gear.Expense.Standard'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Unusual'}}selected{{/if_eq}} value="Unusual">{{localize 'DG.Gear.Expense.Unusual'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Major'}}selected{{/if_eq}} value="Major">{{localize 'DG.Gear.Expense.Major'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Extreme'}}selected{{/if_eq}} value="Extreme">{{localize 'DG.Gear.Expense.Extreme'}}</option>
|
||||
</select>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Armor.Equipped'}}:</span>
|
||||
<input class="labeled-resource-checkbox" type="checkbox" name="system.equipped" {{checked item.system.equipped}} data-dtype="Boolean" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="armor-sheet-secondary-grid-2col">
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Armor.ArmorRating'}}:</span>
|
||||
<input class="item-sheet-short-input" type="text" name="system.protection" value="{{item.system.protection}}" data-dtype="Number"/>
|
||||
</div>
|
||||
|
||||
</header>
|
||||
@@ -0,0 +1,7 @@
|
||||
<section class="sheet-body">
|
||||
<div class="tab top-div-border">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,18 @@
|
||||
<header class="">
|
||||
<div class="bond-sheet-grid-2col">
|
||||
<img class="item-img" src="{{item.img}}" data-action="editImage" title="{{item.name}}" />
|
||||
<div class="bond-sheet-horizontal-grid-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Name'}}:</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.Bonds.Name'}}" />
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Score'}}:</span>
|
||||
<input type="text" name="system.score" value="{{item.system.score}}" data-dtype="Number"
|
||||
title="{{localize 'DG.ItemWindow.Bonds.ScoreTooltip'}}" />
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Relationship'}}:</span>
|
||||
<input type="text" name="system.relationship" value="{{item.system.relationship}}" data-dtype="String" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
@@ -0,0 +1,7 @@
|
||||
<section class="sheet-body">
|
||||
<div class="tab top-div-border">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,27 @@
|
||||
<header class="">
|
||||
<div class="gear-sheet-grid-2col">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-action="editImage" title="{{item.name}}"/>
|
||||
|
||||
<div class="gear-sheet-horizontal-grid-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Name'}}:</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Gear.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Gear.Expense'}}:</span>
|
||||
<select name="system.expense" >
|
||||
<option {{#if_eq item.system.expense 'NA'}}selected{{/if_eq}} value="NA">{{localize 'DG.Gear.Expense.NA'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Incidental'}}selected{{/if_eq}} value="Incidental">{{localize 'DG.Gear.Expense.Incidental'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Standard'}}selected{{/if_eq}} value="Standard">{{localize 'DG.Gear.Expense.Standard'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Unusual'}}selected{{/if_eq}} value="Unusual">{{localize 'DG.Gear.Expense.Unusual'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Major'}}selected{{/if_eq}} value="Major">{{localize 'DG.Gear.Expense.Major'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Extreme'}}selected{{/if_eq}} value="Extreme">{{localize 'DG.Gear.Expense.Extreme'}}</option>
|
||||
</select>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Gear.Equipped'}}:</span>
|
||||
<input class="labeled-resource-checkbox" type="checkbox" name="system.equipped" {{checked item.system.equipped}} data-dtype="Boolean" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</header>
|
||||
@@ -0,0 +1,42 @@
|
||||
<section class="sheet-body">
|
||||
<div class="tab attributes {{tabs.attributes.cssClass}} top-div-border"
|
||||
data-group="primary"
|
||||
data-tab="attributes">
|
||||
|
||||
<div class="motivation-sheet-horizontal-grid-2col">
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Motivations.IsDisorder'}}:</span>
|
||||
<input type="checkbox"
|
||||
name="system.crossedOut"
|
||||
{{checked item.system.crossedOut}}
|
||||
data-dtype="Boolean"
|
||||
title="{{localize 'DG.ItemWindow.Motivations.IsDisorderTooltip'}}" />
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Motivations.Motivation'}}:</span>
|
||||
<input type="text"
|
||||
name="name"
|
||||
value="{{item.name}}"
|
||||
placeholder=""
|
||||
data-dtype="String"
|
||||
title="{{localize 'DG.ItemWindow.Motivations.MotivationNameTooltip'}}"
|
||||
{{#if item.system.crossedOut }}
|
||||
style="text-decoration: line-through"
|
||||
disabled
|
||||
{{/if }} />
|
||||
{{#if item.system.crossedOut }}
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Motivations.Disorder'}}:</span>
|
||||
<input type="text"
|
||||
name="system.disorder"
|
||||
value="{{item.system.disorder}}"
|
||||
data-dtype="String"
|
||||
title="{{localize 'DG.ItemWindow.Motivations.DisorderNameTooltip'}}" />
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Motivations.DisorderHasBeenCured'}}:</span>
|
||||
<input class="labeled-resource-checkbox"
|
||||
type="checkbox"
|
||||
name="system.disorderCured"
|
||||
{{checked item.system.disorderCured}}
|
||||
data-dtype="Boolean"
|
||||
title="{{localize 'DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip'}}" />
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,8 @@
|
||||
<div class="tab description {{tabs.description.cssClass}} top-div-border"
|
||||
data-group="primary"
|
||||
data-tab="description">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,9 @@
|
||||
<section class="sheet-body">
|
||||
<div class="tab description {{tabs.description.cssClass}} top-div-border"
|
||||
data-group="primary"
|
||||
data-tab="description">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,32 @@
|
||||
<div class="tab handler {{tabs.handler.cssClass}}"
|
||||
data-group="primary"
|
||||
data-tab="handler">
|
||||
<div class="tome-sheet-handler-info-horizontal-grid-2col">
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.UnnaturalIncrease'}}:</span>
|
||||
<input class="item-sheet-short-input" name="system.unnaturalSkillIncrease" type="text" value="{{item.system.unnaturalSkillIncrease}}" data-dtype="Number"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.LearnedSanityDamage'}}:</span>
|
||||
<span>
|
||||
<input class="item-sheet-short-input" name="system.learnedSanity.successLoss" type="text" value="{{item.system.learnedSanity.successLoss}}" />
|
||||
/
|
||||
<input class="item-sheet-short-input" name="system.learnedSanity.failedLoss" type="text" value="{{item.system.learnedSanity.failedLoss}}" />
|
||||
<i class="fas fa-dice rollable" data-action="roll" data-rolltype="sanity-damage" data-san-on-learn></i>
|
||||
</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationSanityDamage'}}:</span>
|
||||
<span>
|
||||
<input class="item-sheet-short-input" name="system.sanity.successLoss" type="text" value="{{item.system.sanity.successLoss}}" />
|
||||
/
|
||||
<input class="item-sheet-short-input" name="system.sanity.failedLoss" type="text" value="{{item.system.sanity.failedLoss}}" />
|
||||
<i class="fas fa-dice rollable" data-action="roll" data-rolltype="sanity-damage"></i>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.HandlerNotes'}}:</span>
|
||||
|
||||
<div class="tab top-div-border">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedHandlerNotes target="system.handlerNotes" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,55 @@
|
||||
<header class="">
|
||||
<div class="gear-sheet-grid-2col">
|
||||
<img class="item-img" src="{{item.img}}" data-action="editImage" title="{{item.name}}"/>
|
||||
|
||||
<div class="tome-sheet-horizontal-grid-2col">
|
||||
{{#if item.system.revealed}}
|
||||
<span class="resource-label">
|
||||
{{#if (playerHasGamemasterPrivileges)}}<a data-action="toggleTomeRevealed"><i class="far fa-eye"></i></a>{{/if}}
|
||||
{{localize 'DG.Tome.Name'}}:
|
||||
</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Tome.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.StudyTime'}}:</span>
|
||||
<input name="system.studyTime" type="text" value="{{item.system.studyTime}}" placeholder="{{localize 'DG.ItemWindow.Tome.StudyTime'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationTime'}}:</span>
|
||||
<input name="system.activationTime" type="text" value="{{item.system.activationTime}}" placeholder="{{localize 'DG.ItemWindow.Ritual.ActivationTime'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationCosts'}}:</span>
|
||||
<input name="system.activationCosts" type="text" value="{{item.system.activationCosts}}" placeholder="{{localize 'DG.ItemWindow.Ritual.ActivationCosts'}}"/>
|
||||
{{else}}
|
||||
{{#if (playerHasGamemasterPrivileges)}}
|
||||
<span class="resource-label">
|
||||
<a data-action="toggleTomeRevealed"><i class="far fa-eye-slash"></i></a>
|
||||
{{localize 'DG.Tome.Name'}}:
|
||||
</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Tome.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.StudyTime'}}:</span>
|
||||
<input name="system.studyTime" type="text" value="{{item.system.studyTime}}" placeholder="{{localize 'DG.ItemWindow.Tome.StudyTime'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationTime'}}:</span>
|
||||
<input name="system.activationTime" type="text" value="{{item.system.activationTime}}" placeholder="{{localize 'DG.ItemWindow.Ritual.ActivationTime'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationCosts'}}:</span>
|
||||
<input name="system.activationCosts" type="text" value="{{item.system.activationCosts}}" placeholder="{{localize 'DG.ItemWindow.Ritual.ActivationCosts'}}"/>
|
||||
{{else}}
|
||||
<span class="resource-label">{{localize 'DG.Tome.Name'}}:</span>
|
||||
<span>???</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.StudyTime'}}:</span>
|
||||
<span>???</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationTime'}}:</span>
|
||||
<span>???</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Ritual.ActivationCosts'}}:</span>
|
||||
<span>???</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</header>
|
||||
@@ -0,0 +1,9 @@
|
||||
<section class="sheet-body">
|
||||
<div class="tab description {{tabs.description.cssClass}} top-div-border"
|
||||
data-group="primary"
|
||||
data-tab="description">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,27 @@
|
||||
<div class="tab handler {{tabs.handler.cssClass}}"
|
||||
data-group="primary"
|
||||
data-tab="handler">
|
||||
<div class="tome-sheet-handler-info-horizontal-grid-2col">
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.UnnaturalIncrease'}}:</span>
|
||||
<input class="item-sheet-short-input" name="system.unnaturalSkillIncrease" type="text" value="{{item.system.unnaturalSkillIncrease}}" data-dtype="Number"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.OccultIncrease'}}:</span>
|
||||
<input class="item-sheet-short-input" name="system.occultSkillIncrease" type="text" value="{{item.system.occultSkillIncrease}}" data-dtype="Number"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.StudySanityDamage'}}:</span>
|
||||
<span>
|
||||
<input class="item-sheet-short-input" name="system.sanity.successLoss" type="text" value="{{item.system.sanity.successLoss}}" />
|
||||
/
|
||||
<input class="item-sheet-short-input" name="system.sanity.failedLoss" type="text" value="{{item.system.sanity.failedLoss}}" />
|
||||
<i class="fas fa-dice rollable" data-action="roll" data-rolltype="sanity-damage"></i>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Tome.HandlerNotes'}}:</span>
|
||||
|
||||
<div class="tab top-div-border">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedHandlerNotes target="system.handlerNotes" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,46 @@
|
||||
<header class="">
|
||||
<div class="gear-sheet-grid-2col">
|
||||
<img class="item-img" src="{{item.img}}" data-action="editImage" title="{{item.name}}"/>
|
||||
|
||||
<div class="tome-sheet-horizontal-grid-2col">
|
||||
{{#if item.system.revealed}}
|
||||
<span class="resource-label">
|
||||
{{#if (playerHasGamemasterPrivileges)}}<a data-action="toggleTomeRevealed"><i class="far fa-eye"></i></a>{{/if}}
|
||||
{{localize 'DG.Tome.Name'}}:
|
||||
</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Tome.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.Language'}}:</span>
|
||||
<input name="system.language" type="text" value="{{item.system.language}}" placeholder="{{localize 'DG.ItemWindow.Tome.LanguagePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.StudyTime'}}:</span>
|
||||
<input name="system.studyTime" type="text" value="{{item.system.studyTime}}" placeholder="{{localize 'DG.ItemWindow.Tome.StudyTime'}}"/>
|
||||
{{else}}
|
||||
{{#if (playerHasGamemasterPrivileges)}}
|
||||
<span class="resource-label">
|
||||
<a data-action="toggleTomeRevealed"><i class="far fa-eye-slash"></i></a>
|
||||
{{localize 'DG.Tome.Name'}}:
|
||||
</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Tome.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.Language'}}:</span>
|
||||
<input name="system.language" type="text" value="{{item.system.language}}" placeholder="{{localize 'DG.ItemWindow.Tome.LanguagePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.StudyTime'}}:</span>
|
||||
<input name="system.studyTime" type="text" value="{{item.system.studyTime}}" placeholder="{{localize 'DG.ItemWindow.Tome.StudyTime'}}"/>
|
||||
{{else}}
|
||||
<span class="resource-label">{{localize 'DG.Tome.Name'}}:</span>
|
||||
<span>???</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.Language'}}:</span>
|
||||
<span>???</span>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Tome.StudyTime'}}:</span>
|
||||
<span>???</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</header>
|
||||
@@ -0,0 +1,7 @@
|
||||
<section class="sheet-body">
|
||||
<div class="tab top-div-border">
|
||||
<div class="editor-host">
|
||||
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,101 @@
|
||||
<header class="">
|
||||
<div class="weapon-sheet-grid-2col">
|
||||
|
||||
<img class="item-img" src="{{item.img}}" data-action="editImage" title="{{item.name}}"/>
|
||||
|
||||
<div class="weapon-sheet-horizontal-grid-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.Bonds.Name'}}:</span>
|
||||
<input name="name" type="text" value="{{item.name}}" placeholder="{{localize 'DG.ItemWindow.Weapons.NamePlaceholder'}}"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Expense'}}:</span>
|
||||
<select name="system.expense" >
|
||||
<option {{#if_eq item.system.expense 'NA'}}selected{{/if_eq}} value="NA">{{localize 'DG.Gear.Expense.NA'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Incidental'}}selected{{/if_eq}} value="Incidental">{{localize 'DG.Gear.Expense.Incidental'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Standard'}}selected{{/if_eq}} value="Standard">{{localize 'DG.Gear.Expense.Standard'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Unusual'}}selected{{/if_eq}} value="Unusual">{{localize 'DG.Gear.Expense.Unusual'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Major'}}selected{{/if_eq}} value="Major">{{localize 'DG.Gear.Expense.Major'}}</option>
|
||||
<option {{#if_eq item.system.expense 'Extreme'}}selected{{/if_eq}} value="Extreme">{{localize 'DG.Gear.Expense.Extreme'}}</option>
|
||||
</select>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Gear.Equipped'}}:</span>
|
||||
<input class="labeled-resource-checkbox" type="checkbox" name="system.equipped" {{checked item.system.equipped}} data-dtype="Boolean" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="weapon-sheet-outer-grid-2col">
|
||||
|
||||
<div class="weapon-sheet-horizontal-grid-left-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Skill'}}:</span>
|
||||
<select name="system.skill" >
|
||||
<option {{#if_eq item.system.skill 'firearms'}}selected{{/if_eq}} value="firearms">{{localize 'DG.Skills.firearms'}}</option>
|
||||
<option {{#if_eq item.system.skill 'melee_weapons'}}selected{{/if_eq}} value="melee_weapons">{{localize 'DG.Skills.melee_weapons'}}</option>
|
||||
<option {{#if_eq item.system.skill 'unarmed_combat'}}selected{{/if_eq}} value="unarmed_combat">{{localize 'DG.Skills.unarmed_combat'}}</option>
|
||||
<option {{#if_eq item.system.skill 'heavy_weapons'}}selected{{/if_eq}} value="heavy_weapons">{{localize 'DG.Skills.heavy_weapons'}}</option>
|
||||
<option {{#if_eq item.system.skill 'athletics'}}selected{{/if_eq}} value="athletics">{{localize 'DG.Skills.athletics'}}</option>
|
||||
<option {{#if_eq item.system.skill 'demolitions'}}selected{{/if_eq}} value="demolitions">{{localize 'DG.Skills.demolitions'}}</option>
|
||||
<option {{#if_eq item.system.skill 'artillery'}}selected{{/if_eq}} value="artillery">{{localize 'DG.Skills.artillery'}}</option>
|
||||
<option {{#if_eq item.system.skill 'str'}}selected{{/if_eq}} value="str">{{localize 'DG.Attributes.str'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'con'}}selected{{/if_eq}} value="con">{{localize 'DG.Attributes.con'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'dex'}}selected{{/if_eq}} value="dex">{{localize 'DG.Attributes.dex'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'int'}}selected{{/if_eq}} value="int">{{localize 'DG.Attributes.int'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'pow'}}selected{{/if_eq}} value="pow">{{localize 'DG.Attributes.pow'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'cha'}}selected{{/if_eq}} value="cha">{{localize 'DG.Attributes.cha'}}x5</option>
|
||||
<option {{#if_eq item.system.skill 'custom'}}selected{{/if_eq}} value="custom">{{localize 'DG.ItemWindow.Custom'}}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="weapon-sheet-horizontal-grid-right-2col">
|
||||
{{#if_eq item.system.skill 'custom'}}
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.CustomSkillTarget'}}:</span>
|
||||
<input type="text" name="system.customSkillTarget" value="{{item.system.customSkillTarget}}" data-dtype="Number"/>
|
||||
{{/if_eq}}
|
||||
</div>
|
||||
|
||||
<div class="weapon-sheet-horizontal-grid-left-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.ArmorPiercing'}}:</span>
|
||||
<input type="text" name="system.armorPiercing" value="{{item.system.armorPiercing}}" data-dtype="Number"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.SkillModifier'}}:</span>
|
||||
<input type="text" name="system.skillModifier" value="{{item.system.skillModifier}}" data-dtype="Number"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.IsLethality'}}:</span>
|
||||
<input class="labeled-resource-checkbox" type="checkbox" name="system.isLethal" {{checked item.system.isLethal}} data-dtype="Boolean"
|
||||
title="{{localize 'DG.ItemWindow.Weapons.IsLethalityTooltip'}}"
|
||||
/>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="weapon-sheet-horizontal-grid-right-2col">
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Range'}}:</span>
|
||||
<input type="text" name="system.range" value="{{item.system.range}}" data-dtype="String"/>
|
||||
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.KillRadius'}}:</span>
|
||||
<input type="text" name="system.killRadius" value="{{item.system.killRadius}}" data-dtype="String"/>
|
||||
|
||||
{{#unless item.system.isLethal}}
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Damage'}}:</span>
|
||||
<input type="text" name="system.damage" value="{{item.system.damage}}" data-dtype="String"/>
|
||||
{{/unless}}
|
||||
|
||||
{{#if item.system.isLethal}}
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Lethality'}} %:</span>
|
||||
<input class="" type="text" name="system.lethality" value="{{item.system.lethality}}" data-dtype="Number"
|
||||
title="{{localize 'DG.ItemWindow.Weapons.LethalityTooltip'}}"
|
||||
/>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="weapon-sheet-secondary-grid-2col">
|
||||
<span class="resource-label">{{localize 'DG.ItemWindow.Weapons.Ammo'}}:</span>
|
||||
<input type="text" name="system.ammo" value="{{item.system.ammo}}" data-dtype="String"/>
|
||||
</div>
|
||||
<br>
|
||||
</header>
|
||||
Reference in New Issue
Block a user