Compare commits

...

5 Commits

55 changed files with 253 additions and 137 deletions

View File

@ -1,10 +1,12 @@
# 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 # System overview
The game system in Foundry offers the following features : The game system in Foundry offers the following features :
- PC/NPC sheet - PC/NPC sheet
- Skill rolls - Skill rolls

View File

@ -1,3 +1,9 @@
v11.0.36
- Enable deletion specialization
- Custome bonus for specializations
- Specialization direct rolls
v11.0.31 v11.0.31
Add profession, fix equipment tab and add missing translation Add profession, fix equipment tab and add missing translation

4
images/.directory Normal file
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

4
images/ui/.directory Normal file
View 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

View File

@ -33,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",
@ -165,7 +167,8 @@
"bornplace": "Born place", "bornplace": "Born place",
"residence": "Residence", "residence": "Residence",
"origin": "Origin", "origin": "Origin",
"childhood": "Childhood" "childhood": "Childhood",
"bonus": "Bonus"
} }
} }
} }

View File

@ -33,7 +33,9 @@
"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",
@ -166,7 +168,8 @@
"bornplace": "Lieu de naissance", "bornplace": "Lieu de naissance",
"residence": "Résidence", "residence": "Résidence",
"origin": "Origine", "origin": "Origine",
"childhood": "Enfance" "childhood": "Enfance",
"bonus": "Bonus"
} }
} }
} }

View File

@ -53,9 +53,9 @@ export class EcrymeActorSheet extends ActorSheet {
cephalySkills: this.actor.getCephalySkills(), cephalySkills: this.actor.getCephalySkills(),
subActors: duplicate(this.actor.getSubActors()), subActors: duplicate(this.actor.getSubActors()),
annency: this.actor.getAnnency(), annency: this.actor.getAnnency(),
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }), description: await TextEditor.enrichHTML(this.object.system.biodata.description, { async: true }),
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }), notes: await TextEditor.enrichHTML(this.object.system.biodata.notes, { async: true }),
equipementlibre: await TextEditor.enrichHTML(this.object.system.equipementlibre, { async: true }), equipementlibre: await TextEditor.enrichHTML(this.object.system.equipmentfree, { async: true }),
options: this.options, options: this.options,
owner: this.document.isOwner, owner: this.document.isOwner,
editScore: this.options.editScore, editScore: this.options.editScore,
@ -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

@ -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)

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)
} }
} }
} }
@ -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 });
} }
@ -662,12 +666,8 @@ export class EcrymeUtility {
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)
} }
@ -83,12 +84,23 @@ export class EcrymeConfrontDialog extends Dialog {
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

@ -67,7 +67,6 @@ Hooks.once("init", async function () {
EcrymeUtility.init() EcrymeUtility.init()
console.log("Babele INIT!")
Babele.get().setSystemTranslationsDir("translated") Babele.get().setSystemTranslationsDir("translated")
}); });
@ -84,28 +83,13 @@ function welcomeMessage() {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
// Register world usage statistics async function importDefaultScene() {
function registerUsageCount(registerKey) { let exists = game.scenes.find(j => j.name == "Landing page 1");
if (game.user.isGM) { if (!exists) {
game.settings.register(registerKey, "world-key", { const scenes = await EcrymeUtility.loadCompendium("fvtt-ecryme.scenes")
name: "Unique world key", let newDocuments = scenes.filter(i => i.name == "Landing page 1");
scope: "world", await game.scenes.documentClass.create(newDocuments);
config: false, game.scenes.find(i => i.name == "Landing page 1").activate();
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)
} }
} }
@ -123,10 +107,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(); welcomeMessage();
EcrymeUtility.ready() EcrymeUtility.ready();
EcrymeCharacterSummary.ready() EcrymeCharacterSummary.ready();
importDefaultScene();
}) })

View File

@ -1 +1 @@
MANIFEST-000090 MANIFEST-000122

View File

