Compare commits

..

29 Commits

Author SHA1 Message Date
2450dce46c Fix traits bonus/malus and pictures in journals 2024-03-18 21:57:15 +01:00
67c1066194 Fix traits bonus/malus and pictures in journals 2024-03-18 21:56:10 +01:00
65fe498572 Fix background+landing pages 2024-03-15 12:12:02 +01:00
e1990f88b4 Fix background+landing pages 2024-03-15 12:10:44 +01:00
f99abb0966 Enhance stats 2024-02-08 13:02:57 +01:00
ec6e6be231 Fix confrontation with players 2023-10-12 08:28:30 +02:00
9d26d7bfad Amélirations des specialisations 2023-10-10 20:04:02 +02:00
81848155e5 Amélirations des specialisations 2023-10-10 20:02:13 +02:00
6778a9aa0b Release fix 2023-08-26 21:49:32 +02:00
63aa49c77f Fix CI/CD 2023-08-26 19:18:07 +02:00
0a3265419a Move repo to public area 2023-08-26 09:57:43 +02:00
f5093980b0 Move repo to public area 2023-08-26 09:53:14 +02:00
062a597b70 Various fixes in equipment, biodata 2023-08-25 09:18:45 +02:00
1d0d123947 Various fixes in equipment, biodata 2023-08-25 09:09:21 +02:00
bf94dc30b8 Picture link 2023-08-22 08:35:02 +02:00
fc3b83cfc2 Picture link 2023-08-22 08:34:12 +02:00
19b88c3de9 Add changelog 2023-08-21 15:20:10 +02:00
d669059403 Corrections diverses 2023-08-17 08:31:22 +02:00
45d419115d Needs babele, fix translation, fix margine 2023-08-16 21:17:49 +02:00
b9e2a77e88 Needs babele, fix translation, fix margine 2023-08-16 21:17:34 +02:00
5dca748bf3 v11 ready 2023-08-16 20:52:48 +02:00
98f9e1e2a6 v11 ready 2023-08-16 20:49:26 +02:00
1a90be13be v11 ready 2023-08-16 20:45:23 +02:00
e2f97762b9 Add workflow 2023-08-14 17:39:39 +02:00
de11053a9a Add workflow 2023-08-14 17:02:40 +02:00
3f7ce9918e Add workflow 2023-08-14 16:59:00 +02:00
919147b4af Add workflow 2023-08-14 16:58:18 +02:00
22953744ba Add workflow 2023-08-14 16:55:43 +02:00
6aee41b817 Final import 2023-08-14 16:47:12 +02:00
69 changed files with 470 additions and 220 deletions

54
.gitea/workflows/main.yml Normal file
View File

@@ -0,0 +1,54 @@
name: Release Creation
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner."
#- uses: actions/checkout@v3
- uses: RouxAntoine/checkout@v3.5.4
with:
ref: 'master'
# get part of the tag after the `v`
- name: Extract tag version number
id: get_version
uses: battila7/get-version-action@v2
# Substitute the Manifest and Download URLs in the module.json
- name: Substitute Manifest and Download Links For Versioned Ones
id: sub_manifest_link_version
uses: microsoft/variable-substitution@v1
with:
files: 'system.json'
env:
version: ${{steps.get_version.outputs.version-without-v}}
url: https://www.uberwald.me/gitea/public/fvtt-ecryme
manifest: https://www.uberwald.me/gitea/public/fvtt-ecryme/releases/latest/system.json
download: https://www.uberwald.me/gitea/public/fvtt-ecryme/releases/download/${{github.event.release.tag_name}}/fvtt-ecryme.zip
# Create a zip file with all files required by the module to add to the release
- run: |
apt update -y
apt install -y zip
- run: zip -r ./fvtt-ecryme.zip system.json template.json README.md LICENSE.txt fonts/ images/ lang/ modules/ packs/ styles/ templates/ translated/
- name: setup go
uses: https://github.com/actions/setup-go@v4
with:
go-version: '>=1.20.1'
- name: Use Go Action
id: use-go-action
uses: https://gitea.com/actions/release-action@main
with:
files: |-
./fvtt-ecryme.zip
system.json
api_key: '${{secrets.RELEASE_TOKEN_UBERWALD}}'

7
LICENSE.txt Normal file
View File

