Compare commits

...

16 Commits

69 changed files with 432 additions and 234 deletions

View File

@ -28,9 +28,9 @@ jobs:
files: 'system.json'
env:
version: ${{steps.get_version.outputs.version-without-v}}
url: https://www.uberwald.me/gitea/uberwald/fvtt-ecryme
manifest: https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/releases/latest/module.json
download: https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/releases/download/${{github.event.release.tag_name}}/fvtt-ecryme.zip
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: |

View File

@ -1,10 +1,12 @@
# 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.
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
@ -13,7 +15,7 @@ The game system in Foundry offers the following features :
- 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")

View File

@ -1,3 +1,24 @@
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

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: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 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",
"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",
@ -51,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",
@ -160,7 +163,12 @@
"ideals": "Ideals",
"politic": "Political ideal",
"boheme": "Boheme",
"annencybonus": "Annency bonus"
"annencybonus": "Annency bonus",
"bornplace": "Born place",
"residence": "Residence",
"origin": "Origin",
"childhood": "Childhood",
"bonus": "Bonus"
}
}
}

View File

@ -33,7 +33,9 @@
"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",
@ -52,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",
@ -161,7 +164,12 @@
"ideals": "Idéaux",
"politic": "Idéaux politiques",
"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,16 +46,16 @@ export class EcrymeActorSheet extends ActorSheet {
maneuvers: this.actor.getManeuvers(),
impactsMalus: this.actor.getImpactsMalus(),
archetype: duplicate(this.actor.getArchetype()),
equipements: this.actor.getEquipments(),
equipments: this.actor.getEquipments(),
hasCephaly: EcrymeUtility.hasCephaly(),
hasBoheme: EcrymeUtility.hasBoheme(),
hasAmertume: EcrymeUtility.hasAmertume(),
cephalySkills: this.actor.getCephalySkills(),
subActors: 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")

View File

@ -200,7 +200,7 @@ export class EcrymeActor extends Actor {
/* ------------------------------------------- */
getEquipments() {
return this.items.filter(item => item.type == 'equipement')
return this.items.filter(item => item.type == 'equipment')
}
/* ------------------------------------------- */
@ -387,14 +387,25 @@ export class EcrymeActor extends Actor {
/* -------------------------------------------- */
getCommonSkill(categKey, skillKey) {
let skill = this.system.skills[categKey].skilllist[skillKey]
let rollData = this.getCommonRollData()
skill = duplicate(skill)
// 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 = duplicate(skill)
skill.spec = this.getSpecializations(skillKey)
}
skill.categKey = categKey
skill.skillKey = skillKey
skill.spec = this.getSpecializations(skillKey)
rollData.skill = skill
rollData.img = skill.img
rollData.impactMalus = this.getImpactMalus(categKey)
@ -410,6 +421,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 = 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)

View File

@ -275,7 +275,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 +300,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 => {
@ -409,10 +410,15 @@ export class EcrymeUtility {
/* -------------------------------------------- */
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)
}
}
}
@ -516,7 +522,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 +531,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,7 +539,7 @@ 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
@ -631,12 +637,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 });
}
@ -656,18 +660,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;

View File

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

View File

@ -67,7 +67,6 @@ Hooks.once("init", async function () {
EcrymeUtility.init()
console.log("Babele INIT!")
Babele.get().setSystemTranslationsDir("translated")
});
@ -84,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();
}
}
@ -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();
EcrymeUtility.ready()
EcrymeCharacterSummary.ready()
EcrymeUtility.ready();
EcrymeCharacterSummary.ready();
importDefaultScene();
})

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000146

View File

