Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6213064020 | ||
|
|
b99e0ab952 | ||
|
|
90ea03df33 | ||
|
|
a474c6caac | ||
|
|
bc7c80f428 | ||
|
|
a5dd8e3eda | ||
|
|
72e0d22a80 | ||
|
|
3fcfa8689d | ||
|
|
acbb12333e | ||
|
|
289ec720de | ||
|
|
8fbf7f9005 | ||
|
|
71a3af85dd | ||
|
|
23db7ed2c2 | ||
|
|
cbd5af8d02 | ||
|
|
f6a91ab564 | ||
|
|
c8a37ab06f | ||
|
|
78423770b1 | ||
|
|
5444671bee | ||
|
|
d5b3a309b1 | ||
|
|
7fbce1500c | ||
|
|
27e88be49d | ||
|
|
58a4e71b32 | ||
|
|
30950a0d63 | ||
|
|
7411120841 | ||
|
|
6a3431e6a0 |
35
CHANGELOG.md
35
CHANGELOG.md
@@ -1,15 +1,42 @@
|
||||
# Changelog
|
||||
|
||||
## 1.1.1 - The Huns War
|
||||
- Fix Minion initiative
|
||||
- Fix textarea ninjo/giri
|
||||
|
||||
|
||||
## 1.1.0 - Initiative first !
|
||||
- Added initiative system :
|
||||
- Now use the score rule (the real one if you prefer)
|
||||
- Added global modifiers for Characters, Adversary and Minons in the combat tracker : Confrontation types, Prepared
|
||||
- Added sheet modifiers for Characters and Adversary: Prepared
|
||||
- Initiative buttons in character sheet now display the DicePicker and do the initiative roll
|
||||
- Change the actor stance on initiative roll in DicePicker
|
||||
- Note : Due to the lack of the Roll & Keep system, the score is computed with the full success score.
|
||||
- Spanish real translation by Alejabar (thanks !)
|
||||
- Added a GM Dialog Tool for setting global difficulty (TN) value / hidden (with DicePicker live refresh)
|
||||
- Compendium now display Ring and Rank if any in list view
|
||||
- DicePicker :
|
||||
- Fixed the initial display of "use a void point"
|
||||
- No free void point anymore
|
||||
- PC/NPC Sheet :
|
||||
- Added a visual indicator for equipped / readied
|
||||
- Now only equipped armor / weapon will show in conflict tab, and all armors/weapons now show in inventory tab
|
||||
- Xp not in curriculum are now rounded up (down before)
|
||||
- No more automation in stats for Npc (these cheaters !)
|
||||
- 20Q Pushed the step3 item's limit to 20 (10 previous)
|
||||
- Added System migration stuff
|
||||
|
||||
## 1.0.0 - First public release
|
||||
- Removed the 0ds if no skill point
|
||||
- Added initiative roll (only tactics for the moment)
|
||||
- Change color of keikogi and add on compendium
|
||||
- Machine translation for ES
|
||||
- Update Translation for 1.0.0 Release
|
||||
- 20Q added step 7 and 17 no point rule
|
||||
- 20Q added step 7 and 17 no point rule
|
||||
- Add price icon
|
||||
- Set vigilance to 1 if compromised
|
||||
- Seamless update for 20Q (deleted refresh button)
|
||||
- Seamless update for 20Q (deleted refresh button)
|
||||
- Update translation for npc + fix h1
|
||||
- Update compendium : Remove accent on uppercase 1st letter
|
||||
|
||||
@@ -26,7 +53,7 @@
|
||||
- Pass for number and focus on click
|
||||
- Xp, added some parseInt
|
||||
- Fix for babele and properties
|
||||
- Add type percularity in item entry
|
||||
- Add type peculiarity in item entry
|
||||
- Fix for cross-loaded French compendium
|
||||
- 20Q : Scroll on top on next button
|
||||
- V-Align for Vlyan pleasure !
|
||||
@@ -43,7 +70,7 @@
|
||||
- Added babele french translation into system
|
||||
- Removed DicePiker bulk macro as it was unnecessary now
|
||||
- Fix for Q13: "skill and disadv" OR "adv"
|
||||
- Added some text for 20Q 2dn dice
|
||||
- Added some text for 20Q 2dn dice
|
||||
- Stop some missing propagation
|
||||
- Fix adv tooltip
|
||||
- Fix 20Q wrong var for summary
|
||||
|
||||
@@ -76,3 +76,10 @@ Vous êtes libre de contribuer et proposer après fork des corrections, modifica
|
||||
1. Assurez-vous de bien être à jour par rapport à la branche référente.
|
||||
2. Des messages de commit clair et précis permettent une relecture rapide du code.
|
||||
3. Limitez-vous si possible à une Feature par demande de Merge pour ne pas bloquer le processus.
|
||||
|
||||
|
||||
Screens
|
||||

|
||||

|
||||

|
||||