@@ -0,0 +1,7 @@
Copyright 2023 Open Sesame Games
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -1,6 +1,43 @@
# Système Foundry pour Ecryme v2 (French RPG, Open Sesam Games, Official) # Ecryme v2 system for FoundryVTT (French RPG, Open Sesam Games, Official)
# Developmement
Uberwald This is a base game system with functionnal character sheets for the game Ecryme, powered by the Engrenage system.
You can join the kickstarter and obtain the base books here : https://www.kickstarter.com/projects/osg-us/ecryme
# System overview
The game system in Foundry offers the following features :
- PC/NPC sheet
- Skill rolls
- Cephaly rolls (with Anency support)
- Confrontation management, with detailed result in the chat card
- Weapon rolls
- Trait management, with Spleen and Ideal also.
- Compendiums of items for the game
![System Snapshot](https://www.lahiette.com/leratierbretonnien/wp-content/uploads/2023/08/ecryme_snapshot_01.webp "System Snapshot")
# Contributions
- Original code realised by Uberwald (https://www.uberwald.me/)
# English translation
English translation by Conal Longden and Ian McClung
# Copyright mentions
Copyright 2023 Open Sesame Games
All rights reserved
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Ecryme is a game written by Alexandre Clavel and Samuel Metzener, in a universe created by Mathieu gaborit. All of the aforementionned authors retain there moral rights regarding this work in both print and digital formats.
# Requests or Problems
Please report any requests or problems you have at contact@open-sesame.games

28
changelog.md Normal file
View File

@@ -0,0 +1,28 @@
v11.0.39
- Modification sur la prise en compte des traits en bonus/malus
- Correction sur les images de l'aide intégrée FR
v11.0.38
- Corrections sur les champs background/notes/equipement libre
- Taduction des répertoires
- Ajout de 2 landing pages
v11.0.36
- Enable deletion specialization
- Custome bonus for specializations
- Specialization direct rolls
v11.0.31
Add profession, fix equipment tab and add missing translation
v11.0.30
Snapshot and more detailed README
v11.0.28
Initial release

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

@@ -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,16 +46,16 @@ 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(),
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

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

@@ -275,7 +275,7 @@ export class EcrymeUtility {
let message = game.messages.get(li.attr("data-message-id")) let message = game.messages.get(li.attr("data-message-id"))
let rollData = message.getFlag("world", "rolldata") let rollData = message.getFlag("world", "rolldata")
//console.log(">>>>>>>>>>>>>>>>>>>>>>>>>> Menu !!!!", 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 true
} }
return false return false
@@ -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) {
@@ -525,7 +531,7 @@ export class EcrymeUtility {
let trait = actor.getTrait(id) let trait = actor.getTrait(id)
console.log(trait, id) console.log(trait, id)
rollData.traitsBonusList.push(trait) rollData.traitsBonusList.push(trait)
rollData.bonusMalusTraits += trait.system.level rollData.bonusMalusTraits += Math.abs(trait.system.level)
} }
} }
if (rollData.traitsMalus && rollData.traitsMalus.length > 0) { if (rollData.traitsMalus && rollData.traitsMalus.length > 0) {
@@ -533,7 +539,7 @@ export class EcrymeUtility {
for (let id of rollData.traitsMalus) { for (let id of rollData.traitsMalus) {
let trait = actor.getTrait(id) let trait = actor.getTrait(id)
rollData.traitsMalusList.push(trait) rollData.traitsMalusList.push(trait)
rollData.bonusMalusTraits -= trait.system.level rollData.bonusMalusTraits -= Math.abs(trait.system.level)
} }
} }
diceFormula += "+" + rollData.bonusMalusTraits diceFormula += "+" + rollData.bonusMalusTraits
@@ -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

@@ -67,8 +67,7 @@ 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-000054 MANIFEST-000134

View File

@@ -1,7 +1,7 @@
2023/08/08-18:04:51.701446 7f5afcdf86c0 Recovering log #52 2024/03/18-21:27:36.619259 7fb017e006c0 Recovering log #132
2023/08/08-18:04:51.711602 7f5afcdf86c0 Delete type=3 #50 2024/03/18-21:27:36.630215 7fb017e006c0 Delete type=3 #130
2023/08/08-18:04:51.711652 7f5afcdf86c0 Delete type=0 #52 2024/03/18-21:27:36.630317 7fb017e006c0 Delete type=0 #132
2023/08/08-18:04:59.546696 7f58677fe6c0 Level-0 table #57: started 2024/03/18-21:44:13.762166 7fb015a006c0 Level-0 table #137: started
2023/08/08-18:04:59.546715 7f58677fe6c0 Level-0 table #57: 0 bytes OK 2024/03/18-21:44:13.762215 7fb015a006c0 Level-0 table #137: 0 bytes OK
2023/08/08-18:04:59.552809 7f58677fe6c0 Delete type=0 #55 2024/03/18-21:44:13.768765 7fb015a006c0 Delete type=0 #135
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) 2024/03/18-21:44:13.775818 7fb015a006c0 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 2024/03/15-16:29:29.461394 7f7df20006c0 Recovering log #128
2023/08/08-17:50:40.655447 7f5afd5f96c0 Delete type=3 #46 2024/03/15-16:29:29.471348 7f7df20006c0 Delete type=3 #126
2023/08/08-17:50:40.655509 7f5afd5f96c0 Delete type=0 #48 2024/03/15-16:29:29.471493 7f7df20006c0 Delete type=0 #128
2023/08/08-18:04:06.340910 7f58677fe6c0 Level-0 table #53: started 2024/03/15-16:35:28.397309 7f7debe006c0 Level-0 table #133: started
2023/08/08-18:04:06.340947 7f58677fe6c0 Level-0 table #53: 0 bytes OK 2024/03/15-16:35:28.397348 7f7debe006c0 Level-0 table #133: 0 bytes OK
2023/08/08-18:04:06.347333 7f58677fe6c0 Delete type=0 #51 2024/03/15-16:35:28.403860 7f7debe006c0 Delete type=0 #131
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) 2024/03/15-16:35:28.411176 7f7debe006c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)