@ -1,7 +1,7 @@
2023/08/22-08:18:29.415756 7f4f609fd6c0 Recovering log #68
2023/08/22-08:18:29.426603 7f4f609fd6c0 Delete type=3 #66
2023/08/22-08:18:29.426655 7f4f609fd6c0 Delete type=0 #68
2023/08/22-08:21:44.533362 7f4ccb7fe6c0 Level-0 table #73: started
2023/08/22-08:21:44.533404 7f4ccb7fe6c0 Level-0 table #73: 0 bytes OK
2023/08/22-08:21:44.540850 7f4ccb7fe6c0 Delete type=0 #71
2023/08/22-08:21:44.560122 7f4ccb7fe6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
2024/03/19-08:59:49.412009 7fe1974006c0 Recovering log #144
2024/03/19-08:59:49.422002 7fe1974006c0 Delete type=3 #142
2024/03/19-08:59:49.422641 7fe1974006c0 Delete type=0 #144
2024/03/19-09:13:11.433053 7fe18fe006c0 Level-0 table #149: started
2024/03/19-09:13:11.433076 7fe18fe006c0 Level-0 table #149: 0 bytes OK
2024/03/19-09:13:11.439309 7fe18fe006c0 Delete type=0 #147
2024/03/19-09:13:11.449116 7fe18fe006c0 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/17-08:30:06.224452 7fa0dcff96c0 Recovering log #64
2023/08/17-08:30:06.244297 7fa0dcff96c0 Delete type=3 #62
2023/08/17-08:30:06.244357 7fa0dcff96c0 Delete type=0 #64
2023/08/17-08:31:03.278842 7f9e3ffff6c0 Level-0 table #69: started
2023/08/17-08:31:03.278870 7f9e3ffff6c0 Level-0 table #69: 0 bytes OK
2023/08/17-08:31:03.285336 7f9e3ffff6c0 Delete type=0 #67
2023/08/17-08:31:03.285445 7f9e3ffff6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
2024/03/19-08:26:23.599709 7fe196a006c0 Recovering log #140
2024/03/19-08:26:23.609740 7fe196a006c0 Delete type=3 #138
2024/03/19-08:26:23.610001 7fe196a006c0 Delete type=0 #140
2024/03/19-08:59:38.616836 7fe18fe006c0 Level-0 table #145: started
2024/03/19-08:59:38.616860 7fe18fe006c0 Level-0 table #145: 0 bytes OK
2024/03/19-08:59:38.622855 7fe18fe006c0 Delete type=0 #143
2024/03/19-08:59:38.629513 7fe18fe006c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/help/000074.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000006
MANIFEST-000083

View File

@ -1,8 +1,8 @@
2023/08/22-08:18:29.469195 7f4f611fe6c0 Recovering log #4
2023/08/22-08:18:29.483356 7f4f611fe6c0 Delete type=3 #2
2023/08/22-08:18:29.483413 7f4f611fe6c0 Delete type=0 #4
2023/08/22-08:21:44.524795 7f4ccb7fe6c0 Level-0 table #9: started
2023/08/22-08:21:44.524832 7f4ccb7fe6c0 Level-0 table #9: 0 bytes OK
2023/08/22-08:21:44.533220 7f4ccb7fe6c0 Delete type=0 #7
2023/08/22-08:21:44.560099 7f4ccb7fe6c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2023/08/22-08:21:44.560175 7f4ccb7fe6c0 Manual compaction at level-1 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2024/03/19-08:59:49.466407 7fe1956006c0 Recovering log #81
2024/03/19-08:59:49.476751 7fe1956006c0 Delete type=3 #79
2024/03/19-08:59:49.476810 7fe1956006c0 Delete type=0 #81
2024/03/19-09:13:11.469451 7fe18fe006c0 Level-0 table #86: started
2024/03/19-09:13:11.469477 7fe18fe006c0 Level-0 table #86: 0 bytes OK
2024/03/19-09:13:11.476330 7fe18fe006c0 Delete type=0 #84
2024/03/19-09:13:11.476450 7fe18fe006c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2024/03/19-09:13:11.476467 7fe18fe006c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)

View File

