Compare commits

...

22 Commits

Author SHA1 Message Date
Vlyan
dc00657f84 Release 1.9.6 2023-05-14 14:52:17 +02:00
Vlyan
503e4e365f Merge branch 'fix-character-sheet-header' into 'dev'
Fix character sheet header

See merge request teaml5r/l5r5e!27
2023-05-04 14:02:04 +00:00
Bragma
69e08b6a33 Fix character sheet header 2023-05-04 14:02:03 +00:00
Vlyan
723e7cd934 added changelog for 1.9.6 2023-04-05 14:30:52 +02:00
Vlyan
2cefd42c28 Merge branch 'conditions' into 'dev'
Added effects panel to both pc and npc.

See merge request teaml5r/l5r5e!26
2023-04-05 12:10:39 +00:00
Bragma
04bfe38136 Added effects panel to both pc and npc. 2023-04-05 12:10:39 +00:00
Vlyan
20d2137a15 Merge branch 'current-stance' into 'dev'
Show current stance on rings panel

See merge request teaml5r/l5r5e!25
2023-03-30 07:06:05 +00:00
Bragma
0916dab259 Show current stance on rings panel 2023-03-30 07:06:05 +00:00
Vlyan
8132a0b459 Journal articles : more subtle article layer (0.5 -> 0.25) 2023-03-26 11:01:38 +02:00
Vlyan
1afa5d151d fix #44 Lists not showing correctly in journal 2023-03-22 08:57:34 +01:00
Vlyan
242d31438b fix #44 Lists not showing correctly in journal 2023-03-22 08:56:26 +01:00
Vlyan
b5def3fb93 added wiki page "Using CUB for Modifiers" 2023-01-13 09:47:03 +01:00
Vlyan
71c03b8a5d Characters can now have bonus endurance/composure/focus/vigilance from conditions (thx to Perkuns). 2023-01-11 10:18:04 +01:00
Vlyan
d6ba994ae6 Merge branch 'bonusAttributesFromConditions' into 'dev'
Actors can now have bonus endurance/composure/focus/vigilance from conditions

See merge request teaml5r/l5r5e!24
2023-01-09 21:21:20 +00:00
Perkuns
cab98451cd Actors can now have bonus endurance/composure/focus/vigilance from conditions 2023-01-09 21:21:20 +00:00
Vlyan
ac43982f24 Release v1.9.4 2022-12-31 13:58:07 +01:00
Vlyan
c5c5d173db Fix prepared settings bugs ("null" -> "actor") 2022-12-31 13:56:19 +01:00
Vlyan
9446e08433 Compendiums : Added Celestial Realms missing Titles : Bond with a spirit and Moon cultist. 2022-12-31 13:26:13 +01:00
Vlyan
14e18fdc8e updated package and glup file with newser version of sass 2022-12-09 16:19:39 +01:00
Vlyan
b219f4aee6 GM Toolbox : Left clic do only actors with an active player as owner. 2022-10-11 14:36:34 +02:00
Vlyan
5b573a5ed0 CSS Fix for combat tracker : #combat-round -> .combat-tracker-header 2022-09-29 18:14:47 +02:00
Vlyan
1dce3a5444 v1.9.2 - Advancements ownership fix 2022-09-09 09:49:40 +02:00
35 changed files with 10002 additions and 2360 deletions

View File

