Compare commits
40 Commits
fvtt-ecrym
...
fvtt-ecrym
Author | SHA1 | Date | |
---|---|---|---|
c6dcc187d8 | |||
e2f24405af | |||
0487893f47 | |||
d7b7bccbdf | |||
dbf4b17afb | |||
51e5a409c4 | |||
1e4692e850 | |||
40e12c1bba | |||
2450dce46c | |||
67c1066194 | |||
65fe498572 | |||
e1990f88b4 | |||
f99abb0966 | |||
ec6e6be231 | |||
9d26d7bfad | |||
81848155e5 | |||
6778a9aa0b | |||
63aa49c77f | |||
0a3265419a | |||
f5093980b0 | |||
062a597b70 | |||
1d0d123947 | |||
bf94dc30b8 | |||
fc3b83cfc2 | |||
19b88c3de9 | |||
d669059403 | |||
45d419115d | |||
b9e2a77e88 | |||
5dca748bf3 | |||
98f9e1e2a6 | |||
1a90be13be | |||
e2f97762b9 | |||
de11053a9a | |||
3f7ce9918e | |||
919147b4af | |||
22953744ba | |||
6aee41b817 | |||
e7268a1578 | |||
0d25bbe764 | |||
554a1af531 |
54
.gitea/workflows/main.yml
Normal file
@ -0,0 +1,54 @@
|
||||
name: Release Creation
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner."
|
||||
|
||||
#- uses: actions/checkout@v3
|
||||
- uses: RouxAntoine/checkout@v3.5.4
|
||||
with:
|
||||
ref: 'master'
|
||||
|
||||
# get part of the tag after the `v`
|
||||
- name: Extract tag version number
|
||||
id: get_version
|
||||
uses: battila7/get-version-action@v2
|
||||
|
||||
# Substitute the Manifest and Download URLs in the module.json
|
||||
- name: Substitute Manifest and Download Links For Versioned Ones
|
||||
id: sub_manifest_link_version
|
||||
uses: microsoft/variable-substitution@v1
|
||||
with:
|
||||
files: 'system.json'
|
||||
env:
|
||||
version: ${{steps.get_version.outputs.version-without-v}}
|
||||
url: https://www.uberwald.me/gitea/public/fvtt-ecryme
|
||||
manifest: https://www.uberwald.me/gitea/public/fvtt-ecryme/releases/latest/system.json
|
||||
download: https://www.uberwald.me/gitea/public/fvtt-ecryme/releases/download/${{github.event.release.tag_name}}/fvtt-ecryme.zip
|
||||
|
||||
# Create a zip file with all files required by the module to add to the release
|
||||
- run: |
|
||||
apt update -y
|
||||
apt install -y zip
|
||||
|
||||
- run: zip -r ./fvtt-ecryme.zip system.json template.json README.md LICENSE.txt fonts/ images/ lang/ modules/ packs/ styles/ templates/ translated/
|
||||
|
||||
- name: setup go
|
||||
uses: https://github.com/actions/setup-go@v4
|
||||
with:
|
||||
go-version: '>=1.20.1'
|
||||
|
||||
- name: Use Go Action
|
||||
id: use-go-action
|
||||
uses: https://gitea.com/actions/release-action@main
|
||||
with:
|
||||
files: |-
|
||||
./fvtt-ecryme.zip
|
||||
system.json
|
||||
api_key: '${{secrets.RELEASE_TOKEN_UBERWALD}}'
|
7
LICENSE.txt
Normal file
@ -0,0 +1,7 @@
|
||||
Copyright 2023 Open Sesame Games
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
43
README.md
@ -1,6 +1,43 @@
|
||||
# Système Foundry pour Ecryme v2 (French RPG, Open Sesam Games, Official)
|
||||
# Ecryme v2 system for FoundryVTT (French RPG, Open Sesam Games, Official)
|
||||
|
||||
# Developmement
|
||||
|
||||
Uberwald
|
||||
This is a base game system with functionnal character sheets for the game Ecryme, powered by the Engrenage system.
|
||||
You can join the kickstarter and obtain the base books here : https://www.kickstarter.com/projects/osg-us/ecryme
|
||||
|
||||
# System overview
|
||||
|
||||
|
||||
The game system in Foundry offers the following features :
|
||||
- PC/NPC sheet
|
||||
- Skill rolls
|
||||
- Cephaly rolls (with Anency support)
|
||||
- Confrontation management, with detailed result in the chat card
|
||||
- Weapon rolls
|
||||
- Trait management, with Spleen and Ideal also.
|
||||
- Compendiums of items for the game
|
||||
|
||||