@ -1,7 +1,7 @@
2023/08/25-09:06:43.291745 7f42affff6c0 Recovering log #88 2024/03/15-12:08:26.246276 7fee396006c0 Recovering log #120
2023/08/25-09:06:43.308894 7f42affff6c0 Delete type=3 #86 2024/03/15-12:08:26.262508 7fee396006c0 Delete type=3 #118
2023/08/25-09:06:43.308951 7f42affff6c0 Delete type=0 #88 2024/03/15-12:08:26.262560 7fee396006c0 Delete type=0 #120
2023/08/25-09:09:02.388289 7f42ae7fc6c0 Level-0 table #93: started 2024/03/15-12:09:03.404439 7fee33e006c0 Level-0 table #125: started
2023/08/25-09:09:02.388354 7f42ae7fc6c0 Level-0 table #93: 0 bytes OK 2024/03/15-12:09:03.404513 7fee33e006c0 Level-0 table #125: 0 bytes OK
2023/08/25-09:09:02.396757 7f42ae7fc6c0 Delete type=0 #91 2024/03/15-12:09:03.412072 7fee33e006c0 Delete type=0 #123
2023/08/25-09:09:02.413788 7f42ae7fc6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end) 2024/03/15-12:09:03.418373 7fee33e006c0 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/25-08:56:40.355200 7f45449ff6c0 Recovering log #84 2024/03/15-11:36:32.744581 7fee3b4006c0 Recovering log #116
2023/08/25-08:56:40.368438 7f45449ff6c0 Delete type=3 #82 2024/03/15-11:36:32.754905 7fee3b4006c0 Delete type=3 #114
2023/08/25-08:56:40.368595 7f45449ff6c0 Delete type=0 #84 2024/03/15-11:36:32.754960 7fee3b4006c0 Delete type=0 #116
2023/08/25-09:05:19.712351 7f42ae7fc6c0 Level-0 table #89: started 2024/03/15-11:37:15.094830 7fee33e006c0 Level-0 table #121: started
2023/08/25-09:05:19.712385 7f42ae7fc6c0 Level-0 table #89: 0 bytes OK 2024/03/15-11:37:15.094864 7fee33e006c0 Level-0 table #121: 0 bytes OK
2023/08/25-09:05:19.719168 7f42ae7fc6c0 Delete type=0 #87 2024/03/15-11:37:15.102032 7fee33e006c0 Delete type=0 #119
2023/08/25-09:05:19.719526 7f42ae7fc6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end) 2024/03/15-11:37:15.119287 7fee33e006c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000026 MANIFEST-000058

View File

@ -1,8 +1,8 @@
2023/08/25-09:06:43.332086 7f42affff6c0 Recovering log #24 2024/03/15-12:08:26.306495 7fee3aa006c0 Recovering log #56
2023/08/25-09:06:43.343333 7f42affff6c0 Delete type=3 #22 2024/03/15-12:08:26.316618 7fee3aa006c0 Delete type=3 #54
2023/08/25-09:06:43.343425 7f42affff6c0 Delete type=0 #24 2024/03/15-12:08:26.316680 7fee3aa006c0 Delete type=0 #56
2023/08/25-09:09:02.413816 7f42ae7fc6c0 Level-0 table #29: started 2024/03/15-12:09:03.431830 7fee33e006c0 Level-0 table #61: started
2023/08/25-09:09:02.413868 7f42ae7fc6c0 Level-0 table #29: 0 bytes OK 2024/03/15-12:09:03.431854 7fee33e006c0 Level-0 table #61: 0 bytes OK
2023/08/25-09:09:02.420658 7f42ae7fc6c0 Delete type=0 #27 2024/03/15-12:09:03.438391 7fee33e006c0 Delete type=0 #59
2023/08/25-09:09:02.420945 7f42ae7fc6c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2024/03/15-12:09:03.438645 7fee33e006c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2023/08/25-09:09:02.420984 7f42ae7fc6c0 Manual compaction at level-1 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2024/03/15-12:09:03.438681 7fee33e006c0 Manual compaction at level-1 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/08/25-08:56:40.391655 7f45449ff6c0 Recovering log #20 2024/03/15-11:36:32.800015 7fee3aa006c0 Recovering log #52
2023/08/25-08:56:40.402088 7f45449ff6c0 Delete type=3 #18 2024/03/15-11:36:32.809877 7fee3aa006c0 Delete type=3 #50
2023/08/25-08:56:40.402156 7f45449ff6c0 Delete type=0 #20 2024/03/15-11:36:32.809946 7fee3aa006c0 Delete type=0 #52
2023/08/25-09:05:19.719759 7f42ae7fc6c0 Level-0 table #25: started 2024/03/15-11:37:15.125674 7fee33e006c0 Level-0 table #57: started
2023/08/25-09:05:19.719808 7f42ae7fc6c0 Level-0 table #25: 0 bytes OK 2024/03/15-11:37:15.125696 7fee33e006c0 Level-0 table #57: 0 bytes OK
2023/08/25-09:05:19.726375 7f42ae7fc6c0 Delete type=0 #23 2024/03/15-11:37:15.132809 7fee33e006c0 Delete type=0 #55
2023/08/25-09:05:19.739729 7f42ae7fc6c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2024/03/15-11:37:15.133076 7fee33e006c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2023/08/25-09:05:19.739776 7f42ae7fc6c0 Manual compaction at level-1 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end) 2024/03/15-11:37:15.133134 7fee33e006c0 Manual compaction at level-1 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000090 MANIFEST-000122