@ -1,5 +1,8 @@
2023/08/17-08:30:06.273842 7fa0dd7fa6c0 Delete type=3 #1
2023/08/17-08:31:03.298799 7f9e3ffff6c0 Level-0 table #5: started
2023/08/17-08:31:03.302135 7f9e3ffff6c0 Level-0 table #5: 2278 bytes OK
2023/08/17-08:31:03.309094 7f9e3ffff6c0 Delete type=0 #3
2023/08/17-08:31:03.309619 7f9e3ffff6c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2024/03/19-08:26:23.652790 7fe1974006c0 Recovering log #77
2024/03/19-08:26:23.662568 7fe1974006c0 Delete type=3 #75
2024/03/19-08:26:23.662632 7fe1974006c0 Delete type=0 #77
2024/03/19-08:59:38.642890 7fe18fe006c0 Level-0 table #82: started
2024/03/19-08:59:38.642925 7fe18fe006c0 Level-0 table #82: 0 bytes OK
2024/03/19-08:59:38.649550 7fe18fe006c0 Delete type=0 #80
2024/03/19-08:59:38.649669 7fe18fe006c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2024/03/19-08:59:38.649688 7fe18fe006c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/help/MANIFEST-000083 Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000146

View File

@ -1,7 +1,7 @@
2023/08/22-08:18:29.434436 7f4ccbfff6c0 Recovering log #68
2023/08/22-08:18:29.469056 7f4ccbfff6c0 Delete type=3 #66
2023/08/22-08:18:29.469125 7f4ccbfff6c0 Delete type=0 #68
2023/08/22-08:21:44.540974 7f4ccb7fe6c0 Level-0 table #73: started
2023/08/22-08:21:44.541011 7f4ccb7fe6c0 Level-0 table #73: 0 bytes OK
2023/08/22-08:21:44.552192 7f4ccb7fe6c0 Delete type=0 #71
2023/08/22-08:21:44.560142 7f4ccb7fe6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
2024/03/19-08:59:49.453929 7fe1974006c0 Recovering log #144
2024/03/19-08:59:49.464351 7fe1974006c0 Delete type=3 #142
2024/03/19-08:59:49.464411 7fe1974006c0 Delete type=0 #144
2024/03/19-09:13:11.463206 7fe18fe006c0 Level-0 table #149: started
2024/03/19-09:13:11.463229 7fe18fe006c0 Level-0 table #149: 0 bytes OK
2024/03/19-09:13:11.469351 7fe18fe006c0 Delete type=0 #147
2024/03/19-09:13:11.476419 7fe18fe006c0 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/17-08:30:06.246354 7fa0de7fc6c0 Recovering log #64
2023/08/17-08:30:06.257748 7fa0de7fc6c0 Delete type=3 #62
2023/08/17-08:30:06.257814 7fa0de7fc6c0 Delete type=0 #64
2023/08/17-08:31:03.285529 7f9e3ffff6c0 Level-0 table #69: started
2023/08/17-08:31:03.285609 7f9e3ffff6c0 Level-0 table #69: 0 bytes OK
2023/08/17-08:31:03.291891 7f9e3ffff6c0 Delete type=0 #67
2023/08/17-08:31:03.309552 7f9e3ffff6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
2024/03/19-08:26:23.639789 7fe196a006c0 Recovering log #140
2024/03/19-08:26:23.649226 7fe196a006c0 Delete type=3 #138
2024/03/19-08:26:23.649311 7fe196a006c0 Delete type=0 #140
2024/03/19-08:59:38.636120 7fe18fe006c0 Level-0 table #145: started
2024/03/19-08:59:38.636145 7fe18fe006c0 Level-0 table #145: 0 bytes OK
2024/03/19-08:59:38.642769 7fe18fe006c0 Delete type=0 #143
2024/03/19-08:59:38.649658 7fe18fe006c0 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-000030

8
packs/scenes/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/03/19-08:59:49.439960 7fe1974006c0 Recovering log #28
2024/03/19-08:59:49.450519 7fe1974006c0 Delete type=3 #26
2024/03/19-08:59:49.450564 7fe1974006c0 Delete type=0 #28
2024/03/19-09:13:11.449133 7fe18fe006c0 Level-0 table #33: started
2024/03/19-09:13:11.449161 7fe18fe006c0 Level-0 table #33: 0 bytes OK
2024/03/19-09:13:11.455581 7fe18fe006c0 Delete type=0 #31
2024/03/19-09:13:11.469432 7fe18fe006c0 Manual compaction at level-0 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)
2024/03/19-09:13:11.476429 7fe18fe006c0 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
View File