@@ -1,6 +1,26 @@
# Changelog # Changelog
Date format : day/month/year Date format : day/month/year
## 1.9.6 - 14/05/2023 - Bragma's QoL
All these changes are thanks to Bragma.
- Added effects panel to both pc and npc (!26).
- Added a underline on rings to show current stance (!25).
- Fix Lists not showing correctly in journal (#44).
## 1.9.5 - 11/01/2023 - Adding Modifiers
- Characters can now have bonus endurance/composure/focus/vigilance from conditions (thx to Perkuns).
## 1.9.4 - 31/12/2022 - Last bugfixes of the Year !
- Fix prepared settings bugs (trackers icons sometimes disappears).
- GM Toolbox : Left clic do only actors with an active player as owner.
- Compendiums : Added Celestial Realms missing Titles : `Bond with a spirit` and `Moon cultist`.
## 1.9.3 - 29/09/2022 - Combat Tracker
- Fix for L5R combat tracker bar who have disappeared.
## 1.9.2 - 09/09/2022 - Advancements Again
- Fix for advancements ownership (items in items).
## 1.9.1 - 08/09/2022 - Advancements Bugfixes ## 1.9.1 - 08/09/2022 - Advancements Bugfixes
- Fix for advancements fail to add new items ("_id" readonly error. see #42). - Fix for advancements fail to add new items ("_id" readonly error. see #42).

View File

@@ -1,7 +1,7 @@
// Requires // Requires
const gulp = require("gulp"); const gulp = require("gulp");
const prefix = require("gulp-autoprefixer"); const prefix = require("gulp-autoprefixer");
const sass = require("gulp-sass"); const sass = require("gulp-sass")(require('sass'));
const browserSync = require("browser-sync"); const browserSync = require("browser-sync");
/* ----------------------------------------- */ /* ----------------------------------------- */

11930
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -20,22 +20,16 @@
"homepage": "https://gitlab.com/teaml5r/l5r5e#readme", "homepage": "https://gitlab.com/teaml5r/l5r5e#readme",
"devDependencies": { "devDependencies": {
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"browser-sync": "^2.23.7", "browser-sync": "^2.27.10",
"eslint": "^7.15.0", "eslint": "^8.27.0",
"eslint-config-prettier": "^6.15.0", "eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^3.1.4", "eslint-plugin-prettier": "^4.2.1",
"gulp": "^4.0.2", "gulp": "^4.0.2",
"gulp-autoprefixer": "^7.0.1", "gulp-autoprefixer": "^8.0.0",
"gulp-sass": "^4.1.0", "gulp-sass": "^5.1.0",
"husky": "^4.3.0",
"lint-staged": "^10.5.1", "lint-staged": "^10.5.1",
"node-sass": "^4.14.1", "sass": "^1.56.1",
"prettier": "^2.1.2" "prettier": "^2.7.1"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
}, },
"lint-staged": { "lint-staged": {
"*.js": "eslint --cache --fix", "*.js": "eslint --cache --fix",

View File

@@ -274,6 +274,18 @@
"name": "Yōkai Hunter (WIP)", "name": "Yōkai Hunter (WIP)",
"description": "<h2>Cursus</h2><table><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Compétences Martiales</td><td>Grp. de comp.</td></tr><tr><td>Commandement</td><td>Compétence</td></tr><tr><td>Courtoisie</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.L5RCoreKih000030\" data-pack=\"l5r5e.core-techniques-kiho\" data-id=\"L5RCoreKih000030\">(kiho) Blistering Retribution (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000070\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000070\">(kata) Swallows Dart Style (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000071\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000071\">(kata) Tigers Lunge Style (WIP)</a> (prereq)</td><td>Technique</td></tr></table>", "description": "<h2>Cursus</h2><table><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Compétences Martiales</td><td>Grp. de comp.</td></tr><tr><td>Commandement</td><td>Compétence</td></tr><tr><td>Courtoisie</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.L5RCoreKih000030\" data-pack=\"l5r5e.core-techniques-kiho\" data-id=\"L5RCoreKih000030\">(kiho) Blistering Retribution (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000070\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000070\">(kata) Swallows Dart Style (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000071\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000071\">(kata) Tigers Lunge Style (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
"book_reference": "Décret de la nature" "book_reference": "Décret de la nature"
},
{
"id": "Bond with a spirit",
"name": "Bond with a spirit (WIP)",
"description": "<h2>Cursus</h2><table><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Esthétique</td><td>Compétence</td></tr><tr><td>Jeux</td><td>Compétence</td></tr><tr><td>Méditation</td><td>Compétence</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Invocations (Eléments de l'esprit) de rang 1</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000002\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000002\">(ritual) Communier avec les esprits</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000022\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000022\">(ritual) Blessing of Fertile Fields (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
"book_reference": "Les Royaumes Célestes"
},
{
"id": "Moon cultist",
"name": "Moon cultist (WIP)",
"description": "<h2>Cursus</h2><table><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Composition</td><td>Compétence</td></tr><tr><td>Courtoisie</td><td>Compétence</td></tr><tr><td>Forme</td><td>Compétence</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Invocations de lEau de rang 1-2</a></td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-invocations.L5RCoreInv000052\" data-pack=\"l5r5e.core-techniques-invocations\" data-id=\"L5RCoreInv000052\">(invocation) Mains des marées</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000010\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000010\">(ritual) Whispers to the Moon (Moon Cultist) (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
"book_reference": "Les Royaumes Célestes"
} }
] ]
} }

View File

@@ -374,7 +374,7 @@
"mass_battle": "Mass Battle", "mass_battle": "Mass Battle",
"prepared_true": "Prepared", "prepared_true": "Prepared",
"prepared_false": "Surprised", "prepared_false": "Surprised",
"prepared_null": "Defined in the character sheet (default)", "prepared_actor": "Defined in the character sheet (default)",
"already_set": "Your initiative has already been determined" "already_set": "Your initiative has already been determined"
} }
}, },

View File

@@ -374,7 +374,7 @@
"mass_battle": "Batalla a gran escala", "mass_battle": "Batalla a gran escala",
"prepared_true": "Preparado", "prepared_true": "Preparado",
"prepared_false": "Sorprendido", "prepared_false": "Sorprendido",
"prepared_null": "Definido en la hoja de personaje (por defecto)", "prepared_actor": "Definido en la hoja de personaje (por defecto)",
"already_set": "Tu iniciativa ya ha sido establecida." "already_set": "Tu iniciativa ya ha sido establecida."
} }
}, },

View File

@@ -374,7 +374,7 @@
"mass_battle": "Bataille rangée", "mass_battle": "Bataille rangée",
"prepared_true": "Prêt(e)", "prepared_true": "Prêt(e)",
"prepared_false": "Surpris(e)", "prepared_false": "Surpris(e)",
"prepared_null": "Défini par la fiche de personnage (défaut)", "prepared_actor": "Défini par la fiche de personnage (défaut)",
"already_set": "Votre initiative a déjà été tirée" "already_set": "Votre initiative a déjà été tirée"
} }
}, },

View File

@@ -374,7 +374,7 @@
"mass_battle": "Battaglia Campale", "mass_battle": "Battaglia Campale",
"prepared_true": "Preparato", "prepared_true": "Preparato",
"prepared_false": "Sorpreso", "prepared_false": "Sorpreso",
"prepared_null": "Definito nella scheda del personaggio (default)", "prepared_actor": "Definito nella scheda del personaggio (default)",
"already_set": "La tua Iniziativa è già stata determinata." "already_set": "La tua Iniziativa è già stata determinata."
} }
}, },

View File