BIN
packs/help/000074.ldb Normal file

Binary file not shown.

1
packs/help/CURRENT Normal file
View File

@@ -0,0 +1 @@
MANIFEST-000070

15
packs/help/LOG Normal file
View File

@@ -0,0 +1,15 @@
2024/03/18-21:27:36.675619 7fb0174006c0 Recovering log #68
2024/03/18-21:27:36.685388 7fb0174006c0 Delete type=3 #66
2024/03/18-21:27:36.685495 7fb0174006c0 Delete type=0 #68
2024/03/18-21:44:13.790087 7fb015a006c0 Level-0 table #73: started
2024/03/18-21:44:13.801144 7fb015a006c0 Level-0 table #73: 2207 bytes OK
2024/03/18-21:44:13.808000 7fb015a006c0 Delete type=0 #71
2024/03/18-21:44:13.808225 7fb015a006c0 Manual compaction at level-0 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2024/03/18-21:44:13.808250 7fb015a006c0 Manual compaction at level-1 from '!journal!wooTFYjEwh83FwgT' @ 72057594037927935 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 10 : 1
2024/03/18-21:44:13.808256 7fb015a006c0 Compacting 1@1 + 1@2 files
2024/03/18-21:44:13.811516 7fb015a006c0 Generated table #74@1: 4 keys, 2136 bytes
2024/03/18-21:44:13.811547 7fb015a006c0 Compacted 1@1 + 1@2 files => 2136 bytes
2024/03/18-21:44:13.817935 7fb015a006c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2024/03/18-21:44:13.818041 7fb015a006c0 Delete type=2 #5
2024/03/18-21:44:13.818166 7fb015a006c0 Delete type=2 #73
2024/03/18-21:44:13.818271 7fb015a006c0 Manual compaction at level-1 from '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 10 : 1 .. '!journal.pages!wooTFYjEwh83FwgT.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)

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

@@ -0,0 +1,8 @@
2024/03/15-16:29:29.511445 7f7df34006c0 Recovering log #64
2024/03/15-16:29:29.522076 7f7df34006c0 Delete type=3 #62
2024/03/15-16:29:29.522169 7f7df34006c0 Delete type=0 #64
2024/03/15-16:35:28.411192 7f7debe006c0 Level-0 table #69: started
2024/03/15-16:35:28.411232 7f7debe006c0 Level-0 table #69: 0 bytes OK
2024/03/15-16:35:28.417476 7f7debe006c0 Delete type=0 #67
2024/03/15-16:35:28.424950 7f7debe006c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2024/03/15-16:35:28.424986 7f7debe006c0 Manual compaction at level-1 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)

BIN
packs/help/MANIFEST-000070 Normal file

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000054 MANIFEST-000134

View File