@ -0,0 +1,8 @@
2024/03/19-08:26:23.626739 7fe196a006c0 Recovering log #24
2024/03/19-08:26:23.637137 7fe196a006c0 Delete type=3 #22
2024/03/19-08:26:23.637185 7fe196a006c0 Delete type=0 #24
2024/03/19-08:59:38.629525 7fe18fe006c0 Level-0 table #29: started
2024/03/19-08:59:38.629567 7fe18fe006c0 Level-0 table #29: 0 bytes OK
2024/03/19-08:59:38.635979 7fe18fe006c0 Delete type=0 #27
2024/03/19-08:59:38.649644 7fe18fe006c0 Manual compaction at level-0 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)
2024/03/19-08:59:38.649696 7fe18fe006c0 Manual compaction at level-1 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000146

View File

@ -1,7 +1,7 @@
2023/08/22-08:18:29.415768 7f4f619ff6c0 Recovering log #68
2023/08/22-08:18:29.430277 7f4f619ff6c0 Delete type=3 #66
2023/08/22-08:18:29.430403 7f4f619ff6c0 Delete type=0 #68
2023/08/22-08:21:44.516245 7f4ccb7fe6c0 Level-0 table #73: started
2023/08/22-08:21:44.516287 7f4ccb7fe6c0 Level-0 table #73: 0 bytes OK
2023/08/22-08:21:44.524497 7f4ccb7fe6c0 Delete type=0 #71
2023/08/22-08:21:44.524682 7f4ccb7fe6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
2024/03/19-08:59:49.399329 7fe1956006c0 Recovering log #144
2024/03/19-08:59:49.409751 7fe1956006c0 Delete type=3 #142
2024/03/19-08:59:49.409855 7fe1956006c0 Delete type=0 #144
2024/03/19-09:13:11.426894 7fe18fe006c0 Level-0 table #149: started
2024/03/19-09:13:11.426924 7fe18fe006c0 Level-0 table #149: 0 bytes OK
2024/03/19-09:13:11.432936 7fe18fe006c0 Delete type=0 #147
2024/03/19-09:13:11.439402 7fe18fe006c0 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/17-08:30:06.224380 7fa0dd7fa6c0 Recovering log #64
2023/08/17-08:30:06.241271 7fa0dd7fa6c0 Delete type=3 #62
2023/08/17-08:30:06.241353 7fa0dd7fa6c0 Delete type=0 #64
2023/08/17-08:31:03.262782 7f9e3ffff6c0 Level-0 table #69: started
2023/08/17-08:31:03.262832 7f9e3ffff6c0 Level-0 table #69: 0 bytes OK
2023/08/17-08:31:03.268889 7f9e3ffff6c0 Delete type=0 #67
2023/08/17-08:31:03.285415 7f9e3ffff6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
2024/03/19-08:26:23.586366 7fe1974006c0 Recovering log #140
2024/03/19-08:26:23.596561 7fe1974006c0 Delete type=3 #138
2024/03/19-08:26:23.596616 7fe1974006c0 Delete type=0 #140
2024/03/19-08:59:38.610581 7fe18fe006c0 Level-0 table #145: started
2024/03/19-08:59:38.610610 7fe18fe006c0 Level-0 table #145: 0 bytes OK
2024/03/19-08:59:38.616719 7fe18fe006c0 Delete type=0 #143
2024/03/19-08:59:38.629493 7fe18fe006c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)

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

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000146

View File