@@ -43,3 +43,5 @@
{"_id":"L5RCoreTit000043","name":"Forester","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"24","description":"<h2>Curriculum</h2><table><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Sentiment</td><td>Skill</td></tr><tr><td>Survival</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Rank 1-2 Earth & Water Invocations</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Rank 1-3 Shūji</a> (prereq)</td><td>Tech. Grp.</td></tr></table>","book_reference":"Writ of the Wild p.142"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]} {"_id":"L5RCoreTit000043","name":"Forester","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"24","description":"<h2>Curriculum</h2><table><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Sentiment</td><td>Skill</td></tr><tr><td>Survival</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Rank 1-2 Earth & Water Invocations</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Rank 1-3 Shūji</a> (prereq)</td><td>Tech. Grp.</td></tr></table>","book_reference":"Writ of the Wild p.142"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
{"_id":"L5RCoreTit000044","name":"Temple Abbot","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"36","description":"<h2>Curriculum</h2><table><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Culture</td><td>Skill</td></tr><tr><td>Meditation</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000004\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000004\">(ritual) Cleansing Rite</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.L5RCoreKih000025\" data-pack=\"l5r5e.core-techniques-kiho\" data-id=\"L5RCoreKih000025\">(kiho) Rejuvenating Breath</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.L5RCoreShu000011\" data-pack=\"l5r5e.core-techniques-shuji\" data-id=\"L5RCoreShu000011\">(shuji) Touchstone of Courage</a> (prereq)</td><td>Technique</td></tr></table>","book_reference":"Writ of the Wild p.143"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]} {"_id":"L5RCoreTit000044","name":"Temple Abbot","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"36","description":"<h2>Curriculum</h2><table><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Culture</td><td>Skill</td></tr><tr><td>Meditation</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000004\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000004\">(ritual) Cleansing Rite</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.L5RCoreKih000025\" data-pack=\"l5r5e.core-techniques-kiho\" data-id=\"L5RCoreKih000025\">(kiho) Rejuvenating Breath</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.L5RCoreShu000011\" data-pack=\"l5r5e.core-techniques-shuji\" data-id=\"L5RCoreShu000011\">(shuji) Touchstone of Courage</a> (prereq)</td><td>Technique</td></tr></table>","book_reference":"Writ of the Wild p.143"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
{"_id":"L5RCoreTit000045","name":"Yōkai Hunter","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"36","description":"<h2>Curriculum</h2><table><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Command</td><td>Skill</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Survival</td><td>Skill</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.L5RCoreKih000030\" data-pack=\"l5r5e.core-techniques-kiho\" data-id=\"L5RCoreKih000030\">(kiho) Blistering Retribution</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000070\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000070\">(kata) Swallows Dart Style</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000071\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000071\">(kata) Tigers Lunge Style</a> (prereq)</td><td>Technique</td></tr></table>","book_reference":"Writ of the Wild p.143"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]} {"_id":"L5RCoreTit000045","name":"Yōkai Hunter","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"36","description":"<h2>Curriculum</h2><table><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Command</td><td>Skill</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Survival</td><td>Skill</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.L5RCoreKih000030\" data-pack=\"l5r5e.core-techniques-kiho\" data-id=\"L5RCoreKih000030\">(kiho) Blistering Retribution</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000070\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000070\">(kata) Swallows Dart Style</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000071\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000071\">(kata) Tigers Lunge Style</a> (prereq)</td><td>Technique</td></tr></table>","book_reference":"Writ of the Wild p.143"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
{"_id":"L5RCoreTit000046","name":"Bond with a spirit","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"25","description":"<h2>Curriculum</h2><table><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Aesthetics</td><td>Skill</td></tr><tr><td>Games</td><td>Skill</td></tr><tr><td>Meditation</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Rank 1 Spirit's Elements Invocations</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000002\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000002\">(ritual) Commune with the Spirits</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000022\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000022\">(ritual) Blessing of Fertile Fields</a> (prereq)</td><td>Technique</td></tr></table>","book_reference":"Celestial Realms p.140"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
{"_id":"L5RCoreTit000047","name":"Moon cultist","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"30","description":"<h2>Curriculum</h2><table><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Composition</td><td>Skill</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Fitness</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Rank 1-2 Water Invocations</a></td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-invocations.L5RCoreInv000052\" data-pack=\"l5r5e.core-techniques-invocations\" data-id=\"L5RCoreInv000052\">(invocation) Hands of the Tides</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000010\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000010\">(ritual) Whispers to the Moon (Moon Cultist)</a> (prereq)</td><td>Technique</td></tr></table>","book_reference":"Celestial Realms p.140"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}

View File

@@ -162,6 +162,13 @@ export class ActorL5r5e extends Actor {
system.composure = (Number(system.rings.earth) + Number(system.rings.water)) * 2; system.composure = (Number(system.rings.earth) + Number(system.rings.water)) * 2;
system.focus = Number(system.rings.air) + Number(system.rings.fire); system.focus = Number(system.rings.air) + Number(system.rings.fire);
system.vigilance = Math.ceil((Number(system.rings.air) + Number(system.rings.water)) / 2); system.vigilance = Math.ceil((Number(system.rings.air) + Number(system.rings.water)) / 2);
// Modifiers from conditions
const modifiers = system.modifiers?.character;
system.endurance = system.endurance + (Number(modifiers?.endurance) || 0);
system.composure = system.composure + (Number(modifiers?.composure) || 0);
system.focus = system.focus + (Number(modifiers?.focus) || 0);
system.vigilance = system.vigilance + (Number(modifiers?.vigilance) || 0);
} }
/** /**
@@ -278,6 +285,14 @@ export class ActorL5r5e extends Actor {
return this.type === "army"; return this.type === "army";
} }
/**
* Return true if this actor have an active player as owner
* @returns {boolean}
*/
get hasPlayerOwnerActive() {
return game.users.find((u) => !!u.active && u.character?.id === this.id);
}
/** /**
* Return true if this actor can do a initiative roll * Return true if this actor can do a initiative roll
* @returns {boolean} * @returns {boolean}
@@ -329,7 +344,7 @@ export class ActorL5r5e extends Actor {
// Prepared is a boolean or if null we get the info in the actor // Prepared is a boolean or if null we get the info in the actor
let isPrepared = this.isCharacter ? cfg.character : cfg[this.system.type]; let isPrepared = this.isCharacter ? cfg.character : cfg[this.system.type];
if (isPrepared === "null") { if (isPrepared === "actor") {
isPrepared = this.system.prepared ? "true" : "false"; isPrepared = this.system.prepared ? "true" : "false";
} }

View File

@@ -1,31 +1,27 @@
export const L5R5E = {}; export const L5R5E = {
paths: {
L5R5E.paths = { assets: `systems/l5r5e/assets/`,
assets: `systems/l5r5e/assets/`, templates: `systems/l5r5e/templates/`,
templates: `systems/l5r5e/templates/`, },
}; money: [50, 10],
stances: ["earth", "air", "water", "fire", "void"],
L5R5E.money = [50, 10]; roles: ["artisan", "bushi", "courtier", "monk", "sage", "shinobi", "shugenja"],
L5R5E.stances = ["earth", "air", "water", "fire", "void"]; xp: {
L5R5E.roles = ["artisan", "bushi", "courtier", "monk", "sage", "shinobi", "shugenja"]; costPerRank: [0, 20, 24, 32, 44, 60],
bondCostPerRank: [0, 3, 4, 6, 8, 10],
L5R5E.xp = { ringCostMultiplier: 3,
costPerRank: [0, 20, 24, 32, 44, 60], skillCostMultiplier: 2,
bondCostPerRank: [0, 3, 4, 6, 8, 10], techniqueCost: 3,
ringCostMultiplier: 3, },
skillCostMultiplier: 2, regex: {
techniqueCost: 3, techniqueDifficulty: /^@([TS]):([^|]+?)(?:\|(min|max)(?:\(([^)]+?)\))?)?$/,
}; },
initiativeSkills: {
L5R5E.regex = { intrigue: "sentiment",
techniqueDifficulty: /^@([TS]):([^|]+?)(?:\|(min|max)(?:\(([^)]+?)\))?)?$/, duel: "meditation",
}; skirmish: "tactics",
mass_battle: "command",
L5R5E.initiativeSkills = { },
intrigue: "sentiment",
duel: "meditation",
skirmish: "tactics",
mass_battle: "command",
}; };
// *** Techniques *** // *** Techniques ***

View File

@@ -91,7 +91,7 @@ export class GmMonitor extends FormApplication {
actors = game.actors.filter((e) => ids.includes(e.id)); actors = game.actors.filter((e) => ids.includes(e.id));
} else { } else {
// If empty add pc with owner // If empty add pc with owner
actors = game.actors.filter((actor) => actor.type === "character" && actor.hasPlayerOwner); actors = game.actors.filter((actor) => actor.type === "character" && actor.hasPlayerOwnerActive);
this._saveActorsIds(); this._saveActorsIds();
} }

View File

@@ -202,7 +202,7 @@ export class GmToolbox extends FormApplication {
} }
// Manage left/right button // Manage left/right button
if (!isAll && (!actor.isCharacter || !actor.hasPlayerOwner)) { if (!isAll && (!actor.isCharacter || !actor.hasPlayerOwnerActive)) {
continue; continue;
} }

View File

@@ -175,7 +175,7 @@ export default class HooksL5r5e {
if (elmt.length > 0) { if (elmt.length > 0) {
elmt.replaceWith(tpl); elmt.replaceWith(tpl);
} else { } else {
html.find("#combat-round").append(tpl); html.find(".combat-tracker-header").append(tpl);
} }
// Buttons Listeners // Buttons Listeners
@@ -198,9 +198,9 @@ export default class HooksL5r5e {
} }
const rev = event.which === 3; const rev = event.which === 3;
const nextValue = { const nextValue = {
false: rev ? "true" : "null", false: rev ? "true" : "actor",
true: rev ? "null" : "false", true: rev ? "actor" : "false",
null: rev ? "false" : "true", actor: rev ? "false" : "true",
}; };
game.settings.set("l5r5e", `initiative-prepared-${preparedId}`, nextValue[prepared[preparedId]]); game.settings.set("l5r5e", `initiative-prepared-${preparedId}`, nextValue[prepared[preparedId]]);
}); });

View File

@@ -224,7 +224,9 @@ export class ItemL5r5e extends Item {
} }
// Copy the parent permission to the sub item // Copy the parent permission to the sub item
item.ownership = this.ownership; // In v10 actor's items inherit the ownership from the actor, but theirs ownership do not reflect that.
// So we must take actor's ownership for sub-item
item.ownership = this.actor?.ownership ?? this.ownership;
// Tag parent (flags won't work as we have no id in db) // Tag parent (flags won't work as we have no id in db)
item.system.parent_id = this.getParentsIds(); item.system.parent_id = this.getParentsIds();

View File

@@ -3,16 +3,16 @@
* @extends {JournalSheet} * @extends {JournalSheet}
*/ */
export class BaseJournalSheetL5r5e extends JournalSheet { export class BaseJournalSheetL5r5e extends JournalSheet {
// /** @override */ /** @override */
// static get defaultOptions() { static get defaultOptions() {
// return foundry.utils.mergeObject(super.defaultOptions, { return foundry.utils.mergeObject(super.defaultOptions, {
// classes: ["l5r5e", "sheet", "journal"], // app window-app sheet journal-sheet classes: ["sheet", "journal-sheet", "journal-entry", "l5r5e", "sheet", "journal"], // sheet journal-sheet journal-entry
// template: CONFIG.l5r5e.paths.templates + "journal/journal-sheet.html", // template: CONFIG.l5r5e.paths.templates + "journal/journal-sheet.html",
// width: 520, // width: 520,
// height: 480, // height: 480,
// tabs: [{ navSelector: ".journal-tabs", contentSelector: ".journal-body", initial: "description" }], // tabs: [{ navSelector: ".journal-tabs", contentSelector: ".journal-body", initial: "description" }],
// }); });
// } }
/** /**
* Add the SendToChat button on top of sheet * Add the SendToChat button on top of sheet

View File

@@ -13,6 +13,7 @@ export const PreloadTemplates = async function () {
`${tpl}actors/character/inventory.html`, `${tpl}actors/character/inventory.html`,
`${tpl}actors/character/narrative.html`, `${tpl}actors/character/narrative.html`,
`${tpl}actors/character/rings.html`, `${tpl}actors/character/rings.html`,
`${tpl}actors/character/effects.html`,
`${tpl}actors/character/skill.html`, `${tpl}actors/character/skill.html`,
`${tpl}actors/character/social.html`, `${tpl}actors/character/social.html`,
`${tpl}actors/character/stance.html`, `${tpl}actors/character/stance.html`,
@@ -25,6 +26,7 @@ export const PreloadTemplates = async function () {
`${tpl}actors/npc/inventory.html`, `${tpl}actors/npc/inventory.html`,
`${tpl}actors/npc/narrative.html`, `${tpl}actors/npc/narrative.html`,
`${tpl}actors/npc/rings.html`, `${tpl}actors/npc/rings.html`,
`${tpl}actors/npc/effects.html`,
`${tpl}actors/npc/social.html`, `${tpl}actors/npc/social.html`,
`${tpl}actors/npc/skill.html`, `${tpl}actors/npc/skill.html`,
`${tpl}actors/npc/techniques.html`, `${tpl}actors/npc/techniques.html`,

View File

@@ -85,7 +85,7 @@ export const RegisterSettings = function () {
scope: "world", scope: "world",
config: false, config: false,
type: String, type: String,
default: "null", default: "actor",
onChange: () => { onChange: () => {
game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor"); game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor");
ui.combat.render(true); ui.combat.render(true);
@@ -96,7 +96,7 @@ export const RegisterSettings = function () {
scope: "world", scope: "world",
config: false, config: false,
type: String, type: String,
default: "null", default: "actor",
onChange: () => { onChange: () => {
game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor"); game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor");
ui.combat.render(true); ui.combat.render(true);
@@ -107,7 +107,7 @@ export const RegisterSettings = function () {
scope: "world", scope: "world",
config: false, config: false,
type: String, type: String,
default: "null", default: "actor",
onChange: () => { onChange: () => {
game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor"); game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor");
ui.combat.render(true); ui.combat.render(true);

File diff suppressed because one or more lines are too long

View File

@@ -323,7 +323,7 @@ sup {
&-false:before { &-false:before {
content: "\f070"; content: "\f070";
} }
&-null:before { &-actor:before {
content: "\f2a8"; content: "\f2a8";
} }
} }

View File

@@ -96,7 +96,7 @@
width: 100%; width: 100%;
line-height: 2rem; line-height: 2rem;
font-size: 0.75rem; font-size: 0.75rem;
margin: 0 0 0.5rem; margin: 0.5rem 0;
text-align: center; text-align: center;
li { li {
flex: 1; flex: 1;

View File

@@ -29,7 +29,9 @@
line-height: 0; line-height: 0;
float: right; float: right;
} }
label.stance-active strong {
text-decoration: underline 2px;
}
input { input {
position: absolute; position: absolute;
height: 2rem; height: 2rem;

View File

@@ -23,7 +23,6 @@
} }
&.actor { &.actor {
.sheet-header { .sheet-header {
height: 26rem;
h1 { h1 {
flex: auto; flex: auto;
margin: 0 0 0.25rem 0.5rem; margin: 0 0 0.25rem 0.5rem;
@@ -53,6 +52,37 @@
.sheet-body { .sheet-body {
flex: 0 0 100%; flex: 0 0 100%;
align-items: flex-start; align-items: flex-start;
.effects {
clear: both;
display: flex;
flex-wrap: wrap;
gap: 2px 4px;
.effect-container {
border: 1px solid #5a6e5a;
border-radius: 4px;
background-color: rgba(0, 0, 0, 0.4);
padding: 3px;
}
.effect-icon {
width: 16px;
height: 16px;
background-repeat: no-repeat;
background-size: contain;
float: left;
}
.effect-name {
vertical-align: top;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: $white;
float: right;
margin-left: 4px;
font-size: 14px;
line-height: 16px;
max-width: 140px;
}
}
} }
section, section,
article { article {
@@ -127,13 +157,9 @@
} }
} }
.header-fields { .header-fields {
position: relative;
flex: 0 0 100%;
h2 { h2 {
font-family: $font-secondary; font-family: $font-secondary;
font-size: 1rem; font-size: 1rem;
float: left;
width: 30%;
padding: 0.25rem 0.25rem 0; padding: 0.25rem 0.25rem 0;
margin: 1rem 20% 0 0; margin: 1rem 20% 0 0;
text-align: center; text-align: center;
@@ -234,18 +260,22 @@
} }
} }
} }
.rings { .mid-wrapper {
float: left; display: flex;
}
.side-col {
width: 30%;
}
.central-col {
width: 40%; width: 40%;
}
.rings {
padding: 0; padding: 0;
position: relative; margin-top: 1rem;
top: -1.5rem;
} }
.social-content, .social-content,
.attributes-wrapper { .attributes-wrapper {
flex: none; flex: none;
float: left;
width: 30%;
flex-wrap: wrap; flex-wrap: wrap;
display: flex; display: flex;
padding: 0.5rem 0 0 0.25rem; padding: 0.5rem 0 0 0.25rem;
@@ -546,7 +576,7 @@
} }
} }
article { article {
background: $l5r5e-white; background: $l5r5e-white-light;
padding: 0.5rem; padding: 0.5rem;
flex-wrap: wrap; flex-wrap: wrap;
min-height: calc(100% - 3.25rem); min-height: calc(100% - 3.25rem);
@@ -893,6 +923,18 @@
flex: 100%; flex: 100%;
} }
} }
// Restore list style
&.journal .journal-page-content {
ul {
margin: 0.5rem 0;
}
li {
list-style-type: initial;
margin: 0.5rem 0 0.5rem 1.5rem;
padding: 0;
}
}
} }
// Lang Adjust. // Lang Adjust.
&.sheet { &.sheet {

View File

@@ -602,8 +602,9 @@ button {
} }
// Combat // Combat
#combat { #combat,
#combat-round { #combat-popout {
.combat-tracker-header {
.encounters { .encounters {
h3 { h3 {
font-size: 0.85rem; font-size: 0.85rem;

View File

@@ -7,11 +7,11 @@
"changelog": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md", "changelog": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md",
"license": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/LICENSE.md", "license": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/LICENSE.md",
"manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json", "manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json",
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.9.1/raw/l5r5e.zip?job=build", "download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.9.6/raw/l5r5e.zip?job=build",
"version": "1.9.1", "version": "1.9.6",
"compatibility": { "compatibility": {
"minimum": 10, "minimum": 10,
"verified": "10.284" "verified": "10.291"
}, },
"manifestPlusVersion": "1.2.0", "manifestPlusVersion": "1.2.0",
"socket": true, "socket": true,

View File

@@ -1,27 +1,39 @@
<form class="{{cssClass}}" data-lang="{{localize 'I18N.Language'}}" autocomplete="off"> <form class="{{cssClass}}" data-lang="{{localize 'I18N.Language'}}" autocomplete="off">
{{!-- L5R Button bar --}} {{!-- L5R Button bar --}}
<div class="l5r-buttons-bar"> <div class="l5r-buttons-bar">
{{#each l5rHeaderButtons}} {{#each l5rHeaderButtons}}
<a class="l5r-header-button {{this.class}}"><i class="{{this.icon}}"></i>{{localize this.label}}</a> <a class="l5r-header-button {{this.class}}"><i class="{{this.icon}}"></i>{{localize this.label}}</a>
{{/each}} {{/each}}
</div> </div>
{{!-- Sheet Header --}} {{!-- Sheet Header --}}
<header class="sheet-header"> <header class="sheet-header">
<img class="profile-img dragndrop-actor-uuid pointer" src="{{data.img}}" {{#if data.editable_not_soft_locked}}data-edit="img"{{/if}} data-actor-uuid="{{actor.uuid}}" draggable="true" title="{{data.name}}"/> <img class="profile-img dragndrop-actor-uuid pointer" src="{{data.img}}" {{#if
data.editable_not_soft_locked}}data-edit="img" {{/if}} data-actor-uuid="{{actor.uuid}}" draggable="true"
title="{{data.name}}" />
<div class="header-fields identity-wrapper"> <div class="header-fields identity-wrapper">
<h1 class="charname"><input name="name" type="text" value="{{data.name}}" placeholder="Name" {{^if data.editable_not_soft_locked}}disabled{{/if}}/></h1> <h1 class="charname">
<input name="name" type="text" value="{{data.name}}" placeholder="Name" {{^if
data.editable_not_soft_locked}}disabled{{/if}} />
</h1>
{{> 'systems/l5r5e/templates/actors/character/identity.html'}} {{> 'systems/l5r5e/templates/actors/character/identity.html'}}
</div> </div>
<div class="header-fields"> <div class="header-fields mid-wrapper">
<h2>{{localize 'l5r5e.social.title'}}</h2> <div class="side-col">
<h2 class="right">{{localize 'l5r5e.attributes.title'}}</h2> <h2>{{localize 'l5r5e.social.title'}}</h2>
{{> 'systems/l5r5e/templates/actors/character/social.html'}} {{> 'systems/l5r5e/templates/actors/character/social.html'}}
{{> 'systems/l5r5e/templates/actors/character/rings.html'}} </div>
{{> 'systems/l5r5e/templates/actors/character/attributes.html'}} <div class="central-col">{{> 'systems/l5r5e/templates/actors/character/rings.html'}}</div>
<div class="side-col">
<h2 class="right">{{localize 'l5r5e.attributes.title'}}</h2>
{{> 'systems/l5r5e/templates/actors/character/attributes.html'}}
</div>
</div> </div>
</header> </header>
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="sheet-body"> <section class="sheet-body">
{{!-- Active effects --}}
{{> 'systems/l5r5e/templates/actors/character/effects.html'}}
{{!-- Sheet Tab Navigation --}} {{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary"> <nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="skills">{{localize 'l5r5e.skills.title'}}</a> <a class="item" data-tab="skills">{{localize 'l5r5e.skills.title'}}</a>
@@ -34,8 +46,8 @@
{{!-- Skills Tab --}} {{!-- Skills Tab --}}
<article class="tab skills" data-group="primary" data-tab="skills"> <article class="tab skills" data-group="primary" data-tab="skills">
<ul class="skills-wrapper"> <ul class="skills-wrapper">
{{#each data.system.skills as |category id|}} {{#each data.system.skills as |category id|}} {{>
{{> 'systems/l5r5e/templates/actors/character/category.html' category=category categoryId=id data=../data}} 'systems/l5r5e/templates/actors/character/category.html' category=category categoryId=id data=../data}}
{{/each}} {{/each}}
</ul> </ul>
{{> 'systems/l5r5e/templates/actors/character/techniques.html'}} {{> 'systems/l5r5e/templates/actors/character/techniques.html'}}
@@ -61,4 +73,4 @@
{{> 'systems/l5r5e/templates/actors/character/experience.html'}} {{> 'systems/l5r5e/templates/actors/character/experience.html'}}
</article> </article>
</section> </section>
</form> </form>

View File

@@ -0,0 +1,8 @@
<ul class="effects">
{{#each actor.effects as |effect|}}
<li class="effect-container" title="{{label}}">
<div class="effect-icon" style="background-image: url({{effect.icon}})"></div>
<div class="effect-name"><label>{{label}}</label></div>
</li>
{{/each}}
</ul>

View File

@@ -1,34 +1,34 @@
<ul class="rings"> <ul class="rings">
<li id="earth"> <li id="earth">
<label class="earth"> <label class="earth {{#ifCond 'earth' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_earth dice-picker rollable" data-ring="earth"></i> <i class="i_earth dice-picker rollable" data-ring="earth"></i>
<strong>{{localizeRing 'earth'}}</strong> <strong>{{localizeRing 'earth'}}</strong>
<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}}/> <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> </label>
</li> </li>
<li id="air"> <li id="air">
<label class="air"> <label class="air {{#ifCond 'air' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_air dice-picker rollable" data-ring="air"></i> <i class="i_air dice-picker rollable" data-ring="air"></i>
<strong>{{localizeRing 'air'}}</strong> <strong>{{localizeRing 'air'}}</strong>
<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}}/> <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> </label>
</li> </li>
<li id="water"> <li id="water">
<label class="water"> <label class="water {{#ifCond 'water' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_water dice-picker rollable" data-ring="water"></i> <i class="i_water dice-picker rollable" data-ring="water"></i>
<strong>{{localizeRing 'water'}}</strong> <strong>{{localizeRing 'water'}}</strong>
<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}}/> <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> </label>
</li> </li>
<li id="fire"> <li id="fire">
<label class="fire"> <label class="fire {{#ifCond 'fire' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_fire dice-picker rollable" data-ring="fire"></i> <i class="i_fire dice-picker rollable" data-ring="fire"></i>
<strong>{{localizeRing 'fire'}}</strong> <strong>{{localizeRing 'fire'}}</strong>
<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}}/> <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> </label>
</li> </li>
<li id="void"> <li id="void">
<label class="void"> <label class="void {{#ifCond 'void' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_void dice-picker rollable" data-ring="void"></i> <i class="i_void dice-picker rollable" data-ring="void"></i>
<strong>{{localizeRing 'void'}}</strong> <strong>{{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}}/> <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}}/>

View File

@@ -1,27 +1,39 @@
<form class="{{cssClass}}" data-lang="{{localize 'I18N.Language'}}" autocomplete="off"> <form class="{{cssClass}}" data-lang="{{localize 'I18N.Language'}}" autocomplete="off">
{{!-- L5R Button bar --}} {{!-- L5R Button bar --}}
<div class="l5r-buttons-bar"> <div class="l5r-buttons-bar">
{{#each l5rHeaderButtons}} {{#each l5rHeaderButtons}}
<a class="l5r-header-button {{this.class}}"><i class="{{this.icon}}"></i>{{localize this.label}}</a> <a class="l5r-header-button {{this.class}}"><i class="{{this.icon}}"></i>{{localize this.label}}</a>
{{/each}} {{/each}}
</div> </div>
{{!-- Sheet Header --}} {{!-- Sheet Header --}}
<header class="sheet-header"> <header class="sheet-header">
<div class="header-fields identity-wrapper"> <div class="header-fields identity-wrapper">
<img class="profile-img dragndrop-actor-uuid pointer" src="{{data.img}}" {{#if data.editable_not_soft_locked}}data-edit="img"{{/if}} data-actor-uuid="{{actor.uuid}}" draggable="true" title="{{data.name}}"/> <img class="profile-img dragndrop-actor-uuid pointer" src="{{data.img}}" {{#if
<h1 class="charname"><input name="name" type="text" value="{{data.name}}" placeholder="Name" {{^if data.editable_not_soft_locked}}disabled{{/if}}/></h1> data.editable_not_soft_locked}}data-edit="img" {{/if}} data-actor-uuid="{{actor.uuid}}" draggable="true"
title="{{data.name}}" />
<h1 class="charname">
<input name="name" type="text" value="{{data.name}}" placeholder="Name" {{^if
data.editable_not_soft_locked}}disabled{{/if}} />
</h1>
{{> 'systems/l5r5e/templates/actors/npc/identity.html'}} {{> 'systems/l5r5e/templates/actors/npc/identity.html'}}
</div> </div>
<div class="header-fields"> <div class="header-fields mid-wrapper">
<h2>{{localize 'l5r5e.social.title'}}</h2> <div class="side-col">
<h2 class="right">{{localize 'l5r5e.attributes.title'}}</h2> <h2>{{localize 'l5r5e.social.title'}}</h2>
{{> 'systems/l5r5e/templates/actors/npc/social.html'}} {{> 'systems/l5r5e/templates/actors/npc/social.html'}}
{{> 'systems/l5r5e/templates/actors/npc/rings.html'}} </div>
{{> 'systems/l5r5e/templates/actors/npc/attributes.html'}} <div class="central-col">{{> 'systems/l5r5e/templates/actors/npc/rings.html'}}</div>
<div class="side-col">
<h2 class="right">{{localize 'l5r5e.attributes.title'}}</h2>
{{> 'systems/l5r5e/templates/actors/npc/attributes.html'}}
</div>
</div> </div>
</header> </header>
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="sheet-body"> <section class="sheet-body">
{{!-- Active effects --}}
{{> 'systems/l5r5e/templates/actors/npc/effects.html'}}
{{!-- Skills No Tab --}} {{!-- Skills No Tab --}}
{{> 'systems/l5r5e/templates/actors/npc/skill.html'}} {{> 'systems/l5r5e/templates/actors/npc/skill.html'}}
@@ -45,9 +57,9 @@
{{!-- Conflict Tab --}} {{!-- Conflict Tab --}}
<article class="tab conflict" data-group="primary" data-tab="conflict"> <article class="tab conflict" data-group="primary" data-tab="conflict">
{{> 'systems/l5r5e/templates/actors/npc/conflict.html'}} {{> 'systems/l5r5e/templates/actors/npc/conflict.html'}} {{>
{{> 'systems/l5r5e/templates/items/weapon/weapons.html'}} 'systems/l5r5e/templates/items/weapon/weapons.html'}} {{>
{{> 'systems/l5r5e/templates/items/armor/armors.html'}} 'systems/l5r5e/templates/items/armor/armors.html'}}
</article> </article>
{{!-- Inventory Tab --}} {{!-- Inventory Tab --}}
@@ -55,4 +67,4 @@
{{> 'systems/l5r5e/templates/actors/npc/inventory.html'}} {{> 'systems/l5r5e/templates/actors/npc/inventory.html'}}
</article> </article>
</section> </section>
</form> </form>

View File

@@ -0,0 +1,8 @@
<ul class="effects">
{{#each actor.effects as |effect|}}
<li class="effect-container" title="{{label}}">
<div class="effect-icon" style="background-image: url({{effect.icon}})"></div>
<div class="effect-name"><label>{{label}}</label></div>
</li>
{{/each}}
</ul>

View File

@@ -1,34 +1,34 @@
<ul class="rings"> <ul class="rings">
<li id="earth"> <li id="earth">
<label class="earth"> <label class="earth {{#ifCond 'earth' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_earth dice-picker rollable" data-ring="earth"></i> <i class="i_earth dice-picker rollable" data-ring="earth"></i>
<strong>{{localizeRing 'earth'}}</strong> <strong>{{localizeRing 'earth'}}</strong>
<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}}/> <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> </label>
</li> </li>
<li id="air"> <li id="air">
<label class="air"> <label class="air {{#ifCond 'air' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_air dice-picker rollable" data-ring="air"></i> <i class="i_air dice-picker rollable" data-ring="air"></i>
<strong>{{localizeRing 'air'}}</strong> <strong>{{localizeRing 'air'}}</strong>
<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}}/> <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> </label>
</li> </li>
<li id="water"> <li id="water">
<label class="water"> <label class="water {{#ifCond 'water' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_water dice-picker rollable" data-ring="water"></i> <i class="i_water dice-picker rollable" data-ring="water"></i>
<strong>{{localizeRing 'water'}}</strong> <strong>{{localizeRing 'water'}}</strong>
<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}}/> <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> </label>
</li> </li>
<li id="fire"> <li id="fire">
<label class="fire"> <label class="fire {{#ifCond 'fire' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_fire dice-picker rollable" data-ring="fire"></i> <i class="i_fire dice-picker rollable" data-ring="fire"></i>
<strong>{{localizeRing 'fire'}}</strong> <strong>{{localizeRing 'fire'}}</strong>
<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}}/> <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> </label>
</li> </li>
<li id="void"> <li id="void">
<label class="void"> <label class="void {{#ifCond 'void' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_void dice-picker rollable" data-ring="void"></i> <i class="i_void dice-picker rollable" data-ring="void"></i>
<strong>{{localizeRing 'void'}}</strong> <strong>{{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}}/> <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}}/>

View File

@@ -8,6 +8,7 @@
- [Symbols replacement list](users/symbols.md) - [Symbols replacement list](users/symbols.md)
- [Advanced : Techniques skill and difficulty syntaxe](users/techniques-syntaxe.md) - [Advanced : Techniques skill and difficulty syntaxe](users/techniques-syntaxe.md)
- [Advanced : Custom Compendiums](users/custom-compendiums.md) - [Advanced : Custom Compendiums](users/custom-compendiums.md)
- [Advanced : Using CUB for modifiers](users/cub-modifiers.md)
## For developers ## For developers
- [System helping (Contribute)](dev/system-helping.md) - [System helping (Contribute)](dev/system-helping.md)

View File

@@ -0,0 +1,49 @@
# Using CUB for Modifiers
> ⚠ The module [Combat Utility Belt](https://foundryvtt.com/packages/combat-utility-belt) is required.
## Attributes modifiers
Replace `<attribute>` with actual attribute (i.e. `endurance`, `vigilance`, `focus`, `composure`) and `<number>` with actual number to be added.
When setup in CUB this would modify PC derived attributes to increase or reduce them by the number given.
Allows automating certain invocations and item effects (such as the cursed Kama from Sins of Regret supplement).
### For `character` type
Syntaxe:
> system.modifiers.character.`<attribute>` += `<number>`
Examples:
> system.modifiers.character.endurance += 1 // add 1
> <br>system.modifiers.character.focus += -2 // remove 2
### For `adversary` or `minion` types
Syntaxe:
> system.`<attribute>` += `<number>`
Exemples:
> system.vigilance += 1 // add 1
> <br>system.composure += -2 // remove 2
## Rings/Skills modifiers
Both PCs and NPCs can have their skills and rings increased as well by conditions (should you wish to ignore some of the RAW).
Syntaxe:
> system.rings.`<ring>` += `<number>`
> <br>system.skills.`<skillGroup>`.`<skill>` += `<number>` // for PCs
> <br>system.skills.`<skillGroup>` += `<number>` // for NPCs
Exemples:
> system.rings.earth += 1
> <br>system.skills.artisan.aesthetics += 1 // for PCs
> <br>system.skills.martial += -1 // for NPCs
The above need to be setup as conditions using CUB at the moment so that they can be added/removed as required.
Regarding skills and rings modifiers, I believe you would need to remove them temporarily for advancements as it might cause extra XP to be spent, but yet to test it fully.

View File

@@ -24,7 +24,7 @@ Nothing fancy, just accept when FoundryVTT prompt you to download or activate th
| Module name | Notes | | Module name | Notes |
|------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Babele](https://foundryvtt.com/packages/babele) | Required for non english compendium translation | | [Babele](https://foundryvtt.com/packages/babele) | Required for non english compendium translation |
| [Permission Viewer](https://foundryvtt.com/packages/permission_viewer) | Lets you see instantly who has permissions to see what item | | [Ownership Viewer](https://foundryvtt.com/packages/permission_viewer) | Lets you see instantly who has permissions to see what item |
| [Dice So Nice!](https://foundryvtt.com/packages/dice-so-nice) | Add 3D dices that bounce on the screen when you roll dice | | [Dice So Nice!](https://foundryvtt.com/packages/dice-so-nice) | Add 3D dices that bounce on the screen when you roll dice |
| [Small Legend of the 5 Rings Tools](https://foundryvtt.com/packages/l5r-dragruler) | Series of tools for L5R | | [Small Legend of the 5 Rings Tools](https://foundryvtt.com/packages/l5r-dragruler) | Series of tools for L5R |
| [Search Anywhere](https://foundryvtt.com/packages/searchanywhere) | Don't spent too much time searching the right technique | | [Search Anywhere](https://foundryvtt.com/packages/searchanywhere) | Don't spent too much time searching the right technique |