ENhance and fix

This commit is contained in:
2026-05-10 23:12:21 +02:00
parent e200b5f7b0
commit 7542890232
43 changed files with 638 additions and 390 deletions
Binary file not shown.
Binary file not shown.
+12 -13
View File
@@ -80,7 +80,6 @@
"army_fortification": "Fortification",
"army_cohort": "Régiment",
"arcane": "Arcane",
"etat": "État",
"mystere": "Mystère",
"technique_ecole": "Technique École",
"mot_invocation": "Mot d'Invocation"
@@ -222,7 +221,9 @@
"inventory": "Inventaire",
"equipment": "Équipement",
"rank": "Rang",
"name": "Nom"
"name": "Nom",
"attributes": "Attributs",
"infos": "Infos"
},
"dice": {
"chat": {
@@ -480,7 +481,8 @@
"school_curriculum_journal": "Déposer un journal de Cursus dans la feuille pour le lier",
"warning": {
"total_less_then_spent": "L'expérience totale est inférieure à l'expérience utilisée."
}
},
"advancement": "Progression"
},
"character_types": {
"character": "Personnage Joueur",
@@ -886,6 +888,10 @@
"assez_difficile": "Assez Difficile",
"difficile": "Difficile"
},
"technique_ecole": {
"title": "Techniques d'École",
"label": "Technique d'École"
},
"arcane": {
"title": "Arcanes",
"label": "Arcane",
@@ -893,15 +899,8 @@
"application": "Compétences",
"bonus": "Bonus",
"progression": "Progression",
"xp_cost": "Coût XP"
},
"etat": {
"title": "États",
"label": "État",
"application": "Application",
"mod": "Modificateur",
"effect": "Effet",
"elimination": "Condition d'élimination"
"xp_cost": "Coût XP",
"xp_used": "XP dépensé"
},
"mystere": {
"title": "Mystères",
@@ -996,4 +995,4 @@
"failure": "Échec"
}
}
}
}
+36 -7
View File
@@ -92,11 +92,8 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
gaugeColor: gauge > 0 ? "#d4a855" : gauge < 0 ? "#5588aa" : "#888888",
};
// Chiaroscuro: État items active on the character
sheetData.data.etatItems = sheetData.items.filter((i) => i.type === "etat");
// Chiaroscuro: Invocations split by type (from splitTechniquesList)
const invocations = sheetData.data.splitTechniquesList["mot_invocation"] ?? [];
// Chiaroscuro: Invocations split by type (direct from items)
const invocations = sheetData.items.filter((i) => i.type === "mot_invocation");
sheetData.data.splitInvocationsList = {
general: invocations.filter((t) => !t.system.invocation_type || t.system.invocation_type === "general"),
neutre: invocations.filter((t) => t.system.invocation_type === "neutre"),
@@ -109,6 +106,9 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
// Chiaroscuro: Mystere items
sheetData.data.mystereItems = sheetData.items.filter((i) => i.type === "mystere");
// Chiaroscuro: Technique École items
sheetData.data.techniqueEcoleItems = sheetData.items.filter((i) => i.type === "technique_ecole");
// Chiaroscuro: Identity tabs enriched HTML
sheetData.data.enrichedHtml.identity_text1 = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
this.actor.system.identity_text1 ?? "", { async: true }
@@ -191,6 +191,34 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
.activate("advancement_rank_" + (this.actor.system.identity.school_rank || 0));
}
/**
* Override to handle mot_invocation creation with invocation_type from the column.
* @param {Event} event
* @override
*/
async _addSubItem(event) {
const type = $(event.currentTarget).data("item-type");
if (type === "mot_invocation") {
event.preventDefault();
event.stopPropagation();
const invocationType = $(event.currentTarget).data("invocation-type") || "general";
const created = await this.actor.createEmbeddedDocuments("Item", [
{
name: game.i18n.localize(`TYPES.Item.mot_invocation`),
type: "mot_invocation",
img: `${CONFIG.l5r5e.paths.assets}icons/items/mot_invocation.svg`,
system: { invocation_type: invocationType },
},
]);
if (created?.length > 0) {
const item = this.actor.items.get(created[0].id);
item?.sheet.render(true);
}
return;
}
return super._addSubItem(event);
}
/**
* Override base dice picker to open Chiaroscuro d6 dialog.
* @param {Event} event
@@ -198,9 +226,10 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
_openDicePickerForSkill(event) {
event.preventDefault();
const el = $(event.currentTarget);
const skillId = el.data("skill");
const weapon = this._getWeaponInfos(el.data("weapon-id") || null);
const skillId = weapon?.skill || el.data("skill");
const ringId = el.data("ring") || this.actor.system?.default_ring || "void";
new game.l5r5e.ChiaroscuroDiceDialog({ actor: this.actor, ringId, skillId }).render(true);
new game.l5r5e.ChiaroscuroDiceDialog({ actor: this.actor, ringId, skillId, itemUuid: weapon?.uuid }).render(true);
}
/**
+3 -2
View File
@@ -124,8 +124,9 @@ export class NpcSheetL5r5e extends BaseCharacterSheetL5r5e {
_openDicePickerForSkill(event) {
event.preventDefault();
const el = $(event.currentTarget);
const skillId = el.data("skill");
const weapon = this._getWeaponInfos(el.data("weapon-id") || null);
const skillId = weapon?.skill || el.data("skill");
const ringId = el.data("ring") || this.actor.system?.default_ring || "void";
new game.l5r5e.ChiaroscuroDiceDialog({ actor: this.actor, ringId, skillId }).render(true);
new game.l5r5e.ChiaroscuroDiceDialog({ actor: this.actor, ringId, skillId, itemUuid: weapon?.uuid }).render(true);
}
}
+7 -25
View File
@@ -57,7 +57,7 @@ export class ChiaroscuroDiceDialog extends FormApplication {
}
/**
* @param options actor, actorId, ringId, skillId
* @param options actor, actorId, ringId, skillId, itemUuid
*/
constructor(options = {}) {
super({}, options);
@@ -74,6 +74,9 @@ export class ChiaroscuroDiceDialog extends FormApplication {
}
});
// Resolve item from uuid (weapon, technique, etc.)
this._item = options.itemUuid ? fromUuidSync(options.itemUuid) : null;
// Default ring: options > actor default_ring > void
const ringId = options.ringId ?? this._actor?.system?.default_ring ?? "void";
this.ringId = ringId;
@@ -272,32 +275,8 @@ export class ChiaroscuroDiceDialog extends FormApplication {
[`${aspectsPath}.solar`]: 0,
[`${aspectsPath}.lunar`]: 0,
});
// Remove all desequilibre conditions
const toRemove = this._actor.items
.filter((i) => i.type === "etat" && ["desequilibre_solaire", "desequilibre_lunaire"].includes(i.system?.condition_type))
.map((i) => i.id);
if (toRemove.length) {
await this._actor.deleteEmbeddedDocuments("Item", toRemove);
}
} else {
await this._actor.update({ [`${aspectsPath}.gauge`]: newGauge });
if (Math.abs(newGauge) >= 5) {
// Apply opposing desequilibre
const condType = this.object.aspectType === "solar" ? "desequilibre_lunaire" : "desequilibre_solaire";
const existing = this._actor.items.find(
(i) => i.type === "etat" && i.system?.condition_type === condType
);
if (!existing) {
await this._actor.createEmbeddedDocuments("Item", [
{
type: "etat",
name: game.i18n.localize(`chiaroscuro.aspects.${condType}`),
system: { condition_type: condType },
},
]);
}
}
}
}
@@ -321,6 +300,9 @@ export class ChiaroscuroDiceDialog extends FormApplication {
useAssistance: this.object.useAssistance,
modifier: this.object.modifier,
quickInfo: this._actor?.system?.quick_info ?? "",
l5r5e: {
item: this._item ?? null,
},
...rollData,
}
);
+1 -1
View File
@@ -21,7 +21,7 @@ export class ItemL5r5e extends Item {
* @memberof ClientDocumentMixin#
*/
get uuid() {
const parents = this.system.parent_id;
const parents = this.system?.parent_id;
if (!parents?.item_id) {
return super.uuid;
}
+3 -3
View File
@@ -10,8 +10,8 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
static types = [
{ id: "ring", label: "l5r5e.rings.label" },
{ id: "skill", label: "l5r5e.skills.label" },
{ id: "arcane", label: "l5r5e.chiaroscuro.arcane.label" },
{ id: "mot_invocation", label: "l5r5e.chiaroscuro.technique.mot_invocation" },
{ id: "arcane", label: "chiaroscuro.arcane.label" },
{ id: "mot_invocation", label: "chiaroscuro.technique.mot_invocation" },
// others have theirs own xp count
];
@@ -30,7 +30,7 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
sheetData.data.skillsList = game.l5r5e.HelpersL5r5e.getSkillsList(true);
// Invocation sub-types (Général / Neutre / Précis)
const invTypes = game.l5r5e.HelpersL5r5e.getLocalizedRawObject("l5r5e.chiaroscuro.technique.invocation_types") ?? {};
const invTypes = game.l5r5e.HelpersL5r5e.getLocalizedRawObject("chiaroscuro.technique.invocation_types") ?? {};
sheetData.data.invocationTypesList = [{ id: "", label: "—" }].concat(
Object.entries(invTypes).map(([id, label]) => ({ id, label }))
);
-30
View File
@@ -1,30 +0,0 @@
import { BaseItemSheetL5r5e } from "./base-item-sheet.js";
/**
* Sheet for État items (Chiaroscuro).
* @extends {BaseItemSheetL5r5e}
*/
export class EtatSheetL5r5e extends BaseItemSheetL5r5e {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["l5r5e", "sheet", "etat"],
template: CONFIG.l5r5e.paths.templates + "items/etat/etat-sheet.html",
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "attributes" }],
});
}
/** @override */
async getData(options = {}) {
const sheetData = await super.getData(options);
sheetData.data.enrichedHtml = {
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(
sheetData.data.system.description ?? "",
{ async: true }
),
};
return sheetData;
}
}
+1 -1
View File
@@ -27,7 +27,7 @@ export class MotInvocationSheetL5r5e extends BaseItemSheetL5r5e {
const sheetData = await super.getData(options);
// Build invocation types list from i18n
const invTypes = game.l5r5e.HelpersL5r5e.getLocalizedRawObject("l5r5e.chiaroscuro.technique.invocation_types") ?? {};
const invTypes = game.l5r5e.HelpersL5r5e.getLocalizedRawObject("chiaroscuro.technique.invocation_types") ?? {};
sheetData.data.invocationTypesList = [{ id: "", label: "—" }].concat(
Object.entries(invTypes).map(([id, label]) => ({ id, label }))
);
-6
View File
@@ -28,7 +28,6 @@ import { WeaponSheetL5r5e } from "./items/weapon-sheet.js";
import { AdvancementSheetL5r5e } from "./items/advancement-sheet.js";
import { PeculiaritySheetL5r5e } from "./items/peculiarity-sheet.js";
import { ArcaneSheetL5r5e } from "./items/arcane-sheet.js";
import { EtatSheetL5r5e } from "./items/etat-sheet.js";
import { MystereSheetL5r5e } from "./items/mystere-sheet.js";
import { TechniqueEcoleSheetL5r5e } from "./items/technique-ecole-sheet.js";
import { MotInvocationSheetL5r5e } from "./items/mot-invocation-sheet.js";
@@ -177,11 +176,6 @@ Hooks.once("init", async () => {
label: "TYPES.Item.arcane",
makeDefault: true,
});
fdc.Items.registerSheet(L5R5E.namespace, EtatSheetL5r5e, {
types: ["etat"],
label: "TYPES.Item.etat",
makeDefault: true,
});
fdc.Items.registerSheet(L5R5E.namespace, MystereSheetL5r5e, {
types: ["mystere"],
label: "TYPES.Item.mystere",
+14 -1
View File
@@ -6,7 +6,7 @@ export class MigrationL5r5e {
* Minimum Version needed for migration stuff to trigger
* @type {string}
*/
static NEEDED_VERSION = "1.13.0";
static NEEDED_VERSION = "14.0.1";
/**
* Return true if the version need some updates
@@ -56,6 +56,19 @@ export class MigrationL5r5e {
console.error(err);
}
// ***** 14.0.1: Remove obsolete etat items *****
if (options?.force || MigrationL5r5e.needUpdate("14.0.1")) {
try {
const etatIds = actor.items.filter((i) => i.type === "etat").map((i) => i.id);
if (etatIds.length) {
console.log(`L5R5E | Migration | Removing ${etatIds.length} etat item(s) from Actor ${actor.name}`);
await actor.deleteEmbeddedDocuments("Item", etatIds);
}
} catch (err) {
console.error(`L5R5E | Migration | Failed to remove etat items from Actor ${actor.name}: ${err.message}`);
}
}
// Migrate Actor's Items
if (actor.items.size) {
console.group(`Checking within ${actor.items.size} items`);
File diff suppressed because one or more lines are too long
+11 -37
View File
@@ -31,7 +31,7 @@
.gauge-bar-wrapper {
flex: 0 0 100%;
height: 0.4rem;
height: 1rem;
background: linear-gradient(to right, $chi-lunar, rgba(128,128,128,0.3) 50%, $chi-solar);
border-radius: 0.25rem;
position: relative;
@@ -47,34 +47,6 @@
}
}
// ── État badges (character sheet header) ─────────────────────────────────
.etat-summary {
flex: 0 0 100%;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.2rem;
padding: 0.1rem 0;
font-size: 0.8rem;
.etat-summary-label {
color: $l5r5e-label;
font-style: italic;
margin-right: 0.2rem;
}
.etat-badge {
display: inline-flex;
align-items: center;
gap: 0.2rem;
padding: 0.1rem 0.35rem;
border-radius: 0.2rem;
background: rgba($chi-title, 0.18);
border: 1px solid rgba($chi-title, 0.4);
color: $chi-title;
cursor: default;
&:hover { background: rgba($chi-title, 0.32); }
}
}
// ── Identity text blocks ──────────────────────────────────────────────────
.identity-text-wrapper {
@@ -478,16 +450,16 @@ article.tab.notes {
box-shadow: inset 0 1px 0 rgba($white, 0.07), 0 1px 3px rgba($l5r5e-black, 0.4);
&.die-low {
color: $l5r5e-red;
background: rgba($l5r5e-red, 0.14);
border-color: rgba($l5r5e-red, 0.5);
box-shadow: inset 0 1px 0 rgba($white, 0.05), 0 0 6px rgba($l5r5e-red, 0.15);
color: #ff6b6b;
background: rgba($l5r5e-red, 0.25);
border-color: rgba($l5r5e-red, 0.7);
box-shadow: inset 0 1px 0 rgba($white, 0.05), 0 0 6px rgba($l5r5e-red, 0.2);
}
&.die-high {
color: $chi-solar;
background: rgba($chi-solar, 0.14);
border-color: rgba($chi-solar, 0.5);
box-shadow: inset 0 1px 0 rgba($white, 0.1), 0 0 8px rgba($chi-solar, 0.2);
color: #ffd166;
background: rgba($chi-solar, 0.25);
border-color: rgba($chi-solar, 0.7);
box-shadow: inset 0 1px 0 rgba($white, 0.1), 0 0 8px rgba($chi-solar, 0.3);
}
.die-adj-icon {
position: absolute;
@@ -599,6 +571,7 @@ article.tab.notes {
.invocations-wrapper {
display: flex;
flex-direction: column;
flex: 1;
gap: 0.5rem;
.invocations-roll-header {
@@ -612,6 +585,7 @@ article.tab.notes {
font-size: 1rem;
font-weight: bold;
padding: 0.3rem 1.5rem;
width: fit-content;
}
}
+182 -38
View File
@@ -150,6 +150,7 @@
align-self: stretch;
display: flex;
flex-wrap: wrap;
align-content: flex-start;
}
article {
display: flex;
@@ -239,13 +240,14 @@
}
&.infos {
display: flex;
flex-direction: column;
align-self: stretch;
height: calc(100% - 7.5rem);
width: 100%;
padding-bottom: 1.25rem;
.reference {
display: flex;
flex: 0 0 calc(100% - 0.5rem);
flex: 0 0 auto;
margin: 0.5rem 0.25rem;
input[name="system.source_reference.source"] {
text-align: center;
@@ -256,9 +258,14 @@
}
}
fieldset {
align-self: stretch;
height: calc(100% - 2rem);
flex: 1 1 auto;
display: flex;
flex-direction: column;
box-sizing: content-box;
.editor {
flex: 1 1 auto;
min-height: 6rem;
}
}
}
&.properties {
@@ -271,6 +278,7 @@
&.advancement {
article {
&.attributes {
height: auto;
.attribute-value,
.attribute,
.value {
@@ -286,6 +294,9 @@
}
}
}
&.infos {
height: calc(100% - 5.5rem);
}
}
}
&.technique {
@@ -332,18 +343,15 @@
&.item {
article {
&.attributes {
height: 4.5rem;
height: auto;
.properties {
flex: 100%;
}
}
&.infos {
flex: 0 0 60%;
height: calc(100% - 5.5rem);
}
&.properties {
flex: 0 0 40%;
height: calc(100% - 5.5rem);
flex: 1 1 100%;
height: auto;
min-height: 10rem;
}
}
}
@@ -360,56 +368,111 @@
&.armor {
article {
&.attributes {
height: 9.5rem;
height: auto;
align-content: flex-start;
.attribute-value {
flex: 0 0 calc(25% - 0.5rem);
margin: 0.25rem 0.25rem 0;
}
.value {
flex: 0 0 calc(25% - 0.5rem);
margin: 0.25rem;
input {
width: 100%;
}
}
.stat {
flex: 0 0 calc(33.33% - 0.5rem);
display: flex;
flex-direction: column;
margin: 0.25rem;
span {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.03em;
color: $l5r5e-label;
}
input {
text-align: center;
width: 100%;
}
}
.category {
flex: 0 0 calc(33.33% - 0.5rem);
margin: 0.25rem;
select {
width: 100%;
margin-top: 0.15rem;
}
}
}
&.infos {
flex: 0 0 60%;
height: calc(100% - 10.5rem);
}
&.properties {
flex: 0 0 40%;
height: calc(100% - 10.5rem);
flex: 1 1 100%;
height: auto;
min-height: 10rem;
}
}
}
&.weapon {
article {
&.attributes {
height: 18.5rem;
.stats,
height: auto;
align-content: flex-start;
.attribute-value {
flex: 0 0 calc(50% - 0.5rem);
flex-wrap: wrap;
flex: 0 0 calc(20% - 0.5rem);
margin: 0.25rem 0.25rem 0;
}
.stat {
flex: 0 0 calc(20% - 0.5rem);
display: flex;
flex-direction: column;
margin: 0.25rem;
label {
span {
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.03em;
color: $l5r5e-label;
}
input {
text-align: center;
width: 100%;
}
}
.stats {
input[type="text"] {
text-align: center;
}
}
.value {
flex: 0 0 calc(25% - 0.5rem);
}
.category,
.skillType {
flex: 0 0 calc(50% - 0.5rem);
input,
margin: 0.25rem;
select,
.attribute-dtype {
width: 100%;
margin: 0.25rem;
margin-top: 0.15rem;
}
}
.grip {
flex: 0 0 calc(40% - 0.5rem);
display: flex;
flex-direction: row;
align-items: center;
gap: 0.25rem;
margin: 0.25rem;
font-size: 0.8rem;
input {
flex: 1;
width: auto;
}
}
.value {
flex: 0 0 calc(20% - 0.5rem);
margin: 0.25rem;
input {
width: 100%;
}
}
}
&.infos {
flex: 0 0 60%;
height: calc(100% - 19.5rem);
}
&.properties {
flex: 0 0 40%;
height: calc(100% - 19.5rem);
flex: 1 1 100%;
height: auto;
min-height: 10rem;
}
}
}
@@ -550,3 +613,84 @@
}
}
}
// Chiaroscuro-specific item types
&.arcane,
&.mot-invocation,
&.mystere,
&.technique-ecole {
.sheet-header {
margin-bottom: 0.5rem;
img {
flex: 0 0 90px;
height: 90px;
width: 90px;
background: rgba(255, 255, 255, 0.25);
}
h1 input {
height: 5.5rem;
}
}
.sheet-body {
flex: 100%;
height: calc(100% - 90px - 0.25rem);
align-self: stretch;
display: flex;
flex-wrap: wrap;
align-content: flex-start;
}
article {
display: flex;
flex-wrap: wrap;
label {
color: $l5r5e-label;
margin: 0.25rem;
line-height: 1.5rem;
}
&.attributes,
&.tab.attributes {
width: 100%;
min-height: auto;
align-self: flex-start;
align-content: flex-start;
align-items: flex-start;
.attribute {
display: flex;
flex-direction: column;
flex: 0 0 calc(50% - 0.5rem);
input, select {
width: 100%;
}
}
}
&.infos,
&.tab.infos {
display: flex;
flex-direction: column;
width: 100%;
flex: 1 1 100%;
padding-bottom: 1.25rem;
fieldset {
flex: 1 1 auto;
display: flex;
flex-direction: column;
.editor {
flex: 1 1 auto;
min-height: 8rem;
}
}
.reference {
display: flex;
flex: 0 0 auto;
margin: 0.5rem 0.25rem;
input[name="system.source_reference.source"] {
text-align: center;
width: 70%;
}
input[name="system.source_reference.page"] {
width: 30%;
}
}
}
}
}
+53 -63
View File
@@ -1,41 +1,66 @@
/** Rings — disposition en pentagone **/
/** Rings — disposition en grille 2×2 + Vide centré en bas **/
.rings {
position: relative;
min-height: 260px;
color: $white-light;
display: grid;
grid-template-areas:
"air water"
"fire earth"
"void void";
grid-template-columns: 1fr 1fr;
gap: 0.5rem;
min-height: 0;
padding: 0.25rem;
list-style: none;
padding: 0;
margin: 0;
color: $white-light;
// Common rules for all ring items
#air { grid-area: air; }
#water { grid-area: water; }
#fire { grid-area: fire; }
#earth { grid-area: earth; }
#void { grid-area: void; justify-self: center; }
// Common ring cell
#earth,
#air,
#water,
#fire,
#void {
position: absolute;
position: relative;
display: flex;
flex-direction: column;
align-items: center;
gap: 0.15rem;
label {
position: relative;
display: block;
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
cursor: pointer;
width: 5.5rem;
line-height: normal;
text-align: center;
&.stance-active strong {
text-decoration: underline 2px;
}
}
.ring-circle {
position: relative;
width: 4.5rem;
height: 4.5rem;
display: flex;
align-items: center;
justify-content: center;
}
i.i_earth,
i.i_water,
i.i_fire,
i.i_air,
i.i_void {
font-size: 5rem;
line-height: 4.75rem;
font-size: 4.5rem;
line-height: 1;
display: block;
}
@@ -43,20 +68,23 @@
display: block;
font-size: 0.78rem;
line-height: 1.3;
margin-top: 0.15rem;
margin-top: 0.1rem;
}
input {
position: absolute;
height: 1.9rem;
width: 1.9rem;
height: 2rem;
width: 2rem;
border-radius: 100%;
top: 0;
left: 0;
bottom: -0.5rem;
right: -0.5rem;
text-align: center;
font-size: 0.95rem;
font-size: 1rem;
font-weight: bold;
border: 2px solid $l5r5e-title;
color: $white-light;
background: rgba($l5r5e-black, 0.75);
&:hover {
border: 2px solid $red-light;
text-shadow: 0 0 3px $red;
@@ -88,48 +116,10 @@
}
}
// Pentagone centré rayon 4.5rem autour du centre x=50%, y6.875rem
// (centre de l'icône à 2.375rem du haut de chaque li)
// cos/sin calculés pour les 5 sommets d'un pentagone régulier (Vide au sommet)
// Pentagone ancré à gauche centre du cercle à 8rem du bord gauche
// Vide sommet (90°)
#void {
top: 0;
left: 5.25rem;
color: $l5r5e-void;
input { background: $l5r5e-void; }
}
// Air (Solaire) haut gauche (162° : cos=0.951, sin=0.309)
#air {
top: 3.1rem;
left: 1rem;
color: $l5r5e-air;
input { background: $l5r5e-air; }
}
// Eau (Lunaire) haut droite (18° : cos=0.951, sin=0.309)
#water {
top: 3.1rem;
left: 9.5rem;
color: $l5r5e-water;
input { background: $l5r5e-water; }
}
// Feu (Solaire) bas gauche (126° : cos=0.588, sin=0.809)
#fire {
top: 8.1rem;
left: 2.6rem;
color: $l5r5e-fire;
input { background: $l5r5e-fire; }
}
// Terre (Lunaire) bas droite (54° : cos=0.588, sin=0.809)
#earth {
top: 8.1rem;
left: 7.9rem;
color: $l5r5e-earth;
input { background: $l5r5e-earth; }
}
// Ring colors
#void { color: $l5r5e-void; input { background: rgba($l5r5e-void, 0.7); } }
#air { color: $l5r5e-air; input { background: rgba($l5r5e-air, 0.7); } }
#water { color: $l5r5e-water; input { background: rgba($l5r5e-water, 0.7); } }
#fire { color: $l5r5e-fire; input { background: rgba($l5r5e-fire, 0.7); } }
#earth { color: $l5r5e-earth; input { background: rgba($l5r5e-earth, 0.7); } }
}
+1 -1
View File
@@ -8,7 +8,7 @@
"license": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/LICENSE.md",
"manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json",
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.13.4/raw/l5r5e.zip?job=build",
"version": "14.0.0",
"version": "14.0.1",
"compatibility": {
"minimum": "13",
"verified": "14"
+10 -16
View File
@@ -129,8 +129,8 @@
},
"aspects": {
"aspects": {
"solar": 0,
"lunar": 0,
"solar": 2,
"lunar": 2,
"gauge": 0
}
}
@@ -199,7 +199,6 @@
"peculiarity",
"advancement",
"arcane",
"etat",
"mystere",
"technique_ecole",
"mot_invocation"
@@ -289,16 +288,8 @@
"application": [],
"bonus": 2,
"progression": "",
"xp_cost": 1
},
"etat": {
"templates": [
"basics"
],
"application": "",
"mod": 0,
"effect": "",
"elimination": ""
"xp_cost": 1,
"xp_used": 0
},
"mystere": {
"templates": [
@@ -306,21 +297,24 @@
],
"mystere_type": "mineur",
"prerequisite_skill": "",
"prerequisite_condition": ""
"prerequisite_condition": "",
"xp_used": 0
},
"technique_ecole": {
"templates": [
"basics"
],
"application": "",
"bonus": 3
"bonus": 3,
"xp_used": 0
},
"mot_invocation": {
"templates": [
"basics"
],
"invocation_type": "",
"mode_invocation": 0
"mode_invocation": 0,
"xp_used": 0
}
}
}
+1 -1
View File
@@ -14,7 +14,7 @@
<li>{{#ifCond data.system.template '==' 'pow'}}{{localize 'l5r5e.sheets.upbringing'}}{{else}}{{localize 'l5r5e.sheets.family'}}{{/ifCond}} : {{data.system.identity.family}}</li>
<li>{{localize 'l5r5e.sheets.rank'}} : {{data.system.identity.school_rank}}</li>
<li>{{localize 'l5r5e.sheets.school'}} : {{data.system.identity.school}}</li>
<li>{{localize 'l5r5e.roles'}} : {{data.system.identity.roles}}</li>
<li>{{localize 'l5r5e.roles.title'}} : {{data.system.identity.roles}}</li>
{{!-- Social --}}
<li>{{localize 'l5r5e.social.honor'}} : {{data.system.social.honor}}</li>
@@ -1,12 +1,9 @@
<tr data-group="advancements" data-tab="advancement_rank_{{rank}}" class="flexrow row advancement tab">
<td class="name l5r5e-tooltip" data-item-id="{{advancement._id}}" name="advancement.name"><img src="{{advancement.img}}" title="{{advancement.name}}"> {{advancement.name}}</td>
<td class="curriculum" name="curriculum">{{#if advancement.system.in_curriculum}}<i class="fas fa-graduation-cap"></i> {{/if}}</td>
<td class="xp" name="advancement.xp">{{advancement.system.xp_used}}</td>
<td class="rank" name="advancement.rank">{{advancement.system.rank}}</td>
{{#if editable}}
<td class="actions">
<ul>
<li data-item-id="{{advancement._id}}" class="item-control item-curriculum" title="{{localize 'l5r5e.advancements.curriculum'}}"><i class="fas fa-graduation-cap"></i></li>
<li data-item-id="{{advancement._id}}" class="item-control item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
<li data-item-id="{{advancement._id}}" class="item-control item-delete" title="{{localize 'Delete'}}"><i class="fas fa-trash"></i></li>
</ul>
@@ -16,15 +16,4 @@
<div class="gauge-bar" style="width: {{data.aspectsData.gaugePercent}}%; background-color: {{data.aspectsData.gaugeColor}};"></div>
</div>
</div>
{{#if data.etatItems.length}}
<div class="etat-summary">
<span class="etat-summary-label">{{localize 'chiaroscuro.etat.title'}}</span>
{{#each data.etatItems as |etat|}}
<span class="etat-badge l5r5e-tooltip" title="{{etat.system.effect}}">
<img src="{{etat.img}}" width="16" height="16" />
{{etat.name}}
</span>
{{/each}}
</div>
{{/if}}
</div>
@@ -4,7 +4,7 @@
{{#if data.system.identity.school_curriculum_journal.id}}
<a class="school-journal-link"><i class="fas fa-file-alt"></i></a> {{data.system.identity.school_curriculum_journal.name}}
{{else}}
<i class="fas fa-question-circle" title="{{localize 'l5r5e.advancements.school_curriculum_journal'}}"></i> {{localize 'l5r5e.sheets.school'}}
<i class="fas fa-question-circle" title="{{localize 'l5r5e.advancements.school_curriculum_journal'}}"></i> {{localize 'l5r5e.advancements.advancement'}}
{{/if}}
{{#if data.editable_not_soft_locked}}
<a data-item-type="advancement" class="advancement-control item-add" title="{{localize 'l5r5e.global.add'}}"><i class="fas fa-plus"></i></a>
@@ -22,9 +22,7 @@
<thead class="flex">
<tr class="flexrow row">
<th class="name">{{localize 'l5r5e.sheets.name'}}</th>
<th class="curriculum"><i class="fas fa-graduation-cap"></i></th>
<th class="xp">{{localize 'l5r5e.advancements.spent'}}</th>
<th class="rank">{{localize 'l5r5e.sheets.rank'}}</th>
{{#if data.editable_not_soft_locked}}
<th class="actions"></th>
{{/if}}
@@ -36,10 +34,6 @@
{{> 'systems/l5rx-chiaroscuro/templates/actors/character/advancement-school.html' advancement=advancement rank=rankObject.rank editable=../../data.editable_not_soft_locked}}
{{/each}}
{{#ifCond rankObject.rank '>' 0}}
<tr class="tfoot flexrow row tab" data-group="advancements" data-tab="advancement_rank_{{rankObject.rank}}">
<th>{{localize 'l5r5e.advancements.total_xp_curriculum'}} : {{rankObject.spent.curriculum}}{{#if rankObject.goal}} / {{rankObject.goal}}{{/if}}</th>
<th>{{localize 'l5r5e.advancements.total_xp_spent'}} : {{rankObject.spent.total}}</th>
</tr>
{{#if ../data.editable_not_soft_locked}}
{{#ifCond ../data.system.identity.school_rank '<' 6}}
{{#ifCond (ifCond ../data.system.identity.school_rank '==' rankObject.rank) '&&' (ifCond rankObject.spent.curriculum '>=' rankObject.goal)}}
@@ -58,36 +52,3 @@
</tbody>
</table>
</fieldset>
{{!-- Others progression (does not count in school xp) --}}
<fieldset class="xp-spent xp-spent-body">
<legend class="tools">
{{localize 'l5r5e.advancements.title'}}
{{#if data.editable_not_soft_locked}}
<a class="advancement-others-control item-advancement-choose" title="{{localize 'l5r5e.global.add'}}"><i class="fas fa-plus"></i></a>
{{/if}}
</legend>
<table>
<thead class="flex">
<tr class="flexrow row">
<th class="name">{{localize 'l5r5e.sheets.name'}}</th>
<th class="xp">{{localize 'l5r5e.advancements.spent'}}</th>
<th class="rank">{{localize 'l5r5e.sheets.rank'}}</th>
{{#if data.editable_not_soft_locked}}
<th class="actions"></th>
{{/if}}
</tr>
</thead>
<tbody class="flex">
{{#each data.advancementsOthers as |advancement advancementId|}}
{{> 'systems/l5rx-chiaroscuro/templates/actors/character/advancement-others.html' advancement=advancement show_curriculum_toggle=false editable=../data.editable_not_soft_locked}}
{{/each}}
</tbody>
<tfoot class="flex">
<tr class="tfoot flexrow">
<th>
{{localize 'l5r5e.advancements.total_xp_spent'}} : {{data.advancementsOthersTotalXp}}
</th>
</tr>
</tfoot>
</table>
</fieldset>
@@ -1,6 +1,6 @@
<div class="invocations-wrapper">
<div class="invocations-roll-header">
<button class="dice-picker invocation-roll-btn" data-skill="invocation">{{localize 'l5r5e.skills.social.invocation'}}</button>
<button type="button" class="dice-picker invocation-roll-btn" data-skill="invocation">{{localize 'l5r5e.skills.social.invocation'}}</button>
</div>
<div class="invocations-columns">
{{#each data.splitInvocationsList as |list type|}}
@@ -8,12 +8,21 @@
<legend class="technique-controls">
<span>{{localize (concat 'chiaroscuro.technique.invocation_types.' type)}}</span>
{{#if ../data.editable_not_soft_locked}}
<a data-item-type="technique" class="technique-control item-add" data-tech-type="mot_invocation" title="{{localize 'l5r5e.global.add'}}"><i class="fas fa-plus"></i></a>
<a data-item-type="mot_invocation" class="technique-control item-add" data-invocation-type="{{type}}" title="{{localize 'l5r5e.global.add'}}"><i class="fas fa-plus"></i></a>
{{/if}}
</legend>
<ul class="item-list">
{{#each list as |item|}}
{{> 'systems/l5rx-chiaroscuro/templates/items/technique/technique-entry.html' technique=item editable=../../data.editable_not_soft_locked}}
<li class="item technique flexcol" data-item-id="{{item._id}}">
<ul class="item-header technique-controls">
<li class="item-img"><img src="{{item.img}}" title="{{item.name}}" width="32px" height="32px"/></li>
<li class="item-name l5r5e-tooltip" data-item-id="{{item._id}}">{{item.name}}</li>
{{#if ../../data.editable_not_soft_locked}}
<li data-item-id="{{item._id}}" class="item-control item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
<li data-item-id="{{item._id}}" class="item-control item-delete" title="{{localize 'Delete'}}"><i class="fas fa-trash"></i></li>
{{/if}}
</ul>
</li>
{{/each}}
</ul>
</fieldset>
+20 -10
View File
@@ -1,41 +1,51 @@
<ul class="rings">
<li id="air">
<label class="air {{#ifCond 'air' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_air dice-picker rollable" data-ring="air"></i>
<div class="ring-circle">
<i class="i_air dice-picker rollable" data-ring="air"></i>
<input class="centered-input select-on-focus" type="number" name="system.rings.air" value="{{data.system.rings.air}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</div>
<strong class="ring-set-default {{#ifCond 'air' '==' data.system.default_ring}}default-ring{{/ifCond}}" data-ring="air" title="{{localize 'chiaroscuro.character.default_ring'}}">{{localizeRing 'air'}}</strong>
<span class="ring-type solaire">☀ Solaire</span>
<input class="centered-input select-on-focus" type="number" name="system.rings.air" value="{{data.system.rings.air}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="water">
<label class="water {{#ifCond 'water' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_water dice-picker rollable" data-ring="water"></i>
<div class="ring-circle">
<i class="i_water dice-picker rollable" data-ring="water"></i>
<input class="centered-input select-on-focus" type="number" name="system.rings.water" value="{{data.system.rings.water}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</div>
<strong class="ring-set-default {{#ifCond 'water' '==' data.system.default_ring}}default-ring{{/ifCond}}" data-ring="water" title="{{localize 'chiaroscuro.character.default_ring'}}">{{localizeRing 'water'}}</strong>
<span class="ring-type lunaire">☽ Lunaire</span>
<input class="centered-input select-on-focus" type="number" name="system.rings.water" value="{{data.system.rings.water}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="fire">
<label class="fire {{#ifCond 'fire' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_fire dice-picker rollable" data-ring="fire"></i>
<div class="ring-circle">
<i class="i_fire dice-picker rollable" data-ring="fire"></i>
<input class="centered-input select-on-focus" type="number" name="system.rings.fire" value="{{data.system.rings.fire}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</div>
<strong class="ring-set-default {{#ifCond 'fire' '==' data.system.default_ring}}default-ring{{/ifCond}}" data-ring="fire" title="{{localize 'chiaroscuro.character.default_ring'}}">{{localizeRing 'fire'}}</strong>
<span class="ring-type solaire">☀ Solaire</span>
<input class="centered-input select-on-focus" type="number" name="system.rings.fire" value="{{data.system.rings.fire}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="earth">
<label class="earth {{#ifCond 'earth' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_earth dice-picker rollable" data-ring="earth"></i>
<div class="ring-circle">
<i class="i_earth dice-picker rollable" data-ring="earth"></i>
<input class="centered-input select-on-focus" type="number" name="system.rings.earth" value="{{data.system.rings.earth}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</div>
<strong class="ring-set-default {{#ifCond 'earth' '==' data.system.default_ring}}default-ring{{/ifCond}}" data-ring="earth" title="{{localize 'chiaroscuro.character.default_ring'}}">{{localizeRing 'earth'}}</strong>
<span class="ring-type lunaire">☽ Lunaire</span>
<input class="centered-input select-on-focus" type="number" name="system.rings.earth" value="{{data.system.rings.earth}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="void">
<label class="void {{#ifCond 'void' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_void dice-picker rollable" data-ring="void"></i>
<div class="ring-circle">
<i class="i_void dice-picker rollable" data-ring="void"></i>
<input class="centered-input select-on-focus" type="number" name="system.rings.void" value="{{data.system.rings.void}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</div>
<strong class="ring-set-default {{#ifCond 'void' '==' data.system.default_ring}}default-ring{{/ifCond}}" data-ring="void" title="{{localize 'chiaroscuro.character.default_ring'}}">{{localizeRing 'void'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.void" value="{{data.system.rings.void}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
</ul>
@@ -1,4 +1,27 @@
<div class="techniques-wrapper">
{{!-- Technique d'École items list --}}
<fieldset class="section-header flexrow">
<legend class="text-block-header">
{{localize 'chiaroscuro.technique_ecole.title'}}
{{#if data.editable_not_soft_locked}}
<a data-item-type="technique_ecole" class="technique-ecole-control item-add" title="{{localize 'l5r5e.global.add'}}"><i class="fas fa-plus"></i></a>
{{/if}}
</legend>
<ul class="item-list">
{{#each data.techniqueEcoleItems as |item|}}
<li class="item technique flexcol" data-item-id="{{item._id}}">
<ul class="item-header technique-controls">
<li class="item-img"><img src="{{item.img}}" title="{{item.name}}" width="32px" height="32px"/></li>
<li class="item-name l5r5e-tooltip" data-item-id="{{item._id}}">{{item.name}}</li>
{{#if ../data.editable_not_soft_locked}}
<li data-item-id="{{item._id}}" class="item-control item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
<li data-item-id="{{item._id}}" class="item-control item-delete" title="{{localize 'Delete'}}"><i class="fas fa-trash"></i></li>
{{/if}}
</ul>
</li>
{{/each}}
</ul>
</fieldset>
{{!-- Arcane items list --}}
<fieldset class="section-header flexrow">
<legend class="text-block-header">
@@ -2,13 +2,9 @@
{{!-- Ring accent bar --}}
<div class="chi-ring-bar {{ring.id}}"></div>
{{!-- Header: portrait + actor + ring badge --}}
{{!-- Header: portrait + ring badge --}}
<div class="chi-chat-header">
<img class="profile-img" src="{{profileImg}}" alt="{{actor.name}}" />
<div class="chi-chat-actor">
<strong>{{actor.name}}</strong>
{{#if quickInfo}}<div class="chi-chat-quick-info">{{quickInfo}}</div>{{/if}}
</div>
<div class="chi-chat-badges">
<span class="chi-ring-badge {{ring.id}}" title="{{ring.label}}">
<i class="i_{{ring.id}}"></i>
@@ -101,4 +97,12 @@
{{/if}}{{/if}}
</div>
</div>
{{!-- Item link (arcane, weapon, etc.) --}}
{{#if l5r5e.item.uuid}}
<div class="l5r5e item-infos">
<div class="profile"><img class="profile-img" src="{{l5r5e.item.img}}" alt="{{l5r5e.item.name}}" /></div>
<div class="name">@UUID[{{l5r5e.item.uuid}}]</div>
</div>
{{/if}}
</div>
@@ -4,10 +4,17 @@
<img class="profile-img" src="{{#if actor.img}}{{actor.img}}{{else}}icons/svg/mystery-man.svg{{/if}}" alt="{{actor.name}}" />
<div class="chi-dice-actor-info">
<strong>{{actor.name}}</strong>
{{#if quickInfo}}<div class="chi-dice-quick-info">{{quickInfo}}</div>{{/if}}
</div>
</div>
{{!-- Quick Info --}}
{{#if quickInfo}}
<fieldset class="chi-dice-section">
<legend>{{localize 'chiaroscuro.character.quick_info'}}</legend>
<div class="chi-dice-quick-info">{{quickInfo}}</div>
</fieldset>
{{/if}}
{{!-- Ring selector --}}
<fieldset class="chi-dice-section">
<legend>{{localize 'l5r5e.rings.title'}}</legend>
@@ -0,0 +1,23 @@
<div id="l5r5e_gm_combat_tracker_bar" class="l5r5e-combat-bar">
<div class="encounter-types">
{{#each encounterTypeList as |type|}}
<a class="encounter-control {{#ifCond type '==' ../encounterType}}active{{/ifCond}}" data-id="{{type}}" title="{{localize (concat 'l5r5e.conflict.initiative.' type)}}">
{{localize (concat 'l5r5e.conflict.initiative.' type)}}
</a>
{{/each}}
</div>
<div class="prepared-controls">
<a class="prepared-control prepared-{{prepared.character}}" data-id="character" title="{{localize (concat 'l5r5e.conflict.initiative.prepared_' prepared.character)}}">
<i class="fas {{#ifCond prepared.character '==' 'true'}}fa-shield-alt{{else}}{{#ifCond prepared.character '==' 'actor'}}fa-user{{else}}fa-skull{{/ifCond}}{{/ifCond}}"></i>
{{localize 'l5r5e.character_types.character'}}
</a>
<a class="prepared-control prepared-{{prepared.adversary}}" data-id="adversary" title="{{localize (concat 'l5r5e.conflict.initiative.prepared_' prepared.adversary)}}">
<i class="fas {{#ifCond prepared.adversary '==' 'true'}}fa-shield-alt{{else}}{{#ifCond prepared.adversary '==' 'actor'}}fa-user{{else}}fa-skull{{/ifCond}}{{/ifCond}}"></i>
{{localize 'l5r5e.character_types.adversary'}}
</a>
<a class="prepared-control prepared-{{prepared.minion}}" data-id="minion" title="{{localize (concat 'l5r5e.conflict.initiative.prepared_' prepared.minion)}}">
<i class="fas {{#ifCond prepared.minion '==' 'true'}}fa-shield-alt{{else}}{{#ifCond prepared.minion '==' 'actor'}}fa-user{{else}}fa-skull{{/ifCond}}{{/ifCond}}"></i>
{{localize 'l5r5e.character_types.minion'}}
</a>
</div>
</div>
@@ -11,6 +11,10 @@
{{localize 'chiaroscuro.arcane.arcane_type'}}
<input type="text" name="system.arcane_type" value="{{data.system.arcane_type}}" />
</label>
<label class="attribute">
{{localize 'chiaroscuro.arcane.xp_used'}}
<input class="select-on-focus" type="number" name="system.xp_used" value="{{data.system.xp_used}}" data-dtype="Number" min="0" placeholder="0"/>
</label>
<label class="attribute">
{{localize 'chiaroscuro.arcane.application'}}
<input type="text" name="system.applicationDisplay" value="{{data.system.applicationDisplay}}" placeholder="compétence1, compétence2" />
@@ -25,7 +29,7 @@
</label>
</article>
{{!-- Description --}}
<article class="infos">
<article class="tab infos active" data-group="primary" data-tab="infos">
<fieldset>
<legend class="text-block-header">{{localize 'l5r5e.sheets.description'}}</legend>
{{editor data.enrichedHtml.description target="system.description" button=true owner=owner editable=editable engine="prosemirror" collaborate=false}}
@@ -0,0 +1,36 @@
<div class="{{cssClass}}" data-actor-id="{{actor._id}}" data-item-id="{{data._id}}">
<header class="card-header">
<h2 class="item-name"><img src="{{data.img}}" title="{{data.name}}" /> {{data.name}}</h2>
</header>
<section class="sheet-body">
<ul>
{{#if data.system.arcane_type}}
<li>
<strong>{{localize 'chiaroscuro.arcane.arcane_type'}}</strong> : {{data.system.arcane_type}}
</li>
{{/if}}
{{#if data.system.applicationDisplay}}
<li>
<strong>{{localize 'chiaroscuro.arcane.application'}}</strong> : {{data.system.applicationDisplay}}
</li>
{{/if}}
{{#if data.system.bonus}}
<li>
<strong>{{localize 'chiaroscuro.arcane.bonus'}}</strong> : {{data.system.bonus}}
</li>
{{/if}}
{{#if data.system.progression}}
<li>
<strong>{{localize 'chiaroscuro.arcane.progression'}}</strong> : {{data.system.progression}}
</li>
{{/if}}
{{#if data.system.xp_used}}
<li>
<strong>{{localize 'chiaroscuro.arcane.xp_used'}}</strong> : {{data.system.xp_used}}
</li>
{{/if}}
</ul>
{{> 'systems/l5rx-chiaroscuro/templates/items/item/item-text-partial-reference.html'}}
</section>
</div>
+27 -5
View File
@@ -5,13 +5,34 @@
</header>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- attributes --}}
<article class="attributes" data-group="primary" data-tab="description">
<label class="equipped checkbox">
<input type="checkbox" name="system.equipped" {{checked data.system.equipped}} />
{{ localize 'l5r5e.armors.equipped' }}
{{!-- Row 1 : quantité / rareté / coût / équipé --}}
<label class="value">
{{localize 'l5r5e.sheets.quantity'}}
<input class="select-on-focus" type="number" name="system.quantity" value="{{data.system.quantity}}" data-dtype="Number" min="0" placeholder="0"/>
</label>
<label class="attribute">
<label class="value">
{{localize 'l5r5e.sheets.rarity'}}
<input class="select-on-focus" type="text" name="system.rarity" value="{{data.system.rarity}}" data-dtype="String" placeholder="—"/>
</label>
<label class="value">
{{localize 'l5r5e.money.zeni'}}
<input class="select-on-focus" type="text" name="system.zeni" value="{{data.system.zeni}}" data-dtype="String" placeholder="0"/>
</label>
<label class="attribute-value checkbox">
<input type="checkbox" name="system.equipped" {{checked data.system.equipped}} />
{{localize 'l5r5e.armors.equipped'}}
</label>
{{!-- Row 2 : défenses + catégorie --}}
<label class="stat">
<span>{{localize 'l5r5e.armors.physical'}}</span>
<input class="select-on-focus" type="number" name="system.armor.physical" value="{{data.system.armor.physical}}" data-dtype="Number" placeholder="0"/>
</label>
<label class="stat">
<span>{{localize 'l5r5e.armors.supernatural'}}</span>
<input class="select-on-focus" type="number" name="system.armor.supernatural" value="{{data.system.armor.supernatural}}" data-dtype="Number" placeholder="0"/>
</label>
<label class="category">
{{localize 'l5r5e.armors.type'}}
<select name="system.armor_category">
<option value=""></option>
@@ -19,6 +40,7 @@
</select>
</label>
</article>
{{!-- Description pleine largeur --}}
<article class="tab infos active" data-group="primary" data-tab="infos">
<fieldset>
<legend class="text-block-header">{{localize 'l5r5e.sheets.description'}}</legend>
@@ -1,31 +0,0 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img class="profile-img" src="{{data.img}}" data-edit="img" title="{{data.name}}"/>
<h1 class="charname"><input name="name" type="text" value="{{data.name}}" placeholder="Name"/></h1>
</header>
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item active" data-group="primary" data-tab="attributes">{{localize 'l5r5e.sheets.attributes'}}</a>
<a class="item" data-group="primary" data-tab="description">{{localize 'l5r5e.sheets.infos'}}</a>
</nav>
<section class="sheet-body">
<article class="attributes" data-group="primary" data-tab="attributes">
<label class="attribute">
{{localize 'chiaroscuro.etat.application'}}
<input type="text" name="system.application" value="{{data.system.application}}" />
</label>
<label class="attribute">
{{localize 'chiaroscuro.etat.mod'}}
<input class="select-on-focus" type="number" name="system.mod" value="{{data.system.mod}}" data-dtype="Number" placeholder="0"/>
</label>
<label class="attribute">
{{localize 'chiaroscuro.etat.effect'}}
<input type="text" name="system.effect" value="{{data.system.effect}}" />
</label>
<label class="attribute">
{{localize 'chiaroscuro.etat.elimination'}}
<input type="text" name="system.elimination" value="{{data.system.elimination}}" />
</label>
</article>
{{> 'systems/l5rx-chiaroscuro/templates/items/item/item-infos.html'}}
</section>
</form>
+1 -1
View File
@@ -19,7 +19,7 @@
<input class="select-on-focus" type="text" name="system.rarity" value="{{data.system.rarity}}" data-dtype="String" placeholder="0"/>
</label>
<label class="value">
<i class="fas fa-coins"></i>
{{localize 'l5r5e.money.zeni'}}
<input class="select-on-focus" type="text" name="system.zeni" value="{{data.system.zeni}}" data-dtype="String" placeholder="0"/>
</label>
</article>
+6 -2
View File
@@ -1,13 +1,17 @@
{{#each data.splitItemsList as |cat type|}}
<h3 class="toggle-on-click" data-toggle="inventory-item-list-{{type}}">
{{localize (localize 'l5r5e.{type}s.title' type=type)}} ({{cat.length}})
{{localize (concat 'l5r5e.' type 's.title')}} ({{cat.length}})
{{#if ../data.editable_not_soft_locked}}
<a data-item-type="{{type}}" class="item-control item-add" title="{{localize 'l5r5e.global.add'}}"><i class="fas fa-plus"></i></a>
{{/if}}
</h3>
<ul class="item-list inventory-item-list-{{type}} {{#ifCond ../data.storeInfos 'includes' (concat 'inventory-item-list-' type)}}toggle-hidden{{/ifCond}}">
{{#each cat as |item id|}}
{{> 'systems/l5rx-chiaroscuro/templates/items/item/item-entry.html' item=item id=id editable=../../options.editable soft_locked=../../data.system.soft_locked}}
{{#ifCond item.type '==' 'weapon'}}
{{> 'systems/l5rx-chiaroscuro/templates/items/weapon/weapon-entry.html' weapon=item id=id editable=../../data.editable_not_soft_locked}}
{{else}}
{{> 'systems/l5rx-chiaroscuro/templates/items/item/item-entry.html' item=item id=id editable=../../options.editable soft_locked=../../data.system.soft_locked}}
{{/ifCond}}
{{/each}}
</ul>
{{/each}}
@@ -0,0 +1,22 @@
<div class="{{cssClass}}" data-actor-id="{{actor._id}}" data-item-id="{{data._id}}">
<header class="card-header">
<h2 class="item-name"><img src="{{data.img}}" title="{{data.name}}" /> {{data.name}}</h2>
</header>
<section class="sheet-body">
<ul>
<li>
<strong>{{localize 'chiaroscuro.technique.invocation_type'}}</strong> : {{localize (concat 'chiaroscuro.technique.invocation_types.' data.system.invocation_type)}}
</li>
<li>
<strong>{{localize 'chiaroscuro.technique.mode_invocation'}}</strong> : {{data.system.mode_invocation}}
</li>
{{#if data.system.xp_used}}
<li>
<strong>{{localize 'chiaroscuro.arcane.xp_used'}}</strong> : {{data.system.xp_used}}
</li>
{{/if}}
</ul>
{{> 'systems/l5rx-chiaroscuro/templates/items/item/item-text-partial-reference.html'}}
</section>
</div>
@@ -17,9 +17,13 @@
{{localize 'chiaroscuro.technique.mode_invocation'}}
<input class="select-on-focus" type="number" id="mot_invocation_mode" name="system.mode_invocation" value="{{data.system.mode_invocation}}" data-dtype="Number" placeholder="0" readonly />
</label>
<label class="attribute">
{{localize 'chiaroscuro.arcane.xp_used'}}
<input class="select-on-focus" type="number" name="system.xp_used" value="{{data.system.xp_used}}" data-dtype="Number" min="0" placeholder="0"/>
</label>
</article>
{{!-- Description --}}
<article class="infos">
<article class="tab infos active" data-group="primary" data-tab="infos">
<fieldset>
<legend class="text-block-header">{{localize 'l5r5e.sheets.description'}}</legend>
{{editor data.enrichedHtml.description target="system.description" button=true owner=owner editable=editable engine="prosemirror" collaborate=false}}
@@ -11,6 +11,10 @@
{{selectOptions data.mystereTypes selected=data.system.mystere_type valueAttr='id' labelAttr='label'}}
</select>
</label>
<label class="attribute">
{{localize 'chiaroscuro.arcane.xp_used'}}
<input class="select-on-focus" type="number" name="system.xp_used" value="{{data.system.xp_used}}" data-dtype="Number" min="0" placeholder="0"/>
</label>
<label class="attribute">
{{localize 'chiaroscuro.mystere.prerequisite_skill'}}
<input type="text" name="system.prerequisite_skill" value="{{data.system.prerequisite_skill}}" />
@@ -20,7 +24,7 @@
<input type="text" name="system.prerequisite_condition" value="{{data.system.prerequisite_condition}}" />
</label>
</article>
<article class="infos">
<article class="tab infos active" data-group="primary" data-tab="infos">
<fieldset>
<legend class="text-block-header">{{localize 'l5r5e.sheets.description'}}</legend>
{{editor data.enrichedHtml.description target="system.description" button=true owner=owner editable=editable engine="prosemirror" collaborate=false}}
@@ -0,0 +1,31 @@
<div class="{{cssClass}}" data-actor-id="{{actor._id}}" data-item-id="{{data._id}}">
<header class="card-header">
<h2 class="item-name"><img src="{{data.img}}" title="{{data.name}}" /> {{data.name}}</h2>
</header>
<section class="sheet-body">
<ul>
{{#if data.system.mystere_type}}
<li>
<strong>{{localize 'chiaroscuro.mystere.mystere_type'}}</strong> : {{data.system.mystere_type}}
</li>
{{/if}}
{{#if data.system.prerequisite_skill}}
<li>
<strong>{{localize 'chiaroscuro.mystere.prerequisite_skill'}}</strong> : {{data.system.prerequisite_skill}}
</li>
{{/if}}
{{#if data.system.prerequisite_condition}}
<li>
<strong>{{localize 'chiaroscuro.mystere.prerequisite_condition'}}</strong> : {{data.system.prerequisite_condition}}
</li>
{{/if}}
{{#if data.system.xp_used}}
<li>
<strong>{{localize 'chiaroscuro.arcane.xp_used'}}</strong> : {{data.system.xp_used}}
</li>
{{/if}}
</ul>
{{> 'systems/l5rx-chiaroscuro/templates/items/item/item-text-partial-reference.html'}}
</section>
</div>
@@ -0,0 +1,26 @@
<div class="{{cssClass}}" data-actor-id="{{actor._id}}" data-item-id="{{data._id}}">
<header class="card-header">
<h2 class="item-name"><img src="{{data.img}}" title="{{data.name}}" /> {{data.name}}</h2>
</header>
<section class="sheet-body">
<ul>
{{#if data.system.application}}
<li>
<strong>{{localize 'chiaroscuro.arcane.application'}}</strong> : {{data.system.application}}
</li>
{{/if}}
{{#if data.system.bonus}}
<li>
<strong>{{localize 'chiaroscuro.arcane.bonus'}}</strong> : {{data.system.bonus}}
</li>
{{/if}}
{{#if data.system.xp_used}}
<li>
<strong>{{localize 'chiaroscuro.arcane.xp_used'}}</strong> : {{data.system.xp_used}}
</li>
{{/if}}
</ul>
{{> 'systems/l5rx-chiaroscuro/templates/items/item/item-text-partial-reference.html'}}
</section>
</div>
@@ -15,9 +15,13 @@
{{localize 'chiaroscuro.arcane.bonus'}}
<input class="select-on-focus" type="number" name="system.bonus" value="{{data.system.bonus}}" data-dtype="Number" min="0" placeholder="3" readonly />
</label>
<label class="attribute">
{{localize 'chiaroscuro.arcane.xp_used'}}
<input class="select-on-focus" type="number" name="system.xp_used" value="{{data.system.xp_used}}" data-dtype="Number" min="0" placeholder="0"/>
</label>
</article>
{{!-- Description --}}
<article class="infos">
<article class="tab infos active" data-group="primary" data-tab="infos">
<fieldset>
<legend class="text-block-header">{{localize 'l5r5e.sheets.description'}}</legend>
{{editor data.enrichedHtml.description target="system.description" button=true owner=owner editable=editable engine="prosemirror" collaborate=false}}
@@ -1,19 +1,19 @@
<li class="item weapon flexcol">
<ul class="item-header item-control">
<li class="item-img"><img src="{{weapon.img}}" title="{{weapon.name}}" width="32px" height="32px"/></li>
<li class="item-name dice-picker l5r5e-tooltip" data-item-id="{{weapon.id}}" data-weapon-id="{{weapon.id}}">{{weapon.name}}</li>
<li class="item-name dice-picker l5r5e-tooltip" data-item-id="{{weapon._id}}" data-weapon-id="{{weapon._id}}">{{weapon.name}}</li>
<li class="icon-stat-container">
<i class="fas fa-arrows-alt-h" title="{{localize 'l5r5e.weapons.range'}}"> {{weapon.system.range}}</i>
<i class="fas fa-tint" title="{{localize 'l5r5e.weapons.damage'}}"> {{weapon.system.damage}}</i>
<i class="fas fa-skull" title="{{localize 'l5r5e.weapons.deadliness'}}"> {{weapon.system.deadliness}}</i>
</li>
{{#if editable}}
<li data-item-id="{{weapon.id}}" class="item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
<li data-item-id="{{weapon.id}}" class="item-delete" title="{{localize 'Delete'}}"><i class="fas fa-trash"></i></li>
<li data-item-id="{{weapon._id}}" class="item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
<li data-item-id="{{weapon._id}}" class="item-delete" title="{{localize 'Delete'}}"><i class="fas fa-trash"></i></li>
{{/if}}
</ul>
<ul class="item-properties">
<li class="equip-readied-control" data-item-id="{{weapon.id}}" data-type="readied">
<li class="equip-readied-control" data-item-id="{{weapon._id}}" data-type="readied">
<i class="i_readied fa{{^if weapon.system.readied}}r{{/if}} fa-check-circle" title="{{#if weapon.system.readied}}{{localize 'l5r5e.weapons.readied'}}{{else}}{{localize 'l5r5e.weapons.sheathed'}}{{/if}}"></i>
</li>
{{#each weapon.system.properties as |property|}}
+32 -23
View File
@@ -5,48 +5,57 @@
</header>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- attributes--}}
{{!-- Attributes --}}
<article class="attributes" data-group="primary" data-tab="description">
{{!-- Row 1 : quantité / rareté / coût / équipé --}}
<label class="value">
{{localize 'l5r5e.sheets.quantity'}}
<input class="select-on-focus" type="number" name="system.quantity" value="{{data.system.quantity}}" data-dtype="Number" min="0" placeholder="0"/>
</label>
<label class="value">
{{localize 'l5r5e.sheets.rarity'}}
<input class="select-on-focus" type="text" name="system.rarity" value="{{data.system.rarity}}" data-dtype="String" placeholder="—"/>
</label>
<label class="value">
{{localize 'l5r5e.money.zeni'}}
<input class="select-on-focus" type="text" name="system.zeni" value="{{data.system.zeni}}" data-dtype="String" placeholder="0"/>
</label>
<label class="attribute-value checkbox">
<input type="checkbox" name="system.equipped" {{checked data.system.equipped}} />
{{localize 'l5r5e.weapons.sheathed'}}
</label>
<label class="attribute-value checkbox">
<input type="checkbox" name="system.readied" {{checked data.system.readied}} />
{{localize 'l5r5e.weapons.readied'}}
<label class="value">
<span>{{localize 'chiaroscuro.weapon.bonus'}}</span>
<input class="select-on-focus" type="number" name="system.bonus" value="{{data.system.bonus}}" data-dtype="Number" placeholder="0"/>
</label>
{{!-- Row 3 : catégorie + compétence --}}
<label class="category">
{{localize 'l5r5e.weapons.category'}}
<select name="system.category">
{{selectOptions data.weaponCategories selected=data.system.category valueAttr='id' labelAttr='label'}}
</select>
</label>
<label class="attribute">
{{localize 'chiaroscuro.weapon.bonus'}}
<input class="select-on-focus" type="number" name="system.bonus" value="{{data.system.bonus}}" data-dtype="Number" placeholder="0"/>
</label>
<label class="skillType">
{{localize 'l5r5e.skills.label'}}
<select class="attribute-dtype" name="system.skill">
{{selectOptions data.skills selected=data.system.skill valueAttr='id' labelAttr='label' localize=true}}
</select>
</label>
<fieldset class="stats">
<legend class="text-block-header">{{localize 'l5r5e.weapons.stats'}}</legend>
<label>
{{localize 'l5r5e.weapons.range'}}
<input class="select-on-focus" type="text" name="system.range" value="{{data.system.range}}" data-dtype="String" placeholder="0"/>
</label>
<label>
{{localize 'l5r5e.weapons.damage'}}
<input class="select-on-focus" type="number" name="system.damage" value="{{data.system.damage}}" data-dtype="Number" min="0" placeholder="0"/>
</label>
<label>
{{localize 'l5r5e.weapons.deadliness'}}
<input class="select-on-focus" type="number" name="system.deadliness" value="{{data.system.deadliness}}" data-dtype="Number" min="0" placeholder="0"/>
</label>
</fieldset>
{{!-- Row 4 : apprêté + prises --}}
<label class="attribute-value checkbox">
<input type="checkbox" name="system.readied" {{checked data.system.readied}} />
{{localize 'l5r5e.weapons.readied'}}
</label>
<label class="grip">
{{localize 'l5r5e.weapons.1hand'}}
<input class="select-on-focus" type="text" name="system.grip_1" value="{{data.system.grip_1}}" data-dtype="String" placeholder="—"/>
</label>
<label class="grip">
{{localize 'l5r5e.weapons.2hand'}}
<input class="select-on-focus" type="text" name="system.grip_2" value="{{data.system.grip_2}}" data-dtype="String" placeholder="—"/>
</label>
</article>
{{!-- Description pleine largeur --}}
<article class="tab infos active" data-group="primary" data-tab="infos">
<fieldset>
<legend class="text-block-header">{{localize 'l5r5e.sheets.description'}}</legend>
+1 -1
View File
@@ -31,7 +31,7 @@
</a>
</li>
<li>
<a href="{{localize 'l5r5e.logo.drivethrurpg.link'}}" target="_blank" title="{{localize 'l5r5e.logo.drivethrurpg.info"'}}">
<a href="{{localize 'l5r5e.logo.drivethrurpg.link'}}" target="_blank" title="{{localize 'l5r5e.logo.drivethrurpg.info'}}">
{{localize 'l5r5e.logo.drivethrurpg.title'}}
</a>
</li>