@@ -1,7 +1,7 @@
2023/08/08-18:04:51.714583 7f5afcdf86c0 Recovering log #52 2024/03/18-21:27:36.662299 7fb017e006c0 Recovering log #132
2023/08/08-18:04:51.723706 7f5afcdf86c0 Delete type=3 #50 2024/03/18-21:27:36.672660 7fb017e006c0 Delete type=3 #130
2023/08/08-18:04:51.723766 7f5afcdf86c0 Delete type=0 #52 2024/03/18-21:27:36.672727 7fb017e006c0 Delete type=0 #132
2023/08/08-18:04:59.560163 7f58677fe6c0 Level-0 table #57: started 2024/03/18-21:44:13.783262 7fb015a006c0 Level-0 table #137: started
2023/08/08-18:04:59.560198 7f58677fe6c0 Level-0 table #57: 0 bytes OK 2024/03/18-21:44:13.783332 7fb015a006c0 Level-0 table #137: 0 bytes OK
2023/08/08-18:04:59.566320 7f58677fe6c0 Delete type=0 #55 2024/03/18-21:44:13.789886 7fb015a006c0 Delete type=0 #135
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) 2024/03/18-21:44:13.808213 7fb015a006c0 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 2024/03/15-16:29:29.499552 7f7df20006c0 Recovering log #128
2023/08/08-17:50:40.767128 7f5afd5f96c0 Delete type=3 #46 2024/03/15-16:29:29.509238 7f7df20006c0 Delete type=3 #126
2023/08/08-17:50:40.767167 7f5afd5f96c0 Delete type=0 #48 2024/03/15-16:29:29.509293 7f7df20006c0 Delete type=0 #128
2023/08/08-18:04:06.354489 7f58677fe6c0 Level-0 table #53: started 2024/03/15-16:35:28.417564 7f7debe006c0 Level-0 table #133: started
2023/08/08-18:04:06.354521 7f58677fe6c0 Level-0 table #53: 0 bytes OK 2024/03/15-16:35:28.417584 7f7debe006c0 Level-0 table #133: 0 bytes OK
2023/08/08-18:04:06.361236 7f58677fe6c0 Delete type=0 #51 2024/03/15-16:35:28.424846 7f7debe006c0 Delete type=0 #131
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) 2024/03/15-16:35:28.424970 7f7debe006c0 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.

0
packs/scenes/000020.log Normal file
View File

1
packs/scenes/CURRENT Normal file
View File

@@ -0,0 +1 @@
MANIFEST-000018

0
packs/scenes/LOCK Normal file
View File

8
packs/scenes/LOG Normal file
View File

@@ -0,0 +1,8 @@
2024/03/18-21:27:36.648797 7fb017e006c0 Recovering log #16
2024/03/18-21:27:36.658451 7fb017e006c0 Delete type=3 #14
2024/03/18-21:27:36.658875 7fb017e006c0 Delete type=0 #16
2024/03/18-21:44:13.775844 7fb015a006c0 Level-0 table #21: started
2024/03/18-21:44:13.775912 7fb015a006c0 Level-0 table #21: 0 bytes OK
2024/03/18-21:44:13.782966 7fb015a006c0 Delete type=0 #19
2024/03/18-21:44:13.808193 7fb015a006c0 Manual compaction at level-0 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)
2024/03/18-21:44:13.808235 7fb015a006c0 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/15-16:29:29.486982 7f7df20006c0 Recovering log #12
2024/03/15-16:29:29.496623 7f7df20006c0 Delete type=3 #10
2024/03/15-16:29:29.496680 7f7df20006c0 Delete type=0 #12
2024/03/15-16:35:28.404055 7f7debe006c0 Level-0 table #17: started
2024/03/15-16:35:28.404098 7f7debe006c0 Level-0 table #17: 0 bytes OK
2024/03/15-16:35:28.410985 7f7debe006c0 Delete type=0 #15
2024/03/15-16:35:28.417555 7f7debe006c0 Manual compaction at level-0 from '!scenes!YYBr138LR7ntGFdo' @ 72057594037927935 : 1 .. '!scenes!wJJTdzEVyJpkUXaM' @ 0 : 0; will stop at (end)
2024/03/15-16:35:28.424962 7f7debe006c0 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-000054 MANIFEST-000134

View File