@ -1,7 +1,7 @@
2023/08/22-08:18:29.432772 7f4f609fd6c0 Recovering log #68
2023/08/22-08:18:29.459891 7f4f609fd6c0 Delete type=3 #66
2023/08/22-08:18:29.460035 7f4f609fd6c0 Delete type=0 #68
2023/08/22-08:21:44.552339 7f4ccb7fe6c0 Level-0 table #73: started
2023/08/22-08:21:44.552379 7f4ccb7fe6c0 Level-0 table #73: 0 bytes OK
2023/08/22-08:21:44.559932 7f4ccb7fe6c0 Delete type=0 #71
2023/08/22-08:21:44.560159 7f4ccb7fe6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
2024/03/19-08:59:49.425377 7fe1956006c0 Recovering log #144
2024/03/19-08:59:49.436099 7fe1956006c0 Delete type=3 #142
2024/03/19-08:59:49.436163 7fe1956006c0 Delete type=0 #144
2024/03/19-09:13:11.455720 7fe18fe006c0 Level-0 table #149: started
2024/03/19-09:13:11.455760 7fe18fe006c0 Level-0 table #149: 0 bytes OK
2024/03/19-09:13:11.463106 7fe18fe006c0 Delete type=0 #147
2024/03/19-09:13:11.469442 7fe18fe006c0 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/17-08:30:06.243329 7fa0ddffb6c0 Recovering log #64
2023/08/17-08:30:06.257748 7fa0ddffb6c0 Delete type=3 #62
2023/08/17-08:30:06.257816 7fa0ddffb6c0 Delete type=0 #64
2023/08/17-08:31:03.292149 7f9e3ffff6c0 Level-0 table #69: started
2023/08/17-08:31:03.292214 7f9e3ffff6c0 Level-0 table #69: 0 bytes OK
2023/08/17-08:31:03.298635 7f9e3ffff6c0 Delete type=0 #67
2023/08/17-08:31:03.309589 7f9e3ffff6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
2024/03/19-08:26:23.614041 7fe1974006c0 Recovering log #140
2024/03/19-08:26:23.624059 7fe1974006c0 Delete type=3 #138
2024/03/19-08:26:23.624114 7fe1974006c0 Delete type=0 #140
2024/03/19-08:59:38.622981 7fe18fe006c0 Level-0 table #145: started
2024/03/19-08:59:38.623003 7fe18fe006c0 Level-0 table #145: 0 bytes OK
2024/03/19-08:59:38.629342 7fe18fe006c0 Delete type=0 #143
2024/03/19-08:59:38.636106 7fe18fe006c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)

View 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;

View File

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

View File

@ -62,6 +62,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",
@ -88,7 +100,7 @@
}
],
"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"
@ -110,8 +122,8 @@
]
},
"title": "Ecryme, le Jeu de Rôles",
"url": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme",
"version": "11.0.20",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/archive/fvtt-ecryme-v11.0.20.zip",
"url": "https://www.uberwald.me/gitea/public/fvtt-ecryme",
"version": "11.1.0",
"download": "https://www.uberwald.me/gitea/public/fvtt-ecryme/archive/fvtt-ecryme-v11.1.0.zip",
"background": "systems/fvtt-ecryme/images/assets/ecryme_extract_panel_01.webp"
}

View File

@ -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",
@ -266,6 +270,7 @@
"effect": 0
},
"specialization": {
"bonus": 2,
"templates": [
"common"
],

View File

@ -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">&nbsp;</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">&nbsp;</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>,&nbsp;</label>
{{/each}}
</li>
</ul>
</div>
@ -72,10 +85,33 @@
<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">
{{#select category.pnjvalue}}
{{#each @root.config.skillLevel as |level key| }}
<option value="{{level}}">{{level}}</option>
{{/each}}
{{/select}}
</select>
{{/if}}
</h3>
</span>
</li>
{{#each category.skilllist as |skill skillkey|}}
<li class="item flexrow list-item">
<span class="item-name-label-long">
@ -100,15 +136,16 @@
<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}}
@ -155,7 +192,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 +311,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">&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>
<label class="item-field-label-medium">{{localize "ECRY.ui.weight"}}</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
@ -331,11 +334,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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
@ -345,36 +349,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">&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>
</div>
@ -386,7 +360,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 +369,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>

View File

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

View File

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

View File

@ -22,14 +22,21 @@
</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">

View File

@ -30,6 +30,11 @@
</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>

View File

@ -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": {

View File

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

View File

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