View File

@ -1,7 +1,7 @@
2023/08/25-09:06:43.313751 7f45449ff6c0 Recovering log #88 2024/03/15-12:08:26.294104 7fee396006c0 Recovering log #120
2023/08/25-09:06:43.332919 7f45449ff6c0 Delete type=3 #86 2024/03/15-12:08:26.304385 7fee396006c0 Delete type=3 #118
2023/08/25-09:06:43.332977 7f45449ff6c0 Delete type=0 #88 2024/03/15-12:08:26.304465 7fee396006c0 Delete type=0 #120
2023/08/25-09:09:02.396939 7f42ae7fc6c0 Level-0 table #93: started 2024/03/15-12:09:03.425550 7fee33e006c0 Level-0 table #125: started
2023/08/25-09:09:02.396976 7f42ae7fc6c0 Level-0 table #93: 0 bytes OK 2024/03/15-12:09:03.425581 7fee33e006c0 Level-0 table #125: 0 bytes OK
2023/08/25-09:09:02.405091 7f42ae7fc6c0 Delete type=0 #91 2024/03/15-12:09:03.431713 7fee33e006c0 Delete type=0 #123
2023/08/25-09:09:02.420883 7f42ae7fc6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end) 2024/03/15-12:09:03.438625 7fee33e006c0 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/25-08:56:40.374817 7f42aeffd6c0 Recovering log #84 2024/03/15-11:36:32.787457 7fee396006c0 Recovering log #116
2023/08/25-08:56:40.392507 7f42aeffd6c0 Delete type=3 #82 2024/03/15-11:36:32.797573 7fee396006c0 Delete type=3 #114
2023/08/25-08:56:40.392560 7f42aeffd6c0 Delete type=0 #84 2024/03/15-11:36:32.797918 7fee396006c0 Delete type=0 #116
2023/08/25-09:05:19.732932 7f42ae7fc6c0 Level-0 table #89: started 2024/03/15-11:37:15.119298 7fee33e006c0 Level-0 table #121: started
2023/08/25-09:05:19.732977 7f42ae7fc6c0 Level-0 table #89: 0 bytes OK 2024/03/15-11:37:15.119321 7fee33e006c0 Level-0 table #121: 0 bytes OK
2023/08/25-09:05:19.739465 7f42ae7fc6c0 Delete type=0 #87 2024/03/15-11:37:15.125565 7fee33e006c0 Delete type=0 #119
2023/08/25-09:05:19.739765 7f42ae7fc6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end) 2024/03/15-11:37:15.133015 7fee33e006c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)

BIN
packs/scenes/000005.ldb Normal file

Binary file not shown.

1
packs/scenes/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000006

8
packs/scenes/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/03/15-12:08:26.281286 7fee396006c0 Recovering log #4
2024/03/15-12:08:26.291076 7fee396006c0 Delete type=3 #2
2024/03/15-12:08:26.291124 7fee396006c0 Delete type=0 #4
2024/03/15-12:09:03.418395 7fee33e006c0 Level-0 table #9: started
2024/03/15-12:09:03.418438 7fee33e006c0 Level-0 table #9: 0 bytes OK
2024/03/15-12:09:03.425447 7fee33e006c0 Delete type=0 #7
2024/03/15-12:09:03.438599 7fee33e006c0 Manual compaction at level-0 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)
2024/03/15-12:09:03.438664 7fee33e006c0 Manual compaction at level-1 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)