|
||||
486
package-lock.json
generated
486
package-lock.json
generated
@@ -732,43 +732,14 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "0.19.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz",
|
||||
"integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==",
|
||||
"deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410",
|
||||
"version": "0.21.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
|
||||
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"follow-redirects": "1.5.10",
|
||||
"is-buffer": "^2.0.2"
|
||||
"follow-redirects": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/axios/node_modules/debug": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/axios/node_modules/follow-redirects": {
|
||||
"version": "1.5.10",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
|
||||
"integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"debug": "=3.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/axios/node_modules/ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/babel-eslint": {
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
|
||||
@@ -4681,29 +4652,6 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/is-buffer": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
|
||||
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/is-core-module": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
|
||||
@@ -5410,15 +5358,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.0.tgz",
|
||||
"integrity": "sha512-g6E0aLgYYDvQDxIjIXkgJo2+pHj3sGg4Wz/XP3h2KtZnRsWPbOQY+hw1H8Z91jep998fkcVE9l+kghO+97vllg==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz",
|
||||
"integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"axios": "0.19.0",
|
||||
"debug": "4.1.1",
|
||||
"axios": "0.21.1",
|
||||
"debug": "4.3.1",
|
||||
"openurl": "1.1.1",
|
||||
"yargs": "13.3.0"
|
||||
"yargs": "16.2.0"
|
||||
},
|
||||
"bin": {
|
||||
"lt": "bin/lt.js"
|
||||
@@ -5427,172 +5375,101 @@
|
||||
"node": ">=8.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/ansi-regex": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
|
||||
"node_modules/localtunnel/node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/camelcase": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
|
||||
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/cliui": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
|
||||
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
||||
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"string-width": "^3.1.0",
|
||||
"strip-ansi": "^5.2.0",
|
||||
"wrap-ansi": "^5.1.0"
|
||||
"string-width": "^4.2.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"wrap-ansi": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/debug": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||
"deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
|
||||
"node_modules/localtunnel/node_modules/color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ms": "^2.1.1"
|
||||
"color-name": "~1.1.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/emoji-regex": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
|
||||
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
|
||||
"node_modules/localtunnel/node_modules/color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/find-up": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
|
||||
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"locate-path": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/is-fullwidth-code-point": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
|
||||
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/locate-path": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
|
||||
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"p-locate": "^3.0.0",
|
||||
"path-exists": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/p-locate": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
|
||||
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"p-limit": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/path-exists": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
|
||||
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/string-width": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
|
||||
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"emoji-regex": "^7.0.1",
|
||||
"is-fullwidth-code-point": "^2.0.0",
|
||||
"strip-ansi": "^5.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/strip-ansi": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ansi-regex": "^4.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/wrap-ansi": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
|
||||
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ansi-styles": "^3.2.0",
|
||||
"string-width": "^3.0.0",
|
||||
"strip-ansi": "^5.0.0"
|
||||
"ansi-styles": "^4.0.0",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/y18n": {
|
||||
"version": "5.0.5",
|
||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
|
||||
"integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/yargs": {
|
||||
"version": "13.3.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
|
||||
"integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
|
||||
"version": "16.2.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
|
||||
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"cliui": "^5.0.0",
|
||||
"find-up": "^3.0.0",
|
||||
"get-caller-file": "^2.0.1",
|
||||
"cliui": "^7.0.2",
|
||||
"escalade": "^3.1.1",
|
||||
"get-caller-file": "^2.0.5",
|
||||
"require-directory": "^2.1.1",
|
||||
"require-main-filename": "^2.0.0",
|
||||
"set-blocking": "^2.0.0",
|
||||
"string-width": "^3.0.0",
|
||||
"which-module": "^2.0.0",
|
||||
"y18n": "^4.0.0",
|
||||
"yargs-parser": "^13.1.1"
|
||||
"string-width": "^4.2.0",
|
||||
"y18n": "^5.0.5",
|
||||
"yargs-parser": "^20.2.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/localtunnel/node_modules/yargs-parser": {
|
||||
"version": "13.1.2",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
|
||||
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
|
||||
"version": "20.2.4",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
|
||||
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"camelcase": "^5.0.0",
|
||||
"decamelize": "^1.2.0"
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/locate-path": {
|
||||
@@ -10789,39 +10666,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"axios": {
|
||||
"version": "0.19.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz",
|
||||
"integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==",
|
||||
"version": "0.21.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
|
||||
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"follow-redirects": "1.5.10",
|
||||
"is-buffer": "^2.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.5.10",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
|
||||
"integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"debug": "=3.1.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
||||
"dev": true
|
||||
}
|
||||
"follow-redirects": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"babel-eslint": {
|
||||
@@ -13977,12 +13827,6 @@
|
||||
"binary-extensions": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"is-buffer": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
|
||||
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
|
||||
"dev": true
|
||||
},
|
||||
"is-core-module": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
|
||||
@@ -14531,153 +14375,89 @@
|
||||
}
|
||||
},
|
||||
"localtunnel": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.0.tgz",
|
||||
"integrity": "sha512-g6E0aLgYYDvQDxIjIXkgJo2+pHj3sGg4Wz/XP3h2KtZnRsWPbOQY+hw1H8Z91jep998fkcVE9l+kghO+97vllg==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz",
|
||||
"integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"axios": "0.19.0",
|
||||
"debug": "4.1.1",
|
||||
"axios": "0.21.1",
|
||||
"debug": "4.3.1",
|
||||
"openurl": "1.1.1",
|
||||
"yargs": "13.3.0"
|
||||
"yargs": "16.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
|
||||
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
|
||||
"dev": true
|
||||
},
|
||||
"camelcase": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
|
||||
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
|
||||
"dev": true
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"cliui": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
|
||||
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
||||
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"string-width": "^3.1.0",
|
||||
"strip-ansi": "^5.2.0",
|
||||
"wrap-ansi": "^5.1.0"
|
||||
"string-width": "^4.2.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"wrap-ansi": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"emoji-regex": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
|
||||
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true
|
||||
},
|
||||
"find-up": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
|
||||
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"locate-path": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
|
||||
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
|
||||
"dev": true
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
|
||||
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"p-locate": "^3.0.0",
|
||||
"path-exists": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"p-locate": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
|
||||
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"p-limit": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"path-exists": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
|
||||
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
|
||||
"dev": true
|
||||
},
|
||||
"string-width": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
|
||||
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"emoji-regex": "^7.0.1",
|
||||
"is-fullwidth-code-point": "^2.0.0",
|
||||
"strip-ansi": "^5.1.0"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
|
||||
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"wrap-ansi": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
|
||||
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^3.2.0",
|
||||
"string-width": "^3.0.0",
|
||||
"strip-ansi": "^5.0.0"
|
||||
"ansi-styles": "^4.0.0",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"y18n": {
|
||||
"version": "5.0.5",
|
||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
|
||||
"integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
|
||||
"dev": true
|
||||
},
|
||||
"yargs": {
|
||||
"version": "13.3.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
|
||||
"integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
|
||||
"version": "16.2.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
|
||||
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cliui": "^5.0.0",
|
||||
"find-up": "^3.0.0",
|
||||
"get-caller-file": "^2.0.1",
|
||||
"cliui": "^7.0.2",
|
||||
"escalade": "^3.1.1",
|
||||
"get-caller-file": "^2.0.5",
|
||||
"require-directory": "^2.1.1",
|
||||
"require-main-filename": "^2.0.0",
|
||||
"set-blocking": "^2.0.0",
|
||||
"string-width": "^3.0.0",
|
||||
"which-module": "^2.0.0",
|
||||
"y18n": "^4.0.0",
|
||||
"yargs-parser": "^13.1.1"
|
||||
"string-width": "^4.2.0",
|
||||
"y18n": "^5.0.5",
|
||||
"yargs-parser": "^20.2.2"
|
||||
}
|
||||
},
|
||||
"yargs-parser": {
|
||||
"version": "13.1.2",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
|
||||
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"camelcase": "^5.0.0",
|
||||
"decamelize": "^1.2.0"
|
||||
}
|
||||
"version": "20.2.4",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
|
||||
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -2,19 +2,14 @@
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<path d="M115.6,20c-23.7,3.2-45.2,30.9-45.2,66.8c0,19.7,6.9,37.4,17,49.4l11.9,14.4l-18.4,3.4c-13.1,2.5-22.5,9.4-30.7,20.5
|
||||
c-8.2,11.3-14.4,26.9-18.8,44.9c-8.1,32.6-9.8,72.5-10.1,107.7h43.5l11.9,159.6c30.2,6.9,62.4,6.6,91.6,0l10.6-159.6H220
|
||||
c0-35.7-0.5-76.1-7.7-109.1c-4-18-9.9-33.7-18.2-44.8c-8.3-11.1-18.3-17.9-33-20.1l-18.8-3l11.9-14.8c9.7-12.1,16-29.4,16-48.6
|
||||
c0-38.3-24-66.7-50-66.7C120.3,20.1,115.6,20,115.6,20z"/>
|
||||
<g transform="translate(0,0)">
|
||||
<path d="M360.6,41.8c-14.2,0-25.8,11.6-25.8,25.8c0,8.1,3.8,15.4,9.7,20.1h-24.2l-30.2,90.6h141l-30.2-90.6h-24.2
|
||||
c5.9-4.7,9.7-12,9.7-20.1C386.4,53.5,374.8,41.8,360.6,41.8z M360.6,53.2c8.1,0,14.5,6.4,14.5,14.5s-6.4,14.5-14.5,14.5
|
||||
c-8.1,0-14.5-6.4-14.5-14.5S352.5,53.2,360.6,53.2z M334.7,117h7.4v10.5l10.7-10.5h8.6l-13.8,13.6l15.2,15.1h-9.3l-11.4-11.3v11.3
|
||||
h-7.4V117L334.7,117z M372.5,123.7c1.5,0,2.8,0.3,4,0.9c1.1,0.6,2.2,1.5,3.1,2.8v-3.2h6.9v19.3c0,3.5-1.1,6.1-3.3,7.9
|
||||
c-2.2,1.8-5.3,2.7-9.5,2.7c-1.3,0-2.6-0.1-3.9-0.3c-1.3-0.2-2.5-0.5-3.8-0.9v-5.4c1.2,0.7,2.4,1.2,3.5,1.5c1.2,0.3,2.3,0.5,3.5,0.5
|
||||
c2.3,0,3.9-0.5,5-1.5c1.1-1,1.6-2.5,1.6-4.6v-1.5c-0.9,1.3-2,2.2-3.1,2.8c-1.1,0.6-2.5,0.9-4,0.9c-2.6,0-4.8-1-6.5-3.1
|
||||
c-1.7-2.1-2.6-4.7-2.6-7.9c0-3.2,0.9-5.8,2.6-7.9C367.7,124.8,369.8,123.7,372.5,123.7z M375,128.7c-1.4,0-2.5,0.5-3.3,1.6
|
||||
c-0.8,1.1-1.2,2.5-1.2,4.5c0,2,0.4,3.5,1.2,4.5c0.8,1,1.9,1.5,3.4,1.5c1.4,0,2.5-0.5,3.3-1.6c0.8-1.1,1.2-2.5,1.2-4.4
|
||||
c0-1.9-0.4-3.4-1.2-4.5C377.6,129.2,376.5,128.7,375,128.7L375,128.7z"/>
|
||||
<g>
|
||||
<path d="M284.4,473.6c0-2.8,0-4.6,0-6.4c0-67.8,0.1-135.7-0.1-203.5c0-4.9,1.3-7.3,6.2-8.9c23.3-7.5,46.4-15.5,69.7-23
|
||||
c4.9-1.6,6.6-3.9,6.3-8.9c-0.4-5.5-0.3-11,0-16.5c0.2-4.2-1.2-6.4-5.7-5.9c-0.7,0.1-1.3,0-2,0c-68.5,0-137,0-205.5,0
|
||||
c-7.8,0-7.8,0-7.8,7.6c0,5.3,0.3,10.7-0.1,16c-0.3,4.1,1.5,5.9,5.2,7.1c23.6,7.7,47,15.7,70.6,23.3c4.7,1.5,6.4,3.6,6.4,8.7
|
||||
c-0.2,68-0.1,136-0.1,204c0,1.7,0,3.5,0,6.3c-8.6-4.1-16.3-7.7-23.9-11.4C163.5,442.7,123.2,423,83,403.4
|
||||
c-15.4-7.5-20.1-18-15.9-34.8c6-23.9,12.4-47.7,17.7-71.7c5.1-23.3,8-46.9,7.7-70.8c-0.5-30.2,9.3-56.8,27-80.9
|
||||
c20.7-28.1,46.6-50.8,75.4-70.1c18.2-12.2,37.5-22.8,56.3-34.2c3.3-2,6.2-2,9.7-0.1c38.6,20.1,74.6,44,105.9,74.5
|
||||
c20.9,20.4,39,43.1,47.6,71.7c3,10.1,5,20.9,5.1,31.4c0.2,41.3,7.2,81.4,17.8,121.1c2.9,10.9,6.1,21.8,8.6,32.8
|
||||
c3,13-2,23.7-13.8,29.6c-36.6,18-73.3,35.9-110,53.8c-10.6,5.2-21.3,10.3-31.9,15.5C288.6,471.7,287.1,472.4,284.4,473.6z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -58,6 +58,12 @@
|
||||
"name": "Vêtements ordinaires",
|
||||
"description": "",
|
||||
"book_reference": "LdR p.239"
|
||||
},
|
||||
{
|
||||
"id": "Inconspicuous garb",
|
||||
"name": "Tenue discrète",
|
||||
"description": "",
|
||||
"book_reference": "LdR"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -184,6 +184,24 @@
|
||||
"name": "Tente (Yourte)",
|
||||
"description": "",
|
||||
"book_reference": "LdR p.245"
|
||||
},
|
||||
{
|
||||
"id": "Scroll satchel",
|
||||
"name": "Sacoche à rouleaux",
|
||||
"description": "",
|
||||
"book_reference": "LdR"
|
||||
},
|
||||
{
|
||||
"id": "Traveling pack",
|
||||
"name": "Sac de Voyage",
|
||||
"description": "",
|
||||
"book_reference": "LdR"
|
||||
},
|
||||
{
|
||||
"id": "Journal of observations",
|
||||
"name": "Journal d'observations",
|
||||
"description": "",
|
||||
"book_reference": "LdR"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
"add": "Add",
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
"drop_here": "Drop here"
|
||||
"drop_here": "Drop here",
|
||||
"edge_translation_disclaimer": ""
|
||||
},
|
||||
"logo": {
|
||||
"title": "Need help?",
|
||||
@@ -283,7 +284,11 @@
|
||||
"intrigue": "Intrigue",
|
||||
"duel": "Duel",
|
||||
"skirmish": "Skirmish",
|
||||
"mass_battle": "Mass Battle"
|
||||
"mass_battle": "Mass Battle",
|
||||
"prepared_true": "Prepared",
|
||||
"prepared_false": "Surprised",
|
||||
"prepared_null": "Defined in the character sheet (default)",
|
||||
"already_set": "Your initiative has already been drawn"
|
||||
}
|
||||
},
|
||||
"advancements": {
|
||||
@@ -299,11 +304,10 @@
|
||||
"curriculum": "In curriculum",
|
||||
"curriculum_validate": "Complete this rank"
|
||||
},
|
||||
"npc": {
|
||||
"types": {
|
||||
"adversary": "Adversary",
|
||||
"minion": "Minion"
|
||||
}
|
||||
"character_types": {
|
||||
"character": "Player Character",
|
||||
"adversary": "Adversary",
|
||||
"minion": "Minion"
|
||||
},
|
||||
"twenty_questions": {
|
||||
"title": "Twenty questions",
|
||||
|
||||
@@ -7,17 +7,17 @@
|
||||
"None": "Sin opción"
|
||||
},
|
||||
"ACTOR": {
|
||||
"TypeCharacter": "Carácter de Jugador",
|
||||
"TypeCharacter": "Personaje jugador",
|
||||
"TypeNpc": "Personaje no jugador"
|
||||
},
|
||||
"ITEM": {
|
||||
"TypeItem": "Artículo",
|
||||
"TypeItem": "Objeto",
|
||||
"TypeArmor": "Armadura",
|
||||
"TypeWeapon": "Arma",
|
||||
"TypeTechnique": "Técnica",
|
||||
"TypeProperty": "Propiedad",
|
||||
"TypePeculiarity": "Peculiaridad",
|
||||
"TypeAdvancement": "Avance"
|
||||
"TypeAdvancement": "Mejora"
|
||||
},
|
||||
"l5r5e": {
|
||||
"global": {
|
||||
@@ -25,21 +25,22 @@
|
||||
"add": "Añadir",
|
||||
"edit": "Editar",
|
||||
"delete": "Borrar",
|
||||
"drop_here": "Caída aquí"
|
||||
"drop_here": "Dejar caer aquí",
|
||||
"edge_translation_disclaimer": "Edge Studio nos da su permiso para ofrecer este módulo a la comunidad, pero tanto los textos así como los códigos que lo constituyen no tienen su aprobación explícita."
|
||||
},
|
||||
"logo": {
|
||||
"títle": "¿Necesitas ayuda?",
|
||||
"content": "Sigue la guía :",
|
||||
"edge": "Ir a la página web de Edge-Studio",
|
||||
"drivethrurpg": "¿Comprar un PDF del juego?",
|
||||
"discord": "Discordia oficial de FoundryVTT",
|
||||
"discord": "Discord oficial de FoundryVTT",
|
||||
"src": "systems/l5r5e/assets/l5r-logo.webp",
|
||||
"alt": "Ayuda en línea",
|
||||
"edge-info": "Tu navegador abrirá la página web de EDGE STUDIO",
|
||||
"edge-link": "https://edge-studio.net/",
|
||||
"drivethrurpg-info": "tu navegador abrirá el sitio DriveThruRpg de Edge Studio",
|
||||
"drivethrurpg-link": "https://www.drivethrurpg.com/browse/pub/17946/EDGE-Studio",
|
||||
"discord-info": "Su navegador se abrirá a la discordia oficial de la Fundición",
|
||||
"discord-info": "Su navegador se abrirá el discord oficial de Foundry",
|
||||
"discord-link": "https://discordapp.com/invite/DDBZUDf"
|
||||
},
|
||||
"rings": {
|
||||
@@ -67,75 +68,75 @@
|
||||
"passionstip": "Después de efectuar una tirada relacionada con tu pasión, descarta tres puntos de Conflicto.",
|
||||
"personality": "Personalidad",
|
||||
"description": "Descripción",
|
||||
"bought_at_rank": "Comprado en rango",
|
||||
"bought_at_rank": "Adquirido en rango",
|
||||
"effects": "Efectos",
|
||||
"types": "Tipos",
|
||||
"book_reference": "Referencia",
|
||||
"value": "Valor",
|
||||
"rarity": "Rareza",
|
||||
"chatdices": {
|
||||
"successes": "Sucesos",
|
||||
"explosives": "Explosivos",
|
||||
"successes": "Éxitos",
|
||||
"explosives": "Relanzables",
|
||||
"opportunities": "Oportunidades",
|
||||
"strives": "Esfuerzos",
|
||||
"difficulty": "TN",
|
||||
"difficulty_hidden": "TN ???",
|
||||
"dicepicker": "Recogedor de dados",
|
||||
"strives": "Conflictos",
|
||||
"difficulty": "NO",
|
||||
"difficulty_hidden": "NO ???",
|
||||
"dicepicker": "Dice Picker",
|
||||
"void_point_used": "Punto de vacío utilizado",
|
||||
"roll_n_keep": "Roll & Keep",
|
||||
"initiative_roll": "Iniciativa rollo"
|
||||
"roll_n_keep": "Tirar y guardar",
|
||||
"initiative_roll": "Tirada de Iniciativa"
|
||||
},
|
||||
"dicepicker": {
|
||||
"difficulty_title": "Dificultad",
|
||||
"difficulty_hidden_label": "Ocultar TN",
|
||||
"difficulty_hidden_label": "Ocultar NO",
|
||||
"use_void_point_label": "Gasta un",
|
||||
"void_point_tooltip": "Punto vacío",
|
||||
"roll_label": "Roll",
|
||||
"bt_add_macro": "Añadir un macro"
|
||||
"void_point_tooltip": "Punto de vacío",
|
||||
"roll_label": "Tirar",
|
||||
"bt_add_macro": "Añadir una macro"
|
||||
},
|
||||
"roll_n_keep": {
|
||||
"title": "L5R Roll & Keep",
|
||||
"discard_drop_here": "Descarte",
|
||||
"reroll_drop_here": "Re-roll",
|
||||
"reroll_chat": "Dados relaminados",
|
||||
"keep_drop_here": "Mantener",
|
||||
"keep_chat": "Nueva tirada de un dado explosivo",
|
||||
"discard_drop_here": "Descartar",
|
||||
"reroll_drop_here": "Relanzar",
|
||||
"reroll_chat": "Dados relanzados",
|
||||
"keep_drop_here": "Guardar",
|
||||
"keep_chat": "Nueva tirada de un dado relanzable",
|
||||
"bt_validate": "Finalizar"
|
||||
},
|
||||
"max": "Max",
|
||||
"max": "Máx",
|
||||
"current": "Actuales",
|
||||
"quantity": "Cantidad",
|
||||
"weight": "Peso",
|
||||
"properties": "Propiedades",
|
||||
"weapons": {
|
||||
"title": "Armas",
|
||||
"title_new": "Arma nueva",
|
||||
"title_new": "Nueva arma",
|
||||
"damage": "Daño",
|
||||
"range": "Rango",
|
||||
"range": "Alcance",
|
||||
"stats": "Estadísticas",
|
||||
"sheathed": "Equipado / Envainado",
|
||||
"sheathed": "Equipado / Envainada",
|
||||
"readied": "Preparado",
|
||||
"category": "Categoría",
|
||||
"deadliness": "Mortalidad",
|
||||
"deadliness": "Letalidad",
|
||||
"grips": "Agarres"
|
||||
},
|
||||
"armors": {
|
||||
"title": "Armaduras",
|
||||
"title_new": "Nueva Armadura",
|
||||
"type": "Defensa",
|
||||
"physical": "físico",
|
||||
"physical": "física",
|
||||
"supernatural": "sobrenatural",
|
||||
"equipped": "Equipado"
|
||||
},
|
||||
"items": {
|
||||
"title": "Artículos",
|
||||
"title_new": "nuevo artículo"
|
||||
"title": "Objetos",
|
||||
"title_new": "Nuevo objeto"
|
||||
},
|
||||
"feats": "Hechos",
|
||||
"feats": "Logros",
|
||||
"techniques": {
|
||||
"title": "Técnicas",
|
||||
"type": "Tipo accesible",
|
||||
"not_allowed": "Tu personaje no utiliza este tipo de técnica.",
|
||||
"type": "Técnicas permitidas",
|
||||
"not_allowed": "Tu personaje no puede utilizar este tipo de técnica.",
|
||||
"only_one": "Tu personaje sólo puede poseer una de estas técnicas.",
|
||||
"title_new": "Nueva Técnica",
|
||||
"kata": "Kata",
|
||||
@@ -208,7 +209,7 @@
|
||||
"ranged": "A distancia",
|
||||
"unarmed": "Sin armas",
|
||||
"meditation": "Meditación",
|
||||
"tactics": "Tácticas",
|
||||
"tactics": "Estrategia",
|
||||
"air": "Amagar",
|
||||
"earth": "Resistir",
|
||||
"fire": "Abrumar",
|
||||
@@ -255,7 +256,7 @@
|
||||
}
|
||||
},
|
||||
"attributes": {
|
||||
"title": "Attributes",
|
||||
"title": "Atributos",
|
||||
"endurance": "Aguante",
|
||||
"endurancetip": "(Tierra + Fuego) x2",
|
||||
"composure": "Compostura",
|
||||
@@ -283,7 +284,11 @@
|
||||
"intrigue": "Intriga",
|
||||
"duel": "Duelo",
|
||||
"skirmish": "Escaramuza",
|
||||
"mass_battle": "Batalla en masas"
|
||||
"mass_battle": "Batalla a gran escala",
|
||||
"prepared_true": "Prepared",
|
||||
"prepared_false": "Surprised",
|
||||
"prepared_null": "Defined in the character sheet (default)",
|
||||
"already_set": "Your initiative has already been drawn"
|
||||
}
|
||||
},
|
||||
"advancements": {
|
||||
@@ -292,94 +297,93 @@
|
||||
"school_rank": "Rango de la escuela",
|
||||
"school_rank_0": "Bg",
|
||||
"total": "Total",
|
||||
"cost": "Costo",
|
||||
"spent": "Usada",
|
||||
"saved": "Salvado",
|
||||
"total_xp_rank": "Xp gastado",
|
||||
"curriculum": "En curriculum",
|
||||
"cost": "Coste",
|
||||
"spent": "Gastado",
|
||||
"saved": "Guardado",
|
||||
"total_xp_rank": "PE gastados",
|
||||
"curriculum": "En programa de estudio",
|
||||
"curriculum_validate": "Completar este rango"
|
||||
},
|
||||
"npc": {
|
||||
"types": {
|
||||
"adversary": "Adversario",
|
||||
"minion": "Adlátere"
|
||||
}
|
||||
"character_types": {
|
||||
"character": "Personaje jugador",
|
||||
"adversary": "Adversario",
|
||||
"minion": "Esbirro"
|
||||
},
|
||||
"twenty_questions": {
|
||||
"title": "Veinte preguntas",
|
||||
"bt_abrev": "20Q",
|
||||
"bt_abrev": "20P",
|
||||
"bt_next": "Siguiente",
|
||||
"increase_ring1": "Aumento del anillo (1)",
|
||||
"increase_ring2": "Aumento del anillo (2)",
|
||||
"increase_skill1": "Aumenta la habilidad (1)",
|
||||
"increase_skill2": "Aumenta la habilidad (2)",
|
||||
"increase_skill3": "Aumenta la habilidad (3-5)",
|
||||
"increase_ring1": "Incremento de anillo (1)",
|
||||
"increase_ring2": "Incremento de anillo (2)",
|
||||
"increase_skill1": "Incremento de habilidad (1)",
|
||||
"increase_skill2": "Incremento de habilidad (2)",
|
||||
"increase_skill3": "Incremento de habilidad (3-5)",
|
||||
"choose_one_ring": "Elige uno",
|
||||
"choose_one_skill": "Elige uno",
|
||||
"choose_one_skill": "Elige una",
|
||||
"or": "O",
|
||||
"and": "Y",
|
||||
"error": "Uy, parece que hay un error:",
|
||||
"part0": {
|
||||
"intro": "Puedes usar esta hoja para rellenar tus respuestas al Juego de las 20 Preguntas, y para tomar notas para más tarde!",
|
||||
"section": "Leyenda de los Cinco Anillos, capítulo 2: Creación de un personaje, p. 41-95"
|
||||
"section": "Leyenda de los Cinco Anillos, capítulo 2: Creación de personajes, p. 41-95"
|
||||
},
|
||||
"part1": {
|
||||
"title": "Parte I: Identidad básica (Clan y Familia)",
|
||||
"q1": "1. ¿A qué clan pertenece tu personaje? (p. 41)",
|
||||
"status": "Estado",
|
||||
"status": "Estatus",
|
||||
"q2": "2. ¿A qué familia pertenece tu personaje? (p. 49)",
|
||||
"money": "Iniciar la riqueza en Koku",
|
||||
"money": "Riqueza inicial en Koku",
|
||||
"glory": "Gloria"
|
||||
},
|
||||
"part2": {
|
||||
"title": "Parte II: Papel y escuela",
|
||||
"q3": "3. ¿Cuál es la escuela de tu personaje, y en qué roles se encuentra esa escuela? (p. 56)",
|
||||
"title": "Parte II: Función y escuela",
|
||||
"q3": "3. ¿Cuál es la escuela de tu personaje, y en qué funciones cumple esa escuela? (p. 56)",
|
||||
"school": "Escuela",
|
||||
"role": "Roles",
|
||||
"role": "Funciones",
|
||||
"honor": "Honor",
|
||||
"access": "Tipos de técnicas disponibles",
|
||||
"school_ability": "Habilidad escolar",
|
||||
"starting_techniques": "Técnicas de arranque (2-5)",
|
||||
"outfit": "Equipo para empezar",
|
||||
"q4": "4. ¿Cómo se destaca tu personaje dentro de su escuela? (p. 88)"
|
||||
"school_ability": "Capacidad de escuela",
|
||||
"starting_techniques": "Técnicas iniciales (2-5)",
|
||||
"outfit": "Equipo inicial",
|
||||
"q4": "4. ¿De qué manera destaca tu personaje dentro de su escuela? (p. 88)"
|
||||
},
|
||||
"part3": {
|
||||
"title": "Parte III: Honor y Gloria",
|
||||
"q5": "5. ¿Quién es su señor y cuál es su deber de carácter con ellos? (p. 88)",
|
||||
"choose_giri": "Elija una giri:",
|
||||
"q6": "6. ¿Qué anhela su personaje y cómo podría esto impedir su deber? (p. 90)",
|
||||
"choose_ninjo": "Elija una ninjō:",
|
||||
"q7": "7. ¿Cuál es la relación de tu personaje con su clan? (p. 91)",
|
||||
"q5": "5. ¿Quién es tu señor y cuál es el deber de tu personaje hacia él? (p. 88)",
|
||||
"choose_giri": "Elige un giri:",
|
||||
"q6": "6. ¿Qué es lo que anhela tu personaje, y cómo podría esto interferir con su deber? (p. 90)",
|
||||
"choose_ninjo": "Elige un ninjō:",
|
||||
"q7": "7. ¿Cuál es la relación de tu personaje con tu clan? (p. 91)",
|
||||
"increase_glory": "Aumento de la gloria",
|
||||
"q8": "8. ¿Qué piensa tu personaje de Bushidō? (p. 91)",
|
||||
"q8": "8. ¿Qué piensa tu personaje acerca del Bushidō? (p. 91)",
|
||||
"increase_honor": "Aumento del honor"
|
||||
},
|
||||
"part4": {
|
||||
"title": "Parte IV: Fortalezas y Debilidades",
|
||||
"q9": "9. ¿Cuál es el mayor logro de su personaje hasta ahora? (p. 92)",
|
||||
"q9": "9. ¿Cuál es el mayor logro de tu personaje hasta ahora? (p. 92)",
|
||||
"distinction": "Distinción (1)",
|
||||
"q10": "10. ¿Qué es lo que más te frena en la vida? (p. 92)",
|
||||
"q10": "10. ¿Qué es lo que más frena a tu personaje en la vida? (p. 92)",
|
||||
"adversity": "Adversidad (1)",
|
||||
"q11": "11. ¿Qué actividad hace que tu personaje se sienta más en paz? (p. 93)",
|
||||
"passion": "Pasión (1)",
|
||||
"q12": "12. ¿Qué preocupación, miedo o falta de sensibilidad le preocupa más a su carácter? (p. 93)",
|
||||
"q12": "12. ¿Qué preocupación, miedo o debilidad perturba más a tu personaje? (p. 93)",
|
||||
"anxiety": "Ansiedad (1)",
|
||||
"q13": "13. De quién ha aprendido más tu personaje durante su vida (p. 93)",
|
||||
"q13": "13. ¿Quién ha sido la persona de la que más ha aprendido tu personaje en el transcurso de su vida? (p. 93)",
|
||||
"disadvantage": "Desventaja (1)",
|
||||
"advantage": "Ventaja (1)"
|
||||
},
|
||||
"part5": {
|
||||
"title": "Parte V: Personalidad y Comportamiento",
|
||||
"q14": "14. ¿Qué es lo primero que la gente nota al encontrarse con su personaje? (p. 93)",
|
||||
"accoutrement": "Acumulación personal",
|
||||
"q15": "15. ¿Cómo reacciona tu personaje ante situaciones estresantes? (p. 94)",
|
||||
"q16": "16. ¿Cuáles son las relaciones preexistentes de tu personaje con otros clanes, familias, organizaciones y tradiciones? (p. 94)",
|
||||
"q14": "14. ¿Qué es lo que advierte primero la gente al encontrarse con tu personaje? (p. 93)",
|
||||
"accoutrement": "Accesorio estético distintivo",
|
||||
"q15": "15. ¿Cómo reacciona tu personaje ante situaciones de tensión? (p. 94)",
|
||||
"q16": "16. ¿Cuáles son las relaciones previas de tu personaje con otros clanes, familias, organizaciones y tradiciones? (p. 94)",
|
||||
"object": "Objeto (Rareza 7 o inferior)"
|
||||
},
|
||||
"part6": {
|
||||
"title": "Parte VI: Ascendencia y familia",
|
||||
"q17": "17. ¿Cómo los describirían los padres de tu personaje? (p. 95)",
|
||||
"q18": "18. ¿A quién se le nombró para honrar a tu personaje? (p. 95)",
|
||||
"title": "Parte VI: Ascestros y familia",
|
||||
"q17": "17. ¿Cómo describirían sus padres a tu personaje? (p. 95)",
|
||||
"q18": "18. ¿En honor de quién se eligio el nombre de tu personaje? (p. 95)",
|
||||
"d10r1": "Resultado D10 (1/2)",
|
||||
"d10r1_choice": "Primer efecto de D10",
|
||||
"d10r2": "Resultado D10 (2/2)",
|
||||
@@ -389,7 +393,7 @@
|
||||
},
|
||||
"part7": {
|
||||
"title": "Parte VII: Muerte",
|
||||
"q20": "20. ¿Cómo debe morir tu personaje? (p. 95)",
|
||||
"q20": "20. ¿Cómo debería morir tu personaje? (p. 95)",
|
||||
"summary": "Resumen",
|
||||
"generchar": "Generar el personaje",
|
||||
"generchar_disclaimer": "Advertencia, esto borrará los datos actuales del personaje!",
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
"add": "Ajouter",
|
||||
"edit": "Modifier",
|
||||
"delete": "Supprimer",
|
||||
"drop_here": "Déposez ici"
|
||||
"drop_here": "Déposez ici",
|
||||
"edge_translation_disclaimer": ""
|
||||
},
|
||||
"logo": {
|
||||
"title": "Besoin d'aide ?",
|
||||
@@ -163,7 +164,7 @@
|
||||
"notes": "Notes",
|
||||
"inventory": "Inventaire",
|
||||
"money": {
|
||||
"title": "Fortune personnelle",
|
||||
"title": "Fortune",
|
||||
"koku": "Koku",
|
||||
"bu": "Bu",
|
||||
"zeni": "Zeni"
|
||||
@@ -283,7 +284,11 @@
|
||||
"intrigue": "Intrigue",
|
||||
"duel": "Duel",
|
||||
"skirmish": "Escarmouche",
|
||||
"mass_battle": "Bataille rangée"
|
||||
"mass_battle": "Bataille rangée",
|
||||
"prepared_true": "Prêt(e)",
|
||||
"prepared_false": "Surpris(e)",
|
||||
"prepared_null": "Défini par la fiche de personnage (défaut)",
|
||||
"already_set": "Votre initiative a déjà été tirée"
|
||||
}
|
||||
},
|
||||
"advancements": {
|
||||
@@ -299,11 +304,10 @@
|
||||
"curriculum": "Inclus dans le cursus",
|
||||
"curriculum_validate": "Valider la progression"
|
||||
},
|
||||
"npc": {
|
||||
"types": {
|
||||
"adversary": "Antagoniste",
|
||||
"minion": "Sous-fifre"
|
||||
}
|
||||
"character_types": {
|
||||
"character": "Personnage Joueur",
|
||||
"adversary": "Antagoniste",
|
||||
"minion": "Sous-fifre"
|
||||
},
|
||||
"twenty_questions": {
|
||||
"title": "Le jeu des Vingt questions",
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{"_id":"L5RCoreArm000001","name":"Ashigaru Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"armor":{"physical":"3","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000002","name":"Plated Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"armor":{"physical":"5","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000003","name":"Concealed Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"5 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"armor":{"physical":"2","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000004","name":"Lacquered Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"25 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000006","name":" Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"armor":{"physical":"4","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000005","name":"Ceremonial Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"1 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000010","name":" Resplendent"}],"armor":{"physical":"1","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000006","name":"Traveling Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"2 bu","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000012","name":" Mundane"},{"id":"L5RCorePro000016","name":" Subtle"}],"armor":{"physical":"2","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000007","name":"Sanctified Robes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"4 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"}],"armor":{"physical":"1","supernatural":"3"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000008","name":"Sleeping Garb","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"1 koku","properties":[],"armor":{"physical":"-","supernatural":""},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000009","name":"Common Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"armor":{"physical":"1","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000001","name":"Ashigaru Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"armor":{"physical":"3","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000002","name":"Plated Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"armor":{"physical":"5","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000003","name":"Concealed Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"5 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"armor":{"physical":"2","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000004","name":"Lacquered Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"6","zeni":"25 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000006","name":" Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"armor":{"physical":"4","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000005","name":"Ceremonial Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"1 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000010","name":" Resplendent"}],"armor":{"physical":"1","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000006","name":"Traveling Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"2","zeni":"2 bu","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000012","name":" Mundane"},{"id":"L5RCorePro000016","name":" Subtle"}],"armor":{"physical":"2","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000007","name":"Sanctified Robes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"4 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"}],"armor":{"physical":"1","supernatural":"3"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000008","name":"Sleeping Garb","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"2","zeni":"1 koku","properties":[],"armor":{"physical":"-","supernatural":""},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000009","name":"Common Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"armor":{"physical":"1","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000010","name":"Inconspicuous garb","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"3 bu","properties":[{"id":"L5RCorePro000016","name":"Subtle"}],"armor":{"physical":"-","supernatural":"-"},"description":"","book_reference":"Core"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
|
||||
@@ -5,26 +5,29 @@
|
||||
{"_id":"L5RCoreIte000005","name":"Rope (By the Foot)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"5-20 zeni","properties":[],"description":"","book_reference":"Core p.244"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000006","name":"Sake Cup","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000007","name":"Lucky Cricket","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"4 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000008","name":"Bottle of Sake","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000008","name":"Bottle of Sake","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000009","name":"Dice and Cup","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"25 zeni","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000010","name":"Sweets (Four Servings)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000011","name":"Spices","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5-7","zeni":"1-5 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000012","name":"Musical Instrument","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2-6","zeni":"1-5 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000012","name":"Musical Instrument","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"2-6","zeni":"1-5 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000013","name":"Games","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000014","name":"Kubi Bukuro","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"2 zeni","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000015","name":"Pillow Book","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"3 zeni","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000016","name":"Bowyer’s Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000017","name":"Calligraphy Set","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000018","name":"Divination Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000019","name":"Medicine Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000016","name":"Bowyer’s Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000017","name":"Calligraphy Set","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000018","name":"Divination Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000019","name":"Medicine Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000020","name":"Omamori","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"5 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000021","name":"Umbrella","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"2 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000022","name":"Whetstone","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 zeni","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000023","name":"Poison (One Vial)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"30 zeni","properties":[{"id":"L5RCorePro000009","name":"Forbidden"}],"description":"","book_reference":"Core p.244"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000024","name":"Daishō Stand","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000025","name":"Traveling Rations","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"5 zeni","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000024","name":"Daishō Stand","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000025","name":"Traveling Rations","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"5 zeni","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000026","name":"Personal Seal or Chop","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"4 bu","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"}],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000027","name":"Tea Set (Portable)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000028","name":"Tent (Chomchong)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"20 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000029","name":"Tent (Small)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000030","name":"Tent (Yurt)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"10 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000027","name":"Tea Set (Portable)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000028","name":"Tent (Chomchong)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"7","zeni":"20 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000029","name":"Tent (Small)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000030","name":"Tent (Yurt)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"5","zeni":"10 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000031","name":"Scroll satchel","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000032","name":"Traveling pack","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"10 koku","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"description":"","book_reference":"Core"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000033","name":"Journal of observations","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
{"_id":"L5RCoreShu000024","name":"Sear the Wound","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"fire","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.219"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000025","name":"Lightning Raid","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"fire","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.219"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000026","name":"Stirring the Embers","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"fire","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.219"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000027","name":"Tributaries of Trade","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":""},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000027","name":"Tributaries of Trade","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000028","name":"All in Jest","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000029","name":"Buoyant Arrival","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000030","name":"Ebb and Flow","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
{"_id":"L5RCoreWea000001","name":"Bokken","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"3","deadliness":"3","grip_1":"-","grip_2":"Damage +2","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000002","name":"Chokutō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000003","name":"Scimitar","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"20 koku","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000004","name":"Dao","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"15 koku","properties":[],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"3","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000005","name":"Gao","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000006","name":"Jian","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"15 koku","properties":[],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"4","grip_1":"-","grip_2":"Deadliness +1","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000007","name":"Katana","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000008","name":"Nodachi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1-2","damage":"5","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000009","name":"Wakizashi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"5","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000010","name":"Zanbatō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Swords","skill":"melee","readied":false,"range":"1-2","damage":"6","deadliness":"7","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000011","name":"Masakari","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"3 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Axes","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"4","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/axe.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000012","name":"Ono","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Axes","skill":"melee","readied":false,"range":"1-2","damage":"5","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/axe.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000013","name":"Club","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"0-1","damage":"5","deadliness":"2","grip_1":"-","grip_2":"Damage +1","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000014","name":"Kiseru","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000012","name":" Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000015","name":"Hammer","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"2 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"0-1","damage":"5","deadliness":"2","grip_1":"-","grip_2":"Damage +2","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000016","name":"Otsuchi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"30 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"1","damage":"8","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000017","name":"Tetsubō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"20 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"1-2","damage":"7","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000018","name":"Jitte","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"5 bu","properties":[{"id":"L5RCorePro000007","name":" Snaring"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"","damage":"3","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000019","name":"Knife","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 koku","properties":[{"id":"L5RCorePro000001","name":"Razor-Edged"},{"id":"L5RCorePro000005","name":" Concealable"},{"id":"L5RCorePro000012","name":" Mundane"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"4","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000020","name":"Nunchaku","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"1 koku","properties":[],"category":"Hand Weapons","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"2","grip_1":"-","grip_2":"Snaring","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/nunchaku.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000021","name":"Tessen","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000005","name":" Concealable"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000022","name":"Bisentō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"15 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"4","deadliness":"6","grip_1":"Range 1","grip_2":"Damage +2","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000023","name":"Bō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"2 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Polearms","skill":"melee","readied":false,"range":"1-2","damage":"6","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000024","name":"Ji","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"7 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"5","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000025","name":"Naginata","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"10 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000001","name":" Razor-Edged"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"6","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000026","name":"Trident","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"10 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"4","deadliness":"4","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000027","name":"Yari","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"5","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000028","name":"Horsebow","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"6 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Bows","skill":"ranged","readied":false,"range":"2-4","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000029","name":"Daikyū","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"6 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Bows","skill":"ranged","readied":false,"range":"3-5","damage":"6","deadliness":"4","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000030","name":"Yumi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"3 koku","properties":[],"category":"Bows","skill":"ranged","readied":false,"range":"2-5","damage":"5","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000031","name":"Oyumi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000013","name":"Prepare"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Crossbows","skill":"ranged","readied":false,"range":"2-5","damage":"7","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000032","name":"Kama","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000033","name":"Kusari-gama","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"5 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000007","name":" Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Specialist Weapons","skill":"melee","readied":false,"range":"","damage":"3","deadliness":"3","grip_1":"-","grip_2":"Range 2-3","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000034","name":"Blowgun","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"5 bu","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"ranged","readied":false,"range":"2-3","damage":"1","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000035","name":"Shuriken","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"unarmed","readied":false,"range":"","damage":"2","deadliness":"4","grip_1":"(thrown) Martial Arts (Ranged), Range 1-3","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000001","name":"Bokken","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"3","deadliness":"3","grip_1":"-","grip_2":"Damage +2","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000002","name":"Chokutō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000003","name":"Scimitar","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"20 koku","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000004","name":"Dao","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"15 koku","properties":[],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"3","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000005","name":"Gao","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000006","name":"Jian","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"15 koku","properties":[],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"4","grip_1":"-","grip_2":"Deadliness +1","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000007","name":"Katana","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000008","name":"Nodachi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1-2","damage":"5","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000009","name":"Wakizashi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"5","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000010","name":"Zanbatō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Swords","skill":"melee","readied":false,"range":"1-2","damage":"6","deadliness":"7","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000011","name":"Masakari","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"5","zeni":"3 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Axes","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"4","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/axe.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000012","name":"Ono","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Axes","skill":"melee","readied":false,"range":"1-2","damage":"5","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/axe.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000013","name":"Club","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"0-1","damage":"5","deadliness":"2","grip_1":"-","grip_2":"Damage +1","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000014","name":"Kiseru","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"5","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000012","name":" Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000015","name":"Hammer","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"2 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"0-1","damage":"5","deadliness":"2","grip_1":"-","grip_2":"Damage +2","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000016","name":"Otsuchi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"30 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"1","damage":"8","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000017","name":"Tetsubō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"5","zeni":"20 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"1-2","damage":"7","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000018","name":"Jitte","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"5","zeni":"5 bu","properties":[{"id":"L5RCorePro000007","name":" Snaring"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"","damage":"3","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000019","name":"Knife","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 koku","properties":[{"id":"L5RCorePro000001","name":"Razor-Edged"},{"id":"L5RCorePro000005","name":" Concealable"},{"id":"L5RCorePro000012","name":" Mundane"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"4","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000020","name":"Nunchaku","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"1 koku","properties":[],"category":"Hand Weapons","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"2","grip_1":"-","grip_2":"Snaring","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/nunchaku.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000021","name":"Tessen","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000005","name":" Concealable"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000022","name":"Bisentō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"15 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"4","deadliness":"6","grip_1":"Range 1","grip_2":"Damage +2","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000023","name":"Bō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"2","zeni":"2 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Polearms","skill":"melee","readied":false,"range":"1-2","damage":"6","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000024","name":"Ji","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"7 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"5","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000025","name":"Naginata","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"10 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000001","name":" Razor-Edged"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"6","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000026","name":"Trident","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"10 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"4","deadliness":"4","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000027","name":"Yari","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"5","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000028","name":"Horsebow","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"6 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Bows","skill":"ranged","readied":false,"range":"2-4","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000029","name":"Daikyū","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"6 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Bows","skill":"ranged","readied":false,"range":"3-5","damage":"6","deadliness":"4","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000030","name":"Yumi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"3 koku","properties":[],"category":"Bows","skill":"ranged","readied":false,"range":"2-5","damage":"5","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000031","name":"Oyumi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000013","name":"Prepare"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Crossbows","skill":"ranged","readied":false,"range":"2-5","damage":"7","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000032","name":"Kama","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000033","name":"Kusari-gama","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"5 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000007","name":" Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Specialist Weapons","skill":"melee","readied":false,"range":"","damage":"3","deadliness":"3","grip_1":"-","grip_2":"Range 2-3","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000034","name":"Blowgun","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"5 bu","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"ranged","readied":false,"range":"2-3","damage":"1","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000035","name":"Shuriken","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"unarmed","readied":false,"range":"","damage":"2","deadliness":"4","grip_1":"(thrown) Martial Arts (Ranged), Range 1-3","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000036","name":"Punch","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"0","zeni":"0","properties":[{"id":"L5RCorePro000007","name":"Snaring"}],"category":"Unarmed profiles","skill":"unarmed","readied":false,"range":"","damage":"1","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000037","name":"Kick","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"0","zeni":"0","properties":[],"category":"Unarmed profiles","skill":"unarmed","readied":false,"range":"1","damage":"2","deadliness":"1","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000038","name":"BIte","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"0","zeni":"0","properties":[],"category":"Unarmed profiles","skill":"unarmed","readied":false,"range":"","damage":"","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}
|
||||
|
||||
@@ -76,22 +76,22 @@ export class ActorL5r5e extends Actor {
|
||||
if (["character", "npc"].includes(this.data.type)) {
|
||||
const data = this.data.data;
|
||||
|
||||
data.endurance = (Number(data.rings.earth) + Number(data.rings.fire)) * 2;
|
||||
data.composure = (Number(data.rings.earth) + Number(data.rings.water)) * 2;
|
||||
data.focus = Number(data.rings.air) + Number(data.rings.fire);
|
||||
|
||||
// Attributes bars
|
||||
data.void_points.max = data.rings.void;
|
||||
data.fatigue.max = data.endurance;
|
||||
data.strife.max = data.composure;
|
||||
|
||||
// if compromise, vigilance = 1
|
||||
if (data.strife.value > data.strife.max) {
|
||||
data.vigilance = 1;
|
||||
} else {
|
||||
// No automation for npc as they cheat in stats
|
||||
if (this.data.type === "character") {
|
||||
data.endurance = (Number(data.rings.earth) + Number(data.rings.fire)) * 2;
|
||||
data.composure = (Number(data.rings.earth) + Number(data.rings.water)) * 2;
|
||||
data.focus = Number(data.rings.air) + Number(data.rings.fire);
|
||||
data.vigilance = Math.ceil((Number(data.rings.air) + Number(data.rings.water)) / 2);
|
||||
}
|
||||
|
||||
// Attributes bars
|
||||
data.fatigue.max = data.endurance;
|
||||
data.strife.max = data.composure;
|
||||
data.void_points.max = data.rings.void;
|
||||
|
||||
// if compromise, vigilance = 1
|
||||
data.is_compromised = data.strife.value > data.strife.max;
|
||||
|
||||
// Make sure void points are never greater than max
|
||||
if (data.void_points.value > data.void_points.max) {
|
||||
data.void_points.value = data.void_points.max;
|
||||
|
||||
@@ -159,7 +159,7 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
event.stopPropagation();
|
||||
const elmt = $(event.currentTarget).data("toggle");
|
||||
const tgt = html.find("." + elmt);
|
||||
tgt.hasClass("toggle-active") ? tgt.removeClass("toggle-active") : tgt.addClass("toggle-active");
|
||||
tgt.toggleClass("toggle-active");
|
||||
});
|
||||
|
||||
// *** Everything below here is only needed if the sheet is editable ***
|
||||
@@ -175,7 +175,7 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
new game.l5r5e.DicePickerDialog({
|
||||
skillId: li.data("skill") || null,
|
||||
skillCatId: li.data("skillcat") || null,
|
||||
difficulty: li.data("diff") || 2,
|
||||
isInitiativeRoll: li.data("initiative") || false,
|
||||
actor: this.actor,
|
||||
}).render(true);
|
||||
});
|
||||
@@ -187,6 +187,23 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
event.target.select();
|
||||
});
|
||||
|
||||
// Prepared (Initiative)
|
||||
html.find(".prepared-control").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const preparedId = $(event.currentTarget).data("id");
|
||||
if (["adversary", "character"].includes(preparedId)) {
|
||||
this._switchPrepared();
|
||||
}
|
||||
});
|
||||
|
||||
// Equipped / Readied
|
||||
html.find(".equip-readied-control").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this._switchEquipReadied(event);
|
||||
});
|
||||
|
||||
// *** Items : add, edit, delete ***
|
||||
html.find(".item-add").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
@@ -205,6 +222,20 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch the state "prepared" (initiative)
|
||||
* @private
|
||||
*/
|
||||
_switchPrepared() {
|
||||
this.actor.data.data.prepared = !this.actor.data.data.prepared;
|
||||
this.actor.update({
|
||||
data: {
|
||||
prepared: this.actor.data.data.prepared,
|
||||
},
|
||||
});
|
||||
this.render(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a generic item with sub type
|
||||
* @private
|
||||
@@ -315,4 +346,32 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch Readied state on a weapon
|
||||
* @private
|
||||
*/
|
||||
_switchEquipReadied(event) {
|
||||
const type = $(event.currentTarget).data("type");
|
||||
if (!["equipped", "readied"].includes(type)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
const tmpItem = this.actor.getOwnedItem(itemId);
|
||||
if (!tmpItem || tmpItem.data.data[type] === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
tmpItem.data.data[type] = !tmpItem.data.data[type];
|
||||
const data = {
|
||||
equipped: tmpItem.data.data.equipped,
|
||||
};
|
||||
// Only weapons
|
||||
if (tmpItem.data.data.readied !== undefined) {
|
||||
data.readied = tmpItem.data.data.readied;
|
||||
}
|
||||
|
||||
tmpItem.update({ data });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ export class CharacterSheetL5r5e extends BaseSheetL5r5e {
|
||||
|
||||
// if not in curriculum, xp spent /2 for this item
|
||||
if (!item.data.in_curriculum && xp > 0) {
|
||||
xp = Math.floor(xp / 2);
|
||||
xp = Math.ceil(xp / 2);
|
||||
}
|
||||
|
||||
const rank = Math.max(0, item.data.bought_at_rank);
|
||||
|
||||
@@ -21,7 +21,7 @@ export class NpcSheetL5r5e extends BaseSheetL5r5e {
|
||||
|
||||
sheetData.data.types = NpcSheetL5r5e.types.map((e) => ({
|
||||
id: e,
|
||||
label: game.i18n.localize("l5r5e.npc.types." + e),
|
||||
label: game.i18n.localize("l5r5e.character_types." + e),
|
||||
}));
|
||||
|
||||
return sheetData;
|
||||
|
||||
@@ -165,7 +165,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
event.stopPropagation();
|
||||
const elmt = $(event.currentTarget).data("toggle");
|
||||
const tgt = html.find("." + elmt);
|
||||
tgt.hasClass("toggle-active") ? tgt.removeClass("toggle-active") : tgt.addClass("toggle-active");
|
||||
tgt.toggleClass("toggle-active");
|
||||
});
|
||||
|
||||
// BT Next
|
||||
|
||||
@@ -184,7 +184,7 @@ export class TwentyQuestions {
|
||||
const actorDatas = actor.data.data;
|
||||
|
||||
// already 20q struct ?
|
||||
if (actorDatas.twenty_questions?.step1?.clan) {
|
||||
if (!isObjectEmpty(actorDatas.twenty_questions)) {
|
||||
this.data = {
|
||||
...this.data,
|
||||
...actorDatas.twenty_questions,
|
||||
@@ -216,6 +216,8 @@ export class TwentyQuestions {
|
||||
const actorDatas = actor.data.data;
|
||||
const formData = this.data;
|
||||
|
||||
this.data.generated = true;
|
||||
|
||||
const status = parseInt(formData.step1.social_status) + parseInt(formData.step18.heritage_add_status);
|
||||
|
||||
const glory =
|
||||
|
||||
@@ -1,61 +1,138 @@
|
||||
/**
|
||||
* Roll initiative for one or multiple Combatants within the Combat entity
|
||||
* @param {string|string[]} ids A Combatant id or Array of ids for which to roll
|
||||
* @param {string|null} [formula] A non-default initiative formula to roll. Otherwise the system default is used.
|
||||
* @param {boolean} [updateTurn] Update the Combat turn after adding new initiative scores to keep the turn on
|
||||
* the same Combatant.
|
||||
* @param {object} [messageOptions] Additional options with which to customize created Chat Messages
|
||||
* @return {Promise<Combat>} A promise which resolves to the updated Combat entity once updates are complete.
|
||||
* Extends the actor to process special things from L5R.
|
||||
*/
|
||||
export async function rollInitiative(ids, { formula = null, updateTurn = true, messageOptions = {} } = {}) {
|
||||
if (!Array.isArray(ids)) {
|
||||
ids = [ids];
|
||||
}
|
||||
const updatedCombatants = [];
|
||||
ids.forEach((combatantId) => {
|
||||
const combatant = game.combat.combatants.find((c) => c._id === combatantId);
|
||||
if (!combatant || !combatant.actor) {
|
||||
return;
|
||||
}
|
||||
const data = combatant.actor.data.data;
|
||||
const formula = [`${data.rings[data.stance]}dr`];
|
||||
const skillValue =
|
||||
combatant.actor.data.type === "npc" ? data.skills["martial"] : data.skills["martial"]["tactics"];
|
||||
if (skillValue > 0) {
|
||||
formula.push(`${skillValue}ds`);
|
||||
export class CombatL5r5e extends Combat {
|
||||
// game.combat.settings.resource = "fatigue.value"; // nope :/
|
||||
// constructor(...args) {
|
||||
// super(...args);
|
||||
// console.log(args);
|
||||
// }
|
||||
|
||||
/**
|
||||
* Roll initiative for one or multiple Combatants within the Combat entity
|
||||
* @param {string|string[]} ids A Combatant id or Array of ids for which to roll
|
||||
* @param {string|null} [formula] A non-default initiative formula to roll. Otherwise the system default is used.
|
||||
* @param {boolean} [updateTurn] Update the Combat turn after adding new initiative scores to keep the turn on
|
||||
* the same Combatant.
|
||||
* @param {object} [messageOptions] Additional options with which to customize created Chat Messages
|
||||
* @return {Promise<Combat>} A promise which resolves to the updated Combat entity once updates are complete.
|
||||
*/
|
||||
async rollInitiative(ids, { formula = null, updateTurn = true, messageOptions = {} } = {}) {
|
||||
if (!Array.isArray(ids)) {
|
||||
ids = [ids];
|
||||
}
|
||||
|
||||
const roll = new game.l5r5e.RollL5r5e(formula.join("+"));
|
||||
// Get global modifiers
|
||||
const cfg = {
|
||||
difficulty: game.settings.get("l5r5e", "initiative.difficulty.value"),
|
||||
difficultyHidden: game.settings.get("l5r5e", "initiative.difficulty.hidden"),
|
||||
prepared: {
|
||||
character: game.settings.get("l5r5e", "initiative.prepared.character"),
|
||||
adversary: game.settings.get("l5r5e", "initiative.prepared.adversary"),
|
||||
minion: game.settings.get("l5r5e", "initiative.prepared.minion"),
|
||||
},
|
||||
};
|
||||
|
||||
roll.actor = combatant.actor;
|
||||
roll.l5r5e.stance = data.stance;
|
||||
roll.l5r5e.skillId = "tactics";
|
||||
roll.l5r5e.summary.difficulty = 1;
|
||||
// SkillId from DicePicker or global
|
||||
const skillId = messageOptions.skillId
|
||||
? messageOptions.skillId
|
||||
: CONFIG.l5r5e.initiativeSkills[game.settings.get("l5r5e", "initiative.encounter")];
|
||||
const skillCat = CONFIG.l5r5e.skills.get(skillId);
|
||||
|
||||
roll.roll();
|
||||
roll.toMessage({ flavor: game.i18n.localize("l5r5e.chatdices.initiative_roll") });
|
||||
// Get score for each combatant
|
||||
const updatedCombatants = [];
|
||||
ids.forEach((combatantId) => {
|
||||
const combatant = game.combat.combatants.find((c) => c._id === combatantId);
|
||||
|
||||
updatedCombatants.push({
|
||||
_id: combatant._id,
|
||||
initiative: roll.l5r5e.summary.success,
|
||||
// Skip if combatant already have a initiative value
|
||||
if (!messageOptions.rerollInitiative && (!combatant || !combatant.actor)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Shortcut to data
|
||||
const data = combatant.actor.data.data;
|
||||
|
||||
// A character’s initiative value is based on their state of preparedness when the conflict began.
|
||||
// If the character was ready for the conflict, their base initiative value is their focus attribute.
|
||||
// If the character was unprepared (such as when surprised), their base initiative value is their vigilance attribute.
|
||||
let initiative;
|
||||
|
||||
if (combatant.actor.data.type === "npc" && combatant.actor.data.data.type === "minion") {
|
||||
// Minion NPCs can generate initiative value without a check, using their focus or vigilance attribute
|
||||
initiative = cfg.prepared.minion === "true" ? data.focus : data.is_compromised ? 1 : data.vigilance;
|
||||
} else {
|
||||
// PC and Adversary
|
||||
const isPc = combatant.actor.data.type === "character";
|
||||
|
||||
// prepared is a boolean or if null we get the info in the actor sheet
|
||||
let isPrepared = isPc ? cfg.prepared.character : cfg.prepared.adversary;
|
||||
if (isPrepared === "null") {
|
||||
isPrepared = data.prepared ? "true" : "false";
|
||||
}
|
||||
initiative = isPrepared === "true" ? data.focus : data.is_compromised ? 1 : data.vigilance;
|
||||
|
||||
// Roll formula
|
||||
if (!formula) {
|
||||
const createFormula = [`${data.rings[data.stance]}dr`];
|
||||
const skillValue = isPc ? data.skills[skillCat][skillId] : data.skills[skillCat];
|
||||
if (skillValue > 0) {
|
||||
createFormula.push(`${skillValue}ds`);
|
||||
}
|
||||
formula = createFormula.join("+");
|
||||
}
|
||||
|
||||
const roll = new game.l5r5e.RollL5r5e(formula);
|
||||
roll.actor = combatant.actor;
|
||||
roll.l5r5e.stance = data.stance;
|
||||
roll.l5r5e.skillId = skillId;
|
||||
roll.l5r5e.skillCatId = skillCat;
|
||||
roll.l5r5e.summary.difficulty =
|
||||
messageOptions.difficulty !== undefined ? messageOptions.difficulty : cfg.difficulty;
|
||||
roll.l5r5e.summary.difficultyHidden =
|
||||
messageOptions.difficultyHidden !== undefined
|
||||
? messageOptions.difficultyHidden
|
||||
: cfg.difficultyHidden;
|
||||
roll.l5r5e.summary.voidPointUsed = !!messageOptions.useVoidPoint;
|
||||
|
||||
roll.roll();
|
||||
roll.toMessage({
|
||||
flavor:
|
||||
game.i18n.localize("l5r5e.chatdices.initiative_roll") +
|
||||
" (" +
|
||||
game.i18n.localize(`l5r5e.conflict.initiative.prepared_${isPrepared}`) +
|
||||
")",
|
||||
});
|
||||
|
||||
// if the character succeeded on their Initiative check, they add 1 to their base initiative value,
|
||||
// plus an additional amount equal to their bonus successes.
|
||||
const successes = Math.min(roll.l5r5e.summary.ringsUsed, roll.l5r5e.summary.success);
|
||||
if (successes >= roll.l5r5e.summary.difficulty) {
|
||||
initiative = initiative + 1 + Math.max(successes - roll.l5r5e.summary.difficulty, 0);
|
||||
}
|
||||
}
|
||||
|
||||
updatedCombatants.push({
|
||||
_id: combatant._id,
|
||||
initiative: initiative,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Update all combatants at once
|
||||
await this.updateEmbeddedEntity("Combatant", updatedCombatants);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define how the array of Combatants is sorted in the displayed list of the tracker.
|
||||
* This method can be overridden by a system or module which needs to display combatants in an alternative order.
|
||||
* By default sort by initiative, falling back to name
|
||||
* @private
|
||||
*/
|
||||
export function _sortCombatants(a, b) {
|
||||
// if tie, sort by honor, less honorable first
|
||||
if (a.initiative === b.initiative) {
|
||||
return a.actor.data.data.social.honor - b.actor.data.data.social.honor;
|
||||
// Update all combatants at once
|
||||
await this.updateEmbeddedEntity("Combatant", updatedCombatants);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define how the array of Combatants is sorted in the displayed list of the tracker.
|
||||
* This method can be overridden by a system or module which needs to display combatants in an alternative order.
|
||||
* By default sort by initiative, falling back to name
|
||||
* @private
|
||||
*/
|
||||
_sortCombatants(a, b) {
|
||||
// if tie, sort by honor, less honorable first
|
||||
if (a.initiative === b.initiative) {
|
||||
return a.actor.data.data.social.honor - b.actor.data.data.social.honor;
|
||||
}
|
||||
return b.initiative - a.initiative;
|
||||
}
|
||||
return b.initiative - a.initiative;
|
||||
}
|
||||
|
||||
@@ -5,16 +5,24 @@ L5R5E.paths = {
|
||||
templates: `systems/l5r5e/templates/`,
|
||||
};
|
||||
|
||||
L5R5E.money = [50, 10];
|
||||
L5R5E.stances = ["earth", "air", "water", "fire", "void"];
|
||||
L5R5E.techniques = ["kata", "kiho", "invocation", "ritual", "shuji", "maho", "ninjutsu"];
|
||||
L5R5E.techniques_school = ["school_ability", "mastery_ability"];
|
||||
|
||||
L5R5E.xp = {
|
||||
costPerRank: [0, 20, 24, 32, 44, 60],
|
||||
ringCostMultiplier: 3,
|
||||
skillCostMultiplier: 2,
|
||||
techniqueCost: 3,
|
||||
};
|
||||
L5R5E.money = [50, 10];
|
||||
|
||||
L5R5E.initiativeSkills = {
|
||||
intrigue: "sentiment",
|
||||
duel: "meditation",
|
||||
skirmish: "tactics",
|
||||
mass_battle: "command",
|
||||
};
|
||||
|
||||
// Map SkillId - CategoryId
|
||||
L5R5E.skills = new Map();
|
||||
|
||||
@@ -5,9 +5,17 @@
|
||||
export class DicePickerDialog extends FormApplication {
|
||||
/**
|
||||
* Current Actor
|
||||
* @type {Actor}
|
||||
* @private
|
||||
*/
|
||||
_actor = null;
|
||||
|
||||
/**
|
||||
* If GM as set to hidden, lock the player choice so he cannot look the TN
|
||||
* @type {boolean}
|
||||
*/
|
||||
_difficultyHiddenIsLock = false;
|
||||
|
||||
/**
|
||||
* Payload Object
|
||||
*/
|
||||
@@ -26,9 +34,10 @@ export class DicePickerDialog extends FormApplication {
|
||||
difficulty: {
|
||||
value: 2,
|
||||
hidden: false,
|
||||
add_void_point: true,
|
||||
add_void_point: false,
|
||||
},
|
||||
useVoidPoint: false,
|
||||
isInitiativeRoll: false,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -84,8 +93,9 @@ export class DicePickerDialog extends FormApplication {
|
||||
* skillCatId string (artisan)
|
||||
* difficulty number (0-9)
|
||||
* difficultyHidden boolean
|
||||
* isInitiativeRoll boolean
|
||||
*
|
||||
* @param options actor, actorId, ringId, actorName, skillId, skillCatId, difficulty, difficultyHidden
|
||||
* @param options actor, actorId, ringId, actorName, skillId, skillCatId, difficulty, difficultyHidden, isInitiativeRoll
|
||||
*/
|
||||
constructor(options = {}) {
|
||||
super({}, options);
|
||||
@@ -104,29 +114,41 @@ export class DicePickerDialog extends FormApplication {
|
||||
});
|
||||
|
||||
// Ring
|
||||
if (options?.ringId) {
|
||||
if (options.ringId) {
|
||||
this.ringId = options.ringId;
|
||||
}
|
||||
|
||||
// Skill / SkillCategory
|
||||
if (options?.skillId) {
|
||||
if (options.skillId) {
|
||||
this.skillId = options.skillId;
|
||||
}
|
||||
|
||||
// SkillCategory skillCatId
|
||||
if (options?.skillCatId) {
|
||||
if (options.skillCatId) {
|
||||
this.skillCatId = options.skillCatId;
|
||||
}
|
||||
|
||||
// Difficulty
|
||||
if (options?.difficulty) {
|
||||
if (options.difficulty) {
|
||||
this.difficulty = options.difficulty;
|
||||
} else {
|
||||
this.difficulty = game.settings.get("l5r5e", "initiative.difficulty.value");
|
||||
}
|
||||
|
||||
// difficultyHidden
|
||||
if (options?.difficultyHidden) {
|
||||
this.difficultyHidden = options.difficultyHidden;
|
||||
}
|
||||
// DifficultyHidden
|
||||
this.difficultyHidden = !!options.difficultyHidden;
|
||||
|
||||
// InitiativeRoll
|
||||
this.object.isInitiativeRoll = !!options.isInitiativeRoll;
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh data (used from socket)
|
||||
*/
|
||||
async refresh() {
|
||||
this.difficulty = game.settings.get("l5r5e", "initiative.difficulty.value");
|
||||
this.difficultyHidden = false;
|
||||
this.render(false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -221,7 +243,14 @@ export class DicePickerDialog extends FormApplication {
|
||||
* @param isHidden
|
||||
*/
|
||||
set difficultyHidden(isHidden) {
|
||||
// If GM hide, then player choice don't matter
|
||||
this._difficultyHiddenIsLock = game.settings.get("l5r5e", "initiative.difficulty.hidden");
|
||||
if (this._difficultyHiddenIsLock) {
|
||||
isHidden = true;
|
||||
}
|
||||
this.object.difficulty.hidden = !!isHidden;
|
||||
this.object.difficulty.add_void_point = this.object.difficulty.hidden;
|
||||
this._updateVoidPointUsage();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -247,6 +276,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
canUseVoidPoint:
|
||||
this.object.difficulty.add_void_point || !this._actor || this._actor.data.data.void_points.value > 0,
|
||||
disableSubmit: this.object.skill.value < 1 && this.object.ring.value < 1,
|
||||
difficultyHiddenIsLock: this._difficultyHiddenIsLock,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -342,20 +372,23 @@ export class DicePickerDialog extends FormApplication {
|
||||
return false;
|
||||
}
|
||||
|
||||
let formula = [];
|
||||
if (this.object.ring.value > 0) {
|
||||
formula.push(`${this.object.ring.value}dr`);
|
||||
}
|
||||
if (this.object.skill.value > 0) {
|
||||
formula.push(`${this.object.skill.value}ds`);
|
||||
// If initiative roll, check if player already have
|
||||
if (this.object.isInitiativeRoll) {
|
||||
const combatant = game.combat.combatants.find((c) => c.actor._id === this._actor._id && c.initiative > 0);
|
||||
if (combatant) {
|
||||
ui.notifications.error(game.i18n.localize("l5r5e.conflict.initiative.already_set"));
|
||||
return this.close();
|
||||
}
|
||||
}
|
||||
|
||||
// Update Actor
|
||||
if (this._actor) {
|
||||
const actorData = duplicate(this._actor.data.data);
|
||||
|
||||
// TODO update actor stance ? good idea or not, choice-able ?
|
||||
// actorData.stance = approach;
|
||||
// Update the actor stance on initiative only
|
||||
if (this.object.isInitiativeRoll) {
|
||||
actorData.stance = this.object.ring.id;
|
||||
}
|
||||
|
||||
// If hidden add 1 void pt
|
||||
if (this.object.difficulty.add_void_point) {
|
||||
@@ -368,24 +401,50 @@ export class DicePickerDialog extends FormApplication {
|
||||
}
|
||||
|
||||
// Update actor
|
||||
this._actor.update({
|
||||
await this._actor.update({
|
||||
data: diffObject(this._actor.data.data, actorData),
|
||||
});
|
||||
}
|
||||
|
||||
// Let's roll !
|
||||
const roll = await new game.l5r5e.RollL5r5e(formula.join("+"));
|
||||
// Build the formula
|
||||
let formula = [];
|
||||
if (this.object.ring.value > 0) {
|
||||
formula.push(`${this.object.ring.value}dr`);
|
||||
}
|
||||
if (this.object.skill.value > 0) {
|
||||
formula.push(`${this.object.skill.value}ds`);
|
||||
}
|
||||
|
||||
roll.actor = this._actor;
|
||||
roll.l5r5e.stance = this.object.ring.id;
|
||||
roll.l5r5e.skillId = this.object.skill.id;
|
||||
roll.l5r5e.skillCatId = this.object.skill.cat;
|
||||
roll.l5r5e.summary.difficulty = this.object.difficulty.value;
|
||||
roll.l5r5e.summary.difficultyHidden = this.object.difficulty.hidden;
|
||||
roll.l5r5e.summary.voidPointUsed = this.object.useVoidPoint;
|
||||
if (this.object.isInitiativeRoll) {
|
||||
// Initiative roll
|
||||
this._actor.rollInitiative({
|
||||
initiativeOptions: {
|
||||
formula: formula.join("+"),
|
||||
// updateTurn: true,
|
||||
messageOptions: {
|
||||
skillId: this.object.skill.id,
|
||||
difficulty: this.object.difficulty.value,
|
||||
difficultyHidden: this.object.difficulty.hidden,
|
||||
useVoidPoint: this.object.useVoidPoint,
|
||||
},
|
||||
},
|
||||
});
|
||||
} else {
|
||||
// Regular roll, so let's roll !
|
||||
const roll = await new game.l5r5e.RollL5r5e(formula.join("+"));
|
||||
|
||||
roll.actor = this._actor;
|
||||
roll.l5r5e.stance = this.object.ring.id;
|
||||
roll.l5r5e.skillId = this.object.skill.id;
|
||||
roll.l5r5e.skillCatId = this.object.skill.cat;
|
||||
roll.l5r5e.summary.difficulty = this.object.difficulty.value;
|
||||
roll.l5r5e.summary.difficultyHidden = this.object.difficulty.hidden;
|
||||
roll.l5r5e.summary.voidPointUsed = this.object.useVoidPoint;
|
||||
|
||||
await roll.roll();
|
||||
await roll.toMessage();
|
||||
}
|
||||
|
||||
await roll.roll();
|
||||
await roll.toMessage();
|
||||
return this.close();
|
||||
}
|
||||
|
||||
|
||||
154
system/scripts/dice/gm-tools-dialog.js
Normal file
154
system/scripts/dice/gm-tools-dialog.js
Normal file
@@ -0,0 +1,154 @@
|
||||
/**
|
||||
* L5R Initiative Roll dialog
|
||||
* @extends {FormApplication}
|
||||
*/
|
||||
export class GmToolsDialog extends FormApplication {
|
||||
/**
|
||||
* Settings
|
||||
*/
|
||||
object = {};
|
||||
|
||||
/**
|
||||
* Assign the default options
|
||||
* @override
|
||||
*/
|
||||
static get defaultOptions() {
|
||||
const x = $(window).width();
|
||||
const y = $(window).height();
|
||||
return mergeObject(super.defaultOptions, {
|
||||
id: "l5r5e-gm-tools-dialog",
|
||||
classes: ["l5r5e", "gm-tools-dialog"],
|
||||
template: CONFIG.l5r5e.paths.templates + "dice/gm-tools-dialog.html",
|
||||
title: game.i18n.localize("l5r5e.dicepicker.difficulty_title"),
|
||||
width: 200, // ignored under 200px
|
||||
height: 130, // ignored under 50px
|
||||
scale: 0.5, // so scale /2 :D
|
||||
left: x - 470,
|
||||
top: y - 94,
|
||||
closeOnSubmit: false,
|
||||
submitOnClose: false,
|
||||
submitOnChange: true,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param {ApplicationOptions} options
|
||||
*/
|
||||
constructor(options = {}) {
|
||||
super(options);
|
||||
this.object = {
|
||||
difficulty: game.settings.get("l5r5e", "initiative.difficulty.value"),
|
||||
difficultyHidden: game.settings.get("l5r5e", "initiative.difficulty.hidden"),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Do not close this dialog
|
||||
* @override
|
||||
*/
|
||||
close() {
|
||||
// TODO better implementation needed : see KeyboardManager._onEscape(event, up, modifiers)
|
||||
// This windows is always open, so esc key si stuck at step 2 : Object.keys(ui.windows).length > 0
|
||||
// Case 3 (GM) - release controlled objects
|
||||
if (canvas?.ready && game.user.isGM && Object.keys(canvas.activeLayer._controlled).length) {
|
||||
canvas.activeLayer.releaseAll();
|
||||
} else {
|
||||
// Case 4 - toggle the main menu
|
||||
ui.menu.toggle();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent non GM to render this windows
|
||||
* @override
|
||||
*/
|
||||
render(force = false, options = {}) {
|
||||
if (!game.user.isGM) {
|
||||
return false;
|
||||
}
|
||||
return super.render(force, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the close button
|
||||
* @override
|
||||
*/
|
||||
_getHeaderButtons() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct and return the data object used to render the HTML template for this form application.
|
||||
* @param options
|
||||
* @return {Object}
|
||||
* @override
|
||||
*/
|
||||
getData(options = null) {
|
||||
return {
|
||||
...super.getData(options),
|
||||
data: this.object,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen to html elements
|
||||
* @override
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
if (!game.user.isGM) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Modify difficulty hidden
|
||||
html.find(`.difficulty_hidden`).on("click", (event) => {
|
||||
this.object.difficultyHidden = !this.object.difficultyHidden;
|
||||
game.settings
|
||||
.set("l5r5e", "initiative.difficulty.hidden", this.object.difficultyHidden)
|
||||
.then(() => this.submit());
|
||||
});
|
||||
|
||||
// Modify difficulty (TN)
|
||||
html.find(`.difficulty`).on("mousedown", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
switch (event.which) {
|
||||
case 1:
|
||||
// left clic - add 1
|
||||
this.object.difficulty = Math.min(9, this.object.difficulty + 1);
|
||||
break;
|
||||
case 2:
|
||||
// middle clic - reset to 2
|
||||
this.object.difficulty = 2;
|
||||
break;
|
||||
case 3:
|
||||
// right clic - minus 1
|
||||
this.object.difficulty = Math.max(0, this.object.difficulty - 1);
|
||||
break;
|
||||
}
|
||||
game.settings.set("l5r5e", "initiative.difficulty.value", this.object.difficulty).then(() => this.submit());
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called upon form submission after form data is validated
|
||||
* @param event The initial triggering submission event
|
||||
* @param formData The object of validated form data with which to update the object
|
||||
* @returns A Promise which resolves once the update operation has completed
|
||||
* @override
|
||||
*/
|
||||
async _updateObject(event, formData) {
|
||||
// Notify the change to other players if they already have opened the DicePicker
|
||||
game.l5r5e.sockets.refreshAppId("l5r5e-dice-picker-dialog");
|
||||
|
||||
// If the current GM also have the DP open
|
||||
const app = Object.values(ui.windows).find((e) => e.id === "l5r5e-dice-picker-dialog");
|
||||
if (app && typeof app.refresh === "function") {
|
||||
app.refresh();
|
||||
}
|
||||
|
||||
this.render(false);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,3 @@
|
||||
import { L5rBaseDie } from "./dietype/l5r-base-die.js";
|
||||
import { ActorL5r5e } from "../actor.js";
|
||||
|
||||
/**
|
||||
* Roll for L5R5e
|
||||
*/
|
||||
@@ -24,6 +21,7 @@ export class RollL5r5e extends Roll {
|
||||
difficulty: 2,
|
||||
difficultyHidden: false,
|
||||
voidPointUsed: false,
|
||||
ringsUsed: 0,
|
||||
success: 0,
|
||||
explosive: 0,
|
||||
opportunity: 0,
|
||||
@@ -79,8 +77,14 @@ export class RollL5r5e extends Roll {
|
||||
|
||||
// Store final outputs
|
||||
this._rolled = true;
|
||||
this.l5r5e.dicesTypes.std = this.dice.some((term) => term instanceof DiceTerm && !(term instanceof L5rBaseDie)); // ignore math symbols
|
||||
this.l5r5e.dicesTypes.l5r = this.dice.some((term) => term instanceof L5rBaseDie);
|
||||
this.l5r5e.dicesTypes.std = this.dice.some(
|
||||
(term) => term instanceof DiceTerm && !(term instanceof game.l5r5e.L5rBaseDie)
|
||||
); // ignore math symbols
|
||||
this.l5r5e.dicesTypes.l5r = this.dice.some((term) => term instanceof game.l5r5e.L5rBaseDie);
|
||||
this.l5r5e.summary.ringsUsed = this.dice.reduce(
|
||||
(acc, term) => (term instanceof game.l5r5e.RingDie ? acc + term.number : acc),
|
||||
0
|
||||
);
|
||||
|
||||
return this;
|
||||
}
|
||||
@@ -92,7 +96,7 @@ export class RollL5r5e extends Roll {
|
||||
* @private
|
||||
*/
|
||||
_l5rSummary(term) {
|
||||
if (!(term instanceof L5rBaseDie)) {
|
||||
if (!(term instanceof game.l5r5e.L5rBaseDie)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -140,7 +144,7 @@ export class RollL5r5e extends Roll {
|
||||
getTooltip(contexte = null) {
|
||||
const parts = this.dice.map((term) => {
|
||||
const cls = term.constructor;
|
||||
const isL5rDie = term instanceof L5rBaseDie;
|
||||
const isL5rDie = term instanceof game.l5r5e.L5rBaseDie;
|
||||
|
||||
return {
|
||||
formula: term.formula,
|
||||
@@ -223,7 +227,7 @@ export class RollL5r5e extends Roll {
|
||||
canRnK: canRnK,
|
||||
dices: this.dice.map((d) => {
|
||||
return {
|
||||
diceTypeL5r: d instanceof L5rBaseDie,
|
||||
diceTypeL5r: d instanceof game.l5r5e.L5rBaseDie,
|
||||
rolls: d.results.map((r) => {
|
||||
return {
|
||||
result: d.constructor.getResultLabel(r.result),
|
||||
@@ -290,7 +294,7 @@ export class RollL5r5e extends Roll {
|
||||
roll.l5r5e = duplicate(data.l5r5e);
|
||||
|
||||
// get real Actor object
|
||||
if (data.l5r5e.actor && !(data.l5r5e.actor instanceof ActorL5r5e)) {
|
||||
if (data.l5r5e.actor && !(data.l5r5e.actor instanceof game.l5r5e.ActorL5r5e)) {
|
||||
const actor = game.actors.get(data.l5r5e.actor.id);
|
||||
if (actor) {
|
||||
roll.l5r5e.actor = actor;
|
||||
|
||||
99
system/scripts/handlebars.js
Normal file
99
system/scripts/handlebars.js
Normal file
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* Custom Handlebars for L5R5e
|
||||
*/
|
||||
export const RegisterHandlebars = function () {
|
||||
/* ------------------------------------ */
|
||||
/* Localizations */
|
||||
/* ------------------------------------ */
|
||||
Handlebars.registerHelper("localizeSkill", function (categoryId, skillId) {
|
||||
const key = "l5r5e.skills." + categoryId.toLowerCase() + "." + skillId.toLowerCase();
|
||||
return game.i18n.localize(key);
|
||||
});
|
||||
|
||||
Handlebars.registerHelper("localizeSkillId", function (skillId) {
|
||||
const key = "l5r5e.skills." + CONFIG.l5r5e.skills.get(skillId.toLowerCase()) + "." + skillId.toLowerCase();
|
||||
return game.i18n.localize(key);
|
||||
});
|
||||
|
||||
Handlebars.registerHelper("localizeRing", function (ringId) {
|
||||
const key = "l5r5e.rings." + ringId.toLowerCase();
|
||||
return game.i18n.localize(key);
|
||||
});
|
||||
|
||||
Handlebars.registerHelper("localizeStanceTip", function (ringId) {
|
||||
const key = "l5r5e.conflict.stances." + ringId.toLowerCase() + "tip";
|
||||
return game.i18n.localize(key);
|
||||
});
|
||||
|
||||
Handlebars.registerHelper("localizeTechnique", function (techniqueName) {
|
||||
return game.i18n.localize("l5r5e.techniques." + techniqueName.toLowerCase());
|
||||
});
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* Utility */
|
||||
/* ------------------------------------ */
|
||||
/**
|
||||
* Json - Display a object in textarea (for debug)
|
||||
*/
|
||||
Handlebars.registerHelper("json", function (...objects) {
|
||||
objects.pop(); // remove this function call
|
||||
return new Handlebars.SafeString(objects.map((e) => `<textarea>${JSON.stringify(e)}</textarea>`));
|
||||
});
|
||||
|
||||
/**
|
||||
* Add props "checked" if a and b are equal ({{radioChecked a b}}
|
||||
*/
|
||||
Handlebars.registerHelper("radioChecked", function (a, b) {
|
||||
return a === b ? new Handlebars.SafeString('checked="checked"') : "";
|
||||
});
|
||||
|
||||
/**
|
||||
* Utility conditional, usable in nested expression
|
||||
* {{#ifCond (ifCond advancement.type '==' 'technique') '||' (ifCond item.data.technique_type '==' 'kata')}}
|
||||
* {{#ifCond '["distinction","passion"]' 'includes' item.data.peculiarity_type}}
|
||||
*/
|
||||
Handlebars.registerHelper("ifCond", function (a, operator, b, options) {
|
||||
let result = false;
|
||||
switch (operator) {
|
||||
case "==":
|
||||
result = a == b;
|
||||
break;
|
||||
case "===":
|
||||
result = a === b;
|
||||
break;
|
||||
case "!=":
|
||||
result = a != b;
|
||||
break;
|
||||
case "!==":
|
||||
result = a !== b;
|
||||
break;
|
||||
case "<":
|
||||
result = a < b;
|
||||
break;
|
||||
case "<=":
|
||||
result = a <= b;
|
||||
break;
|
||||
case ">":
|
||||
result = a > b;
|
||||
break;
|
||||
case ">=":
|
||||
result = a >= b;
|
||||
break;
|
||||
case "&&":
|
||||
result = a && b;
|
||||
break;
|
||||
case "||":
|
||||
result = a || b;
|
||||
break;
|
||||
case "includes":
|
||||
result = a && b && a.includes(b);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (typeof options.fn === "function") {
|
||||
return result ? options.fn(this) : options.inverse(this);
|
||||
}
|
||||
return result;
|
||||
});
|
||||
};
|
||||
217
system/scripts/hooks.js
Normal file
217
system/scripts/hooks.js
Normal file
@@ -0,0 +1,217 @@
|
||||
/* eslint-disable no-undef */
|
||||
export default class HooksL5r5e {
|
||||
/**
|
||||
* Do anything after initialization but before ready
|
||||
*/
|
||||
static setup() {
|
||||
// Embed Babele compendiums
|
||||
if (
|
||||
typeof Babele !== "undefined" &&
|
||||
Babele.get().modules.every((module) => module.lang !== "fr" || module.module !== "l5r5e-dev")
|
||||
) {
|
||||
Babele.get().register({
|
||||
module: "../systems/l5r5e", // babele only accept modules, so... well :D
|
||||
lang: "fr",
|
||||
dir: "babele/fr-fr",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Do anything once the system is ready
|
||||
*/
|
||||
static ready() {
|
||||
// Migration stuff
|
||||
if (game.l5r5e.migrations.needUpdate()) {
|
||||
game.l5r5e.migrations.migrateWorld();
|
||||
}
|
||||
|
||||
// Settings TN and EncounterType
|
||||
if (game.user.isGM) {
|
||||
new game.l5r5e.GmToolsDialog().render(true);
|
||||
}
|
||||
|
||||
// ***** UI *****
|
||||
// Add title on button dice icon
|
||||
$(".chat-control-icon")[0].title = game.i18n.localize("l5r5e.chatdices.dicepicker");
|
||||
|
||||
// Open Help dialog on clic on logo
|
||||
$("#logo")
|
||||
.on("click", () => new game.l5r5e.HelpDialog().render(true))
|
||||
.prop("title", game.i18n.localize("l5r5e.logo.alt"));
|
||||
|
||||
// Spanish specific - Disclaimer "not translated by Edge"
|
||||
if (game.i18n.lang === "es") {
|
||||
ui.notifications.info(game.i18n.localize("l5r5e.global.edge_translation_disclaimer"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* SidebarTab
|
||||
*/
|
||||
static renderSidebarTab(app, html, data) {
|
||||
// Add button on dice icon
|
||||
html.find(".chat-control-icon").click(async () => {
|
||||
new game.l5r5e.DicePickerDialog().render();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Chat Message
|
||||
*/
|
||||
static renderChatMessage(message, html, data) {
|
||||
// Add a extra CSS class to roll
|
||||
if (message.isRoll) {
|
||||
html.addClass("roll");
|
||||
html.on("click", ".chat-dice-rnk", game.l5r5e.RollnKeepDialog.onChatAction.bind(this));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Combat tracker
|
||||
*/
|
||||
static async renderCombatTracker(app, html, data) {
|
||||
// Display Combat bar (only for GMs)
|
||||
await this._gmCombatBar(app, html, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a GM bar for Combat/Initiative
|
||||
* @private
|
||||
*/
|
||||
static async _gmCombatBar(app, html, data) {
|
||||
// Only for GMs
|
||||
if (!game.user.isGM) {
|
||||
return;
|
||||
}
|
||||
|
||||
// *** Conf ***
|
||||
const encounterTypeList = Object.keys(CONFIG.l5r5e.initiativeSkills);
|
||||
const prepared = {
|
||||
character: game.settings.get("l5r5e", "initiative.prepared.character"),
|
||||
adversary: game.settings.get("l5r5e", "initiative.prepared.adversary"),
|
||||
minion: game.settings.get("l5r5e", "initiative.prepared.minion"),
|
||||
};
|
||||
|
||||
// *** Template ***
|
||||
const tpl = await renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/combat-tracker-bar.html`, {
|
||||
encounterType: game.settings.get("l5r5e", "initiative.encounter"),
|
||||
encounterTypeList,
|
||||
prepared,
|
||||
});
|
||||
|
||||
// Add/replace in bar
|
||||
const elmt = html.find("#l5r5e_gm_combat_tracker_bar");
|
||||
if (elmt.length > 0) {
|
||||
elmt.replaceWith(tpl);
|
||||
} else {
|
||||
html.find("#combat-round").append(tpl);
|
||||
}
|
||||
|
||||
// Buttons Listeners
|
||||
// TODO event for multiple GM
|
||||
html.find(".encounter-control").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const encounter = $(event.currentTarget).data("id");
|
||||
if (!encounterTypeList.includes(encounter)) {
|
||||
return;
|
||||
}
|
||||
game.settings
|
||||
.set("l5r5e", "initiative.encounter", encounter)
|
||||
.then(() => HooksL5r5e._gmCombatBar(app, html, data));
|
||||
});
|
||||
|
||||
html.find(".prepared-control").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
let preparedId = $(event.currentTarget).data("id");
|
||||
if (!Object.hasOwnProperty.call(prepared, preparedId)) {
|
||||
return;
|
||||
}
|
||||
let value = prepared[preparedId];
|
||||
switch (value) {
|
||||
case "false":
|
||||
value = "true";
|
||||
break;
|
||||
case "true":
|
||||
value = preparedId === "minion" ? "false" : "null";
|
||||
break;
|
||||
case "null":
|
||||
value = "false";
|
||||
break;
|
||||
}
|
||||
game.settings
|
||||
.set("l5r5e", `initiative.prepared.${preparedId}`, value)
|
||||
.then(() => HooksL5r5e._gmCombatBar(app, html, data));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Compendium display
|
||||
*/
|
||||
static async renderCompendium(app, html, data) {
|
||||
// Add Rank & Ring in the compendium
|
||||
if (app.entity === "Item") {
|
||||
const content = await app.getContent();
|
||||
content.forEach((item) => {
|
||||
if (!!item.data.data.ring || !!item.data.data.rank) {
|
||||
html.find(`[data-entry-id="${item._id}"]`).append(
|
||||
`<i` +
|
||||
(item.data.data.ring ? ` class="i_${item.data.data.ring}"` : ``) +
|
||||
`>` +
|
||||
(item.data.data.rank ? game.i18n.localize("l5r5e.rank") + " " + item.data.data.rank : "") +
|
||||
`</i>`
|
||||
);
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* DiceSoNice Hook
|
||||
*/
|
||||
static diceSoNiceReady(dice3d) {
|
||||
const texturePath = `${CONFIG.l5r5e.paths.assets}dices/default/3d/`;
|
||||
|
||||
// dice3d.addSystem({
|
||||
// id: "l5r5e",
|
||||
// name: "Legend of the Five Rings 5E"
|
||||
// }, "force");
|
||||
|
||||
// Rings
|
||||
dice3d.addDicePreset(
|
||||
{
|
||||
name: "L5R Ring Dice",
|
||||
type: "ddr", // don't known why the "dd" prefix is required, term is "r"
|
||||
labels: Object.keys(game.l5r5e.RingDie.FACES).map(
|
||||
(e) => `${texturePath}${game.l5r5e.RingDie.FACES[e].image.replace("ring_", "")}.png`
|
||||
),
|
||||
bumpMaps: Object.keys(game.l5r5e.RingDie.FACES).map(
|
||||
(e) => `${texturePath}${game.l5r5e.RingDie.FACES[e].image.replace("ring_", "")}_bm.png`
|
||||
),
|
||||
colorset: "black",
|
||||
system: "standard",
|
||||
},
|
||||
"d6"
|
||||
);
|
||||
|
||||
// Skills
|
||||
dice3d.addDicePreset(
|
||||
{
|
||||
name: "L5R Skill Dice",
|
||||
type: "dds",
|
||||
labels: Object.keys(game.l5r5e.AbilityDie.FACES).map(
|
||||
(e) => `${texturePath}${game.l5r5e.AbilityDie.FACES[e].image.replace("skill_", "")}.png`
|
||||
),
|
||||
bumpMaps: Object.keys(game.l5r5e.AbilityDie.FACES).map(
|
||||
(e) => `${texturePath}${game.l5r5e.AbilityDie.FACES[e].image.replace("skill_", "")}_bm.png`
|
||||
),
|
||||
colorset: "white",
|
||||
system: "standard",
|
||||
},
|
||||
"d12"
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -89,7 +89,7 @@ export class ItemSheetL5r5e extends ItemSheet {
|
||||
event.stopPropagation();
|
||||
const elmt = $(event.currentTarget).data("toggle");
|
||||
const tgt = html.find("." + elmt);
|
||||
tgt.hasClass("toggle-active") ? tgt.removeClass("toggle-active") : tgt.addClass("toggle-active");
|
||||
tgt.toggleClass("toggle-active");
|
||||
});
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { L5R5E } from "../config.js";
|
||||
import { ItemSheetL5r5e } from "./item-sheet.js";
|
||||
|
||||
/**
|
||||
@@ -20,7 +19,7 @@ export class WeaponSheetL5r5e extends ItemSheetL5r5e {
|
||||
const sheetData = await super.getData();
|
||||
|
||||
// Martial skills only
|
||||
sheetData.data.skills = Array.from(L5R5E.skills)
|
||||
sheetData.data.skills = Array.from(CONFIG.l5r5e.skills)
|
||||
.filter(([id, cat]) => cat === "martial")
|
||||
.map(([id, cat]) => id);
|
||||
|
||||
|
||||
@@ -4,18 +4,22 @@ import { HelpersL5r5e } from "./helpers.js";
|
||||
import { SocketHandlerL5r5e } from "./socket-handler.js";
|
||||
import { RegisterSettings } from "./settings.js";
|
||||
import { PreloadTemplates } from "./preloadTemplates.js";
|
||||
import { RegisterHandlebars } from "./handlebars.js";
|
||||
import { HelpDialog } from "./help/help-dialog.js";
|
||||
import HooksL5r5e from "./hooks.js";
|
||||
// Actors
|
||||
import { ActorL5r5e } from "./actor.js";
|
||||
import { CharacterSheetL5r5e } from "./actors/character-sheet.js";
|
||||
import { NpcSheetL5r5e } from "./actors/npc-sheet.js";
|
||||
// Dice and rolls
|
||||
import { L5rBaseDie } from "./dice/dietype/l5r-base-die.js";
|
||||
import { AbilityDie } from "./dice/dietype/ability-die.js";
|
||||
import { RingDie } from "./dice/dietype/ring-die.js";
|
||||
import { RollL5r5e } from "./dice/roll.js";
|
||||
import { DicePickerDialog } from "./dice/dice-picker-dialog.js";
|
||||
import { RollnKeepDialog } from "./dice/roll-n-keep-dialog.js";
|
||||
import { _sortCombatants, rollInitiative } from "./combat.js";
|
||||
import { CombatL5r5e } from "./combat.js";
|
||||
import { GmToolsDialog } from "./dice/gm-tools-dialog.js";
|
||||
// Items
|
||||
import { ItemL5r5e } from "./item.js";
|
||||
import { ItemSheetL5r5e } from "./items/item-sheet.js";
|
||||
@@ -28,11 +32,13 @@ import { PeculiaritySheetL5r5e } from "./items/peculiarity-sheet.js";
|
||||
// JournalEntry
|
||||
import { JournalL5r5e } from "./journal.js";
|
||||
import { BaseJournalSheetL5r5e } from "./journals/base-journal-sheet.js";
|
||||
// Specific
|
||||
import { MigrationL5r5e } from "./migration.js";
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* Initialize system */
|
||||
/* ------------------------------------ */
|
||||
Hooks.once("init", async function () {
|
||||
Hooks.once("init", async () => {
|
||||
// ***** Initializing l5r5e *****
|
||||
// Ascii art :p
|
||||
console.log(
|
||||
@@ -48,6 +54,7 @@ Hooks.once("init", async function () {
|
||||
CONFIG.l5r5e = L5R5E;
|
||||
|
||||
// Assign custom classes and constants here
|
||||
CONFIG.Combat.entityClass = CombatL5r5e;
|
||||
CONFIG.Actor.entityClass = ActorL5r5e;
|
||||
CONFIG.Actor.sheetClasses = CharacterSheetL5r5e;
|
||||
CONFIG.Item.entityClass = ItemL5r5e;
|
||||
@@ -64,25 +71,29 @@ Hooks.once("init", async function () {
|
||||
|
||||
// Add some classes in game
|
||||
game.l5r5e = {
|
||||
L5rBaseDie,
|
||||
RingDie,
|
||||
AbilityDie,
|
||||
HelpersL5r5e,
|
||||
RollL5r5e,
|
||||
DicePickerDialog,
|
||||
RollnKeepDialog,
|
||||
GmToolsDialog,
|
||||
ActorL5r5e,
|
||||
HelpDialog,
|
||||
sockets: new SocketHandlerL5r5e(),
|
||||
migrations: MigrationL5r5e,
|
||||
};
|
||||
|
||||
// Register custom system settings
|
||||
RegisterSettings();
|
||||
|
||||
// Register custom Handlebars Helpers
|
||||
RegisterHandlebars();
|
||||
|
||||
// Preload Handlebars templates
|
||||
await PreloadTemplates();
|
||||
|
||||
// ***** Combat *****
|
||||
Combat.prototype.rollInitiative = rollInitiative;
|
||||
Combat.prototype._sortCombatants = _sortCombatants;
|
||||
// game.combat.settings.resource = "fatigue.value"; // nope :/
|
||||
|
||||
// ***** Register custom sheets *****
|
||||
// Actors
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
@@ -102,186 +113,19 @@ Hooks.once("init", async function () {
|
||||
// Journal
|
||||
Items.unregisterSheet("core", JournalSheet);
|
||||
Items.registerSheet("l5r5e", BaseJournalSheetL5r5e, { makeDefault: true });
|
||||
|
||||
// ***** Handlebars *****
|
||||
// for debug
|
||||
Handlebars.registerHelper("json", function (...objects) {
|
||||
objects.pop(); // remove this function call
|
||||
return new Handlebars.SafeString(objects.map((e) => `<textarea>${JSON.stringify(e)}</textarea>`));
|
||||
});
|
||||
|
||||
// Add props "checked" if a and b are equal ({{radioChecked a b}}
|
||||
Handlebars.registerHelper("radioChecked", function (a, b) {
|
||||
return a === b ? new Handlebars.SafeString('checked="checked"') : "";
|
||||
});
|
||||
|
||||
Handlebars.registerHelper("localizeSkill", function (categoryId, skillId) {
|
||||
const key = "l5r5e.skills." + categoryId.toLowerCase() + "." + skillId.toLowerCase();
|
||||
return game.i18n.localize(key);
|
||||
});
|
||||
Handlebars.registerHelper("localizeSkillId", function (skillId) {
|
||||
const key = "l5r5e.skills." + L5R5E.skills.get(skillId.toLowerCase()) + "." + skillId.toLowerCase();
|
||||
return game.i18n.localize(key);
|
||||
});
|
||||
|
||||
Handlebars.registerHelper("localizeRing", function (ringId) {
|
||||
const key = "l5r5e.rings." + ringId.toLowerCase();
|
||||
return game.i18n.localize(key);
|
||||
});
|
||||
|
||||
Handlebars.registerHelper("localizeStanceTip", function (ringId) {
|
||||
const key = "l5r5e.conflict.stances." + ringId.toLowerCase() + "tip";
|
||||
return game.i18n.localize(key);
|
||||
});
|
||||
|
||||
Handlebars.registerHelper("localizeTechnique", function (techniqueName) {
|
||||
return game.i18n.localize("l5r5e.techniques." + techniqueName.toLowerCase());
|
||||
});
|
||||
|
||||
// Utility conditional, usable in nested expression
|
||||
// {{#ifCond (ifCond advancement.type '==' 'technique') '||' (ifCond item.data.technique_type '==' 'kata')}}
|
||||
// {{#ifCond '["distinction","passion"]' 'includes' item.data.peculiarity_type}}
|
||||
Handlebars.registerHelper("ifCond", function (a, operator, b, options) {
|
||||
let result = false;
|
||||
switch (operator) {
|
||||
case "==":
|
||||
result = a == b;
|
||||
break;
|
||||
case "===":
|
||||
result = a === b;
|
||||
break;
|
||||
case "!=":
|
||||
result = a != b;
|
||||
break;
|
||||
case "!==":
|
||||
result = a !== b;
|
||||
break;
|
||||
case "<":
|
||||
result = a < b;
|
||||
break;
|
||||
case "<=":
|
||||
result = a <= b;
|
||||
break;
|
||||
case ">":
|
||||
result = a > b;
|
||||
break;
|
||||
case ">=":
|
||||
result = a >= b;
|
||||
break;
|
||||
case "&&":
|
||||
result = a && b;
|
||||
break;
|
||||
case "||":
|
||||
result = a || b;
|
||||
break;
|
||||
case "includes":
|
||||
result = a && b && a.includes(b);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (typeof options.fn === "function") {
|
||||
return result ? options.fn(this) : options.inverse(this);
|
||||
}
|
||||
return result;
|
||||
});
|
||||
});
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* Setup system */
|
||||
/* Hooks Once */
|
||||
/* ------------------------------------ */
|
||||
Hooks.once("setup", function () {
|
||||
// Do anything after initialization but before ready
|
||||
// Embed Babele compendiums
|
||||
/* eslint-disable no-undef */
|
||||
if (
|
||||
typeof Babele !== "undefined" &&
|
||||
Babele.get().modules.every((module) => module.lang !== "fr" || module.module !== "l5r5e-dev")
|
||||
) {
|
||||
Babele.get().register({
|
||||
module: "../systems/l5r5e", // babele only accept modules, so... well :D
|
||||
lang: "fr",
|
||||
dir: "babele/fr-fr",
|
||||
});
|
||||
}
|
||||
});
|
||||
Hooks.once("setup", HooksL5r5e.setup);
|
||||
Hooks.once("ready", HooksL5r5e.ready);
|
||||
Hooks.once("diceSoNiceReady", (dice3d) => HooksL5r5e.diceSoNiceReady(dice3d));
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* Do anything once the system is ready */
|
||||
/* Hooks On */
|
||||
/* ------------------------------------ */
|
||||
Hooks.once("ready", function () {
|
||||
// Add title on button dice icon
|
||||
$(".chat-control-icon")[0].title = game.i18n.localize("l5r5e.chatdices.dicepicker");
|
||||
|
||||
// Open Help dialog on clic on logo
|
||||
$("#logo")
|
||||
.on("click", () => new game.l5r5e.HelpDialog().render(true))
|
||||
.prop("title", game.i18n.localize("l5r5e.logo.alt"));
|
||||
});
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* SidebarTab */
|
||||
/* ------------------------------------ */
|
||||
Hooks.on("renderSidebarTab", (app, html, data) => {
|
||||
// Add button on dice icon
|
||||
html.find(".chat-control-icon").click(async () => {
|
||||
new game.l5r5e.DicePickerDialog().render();
|
||||
});
|
||||
});
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* Chat Message */
|
||||
/* ------------------------------------ */
|
||||
Hooks.on("renderChatMessage", (message, html, data) => {
|
||||
// Add a extra CSS class to roll
|
||||
if (message.isRoll) {
|
||||
html.addClass("roll");
|
||||
html.on("click", ".chat-dice-rnk", RollnKeepDialog.onChatAction.bind(this));
|
||||
}
|
||||
});
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* DiceSoNice Hook */
|
||||
/* ------------------------------------ */
|
||||
Hooks.once("diceSoNiceReady", (dice3d) => {
|
||||
const texturePath = `${CONFIG.l5r5e.paths.assets}dices/default/3d/`;
|
||||
|
||||
// dice3d.addSystem({
|
||||
// id: "l5r5e",
|
||||
// name: "Legend of the Five Rings 5E"
|
||||
// }, "force");
|
||||
|
||||
// Rings
|
||||
dice3d.addDicePreset(
|
||||
{
|
||||
name: "L5R Ring Dice",
|
||||
type: "ddr", // don't known why the "dd" prefix is required, term is "r"
|
||||
labels: Object.keys(RingDie.FACES).map(
|
||||
(e) => `${texturePath}${RingDie.FACES[e].image.replace("ring_", "")}.png`
|
||||
),
|
||||
bumpMaps: Object.keys(RingDie.FACES).map(
|
||||
(e) => `${texturePath}${RingDie.FACES[e].image.replace("ring_", "")}_bm.png`
|
||||
),
|
||||
colorset: "black",
|
||||
system: "standard",
|
||||
},
|
||||
"d6"
|
||||
);
|
||||
|
||||
// Skills
|
||||
dice3d.addDicePreset(
|
||||
{
|
||||
name: "L5R Skill Dice",
|
||||
type: "dds",
|
||||
labels: Object.keys(AbilityDie.FACES).map(
|
||||
(e) => `${texturePath}${AbilityDie.FACES[e].image.replace("skill_", "")}.png`
|
||||
),
|
||||
bumpMaps: Object.keys(AbilityDie.FACES).map(
|
||||
(e) => `${texturePath}${AbilityDie.FACES[e].image.replace("skill_", "")}_bm.png`
|
||||
),
|
||||
colorset: "white",
|
||||
system: "standard",
|
||||
},
|
||||
"d12"
|
||||
);
|
||||
});
|
||||
Hooks.on("renderSidebarTab", (app, html, data) => HooksL5r5e.renderSidebarTab(app, html, data));
|
||||
Hooks.on("renderChatMessage", (message, html, data) => HooksL5r5e.renderChatMessage(message, html, data));
|
||||
Hooks.on("renderCombatTracker", (app, html, data) => HooksL5r5e.renderCombatTracker(app, html, data));
|
||||
Hooks.on("renderCompendium", async (app, html, data) => HooksL5r5e.renderCompendium(app, html, data));
|
||||
|
||||
227
system/scripts/migration.js
Normal file
227
system/scripts/migration.js
Normal file
@@ -0,0 +1,227 @@
|
||||
/**
|
||||
* L5R Migration class
|
||||
*/
|
||||
export class MigrationL5r5e {
|
||||
/**
|
||||
* Version needed for migration stuff to trigger
|
||||
* @type {string}
|
||||
*/
|
||||
static NEEDED_VERSION = "1.1.0";
|
||||
|
||||
/**
|
||||
* Return true if the current world need some updates
|
||||
* @returns {boolean}
|
||||
*/
|
||||
static needUpdate() {
|
||||
const currentVersion = game.settings.get("l5r5e", "systemMigrationVersion");
|
||||
return currentVersion && isNewerVersion(MigrationL5r5e.NEEDED_VERSION, currentVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a system migration for the entire World, applying migrations for Actors, Items, and Compendium packs
|
||||
* @return {Promise} A Promise which resolves once the migration is completed
|
||||
*/
|
||||
static async migrateWorld() {
|
||||
if (!game.user.isGM) {
|
||||
return;
|
||||
}
|
||||
|
||||
ui.notifications.info(
|
||||
`Applying L5R5e System Migration for version ${game.system.data.version}.` +
|
||||
` Please be patient and do not close your game or shut down your server.`,
|
||||
{ permanent: true }
|
||||
);
|
||||
|
||||
// Migrate World Actors
|
||||
for (let a of game.actors.entities) {
|
||||
try {
|
||||
const updateData = MigrationL5r5e._migrateActorData(a.data);
|
||||
if (!isObjectEmpty(updateData)) {
|
||||
console.log(`Migrating Actor entity ${a.name}`);
|
||||
await a.update(updateData, { enforceTypes: false });
|
||||
}
|
||||
} catch (err) {
|
||||
err.message = `Failed L5R5e system migration for Actor ${a.name}: ${err.message}`;
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Migrate World Items
|
||||
for (let i of game.items.entities) {
|
||||
try {
|
||||
const updateData = MigrationL5r5e._migrateItemData(i.data);
|
||||
if (!isObjectEmpty(updateData)) {
|
||||
console.log(`Migrating Item entity ${i.name}`);
|
||||
await i.update(updateData, { enforceTypes: false });
|
||||
}
|
||||
} catch (err) {
|
||||
err.message = `Failed L5R5e system migration for Item ${i.name}: ${err.message}`;
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Migrate Actor Override Tokens
|
||||
for (let s of game.scenes.entities) {
|
||||
try {
|
||||
const updateData = MigrationL5r5e._migrateSceneData(s.data);
|
||||
if (!isObjectEmpty(updateData)) {
|
||||
console.log(`Migrating Scene entity ${s.name}`);
|
||||
await s.update(updateData, { enforceTypes: false });
|
||||
}
|
||||
} catch (err) {
|
||||
err.message = `Failed L5R5e system migration for Scene ${s.name}: ${err.message}`;
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Migrate World Compendium Packs
|
||||
for (let p of game.packs) {
|
||||
if (p.metadata.package !== "world") {
|
||||
continue;
|
||||
}
|
||||
if (!["Actor", "Item", "Scene"].includes(p.metadata.entity)) {
|
||||
continue;
|
||||
}
|
||||
await MigrationL5r5e._migrateCompendium(p);
|
||||
}
|
||||
|
||||
// Set the migration as complete
|
||||
await game.settings.set("l5r5e", "systemMigrationVersion", game.system.data.version);
|
||||
ui.notifications.info(`L5R5e System Migration to version ${game.system.data.version} completed!`, {
|
||||
permanent: true,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply migration rules to all Entities within a single Compendium pack
|
||||
* @param pack
|
||||
* @return {Promise}
|
||||
*/
|
||||
static async _migrateCompendium(pack) {
|
||||
const entity = pack.metadata.entity;
|
||||
if (!["Actor", "Item", "Scene"].includes(entity)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Unlock the pack for editing
|
||||
const wasLocked = pack.locked;
|
||||
await pack.configure({ locked: false });
|
||||
|
||||
// Begin by requesting server-side data model migration and get the migrated content
|
||||
await pack.migrate();
|
||||
const content = await pack.getContent();
|
||||
|
||||
// Iterate over compendium entries - applying fine-tuned migration functions
|
||||
for (let ent of content) {
|
||||
let updateData = {};
|
||||
try {
|
||||
switch (entity) {
|
||||
case "Actor":
|
||||
updateData = MigrationL5r5e._migrateActorData(ent.data);
|
||||
break;
|
||||
case "Item":
|
||||
updateData = MigrationL5r5e._migrateItemData(ent.data);
|
||||
break;
|
||||
case "Scene":
|
||||
updateData = MigrationL5r5e._migrateSceneData(ent.data);
|
||||
break;
|
||||
}
|
||||
if (isObjectEmpty(updateData)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Save the entry, if data was changed
|
||||
updateData["_id"] = ent._id;
|
||||
await pack.updateEntity(updateData);
|
||||
console.log(`Migrated ${entity} entity ${ent.name} in Compendium ${pack.collection}`);
|
||||
} catch (err) {
|
||||
// Handle migration failures
|
||||
err.message = `Failed L5R5e system migration for entity ${ent.name} in pack ${pack.collection}: ${err.message}`;
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Apply the original locked status for the pack
|
||||
pack.configure({ locked: wasLocked });
|
||||
console.log(`Migrated all ${entity} entities from Compendium ${pack.collection}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate a single Scene entity to incorporate changes to the data model of it's actor data overrides
|
||||
* Return an Object of updateData to be applied
|
||||
* @param {Object} scene The Scene data to Update
|
||||
* @return {Object} The updateData to apply
|
||||
*/
|
||||
static _migrateSceneData(scene) {
|
||||
const tokens = duplicate(scene.tokens);
|
||||
return {
|
||||
tokens: tokens.map((t) => {
|
||||
if (!t.actorId || t.actorLink || !t.actorData.data) {
|
||||
t.actorData = {};
|
||||
return t;
|
||||
}
|
||||
const token = new Token(t);
|
||||
if (!token.actor) {
|
||||
t.actorId = null;
|
||||
t.actorData = {};
|
||||
} else if (!t.actorLink) {
|
||||
const updateData = MigrationL5r5e._migrateActorData(token.data.actorData);
|
||||
t.actorData = mergeObject(token.data.actorData, updateData);
|
||||
}
|
||||
return t;
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate a single Actor entity to incorporate latest data model changes
|
||||
* Return an Object of updateData to be applied
|
||||
* @param {Actor} actor The actor to Update
|
||||
* @return {Object} The updateData to apply
|
||||
*/
|
||||
static _migrateActorData(actor) {
|
||||
const updateData = {};
|
||||
const actorData = actor.data;
|
||||
|
||||
// ***** Start of 1.1.0 *****
|
||||
// Add "Prepared" in actor
|
||||
if (actorData.prepared === undefined) {
|
||||
updateData["data.prepared"] = true;
|
||||
}
|
||||
|
||||
// NPC are now without autostats, we need to save the value
|
||||
if (actor.type === "npc") {
|
||||
if (actorData.endurance < 1) {
|
||||
updateData["data.endurance"] = (Number(actorData.rings.earth) + Number(actorData.rings.fire)) * 2;
|
||||
updateData["data.composure"] = (Number(actorData.rings.earth) + Number(actorData.rings.water)) * 2;
|
||||
updateData["data.focus"] = Number(actorData.rings.air) + Number(actorData.rings.fire);
|
||||
updateData["data.vigilance"] = Math.ceil(
|
||||
(Number(actorData.rings.air) + Number(actorData.rings.water)) / 2
|
||||
);
|
||||
}
|
||||
}
|
||||
// ***** End of 1.1.0 *****
|
||||
|
||||
return updateData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scrub an Actor's system data, removing all keys which are not explicitly defined in the system template
|
||||
* @param {Object} actorData The data object for an Actor
|
||||
* @return {Object} The scrubbed Actor data
|
||||
*/
|
||||
static cleanActorData(actorData) {
|
||||
const model = game.system.model.Actor[actorData.type];
|
||||
actorData.data = filterObject(actorData.data, model);
|
||||
return actorData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate a single Item entity to incorporate latest data model changes
|
||||
* @param item
|
||||
*/
|
||||
static _migrateItemData(item) {
|
||||
// Nothing for now
|
||||
return {};
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,7 @@ export const PreloadTemplates = async function () {
|
||||
"systems/l5r5e/templates/actors/npc/social.html",
|
||||
"systems/l5r5e/templates/actors/npc/rings.html",
|
||||
"systems/l5r5e/templates/actors/npc/attributes.html",
|
||||
"systems/l5r5e/templates/actors/npc/conflict.html",
|
||||
"systems/l5r5e/templates/actors/npc/skill.html",
|
||||
"systems/l5r5e/templates/actors/npc/techniques.html",
|
||||
// items
|
||||
|
||||
@@ -1,4 +1,61 @@
|
||||
/**
|
||||
* Custom system settings register
|
||||
*/
|
||||
export const RegisterSettings = function () {
|
||||
/* ------------------------------------ */
|
||||
/* Update */
|
||||
/* ------------------------------------ */
|
||||
game.settings.register("l5r5e", "systemMigrationVersion", {
|
||||
name: "System Migration Version",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: String,
|
||||
default: 0,
|
||||
});
|
||||
|
||||
export const RegisterSettings = function() {
|
||||
// Register any custom system settings here
|
||||
}
|
||||
/* ------------------------------------ */
|
||||
/* Initiative Roll Dialog (GM only) */
|
||||
/* ------------------------------------ */
|
||||
game.settings.register("l5r5e", "initiative.difficulty.hidden", {
|
||||
name: "Initiative difficulty is hidden",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: Boolean,
|
||||
default: false,
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative.difficulty.value", {
|
||||
name: "Initiative difficulty value",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: Number,
|
||||
default: 2,
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative.encounter", {
|
||||
name: "Initiative encounter type",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: String,
|
||||
default: "skirmish",
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative.prepared.character", {
|
||||
name: "Initiative PC prepared or not",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: String,
|
||||
default: "null",
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative.prepared.adversary", {
|
||||
name: "Initiative NPC adversary are prepared or not",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: String,
|
||||
default: "null",
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative.prepared.minion", {
|
||||
name: "Initiative NPC minion are prepared or not",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: String,
|
||||
default: "true",
|
||||
});
|
||||
};
|
||||
|
||||
@@ -48,7 +48,7 @@ export class SocketHandlerL5r5e {
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh a app by it's id, not windowsId (ex "l5r5e-twenty-questions-dialog-kZHczAFghMNYFRWe", not "65")
|
||||
* Refresh a app by it's htmlId, not windowsId (ex "l5r5e-twenty-questions-dialog-kZHczAFghMNYFRWe", not "65")
|
||||
* usage : game.l5r5e.sockets.refreshAppId(appId);
|
||||
* @param appId
|
||||
*/
|
||||
@@ -60,10 +60,7 @@ export class SocketHandlerL5r5e {
|
||||
}
|
||||
_onRefreshAppId(data) {
|
||||
const app = Object.values(ui.windows).find((e) => e.id === data.appId);
|
||||
if (!app) {
|
||||
return;
|
||||
}
|
||||
if (typeof app.refresh !== "function") {
|
||||
if (!app || typeof app.refresh !== "function") {
|
||||
return;
|
||||
}
|
||||
app.refresh();
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -47,11 +47,13 @@ form .form-group .form-fields button,
|
||||
.dialog .dialog-buttons button,
|
||||
.item-edit,
|
||||
.item-delete,
|
||||
.item-equip,
|
||||
.technique-edit,
|
||||
.technique-delete,
|
||||
.peculiarity-edit,
|
||||
.peculiarity-delete,
|
||||
.attribute-dtype,
|
||||
.equip-readied-control,
|
||||
form button,
|
||||
label {
|
||||
cursor: url("../assets/cursors/pointer.webp"), pointer !important;
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
text-align: center;
|
||||
background: none;
|
||||
border: none;
|
||||
height: calc(100% - 3rem);
|
||||
|
||||
td:first-child {
|
||||
width: 200px;
|
||||
@@ -184,3 +185,59 @@
|
||||
border: 3px solid green;
|
||||
}
|
||||
}
|
||||
|
||||
#l5r5e-gm-tools-dialog {
|
||||
bottom: 0;
|
||||
right: 0.5rem;
|
||||
display: flex;
|
||||
background-position: center;
|
||||
background-size: 100%;
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-second,
|
||||
$l5r5e-linear-gradient-second-dark,
|
||||
$l5r5e-linear-gradient-second
|
||||
);
|
||||
background-origin: padding-box;
|
||||
border: 1px solid rgb(195, 165, 130);
|
||||
background-origin: padding-box;
|
||||
border-image: url("../assets/ui/macro-button.webp") 10 repeat;
|
||||
border-image-width: 0.5rem;
|
||||
border-image-outset: 0px;
|
||||
.window-header {
|
||||
text-align: center;
|
||||
border-bottom: 1px solid rgb(195, 165, 130);
|
||||
h4 {
|
||||
font-family: $font-primary;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.15rem;
|
||||
}
|
||||
}
|
||||
.window-content {
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
background: transparent;
|
||||
color: $white-light;
|
||||
.gm-tools-container {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-flow: wrap;
|
||||
a {
|
||||
flex: 1;
|
||||
cursor: url("../assets/cursors/pointer.webp"), pointer;
|
||||
i {
|
||||
font-size: 3rem;
|
||||
line-height: 4rem;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
.difficulty {
|
||||
flex: 1;
|
||||
font-size: 3rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
// hide "search anywhere" draggable icon
|
||||
.window-draggable-handle {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -279,3 +279,15 @@ i.i_skill {
|
||||
height: 1rem;
|
||||
width: 1rem;
|
||||
}
|
||||
|
||||
// Compendium
|
||||
.compendium {
|
||||
.item {
|
||||
i {
|
||||
font-family: $font-primary;
|
||||
&:before {
|
||||
font-family: $font-logoType;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,6 +62,28 @@ body {
|
||||
}
|
||||
}
|
||||
}
|
||||
// Compendium
|
||||
.compendium {
|
||||
.item {
|
||||
position: relative;
|
||||
i {
|
||||
float: right;
|
||||
line-height: 1rem;
|
||||
text-align: right;
|
||||
font-size: 0.75rem;
|
||||
color: rgba(240, 240, 225, 0.75);
|
||||
font-style: italic;
|
||||
flex: 0 0 auto;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
text-shadow: 0 0 0 rgba(255, 255, 255, 0.1);
|
||||
&:before {
|
||||
margin: 0 0.25rem 0 0;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&.sheet,
|
||||
&.npc,
|
||||
@@ -166,7 +188,7 @@ fieldset {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
margin: 0 0.25rem;
|
||||
padding: 0.25rem 0.5rem;
|
||||
padding: 0.5rem;
|
||||
border: 1px solid $l5r5e-title;
|
||||
legend {
|
||||
color: $l5r5e-label;
|
||||
@@ -181,16 +203,21 @@ input[type="text"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[type="date"],
|
||||
input[type="time"] {
|
||||
text-align: center;
|
||||
input[type="time"],
|
||||
textarea {
|
||||
padding: 0.25rem;
|
||||
background: $l5r5e-white;
|
||||
border: 1px solid $l5r5e-title;
|
||||
color: $l5r5e-bold;
|
||||
resize: vertical;
|
||||
border-radius: 0;
|
||||
&[disabled] {
|
||||
background: $l5r5e-white-light;
|
||||
}
|
||||
}
|
||||
input[type="number"] {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
// Editors
|
||||
.editor,
|
||||
@@ -264,6 +291,39 @@ sup {
|
||||
}
|
||||
}
|
||||
|
||||
.prepared {
|
||||
&-character {
|
||||
color: $l5r5e-earth;
|
||||
}
|
||||
&-adversary {
|
||||
color: $l5r5e-fire;
|
||||
}
|
||||
&-minion {
|
||||
color: $l5r5e-water;
|
||||
}
|
||||
&-icon {
|
||||
font-weight: 900;
|
||||
font-family: "Font Awesome 5 Free";
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
display: inline-block;
|
||||
font-style: normal;
|
||||
font-variant: normal;
|
||||
text-rendering: auto;
|
||||
line-height: 1;
|
||||
width: 1.5rem;
|
||||
&-true:before {
|
||||
content: "\f06e";
|
||||
}
|
||||
&-false:before {
|
||||
content: "\f070";
|
||||
}
|
||||
&-null:before {
|
||||
content: "\f2a8";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fix for "search anywhere" draggable icon
|
||||
.window-draggable-handle {
|
||||
z-index: 2;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
}
|
||||
.item-edit,
|
||||
.item-delete,
|
||||
.item-equip,
|
||||
.technique-edit,
|
||||
.technique-delete,
|
||||
.peculiarity-edit,
|
||||
@@ -29,6 +30,7 @@
|
||||
font-size: 0.75rem;
|
||||
flex: 0 0 1rem;
|
||||
padding: 0 0.1rem;
|
||||
color: $black-light;
|
||||
}
|
||||
.icon-stat-container {
|
||||
line-height: 1rem;
|
||||
@@ -38,6 +40,7 @@
|
||||
}
|
||||
.item-edit,
|
||||
.item-delete,
|
||||
.item-equip,
|
||||
.technique-edit,
|
||||
.technique-delete,
|
||||
.peculiarity-edit,
|
||||
@@ -46,6 +49,7 @@
|
||||
.property-delete {
|
||||
&:hover {
|
||||
text-shadow: 0 0 3px $red;
|
||||
color: $black;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -68,6 +72,12 @@
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
.equip-readied-control {
|
||||
&:hover {
|
||||
color: $l5r5e-red;
|
||||
background: $white;
|
||||
}
|
||||
}
|
||||
}
|
||||
p {
|
||||
font-size: 0.85rem;
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
width: 100%;
|
||||
line-height: 2rem;
|
||||
font-size: 0.75rem;
|
||||
margin: 0.25rem 0.25rem 0.5rem;
|
||||
text-align: center;
|
||||
li {
|
||||
flex: 1;
|
||||
@@ -144,6 +145,12 @@
|
||||
flex: 0 0 calc(100% - 0.5rem);
|
||||
margin: 1rem 0.25rem 0;
|
||||
}
|
||||
.initiative-wrapper {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
&:last-child {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
}
|
||||
.npc-note {
|
||||
.editor {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
}
|
||||
&.actor {
|
||||
.sheet-header {
|
||||
height: 27rem;
|
||||
height: 26rem;
|
||||
h1 {
|
||||
flex: auto;
|
||||
margin: 0 0 0.25rem 0.5rem;
|
||||
@@ -24,25 +24,6 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.initiative {
|
||||
&-wrapper {
|
||||
display: block;
|
||||
flex: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
button {
|
||||
width: 22%;
|
||||
margin: 0 0.25rem 0.25rem;
|
||||
padding: 0 0.5rem;
|
||||
color: #5a6e5a;
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
border: 1px solid #5a6e5a;
|
||||
border-radius: 1rem;
|
||||
}
|
||||
button:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
fieldset {
|
||||
&.advancement {
|
||||
display: block;
|
||||
@@ -53,12 +34,6 @@
|
||||
line-height: 2rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.compromised {
|
||||
input {
|
||||
border: 1px solid $l5r5e-red;
|
||||
box-shadow: 0 1px 5px $l5r5e-red;
|
||||
}
|
||||
}
|
||||
}
|
||||
form {
|
||||
display: flex;
|
||||
@@ -126,6 +101,12 @@
|
||||
0% calc(100% - var(--notchSize))
|
||||
);
|
||||
}
|
||||
.compromised {
|
||||
input {
|
||||
border: 1px solid $l5r5e-red;
|
||||
box-shadow: 0 1px 5px $l5r5e-red;
|
||||
}
|
||||
}
|
||||
.header-fields {
|
||||
position: relative;
|
||||
flex: 0 0 100%;
|
||||
@@ -235,14 +216,14 @@
|
||||
width: 40%;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
top: -2.5rem;
|
||||
top: -1.5rem;
|
||||
}
|
||||
.social-content,
|
||||
.attributes-wrapper {
|
||||
flex: none;
|
||||
float: left;
|
||||
width: 30%;
|
||||
flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
display: flex;
|
||||
padding: 0.5rem 0 0 0.25rem;
|
||||
border-left: 2px solid $l5r5e-title;
|
||||
@@ -289,12 +270,33 @@
|
||||
margin: 0 0.25rem;
|
||||
height: 2rem;
|
||||
&[disabled] {
|
||||
flex: 0 0 3rem;
|
||||
background: $l5r5e-white-light;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.focus-content,
|
||||
.vigilance-content {
|
||||
flex: 0 0 50%;
|
||||
padding-bottom: 0.5rem;
|
||||
.attribute-label {
|
||||
flex-wrap: wrap;
|
||||
height: auto;
|
||||
strong {
|
||||
flex: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
input {
|
||||
flex: 1 0 3rem;
|
||||
}
|
||||
&:before {
|
||||
top: auto;
|
||||
bottom: 0.1rem;
|
||||
height: calc(100% - 1.45rem);
|
||||
width: calc(100% - 0.4rem);
|
||||
}
|
||||
}
|
||||
}
|
||||
.attributes-wrapper {
|
||||
padding: 0.5rem 0.25rem 0 0;
|
||||
border-left: 0 none;
|
||||
@@ -304,31 +306,38 @@
|
||||
left: auto;
|
||||
right: -0.25rem;
|
||||
}
|
||||
&.void-content {
|
||||
&.focus-content {
|
||||
&:before {
|
||||
width: 0;
|
||||
}
|
||||
}
|
||||
&.vigilance-content {
|
||||
&:before {
|
||||
width: 160%;
|
||||
}
|
||||
}
|
||||
&.void-content {
|
||||
&:before {
|
||||
width: 90%;
|
||||
}
|
||||
}
|
||||
}
|
||||
label {
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
strong {
|
||||
text-align: right;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
position: relative;
|
||||
flex: 50%;
|
||||
right: 1.5rem;
|
||||
strong {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
font-size: 0.65rem;
|
||||
width: 3rem;
|
||||
color: $l5r5e-black;
|
||||
color: $l5r5e-black-light;
|
||||
}
|
||||
input {
|
||||
border-top: 0 none;
|
||||
font-size: 1.25rem;
|
||||
padding-top: 0.75rem;
|
||||
}
|
||||
@@ -336,19 +345,24 @@
|
||||
}
|
||||
.endurance-content,
|
||||
.composure-content {
|
||||
input {
|
||||
&[disabled] {
|
||||
flex: 0 0 5rem;
|
||||
label:nth-child(1) {
|
||||
strong {
|
||||
flex: 0 0 calc(100% - 6rem);
|
||||
}
|
||||
input {
|
||||
flex: 0 0 5.5rem;
|
||||
padding-right: 3rem;
|
||||
}
|
||||
}
|
||||
label:nth-child(2) {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
width: 3.5rem;
|
||||
}
|
||||
}
|
||||
.void-content {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
bottom: 0.25rem;
|
||||
right: 35%;
|
||||
width: 10rem;
|
||||
width: 100%;
|
||||
padding-top: 0.25rem;
|
||||
label {
|
||||
margin: 0;
|
||||
strong {
|
||||
@@ -357,7 +371,7 @@
|
||||
&:after {
|
||||
content: "/";
|
||||
position: absolute;
|
||||
right: 2.9rem;
|
||||
right: 1.25rem;
|
||||
font-size: 1rem;
|
||||
bottom: 0.6rem;
|
||||
color: $l5r5e-bold;
|
||||
@@ -375,8 +389,9 @@
|
||||
text-align: right;
|
||||
padding-left: 0.25rem;
|
||||
padding-top: 0.75rem;
|
||||
position: relative;
|
||||
right: 2rem;
|
||||
position: absolute;
|
||||
right: 0.25rem;
|
||||
width: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -414,6 +429,71 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.focus-content,
|
||||
.vigilance-content {
|
||||
p {
|
||||
bottom: -3.75rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
.attribute-label {
|
||||
position: relative;
|
||||
&:before {
|
||||
z-index: -1;
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: calc(100% - 0.85rem);
|
||||
width: 3.1rem;
|
||||
border: 1px solid $l5r5e-title;
|
||||
border-radius: 0;
|
||||
top: 0.15rem;
|
||||
left: 0.15rem;
|
||||
}
|
||||
}
|
||||
.identity-content {
|
||||
.attribute-label {
|
||||
&:before {
|
||||
height: calc(100% - 0.6rem);
|
||||
width: calc(100% - 0.65rem);
|
||||
left: auto;
|
||||
top: 0.15rem;
|
||||
right: 0.85rem;
|
||||
}
|
||||
}
|
||||
li:nth-child(3),
|
||||
li:nth-child(5) {
|
||||
.attribute-label {
|
||||
&:before {
|
||||
height: calc(100% - 0.6rem);
|
||||
width: calc(100% + 0.25rem);
|
||||
left: auto;
|
||||
top: 0.15rem;
|
||||
right: -0.15rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.attributes-wrapper {
|
||||
.attribute-label {
|
||||
&:nth-child(2) {
|
||||
&:before {
|
||||
left: auto;
|
||||
right: 3.15rem;
|
||||
width: 2.6rem;
|
||||
}
|
||||
}
|
||||
&:before {
|
||||
left: auto;
|
||||
right: 0.15rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
.void-content {
|
||||
.attribute-label {
|
||||
&:before {
|
||||
width: 3.85rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
article {
|
||||
@@ -476,7 +556,9 @@
|
||||
}
|
||||
}
|
||||
.stances-content {
|
||||
flex: 0 0 100%;
|
||||
flex: 100%;
|
||||
height: 100%;
|
||||
align-self: flex-start;
|
||||
.item-list {
|
||||
position: relative;
|
||||
padding-top: 2rem;
|
||||
@@ -529,7 +611,7 @@
|
||||
}
|
||||
.xp,
|
||||
.money-wrapper {
|
||||
flex: 0 0 5rem;
|
||||
flex: 0 0 6rem;
|
||||
flex-direction: column;
|
||||
color: $black-light;
|
||||
label {
|
||||
@@ -592,6 +674,27 @@
|
||||
}
|
||||
&.actor,
|
||||
&.npc {
|
||||
.initiative {
|
||||
&-wrapper {
|
||||
flex: 100%;
|
||||
height: 100%;
|
||||
align-self: flex-start;
|
||||
text-align: center;
|
||||
display: block;
|
||||
}
|
||||
button {
|
||||
width: 22%;
|
||||
margin: 0 0.25rem 0.25rem;
|
||||
padding: 0 0.5rem;
|
||||
color: #5a6e5a;
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
border: 1px solid #5a6e5a;
|
||||
border-radius: 1rem;
|
||||
}
|
||||
button:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
.limited {
|
||||
h1 {
|
||||
margin: 0.5rem 0;
|
||||
|
||||
@@ -60,8 +60,6 @@
|
||||
article {
|
||||
padding: 2% 2% 2% 18%;
|
||||
label {
|
||||
font-size: 0.85rem;
|
||||
line-height: 2rem;
|
||||
&.full {
|
||||
display: block;
|
||||
width: 100%;
|
||||
@@ -79,6 +77,10 @@
|
||||
> label {
|
||||
font-size: 1rem;
|
||||
padding: 0 0 0 1rem;
|
||||
line-height: 2rem;
|
||||
> * {
|
||||
line-height: 1rem;
|
||||
}
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
@@ -93,6 +95,17 @@
|
||||
border: 1px solid $l5r5e-title;
|
||||
font-size: 0.85rem;
|
||||
padding: 0.25rem;
|
||||
> * {
|
||||
line-height: 1rem;
|
||||
}
|
||||
> ul {
|
||||
li {
|
||||
line-height: 2rem;
|
||||
> * {
|
||||
line-height: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.done {
|
||||
border: 1px solid $l5r5e-earth;
|
||||
box-shadow: 0 1px 5px $l5r5e-earth;
|
||||
@@ -116,11 +129,6 @@
|
||||
border: 1px solid rgba(255, 255, 255, 0.5);
|
||||
margin: 0 0.25rem 1rem;
|
||||
}
|
||||
> ul {
|
||||
li {
|
||||
line-height: 2rem;
|
||||
}
|
||||
}
|
||||
hr {
|
||||
border-top: 1px solid $l5r5e-black-light;
|
||||
}
|
||||
|
||||
@@ -568,30 +568,66 @@ button {
|
||||
h3 {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Dialog
|
||||
.dialo {
|
||||
.logo-dialog {
|
||||
height: 125px;
|
||||
.dialog-buttons {
|
||||
button {
|
||||
line-height: 1rem;
|
||||
ul {
|
||||
display: flex;
|
||||
color: $l5r5e-white;
|
||||
&.encounter {
|
||||
border-right: 1px solid $l5r5e-white-light;
|
||||
}
|
||||
li {
|
||||
flex: 1;
|
||||
cursor: url("../assets/cursors/pointer.webp"), pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
.dialog-content {
|
||||
height: 1rem;
|
||||
p {
|
||||
margin: 0;
|
||||
.encounter {
|
||||
i {
|
||||
font-size: 23px;
|
||||
vertical-align: middle;
|
||||
&:hover {
|
||||
text-shadow: 0 0 8px $red;
|
||||
}
|
||||
}
|
||||
|
||||
.active {
|
||||
color: $l5r5e-maho;
|
||||
&:hover {
|
||||
text-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
&-icon {
|
||||
font-weight: 900;
|
||||
font-family: "Font Awesome 5 Free";
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
display: inline-block;
|
||||
font-style: normal;
|
||||
font-variant: normal;
|
||||
text-rendering: auto;
|
||||
line-height: 1;
|
||||
|
||||
&-intrigue:before {
|
||||
content: "\f21b";
|
||||
}
|
||||
|
||||
&-duel:before {
|
||||
content: "\f506";
|
||||
}
|
||||
|
||||
&-skirmish:before {
|
||||
content: "\f505";
|
||||
}
|
||||
|
||||
&-mass_battle:before {
|
||||
content: "\f447";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Pause
|
||||
|
||||
#pause {
|
||||
img {
|
||||
content: url("../assets/icons/pause.svg");
|
||||
|
||||
@@ -1,12 +1,32 @@
|
||||
{
|
||||
"name": "l5r5e",
|
||||
"title": "Legend of the Five Rings (5th Edition)",
|
||||
"description": "This is a game system, multilingual in En/FR/ES, for Legend of the Five Rings (5th Edition) by <a href='https://edge-studio.net/'>Edge Studio</a> <p> - Join the official Discord server: <a href='https://discord.gg/foundryvtt'> Official Discord</a></p><p> - Rejoignez la communauté Francophone: <a href='https://discord.gg/pPSDNJk'>Francophone Discord</a></p>",
|
||||
"version": "1.0.0",
|
||||
"description": "This is an authorised multilingual game system En|Fr|Es, for Legend of the Five Rings (5th Edition) by <a href='https://edge-studio.net/'>Edge Studio</a> <p> - Join the official Discord server: <a href='https://discord.gg/foundryvtt'> Official Discord</a></p><p> - Rejoignez la communauté Francophone: <a href='https://discord.gg/pPSDNJk'>Francophone Discord</a></p>",
|
||||
"version": "1.1.1",
|
||||
"minimumCoreVersion": "0.7.9",
|
||||
"compatibleCoreVersion": "0.7.9",
|
||||
"manifestPlusVersion": "1.0.0",
|
||||
"socket": true,
|
||||
"author": "Team L5R",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Vlyan",
|
||||
"discord": "Vlyan#6771"
|
||||
},
|
||||
{
|
||||
"name": "Mandar",
|
||||
"discord": "Mandar#3440"
|
||||
},
|
||||
{
|
||||
"name": "Carter"
|
||||
},
|
||||
{
|
||||
"name": "Hrunh"
|
||||
},
|
||||
{
|
||||
"name": "Sasmira"
|
||||
}
|
||||
],
|
||||
"background": "L5R-Header.webp",
|
||||
"scripts": [],
|
||||
"esmodules": ["./scripts/main-l5r5e.js"],
|
||||
@@ -140,5 +160,5 @@
|
||||
],
|
||||
"url": "https://gitlab.com/teaml5r/l5r5e",
|
||||
"manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json",
|
||||
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.0.0/raw/l5r5e.zip?job=build"
|
||||
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.1.1/raw/l5r5e.zip?job=build"
|
||||
}
|
||||
|
||||
@@ -85,7 +85,8 @@
|
||||
"max": 1,
|
||||
"value": 0
|
||||
},
|
||||
"stance": "void"
|
||||
"stance": "void",
|
||||
"prepared": true
|
||||
},
|
||||
"advancement": {
|
||||
"xp_total": 0,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<li class="endurance-content">
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.endurance' }}</strong>
|
||||
<input class="centered-input" type="text" name="data.endurance" value="{{data.endurance}}" data-dtype="Number" disabled/>
|
||||
<input class="centered-input" type="number" name="data.endurance" value="{{data.endurance}}" data-dtype="Number" disabled/>
|
||||
</label>
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.fatigue' }}</strong>
|
||||
@@ -13,7 +13,7 @@
|
||||
<li class="composure-content">
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.composure' }}</strong>
|
||||
<input class="centered-input" type="text" name="data.composure" value="{{data.composure}}" data-dtype="Number" disabled/>
|
||||
<input class="centered-input" type="number" name="data.composure" value="{{data.composure}}" data-dtype="Number" disabled/>
|
||||
</label>
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.strife' }}</strong>
|
||||
@@ -24,14 +24,18 @@
|
||||
<li class="focus-content">
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.focus' }}</strong>
|
||||
<input class="centered-input" type="text" name="data.focus" value="{{data.focus}}" data-dtype="Number" disabled/>
|
||||
<input class="centered-input" type="number" name="data.focus" value="{{data.focus}}" data-dtype="Number" disabled/>
|
||||
</label>
|
||||
<p class="item-description"> {{ localize 'l5r5e.attributes.focustip' }}</p>
|
||||
</li>
|
||||
<li class="vigilance-content {{#ifCond data.strife.value '>' data.strife.max}}compromised{{/ifCond}}">
|
||||
<li class="vigilance-content {{#if data.is_compromised}}compromised{{/if}}">
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.vigilance' }}</strong>
|
||||
<input class="centered-input" type="text" name="data.vigilance" value="{{data.vigilance}}" data-dtype="Number" disabled/>
|
||||
{{#if data.is_compromised}}
|
||||
<input class="centered-input" type="number" value="1" disabled/>
|
||||
{{else}}
|
||||
<input class="centered-input" type="number" name="data.vigilance" value="{{data.vigilance}}" data-dtype="Number" disabled/>
|
||||
{{/if}}
|
||||
</label>
|
||||
<p class="item-description"> {{ localize 'l5r5e.attributes.vigilancetip' }}</p>
|
||||
</li>
|
||||
@@ -39,7 +43,7 @@
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.voidpoints' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.void_points.value" value="{{data.void_points.value}}" data-dtype="Number" placeholder="0" min="0" max="{{data.void_points.max}}"/>
|
||||
<input class="centered-input" type="text" name="data.void_points.max" value="{{data.void_points.max}}" data-dtype="Number" disabled/>
|
||||
<input class="centered-input" type="number" name="data.void_points.max" value="{{data.void_points.max}}" data-dtype="Number" disabled/>
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,9 +1,14 @@
|
||||
<fieldset class="initiative initiative-wrapper">
|
||||
<legend class="section-header">{{ localize 'l5r5e.conflict.initiative.title' }}</legend>
|
||||
<button class="initiative dice-picker" data-skill="sentiment" data-diff="1">{{ localize 'l5r5e.conflict.initiative.intrigue'}}</button>
|
||||
<button class="initiative dice-picker" data-skill="meditation" data-diff="1">{{ localize 'l5r5e.conflict.initiative.duel'}}</button>
|
||||
<button class="initiative dice-picker" data-skill="tactics" data-diff="1">{{ localize 'l5r5e.conflict.initiative.skirmish'}}</button>
|
||||
<button class="initiative dice-picker" data-skill="command" data-diff="1">{{ localize 'l5r5e.conflict.initiative.mass_battle'}}</button>
|
||||
<legend class="section-header">
|
||||
{{ localize 'l5r5e.conflict.initiative.title' }}
|
||||
<a class="encounter prepared-control" data-id="{{entity.type}}">
|
||||
<i class="fa fas prepared-icon prepared-icon-{{data.prepared}} prepared-{{entity.type}}" title="{{localize (localize 'l5r5e.conflict.initiative.prepared_{value}' value=data.prepared)}}"></i>
|
||||
</a>
|
||||
</legend>
|
||||
<button class="initiative dice-picker" data-initiative="true" data-skill="sentiment">{{ localize 'l5r5e.conflict.initiative.intrigue'}}</button>
|
||||
<button class="initiative dice-picker" data-initiative="true" data-skill="meditation">{{ localize 'l5r5e.conflict.initiative.duel'}}</button>
|
||||
<button class="initiative dice-picker" data-initiative="true" data-skill="tactics">{{ localize 'l5r5e.conflict.initiative.skirmish'}}</button>
|
||||
<button class="initiative dice-picker" data-initiative="true" data-skill="command">{{ localize 'l5r5e.conflict.initiative.mass_battle'}}</button>
|
||||
</fieldset>
|
||||
<fieldset class="stances-content flexrow">
|
||||
<legend class="section-header">{{ localize 'l5r5e.conflict.stance' }}</legend>
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
<fieldset>
|
||||
<legend class="text-block-header">{{ localize 'l5r5e.social.title' }}</legend>
|
||||
<label class="attribute-label">{{ localize 'l5r5e.social.ninjo' }}
|
||||
<input type="text" name="data.social.ninjo" value="{{data.social.ninjo}}"/>
|
||||
<textarea type="text" name="data.social.ninjo">{{data.social.ninjo}}</textarea>
|
||||
</label>
|
||||
<label class="attribute-label">{{ localize 'l5r5e.social.giri' }}
|
||||
<input type="text" name="data.social.giri" value="{{data.social.giri}}"/>
|
||||
<textarea type="text" name="data.social.giri">{{data.social.giri}}</textarea>
|
||||
</label>
|
||||
<label class="attribute-label">{{ localize 'l5r5e.social.titles' }}
|
||||
<input type="text" name="data.social.titles" value="{{data.social.titles}}"/>
|
||||
<input type="text" name="data.social.titles" value="{{data.social.titles}}" />
|
||||
</label>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
<ul class="rings">
|
||||
<li id="earth">
|
||||
<label class="attribute-label earth centered-input">
|
||||
<label class="earth">
|
||||
<i class="i_earth"></i>
|
||||
<strong>{{ localizeRing 'earth' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.rings.earth" value="{{data.rings.earth}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
|
||||
</label>
|
||||
</li>
|
||||
<li id="air">
|
||||
<label class="attribute-label air centered-input">
|
||||
<label class="air">
|
||||
<i class="i_air"></i>
|
||||
<strong>{{ localizeRing 'air' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.rings.air" value="{{data.rings.air}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
|
||||
</label>
|
||||
</li>
|
||||
<li id="water">
|
||||
<label class="attribute-label water centered-input">
|
||||
<label class="water">
|
||||
<i class="i_water"></i>
|
||||
<strong>{{ localizeRing 'water' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.rings.water" value="{{data.rings.water}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
|
||||
</label>
|
||||
</li>
|
||||
<li id="fire">
|
||||
<label class="attribute-label fire centered-input">
|
||||
<label class="fire">
|
||||
<i class="i_fire"></i>
|
||||
<strong>{{ localizeRing 'fire' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.rings.fire" value="{{data.rings.fire}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
|
||||
</label>
|
||||
</li>
|
||||
<li id="void">
|
||||
<label class="attribute-label void centered-input">
|
||||
<label class="void">
|
||||
<i class="i_void"></i>
|
||||
<strong>{{ localizeRing 'void' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.rings.void" value="{{data.rings.void}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
|
||||
|
||||
@@ -20,7 +20,12 @@
|
||||
</header>
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
<article>
|
||||
{{> 'systems/l5r5e/templates/actors/npc/skill.html' }}
|
||||
{{#ifCond data.type '==' 'adversary'}}
|
||||
{{> 'systems/l5r5e/templates/actors/npc/conflict.html' }}
|
||||
{{/ifCond}}
|
||||
</article>
|
||||
<article>
|
||||
{{> 'systems/l5r5e/templates/actors/npc/narrative.html' }}
|
||||
</article>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<li class="endurance-content">
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.endurance' }}</strong>
|
||||
<input class="centered-input" type="text" name="data.endurance" value="{{data.endurance}}" data-dtype="Number" disabled/>
|
||||
<input class="centered-input" type="number" name="data.endurance" value="{{data.endurance}}" data-dtype="Number" min="0" placeholder="0"/>
|
||||
</label>
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.fatigue' }}</strong>
|
||||
@@ -13,7 +13,7 @@
|
||||
<li class="composure-content">
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.composure' }}</strong>
|
||||
<input class="centered-input" type="text" name="data.composure" value="{{data.composure}}" data-dtype="Number" disabled/>
|
||||
<input class="centered-input" type="number" name="data.composure" value="{{data.composure}}" data-dtype="Number" min="0" placeholder="0"/>
|
||||
</label>
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.strife' }}</strong>
|
||||
@@ -24,14 +24,18 @@
|
||||
<li class="focus-content">
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.focus' }}</strong>
|
||||
<input class="centered-input" type="text" name="data.focus" value="{{data.focus}}" data-dtype="Number" disabled/>
|
||||
<input class="centered-input" type="number" name="data.focus" value="{{data.focus}}" data-dtype="Number" min="0" placeholder="0"/>
|
||||
</label>
|
||||
<p class="item-description"> {{ localize 'l5r5e.attributes.focustip' }}</p>
|
||||
</li>
|
||||
<li class="vigilance-content {{#ifCond data.strife.value '>' data.strife.max}}compromised{{/ifCond}}">
|
||||
<li class="vigilance-content {{#if data.is_compromised}}compromised{{/if}}">
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.vigilance' }}</strong>
|
||||
<input class="centered-input" type="text" name="data.vigilance" value="{{data.vigilance}}" data-dtype="Number" disabled/>
|
||||
{{#if data.is_compromised}}
|
||||
<input class="centered-input" type="number" value="1" disabled/>
|
||||
{{else}}
|
||||
<input class="centered-input" type="number" name="data.vigilance" value="{{data.vigilance}}" data-dtype="Number" min="0" placeholder="0"/>
|
||||
{{/if}}
|
||||
</label>
|
||||
<p class="item-description"> {{ localize 'l5r5e.attributes.vigilancetip' }}</p>
|
||||
</li>
|
||||
@@ -39,7 +43,7 @@
|
||||
<label class="attribute-label">
|
||||
<strong>{{ localize 'l5r5e.attributes.voidpoints' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.void_points.value" value="{{data.void_points.value}}" data-dtype="Number" placeholder="0" min="0" max="{{data.void_points.max}}"/>
|
||||
<input class="centered-input" type="text" name="data.void_points.max" value="{{data.void_points.max}}" data-dtype="Number" disabled/>
|
||||
<input class="centered-input" type="number" name="data.void_points.max" value="{{data.void_points.max}}" data-dtype="Number" disabled/>
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,6 +1,18 @@
|
||||
<fieldset class="initiative initiative-wrapper">
|
||||
<legend class="section-header">
|
||||
{{ localize 'l5r5e.conflict.initiative.title' }}
|
||||
<a class="encounter prepared-control" data-id="{{data.type}}">
|
||||
<i class="fa fas prepared-icon prepared-icon-{{data.prepared}} prepared-{{data.type}}" title="{{localize (localize 'l5r5e.conflict.initiative.prepared_{value}' value=data.prepared)}}"></i>
|
||||
</a>
|
||||
</legend>
|
||||
<button class="initiative dice-picker" data-initiative="true" data-skill="sentiment">{{ localize 'l5r5e.conflict.initiative.intrigue'}}</button>
|
||||
<button class="initiative dice-picker" data-initiative="true" data-skill="meditation">{{ localize 'l5r5e.conflict.initiative.duel'}}</button>
|
||||
<button class="initiative dice-picker" data-initiative="true" data-skill="tactics">{{ localize 'l5r5e.conflict.initiative.skirmish'}}</button>
|
||||
<button class="initiative dice-picker" data-initiative="true" data-skill="command">{{ localize 'l5r5e.conflict.initiative.mass_battle'}}</button>
|
||||
</fieldset>
|
||||
<fieldset class="stances-content flexrow">
|
||||
<legend class="section-header">{{ localize 'l5r5e.conflict.stance' }}</legend>
|
||||
<ul>
|
||||
<ul class="item-list">
|
||||
{{#each data.rings as |ringValue ringId|}}
|
||||
{{> 'systems/l5r5e/templates/actors/character/stance.html' stance=../data.stance ringId=ringId }}
|
||||
{{/each}}
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
<ul class="rings">
|
||||
<li id="earth">
|
||||
<label class="attribute-label earth centered-input">
|
||||
<label class="earth">
|
||||
<i class="i_earth"></i>
|
||||
<strong>{{ localizeRing 'earth' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.rings.earth" value="{{data.rings.earth}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
|
||||
</label>
|
||||
</li>
|
||||
<li id="air">
|
||||
<label class="attribute-label air centered-input">
|
||||
<label class="air">
|
||||
<i class="i_air"></i>
|
||||
<strong>{{ localizeRing 'air' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.rings.air" value="{{data.rings.air}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
|
||||
</label>
|
||||
</li>
|
||||
<li id="water">
|
||||
<label class="attribute-label water centered-input">
|
||||
<label class="water">
|
||||
<i class="i_water"></i>
|
||||
<strong>{{ localizeRing 'water' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.rings.water" value="{{data.rings.water}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
|
||||
</label>
|
||||
</li>
|
||||
<li id="fire">
|
||||
<label class="attribute-label fire centered-input">
|
||||
<label class="fire">
|
||||
<i class="i_fire"></i>
|
||||
<strong>{{ localizeRing 'fire' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.rings.fire" value="{{data.rings.fire}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
|
||||
</label>
|
||||
</li>
|
||||
<li id="void">
|
||||
<label class="attribute-label void centered-input">
|
||||
<label class="void">
|
||||
<i class="i_void"></i>
|
||||
<strong>{{ localizeRing 'void' }}</strong>
|
||||
<input class="centered-input select-on-focus" type="number" name="data.rings.void" value="{{data.rings.void}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
</td>
|
||||
<td class="fifty">
|
||||
{{localize 'l5r5e.twenty_questions.part2.outfit'}}
|
||||
{{> 'systems/l5r5e/templates/actors/character/twenty-questions-item.html' itemsList=cache.step3.equipment stepName='step3.equipment' itemType='items' hideDndAt=10 }}
|
||||
{{> 'systems/l5r5e/templates/actors/character/twenty-questions-item.html' itemsList=cache.step3.equipment stepName='step3.equipment' itemType='items' hideDndAt=20 }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -148,10 +148,12 @@
|
||||
{{!-- Fourth line--}}
|
||||
<tr>
|
||||
<td>
|
||||
{{^if difficultyHiddenIsLock}}
|
||||
<label>
|
||||
<input type="checkbox" id="diff_hidden" name="difficulty.hidden" value="1" {{checked data.difficulty.hidden}}>
|
||||
{{localize 'l5r5e.dicepicker.difficulty_hidden_label'}}
|
||||
</label>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td>
|
||||
{{#if canUseVoidPoint}}
|
||||
|
||||
6
system/templates/dice/gm-tools-dialog.html
Normal file
6
system/templates/dice/gm-tools-dialog.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<form class="l5r5e gm-tools-dialog" autocomplete="off">
|
||||
<p class="gm-tools-container">
|
||||
<a class="difficulty_hidden"><i class="fa fa-eye{{#if data.difficultyHidden}}-slash{{/if}}"></i></a>
|
||||
<strong class="difficulty">{{data.difficulty}}</strong>
|
||||
</p>
|
||||
</form>
|
||||
16
system/templates/gm/combat-tracker-bar.html
Normal file
16
system/templates/gm/combat-tracker-bar.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<nav class="encounters flexrow" id="l5r5e_gm_combat_tracker_bar">
|
||||
<ul class="encounter">
|
||||
{{#each encounterTypeList}}
|
||||
<li class="encounter encounter-control" data-id="{{this}}">
|
||||
<i class="fa fas encounter-icon-{{this}}{{#ifCond this '==' ../encounterType}} active{{/ifCond}}" title="{{localize (localize 'l5r5e.conflict.initiative.{id}' id=this)}}"></i>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
<ul class="prepared">
|
||||
{{#each prepared as |prepared charType|}}
|
||||
<li class="encounter prepared-control" data-id="{{charType}}">
|
||||
<i class="fa fas prepared-icon-{{prepared}} prepared-{{charType}}" title="{{localize (localize 'l5r5e.conflict.initiative.prepared_{value}' value=prepared)}} ({{localize (localize 'l5r5e.character_types.{type}' type=charType)}})"></i>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</nav>
|
||||
@@ -7,7 +7,7 @@
|
||||
</legend>
|
||||
<ul class="item-list">
|
||||
{{#each actor.items as |item id|}}
|
||||
{{#ifCond item.type '==' 'armor'}}
|
||||
{{#ifCond (ifCond item.type '==' 'armor') '&&' (ifCond item.data.equipped '==' true)}}
|
||||
{{> 'systems/l5r5e/templates/items/armor/armor-entry.html' item=item id=id editable=../editable }}
|
||||
{{/ifCond}}
|
||||
{{/each}}
|
||||
|
||||
@@ -3,8 +3,9 @@
|
||||
<li class="item-img"><img src="{{item.img}}" title="{{item.name}}" width="32px" height="32px"/></li>
|
||||
<li class="item-name">{{ item.name }} <sub>x{{ item.data.quantity }}</sub></li>
|
||||
{{#if editable}}
|
||||
<li data-item-id="{{item._id}}" class="item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
|
||||
<li data-item-id="{{item._id}}" class="item-delete" title="{{localize 'l5r5e.global.delete'}}"><i class="fas fa-trash"></i></li>
|
||||
<li data-item-id="{{item._id}}" data-type="equipped" class="item-equip equip-readied-control" title="{{localize 'l5r5e.armors.equipped'}}"><i class="fas {{#if item.data.equipped}}fa-tshirt{{else}}fa-weight-hanging{{/if}}"></i></li>
|
||||
<li data-item-id="{{item._id}}" class="item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
|
||||
<li data-item-id="{{item._id}}" class="item-delete" title="{{localize 'l5r5e.global.delete'}}"><i class="fas fa-trash"></i></li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
<ul class="item-properties">
|
||||
@@ -13,6 +14,6 @@
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{#if item.data.description}}
|
||||
<div class="item-description item-description-{{item._id}}">{{{ item.data.description }}}</div>
|
||||
<div class="item-description item-description-{{item._id}}">{{{ item.data.description }}}</div>
|
||||
{{/if}}
|
||||
</li>
|
||||
@@ -7,7 +7,7 @@
|
||||
</legend>
|
||||
<ul class="item-list">
|
||||
{{#each actor.items as |item id|}}
|
||||
{{#ifCond item.type '==' 'item'}}
|
||||
{{#ifCond '["item", "armor", "weapon"]' 'includes' item.type}}
|
||||
{{> 'systems/l5r5e/templates/items/item/item-entry.html' item=item id=id editable=../editable }}
|
||||
{{/ifCond}}
|
||||
{{/each}}
|
||||
|
||||
@@ -13,11 +13,14 @@
|
||||
{{/if}}
|
||||
</ul>
|
||||
<ul class="item-properties">
|
||||
<li class="equip-readied-control" data-item-id="{{item._id}}" data-type="readied">
|
||||
<i class="i_readied fa{{^if item.data.readied}}r{{/if}} fa-check-circle" title="{{#if item.data.readied}}{{localize 'l5r5e.weapons.readied'}}{{else}}{{localize 'l5r5e.weapons.sheathed'}}{{/if}}"></i>
|
||||
</li>
|
||||
{{#each item.data.properties as |property id|}}
|
||||
<li>{{{ property.name }}}</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{#if item.data.description}}
|
||||
<div class="item-description item-description-{{item._id}}">{{{ item.data.description }}}</div>
|
||||
<div class="item-description item-description-{{item._id}}">{{{ item.data.description }}}</div>
|
||||
{{/if}}
|
||||
</li>
|
||||
@@ -7,7 +7,7 @@
|
||||
</legend>
|
||||
<ul class="item-list">
|
||||
{{#each actor.items as |item id|}}
|
||||
{{#ifCond item.type '==' 'weapon'}}
|
||||
{{#ifCond (ifCond item.type '==' 'weapon') '&&' (ifCond item.data.equipped '==' true)}}
|
||||
{{> 'systems/l5r5e/templates/items/weapon/weapon-entry.html' item=item id=id editable=../editable }}
|
||||
{{/ifCond}}
|
||||
{{/each}}
|
||||
|
||||
Reference in New Issue
Block a user