|
||||
|
||||
|
||||
# Contributions
|
||||
|
||||
- Original code realised by Uberwald (https://www.uberwald.me/)
|
||||
|
||||
|
||||
# English translation
|
||||
|
||||
English translation by Conal Longden and Ian McClung
|
||||
|
||||
# Copyright mentions
|
||||
|
||||
Copyright 2023 Open Sesame Games
|
||||
All rights reserved
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Ecryme is a game written by Alexandre Clavel and Samuel Metzener, in a universe created by Mathieu gaborit. All of the aforementionned authors retain there moral rights regarding this work in both print and digital formats.
|
||||
|
||||
# Requests or Problems
|
||||
|
||||
Please report any requests or problems you have at contact@open-sesame.games
|
||||
|
||||
|
33
changelog.md
Normal file
@ -0,0 +1,33 @@
|
||||
v12.0.0
|
||||
|
||||
- Support Foundry v11/v12
|
||||
- Correction sur le niveau de jeu par défaut
|
||||
|
||||
v11.0.39
|
||||
|
||||
- Modification sur la prise en compte des traits en bonus/malus
|
||||
- Correction sur les images de l'aide intégrée FR
|
||||
|
||||
v11.0.38
|
||||
|
||||
- Corrections sur les champs background/notes/equipement libre
|
||||
- Taduction des répertoires
|
||||
- Ajout de 2 landing pages
|
||||
|
||||
v11.0.36
|
||||
|
||||
- Enable deletion specialization
|
||||
- Custome bonus for specializations
|
||||
- Specialization direct rolls
|
||||
|
||||
v11.0.31
|
||||
|
||||
Add profession, fix equipment tab and add missing translation
|
||||
|
||||
v11.0.30
|
||||
|
||||
Snapshot and more detailed README
|
||||
|
||||
v11.0.28
|
||||
|
||||
Initial release
|
4
images/.directory
Normal file
@ -0,0 +1,4 @@
|
||||
[Dolphin]
|
||||
Timestamp=2024,3,15,11,30,15.103
|
||||
Version=4
|
||||
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails
|
4
images/assets/.directory
Normal file
@ -0,0 +1,4 @@
|
||||
[Dolphin]
|
||||
Timestamp=2024,3,15,11,30,26.235
|
||||
Version=4
|
||||
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails
|
BIN
images/assets/ecryme_cephalie_01.png
Normal file
After Width: | Height: | Size: 208 KiB |
BIN
images/assets/ecryme_cephalie_02.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
images/assets/ecryme_cephalie_03.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
images/assets/ecryme_confrontation_01.png
Normal file
After Width: | Height: | Size: 171 KiB |
BIN
images/assets/ecryme_confrontation_02.png
Normal file
After Width: | Height: | Size: 353 KiB |
BIN
images/assets/ecryme_confrontation_03.png
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
images/assets/ecryme_confrontation_04.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
images/assets/ecryme_landing_01.webp
Normal file
After Width: | Height: | Size: 388 KiB |
BIN
images/assets/ecryme_level.png
Normal file
After Width: | Height: | Size: 248 KiB |
4
images/ui/.directory
Normal file
@ -0,0 +1,4 @@
|
||||
[Dolphin]
|
||||
Timestamp=2024,3,15,11,30,19.681
|
||||
Version=4
|
||||
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails
|
20
lang/en.json
@ -1,7 +1,9 @@
|
||||
{
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"Personnage": "PC"
|
||||
"pc": "Player Character",
|
||||
"npc": "Non-Player Character",
|
||||
"annency": "Annency"
|
||||
},
|
||||
"Item": {
|
||||
"trait": "Trait",
|
||||
@ -16,7 +18,8 @@
|
||||
"cogs": "Cogs",
|
||||
"cephaly": "Cephaly",
|
||||
"boheme": "Boheme",
|
||||
"amertume": "Amertume"
|
||||
"amertume": "Amertume",
|
||||
"gamelevel": "Game level"
|
||||
},
|
||||
"chat": {
|
||||
"formula": "Formula",
|
||||
@ -30,7 +33,9 @@
|
||||
"traitbonus": "Bonus trait",
|
||||
"traitmalus": "Malus trait",
|
||||
"bonusmalustraits": "Traits Bonus/Malus",
|
||||
"spectranscend": "Self-Transcend : "
|
||||
"spectranscend": "Self-Transcend : ",
|
||||
"confrontselect": "Selected for confrontation",
|
||||
"sentogm": "Confrontation has been sent to GM"
|
||||
},
|
||||
"rule": {
|
||||
"cephaly-success-2": "Duration : 1 scene - Impact : Superficial - Bonus : 1 - Elegy : 1",
|
||||
@ -48,6 +53,7 @@
|
||||
"notenoughdice": "Execution and Preservation must have 2 dices allocated"
|
||||
},
|
||||
"ui": {
|
||||
"equipmentfree": "Equipments (free input)",
|
||||
"traitType": "Trait type",
|
||||
"niveauTrait": "Trait level",
|
||||
"weight": "Weight",
|
||||
@ -156,7 +162,13 @@
|
||||
"oniricform": "Oniric shape (Boheme)",
|
||||
"ideals": "Ideals",
|
||||
"politic": "Political ideal",
|
||||
"boheme": "Boheme"
|
||||
"boheme": "Boheme",
|
||||
"annencybonus": "Annency bonus",
|
||||
"bornplace": "Born place",
|
||||
"residence": "Residence",
|
||||
"origin": "Origin",
|
||||
"childhood": "Childhood",
|
||||
"bonus": "Bonus"
|
||||
}
|
||||
}
|
||||
}
|
28
lang/fr.json
@ -1,7 +1,9 @@
|
||||
{
|
||||
"TYPES": {
|
||||
"Actor":{
|
||||
"Personnage": "PJ"
|
||||
"pc": "Personnage Joueur",
|
||||
"npc": "Personnage Non Joueur",
|
||||
"annency": "Anence"
|
||||
},
|
||||
"Item": {
|
||||
"trait": "Trait",
|
||||
@ -16,7 +18,8 @@
|
||||
"cogs": "Engrenages",
|
||||
"cephaly": "Céphalie",
|
||||
"boheme": "Bohême",
|
||||
"amertume": "Amertume"
|
||||
"amertume": "Amertume",
|
||||
"gamelevel": "Niveau de jeu"
|
||||
},
|
||||
"chat": {
|
||||
"formula": "Formule",
|
||||
@ -30,14 +33,16 @@
|
||||
"traitbonus": "Trait bonus",
|
||||
"traitmalus": "Trait malus",
|
||||
"bonusmalustraits": "Bonus/Malus des Traits",
|
||||
"spectranscend": "Dépassement de soi : "
|
||||
"spectranscend": "Dépassement de soi : ",
|
||||
"confrontselected": "Confrontation selectionnée",
|
||||
"sentogm": "La confrontation a été envoyée au MJ"
|
||||
},
|
||||
"rule": {
|
||||
"cephaly-success-12": "Durée : 1 scène - Impact : Superficiel - Bonus : 1 - Elegie : 1",
|
||||
"cephaly-success-34": "Durée : 1 semaine - Impact : Léger - Bonus : 2 - Elegie : 2",
|
||||
"cephaly-success-56": "Durée : 1 mois - Impact : Grave - Bonus : 3 - Elegie : 3",
|
||||
"cephaly-success-78": "Durée : 1 année - Impact : Majeur - Bonus : 4 - Elegie : 4",
|
||||
"cephaly-success-910": "Durée : Permanent - Impact : Mort - Bonus : 5 - Elegie : 5",
|
||||
"cephaly-success-4": "Durée : 1 semaine - Impact : Léger - Bonus : 2 - Elegie : 2",
|
||||
"cephaly-success-6": "Durée : 1 mois - Impact : Grave - Bonus : 3 - Elegie : 3",
|
||||
"cephaly-success-8": "Durée : 1 année - Impact : Majeur - Bonus : 4 - Elegie : 4",
|
||||
"cephaly-success-10": "Durée : Permanent - Impact : Mort - Bonus : 5 - Elegie : 5",
|
||||
"cephaly-failure-2": "Durée : 1 scène - Impact : Superficiel - Malus : 1 - Symptôme non visible et sans gravité - Altération bégigne difficilement repérable",
|
||||
"cephaly-failure-4": "Durée : 1 semaine - Impact : Léger - Malus : 2 - Symptôme visible non incapacitant - Altération repérable",
|
||||
"cephaly-failure-6": "Durée : 1 mois - Impact : Grave - Malus : 3 - Symptôme incapacitant - Altération repérable et fâcheuse",
|
||||
@ -49,6 +54,7 @@
|
||||
"notenoughdice": "L'Accomplissement et la Préservation doivent avoir 2 dés chacun"
|
||||
},
|
||||
"ui": {
|
||||
"equipmentfree": "Equipements (saisie libre)",
|
||||
"traitType": "Type de trait",
|
||||
"niveauTrait": "Niveau du trait",
|
||||
"effect": "Incidence",
|
||||
@ -157,7 +163,13 @@
|
||||
"oniricform": "Forme Onorique (Bohême)",
|
||||
"ideals": "Idéaux",
|
||||
"politic": "Idéaux politiques",
|
||||
"boheme": "Bohême"
|
||||
"boheme": "Bohême",
|
||||
"annencybonus": "Bonus d'Anence",
|
||||
"bornplace": "Lieu de naissance",
|
||||
"residence": "Résidence",
|
||||
"origin": "Origine",
|
||||
"childhood": "Enfance",
|
||||
"bonus": "Bonus"
|
||||
}
|
||||
}
|
||||
}
|
@ -11,7 +11,7 @@ export class EcrymeActorSheet extends ActorSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-ecryme", "sheet", "actor"],
|
||||
template: "systems/fvtt-ecryme/templates/actors/actor-sheet.hbs",
|
||||
width: 860,
|
||||
@ -33,7 +33,7 @@ export class EcrymeActorSheet extends ActorSheet {
|
||||
name: this.actor.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
system: duplicate(this.object.system),
|
||||
system: foundry.utils.duplicate(this.object.system),
|
||||
limited: this.object.limited,
|
||||
skills: this.actor.prepareSkills(),
|
||||
traits: this.actor.getRollTraits(),
|
||||
@ -41,21 +41,21 @@ export class EcrymeActorSheet extends ActorSheet {
|
||||
ideal: this.actor.getIdeal(),
|
||||
spleen: this.actor.getSpleen(),
|
||||
impacts: this.object.getImpacts(),
|
||||
config: duplicate(game.system.ecryme.config),
|
||||
config: foundry.utils.duplicate(game.system.ecryme.config),
|
||||
weapons: this.actor.getWeapons(),
|
||||
maneuvers: this.actor.getManeuvers(),
|
||||
impactsMalus: this.actor.getImpactsMalus(),
|
||||
archetype: duplicate(this.actor.getArchetype()),
|
||||
equipements: this.actor.getEquipments(),
|
||||
archetype: foundry.utils.duplicate(this.actor.getArchetype()),
|
||||
equipments: this.actor.getEquipments(),
|
||||
hasCephaly: EcrymeUtility.hasCephaly(),
|
||||
hasBoheme: EcrymeUtility.hasBoheme(),
|
||||
hasAmertume: EcrymeUtility.hasAmertume(),
|
||||
cephalySkills: this.actor.getCephalySkills(),
|
||||
subActors: duplicate(this.actor.getSubActors()),
|
||||
subActors: foundry.utils.duplicate(this.actor.getSubActors()),
|
||||
annency: this.actor.getAnnency(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
|
||||
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }),
|
||||
equipementlibre: await TextEditor.enrichHTML(this.object.system.equipementlibre, { async: true }),
|
||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, { async: true }),
|
||||
notes: await TextEditor.enrichHTML(this.object.system.biodata.notes, { async: true }),
|
||||
equipementlibre: await TextEditor.enrichHTML(this.object.system.equipmentfree, { async: true }),
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
editScore: this.options.editScore,
|
||||
@ -90,6 +90,9 @@ export class EcrymeActorSheet extends ActorSheet {
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
if (!itemId) {
|
||||
itemId = $(ev.currentTarget).data("item-id")
|
||||
}
|
||||
const item = this.actor.items.get( itemId );
|
||||
item.sheet.render(true);
|
||||
});
|
||||
@ -129,6 +132,12 @@ export class EcrymeActorSheet extends ActorSheet {
|
||||
let skillKey = $(event.currentTarget).data("skill-key")
|
||||
this.actor.rollSkill(categKey, skillKey)
|
||||
});
|
||||
html.find('.roll-spec').click((event) => {
|
||||
let categKey = $(event.currentTarget).data("category-key")
|
||||
let skillKey = $(event.currentTarget).data("skill-key")
|
||||
let specId = $(event.currentTarget).data("spec-id")
|
||||
this.actor.rollSpec(categKey, skillKey, specId)
|
||||
});
|
||||
html.find('.roll-skill-confront').click((event) => {
|
||||
let categKey = $(event.currentTarget).data("category-key")
|
||||
let skillKey = $(event.currentTarget).data("skill-key")
|
||||
|
@ -29,7 +29,7 @@ export class EcrymeActor extends Actor {
|
||||
if (data instanceof Array) {
|
||||
return super.create(data, options);
|
||||
}
|
||||
// If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic
|
||||
// If the created actor has items (only applicable to foundry.utils.duplicated actors) bypass the new actor creation logic
|
||||
if (data.items) {
|
||||
let actor = super.create(data, options);
|
||||
return actor;
|
||||
@ -54,6 +54,18 @@ export class EcrymeActor extends Actor {
|
||||
super._preUpdate(changed, options, user);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _preCreate(data, options, user) {
|
||||
await super._preCreate(data, options, user);
|
||||
|
||||
// Configure prototype token settings
|
||||
const prototypeToken = {};
|
||||
if (this.type === "pc") Object.assign(prototypeToken, {
|
||||
sight: { enabled: true }, actorLink: true, disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
|
||||
});
|
||||
this.updateSource({ prototypeToken });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getMoneys() {
|
||||
let comp = this.items.filter(item => item.type == 'money');
|
||||
@ -61,7 +73,7 @@ export class EcrymeActor extends Actor {
|
||||
return comp;
|
||||
}
|
||||
getArchetype() {
|
||||
let comp = duplicate(this.items.find(item => item.type == 'archetype') || { name: "Pas d'archetype" })
|
||||
let comp = foundry.utils.duplicate(this.items.find(item => item.type == 'archetype') || { name: "Pas d'archetype" })
|
||||
if (comp?.system) {
|
||||
comp.tarot = EcrymeUtility.getTarot(comp.system.lametutelaire)
|
||||
}
|
||||
@ -80,7 +92,7 @@ export class EcrymeActor extends Actor {
|
||||
}
|
||||
/* ----------------------- --------------------- */
|
||||
addAnnencyActor(actorId) {
|
||||
let members = duplicate(this.system.base.characters)
|
||||
let members = foundry.utils.duplicate(this.system.base.characters)
|
||||
members.push(actorId)
|
||||
this.update({ 'system.base.characters': members })
|
||||
}
|
||||
@ -91,7 +103,8 @@ export class EcrymeActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getAnnency() {
|
||||
return game.actors.find(a => a.type == 'annency' && a.system.base.characters.includes(this.id))
|
||||
let annency = game.actors.find(a => a.type == 'annency' && a.system.base.characters.includes(this.id))
|
||||
return annency || {}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getConfrontations() {
|
||||
@ -123,7 +136,7 @@ export class EcrymeActor extends Actor {
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
prepareSkills() {
|
||||
let skills = duplicate(this.system.skills)
|
||||
let skills = foundry.utils.duplicate(this.system.skills)
|
||||
for (let categKey in skills) {
|
||||
let category = skills[categKey]
|
||||
for (let skillKey in category.skilllist) {
|
||||
@ -135,22 +148,22 @@ export class EcrymeActor extends Actor {
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getCephalySkills() {
|
||||
let skills = duplicate(this.system.cephaly.skilllist)
|
||||
let skills = foundry.utils.duplicate(this.system.cephaly.skilllist)
|
||||
return skills
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getImpacts() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'impact') || [])
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'impact') || [])
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getWeapons() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon') || [])
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'weapon') || [])
|
||||
EcrymeUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getManeuvers() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'maneuver') || [])
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'maneuver') || [])
|
||||
EcrymeUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
@ -158,7 +171,7 @@ export class EcrymeActor extends Actor {
|
||||
getItemById(id) {
|
||||
let item = this.items.find(item => item.id == id);
|
||||
if (item) {
|
||||
item = duplicate(item)
|
||||
item = foundry.utils.duplicate(item)
|
||||
}
|
||||
return item;
|
||||
}
|
||||
@ -188,12 +201,12 @@ export class EcrymeActor extends Actor {
|
||||
|
||||
/* ------------------------------------------- */
|
||||
getEquipments() {
|
||||
return this.items.filter(item => item.type == 'equipement')
|
||||
return this.items.filter(item => item.type == 'equipment')
|
||||
}
|
||||
|
||||
/* ------------------------------------------- */
|
||||
async buildContainerTree() {
|
||||
let equipments = duplicate(this.items.filter(item => item.type == "equipment") || [])
|
||||
let equipments = foundry.utils.duplicate(this.items.filter(item => item.type == "equipment") || [])
|
||||
for (let equip1 of equipments) {
|
||||
if (equip1.system.iscontainer) {
|
||||
equip1.system.contents = []
|
||||
@ -288,13 +301,13 @@ export class EcrymeActor extends Actor {
|
||||
getSubActors() {
|
||||
let subActors = [];
|
||||
for (let id of this.system.subactors) {
|
||||
subActors.push(duplicate(game.actors.get(id)))
|
||||
subActors.push(foundry.utils.duplicate(game.actors.get(id)))
|
||||
}
|
||||
return subActors;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async addSubActor(subActorId) {
|
||||
let subActors = duplicate(this.system.subactors);
|
||||
let subActors = foundry.utils.duplicate(this.system.subactors);
|
||||
subActors.push(subActorId);
|
||||
await this.update({ 'system.subactors': subActors });
|
||||
}
|
||||
@ -336,7 +349,7 @@ export class EcrymeActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
modifyConfrontBonus( modifier ) {
|
||||
let newBonus = this.system.internals.confrontbonus + bonus
|
||||
let newBonus = this.system.internals.confrontbonus + modifier
|
||||
this.update({'system.internals.confrontbonus': newBonus})
|
||||
}
|
||||
|
||||
@ -365,9 +378,10 @@ export class EcrymeActor extends Actor {
|
||||
rollData.actorId = this.id
|
||||
rollData.img = this.img
|
||||
rollData.isReroll = false
|
||||
rollData.traits = duplicate(this.getRollTraits())
|
||||
rollData.spleen = duplicate(this.getSpleen() || {})
|
||||
rollData.ideal = duplicate(this.getIdeal() || {})
|
||||
rollData.config = game.system.ecryme.config
|
||||
rollData.traits = foundry.utils.duplicate(this.getRollTraits())
|
||||
rollData.spleen = foundry.utils.duplicate(this.getSpleen() || {})
|
||||
rollData.ideal = foundry.utils.duplicate(this.getIdeal() || {})
|
||||
rollData.confrontBonus = this.getBonusList()
|
||||
|
||||
return rollData
|
||||
@ -375,14 +389,30 @@ export class EcrymeActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCommonSkill(categKey, skillKey) {
|
||||
let skill = this.system.skills[categKey].skilllist[skillKey]
|
||||
let rollData = this.getCommonRollData()
|
||||
|
||||
// Specific NPC case
|
||||
let skill
|
||||
if (skillKey == "rawnpc") {
|
||||
skill = {
|
||||
name: "ECRY.ui." + categKey,
|
||||
max: 10,
|
||||
value: this.system.skills[categKey].pnjvalue,
|
||||
spec: []
|
||||
}
|
||||
} else {
|
||||
skill = this.system.skills[categKey].skilllist[skillKey]
|
||||
skill = foundry.utils.duplicate(skill)
|
||||
skill.spec = this.getSpecializations(skillKey)
|
||||
}
|
||||
|
||||
skill = duplicate(skill)
|
||||
rollData.skillLevelOptions = [];
|
||||
for (let i=0; i<=skill.value; i++) {
|
||||
rollData.skillLevelOptions[i] = `${i}`
|
||||
}
|
||||
|
||||
skill.categKey = categKey
|
||||
skill.skillKey = skillKey
|
||||
skill.spec = this.getSpecializations(skillKey)
|
||||
|
||||
rollData.skill = skill
|
||||
rollData.img = skill.img
|
||||
rollData.impactMalus = this.getImpactMalus(categKey)
|
||||
@ -398,6 +428,17 @@ export class EcrymeActor extends Actor {
|
||||
this.startRoll(rollData).catch("Error on startRoll")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollSpec(categKey, skillKey, specId) {
|
||||
let rollData = this.getCommonSkill(categKey, skillKey)
|
||||
let spec = this.items.find(it => it.type == "specialization" && it.id == specId)
|
||||
rollData.mode = "skill"
|
||||
rollData.selectedSpecs = [spec.id]
|
||||
rollData.forcedSpec = foundry.utils.duplicate(spec)
|
||||
rollData.title = game.i18n.localize(rollData.skill.name)
|
||||
this.startRoll(rollData).catch("Error on startRoll")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollSkillConfront(categKey, skillKey) {
|
||||
let rollData = this.getCommonSkill(categKey, skillKey)
|
||||
@ -406,8 +447,9 @@ export class EcrymeActor extends Actor {
|
||||
rollData.executionTotal = rollData.skill.value
|
||||
rollData.preservationTotal = rollData.skill.value
|
||||
rollData.applyTranscendence = "execution"
|
||||
rollData.traitsBonus = duplicate(rollData.traits)
|
||||
rollData.traitsMalus = duplicate(rollData.traits)
|
||||
rollData.traitsBonus = foundry.utils.duplicate(rollData.traits)
|
||||
rollData.traitsMalus = foundry.utils.duplicate(rollData.traits)
|
||||
console.log("ROLLDATA", rollData)
|
||||
let confrontStartDialog = await EcrymeConfrontStartDialog.create(this, rollData)
|
||||
confrontStartDialog.render(true)
|
||||
}
|
||||
@ -415,16 +457,16 @@ export class EcrymeActor extends Actor {
|
||||
async rollCephalySkillConfront(skillKey) {
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "cephaly"
|
||||
rollData.skill = duplicate(this.system.cephaly.skilllist[skillKey])
|
||||
rollData.skill = foundry.utils.duplicate(this.system.cephaly.skilllist[skillKey])
|
||||
rollData.annency = foundry.utils.duplicate(this.getAnnency())
|
||||
rollData.img = rollData.skill.img
|
||||
rollData.skill.categKey = "cephaly"
|
||||
rollData.skill.skillKey = skillKey
|
||||
//rollData.impactMalus = this.getImpactMalus(categKey)
|
||||
rollData.title = game.i18n.localize("ECRY.ui.cephaly") + " : " + game.i18n.localize(rollData.skill.name)
|
||||
rollData.executionTotal = rollData.skill.value
|
||||
rollData.preservationTotal = rollData.skill.value
|
||||
rollData.traitsBonus = duplicate(rollData.traits)
|
||||
rollData.traitsMalus = duplicate(rollData.traits)
|
||||
rollData.traitsBonus = foundry.utils.duplicate(rollData.traits)
|
||||
rollData.traitsMalus = foundry.utils.duplicate(rollData.traits)
|
||||
rollData.applyTranscendence = "execution"
|
||||
let confrontStartDialog = await EcrymeConfrontStartDialog.create(this, rollData)
|
||||
confrontStartDialog.render(true)
|
||||
@ -440,10 +482,12 @@ export class EcrymeActor extends Actor {
|
||||
rollData = this.getCommonSkill("physical", "shooting")
|
||||
}
|
||||
rollData.mode = "weapon"
|
||||
rollData.weapon = duplicate(weapon)
|
||||
rollData.weapon = foundry.utils.duplicate(weapon)
|
||||
rollData.title = game.i18n.localize("ECRY.ui.confrontation") + " : " + game.i18n.localize(rollData.skill.name)
|
||||
rollData.executionTotal = rollData.skill.value
|
||||
rollData.preservationTotal = rollData.skill.value
|
||||
rollData.traitsBonus = foundry.utils.duplicate(rollData.traits)
|
||||
rollData.traitsMalus = foundry.utils.duplicate(rollData.traits)
|
||||
rollData.applyTranscendence = "execution"
|
||||
let confrontStartDialog = await EcrymeConfrontStartDialog.create(this, rollData)
|
||||
confrontStartDialog.render(true)
|
||||
@ -453,12 +497,12 @@ export class EcrymeActor extends Actor {
|
||||
rollWeapon(weaponId) {
|
||||
let weapon = this.items.get(weaponId)
|
||||
if (weapon) {
|
||||
weapon = duplicate(weapon)
|
||||
weapon = foundry.utils.duplicate(weapon)
|
||||
let rollData = this.getCommonRollData()
|
||||
if (weapon.system.armetype == "mainsnues" || weapon.system.armetype == "epee") {
|
||||
rollData.attr = { label: "(Physique+Habilité)/2", value: Math.floor((this.getPhysiqueMalus() + this.system.attributs.physique.value + this.system.attributs.habilite.value) / 2) }
|
||||
} else {
|
||||
rollData.attr = duplicate(this.system.attributs.habilite)
|
||||
rollData.attr = foundry.utils.duplicate(this.system.attributs.habilite)
|
||||
}
|
||||
rollData.mode = "weapon"
|
||||
rollData.weapon = weapon
|
||||
|
@ -11,7 +11,7 @@ export class EcrymeAnnencySheet extends ActorSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-ecryme", "sheet", "actor"],
|
||||
template: "systems/fvtt-ecryme/templates/actors/annency-sheet.hbs",
|
||||
width: 640,
|
||||
@ -33,9 +33,9 @@ export class EcrymeAnnencySheet extends ActorSheet {
|
||||
name: this.actor.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
system: duplicate(this.object.system),
|
||||
system: foundry.utils.duplicate(this.object.system),
|
||||
limited: this.object.limited,
|
||||
config: duplicate(game.system.ecryme.config),
|
||||
config: foundry.utils.duplicate(game.system.ecryme.config),
|
||||
hasCephaly: EcrymeUtility.hasCephaly(),
|
||||
hasBoheme: EcrymeUtility.hasBoheme(),
|
||||
hasAmertume: EcrymeUtility.hasAmertume(),
|
||||
|
@ -43,7 +43,7 @@ export class EcrymeCharacterSummary extends Application {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
template: "systems/fvtt-ecryme/templates/dialogs/character-summary.hbs",
|
||||
popOut: true,
|
||||
resizable: true,
|
||||
|
@ -10,14 +10,14 @@ export const ECRYME_CONFIG = {
|
||||
"melee": "ECRY.ui.melee",
|
||||
"ranged": "ECRY.ui.ranged"
|
||||
},
|
||||
traitLevel: [
|
||||
{value: -3, text: "-3"},
|
||||
{value: -2, text: "-2"},
|
||||
{value: -1, text: "-1"},
|
||||
{value: +1, text: "+1"},
|
||||
{value: +2, text: "+2"},
|
||||
{value: +3, text: "+3"}
|
||||
],
|
||||
traitLevel: {
|
||||
"-3":{value: "-3", text: "-3"},
|
||||
"-2":{value: "-2", text: "-2"},
|
||||
"-1":{value: "-1", text: "-1"},
|
||||
"+1":{value: "+1", text: "+1"},
|
||||
"+2":{value: "+2", text: "+2"},
|
||||
"+3":{value: "+3", text: "+3"}
|
||||
},
|
||||
impactTypes: {
|
||||
physical: "ECRY.ui.physical",
|
||||
mental: "ECRY.ui.mental",
|
||||
@ -30,7 +30,7 @@ export const ECRYME_CONFIG = {
|
||||
major: "ECRY.ui.major"
|
||||
},
|
||||
difficulty: {
|
||||
"-1": {difficulty: "ECRY.ui.none", frequency: "ECRY.ui.none", value: "-"},
|
||||
"-1": {difficulty: "ECRY.ui.none", frequency: "ECRY.ui.none", value: "-1"},
|
||||
"8": { difficulty: "ECRY.ui.troublesome", frequency: "ECRY.ui.occasional", value: 8 },
|
||||
"10": { difficulty: "ECRY.ui.difficult", frequency: "ECRY.ui.uncommon", value: 10 },
|
||||
"12": { difficulty: "ECRY.ui.verydifficult", frequency: "ECRY.ui.rare", value: 12 },
|
||||
@ -57,6 +57,19 @@ export const ECRYME_CONFIG = {
|
||||
"lige": {name: "ECRY.ui.lige", value: 100 },
|
||||
"hurle": {name: "ECRY.ui.hurle", value: 10 },
|
||||
"coin": {name: "ECRY.ui.coin", value: 1 }
|
||||
},
|
||||
transcendanceOptions: {
|
||||
"execution": "ECRY.ui.execution",
|
||||
"preservation": "ECRY.ui.preservation"
|
||||
},
|
||||
bonusMalusPersoOptions: {
|
||||
"-3": {value: "-3", label: "-3"},
|
||||
"-2": {value: "-2", label: "-2"},
|
||||
"-1": {value: "-1", label: "-1"},
|
||||
"0": {value: "0", label: "0"},
|
||||
"+1": {value: "1", label: "+1"},
|
||||
"+2": {value: "2", label: "+2"},
|
||||
"+3": {value: "3", label: "+3"}
|
||||
}
|
||||
|
||||
}
|
@ -97,6 +97,7 @@ export class EcrymeUtility {
|
||||
"level_b": game.i18n.localize("ECRY.settings.boheme"),
|
||||
"level_a": game.i18n.localize("ECRY.settings.amertume"),
|
||||
},
|
||||
default: "level_a",
|
||||
restricted: true
|
||||
})
|
||||
|
||||
@ -126,7 +127,7 @@ export class EcrymeUtility {
|
||||
for (let categKey in game.data.template.Actor.templates.core.skills) {
|
||||
let category = game.data.template.Actor.templates.core.skills[categKey]
|
||||
for (let skillKey in category.skilllist) {
|
||||
let skill = duplicate(category.skilllist[skillKey])
|
||||
let skill = foundry.utils.duplicate(category.skilllist[skillKey])
|
||||
skill.categKey = categKey // Auto reference the category
|
||||
game.system.ecryme.config.skills[skillKey] = skill
|
||||
}
|
||||
@ -215,13 +216,13 @@ export class EcrymeUtility {
|
||||
confront.impactPreservation = this.getImpactFromEffect(Math.abs(confront.effectPreservation))
|
||||
}
|
||||
if (confront.marginPreservation > 0) {
|
||||
confront.bonus1 = -confront.marginPreservation
|
||||
confront.bonus1 = confront.marginPreservation
|
||||
}
|
||||
|
||||
let msg = await this.createChatWithRollMode(this.confrontData1.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-ecryme/templates/chat/chat-confrontation-result.hbs`, confront)
|
||||
})
|
||||
msg.setFlag("world", "ecryme-rolldata", confront)
|
||||
await msg.setFlag("world", "ecryme-rolldata", confront)
|
||||
console.log("Confront result", confront)
|
||||
|
||||
this.lastConfront = confront
|
||||
@ -275,7 +276,7 @@ export class EcrymeUtility {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "rolldata")
|
||||
//console.log(">>>>>>>>>>>>>>>>>>>>>>>>>> Menu !!!!", rollData)
|
||||
if (rollData.skill && i <= rollData.skill.value && !rollData.transcendUsed && rollData.spec) {
|
||||
if (rollData.skill && rollData.skill.value >= i && !rollData.transcendUsed && rollData.spec) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@ -300,6 +301,7 @@ export class EcrymeUtility {
|
||||
let messageId = EcrymeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "ecryme-rolldata")
|
||||
ui.notifications.info( game.i18n.localize("ECRY.chat.confrontselect"))
|
||||
EcrymeUtility.manageConfrontation(rollData)
|
||||
})
|
||||
html.on("click", '.button-apply-cephaly-difficulty', event => {
|
||||
@ -403,16 +405,21 @@ export class EcrymeUtility {
|
||||
|
||||
let id = rollData.rollId
|
||||
let oldRollData = this.rollDataStore[id] || {}
|
||||
let newRollData = mergeObject(oldRollData, rollData)
|
||||
let newRollData = foundry.utils.mergeObject(oldRollData, rollData)
|
||||
this.rollDataStore[id] = newRollData
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async onSocketMesssage(msg) {
|
||||
console.log("SOCKET MESSAGE", msg.name)
|
||||
if (msg.name == "msg-draw-card") {
|
||||
if (game.user.isGM && game.system.ecryme.currentTirage) {
|
||||
game.system.ecryme.currentTirage.addCard(msg.data.msgId)
|
||||
console.log("SOCKET MESSAGE", msg)
|
||||
if (msg.name == "msg_gm_chat_message") {
|
||||
let rollData = msg.data.rollData
|
||||
if ( game.user.isGM ) {
|
||||
let chatMsg = await this.createChatMessage(rollData.alias, "blindroll", {
|
||||
content: await renderTemplate(msg.data.template, rollData),
|
||||
whisper: game.user.id
|
||||
})
|
||||
chatMsg.setFlag("world", "ecryme-rolldata", rollData)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -492,7 +499,7 @@ export class EcrymeUtility {
|
||||
rollData.margin = rollData.total - rollData.difficulty
|
||||
if (rollData.total > rollData.difficulty) {
|
||||
rollData.isSuccess = true
|
||||
let maxMargin = rollData.skill.value + (rollData.spec) ? 2 : 0
|
||||
let maxMargin = rollData.skill.value + ((rollData.spec) ? 2 : 0)
|
||||
rollData.margin = Math.min(rollData.margin, maxMargin)
|
||||
}
|
||||
}
|
||||
@ -516,7 +523,7 @@ export class EcrymeUtility {
|
||||
}
|
||||
if (rollData.selectedSpecs && rollData.selectedSpecs.length > 0) {
|
||||
rollData.spec = actor.getSpecialization(rollData.selectedSpecs[0])
|
||||
diceFormula += "+2"
|
||||
diceFormula += "+" + (String(rollData.spec.system?.bonus) || "2")
|
||||
}
|
||||
rollData.bonusMalusTraits = 0
|
||||
if (rollData.traitsBonus && rollData.traitsBonus.length > 0) {
|
||||
@ -525,7 +532,7 @@ export class EcrymeUtility {
|
||||
let trait = actor.getTrait(id)
|
||||
console.log(trait, id)
|
||||
rollData.traitsBonusList.push(trait)
|
||||
rollData.bonusMalusTraits += trait.system.level
|
||||
rollData.bonusMalusTraits += Math.abs(trait.system.level)
|
||||
}
|
||||
}
|
||||
if (rollData.traitsMalus && rollData.traitsMalus.length > 0) {
|
||||
@ -533,12 +540,15 @@ export class EcrymeUtility {
|
||||
for (let id of rollData.traitsMalus) {
|
||||
let trait = actor.getTrait(id)
|
||||
rollData.traitsMalusList.push(trait)
|
||||
rollData.bonusMalusTraits -= trait.system.level
|
||||
rollData.bonusMalusTraits -= Math.abs(trait.system.level)
|
||||
}
|
||||
}
|
||||
diceFormula += "+" + rollData.bonusMalusTraits
|
||||
diceFormula += "+" + rollData.bonusMalusPerso
|
||||
diceFormula += "+" + rollData.impactMalus
|
||||
if (rollData.annency) {
|
||||
diceFormula += "+" + rollData.annencyBonus
|
||||
}
|
||||
rollData.diceFormula = diceFormula
|
||||
return diceFormula
|
||||
}
|
||||
@ -548,7 +558,7 @@ export class EcrymeUtility {
|
||||
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
// Fix difficulty
|
||||
if (!rollData.difficulty || rollData.difficulty == "-") {
|
||||
if (!rollData.difficulty || rollData.difficulty == "-1") {
|
||||
rollData.difficulty = 0
|
||||
}
|
||||
rollData.difficulty = Number(rollData.difficulty)
|
||||
@ -556,9 +566,9 @@ export class EcrymeUtility {
|
||||
let diceFormula = this.computeRollFormula(rollData, actor)
|
||||
|
||||
// Performs roll
|
||||
let myRoll = new Roll(diceFormula).roll({ async: false })
|
||||
let myRoll = await new Roll(diceFormula).roll()
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.roll = duplicate(myRoll)
|
||||
rollData.roll = foundry.utils.duplicate(myRoll)
|
||||
rollData.total = myRoll.total
|
||||
rollData.diceSum = myRoll.terms[0].total
|
||||
|
||||
@ -567,7 +577,7 @@ export class EcrymeUtility {
|
||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-ecryme/templates/chat/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
msg.setFlag("world", "ecryme-rolldata", rollData)
|
||||
await msg.setFlag("world", "ecryme-rolldata", rollData)
|
||||
console.log("Rolldata result", rollData)
|
||||
}
|
||||
|
||||
@ -584,7 +594,7 @@ export class EcrymeUtility {
|
||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-ecryme/templates/chat/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
msg.setFlag("world", "ecryme-rolldata", rollData)
|
||||
await msg.setFlag("world", "ecryme-rolldata", rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -628,12 +638,10 @@ export class EcrymeUtility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static blindMessageToGM(chatOptions) {
|
||||
let chatGM = duplicate(chatOptions);
|
||||
chatGM.whisper = this.getUsers(user => user.isGM);
|
||||
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
|
||||
console.log("blindMessageToGM", chatGM);
|
||||
game.socket.emit("system.fvtt-ecryme", { msg: "msg_gm_chat_message", data: chatGM });
|
||||
static blindMessageToGM(chatData) {
|
||||
chatData.whisper = this.getUsers(user => user.isGM);
|
||||
console.log("blindMessageToGM", chatData);
|
||||
game.socket.emit("system.fvtt-ecryme", { name: "msg_gm_chat_message", data: chatData });
|
||||
}
|
||||
|
||||
|
||||
@ -653,18 +661,14 @@ export class EcrymeUtility {
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async createChatMessage(name, rollMode, chatOptions) {
|
||||
switch (rollMode) {
|
||||
case "blindroll": // GM only
|
||||
if (!game.user.isGM) {
|
||||
this.blindMessageToGM(chatOptions);
|
||||
|
||||
chatOptions.whisper = [game.user.id];
|
||||
chatOptions.content = "Message only to the GM";
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
chatOptions.whisper = this.getUsers(user => user.isGM);
|
||||
}
|
||||
break;
|
||||
@ -679,19 +683,20 @@ export class EcrymeUtility {
|
||||
/* -------------------------------------------- */
|
||||
static getBasicRollData() {
|
||||
let rollData = {
|
||||
rollId: randomID(16),
|
||||
rollId: foundry.utils.randomID(16),
|
||||
type: "roll-data",
|
||||
bonusMalusPerso: 0,
|
||||
bonusMalusPerso: "0",
|
||||
bonusMalusSituation: 0,
|
||||
bonusMalusDef: 0,
|
||||
annencyBonus: 0,
|
||||
bonusMalusPortee: 0,
|
||||
skillTranscendence: 0,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
difficulty: "-",
|
||||
difficulty: "-1",
|
||||
useSpleen: false,
|
||||
useIdeal: false,
|
||||
impactMalus: 0,
|
||||
config: duplicate(game.system.ecryme.config)
|
||||
config: foundry.utils.duplicate(game.system.ecryme.config)
|
||||
}
|
||||
EcrymeUtility.updateWithTarget(rollData)
|
||||
return rollData
|
||||
|
@ -6,7 +6,7 @@ export class EcrymeConfrontDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData) {
|
||||
|
||||
let options = mergeObject(super.defaultOptions, {
|
||||
let options = foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-ecryme ecryme-confrontation-dialog"],
|
||||
dragDrop: [{ dragSelector: ".confront-dice-container", dropSelector: null }],
|
||||
width: 620, height: 'fit-content', 'z-index': 99999
|
||||
@ -50,6 +50,7 @@ export class EcrymeConfrontDialog extends Dialog {
|
||||
let msg = await EcrymeUtility.createChatMessage(this.rollData.alias, "blindroll", {
|
||||
content: await renderTemplate(`systems/fvtt-ecryme/templates/chat/chat-confrontation-pending.hbs`, this.rollData)
|
||||
})
|
||||
EcrymeUtility.blindMessageToGM( { rollData: this.rollData, template: "systems/fvtt-ecryme/templates/chat/chat-confrontation-pending.hbs" })
|
||||
console.log("MSG", this.rollData)
|
||||
msg.setFlag("world", "ecryme-rolldata", this.rollData)
|
||||
}
|
||||
@ -82,13 +83,24 @@ export class EcrymeConfrontDialog extends Dialog {
|
||||
let button = this.buttonDisabled
|
||||
setTimeout(function () { $(".launchConfront").attr("disabled", button) }, 180)
|
||||
}
|
||||
|
||||
/* ------------------ -------------------------- */
|
||||
_canDragStart(selector) {
|
||||
console.log("CAN DRAG START", selector, super._canDragStart(selector) )
|
||||
return true
|
||||
}
|
||||
_canDragDrop(selector) {
|
||||
console.log("CAN DRAG DROP", selector, super._canDragDrop(selector) )
|
||||
return true
|
||||
}
|
||||
|
||||
/* ------------------ -------------------------- */
|
||||
_onDragStart(event) {
|
||||
console.log("DRAGSTART::::", event)
|
||||
super._onDragStart(event)
|
||||
let dragType = $(event.srcElement).data("drag-type")
|
||||
let diceData = {}
|
||||
//console.log("DRAGTYPE", dragType)
|
||||
console.log("DRAGTYPE", dragType)
|
||||
if (dragType == "dice") {
|
||||
diceData = {
|
||||
dragType: "dice",
|
||||
@ -111,7 +123,7 @@ export class EcrymeConfrontDialog extends Dialog {
|
||||
let data = JSON.parse(dataJSON)
|
||||
if ( data.dragType == "dice") {
|
||||
let idx = Number(data.diceIndex)
|
||||
//console.log("DATA", data, event, event.srcElement.className)
|
||||
console.log("DATA", data, event, event.srcElement.className)
|
||||
if (event.srcElement.className.includes("execution") &&
|
||||
this.rollData.availableDices.filter(d => d.location == "execution").length < 2) {
|
||||
this.rollData.availableDices[idx].location = "execution"
|
||||
@ -151,9 +163,9 @@ export class EcrymeConfrontDialog extends Dialog {
|
||||
// Apply Transcend if needed
|
||||
if (this.rollData.skillTranscendence > 0) {
|
||||
if (this.rollData.applyTranscendence == "execution") {
|
||||
this.rollData.executionTotal += this.rollData.skillTranscendence
|
||||
this.rollData.executionTotal += Number(this.rollData.skillTranscendence)
|
||||
} else {
|
||||
this.rollData.preservationTotal += this.rollData.skillTranscendence
|
||||
this.rollData.preservationTotal += Number(this.rollData.skillTranscendence)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -180,7 +192,7 @@ export class EcrymeConfrontDialog extends Dialog {
|
||||
this.processTranscendence()
|
||||
|
||||
if (rollData.selectedSpecs && rollData.selectedSpecs.length > 0) {
|
||||
rollData.spec = duplicate(actor.getSpecialization(rollData.selectedSpecs[0]))
|
||||
rollData.spec = foundry.utils.duplicate(actor.getSpecialization(rollData.selectedSpecs[0]))
|
||||
rollData.specApplied = true
|
||||
rollData.executionTotal += 2
|
||||
rollData.preservationTotal += 2
|
||||
@ -200,19 +212,19 @@ export class EcrymeConfrontDialog extends Dialog {
|
||||
for (let id of rollData.traitsBonusSelected) {
|
||||
let trait = rollData.traitsBonus.find(t => t._id == id)
|
||||
trait.activated = true
|
||||
rollData.bonusMalusTraits += trait.system.level
|
||||
rollData.bonusMalusTraits += Number(trait.system.level)
|
||||
}
|
||||
}
|
||||
if (rollData.traitsMalusSelected && rollData.traitsMalusSelected.length > 0) {
|
||||
for (let id of rollData.traitsMalusSelected) {
|
||||
let trait = rollData.traitsMalus.find(t => t._id == id)
|
||||
trait.activated = true
|
||||
rollData.bonusMalusTraits -= trait.system.level
|
||||
rollData.bonusMalusTraits -= Number(trait.system.level)
|
||||
}
|
||||
}
|
||||
|
||||
rollData.executionTotal += rollData.bonusMalusTraits + rollData.bonusMalusPerso
|
||||
rollData.preservationTotal += rollData.bonusMalusTraits + rollData.bonusMalusPerso
|
||||
rollData.executionTotal += Number(rollData.bonusMalusTraits) + Number(rollData.bonusMalusPerso)
|
||||
rollData.preservationTotal += Number(rollData.bonusMalusTraits) + Number(rollData.bonusMalusPerso)
|
||||
|
||||
this.refreshDialog()
|
||||
}
|
||||
@ -222,7 +234,7 @@ export class EcrymeConfrontDialog extends Dialog {
|
||||
super.activateListeners(html);
|
||||
|
||||
html.find('#bonusMalusPerso').change((event) => {
|
||||
this.rollData.bonusMalusPerso = Number(event.currentTarget.value)
|
||||
this.rollData.bonusMalusPerso = event.currentTarget.value
|
||||
this.computeTotals()
|
||||
})
|
||||
html.find('#roll-specialization').change((event) => {
|
||||
@ -245,7 +257,9 @@ export class EcrymeConfrontDialog extends Dialog {
|
||||
this.rollData.applyTranscendence = $('#roll-apply-transcendence').val()
|
||||
this.computeTotals()
|
||||
})
|
||||
|
||||
html.find('#annency-bonus').change((event) => {
|
||||
this.rollData.annencyBonus = Number(event.currentTarget.value)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
@ -50,15 +50,15 @@ export class EcrymeConfrontStartDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
async rollConfront( diceFormula ) {
|
||||
// Do the initial roll
|
||||
let myRoll = new Roll(diceFormula).roll({async: false})
|
||||
let myRoll = await new Roll(diceFormula).roll()
|
||||
await EcrymeUtility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
// Fill the available dice table
|
||||
let rollData = this.rollData
|
||||
rollData.roll = duplicate(myRoll)
|
||||
rollData.roll = foundry.utils.duplicate(myRoll)
|
||||
rollData.availableDices = []
|
||||
for (let result of myRoll.terms[0].results) {
|
||||
if ( !result.discarded) {
|
||||
let resultDup = duplicate(result)
|
||||
let resultDup = foundry.utils.duplicate(result)
|
||||
resultDup.location = "mainpool"
|
||||
rollData.availableDices.push(resultDup)
|
||||
}
|
||||
|
@ -58,6 +58,7 @@ export class EcrymeRollDialog extends Dialog {
|
||||
$(function () { onLoad(); });
|
||||
|
||||
html.find('#bonusMalusPerso').change((event) => {
|
||||
console.log("DIFF", event.currentTarget.value)
|
||||
this.rollData.bonusMalusPerso = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#roll-difficulty').change((event) => {
|
||||
|
@ -59,6 +59,7 @@ Hooks.once("init", async function () {
|
||||
// Register sheet application classes
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("fvtt-ecryme", EcrymeActorSheet, { types: ["pc"], makeDefault: true });
|
||||
Actors.registerSheet("fvtt-ecryme", EcrymeActorSheet, { types: ["npc"], makeDefault: true });
|
||||
Actors.registerSheet("fvtt-ecryme", EcrymeAnnencySheet, { types: ["annency"], makeDefault: false });
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
@ -66,8 +67,7 @@ Hooks.once("init", async function () {
|
||||
|
||||
EcrymeUtility.init()
|
||||
|
||||
console.log("Babele INIT!")
|
||||
Babele.get().setSystemTranslationsDir("translated");
|
||||
Babele.get().setSystemTranslationsDir("translated")
|
||||
|
||||
});
|
||||
|
||||
@ -83,28 +83,13 @@ function welcomeMessage() {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register world usage statistics
|
||||
function registerUsageCount(registerKey) {
|
||||
if (game.user.isGM) {
|
||||
game.settings.register(registerKey, "world-key", {
|
||||
name: "Unique world key",
|
||||
scope: "world",
|
||||
config: false,
|
||||
default: "",
|
||||
type: String
|
||||
});
|
||||
|
||||
let worldKey = game.settings.get(registerKey, "world-key")
|
||||
if (worldKey == undefined || worldKey == "") {
|
||||
worldKey = randomID(32)
|
||||
game.settings.set(registerKey, "world-key", worldKey)
|
||||
}
|
||||
// Simple API counter
|
||||
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"`
|
||||
//$.ajaxSetup({
|
||||
//headers: { 'Access-Control-Allow-Origin': '*' }
|
||||
//})
|
||||
$.ajax(regURL)
|
||||
async function importDefaultScene() {
|
||||
let exists = game.scenes.find(j => j.name == "Landing page 1");
|
||||
if (!exists) {
|
||||
const scenes = await EcrymeUtility.loadCompendium("fvtt-ecryme.scenes")
|
||||
let newDocuments = scenes.filter(i => i.name == "Landing page 1");
|
||||
await game.scenes.documentClass.create(newDocuments);
|
||||
game.scenes.find(i => i.name == "Landing page 1").activate();
|
||||
}
|
||||
}
|
||||
|
||||
@ -113,6 +98,9 @@ function registerUsageCount(registerKey) {
|
||||
/* -------------------------------------------- */
|
||||
Hooks.once("ready", function () {
|
||||
|
||||
// Load trranslations
|
||||
Babele.get().setSystemTranslationsDir("translated")
|
||||
|
||||
// User warning
|
||||
if (!game.user.isGM && game.user.character == undefined) {
|
||||
ui.notifications.info("Attention ! Aucun personnage relié au joueur !");
|
||||
@ -122,10 +110,17 @@ Hooks.once("ready", function () {
|
||||
});
|
||||
}
|
||||
|
||||
registerUsageCount(game.system.id)
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter => {
|
||||
console.log("ClassCounter loaded", moduleCounter)
|
||||
moduleCounter.ClassCounter.registerUsageCount()
|
||||
}).catch(err =>
|
||||
console.log("No stats available, giving up.")
|
||||
)
|
||||
|
||||
welcomeMessage();
|
||||
EcrymeUtility.ready()
|
||||
EcrymeCharacterSummary.ready()
|
||||
EcrymeUtility.ready();
|
||||
EcrymeCharacterSummary.ready();
|
||||
importDefaultScene();
|
||||
|
||||
})
|
||||
|
||||
|
@ -8,7 +8,7 @@ export class EcrymeItemSheet extends ItemSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-ecryme", "sheet", "item"],
|
||||
template: "systems/fvtt-ecryme/templates/item-sheet.hbs",
|
||||
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
||||
@ -56,8 +56,8 @@ export class EcrymeItemSheet extends ItemSheet {
|
||||
name: this.object.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
system: duplicate(this.object.system),
|
||||
config: duplicate(game.system.ecryme.config),
|
||||
system: foundry.utils.duplicate(this.object.system),
|
||||
config: foundry.utils.duplicate(game.system.ecryme.config),
|
||||
limited: this.object.limited,
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
@ -89,7 +89,7 @@ export class EcrymeItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
postItem() {
|
||||
let chatData = duplicate(this.item)
|
||||
let chatData = foundry.utils.duplicate(this.item)
|
||||
if (this.actor) {
|
||||
chatData.actor = { id: this.actor.id };
|
||||
}
|
||||
|
BIN
packs/equipment/000171.ldb
Normal file
@ -1 +1 @@
|
||||
MANIFEST-000046
|
||||
MANIFEST-000176
|
||||
|
@ -1,7 +1,7 @@
|
||||
2023/08/08-14:38:49.036882 7f5afcdf86c0 Recovering log #44
|
||||
2023/08/08-14:38:49.124780 7f5afcdf86c0 Delete type=3 #42
|
||||
2023/08/08-14:38:49.124893 7f5afcdf86c0 Delete type=0 #44
|
||||
2023/08/08-14:54:21.588098 7f58677fe6c0 Level-0 table #49: started
|
||||
2023/08/08-14:54:21.588122 7f58677fe6c0 Level-0 table #49: 0 bytes OK
|
||||
2023/08/08-14:54:21.594444 7f58677fe6c0 Delete type=0 #47
|
||||
2023/08/08-14:54:21.607310 7f58677fe6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:28:43.689446 7f24c57fa6c0 Recovering log #174
|
||||
2025/03/11-22:28:43.742748 7f24c57fa6c0 Delete type=3 #172
|
||||
2025/03/11-22:28:43.742876 7f24c57fa6c0 Delete type=0 #174
|
||||
2025/03/11-22:29:05.490854 7f24c4bff6c0 Level-0 table #179: started
|
||||
2025/03/11-22:29:05.490876 7f24c4bff6c0 Level-0 table #179: 0 bytes OK
|
||||
2025/03/11-22:29:05.528875 7f24c4bff6c0 Delete type=0 #177
|
||||
2025/03/11-22:29:05.604302 7f24c4bff6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,7 +1,7 @@
|
||||
2023/08/08-14:36:00.338439 7f5867fff6c0 Recovering log #40
|
||||
2023/08/08-14:36:00.347950 7f5867fff6c0 Delete type=3 #38
|
||||
2023/08/08-14:36:00.348021 7f5867fff6c0 Delete type=0 #40
|
||||
2023/08/08-14:38:45.882749 7f58677fe6c0 Level-0 table #45: started
|
||||
2023/08/08-14:38:45.882812 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/08/08-14:38:45.920058 7f58677fe6c0 Delete type=0 #43
|
||||
2023/08/08-14:38:45.981054 7f58677fe6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:17:42.207103 7f24c5ffb6c0 Recovering log #169
|
||||
2025/03/11-22:17:42.229307 7f24c5ffb6c0 Delete type=3 #167
|
||||
2025/03/11-22:17:42.229364 7f24c5ffb6c0 Delete type=0 #169
|
||||
2025/03/11-22:28:37.828063 7f24c4bff6c0 Level-0 table #175: started
|
||||
2025/03/11-22:28:37.828090 7f24c4bff6c0 Level-0 table #175: 0 bytes OK
|
||||
2025/03/11-22:28:37.835412 7f24c4bff6c0 Delete type=0 #173
|
||||
2025/03/11-22:28:37.855865 7f24c4bff6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
|
||||
|
BIN
packs/equipment/MANIFEST-000176
Normal file
BIN
packs/help/000108.ldb
Normal file
1
packs/help/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000113
|
8
packs/help/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2025/03/11-22:28:43.904749 7f24c6ffd6c0 Recovering log #111
|
||||
2025/03/11-22:28:43.971386 7f24c6ffd6c0 Delete type=3 #109
|
||||
2025/03/11-22:28:43.971494 7f24c6ffd6c0 Delete type=0 #111
|
||||
2025/03/11-22:29:05.641249 7f24c4bff6c0 Level-0 table #116: started
|
||||
2025/03/11-22:29:05.641276 7f24c4bff6c0 Level-0 table #116: 0 bytes OK
|
||||
2025/03/11-22:29:05.674923 7f24c4bff6c0 Delete type=0 #114
|
||||
2025/03/11-22:29:05.723243 7f24c4bff6c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:29:05.762798 7f24c4bff6c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
|
8
packs/help/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2025/03/11-22:17:42.313432 7f24c57fa6c0 Recovering log #106
|
||||
2025/03/11-22:17:42.340002 7f24c57fa6c0 Delete type=3 #104
|
||||
2025/03/11-22:17:42.340070 7f24c57fa6c0 Delete type=0 #106
|
||||
2025/03/11-22:28:37.842072 7f24c4bff6c0 Level-0 table #112: started
|
||||
2025/03/11-22:28:37.842115 7f24c4bff6c0 Level-0 table #112: 0 bytes OK
|
||||
2025/03/11-22:28:37.848681 7f24c4bff6c0 Delete type=0 #110
|
||||
2025/03/11-22:28:37.855911 7f24c4bff6c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:28:37.855943 7f24c4bff6c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
|
BIN
packs/help/MANIFEST-000113
Normal file
BIN
packs/maneuvers/000171.ldb
Normal file
@ -1 +1 @@
|
||||
MANIFEST-000046
|
||||
MANIFEST-000176
|
||||
|
@ -1,7 +1,7 @@
|
||||
2023/08/08-14:38:49.155473 7f5867fff6c0 Recovering log #44
|
||||
2023/08/08-14:38:49.260893 7f5867fff6c0 Delete type=3 #42
|
||||
2023/08/08-14:38:49.260950 7f5867fff6c0 Delete type=0 #44
|
||||
2023/08/08-14:54:21.600756 7f58677fe6c0 Level-0 table #49: started
|
||||
2023/08/08-14:54:21.600776 7f58677fe6c0 Level-0 table #49: 0 bytes OK
|
||||
2023/08/08-14:54:21.607211 7f58677fe6c0 Delete type=0 #47
|
||||
2023/08/08-14:54:21.607330 7f58677fe6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:28:43.852356 7f24c67fc6c0 Recovering log #174
|
||||
2025/03/11-22:28:43.902310 7f24c67fc6c0 Delete type=3 #172
|
||||
2025/03/11-22:28:43.902433 7f24c67fc6c0 Delete type=0 #174
|
||||
2025/03/11-22:29:05.604411 7f24c4bff6c0 Level-0 table #179: started
|
||||
2025/03/11-22:29:05.604444 7f24c4bff6c0 Level-0 table #179: 0 bytes OK
|
||||
2025/03/11-22:29:05.641128 7f24c4bff6c0 Delete type=0 #177
|
||||
2025/03/11-22:29:05.723220 7f24c4bff6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,7 +1,7 @@
|
||||
2023/08/08-14:36:00.351163 7f5867fff6c0 Recovering log #40
|
||||
2023/08/08-14:36:00.363535 7f5867fff6c0 Delete type=3 #38
|
||||
2023/08/08-14:36:00.363690 7f5867fff6c0 Delete type=0 #40
|
||||
2023/08/08-14:38:46.072007 7f58677fe6c0 Level-0 table #45: started
|
||||
2023/08/08-14:38:46.072050 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/08/08-14:38:46.103317 7f58677fe6c0 Delete type=0 #43
|
||||
2023/08/08-14:38:46.137931 7f58677fe6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:17:42.287558 7f24c6ffd6c0 Recovering log #169
|
||||
2025/03/11-22:17:42.309970 7f24c6ffd6c0 Delete type=3 #167
|
||||
2025/03/11-22:17:42.310079 7f24c6ffd6c0 Delete type=0 #169
|
||||
2025/03/11-22:28:37.821422 7f24c4bff6c0 Level-0 table #175: started
|
||||
2025/03/11-22:28:37.821461 7f24c4bff6c0 Level-0 table #175: 0 bytes OK
|
||||
2025/03/11-22:28:37.827638 7f24c4bff6c0 Delete type=0 #173
|
||||
2025/03/11-22:28:37.827871 7f24c4bff6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
|
||||
|
BIN
packs/maneuvers/MANIFEST-000176
Normal file
BIN
packs/scenes/000055.ldb
Normal file
0
packs/scenes/000062.log
Normal file
1
packs/scenes/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000060
|
0
packs/scenes/LOCK
Normal file
8
packs/scenes/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2025/03/11-22:28:43.794986 7f24c6ffd6c0 Recovering log #58
|
||||
2025/03/11-22:28:43.848806 7f24c6ffd6c0 Delete type=3 #56
|
||||
2025/03/11-22:28:43.848927 7f24c6ffd6c0 Delete type=0 #58
|
||||
2025/03/11-22:29:05.569282 7f24c4bff6c0 Level-0 table #63: started
|
||||
2025/03/11-22:29:05.569313 7f24c4bff6c0 Level-0 table #63: 0 bytes OK
|
||||
2025/03/11-22:29:05.604065 7f24c4bff6c0 Delete type=0 #61
|
||||
2025/03/11-22:29:05.604324 7f24c4bff6c0 Manual compaction at level-0 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:29:05.675098 7f24c4bff6c0 Manual compaction at level-1 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)
|
8
packs/scenes/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2025/03/11-22:17:42.261222 7f24c57fa6c0 Recovering log #53
|
||||
2025/03/11-22:17:42.284333 7f24c57fa6c0 Delete type=3 #51
|
||||
2025/03/11-22:17:42.284459 7f24c57fa6c0 Delete type=0 #53
|
||||
2025/03/11-22:28:37.807470 7f24c4bff6c0 Level-0 table #59: started
|
||||
2025/03/11-22:28:37.807537 7f24c4bff6c0 Level-0 table #59: 0 bytes OK
|
||||
2025/03/11-22:28:37.814273 7f24c4bff6c0 Delete type=0 #57
|
||||
2025/03/11-22:28:37.827846 7f24c4bff6c0 Manual compaction at level-0 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:28:37.828046 7f24c4bff6c0 Manual compaction at level-1 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)
|
BIN
packs/scenes/MANIFEST-000060
Normal file
BIN
packs/specialisation/000171.ldb
Normal file
0
packs/specialisation/000178.log
Normal file
@ -1 +1 @@
|
||||
MANIFEST-000046
|
||||
MANIFEST-000176
|
||||
|
@ -1,7 +1,7 @@
|
||||
2023/08/08-14:38:49.036954 7f5867fff6c0 Recovering log #44
|
||||
2023/08/08-14:38:49.153034 7f5867fff6c0 Delete type=3 #42
|
||||
2023/08/08-14:38:49.153108 7f5867fff6c0 Delete type=0 #44
|
||||
2023/08/08-14:54:21.558302 7f58677fe6c0 Level-0 table #49: started
|
||||
2023/08/08-14:54:21.558341 7f58677fe6c0 Level-0 table #49: 0 bytes OK
|
||||
2023/08/08-14:54:21.572779 7f58677fe6c0 Delete type=0 #47
|
||||
2023/08/08-14:54:21.573011 7f58677fe6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:28:43.632057 7f24c5ffb6c0 Recovering log #174
|
||||
2025/03/11-22:28:43.687014 7f24c5ffb6c0 Delete type=3 #172
|
||||
2025/03/11-22:28:43.687139 7f24c5ffb6c0 Delete type=0 #174
|
||||
2025/03/11-22:29:05.529067 7f24c4bff6c0 Level-0 table #179: started
|
||||
2025/03/11-22:29:05.529094 7f24c4bff6c0 Level-0 table #179: 0 bytes OK
|
||||
2025/03/11-22:29:05.569107 7f24c4bff6c0 Delete type=0 #177
|
||||
2025/03/11-22:29:05.604312 7f24c4bff6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,7 +1,7 @@
|
||||
2023/08/08-14:36:00.338438 7f5afd5f96c0 Recovering log #40
|
||||
2023/08/08-14:36:00.347864 7f5afd5f96c0 Delete type=3 #38
|
||||
2023/08/08-14:36:00.347905 7f5afd5f96c0 Delete type=0 #40
|
||||
2023/08/08-14:38:46.031269 7f58677fe6c0 Level-0 table #45: started
|
||||
2023/08/08-14:38:46.031315 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/08/08-14:38:46.071808 7f58677fe6c0 Delete type=0 #43
|
||||
2023/08/08-14:38:46.137889 7f58677fe6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:17:42.183744 7f24c67fc6c0 Recovering log #169
|
||||
2025/03/11-22:17:42.204063 7f24c67fc6c0 Delete type=3 #167
|
||||
2025/03/11-22:17:42.204124 7f24c67fc6c0 Delete type=0 #169
|
||||
2025/03/11-22:28:37.801121 7f24c4bff6c0 Level-0 table #175: started
|
||||
2025/03/11-22:28:37.801173 7f24c4bff6c0 Level-0 table #175: 0 bytes OK
|
||||
2025/03/11-22:28:37.807280 7f24c4bff6c0 Delete type=0 #173
|
||||
2025/03/11-22:28:37.827819 7f24c4bff6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
|
||||
|
BIN
packs/specialisation/MANIFEST-000176
Normal file
BIN
packs/traits/000171.ldb
Normal file
0
packs/traits/000178.log
Normal file
@ -1 +1 @@
|
||||
MANIFEST-000046
|
||||
MANIFEST-000176
|
||||
|
@ -1,7 +1,7 @@
|
||||
2023/08/08-14:38:49.127661 7f5afcdf86c0 Recovering log #44
|
||||
2023/08/08-14:38:49.237408 7f5afcdf86c0 Delete type=3 #42
|
||||
2023/08/08-14:38:49.237452 7f5afcdf86c0 Delete type=0 #44
|
||||
2023/08/08-14:54:21.594546 7f58677fe6c0 Level-0 table #49: started
|
||||
2023/08/08-14:54:21.594573 7f58677fe6c0 Level-0 table #49: 0 bytes OK
|
||||
2023/08/08-14:54:21.600659 7f58677fe6c0 Delete type=0 #47
|
||||
2023/08/08-14:54:21.607322 7f58677fe6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:28:43.745519 7f24c67fc6c0 Recovering log #174
|
||||
2025/03/11-22:28:43.792356 7f24c67fc6c0 Delete type=3 #172
|
||||
2025/03/11-22:28:43.792465 7f24c67fc6c0 Delete type=0 #174
|
||||
2025/03/11-22:29:05.462231 7f24c4bff6c0 Level-0 table #179: started
|
||||
2025/03/11-22:29:05.462271 7f24c4bff6c0 Level-0 table #179: 0 bytes OK
|
||||
2025/03/11-22:29:05.490724 7f24c4bff6c0 Delete type=0 #177
|
||||
2025/03/11-22:29:05.604286 7f24c4bff6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,7 +1,7 @@
|
||||
2023/08/08-14:36:00.351163 7f5afd5f96c0 Recovering log #40
|
||||
2023/08/08-14:36:00.360537 7f5afd5f96c0 Delete type=3 #38
|
||||
2023/08/08-14:36:00.360576 7f5afd5f96c0 Delete type=0 #40
|
||||
2023/08/08-14:38:46.103419 7f58677fe6c0 Level-0 table #45: started
|
||||
2023/08/08-14:38:46.103439 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/08/08-14:38:46.137624 7f58677fe6c0 Delete type=0 #43
|
||||
2023/08/08-14:38:46.137971 7f58677fe6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
|
||||
2025/03/11-22:17:42.232923 7f24c6ffd6c0 Recovering log #169
|
||||
2025/03/11-22:17:42.257730 7f24c6ffd6c0 Delete type=3 #167
|
||||
2025/03/11-22:17:42.257832 7f24c6ffd6c0 Delete type=0 #169
|
||||
2025/03/11-22:28:37.814417 7f24c4bff6c0 Level-0 table #175: started
|
||||
2025/03/11-22:28:37.814450 7f24c4bff6c0 Level-0 table #175: 0 bytes OK
|
||||
2025/03/11-22:28:37.821238 7f24c4bff6c0 Delete type=0 #173
|
||||
2025/03/11-22:28:37.827860 7f24c4bff6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
|
||||
|
BIN
packs/traits/MANIFEST-000176
Normal file
@ -1265,6 +1265,7 @@ ul, li {
|
||||
min-width: 12rem;
|
||||
}
|
||||
.item-name-label-short {
|
||||
margin-top: 4px;
|
||||
flex-grow:1;
|
||||
max-width: 4rem;
|
||||
min-width: 4rem;
|
||||
@ -1275,6 +1276,16 @@ ul, li {
|
||||
max-width: 6rem;
|
||||
min-width: 6rem;
|
||||
}
|
||||
.item-name-label-medium2 {
|
||||
margin-top: 4px;
|
||||
flex-grow:0;
|
||||
max-width: 10rem;
|
||||
min-width: 10rem;
|
||||
}
|
||||
.item-name-label-free {
|
||||
margin-top: 4px;
|
||||
align-self: flex-start;
|
||||
}
|
||||
.item-name-label-long2 {
|
||||
margin-top: 4px;
|
||||
flex-grow:2;
|
||||
@ -1287,10 +1298,17 @@ ul, li {
|
||||
min-width: 9rem;
|
||||
}
|
||||
.item-field-label-short {
|
||||
margin-top: 4px;
|
||||
flex-grow:1;
|
||||
max-width: 4rem;
|
||||
min-width: 4rem;
|
||||
}
|
||||
.item-field-label-short-header {
|
||||
margin-top: 4px;
|
||||
flex-grow:1;
|
||||
max-width: 2.2rem;
|
||||
min-width: 2.2rem;
|
||||
}
|
||||
.item-field-label-medium {
|
||||
flex-grow:1;
|
||||
max-width: 6rem;
|
||||
@ -1321,12 +1339,21 @@ ul, li {
|
||||
min-width:2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
.item-controls-fixed-full {
|
||||
min-width:3rem;
|
||||
max-width: 3rem;
|
||||
}
|
||||
.attribute-label {
|
||||
font-weight: bold;
|
||||
}
|
||||
.flexrow-no-expand {
|
||||
flex-grow: 0;
|
||||
}
|
||||
.flexrow-start {
|
||||
justify-content: flex-start;
|
||||
align-content: flex-start;
|
||||
align-self: flex-start;
|
||||
}
|
||||
.item-input-small {
|
||||
max-width: 16px;
|
||||
max-height: 12px;
|
||||
|
@ -1245,6 +1245,7 @@ ul, li {
|
||||
min-width: 12rem;
|
||||
}
|
||||
.item-name-label-short {
|
||||
margin-top: 4px;
|
||||
flex-grow:1;
|
||||
max-width: 4rem;
|
||||
min-width: 4rem;
|
||||
@ -1255,6 +1256,16 @@ ul, li {
|
||||
max-width: 6rem;
|
||||
min-width: 6rem;
|
||||
}
|
||||
.item-name-label-medium2 {
|
||||
margin-top: 4px;
|
||||
flex-grow:0;
|
||||
max-width: 10rem;
|
||||
min-width: 10rem;
|
||||
}
|
||||
.item-name-label-free {
|
||||
margin-top: 4px;
|
||||
align-self: flex-start;
|
||||
}
|
||||
.item-name-label-long2 {
|
||||
margin-top: 4px;
|
||||
flex-grow:2;
|
||||
@ -1267,10 +1278,17 @@ ul, li {
|
||||
min-width: 9rem;
|
||||
}
|
||||
.item-field-label-short {
|
||||
margin-top: 4px;
|
||||
flex-grow:1;
|
||||
max-width: 4rem;
|
||||
min-width: 4rem;
|
||||
}
|
||||
.item-field-label-short-header {
|
||||
margin-top: 4px;
|
||||
flex-grow:1;
|
||||
max-width: 2.2rem;
|
||||
min-width: 2.2rem;
|
||||
}
|
||||
.item-field-label-medium {
|
||||
flex-grow:1;
|
||||
max-width: 6rem;
|
||||
@ -1301,12 +1319,21 @@ ul, li {
|
||||
min-width:2rem;
|
||||
max-width: 2rem;
|
||||
}
|
||||
.item-controls-fixed-full {
|
||||
min-width:3rem;
|
||||
max-width: 3rem;
|
||||
}
|
||||
.attribute-label {
|
||||
font-weight: bold;
|
||||
}
|
||||
.flexrow-no-expand {
|
||||
flex-grow: 0;
|
||||
}
|
||||
.flexrow-start {
|
||||
justify-content: flex-start;
|
||||
align-content: flex-start;
|
||||
align-self: flex-start;
|
||||
}
|
||||
.item-input-small {
|
||||
max-width: 16px;
|
||||
max-height: 12px;
|
||||
|
51
system.json
@ -3,8 +3,10 @@
|
||||
"esmodules": [
|
||||
"modules/ecryme-main.js"
|
||||
],
|
||||
"gridDistance": 1,
|
||||
"gridUnits": "m",
|
||||
"grid": {
|
||||
"distance": 2,
|
||||
"units": "m"
|
||||
},
|
||||
"languages": [
|
||||
{
|
||||
"lang": "fr",
|
||||
@ -62,6 +64,18 @@
|
||||
"ASSISTANT": "OWNER"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Scenes",
|
||||
"type": "Scene",
|
||||
"name": "scenes",
|
||||
"path": "packs/scenes",
|
||||
"system": "fvtt-ecryme",
|
||||
"flags": {},
|
||||
"ownership": {
|
||||
"PLAYER": "OBSERVER",
|
||||
"ASSISTANT": "OWNER"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Maneuvers",
|
||||
"type": "Item",
|
||||
@ -73,13 +87,25 @@
|
||||
"PLAYER": "OBSERVER",
|
||||
"ASSISTANT": "OWNER"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Help/Aides",
|
||||
"type": "JournalEntry",
|
||||
"name": "help",
|
||||
"path": "packs/help",
|
||||
"system": "fvtt-ecryme",
|
||||
"flags": {},
|
||||
"ownership": {
|
||||
"PLAYER": "OBSERVER",
|
||||
"ASSISTANT": "OWNER"
|
||||
}
|
||||
}
|
||||
],
|
||||
"license": "LICENSE.txt",
|
||||
"manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/raw/branch/master/system.json",
|
||||
"manifest": "https://www.uberwald.me/gitea/public/fvtt-ecryme/raw/branch/master/system.json",
|
||||
"compatibility": {
|
||||
"minimum": "10",
|
||||
"verified": "11"
|
||||
"minimum": "12",
|
||||
"verified": "12"
|
||||
},
|
||||
"id": "fvtt-ecryme",
|
||||
"primaryTokenAttribute": "secondary.health",
|
||||
@ -88,9 +114,18 @@
|
||||
"styles": [
|
||||
"styles/ecryme.css"
|
||||
],
|
||||
"relationships": {
|
||||
"requires": [
|
||||
{
|
||||
"id": "babele",
|
||||
"type": "module",
|
||||
"compatibility": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
"title": "Ecryme, le Jeu de Rôles",
|
||||
"url": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme",
|
||||
"version": "11.0.16",
|
||||
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/archive/fvtt-ecryme-v11.0.16.zip",
|
||||
"url": "https://www.uberwald.me/gitea/public/fvtt-ecryme",
|
||||
"version": "12.0.2",
|
||||
"download": "https://www.uberwald.me/gitea/public/fvtt-ecryme/archive/fvtt-ecryme-v12.0.2.zip",
|
||||
"background": "systems/fvtt-ecryme/images/assets/ecryme_extract_panel_01.webp"
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"Actor": {
|
||||
"types": [
|
||||
"pc","annency"
|
||||
"pc","annency", "npc"
|
||||
],
|
||||
"templates": {
|
||||
"biodata": {
|
||||
@ -24,9 +24,11 @@
|
||||
},
|
||||
"core": {
|
||||
"subactors": [],
|
||||
"equipmentfree": "",
|
||||
"skills": {
|
||||
"physical": {
|
||||
"name": "ECRY.ui.physical",
|
||||
"pnjvalue": 0,
|
||||
"skilllist": {
|
||||
"athletics": {
|
||||
"name": "ECRY.ui.athletics",
|
||||
@ -57,6 +59,7 @@
|
||||
},
|
||||
"mental": {
|
||||
"name": "ECRY.ui.mental",
|
||||
"pnjvalue": 0,
|
||||
"skilllist": {
|
||||
"anthropomecanology": {
|
||||
"name": "ECRY.ui.anthropomecanology",
|
||||
@ -87,6 +90,7 @@
|
||||
},
|
||||
"social": {
|
||||
"name": "ECRY.ui.social",
|
||||
"pnjvalue": 0,
|
||||
"skilllist": {
|
||||
"quibbling": {
|
||||
"name": "ECRY.ui.quibbling",
|
||||
@ -196,6 +200,12 @@
|
||||
"annency"
|
||||
]
|
||||
},
|
||||
"npc": {
|
||||
"templates": [
|
||||
"biodata",
|
||||
"core"
|
||||
]
|
||||
},
|
||||
"pc": {
|
||||
"templates": [
|
||||
"biodata",
|
||||
@ -260,6 +270,7 @@
|
||||
"effect": 0
|
||||
},
|
||||
"specialization": {
|
||||
"bonus": 2,
|
||||
"templates": [
|
||||
"common"
|
||||
],
|
||||
|
@ -15,27 +15,40 @@
|
||||
<div class="flexrow">
|
||||
<ul>
|
||||
<li class="flexrow item" data-item-id="{{spleen.id}}">
|
||||
<label class="item-name-label-medium">Spleen :</label>
|
||||
<label class="item-field-label-short">Spleen :</label>
|
||||
<label class="item-name-label-long">{{spleen.name}}</label>
|
||||
<div class="item-filler"> </div>
|
||||
{{#if spleen}}
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<div class="item-controls item-controls-fixed-full">
|
||||
<a class="item-control item-add" data-type="trait" title="Create Trait"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
<a class="item-control item-edit" data-type="trait" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control item-add" data-type="trait" title="Delete Item"><i class="fas fa-plus"></i></a>
|
||||
<a class="item-control item-add" data-type="trait" title="Delete Item"><i
|
||||
class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
{{/if}}
|
||||
</li>
|
||||
<li class="item flexrow" data-item-id="{{ideal.id}}">
|
||||
<label class="item-name-label-medium">Ideal :</label>
|
||||
<label class="item-field-label-short">Ideal :</label>
|
||||
<label class="item-name-label-long">{{ideal.name}}</label>
|
||||
<div class="item-filler"> </div>
|
||||
{{#if ideal}}
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<div class="item-controls item-controls-fixed-full">
|
||||
<a class="item-control item-add" data-type="trait" title="Create Trait"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
<a class="item-control item-edit" data-type="trait" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control item-add" data-type="trait" title="Delete Item"><i class="fas fa-plus"></i></a>
|
||||
<a class="item-control item-add" data-type="trait" title="Delete Item"><i
|
||||
class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
{{/if}}
|
||||
</li>
|
||||
<li class="item flexrow flexrow-no-expand flexrow-start ">
|
||||
<label class="item-name-label-short">Traits :</label>
|
||||
{{#each traits as |trait key|}}
|
||||
<label class="item-name-label-free"><a data-item-id="{{trait._id}}" class="item-edit">{{trait.name}}</a>, </label>
|
||||
{{/each}}
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@ -72,10 +85,29 @@
|
||||
<ul class="stat-list alternate-list item-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header impact-title">
|
||||
<h3><label class="items-title-text">{{localize category.name}} ({{valueAtIndex @root.impactsMalus
|
||||
categkey}})</label></h3>
|
||||
<h3>
|
||||
|
||||
{{#if (eq @root.type "npc")}}
|
||||
<a class="roll-skill-confront" data-category-key="{{categkey}}" data-skill-key="rawnpc">
|
||||
<i class="fa-regular fa-swords"></i>
|
||||
</a>
|
||||
<a class="roll-skill" data-category-key="{{categkey}}" data-skill-key="rawnpc">
|
||||
<i class="fa-solid fa-dice-d6"></i>
|
||||
{{/if}}
|
||||
<label class="items-title-text">{{localize category.name}} ({{valueAtIndex @root.impactsMalus
|
||||
categkey}})</label>
|
||||
{{#if (eq @root.type "npc")}}
|
||||
</a>
|
||||
<select class="item-field-label-short-header" type="text"
|
||||
name="system.skills.{{categkey}}.pnjvalue" value="{{category.pnjvalue}}"
|
||||
data-dtype="Number">
|
||||
{{selectOptions @root.config.skillLevel selected=category.pnjvalue}}
|
||||
</select>
|
||||
{{/if}}
|
||||
</h3>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
{{#each category.skilllist as |skill skillkey|}}
|
||||
<li class="item flexrow list-item">
|
||||
<span class="item-name-label-long">
|
||||
@ -89,26 +121,23 @@
|
||||
<select class="item-field-label-short" type="text"
|
||||
name="system.skills.{{categkey}}.skilllist.{{skillkey}}.value" value="{{skill.value}}"
|
||||
data-dtype="Number">
|
||||
{{#select skill.value}}
|
||||
{{#each @root.config.skillLevel as |level key| }}
|
||||
<option value="{{level}}">{{level}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
{{selectOptions @root.config.skillLevel selected=skill.value}}
|
||||
</select>
|
||||
</li>
|
||||
<li class="item flexrow list-item">
|
||||
<ul class="ul-level1">
|
||||
{{#each skill.spec as |spec idx|}}
|
||||
<li class="item flexrow list-item" data-item-id="{{spec._id}}" data-item-type="specialization">
|
||||
<a class="roll-spec" data-spec-id="{{spec._id}}">
|
||||
<a class="roll-spec" data-category-key="{{categkey}}" data-skill-key="{{skillkey}}"
|
||||
data-spec-id="{{spec._id}}">
|
||||
<i class="fa-solid fa-dice-d6"></i>
|
||||
{{spec.name}}
|
||||
</a>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-edit" data-type="specialization" title="Edit Item"><i
|
||||
class="fas fa-edit"></i></a>
|
||||
<a class="item-control item-add" data-type="specialization" title="Delete Item"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
<a class="item-control item-delete" data-type="specialization" title="Delete Item"><i
|
||||
class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
@ -141,11 +170,7 @@
|
||||
</a></span>
|
||||
<select class="item-field-label-short" type="text" name="system.cephaly.skilllist.{{skillkey}}.value"
|
||||
value="{{skill.value}}" data-dtype="Number">
|
||||
{{#select skill.value}}
|
||||
{{#each @root.config.skillLevel as |level key| }}
|
||||
<option value="{{level}}">{{level}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
{{selectOptions @root.config.skillLevel selected=skill.value}}
|
||||
</select>
|
||||
</li>
|
||||
{{/each}}
|
||||
@ -155,7 +180,8 @@
|
||||
|
||||
<div>
|
||||
{{#if annency}}
|
||||
<h3>{{localize "ECRY.ui.annency"}} : <a class="open-annency" data-annency-id="{{annency.id}}">{{annency.name}}<i class="fas fa-edit"></i></a></h3>
|
||||
<h3>{{localize "ECRY.ui.annency"}} : <a class="open-annency"
|
||||
data-annency-id="{{annency.id}}">{{annency.name}}<i class="fas fa-edit"></i></a></h3>
|
||||
<ul class="stat-list alternate-list item-list">
|
||||
<li class="item flexrow list-item">
|
||||
<span class="item-name-label-long">
|
||||
@ -273,57 +299,22 @@
|
||||
|
||||
|
||||
{{!-- Equipement Tab --}}
|
||||
<div class="tab equipment" data-group="primary" data-tab="equipment">
|
||||
<div class="tab equipements" data-group="primary" data-tab="equipements">
|
||||
|
||||
<span class="item-name-label-header items-title-bg">
|
||||
<h3><label class="items-title-text">Equipements (saisie libre)</label></h3>
|
||||
<h3><label class="items-title-text">{{localize "ECRY.ui.equipmentfree"}}</label></h3>
|
||||
</span>
|
||||
<div class="form-group small-editor">
|
||||
{{editor equipementlibre target="system.equipementlibre" button=true owner=owner editable=editable}}
|
||||
{{editor equipementlibre target="system.equipmentfree" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Armes</label></h3>
|
||||
<h3><label class="items-title-text">{{localize "ECRY.ui.equipment"}}s</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="item-field-label-medium">Normaux</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="item-field-label-medium">Particulier</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="item-field-label-medium">Critique</label>
|
||||
</span>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-add" data-type="weapon" title="Create Item"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each armes as |arme key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{arme._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{arme.img}}" /></a>
|
||||
<span class="item-name-label">{{arme.name}}</span>
|
||||
<span class="item-field-label-medium"><label>{{arme.system.dommagenormale}}</label></span>
|
||||
<span class="item-field-label-medium"><label>{{arme.system.dommagepart}}</label></span>
|
||||
<span class="item-field-label-medium"><label>{{arme.system.dommagecritique}}</label></span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Equipements (Items)</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Q.</label>
|
||||
<label class="item-field-label-medium">{{localize "ECRY.ui.weight"}}</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
@ -331,11 +322,12 @@
|
||||
</div>
|
||||
|
||||
</li>
|
||||
{{#each equipements as |equip key|}}
|
||||
{{#each equipments as |equip key|}}
|
||||
<li class="item list-item flexrow list-item-shadow" data-item-id="{{equip._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{equip.img}}" /></a>
|
||||
<span class="item-name-label">{{equip.name}}</span>
|
||||
<span class="item-field-label-medium">{{equip.system.weight}}</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
@ -345,36 +337,6 @@
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Sortilèges</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Seuil</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-add" data-type="equipment" title="Create Item"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
|
||||
</li>
|
||||
{{#each sorts as |sort key|}}
|
||||
<li class="item list-item flexrow list-item-shadow" data-item-id="{{sort._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{sort.img}}" /></a>
|
||||
<span class="item-name-label">{{sort.name}}</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">{{sort.system.seuil}}</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
</div>
|
||||
@ -386,7 +348,7 @@
|
||||
<div>
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow">
|
||||
<label class="item-name-label-medium">Lieu de naissance</label>
|
||||
<label class="item-name-label-medium">{{localize "ECRY.ui.bornplace"}}</label>
|
||||
<input type="text" class="" name="system.biodata.lieunaissance" value="{{system.biodata.lieunaissance}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
@ -395,22 +357,27 @@
|
||||
<input type="text" class="" name="system.biodata.age" value="{{system.biodata.age}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-name-label-medium">Profession</label>
|
||||
<input type="text" class="" name="system.biodata.profession" value="{{system.biodata.profession}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<ul>
|
||||
<li class="item flexrow">
|
||||
<label class="item-name-label-medium">Résidence</label>
|
||||
<label class="item-name-label-medium">{{localize "ECRY.ui.residence"}}</label>
|
||||
<input type="text" class="" name="system.biodata.residence" value="{{system.biodata.residence}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-name-label-medium">Nationalité</label>
|
||||
<label class="item-name-label-medium">{{localize "ECRY.ui.origin"}}</label>
|
||||
<input type="text" class="" name="system.biodata.nationalite" value="{{system.biodata.nationalite}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-name-label-medium">Enfance</label>
|
||||
<label class="item-name-label-medium">{{localize "ECRY.ui.childhood"}}</label>
|
||||
<input type="text" class="" name="system.biodata.enfance" value="{{system.biodata.enfance}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
|
@ -16,14 +16,21 @@
|
||||
<div>
|
||||
<ul>
|
||||
<li>{{localize "ECRY.ui.cephaly"}} : {{localize skill.name}}</li>
|
||||
|
||||
{{#if annency}}
|
||||
<li>{{localize "ECRY.ui.annencybonus"}} {{annency.name}}: {{annencyBonus}}</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if (gt marginExecution 0)}}
|
||||
<li>{{localize "ECRY.ui.execution"}} {{executionTotal}} vs {{difficulty}} : {{marginExecution}}</li>
|
||||
<li>{{localize cephalySuccess}}</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if (gt marginPreservation 0)}}
|
||||
<li>{{localize "ECRY.ui.preservation"}} {{preservationTotal}} vs {{difficulty}} : {{marginPreservation}}</li>
|
||||
<li>{{localize cephalyFailure}}</li>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
<li>{{localize skill.name}}: {{skill.value}} </li>
|
||||
{{#if spec}}
|
||||
<li>{{localize "ECRY.chat.specialization"}} {{spec.name}} (+2) </li>
|
||||
<li>{{localize "ECRY.chat.specialization"}} {{spec.name}} (+{{spec.system.bonus}}) </li>
|
||||
{{/if}}
|
||||
|
||||
{{#each traitsBonus as |trait idx|}}
|
||||
@ -40,7 +40,14 @@
|
||||
<li>{{localize "ECRY.chat.bonusmalustraits"}}: {{bonusMalusTraits}} </li>
|
||||
{{/if}}
|
||||
|
||||
{{#if (isGM)}}
|
||||
{{else}}
|
||||
<li>{{localize "ECRY.ui.execution"}} : {{executionTotal}}</li>
|
||||
<li>{{localize "ECRY.ui.preservation"}} : {{preservationTotal}}</li>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
|
||||
{{#if (isGM)}}
|
||||
{{#if (eq mode "cephaly")}}
|
||||
<div>
|
||||
@ -55,6 +62,10 @@
|
||||
{{else}}
|
||||
<button class="button-select-confront">{{localize "ECRY.ui.selectconfront"}}</button>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div>
|
||||
{{localize "ECRY.chat.sentogm"}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
{{#if skill}}
|
||||
<li>{{localize skill.name}}: {{skill.value}} </li>
|
||||
{{#if spec}}
|
||||
<li>{{localize "ECRY.chat.specialization"}} {{spec.name}} (+2) </li>
|
||||
<li>{{localize "ECRY.chat.specialization"}} {{spec.name}} (+{{spec.system.bonus}}) </li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
|
@ -55,20 +55,13 @@
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{localize "ECRY.ui.skilltranscendence"}} : </span>
|
||||
<select class="" id="roll-select-transcendence" data-type="Number">
|
||||
{{#select skillTranscendence}}
|
||||
{{#for 0 skill.value 1}}
|
||||
<option value="{{this}}">{{this}}</option>
|
||||
{{/for}}
|
||||
{{/select}}
|
||||
{{selectOptions config.skillLevel selected=skillTranscendence}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{localize "ECRY.ui.transcendapply"}} : </span>
|
||||
<select class="" id="roll-apply-transcendence" data-type="String">
|
||||
{{#select applyTranscendence}}
|
||||
<option value="execution">{{localize "ECRY.ui.execution"}}</option>
|
||||
<option value="preservation">{{localize "ECRY.ui.preservation"}}</option>
|
||||
{{/select}}
|
||||
{{selectOptions config.transcendanceOptions selected=applyTranscendence localize=true}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@ -100,19 +93,29 @@
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#if annency}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{localize "ECRY.ui.annency"}} : {{annency.name}}</span>
|
||||
<span class="roll-dialog-label">{{annency.system.base.description}}</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{localize "ECRY.ui.annencybonus"}}</span>
|
||||
<select class="" id="annency-bonus" name="annencyBonus" data-type="String">
|
||||
<option value="0">0</option>
|
||||
<option value="1">+1</option>
|
||||
<option value="2">+2</option>
|
||||
<option value="3">+3</option>
|
||||
<option value="4">+4</option>
|
||||
<option value="5">+5</option>
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Bonus/Malus : </span>
|
||||
<select id="bonusMalusPerso" name="bonusMalusPerso">
|
||||
{{#select bonusMalusPerso}}
|
||||
<option value="-3">-3</option>
|
||||
<option value="-2">-2</option>
|
||||
<option value="-1">-1</option>
|
||||
<option value="0">0</option>
|
||||
<option value="1">+1</option>
|
||||
<option value="2">+2</option>
|
||||
<option value="3">+3</option>
|
||||
{{/select}}
|
||||
<select id="bonusMalusPerso" name="bonusMalusPerso" type="text" data-dtype="String">
|
||||
{{selectOptions config.bonusMalusPersoOptions selected=bonusMalusPerso labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
@ -14,22 +14,25 @@
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{localize "ECRY.ui.skilltranscendence"}} : </span>
|
||||
<select class="" id="roll-select-transcendence" data-type="Number">
|
||||
{{#select skillTranscendence}}
|
||||
{{#for 0 skill.value 1}}
|
||||
<option value="{{this}}">{{this}}</option>
|
||||
{{/for}}
|
||||
{{/select}}
|
||||
{{selectOptions config.skillLevel selected=skillTranscendence}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#if forcedSpec}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{localize "ECRY.ui.spec"}} : </span>
|
||||
<span class="roll-dialog-label">{{forcedSpec.name}} (+{{forcedSpec.system.bonus}})</span>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{localize "ECRY.ui.spec"}} : </span>
|
||||
<select class="" id="roll-specialization" data-type="String" multiple>
|
||||
{{#each skill.spec as |spec idx|}}
|
||||
<option value="{{spec.id}}">{{spec.name}}</option>
|
||||
<option value="{{spec.id}}">{{spec.name}} (+{{spec.system.bonus}})</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if spleen}}
|
||||
<div class="flexrow">
|
||||
@ -68,16 +71,8 @@
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Bonus/Malus : </span>
|
||||
<select id="bonusMalusPerso" name="bonusMalusPerso">
|
||||
{{#select bonusMalusPerso}}
|
||||
<option value="-3">-3</option>
|
||||
<option value="-2">-2</option>
|
||||
<option value="-1">-1</option>
|
||||
<option value="0">0</option>
|
||||
<option value="1">+1</option>
|
||||
<option value="2">+2</option>
|
||||
<option value="3">+3</option>
|
||||
{{/select}}
|
||||
<select type="text" id="bonusMalusPerso" name="bonusMalusPerso" data-dtype="String">
|
||||
{{selectOptions config.bonusMalusPersoOptions selected=bonusMalusPerso labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
@ -12,13 +12,8 @@
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Difficulté : </span>
|
||||
<select class="" type="text" id="roll-difficulty" value="{{difficulty}}" data-dtype="Number">
|
||||
{{#select difficulty}}
|
||||
{{#each config.difficulty as |diffData value| }}
|
||||
<option value="{{diffData.value}}">{{localize diffData.difficulty}} / {{localize diffData.frequency}}
|
||||
({{diffData.value}})</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
<select class="" type="text" id="roll-difficulty" data-dtype="String">
|
||||
{{selectOptions config.difficulty selected=difficulty localize=true labelAttr="difficulty"}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
@ -22,22 +22,14 @@
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">{{localize "ECRY.ui.impactType"}}</label>
|
||||
<select class="item-field-label-medium" type="text" name="system.impacttype" value="{{system.impacttype}}" data-dtype="String">
|
||||
{{#select system.impacttype}}
|
||||
{{#each config.impactTypes as |type key| }}
|
||||
<option value="{{key}}">{{localize type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
{{selectOptions config.impactTypes selected=system.impacttype localize=true }}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">{{localize "ECRY.ui.impactLevel"}}</label>
|
||||
<select class="item-field-label-medium" type="text" name="system.impactlevel" value="{{system.impactlevel}}" data-dtype="String">
|
||||
{{#select system.impactlevel}}
|
||||
{{#each config.impactLevels as |level key| }}
|
||||
<option value="{{key}}">{{localize level}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
{{selectOptions config.impactLevels selected=system.impactlevel localize=true }}
|
||||
</select>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -22,14 +22,15 @@
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">{{localize "ECRY.ui.skill"}}</label>
|
||||
<select class="item-field-label-medium" type="text" name="system.skillkey" value="{{system.skillkey}}" data-dtype="String">
|
||||
{{#select system.skillkey}}
|
||||
{{#each config.skills as |skill key| }}
|
||||
<option value="{{key}}">{{localize skill.name}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
{{selectOptions config.skills selected=system.skillkey localize=true valueAttr="key" labelAttr="name"}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">{{localize "ECRY.ui.bonus"}}</label>
|
||||
<input type="text" class="item-field-label-short" name="system.bonus" value="{{system.bonus}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -22,23 +22,14 @@
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">{{localize "ECRY.ui.traitType"}}</label>
|
||||
<select class="item-field-label-medium" type="text" name="system.traitype" value="{{system.traitype}}" data-dtype="String">
|
||||
{{#select system.traitype}}
|
||||
{{#each config.traitTypes as |type key| }}
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
{{selectOptions config.traitTypes selected=system.traitype}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">{{localize "ECRY.ui.niveauTrait"}}</label>
|
||||
<select class="item-field-label-medium" type="text" name="system.level" value="{{system.level}}" data-dtype="Number">
|
||||
{{#select system.level}}
|
||||
{{#each config.traitLevel as |level key| }}
|
||||
<option value="{{level.value}}">{{level.text}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
<select class="item-field-label-medium" type="text" name="system.level" value="{{system.level}}" data-dtype="String">
|
||||
{{selectOptions config.traitLevel selected=system.level labelAttr="text"}}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -22,11 +22,7 @@
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">{{localize "ECRY.ui.weapontype"}}</label>
|
||||
<select class="item-field-label-medium" type="text" name="system.weapontype" value="{{system.weapontype}}" data-dtype="String">
|
||||
{{#select system.weapontype}}
|
||||
{{#each config.weaponTypes as |type key| }}
|
||||
<option value="{{key}}">{{localize type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
{{selectOptions config.weaponTypes selected=system.weapontype localize=true}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
|
@ -8,11 +8,7 @@
|
||||
<label class="item-field-label-long">{{localize "ECRY.ui.cost"}}</label>
|
||||
<input type="text" class="item-field-label-short" name="system.cost" value="{{system.cost}}" data-dtype="Number" />
|
||||
<select class="item-field-label-medium" type="text" name="system.costunit" value="{{system.costunit}}" data-dtype="String">
|
||||
{{#select system.costunit}}
|
||||
{{#each config.costUnits as |unit key| }}
|
||||
<option value="{{key}}">{{localize unit.name}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
{{selectOptions config.costUnits selected=system.costunit localize=true labelAttr="name"}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
|
@ -2,6 +2,18 @@
|
||||
"label": "Equipement",
|
||||
"mapping": {
|
||||
"description": "system.description"
|
||||
},
|
||||
"folders": {
|
||||
"Armor": "Armure",
|
||||
"Weapons": "Armes",
|
||||
"Clothing": "Vêtements",
|
||||
"Food": "Nourriture",
|
||||
"Lighting": "Eclairage",
|
||||
"Miscellany" : "Divers",
|
||||
"Musical instruments": "Instruments de musique",
|
||||
"Reading, writing, recording": "Lecture, écriture, enregistrement",
|
||||
"Travel equipment": "Equipement de voyage",
|
||||
"Vehicle": "Véhicule"
|
||||
},
|
||||
"entries": {
|
||||
"Absinthe": {
|
||||
|
@ -2,6 +2,11 @@
|
||||
"label": "Spécialisation",
|
||||
"mapping": {
|
||||
"description": "system.description"
|
||||
},
|
||||
"folders": {
|
||||
"Mental": "Mentale",
|
||||
"Physical": "Physique",
|
||||
"Spocial": "Sociale"
|
||||
},
|
||||
"entries": {
|
||||
"Aircraft": {
|
||||
|
@ -2,6 +2,9 @@
|
||||
"label": "Traits",
|
||||
"mapping": {
|
||||
"description": "system.description"
|
||||
},
|
||||
"folders": {
|
||||
"Maneuvers": "Manoeuvres"
|
||||
},
|
||||
"entries": {
|
||||
"Ability to stay calm": {
|
||||
|