5
packs/scenes/LOG.old Normal file
View File

@ -0,0 +1,5 @@
2024/03/15-11:36:32.784966 7fee396006c0 Delete type=3 #1
2024/03/15-11:37:15.108793 7fee33e006c0 Level-0 table #5: started
2024/03/15-11:37:15.112379 7fee33e006c0 Level-0 table #5: 1287 bytes OK
2024/03/15-11:37:15.119185 7fee33e006c0 Delete type=0 #3
2024/03/15-11:37:15.125663 7fee33e006c0 Manual compaction at level-0 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

View File

@ -1 +1 @@
MANIFEST-000090 MANIFEST-000122

View File

@ -1,7 +1,7 @@
2023/08/25-09:06:43.291938 7f42aeffd6c0 Recovering log #88 2024/03/15-12:08:26.233305 7fee3aa006c0 Recovering log #120
2023/08/25-09:06:43.311799 7f42aeffd6c0 Delete type=3 #86 2024/03/15-12:08:26.243263 7fee3aa006c0 Delete type=3 #118
2023/08/25-09:06:43.311854 7f42aeffd6c0 Delete type=0 #88 2024/03/15-12:08:26.243340 7fee3aa006c0 Delete type=0 #120
2023/08/25-09:09:02.334209 7f42ae7fc6c0 Level-0 table #93: started 2024/03/15-12:09:03.377683 7fee33e006c0 Level-0 table #125: started
2023/08/25-09:09:02.334296 7f42ae7fc6c0 Level-0 table #93: 0 bytes OK 2024/03/15-12:09:03.377713 7fee33e006c0 Level-0 table #125: 0 bytes OK
2023/08/25-09:09:02.346293 7f42ae7fc6c0 Delete type=0 #91 2024/03/15-12:09:03.383693 7fee33e006c0 Delete type=0 #123
2023/08/25-09:09:02.364301 7f42ae7fc6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end) 2024/03/15-12:09:03.383828 7fee33e006c0 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/25-08:56:40.355478 7f42affff6c0 Recovering log #84 2024/03/15-11:36:32.732586 7fee3a0006c0 Recovering log #116
2023/08/25-08:56:40.372234 7f42affff6c0 Delete type=3 #82 2024/03/15-11:36:32.741979 7fee3a0006c0 Delete type=3 #114
2023/08/25-08:56:40.372332 7f42affff6c0 Delete type=0 #84 2024/03/15-11:36:32.742032 7fee3a0006c0 Delete type=0 #116
2023/08/25-09:05:19.704735 7f42ae7fc6c0 Level-0 table #89: started 2024/03/15-11:37:15.078700 7fee33e006c0 Level-0 table #121: started
2023/08/25-09:05:19.704765 7f42ae7fc6c0 Level-0 table #89: 0 bytes OK 2024/03/15-11:37:15.078734 7fee33e006c0 Level-0 table #121: 0 bytes OK
2023/08/25-09:05:19.712218 7f42ae7fc6c0 Delete type=0 #87 2024/03/15-11:37:15.085219 7fee33e006c0 Delete type=0 #119
2023/08/25-09:05:19.719509 7f42ae7fc6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end) 2024/03/15-11:37:15.085375 7fee33e006c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)

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

View File

@ -1 +1 @@
MANIFEST-000090 MANIFEST-000122

View File

