Compare commits

...

15 Commits

46 changed files with 286 additions and 188 deletions

View File

@ -28,9 +28,9 @@ jobs:
files: 'system.json' files: 'system.json'
env: env:
version: ${{steps.get_version.outputs.version-without-v}} version: ${{steps.get_version.outputs.version-without-v}}
url: https://www.uberwald.me/gitea/uberwald/fvtt-ecryme url: https://www.uberwald.me/gitea/public/fvtt-ecryme
manifest: https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/releases/latest/module.json manifest: https://www.uberwald.me/gitea/public/fvtt-ecryme/releases/latest/system.json
download: https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/releases/download/${{github.event.release.tag_name}}/fvtt-ecryme.zip 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 # Create a zip file with all files required by the module to add to the release
- run: | - run: |

View File

@ -1,8 +1,24 @@
# Ecryme v2 system for FoundryVTT (French RPG, Open Sesam Games, Official) # Ecryme v2 system for FoundryVTT (French RPG, Open Sesam Games, Official)
This is a base game system with functionnal character sheets for the game Ecryme, powered by the Engrenage system. 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 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
![System Snapshot](https://www.lahiette.com/leratierbretonnien/wp-content/uploads/2023/08/ecryme_snapshot_01.webp "System Snapshot")
# Contributions # Contributions
- Original code realised by Uberwald (https://www.uberwald.me/) - Original code realised by Uberwald (https://www.uberwald.me/)

17
changelog.md Normal file
View File

@ -0,0 +1,17 @@
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

View File

@ -1,7 +1,8 @@
{ {
"TYPES": { "TYPES": {
"Actor": { "Actor": {
"character": "PC", "pc": "Player Character",
"npc": "Non-Player Character",
"annency": "Annency" "annency": "Annency"
}, },
"Item": { "Item": {
@ -17,7 +18,8 @@
"cogs": "Cogs", "cogs": "Cogs",
"cephaly": "Cephaly", "cephaly": "Cephaly",
"boheme": "Boheme", "boheme": "Boheme",
"amertume": "Amertume" "amertume": "Amertume",
"gamelevel": "Game level"
}, },
"chat": { "chat": {
"formula": "Formula", "formula": "Formula",
@ -31,7 +33,9 @@
"traitbonus": "Bonus trait", "traitbonus": "Bonus trait",
"traitmalus": "Malus trait", "traitmalus": "Malus trait",
"bonusmalustraits": "Traits Bonus/Malus", "bonusmalustraits": "Traits Bonus/Malus",
"spectranscend": "Self-Transcend : " "spectranscend": "Self-Transcend : ",
"confrontselect": "Selected for confrontation",
"sentogm": "Confrontation has been sent to GM"
}, },
"rule": { "rule": {
"cephaly-success-2": "Duration : 1 scene - Impact : Superficial - Bonus : 1 - Elegy : 1", "cephaly-success-2": "Duration : 1 scene - Impact : Superficial - Bonus : 1 - Elegy : 1",
@ -49,6 +53,7 @@
"notenoughdice": "Execution and Preservation must have 2 dices allocated" "notenoughdice": "Execution and Preservation must have 2 dices allocated"
}, },
"ui": { "ui": {
"equipmentfree": "Equipments (free input)",
"traitType": "Trait type", "traitType": "Trait type",
"niveauTrait": "Trait level", "niveauTrait": "Trait level",
"weight": "Weight", "weight": "Weight",
@ -158,7 +163,12 @@
"ideals": "Ideals", "ideals": "Ideals",
"politic": "Political ideal", "politic": "Political ideal",
"boheme": "Boheme", "boheme": "Boheme",
"annencybonus": "Annency bonus" "annencybonus": "Annency bonus",
"bornplace": "Born place",
"residence": "Residence",
"origin": "Origin",
"childhood": "Childhood",
"bonus": "Bonus"
} }
} }
} }

View File

@ -1,7 +1,8 @@
{ {
"TYPES": { "TYPES": {
"Actor":{ "Actor":{
"character": "Personnage", "pc": "Personnage Joueur",
"npc": "Personnage Non Joueur",
"annency": "Anence" "annency": "Anence"
}, },
"Item": { "Item": {
@ -17,7 +18,8 @@
"cogs": "Engrenages", "cogs": "Engrenages",
"cephaly": "Céphalie", "cephaly": "Céphalie",
"boheme": "Bohême", "boheme": "Bohême",
"amertume": "Amertume" "amertume": "Amertume",
"gamelevel": "Niveau de jeu"
}, },
"chat": { "chat": {
"formula": "Formule", "formula": "Formule",
@ -31,14 +33,16 @@
"traitbonus": "Trait bonus", "traitbonus": "Trait bonus",
"traitmalus": "Trait malus", "traitmalus": "Trait malus",
"bonusmalustraits": "Bonus/Malus des Traits", "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": { "rule": {
"cephaly-success-12": "Durée : 1 scène - Impact : Superficiel - Bonus : 1 - Elegie : 1", "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-4": "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-6": "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-8": "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-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-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-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", "cephaly-failure-6": "Durée : 1 mois - Impact : Grave - Malus : 3 - Symptôme incapacitant - Altération repérable et fâcheuse",
@ -50,6 +54,7 @@
"notenoughdice": "L'Accomplissement et la Préservation doivent avoir 2 dés chacun" "notenoughdice": "L'Accomplissement et la Préservation doivent avoir 2 dés chacun"
}, },
"ui": { "ui": {
"equipmentfree": "Equipements (saisie libre)",
"traitType": "Type de trait", "traitType": "Type de trait",
"niveauTrait": "Niveau du trait", "niveauTrait": "Niveau du trait",
"effect": "Incidence", "effect": "Incidence",
@ -159,7 +164,12 @@
"ideals": "Idéaux", "ideals": "Idéaux",
"politic": "Idéaux politiques", "politic": "Idéaux politiques",
"boheme": "Bohême", "boheme": "Bohême",
"annencybonus": "Bonus d'Anence" "annencybonus": "Bonus d'Anence",
"bornplace": "Lieu de naissance",
"residence": "Résidence",
"origin": "Origine",
"childhood": "Enfance",
"bonus": "Bonus"
} }
} }
} }

View File

@ -46,7 +46,7 @@ export class EcrymeActorSheet extends ActorSheet {
maneuvers: this.actor.getManeuvers(), maneuvers: this.actor.getManeuvers(),
impactsMalus: this.actor.getImpactsMalus(), impactsMalus: this.actor.getImpactsMalus(),
archetype: duplicate(this.actor.getArchetype()), archetype: duplicate(this.actor.getArchetype()),
equipements: this.actor.getEquipments(), equipments: this.actor.getEquipments(),
hasCephaly: EcrymeUtility.hasCephaly(), hasCephaly: EcrymeUtility.hasCephaly(),
hasBoheme: EcrymeUtility.hasBoheme(), hasBoheme: EcrymeUtility.hasBoheme(),
hasAmertume: EcrymeUtility.hasAmertume(), hasAmertume: EcrymeUtility.hasAmertume(),
@ -129,6 +129,12 @@ export class EcrymeActorSheet extends ActorSheet {
let skillKey = $(event.currentTarget).data("skill-key") let skillKey = $(event.currentTarget).data("skill-key")
this.actor.rollSkill(categKey, skillKey) 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) => { html.find('.roll-skill-confront').click((event) => {
let categKey = $(event.currentTarget).data("category-key") let categKey = $(event.currentTarget).data("category-key")
let skillKey = $(event.currentTarget).data("skill-key") let skillKey = $(event.currentTarget).data("skill-key")

View File

@ -200,7 +200,7 @@ export class EcrymeActor extends Actor {
/* ------------------------------------------- */ /* ------------------------------------------- */
getEquipments() { getEquipments() {
return this.items.filter(item => item.type == 'equipement') return this.items.filter(item => item.type == 'equipment')
} }
/* ------------------------------------------- */ /* ------------------------------------------- */
@ -348,7 +348,7 @@ export class EcrymeActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
modifyConfrontBonus( modifier ) { modifyConfrontBonus( modifier ) {
let newBonus = this.system.internals.confrontbonus + bonus let newBonus = this.system.internals.confrontbonus + modifier
this.update({'system.internals.confrontbonus': newBonus}) this.update({'system.internals.confrontbonus': newBonus})
} }
@ -410,6 +410,17 @@ export class EcrymeActor extends Actor {
this.startRoll(rollData).catch("Error on startRoll") 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 = duplicate(spec)
rollData.title = game.i18n.localize(rollData.skill.name)
this.startRoll(rollData).catch("Error on startRoll")
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollSkillConfront(categKey, skillKey) { async rollSkillConfront(categKey, skillKey) {
let rollData = this.getCommonSkill(categKey, skillKey) let rollData = this.getCommonSkill(categKey, skillKey)
@ -457,6 +468,8 @@ export class EcrymeActor extends Actor {
rollData.title = game.i18n.localize("ECRY.ui.confrontation") + " : " + game.i18n.localize(rollData.skill.name) rollData.title = game.i18n.localize("ECRY.ui.confrontation") + " : " + game.i18n.localize(rollData.skill.name)
rollData.executionTotal = rollData.skill.value rollData.executionTotal = rollData.skill.value
rollData.preservationTotal = rollData.skill.value rollData.preservationTotal = rollData.skill.value
rollData.traitsBonus = duplicate(rollData.traits)
rollData.traitsMalus = duplicate(rollData.traits)
rollData.applyTranscendence = "execution" rollData.applyTranscendence = "execution"
let confrontStartDialog = await EcrymeConfrontStartDialog.create(this, rollData) let confrontStartDialog = await EcrymeConfrontStartDialog.create(this, rollData)
confrontStartDialog.render(true) confrontStartDialog.render(true)

View File

@ -300,6 +300,7 @@ export class EcrymeUtility {
let messageId = EcrymeUtility.findChatMessageId(event.currentTarget) let messageId = EcrymeUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId) let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "ecryme-rolldata") let rollData = message.getFlag("world", "ecryme-rolldata")
ui.notifications.info( game.i18n.localize("ECRY.chat.confrontselect"))
EcrymeUtility.manageConfrontation(rollData) EcrymeUtility.manageConfrontation(rollData)
}) })
html.on("click", '.button-apply-cephaly-difficulty', event => { html.on("click", '.button-apply-cephaly-difficulty', event => {
@ -409,10 +410,15 @@ export class EcrymeUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async onSocketMesssage(msg) { static async onSocketMesssage(msg) {
console.log("SOCKET MESSAGE", msg.name) console.log("SOCKET MESSAGE", msg)
if (msg.name == "msg-draw-card") { if (msg.name == "msg_gm_chat_message") {
if (game.user.isGM && game.system.ecryme.currentTirage) { let rollData = msg.data.rollData
game.system.ecryme.currentTirage.addCard(msg.data.msgId) 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 +498,7 @@ export class EcrymeUtility {
rollData.margin = rollData.total - rollData.difficulty rollData.margin = rollData.total - rollData.difficulty
if (rollData.total > rollData.difficulty) { if (rollData.total > rollData.difficulty) {
rollData.isSuccess = true 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) rollData.margin = Math.min(rollData.margin, maxMargin)
} }
} }
@ -516,7 +522,7 @@ export class EcrymeUtility {
} }
if (rollData.selectedSpecs && rollData.selectedSpecs.length > 0) { if (rollData.selectedSpecs && rollData.selectedSpecs.length > 0) {
rollData.spec = actor.getSpecialization(rollData.selectedSpecs[0]) rollData.spec = actor.getSpecialization(rollData.selectedSpecs[0])
diceFormula += "+2" diceFormula += "+" + (String(rollData.spec.system?.bonus) || "2")
} }
rollData.bonusMalusTraits = 0 rollData.bonusMalusTraits = 0
if (rollData.traitsBonus && rollData.traitsBonus.length > 0) { if (rollData.traitsBonus && rollData.traitsBonus.length > 0) {
@ -631,12 +637,10 @@ export class EcrymeUtility {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static blindMessageToGM(chatOptions) { static blindMessageToGM(chatData) {
let chatGM = duplicate(chatOptions); chatData.whisper = this.getUsers(user => user.isGM);
chatGM.whisper = this.getUsers(user => user.isGM); console.log("blindMessageToGM", chatData);
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content; game.socket.emit("system.fvtt-ecryme", { name: "msg_gm_chat_message", data: chatData });
console.log("blindMessageToGM", chatGM);
game.socket.emit("system.fvtt-ecryme", { msg: "msg_gm_chat_message", data: chatGM });
} }
@ -656,18 +660,14 @@ export class EcrymeUtility {
} }
return array; return array;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static async createChatMessage(name, rollMode, chatOptions) { static async createChatMessage(name, rollMode, chatOptions) {
switch (rollMode) { switch (rollMode) {
case "blindroll": // GM only case "blindroll": // GM only
if (!game.user.isGM) { if (!game.user.isGM) {
this.blindMessageToGM(chatOptions);
chatOptions.whisper = [game.user.id]; chatOptions.whisper = [game.user.id];
chatOptions.content = "Message only to the GM"; } else {
}
else {
chatOptions.whisper = this.getUsers(user => user.isGM); chatOptions.whisper = this.getUsers(user => user.isGM);
} }
break; break;

View File

@ -50,6 +50,7 @@ export class EcrymeConfrontDialog extends Dialog {
let msg = await EcrymeUtility.createChatMessage(this.rollData.alias, "blindroll", { let msg = await EcrymeUtility.createChatMessage(this.rollData.alias, "blindroll", {
content: await renderTemplate(`systems/fvtt-ecryme/templates/chat/chat-confrontation-pending.hbs`, this.rollData) 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) console.log("MSG", this.rollData)
msg.setFlag("world", "ecryme-rolldata", this.rollData) msg.setFlag("world", "ecryme-rolldata", this.rollData)
} }
@ -82,13 +83,24 @@ export class EcrymeConfrontDialog extends Dialog {
let button = this.buttonDisabled let button = this.buttonDisabled
setTimeout(function () { $(".launchConfront").attr("disabled", button) }, 180) 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) { _onDragStart(event) {
console.log("DRAGSTART::::", event)
super._onDragStart(event) super._onDragStart(event)
let dragType = $(event.srcElement).data("drag-type") let dragType = $(event.srcElement).data("drag-type")
let diceData = {} let diceData = {}
//console.log("DRAGTYPE", dragType) console.log("DRAGTYPE", dragType)
if (dragType == "dice") { if (dragType == "dice") {
diceData = { diceData = {
dragType: "dice", dragType: "dice",
@ -111,7 +123,7 @@ export class EcrymeConfrontDialog extends Dialog {
let data = JSON.parse(dataJSON) let data = JSON.parse(dataJSON)
if ( data.dragType == "dice") { if ( data.dragType == "dice") {
let idx = Number(data.diceIndex) 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") && if (event.srcElement.className.includes("execution") &&
this.rollData.availableDices.filter(d => d.location == "execution").length < 2) { this.rollData.availableDices.filter(d => d.location == "execution").length < 2) {
this.rollData.availableDices[idx].location = "execution" this.rollData.availableDices[idx].location = "execution"

View File

@ -68,7 +68,7 @@ Hooks.once("init", async function () {
EcrymeUtility.init() EcrymeUtility.init()
console.log("Babele INIT!") console.log("Babele INIT!")
Babele.get().setSystemTranslationsDir("translated"); Babele.get().setSystemTranslationsDir("translated")
}); });

View File

@ -1 +1 @@
MANIFEST-000054 MANIFEST-000110

View File

@ -1,7 +1,7 @@
2023/08/08-18:04:51.701446 7f5afcdf86c0 Recovering log #52 2023/10/11-23:48:51.541808 7ffafd7f96c0 Recovering log #108
2023/08/08-18:04:51.711602 7f5afcdf86c0 Delete type=3 #50 2023/10/11-23:48:51.552684 7ffafd7f96c0 Delete type=3 #106
2023/08/08-18:04:51.711652 7f5afcdf86c0 Delete type=0 #52 2023/10/11-23:48:51.552736 7ffafd7f96c0 Delete type=0 #108
2023/08/08-18:04:59.546696 7f58677fe6c0 Level-0 table #57: started 2023/10/12-08:26:09.141923 7ff865e026c0 Level-0 table #113: started
2023/08/08-18:04:59.546715 7f58677fe6c0 Level-0 table #57: 0 bytes OK 2023/10/12-08:26:09.141979 7ff865e026c0 Level-0 table #113: 0 bytes OK
2023/08/08-18:04:59.552809 7f58677fe6c0 Delete type=0 #55 2023/10/12-08:26:09.148564 7ff865e026c0 Delete type=0 #111
2023/08/08-18:04:59.560028 7f58677fe6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end) 2023/10/12-08:26:09.156649 7ff865e026c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2023/08/08-17:50:40.597296 7f5afd5f96c0 Recovering log #48 2023/10/10-15:44:15.214470 7fb8baffd6c0 Recovering log #104
2023/08/08-17:50:40.655447 7f5afd5f96c0 Delete type=3 #46 2023/10/10-15:44:15.228942 7fb8baffd6c0 Delete type=3 #102
2023/08/08-17:50:40.655509 7f5afd5f96c0 Delete type=0 #48 2023/10/10-15:44:15.229018 7fb8baffd6c0 Delete type=0 #104
2023/08/08-18:04:06.340910 7f58677fe6c0 Level-0 table #53: started 2023/10/10-16:47:17.816560 7fb8b97fa6c0 Level-0 table #109: started
2023/08/08-18:04:06.340947 7f58677fe6c0 Level-0 table #53: 0 bytes OK 2023/10/10-16:47:17.816585 7fb8b97fa6c0 Level-0 table #109: 0 bytes OK
2023/08/08-18:04:06.347333 7f58677fe6c0 Delete type=0 #51 2023/10/10-16:47:17.822797 7fb8b97fa6c0 Delete type=0 #107
2023/08/08-18:04:06.361314 7f58677fe6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end) 2023/10/10-16:47:17.832584 7fb8b97fa6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)

BIN
packs/help/000005.ldb Normal file

Binary file not shown.

1
packs/help/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000046

8
packs/help/LOG Normal file
View File

@ -0,0 +1,8 @@
2023/10/11-23:48:51.581592 7ffafdffa6c0 Recovering log #44
2023/10/11-23:48:51.591855 7ffafdffa6c0 Delete type=3 #42
2023/10/11-23:48:51.591921 7ffafdffa6c0 Delete type=0 #44
2023/10/12-08:26:09.156682 7ff865e026c0 Level-0 table #49: started
2023/10/12-08:26:09.156770 7ff865e026c0 Level-0 table #49: 0 bytes OK
2023/10/12-08:26:09.164722 7ff865e026c0 Delete type=0 #47
2023/10/12-08:26:09.174057 7ff865e026c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2023/10/12-08:26:09.174129 7ff865e026c0 Manual compaction at level-1 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)

8
packs/help/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2023/10/10-15:44:15.264794 7fb8bb7fe6c0 Recovering log #40
2023/10/10-15:44:15.274945 7fb8bb7fe6c0 Delete type=3 #38
2023/10/10-15:44:15.275026 7fb8bb7fe6c0 Delete type=0 #40
2023/10/10-16:47:17.838950 7fb8b97fa6c0 Level-0 table #45: started
2023/10/10-16:47:17.838969 7fb8b97fa6c0 Level-0 table #45: 0 bytes OK
2023/10/10-16:47:17.846123 7fb8b97fa6c0 Delete type=0 #43
2023/10/10-16:47:17.846349 7fb8b97fa6c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2023/10/10-16:47:17.846379 7fb8b97fa6c0 Manual compaction at level-1 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)

BIN
packs/help/MANIFEST-000046 Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000054 MANIFEST-000110

View File

@ -1,7 +1,7 @@
2023/08/08-18:04:51.714583 7f5afcdf86c0 Recovering log #52 2023/10/11-23:48:51.568912 7ff867fff6c0 Recovering log #108
2023/08/08-18:04:51.723706 7f5afcdf86c0 Delete type=3 #50 2023/10/11-23:48:51.579440 7ff867fff6c0 Delete type=3 #106
2023/08/08-18:04:51.723766 7f5afcdf86c0 Delete type=0 #52 2023/10/11-23:48:51.579511 7ff867fff6c0 Delete type=0 #108
2023/08/08-18:04:59.560163 7f58677fe6c0 Level-0 table #57: started 2023/10/12-08:26:09.164906 7ff865e026c0 Level-0 table #113: started
2023/08/08-18:04:59.560198 7f58677fe6c0 Level-0 table #57: 0 bytes OK 2023/10/12-08:26:09.164969 7ff865e026c0 Level-0 table #113: 0 bytes OK
2023/08/08-18:04:59.566320 7f58677fe6c0 Delete type=0 #55 2023/10/12-08:26:09.173679 7ff865e026c0 Delete type=0 #111
2023/08/08-18:04:59.566452 7f58677fe6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end) 2023/10/12-08:26:09.174093 7ff865e026c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2023/08/08-17:50:40.659050 7f5afd5f96c0 Recovering log #48 2023/10/10-15:44:15.251468 7fb8ba7fc6c0 Recovering log #104
2023/08/08-17:50:40.767128 7f5afd5f96c0 Delete type=3 #46 2023/10/10-15:44:15.263005 7fb8ba7fc6c0 Delete type=3 #102
2023/08/08-17:50:40.767167 7f5afd5f96c0 Delete type=0 #48 2023/10/10-15:44:15.263083 7fb8ba7fc6c0 Delete type=0 #104
2023/08/08-18:04:06.354489 7f58677fe6c0 Level-0 table #53: started 2023/10/10-16:47:17.832601 7fb8b97fa6c0 Level-0 table #109: started
2023/08/08-18:04:06.354521 7f58677fe6c0 Level-0 table #53: 0 bytes OK 2023/10/10-16:47:17.832642 7fb8b97fa6c0 Level-0 table #109: 0 bytes OK
2023/08/08-18:04:06.361236 7f58677fe6c0 Delete type=0 #51 2023/10/10-16:47:17.838860 7fb8b97fa6c0 Delete type=0 #107
2023/08/08-18:04:06.361331 7f58677fe6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end) 2023/10/10-16:47:17.846327 7fb8b97fa6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)

View File

View File

@ -1 +1 @@
MANIFEST-000054 MANIFEST-000110

View File

@ -1,7 +1,7 @@
2023/08/08-18:04:51.701446 7f5afddfa6c0 Recovering log #52 2023/10/11-23:48:51.528323 7ffafdffa6c0 Recovering log #108
2023/08/08-18:04:51.711597 7f5afddfa6c0 Delete type=3 #50 2023/10/11-23:48:51.539236 7ffafdffa6c0 Delete type=3 #106
2023/08/08-18:04:51.711643 7f5afddfa6c0 Delete type=0 #52 2023/10/11-23:48:51.539371 7ffafdffa6c0 Delete type=0 #108
2023/08/08-18:04:59.539283 7f58677fe6c0 Level-0 table #57: started 2023/10/12-08:26:09.134584 7ff865e026c0 Level-0 table #113: started
2023/08/08-18:04:59.539308 7f58677fe6c0 Level-0 table #57: 0 bytes OK 2023/10/12-08:26:09.134646 7ff865e026c0 Level-0 table #113: 0 bytes OK
2023/08/08-18:04:59.546617 7f58677fe6c0 Delete type=0 #55 2023/10/12-08:26:09.141658 7ff865e026c0 Delete type=0 #111
2023/08/08-18:04:59.560019 7f58677fe6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end) 2023/10/12-08:26:09.148759 7ff865e026c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2023/08/08-17:50:40.597326 7f5afcdf86c0 Recovering log #48 2023/10/10-15:44:15.196298 7fb8bb7fe6c0 Recovering log #104
2023/08/08-17:50:40.655429 7f5afcdf86c0 Delete type=3 #46 2023/10/10-15:44:15.211750 7fb8bb7fe6c0 Delete type=3 #102
2023/08/08-17:50:40.655471 7f5afcdf86c0 Delete type=0 #48 2023/10/10-15:44:15.211839 7fb8bb7fe6c0 Delete type=0 #104
2023/08/08-18:04:06.323953 7f58677fe6c0 Level-0 table #53: started 2023/10/10-16:47:17.809484 7fb8b97fa6c0 Level-0 table #109: started
2023/08/08-18:04:06.324001 7f58677fe6c0 Level-0 table #53: 0 bytes OK 2023/10/10-16:47:17.809511 7fb8b97fa6c0 Level-0 table #109: 0 bytes OK
2023/08/08-18:04:06.330360 7f58677fe6c0 Delete type=0 #51 2023/10/10-16:47:17.816437 7fb8b97fa6c0 Delete type=0 #107
2023/08/08-18:04:06.340887 7f58677fe6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end) 2023/10/10-16:47:17.832558 7fb8b97fa6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)

0
packs/traits/000112.log Normal file
View File

View File

@ -1 +1 @@
MANIFEST-000054 MANIFEST-000110

View File

@ -1,7 +1,7 @@
2023/08/08-18:04:51.714581 7f5afd5f96c0 Recovering log #52 2023/10/11-23:48:51.555605 7ffafcff86c0 Recovering log #108
2023/08/08-18:04:51.723695 7f5afd5f96c0 Delete type=3 #50 2023/10/11-23:48:51.566715 7ffafcff86c0 Delete type=3 #106
2023/08/08-18:04:51.723729 7f5afd5f96c0 Delete type=0 #52 2023/10/11-23:48:51.566824 7ffafcff86c0 Delete type=0 #108
2023/08/08-18:04:59.552915 7f58677fe6c0 Level-0 table #57: started 2023/10/12-08:26:09.148992 7ff865e026c0 Level-0 table #113: started
2023/08/08-18:04:59.552934 7f58677fe6c0 Level-0 table #57: 0 bytes OK 2023/10/12-08:26:09.149043 7ff865e026c0 Level-0 table #113: 0 bytes OK
2023/08/08-18:04:59.559910 7f58677fe6c0 Delete type=0 #55 2023/10/12-08:26:09.156386 7ff865e026c0 Delete type=0 #111
2023/08/08-18:04:59.560044 7f58677fe6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end) 2023/10/12-08:26:09.173997 7ff865e026c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2023/08/08-17:50:40.658993 7f5afcdf86c0 Recovering log #48 2023/10/10-15:44:15.233698 7fb8b9ffb6c0 Recovering log #104
2023/08/08-17:50:40.748499 7f5afcdf86c0 Delete type=3 #46 2023/10/10-15:44:15.249165 7fb8b9ffb6c0 Delete type=3 #102
2023/08/08-17:50:40.748566 7f5afcdf86c0 Delete type=0 #48 2023/10/10-15:44:15.249275 7fb8b9ffb6c0 Delete type=0 #104
2023/08/08-18:04:06.347462 7f58677fe6c0 Level-0 table #53: started 2023/10/10-16:47:17.823003 7fb8b97fa6c0 Level-0 table #109: started
2023/08/08-18:04:06.347507 7f58677fe6c0 Level-0 table #53: 0 bytes OK 2023/10/10-16:47:17.823041 7fb8b97fa6c0 Level-0 table #109: 0 bytes OK
2023/08/08-18:04:06.354352 7f58677fe6c0 Delete type=0 #51 2023/10/10-16:47:17.832350 7fb8b97fa6c0 Delete type=0 #107
2023/08/08-18:04:06.361324 7f58677fe6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end) 2023/10/10-16:47:17.838938 7fb8b97fa6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)

View File

@ -1321,6 +1321,10 @@ ul, li {
min-width:2rem; min-width:2rem;
max-width: 2rem; max-width: 2rem;
} }
.item-controls-fixed-full {
min-width:3rem;
max-width: 3rem;
}
.attribute-label { .attribute-label {
font-weight: bold; font-weight: bold;
} }

View File

@ -1301,6 +1301,10 @@ ul, li {
min-width:2rem; min-width:2rem;
max-width: 2rem; max-width: 2rem;
} }
.item-controls-fixed-full {
min-width:3rem;
max-width: 3rem;
}
.attribute-label { .attribute-label {
font-weight: bold; font-weight: bold;
} }

View File

@ -73,10 +73,22 @@
"PLAYER": "OBSERVER", "PLAYER": "OBSERVER",
"ASSISTANT": "OWNER" "ASSISTANT": "OWNER"
} }
},
{
"label": "Help/Aides",
"type": "JournalEntry",
"name": "help",
"path": "packs/help",
"system": "fvtt-ecryme",
"flags": {},
"ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
} }
], ],
"license": "LICENSE.txt", "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": { "compatibility": {
"minimum": "10", "minimum": "10",
"verified": "11" "verified": "11"
@ -88,9 +100,18 @@
"styles": [ "styles": [
"styles/ecryme.css" "styles/ecryme.css"
], ],
"relationships": {
"requires": [
{
"id": "babele",
"type": "module",
"compatibility": {}
}
]
},
"title": "Ecryme, le Jeu de Rôles", "title": "Ecryme, le Jeu de Rôles",
"url": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme", "url": "https://www.uberwald.me/gitea/public/fvtt-ecryme",
"version": "11.0.19", "version": "11.0.37",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/archive/fvtt-ecryme-v11.0.19.zip", "download": "https://www.uberwald.me/gitea/public/fvtt-ecryme/archive/fvtt-ecryme-v11.0.37.zip",
"background": "systems/fvtt-ecryme/images/assets/ecryme_extract_panel_01.webp" "background": "systems/fvtt-ecryme/images/assets/ecryme_extract_panel_01.webp"
} }

View File

@ -24,6 +24,7 @@
}, },
"core": { "core": {
"subactors": [], "subactors": [],
"equipmentfree": "",
"skills": { "skills": {
"physical": { "physical": {
"name": "ECRY.ui.physical", "name": "ECRY.ui.physical",
@ -266,6 +267,7 @@
"effect": 0 "effect": 0
}, },
"specialization": { "specialization": {
"bonus": 2,
"templates": [ "templates": [
"common" "common"
], ],

View File

@ -19,9 +19,10 @@
<label class="item-name-label-long">{{spleen.name}}</label> <label class="item-name-label-long">{{spleen.name}}</label>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
{{#if spleen}} {{#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-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> </div>
{{/if}} {{/if}}
</li> </li>
@ -30,9 +31,10 @@
<label class="item-name-label-long">{{ideal.name}}</label> <label class="item-name-label-long">{{ideal.name}}</label>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
{{#if ideal}} {{#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-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> </div>
{{/if}} {{/if}}
</li> </li>
@ -100,15 +102,15 @@
<ul class="ul-level1"> <ul class="ul-level1">
{{#each skill.spec as |spec idx|}} {{#each skill.spec as |spec idx|}}
<li class="item flexrow list-item" data-item-id="{{spec._id}}" data-item-type="specialization"> <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> <i class="fa-solid fa-dice-d6"></i>
{{spec.name}} {{spec.name}}
</a> </a>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-edit" data-type="specialization" title="Edit Item"><i <a class="item-control item-edit" data-type="specialization" title="Edit Item"><i
class="fas fa-edit"></i></a> class="fas fa-edit"></i></a>
<a class="item-control item-add" data-type="specialization" title="Delete Item"><i <a class="item-control item-delete" data-type="specialization" title="Delete Item"><i
class="fas fa-plus"></i></a> class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
@ -273,57 +275,22 @@
{{!-- Equipement Tab --}} {{!-- 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"> <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> </span>
<div class="form-group small-editor"> <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> </div>
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header"> <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>
<span class="item-field-label-medium"> <span class="item-field-label-medium">
<label class="item-field-label-medium">Normaux</label> <label class="item-field-label-medium">{{localize "ECRY.ui.weight"}}</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">&nbsp;</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>
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
@ -331,11 +298,12 @@
</div> </div>
</li> </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}}"> <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" <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{equip.img}}" /></a> src="{{equip.img}}" /></a>
<span class="item-name-label">{{equip.name}}</span> <span class="item-name-label">{{equip.name}}</span>
<span class="item-field-label-medium">{{equip.system.weight}}</span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
@ -345,36 +313,6 @@
{{/each}} {{/each}}
</ul> </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">&nbsp;</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">&nbsp;</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> <hr>
</div> </div>
@ -386,7 +324,7 @@
<div> <div>
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
<li class="item flexrow"> <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}}" <input type="text" class="" name="system.biodata.lieunaissance" value="{{system.biodata.lieunaissance}}"
data-dtype="String" /> data-dtype="String" />
</li> </li>
@ -395,22 +333,27 @@
<input type="text" class="" name="system.biodata.age" value="{{system.biodata.age}}" <input type="text" class="" name="system.biodata.age" value="{{system.biodata.age}}"
data-dtype="String" /> data-dtype="String" />
</li> </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> </ul>
</div> </div>
<div> <div>
<ul> <ul>
<li class="item flexrow"> <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}}" <input type="text" class="" name="system.biodata.residence" value="{{system.biodata.residence}}"
data-dtype="String" /> data-dtype="String" />
</li> </li>
<li class="item flexrow"> <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}}" <input type="text" class="" name="system.biodata.nationalite" value="{{system.biodata.nationalite}}"
data-dtype="String" /> data-dtype="String" />
</li> </li>
<li class="item flexrow"> <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}}" <input type="text" class="" name="system.biodata.enfance" value="{{system.biodata.enfance}}"
data-dtype="String" /> data-dtype="String" />
</li> </li>

View File

@ -23,7 +23,7 @@
<li>{{localize skill.name}}: {{skill.value}} </li> <li>{{localize skill.name}}: {{skill.value}} </li>
{{#if spec}} {{#if spec}}
<li>{{localize "ECRY.chat.specialization"}} {{spec.name}} (+2) </li> <li>{{localize "ECRY.chat.specialization"}} {{spec.name}} (+{{spec.system.bonus}}) </li>
{{/if}} {{/if}}
{{#each traitsBonus as |trait idx|}} {{#each traitsBonus as |trait idx|}}
@ -40,7 +40,14 @@
<li>{{localize "ECRY.chat.bonusmalustraits"}}: {{bonusMalusTraits}} </li> <li>{{localize "ECRY.chat.bonusmalustraits"}}: {{bonusMalusTraits}} </li>
{{/if}} {{/if}}
{{#if (isGM)}}
{{else}}
<li>{{localize "ECRY.ui.execution"}} : {{executionTotal}}</li>
<li>{{localize "ECRY.ui.preservation"}} : {{preservationTotal}}</li>
{{/if}}
</ul> </ul>
{{#if (isGM)}} {{#if (isGM)}}
{{#if (eq mode "cephaly")}} {{#if (eq mode "cephaly")}}
<div> <div>
@ -55,6 +62,10 @@
{{else}} {{else}}
<button class="button-select-confront">{{localize "ECRY.ui.selectconfront"}}</button> <button class="button-select-confront">{{localize "ECRY.ui.selectconfront"}}</button>
{{/if}} {{/if}}
{{else}}
<div>
{{localize "ECRY.chat.sentogm"}}
</div>
{{/if}} {{/if}}
</div> </div>

View File

@ -21,7 +21,7 @@
{{#if skill}} {{#if skill}}
<li>{{localize skill.name}}: {{skill.value}} </li> <li>{{localize skill.name}}: {{skill.value}} </li>
{{#if spec}} {{#if spec}}
<li>{{localize "ECRY.chat.specialization"}} {{spec.name}} (+2) </li> <li>{{localize "ECRY.chat.specialization"}} {{spec.name}} (+{{spec.system.bonus}}) </li>
{{/if}} {{/if}}
{{/if}} {{/if}}

View File

@ -22,14 +22,21 @@
</select> </select>
</div> </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"> <div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.spec"}} : </span> <span class="roll-dialog-label">{{localize "ECRY.ui.spec"}} : </span>
<select class="" id="roll-specialization" data-type="String" multiple> <select class="" id="roll-specialization" data-type="String" multiple>
{{#each skill.spec as |spec idx|}} {{#each skill.spec as |spec idx|}}
<option value="{{spec.id}}">{{spec.name}}</option> <option value="{{spec.id}}">{{spec.name}} (+{{spec.system.bonus}})</option>
{{/each}} {{/each}}
</select> </select>
</div> </div>
{{/if}}
{{#if spleen}} {{#if spleen}}
<div class="flexrow"> <div class="flexrow">

View File

@ -30,6 +30,11 @@
</select> </select>
</li> </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> </ul>
</div> </div>
</div> </div>