@@ -1,7 +1,7 @@
2023/08/08-18:04:51.701446 7f5afddfa6c0 Recovering log #52 2024/03/18-21:27:36.605584 7fb0174006c0 Recovering log #132
2023/08/08-18:04:51.711597 7f5afddfa6c0 Delete type=3 #50 2024/03/18-21:27:36.615261 7fb0174006c0 Delete type=3 #130
2023/08/08-18:04:51.711643 7f5afddfa6c0 Delete type=0 #52 2024/03/18-21:27:36.615507 7fb0174006c0 Delete type=0 #132
2023/08/08-18:04:59.539283 7f58677fe6c0 Level-0 table #57: started 2024/03/18-21:44:13.755365 7fb015a006c0 Level-0 table #137: started
2023/08/08-18:04:59.539308 7f58677fe6c0 Level-0 table #57: 0 bytes OK 2024/03/18-21:44:13.755406 7fb015a006c0 Level-0 table #137: 0 bytes OK
2023/08/08-18:04:59.546617 7f58677fe6c0 Delete type=0 #55 2024/03/18-21:44:13.761940 7fb015a006c0 Delete type=0 #135
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) 2024/03/18-21:44:13.775775 7fb015a006c0 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 2024/03/15-16:29:29.447153 7f7df34006c0 Recovering log #128
2023/08/08-17:50:40.655429 7f5afcdf86c0 Delete type=3 #46 2024/03/15-16:29:29.458144 7f7df34006c0 Delete type=3 #126
2023/08/08-17:50:40.655471 7f5afcdf86c0 Delete type=0 #48 2024/03/15-16:29:29.458197 7f7df34006c0 Delete type=0 #128
2023/08/08-18:04:06.323953 7f58677fe6c0 Level-0 table #53: started 2024/03/15-16:35:28.383414 7f7debe006c0 Level-0 table #133: started
2023/08/08-18:04:06.324001 7f58677fe6c0 Level-0 table #53: 0 bytes OK 2024/03/15-16:35:28.383464 7f7debe006c0 Level-0 table #133: 0 bytes OK
2023/08/08-18:04:06.330360 7f58677fe6c0 Delete type=0 #51 2024/03/15-16:35:28.390768 7f7debe006c0 Delete type=0 #131
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) 2024/03/15-16:35:28.404037 7f7debe006c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)

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

View File

@@ -1 +1 @@
MANIFEST-000054 MANIFEST-000134

View File

@@ -1,7 +1,7 @@
2023/08/08-18:04:51.714581 7f5afd5f96c0 Recovering log #52 2024/03/18-21:27:36.634738 7fb0174006c0 Recovering log #132
2023/08/08-18:04:51.723695 7f5afd5f96c0 Delete type=3 #50 2024/03/18-21:27:36.644980 7fb0174006c0 Delete type=3 #130
2023/08/08-18:04:51.723729 7f5afd5f96c0 Delete type=0 #52 2024/03/18-21:27:36.645138 7fb0174006c0 Delete type=0 #132
2023/08/08-18:04:59.552915 7f58677fe6c0 Level-0 table #57: started 2024/03/18-21:44:13.768924 7fb015a006c0 Level-0 table #137: started
2023/08/08-18:04:59.552934 7f58677fe6c0 Level-0 table #57: 0 bytes OK 2024/03/18-21:44:13.768963 7fb015a006c0 Level-0 table #137: 0 bytes OK
2023/08/08-18:04:59.559910 7f58677fe6c0 Delete type=0 #55 2024/03/18-21:44:13.775416 7fb015a006c0 Delete type=0 #135
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) 2024/03/18-21:44:13.783223 7fb015a006c0 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 2024/03/15-16:29:29.474381 7f7df34006c0 Recovering log #128
2023/08/08-17:50:40.748499 7f5afcdf86c0 Delete type=3 #46 2024/03/15-16:29:29.484271 7f7df34006c0 Delete type=3 #126
2023/08/08-17:50:40.748566 7f5afcdf86c0 Delete type=0 #48 2024/03/15-16:29:29.484356 7f7df34006c0 Delete type=0 #128
2023/08/08-18:04:06.347462 7f58677fe6c0 Level-0 table #53: started 2024/03/15-16:35:28.390972 7f7debe006c0 Level-0 table #133: started
2023/08/08-18:04:06.347507 7f58677fe6c0 Level-0 table #53: 0 bytes OK 2024/03/15-16:35:28.391026 7f7debe006c0 Level-0 table #133: 0 bytes OK
2023/08/08-18:04:06.354352 7f58677fe6c0 Delete type=0 #51 2024/03/15-16:35:28.397167 7f7debe006c0 Delete type=0 #131
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) 2024/03/15-16:35:28.411153 7f7debe006c0 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

@@ -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",
@@ -73,10 +85,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 +112,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.18", "version": "11.0.38",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/archive/fvtt-ecryme-v11.0.18.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

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

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