@ -1,7 +1,7 @@
2023/08/25-09:06:43.312129 7f42af7fe6c0 Recovering log #88 2024/03/15-12:08:26.264913 7fee3aa006c0 Recovering log #120
2023/08/25-09:06:43.329832 7f42af7fe6c0 Delete type=3 #86 2024/03/15-12:08:26.279081 7fee3aa006c0 Delete type=3 #118
2023/08/25-09:06:43.329881 7f42af7fe6c0 Delete type=0 #88 2024/03/15-12:08:26.279134 7fee3aa006c0 Delete type=0 #120
2023/08/25-09:09:02.405626 7f42ae7fc6c0 Level-0 table #93: started 2024/03/15-12:09:03.412189 7fee33e006c0 Level-0 table #125: started
2023/08/25-09:09:02.405697 7f42ae7fc6c0 Level-0 table #93: 0 bytes OK 2024/03/15-12:09:03.412214 7fee33e006c0 Level-0 table #125: 0 bytes OK
2023/08/25-09:09:02.413585 7f42ae7fc6c0 Delete type=0 #91 2024/03/15-12:09:03.418237 7fee33e006c0 Delete type=0 #123
2023/08/25-09:09:02.420919 7f42ae7fc6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end) 2024/03/15-12:09:03.431821 7fee33e006c0 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/25-08:56:40.373273 7f42af7fe6c0 Recovering log #84 2024/03/15-11:36:32.757613 7fee3a0006c0 Recovering log #116
2023/08/25-08:56:40.389363 7f42af7fe6c0 Delete type=3 #82 2024/03/15-11:36:32.768867 7fee3a0006c0 Delete type=3 #114
2023/08/25-08:56:40.389459 7f42af7fe6c0 Delete type=0 #84 2024/03/15-11:36:32.768966 7fee3a0006c0 Delete type=0 #116
2023/08/25-09:05:19.726495 7f42ae7fc6c0 Level-0 table #89: started 2024/03/15-11:37:15.102318 7fee33e006c0 Level-0 table #121: started
2023/08/25-09:05:19.726528 7f42ae7fc6c0 Level-0 table #89: 0 bytes OK 2024/03/15-11:37:15.102363 7fee33e006c0 Level-0 table #121: 0 bytes OK
2023/08/25-09:05:19.732766 7f42ae7fc6c0 Delete type=0 #87 2024/03/15-11:37:15.108565 7fee33e006c0 Delete type=0 #119
2023/08/25-09:05:19.739752 7f42ae7fc6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end) 2024/03/15-11:37:15.125646 7fee33e006c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)

View File

@ -62,6 +62,18 @@
"ASSISTANT": "OWNER" "ASSISTANT": "OWNER"
} }
}, },
{
"label": "Scenes",
"type": "Scene",
"name": "scenes",
"path": "packs/scenes",
"system": "fvtt-ecryme",
"flags": {},
"ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
},
{ {
"label": "Maneuvers", "label": "Maneuvers",
"type": "Item", "type": "Item",
@ -111,7 +123,7 @@
}, },
"title": "Ecryme, le Jeu de Rôles", "title": "Ecryme, le Jeu de Rôles",
"url": "https://www.uberwald.me/gitea/public/fvtt-ecryme", "url": "https://www.uberwald.me/gitea/public/fvtt-ecryme",
"version": "11.0.35", "version": "11.0.38",
"download": "https://www.uberwald.me/gitea/public/fvtt-ecryme/archive/fvtt-ecryme-v11.0.35.zip", "download": "https://www.uberwald.me/gitea/public/fvtt-ecryme/archive/fvtt-ecryme-v11.0.38.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

@ -267,6 +267,7 @@
"effect": 0 "effect": 0
}, },
"specialization": { "specialization": {
"bonus": 2,
"templates": [ "templates": [
"common" "common"
], ],

View File

@ -102,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}}

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>

View File

@ -2,6 +2,18 @@
"label": "Equipement", "label": "Equipement",
"mapping": { "mapping": {
"description": "system.description" "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": { "entries": {
"Absinthe": { "Absinthe": {

View File

@ -2,6 +2,11 @@
"label": "Spécialisation", "label": "Spécialisation",
"mapping": { "mapping": {
"description": "system.description" "description": "system.description"
},
"folders": {
"Mental": "Mentale",
"Physical": "Physique",
"Spocial": "Sociale"
}, },
"entries": { "entries": {
"Aircraft": { "Aircraft": {

View File

@ -2,6 +2,9 @@
"label": "Traits", "label": "Traits",
"mapping": { "mapping": {
"description": "system.description" "description": "system.description"
},
"folders": {
"Maneuvers": "Manoeuvres"
}, },
"entries": { "entries": {
"Ability to stay calm": { "Ability to stay calm": {