Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e794611bf3 | |||
| 529a62045e | |||
| d462d22a0a | |||
| 710ee54531 | |||
| 7994aa7db4 | |||
| 5176b4ce87 | |||
| 3d6f195fc2 | |||
| 3693d68c24 | |||
| 16ccd2f3e1 | |||
| 631eb280ca | |||
| 88ca98945f | |||
| edfb2105d3 | |||
| 84cc59c57d | |||
| e9c0fbd818 | |||
| aaabb7ed75 | |||
| fee7a3a9fb | |||
| 31517030f6 | |||
| c5cbf2a6d1 | |||
| a30f813d94 | |||
| 090f6be601 | |||
| 60db1f65e4 | |||
| d532765d2b | |||
| b6016742ae | |||
| 761f95d6d9 | |||
| c24f4fe502 | |||
| caedcf5e21 |
@@ -27,7 +27,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
version: ${{steps.get_version.outputs.version-without-v}}
|
version: ${{steps.get_version.outputs.version-without-v}}
|
||||||
url: https://www.uberwald.me/gitea/${{gitea.repository}}
|
url: https://www.uberwald.me/gitea/${{gitea.repository}}
|
||||||
manifest: https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/system.json
|
manifest: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/latest/system.json
|
||||||
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-te-deum-${{github.event.release.tag_name}}.zip
|
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-te-deum-${{github.event.release.tag_name}}.zip
|
||||||
|
|
||||||
# Create a zip file with all files required by the module to add to the release
|
# Create a zip file with all files required by the module to add to the release
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Système Foundry pour Te Deum pour un massacre (French RPG, Open Sesam Games, Official)
|
# Système Foundry pour Te Deum pour un Massacre (French RPG, Open Sesame Games, Official)
|
||||||
|
|
||||||
This is a base game system with functionnal character sheets for the game Te Deum pour un massacre.
|
This is a base game system with functionnal character sheets for the game Te Deum pour un massacre.
|
||||||
|
|
||||||
|
|||||||
29
changelog.md
29
changelog.md
@@ -0,0 +1,29 @@
|
|||||||
|
# 13.0.0
|
||||||
|
|
||||||
|
- Support de Foundry v13
|
||||||
|
|
||||||
|
# 12.0.23
|
||||||
|
|
||||||
|
- Correction sur les jets réussie en tir
|
||||||
|
- Correction sur le dés négatif pour les échecs critiques
|
||||||
|
- Correction sur l'XP et édition de l'XP en mode MJ
|
||||||
|
|
||||||
|
# 12.0.22
|
||||||
|
|
||||||
|
- Correction pour les armes d'hast
|
||||||
|
- Correction sur la zone libre d'équipement
|
||||||
|
- Bouton + pour créer un équipement à nouveau opérationnel
|
||||||
|
- Modification de la gestion des jets en combat, avec gestion opposition ou degats immédiats
|
||||||
|
- Gestion du genre dans la création de personnage
|
||||||
|
|
||||||
|
# 12.0.21
|
||||||
|
|
||||||
|
- Creation de PNJ OK
|
||||||
|
|
||||||
|
# 12.0.20
|
||||||
|
|
||||||
|
- Corrections sur la création de perso
|
||||||
|
|
||||||
|
# 12.0.19
|
||||||
|
|
||||||
|
- Initial release !
|
||||||
BIN
images/icons/appliquer-degats.webp
Normal file
BIN
images/icons/appliquer-degats.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
BIN
images/icons/xpplus1.webp
Normal file
BIN
images/icons/xpplus1.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.1 KiB |
@@ -6,7 +6,7 @@
|
|||||||
import { TeDeumUtility } from "../common/tedeum-utility.js";
|
import { TeDeumUtility } from "../common/tedeum-utility.js";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class TeDeumActorPJSheet extends ActorSheet {
|
export class TeDeumActorPJSheet extends foundry.appv1.sheets.ActorSheet {
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
@@ -42,6 +42,7 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
|||||||
providence: this.actor.prepareProvidence(),
|
providence: this.actor.prepareProvidence(),
|
||||||
arbreCompetences: this.actor.prepareArbreCompetences(),
|
arbreCompetences: this.actor.prepareArbreCompetences(),
|
||||||
equipements: this.actor.getEquipements(),
|
equipements: this.actor.getEquipements(),
|
||||||
|
simples: this.actor.getSimples(),
|
||||||
armures: this.actor.getArmures(),
|
armures: this.actor.getArmures(),
|
||||||
graces: this.actor.getGraces(),
|
graces: this.actor.getGraces(),
|
||||||
blessures: this.actor.getBlessures(),
|
blessures: this.actor.getBlessures(),
|
||||||
@@ -55,9 +56,10 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
|||||||
nbArmuresLourdes: this.actor.getNbArmuresLourdesActuel(),
|
nbArmuresLourdes: this.actor.getNbArmuresLourdesActuel(),
|
||||||
santeModifier: this.actor.getSanteModifier(),
|
santeModifier: this.actor.getSanteModifier(),
|
||||||
educations: this.actor.getEducations(),
|
educations: this.actor.getEducations(),
|
||||||
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
|
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
|
||||||
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }),
|
equipmentfree: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.equipmentfree, { async: true }),
|
||||||
histoire: await TextEditor.enrichHTML(this.object.system.histoire, { async: true }),
|
notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }),
|
||||||
|
histoire: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.histoire, { async: true }),
|
||||||
options: this.options,
|
options: this.options,
|
||||||
owner: this.document.isOwner,
|
owner: this.document.isOwner,
|
||||||
editScore: this.options.editScore,
|
editScore: this.options.editScore,
|
||||||
@@ -65,7 +67,6 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
|||||||
}
|
}
|
||||||
this.formData = formData;
|
this.formData = formData;
|
||||||
|
|
||||||
console.log("PC : ", formData, this.object);
|
|
||||||
return formData;
|
return formData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,7 +97,16 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
|||||||
})
|
})
|
||||||
html.find('.item-add').click(ev => {
|
html.find('.item-add').click(ev => {
|
||||||
let dataType = $(ev.currentTarget).data("type")
|
let dataType = $(ev.currentTarget).data("type")
|
||||||
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
|
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouveau " + dataType, type: dataType }], { renderSheet: true })
|
||||||
|
})
|
||||||
|
html.find('.blessure-add').click(ev => {
|
||||||
|
let dataType = $(ev.currentTarget).data("type")
|
||||||
|
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: { typeBlessure: "estafilade", localisation: "corps", value: 0, appliquee: true, description: "" } }], { renderSheet: true })
|
||||||
|
})
|
||||||
|
html.find('.competence-add').click(ev => {
|
||||||
|
let dataType = $(ev.currentTarget).data("type")
|
||||||
|
let caracKey = $(ev.currentTarget).data("carac-key")
|
||||||
|
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: { caracteristique: caracKey } }], { renderSheet: true })
|
||||||
})
|
})
|
||||||
|
|
||||||
html.find('.subactor-edit').click(ev => {
|
html.find('.subactor-edit').click(ev => {
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ export class TeDeumActor extends Actor {
|
|||||||
return actor;
|
return actor;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.type == 'pj') {
|
if (data.type == 'pj' || data.type == 'pnj') {
|
||||||
const skills = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences")
|
const skills = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences")
|
||||||
data.items = data.items || []
|
data.items = data.items || []
|
||||||
for (let skill of skills) {
|
for (let skill of skills) {
|
||||||
@@ -65,6 +65,43 @@ export class TeDeumActor extends Actor {
|
|||||||
super._preUpdate(changed, options, user);
|
super._preUpdate(changed, options, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
getCompetenceScore(compName) {
|
||||||
|
let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase())
|
||||||
|
if (competence) {
|
||||||
|
if (competence.system.isBase) {
|
||||||
|
return this.system.caracteristiques[competence.system.caracteristique].value
|
||||||
|
}
|
||||||
|
return competence.system.score
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
getMeilleureCompetenceMainGauche(comp) {
|
||||||
|
let compScore = this.getCompetenceScore(comp.name)
|
||||||
|
let mainGaucheScore = this.getCompetenceScore("main gauche")
|
||||||
|
if (mainGaucheScore < compScore) {
|
||||||
|
ui.notifications.info(`${actor.name} : Utilisation de la compétence Main Gauche au lieu de ${comp.name}`)
|
||||||
|
let mainGaucheComp = this.itms.find(item => item.type == "competence" && item.name.toLowerCase() == "main gauche")
|
||||||
|
if (!mainGaucheComp) {
|
||||||
|
// Create a fake competence object
|
||||||
|
mainGaucheComp = foundry.utils.duplicate(comp)
|
||||||
|
mainGaucheComp.name = "Main Gauche"
|
||||||
|
mainGaucheComp.system.isBase = false
|
||||||
|
mainGaucheComp.system.score = 0
|
||||||
|
mainGaucheComp.system.caracteristique = "adresse"
|
||||||
|
mainGaucheComp.system.description = "Compétence Main Gauche (automatique)"
|
||||||
|
mainGaucheComp.system.isMainGauche = true
|
||||||
|
return mainGaucheComp
|
||||||
|
} else {
|
||||||
|
return mainGaucheComp
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return comp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_onUpdate(changed, options, userId) {
|
_onUpdate(changed, options, userId) {
|
||||||
let updates = []
|
let updates = []
|
||||||
@@ -104,12 +141,6 @@ export class TeDeumActor extends Actor {
|
|||||||
updates.push({ _id: initiative.id, "system.score": Number(newScore) })
|
updates.push({ _id: initiative.id, "system.score": Number(newScore) })
|
||||||
}
|
}
|
||||||
|
|
||||||
let actionsTour = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "actions/tour")
|
|
||||||
newScore = this.getCommonBaseValue(this.system.caracteristiques.adresse.value)
|
|
||||||
if (actionsTour && actionsTour?.system.score != newScore) {
|
|
||||||
updates.push({ _id: actionsTour.id, "system.score": Number(newScore) })
|
|
||||||
}
|
|
||||||
|
|
||||||
let effort = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "effort")
|
let effort = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "effort")
|
||||||
newScore = this.getCommonBaseValue(this.system.caracteristiques.puissance.value)
|
newScore = this.getCommonBaseValue(this.system.caracteristiques.puissance.value)
|
||||||
if (effort && effort?.system.score != newScore) {
|
if (effort && effort?.system.score != newScore) {
|
||||||
@@ -119,6 +150,8 @@ export class TeDeumActor extends Actor {
|
|||||||
if (updates.length > 0) {
|
if (updates.length > 0) {
|
||||||
this.updateEmbeddedDocuments('Item', updates)
|
this.updateEmbeddedDocuments('Item', updates)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
super._onUpdate(changed, options, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -137,7 +170,7 @@ export class TeDeumActor extends Actor {
|
|||||||
getCommonBaseValue(value) {
|
getCommonBaseValue(value) {
|
||||||
return game.system.tedeum.config.COMMON_VALUE[value]?.value || 0
|
return game.system.tedeum.config.COMMON_VALUE[value]?.value || 0
|
||||||
}
|
}
|
||||||
getInitiative() {
|
getInitiativeValue() {
|
||||||
return game.system.tedeum.config.COMMON_VALUE[this.system.caracteristiques.adresse.value]?.value || 0
|
return game.system.tedeum.config.COMMON_VALUE[this.system.caracteristiques.adresse.value]?.value || 0
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -145,6 +178,24 @@ export class TeDeumActor extends Actor {
|
|||||||
return game.system.tedeum.config.BONUS_DEGATS[this.system.caracteristiques.puissance.value]
|
return game.system.tedeum.config.BONUS_DEGATS[this.system.caracteristiques.puissance.value]
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
getAttaqueBonusDegats(rollData = undefined) {
|
||||||
|
let base = game.system.tedeum.config.BONUS_DEGATS[this.system.caracteristiques.puissance.value].value
|
||||||
|
let additionalBonus = 0
|
||||||
|
if (rollData) {
|
||||||
|
// Spécificité armes naturelle avec gantelet
|
||||||
|
if (rollData?.arme?.system.specificites?.poing?.hasSpec && this.items.find(item => item.type == "armure" && item.name.toLowerCase() == "gantelet" && item.system.equipe)) {
|
||||||
|
additionalBonus += 1
|
||||||
|
rollData.gantelet = true
|
||||||
|
}
|
||||||
|
if (rollData.isChargeAPied) {
|
||||||
|
additionalBonus += this.getCompetenceScore("course")
|
||||||
|
} else if (rollData.isChargeACheval) {
|
||||||
|
additionalBonus += this.getCompetenceScore("equitation")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return base + additionalBonus
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
getNbArmures() {
|
getNbArmures() {
|
||||||
return game.system.tedeum.config.MAX_ARMURES_LOURDES[this.system.caracteristiques.puissance.value]
|
return game.system.tedeum.config.MAX_ARMURES_LOURDES[this.system.caracteristiques.puissance.value]
|
||||||
}
|
}
|
||||||
@@ -190,6 +241,11 @@ export class TeDeumActor extends Actor {
|
|||||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||||
return comp;
|
return comp;
|
||||||
}
|
}
|
||||||
|
getSimples() {
|
||||||
|
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'simple') || [])
|
||||||
|
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||||
|
return comp;
|
||||||
|
}
|
||||||
getArmures() {
|
getArmures() {
|
||||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'armure') || [])
|
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'armure') || [])
|
||||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||||
@@ -251,41 +307,105 @@ export class TeDeumActor extends Actor {
|
|||||||
modTotal += blessDef.modifier
|
modTotal += blessDef.modifier
|
||||||
}
|
}
|
||||||
// Si le nombre de blessures est supérieur au score d'endurance, alors malus supplémentaire
|
// Si le nombre de blessures est supérieur au score d'endurance, alors malus supplémentaire
|
||||||
let endurance = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "endurance")
|
let enduranceScore = this.getCompetenceScore("endurance")
|
||||||
if (blessures.length > endurance.system.score) {
|
if (blessures.length > enduranceScore) {
|
||||||
modTotal += -1
|
modTotal += -1
|
||||||
}
|
}
|
||||||
return modTotal
|
return modTotal
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async appliquerDegats(rollData) {
|
async appliquerBlessure(blessureId, locId, comment = "") {
|
||||||
let combat = this.prepareCombat()
|
let blessure = game.system.tedeum.config.blessures[blessureId]
|
||||||
rollData.defenderName = this.name
|
if (!blessure) {
|
||||||
let touche = combat[rollData.loc.id].touche
|
ui.notifications.warn("Type de blessure inconnu : " + blessureId)
|
||||||
if (rollData.degats > 0 && rollData.degats > touche) {
|
console.error("Type de blessure inconnu : " + blessureId)
|
||||||
let diff = rollData.degats - touche
|
return
|
||||||
for (let bId in game.system.tedeum.config.blessures) {
|
}
|
||||||
let blessure = game.system.tedeum.config.blessures[bId]
|
|
||||||
if (diff >= blessure.degatsMin && diff <= blessure.degatsMax) {
|
|
||||||
// Create a new blessure object
|
// Create a new blessure object
|
||||||
let blessureObj = {
|
let blessureObj = {
|
||||||
name: blessure.label,
|
name: blessure.label,
|
||||||
type: "blessure",
|
type: "blessure",
|
||||||
system: {
|
system: {
|
||||||
typeBlessure: bId,
|
typeBlessure: blessureId,
|
||||||
|
localisation: locId || "maindroite",
|
||||||
|
value: blessure.value,
|
||||||
|
appliquee: true,
|
||||||
|
description: comment,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.createEmbeddedDocuments('Item', [blessureObj]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
getArmorDegatsModifier(rollData, combat) {
|
||||||
|
let loc = combat[rollData.loc.id]
|
||||||
|
// Sans armure
|
||||||
|
if (loc.armures.length == 0) {
|
||||||
|
return rollData.arme.system.degatsArmure.sansarmure
|
||||||
|
}
|
||||||
|
// Avec armure de cuir
|
||||||
|
if (loc.armures.find(a => a.system.typeArmure == "cuir")) {
|
||||||
|
return rollData.arme.system.degatsArmure.cuir
|
||||||
|
}
|
||||||
|
// Avec armure de maille
|
||||||
|
if (loc.armures.find(a => a.system.typeArmure == "maille")) {
|
||||||
|
return rollData.arme.system.degatsArmure.mailles
|
||||||
|
}
|
||||||
|
// Avec armure de plate
|
||||||
|
if (loc.armures.find(a => a.system.typeArmure == "plate")) {
|
||||||
|
return rollData.arme.system.degatsArmure.plates
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async appliquerDegats(rollData) {
|
||||||
|
let combat = this.prepareCombat()
|
||||||
|
rollData.defenderName = this.name
|
||||||
|
let touche = combat[rollData.loc.id].touche
|
||||||
|
let armorDegatModifier = this.getArmorDegatsModifier(rollData, combat)
|
||||||
|
rollData.degats += armorDegatModifier
|
||||||
|
rollData.armorDegatModifier = armorDegatModifier
|
||||||
|
|
||||||
|
let blessureId = "indemne"
|
||||||
|
if (rollData.degats > 0 && rollData.degats > touche) {
|
||||||
|
let diff = rollData.degats - touche
|
||||||
|
for (let bId in game.system.tedeum.config.blessures) {
|
||||||
|
let blessure = game.system.tedeum.config.blessures[bId]
|
||||||
|
if (diff >= blessure.degatsMin && diff <= blessure.degatsMax) {
|
||||||
|
if (rollData.isReussiteCritique) {
|
||||||
|
bId = game.system.tedeum.config.blessuresOrder[blessure.value + 1]
|
||||||
|
}
|
||||||
|
blessureId = bId
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (rollData.isReussiteCritique && blessureId == "indemne") { // Critical success without degats => lightest blessure
|
||||||
|
blessureId = "estafilade"
|
||||||
|
}
|
||||||
|
console.log("Appliquer dégats", rollData, combat, blessureId)
|
||||||
|
if (blessureId != "indemne") {
|
||||||
|
let blessure = game.system.tedeum.config.blessures[blessureId]
|
||||||
|
// Create a new blessure object
|
||||||
|
let blessureObj = {
|
||||||
|
name: blessure.label,
|
||||||
|
type: "blessure",
|
||||||
|
system: {
|
||||||
|
typeBlessure: blessureId,
|
||||||
localisation: rollData.loc.id,
|
localisation: rollData.loc.id,
|
||||||
|
value: blessure.value,
|
||||||
appliquee: true,
|
appliquee: true,
|
||||||
description: "Blessure infligée par un coup de " + rollData.arme.name + " de " + rollData.alias,
|
description: "Blessure infligée par un coup de " + rollData.arme.name + " de " + rollData.alias,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rollData.blessure = blessureObj
|
rollData.blessure = blessureObj
|
||||||
|
rollData.touche = touche
|
||||||
this.createEmbeddedDocuments('Item', [blessureObj]);
|
this.createEmbeddedDocuments('Item', [blessureObj]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
// Display the relevant chat message
|
// Display the relevant chat message
|
||||||
let msg = await TeDeumUtility.createChatWithRollMode(rollData.alias, {
|
let msg = await TeDeumUtility.createChatWithRollMode(rollData.alias, {
|
||||||
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-blessure-result.hbs`, rollData)
|
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-blessure-result.hbs`, rollData)
|
||||||
})
|
})
|
||||||
await msg.setFlag("world", "te-deum-rolldata", rollData)
|
await msg.setFlag("world", "te-deum-rolldata", rollData)
|
||||||
}
|
}
|
||||||
@@ -295,7 +415,11 @@ export class TeDeumActor extends Actor {
|
|||||||
c.key = key
|
c.key = key
|
||||||
c.name = game.system.tedeum.config.caracteristiques[key].label
|
c.name = game.system.tedeum.config.caracteristiques[key].label
|
||||||
c.generalqualite = game.system.tedeum.config.descriptionValeur[c.value].qualite
|
c.generalqualite = game.system.tedeum.config.descriptionValeur[c.value].qualite
|
||||||
|
if (this.system.genre.toLowerCase() == "homme") {
|
||||||
c.qualite = game.system.tedeum.config.descriptionValeur[c.value][key]
|
c.qualite = game.system.tedeum.config.descriptionValeur[c.value][key]
|
||||||
|
} else {
|
||||||
|
c.qualite = game.system.tedeum.config.descriptionValeurFemme[c.value][key]
|
||||||
|
}
|
||||||
c.dice = game.system.tedeum.config.descriptionValeur[c.value].dice
|
c.dice = game.system.tedeum.config.descriptionValeur[c.value].dice
|
||||||
c.negativeDice = game.system.tedeum.config.descriptionValeur[c.value].negativeDice
|
c.negativeDice = game.system.tedeum.config.descriptionValeur[c.value].negativeDice
|
||||||
}
|
}
|
||||||
@@ -314,7 +438,11 @@ export class TeDeumActor extends Actor {
|
|||||||
prepareProvidence() {
|
prepareProvidence() {
|
||||||
let providence = foundry.utils.deepClone(this.system.providence)
|
let providence = foundry.utils.deepClone(this.system.providence)
|
||||||
providence.name = "Providence"
|
providence.name = "Providence"
|
||||||
|
if (this.system.genre.toLowerCase() == "homme") {
|
||||||
providence.qualite = game.system.tedeum.config.providence[providence.value].labelM
|
providence.qualite = game.system.tedeum.config.providence[providence.value].labelM
|
||||||
|
} else {
|
||||||
|
providence.qualite = game.system.tedeum.config.providence[providence.value].labelF
|
||||||
|
}
|
||||||
providence.dice = game.system.tedeum.config.providence[providence.value].diceValue
|
providence.dice = game.system.tedeum.config.providence[providence.value].diceValue
|
||||||
providence.description = "La Providence représente la Volonté Divine à l'œuvre pour guider ou sauver un être humain. Les PJ montent dans l’échelle de la Providence en menant à bien leurs missions et en se montrant vertueux. Les points de Providence peuvent servir à augmenter temporairement une caractéris- tique, à modifier la gravité d'une blessure, et à résister au vieillissement. Chaque person- nage commence avec un score initial de 1 en Providence (au niveau Pauvre pécheur)."
|
providence.description = "La Providence représente la Volonté Divine à l'œuvre pour guider ou sauver un être humain. Les PJ montent dans l’échelle de la Providence en menant à bien leurs missions et en se montrant vertueux. Les points de Providence peuvent servir à augmenter temporairement une caractéris- tique, à modifier la gravité d'une blessure, et à résister au vieillissement. Chaque person- nage commence avec un score initial de 1 en Providence (au niveau Pauvre pécheur)."
|
||||||
return providence
|
return providence
|
||||||
@@ -352,11 +480,14 @@ export class TeDeumActor extends Actor {
|
|||||||
providence.value = Math.min(Math.max(providence.value + value, 0), 6)
|
providence.value = Math.min(Math.max(providence.value + value, 0), 6)
|
||||||
this.update({ "system.providence": providence })
|
this.update({ "system.providence": providence })
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
modifyXP(key, value) {
|
async modifyXP(key, value) {
|
||||||
let xp = this.system.caracteristiques[key].experience
|
let xp = this.system.caracteristiques[key].experience
|
||||||
xp = Math.max(xp + value, 0)
|
xp = Math.max(xp + value, 0)
|
||||||
this.update({ [`system.caracteristiques.${key}.experience`]: xp })
|
await this.update({ [`system.caracteristiques.${key}.experience`]: xp })
|
||||||
|
this.sheet?.render(true)
|
||||||
|
ui.notifications.info(`+${value} XP en ${game.system.tedeum.config.caracteristiques[key].label}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -504,12 +635,16 @@ export class TeDeumActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getInitiativeScore() {
|
getInitiativeScore() {
|
||||||
let initiative = this.items.find(it => it.type == "competence" && it.name.toLowerCase() == "initiative")
|
let initiative = this.getInitiativeValue()
|
||||||
if (initiative) {
|
// Vérifie les armes avec bonus d'initiative
|
||||||
return initiative.system.score
|
let armes = this.getArmes()
|
||||||
|
for (let arme of armes) {
|
||||||
|
if (arme.system.equipe && Number(arme.system.initiativeBonus) && Number(arme.system.initiativeBonus) != 0) {
|
||||||
|
ui.notifications.info("L'arme " + arme.name + " vous confère un bonus d'initiative de " + arme.system.initiativeBonus)
|
||||||
|
initiative += arme.system.initiativeBonus
|
||||||
}
|
}
|
||||||
ui.notifications.warn("Impossible de trouver la compétence Initiative pour l'acteur " + this.name)
|
}
|
||||||
return -1;
|
return initiative
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -570,6 +705,7 @@ export class TeDeumActor extends Actor {
|
|||||||
let rollData = this.getCommonCompetence(compId)
|
let rollData = this.getCommonCompetence(compId)
|
||||||
rollData.mode = "competence"
|
rollData.mode = "competence"
|
||||||
rollData.title = rollData.competence.name
|
rollData.title = rollData.competence.name
|
||||||
|
rollData.compScore = rollData.competence.system.isBase ? this.system.caracteristiques[rollData.competence.system.caracteristique].value : rollData.competence.system.score
|
||||||
this.startRoll(rollData).catch("Error on startRoll")
|
this.startRoll(rollData).catch("Error on startRoll")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -622,14 +758,20 @@ export class TeDeumActor extends Actor {
|
|||||||
|
|
||||||
// Setup competence + carac
|
// Setup competence + carac
|
||||||
if (!compName) {
|
if (!compName) {
|
||||||
compName = weapon.system.competence
|
let compIdx = weapon.system.competence
|
||||||
|
compName = game.system.tedeum.config.armeCompetences[compIdx]?.label
|
||||||
}
|
}
|
||||||
let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase())
|
let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase())
|
||||||
if (competence) {
|
if (competence) {
|
||||||
rollData.competence = competence
|
rollData.competence = competence
|
||||||
|
rollData.compScore = rollData.competence.system.isBase ? this.system.caracteristiques[rollData.competence.system.caracteristique].value : rollData.competence.system.score
|
||||||
let c = foundry.utils.duplicate(this.system.caracteristiques[competence.system.caracteristique])
|
let c = foundry.utils.duplicate(this.system.caracteristiques[competence.system.caracteristique])
|
||||||
this.updateCarac(c, competence.system.caracteristique)
|
this.updateCarac(c, competence.system.caracteristique)
|
||||||
rollData.carac = c
|
rollData.carac = c
|
||||||
|
rollData.allongeLabel = game.system.tedeum.config.armeAllonges[weapon.system.allonge].label
|
||||||
|
rollData.allongeId = "courte"
|
||||||
|
rollData.allonges = foundry.utils.duplicate(game.system.tedeum.config.allonges[weapon.system.allonge])
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ui.notifications.warn("Impossible de trouver la compétence " + compName)
|
ui.notifications.warn("Impossible de trouver la compétence " + compName)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -6,13 +6,14 @@ export class TeDeumCharacterCreator {
|
|||||||
async init() {
|
async init() {
|
||||||
this.stages = {}
|
this.stages = {}
|
||||||
this.currentStage = "origineSociale"
|
this.currentStage = "origineSociale"
|
||||||
this.sex = undefined
|
this.sexe = undefined
|
||||||
this.origineSociale = undefined
|
this.origineSociale = undefined
|
||||||
this.religion = undefined
|
this.religion = undefined
|
||||||
this.caracBonus = {}
|
this.caracBonus = {}
|
||||||
this.competenceBonus = {}
|
this.competenceBonus = {}
|
||||||
this.suiviReponses = []
|
this.suiviReponses = []
|
||||||
this.competences = TeDeumUtility.getCompetencesForDropDown()
|
this.competences = TeDeumUtility.getCompetencesForDropDown()
|
||||||
|
this.choiceSummary = {}
|
||||||
|
|
||||||
for (let k in game.system.tedeum.config.caracteristiques) {
|
for (let k in game.system.tedeum.config.caracteristiques) {
|
||||||
this.caracBonus[k] = { value: 0 }
|
this.caracBonus[k] = { value: 0 }
|
||||||
@@ -39,6 +40,7 @@ export class TeDeumCharacterCreator {
|
|||||||
} else {
|
} else {
|
||||||
this.competenceBonus[compName].value += 1
|
this.competenceBonus[compName].value += 1
|
||||||
}
|
}
|
||||||
|
this.choiceSummary[this.currentStage].competences[compName] = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------*/
|
/*--------------------------------------------*/
|
||||||
@@ -69,7 +71,7 @@ export class TeDeumCharacterCreator {
|
|||||||
|
|
||||||
/*--------------------------------------------*/
|
/*--------------------------------------------*/
|
||||||
async askStageName(context) {
|
async askStageName(context) {
|
||||||
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-stage-name.hbs", context)
|
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-stage-name.hbs", context)
|
||||||
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
||||||
window: { title: context.title },
|
window: { title: context.title },
|
||||||
classes: ["fvtt-te-deum"],
|
classes: ["fvtt-te-deum"],
|
||||||
@@ -116,6 +118,7 @@ export class TeDeumCharacterCreator {
|
|||||||
/*--------------------------------------------*/
|
/*--------------------------------------------*/
|
||||||
async askQuestionnaire(stage, context) {
|
async askQuestionnaire(stage, context) {
|
||||||
context.subtitle = "Questionnaire"
|
context.subtitle = "Questionnaire"
|
||||||
|
this.choiceSummary[this.currentStage].questionnaire = {}
|
||||||
|
|
||||||
for (let key in stage.system.questionnaire) {
|
for (let key in stage.system.questionnaire) {
|
||||||
let question = stage.system.questionnaire[key]
|
let question = stage.system.questionnaire[key]
|
||||||
@@ -127,7 +130,7 @@ export class TeDeumCharacterCreator {
|
|||||||
context.competences = {}
|
context.competences = {}
|
||||||
context.responseKey = "reponse1" // By default
|
context.responseKey = "reponse1" // By default
|
||||||
|
|
||||||
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-questions.hbs", context)
|
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-questions.hbs", context)
|
||||||
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
||||||
window: { title: context.title },
|
window: { title: context.title },
|
||||||
classes: ["fvtt-te-deum"],
|
classes: ["fvtt-te-deum"],
|
||||||
@@ -170,13 +173,14 @@ export class TeDeumCharacterCreator {
|
|||||||
let compName = context.competences[context.responseKey] || selectedResponse.compName
|
let compName = context.competences[context.responseKey] || selectedResponse.compName
|
||||||
this.increaseCompetence(compName)
|
this.increaseCompetence(compName)
|
||||||
|
|
||||||
this.suiviReponses.push({ etape: stage.name, question: question.question, reponse: selectedResponse.reponse, compName: compName })
|
this.suiviReponses.push({ key: this.currentStage, etape: stage.name, question: question.question, reponse: selectedResponse.reponse, compName: compName })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------- -------------------------------*/
|
/*------------- -------------------------------*/
|
||||||
async askCompetences(stage, context) {
|
async askCompetences(stage, context) {
|
||||||
context.subtitle = "Choix des Compétences"
|
context.subtitle = "Choix des Compétences"
|
||||||
|
this.choiceSummary[this.currentStage].competences = {}
|
||||||
|
|
||||||
context.fixedCompetences = {}
|
context.fixedCompetences = {}
|
||||||
context.selectCompetences = {}
|
context.selectCompetences = {}
|
||||||
@@ -192,7 +196,7 @@ export class TeDeumCharacterCreator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context)
|
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context)
|
||||||
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
||||||
window: { title: context.title },
|
window: { title: context.title },
|
||||||
classes: ["fvtt-te-deum"],
|
classes: ["fvtt-te-deum"],
|
||||||
@@ -236,7 +240,7 @@ export class TeDeumCharacterCreator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context)
|
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context)
|
||||||
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
||||||
window: { title: context.title },
|
window: { title: context.title },
|
||||||
classes: ["fvtt-te-deum"],
|
classes: ["fvtt-te-deum"],
|
||||||
@@ -273,6 +277,10 @@ export class TeDeumCharacterCreator {
|
|||||||
/*------------- -------------------------------*/
|
/*------------- -------------------------------*/
|
||||||
async askCarac(stage, context) {
|
async askCarac(stage, context) {
|
||||||
context.subtitle = "Choix des Caractéristiques"
|
context.subtitle = "Choix des Caractéristiques"
|
||||||
|
this.choiceSummary[this.currentStage] = {
|
||||||
|
caracBonus : {},
|
||||||
|
competences : {}
|
||||||
|
}
|
||||||
|
|
||||||
let selected = []
|
let selected = []
|
||||||
for (let i = 0; i < stage.system.nbChoixCarac; i++) {
|
for (let i = 0; i < stage.system.nbChoixCarac; i++) {
|
||||||
@@ -283,7 +291,7 @@ export class TeDeumCharacterCreator {
|
|||||||
context.caracList.push(game.system.tedeum.config.caracteristiques[carac.caracId])
|
context.caracList.push(game.system.tedeum.config.caracteristiques[carac.caracId])
|
||||||
}
|
}
|
||||||
|
|
||||||
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-carac.hbs", context)
|
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-carac.hbs", context)
|
||||||
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
||||||
window: { title: context.title },
|
window: { title: context.title },
|
||||||
classes: ["fvtt-te-deum"],
|
classes: ["fvtt-te-deum"],
|
||||||
@@ -312,6 +320,7 @@ export class TeDeumCharacterCreator {
|
|||||||
}
|
}
|
||||||
this.caracBonus[choiceResult.carac].value += 1
|
this.caracBonus[choiceResult.carac].value += 1
|
||||||
selected.push(choiceResult.carac)
|
selected.push(choiceResult.carac)
|
||||||
|
this.choiceSummary[this.currentStage].caracBonus[choiceResult.carac] = 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,7 +334,7 @@ export class TeDeumCharacterCreator {
|
|||||||
origineChoice: game.system.tedeum.config.origineSociale
|
origineChoice: game.system.tedeum.config.origineSociale
|
||||||
}
|
}
|
||||||
|
|
||||||
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-origine.hbs", context)
|
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-origine.hbs", context)
|
||||||
const label = "Valider le choix de l'Origine Sociale"
|
const label = "Valider le choix de l'Origine Sociale"
|
||||||
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
||||||
window: { title: context.title },
|
window: { title: context.title },
|
||||||
@@ -360,6 +369,12 @@ export class TeDeumCharacterCreator {
|
|||||||
for (let key in this.origineSociale.caracteristiques) {
|
for (let key in this.origineSociale.caracteristiques) {
|
||||||
this.caracBonus[key].value += this.origineSociale.caracteristiques[key]
|
this.caracBonus[key].value += this.origineSociale.caracteristiques[key]
|
||||||
}
|
}
|
||||||
|
this.choiceSummary['origineSociale'] = {
|
||||||
|
sexe: this.sexe,
|
||||||
|
religion: this.religion,
|
||||||
|
origineSociale: this.origineSociale.label,
|
||||||
|
caracBonus: this.caracBonus,
|
||||||
|
}
|
||||||
this.currentStage = "pouponniere"
|
this.currentStage = "pouponniere"
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -374,6 +389,7 @@ export class TeDeumCharacterCreator {
|
|||||||
title: "Création de personnage - La Pouponnière",
|
title: "Création de personnage - La Pouponnière",
|
||||||
subtitle: "Choix de la Pouponnière",
|
subtitle: "Choix de la Pouponnière",
|
||||||
label: "Valider le choix de la Pouponnière",
|
label: "Valider le choix de la Pouponnière",
|
||||||
|
hasGenre: false,
|
||||||
choices: pouponniereItems,
|
choices: pouponniereItems,
|
||||||
caracBonus: this.caracBonus,
|
caracBonus: this.caracBonus,
|
||||||
competenceBonus: this.competenceBonus
|
competenceBonus: this.competenceBonus
|
||||||
@@ -387,6 +403,7 @@ export class TeDeumCharacterCreator {
|
|||||||
this.pouponniere = foundry.utils.duplicate(stage.items.find(item => item.id === choiceResult.selectedItem))
|
this.pouponniere = foundry.utils.duplicate(stage.items.find(item => item.id === choiceResult.selectedItem))
|
||||||
context.title = `La Pouponnière - ${this.pouponniere.name}`
|
context.title = `La Pouponnière - ${this.pouponniere.name}`
|
||||||
TeDeumUtility.prepareEducationContent(this.pouponniere);
|
TeDeumUtility.prepareEducationContent(this.pouponniere);
|
||||||
|
this.choiceSummary['pouponniere'] = {}
|
||||||
|
|
||||||
context.label = "Valider l'augmentation de caracteristique"
|
context.label = "Valider l'augmentation de caracteristique"
|
||||||
await this.askCarac(this.pouponniere, context)
|
await this.askCarac(this.pouponniere, context)
|
||||||
@@ -403,11 +420,12 @@ export class TeDeumCharacterCreator {
|
|||||||
/*--------------------------------------------*/
|
/*--------------------------------------------*/
|
||||||
async renderPetitsGrimauds(stage) {
|
async renderPetitsGrimauds(stage) {
|
||||||
// Filter available pouponniere from origineSociale
|
// Filter available pouponniere from origineSociale
|
||||||
let grimaudsItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible)
|
let grimaudsItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible && (item.system.genre === this.sexe || item.system.genre === "Mixte"))
|
||||||
|
|
||||||
let context = {
|
let context = {
|
||||||
title: "Les Petits Grimauds",
|
title: "Les Petits Grimauds",
|
||||||
label: "Valider le choix des Petits Grimauds",
|
label: "Valider le choix des Petits Grimauds",
|
||||||
|
hasGenre: true,
|
||||||
choices: grimaudsItems,
|
choices: grimaudsItems,
|
||||||
caracBonus: this.caracBonus,
|
caracBonus: this.caracBonus,
|
||||||
competenceBonus: this.competenceBonus
|
competenceBonus: this.competenceBonus
|
||||||
@@ -437,12 +455,13 @@ export class TeDeumCharacterCreator {
|
|||||||
/*--------------------------------------------*/
|
/*--------------------------------------------*/
|
||||||
async renderRosesDeLaVie(stage) {
|
async renderRosesDeLaVie(stage) {
|
||||||
// Filter available pouponniere from origineSociale
|
// Filter available pouponniere from origineSociale
|
||||||
let rosesItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible)
|
let rosesItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible && (item.system.genre === this.sexe || item.system.genre === "Mixte"))
|
||||||
|
|
||||||
let context = {
|
let context = {
|
||||||
title: "Création de personnage - Les Roses de la Vie",
|
title: "Création de personnage - Les Roses de la Vie",
|
||||||
label: "Valider le choix des Roses de la Vie",
|
label: "Valider le choix des Roses de la Vie",
|
||||||
choices: rosesItems,
|
choices: rosesItems,
|
||||||
|
hasGenre: true,
|
||||||
caracBonus: this.caracBonus,
|
caracBonus: this.caracBonus,
|
||||||
competenceBonus: this.competenceBonus
|
competenceBonus: this.competenceBonus
|
||||||
|
|
||||||
@@ -488,6 +507,7 @@ export class TeDeumCharacterCreator {
|
|||||||
title: "Création de personnage - L'Age Viril",
|
title: "Création de personnage - L'Age Viril",
|
||||||
label: "Valider le choix de l'Age Viril",
|
label: "Valider le choix de l'Age Viril",
|
||||||
choices: ageVirilItems,
|
choices: ageVirilItems,
|
||||||
|
hasGenre: false,
|
||||||
caracBonus: this.caracBonus,
|
caracBonus: this.caracBonus,
|
||||||
competenceBonus: this.competenceBonus
|
competenceBonus: this.competenceBonus
|
||||||
}
|
}
|
||||||
@@ -577,14 +597,50 @@ export class TeDeumCharacterCreator {
|
|||||||
await actor.update({ [`system.fortune.${this.origineSociale.cagnotteUnit}`]: newArgent})
|
await actor.update({ [`system.fortune.${this.origineSociale.cagnotteUnit}`]: newArgent})
|
||||||
|
|
||||||
let histoire = ""
|
let histoire = ""
|
||||||
for (let reponse of this.suiviReponses) {
|
for ( let key in this.choiceSummary) {
|
||||||
histoire += `<p>${reponse.question}<br>${reponse.reponse} (${reponse.compName})</p>`
|
let stageSummary = this.choiceSummary[key]
|
||||||
|
if (stageSummary.sexe) {
|
||||||
|
histoire += `<h3>Origine Sociale</h3>`
|
||||||
|
histoire += `<p>${stageSummary.sexe} - ${stageSummary.religion} - ${stageSummary.origineSociale}</p>`
|
||||||
|
} else {
|
||||||
|
histoire += `<h3>${game.system.tedeum.config.etapesEducation[key].label}</h3>`
|
||||||
|
}
|
||||||
|
if (stageSummary.caracBonus) {
|
||||||
|
histoire += `<p><strong>Caractéristiques : </strong><ul>`
|
||||||
|
for (let caracKey in stageSummary.caracBonus) {
|
||||||
|
histoire += `<li>${TeDeumUtility.upperFirst(caracKey)} +1</li>`
|
||||||
|
}
|
||||||
|
histoire += `</ul></p>`
|
||||||
|
}
|
||||||
|
if (stageSummary.competences) {
|
||||||
|
histoire += `<p><strong>Compétences : </strong><ul>`
|
||||||
|
for (let compName in stageSummary.competences) {
|
||||||
|
histoire += `<li>${TeDeumUtility.upperFirst(compName)} +1</li>`
|
||||||
|
}
|
||||||
|
histoire += `</ul></p>`
|
||||||
|
}
|
||||||
|
let questions = this.suiviReponses.filter( r => r.key === key)
|
||||||
|
if (questions.length > 0) {
|
||||||
|
histoire += `<p><strong>Réponses au questionnaire : </strong><ul>`
|
||||||
|
for (let question of questions) {
|
||||||
|
histoire += `<li>${question.question} : <i>${question.reponse}</i> (${TeDeumUtility.upperFirst(question.compName)}+1)</li>`
|
||||||
|
}
|
||||||
|
histoire += `</ul></p>`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
await actor.update({ "system.histoire": histoire})
|
await actor.update({ "system.histoire": histoire})
|
||||||
|
|
||||||
actor.render(true)
|
actor.render(true)
|
||||||
|
|
||||||
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-finished.hbs", context)
|
context.pointsCompetence = {
|
||||||
|
"savoir": { score: actor.getCompetenceScore("Mémoriser"), label: "Savoir" },
|
||||||
|
"sensibilite": { score: actor.getCompetenceScore("Perception"), label: "Sensibilité" },
|
||||||
|
"entregent": { score: actor.getCompetenceScore("Charme"), label: "Entregent" },
|
||||||
|
"puissance": { score: actor.getCompetenceScore("Effort"), label: "Puissance" },
|
||||||
|
"complexion": { score: actor.getCompetenceScore("Endurance"), label: "Complexion" },
|
||||||
|
"adresse": { score: actor.getCompetenceScore("Initiative"), label: "Adresse" },
|
||||||
|
}
|
||||||
|
|
||||||
|
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-finished.hbs", context)
|
||||||
const label = "Terminer"
|
const label = "Terminer"
|
||||||
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
const choiceResult = await foundry.applications.api.DialogV2.wait({
|
||||||
window: { title: context.title },
|
window: { title: context.title },
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export class TeDeumCombat extends Combat {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||||
console.log("Roll INIT !")
|
//console.log("Roll INIT !")
|
||||||
ids = typeof ids === "string" ? [ids] : ids;
|
ids = typeof ids === "string" ? [ids] : ids;
|
||||||
for (let cId of ids) {
|
for (let cId of ids) {
|
||||||
const c = this.combatants.get(cId);
|
const c = this.combatants.get(cId);
|
||||||
@@ -16,6 +16,25 @@ export class TeDeumCombat extends Combat {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async modifyAction(combatantId, delta, isMainGauche = false) {
|
||||||
|
let combatant = this.combatants.get(combatantId)
|
||||||
|
if (!combatant) return;
|
||||||
|
let ca = combatant.getFlag("world", "available-actions")
|
||||||
|
if (!ca) {
|
||||||
|
ca = { nbActions: 1, nbActionsMainGauche: 0 }
|
||||||
|
}
|
||||||
|
if (isMainGauche) {
|
||||||
|
ca.nbActionsMainGauche += delta
|
||||||
|
} else {
|
||||||
|
ca.nbActions += delta
|
||||||
|
}
|
||||||
|
if (ca.nbActionsMainGauche < 0) ca.nbActionsMainGauche = 0
|
||||||
|
if (ca.nbActions < 0) ca.nbActions = 0
|
||||||
|
await combatant.setFlag("world", "available-actions", ca)
|
||||||
|
await combatant.update({ name: `${combatant.token.name} (${ca.nbActions} / ${ca.nbActionsMainGauche})` })
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async checkTurnPosition() {
|
static async checkTurnPosition() {
|
||||||
while (game.combat.turn > 0) {
|
while (game.combat.turn > 0) {
|
||||||
|
|||||||
@@ -15,19 +15,35 @@ export const TEDEUM_CONFIG = {
|
|||||||
{ value: 10 }, { value: 30 }, { value: 50 }],
|
{ value: 10 }, { value: 30 }, { value: 50 }],
|
||||||
|
|
||||||
LOCALISATION: {
|
LOCALISATION: {
|
||||||
"pieddroit": { label: "Pied Droit", value: 1, locMod: 0, id: "pieddroit", nbArmure: 1, score: { min: 1, max: 1 }, coord: { top: 500, left: 0 } },
|
"pieddroit": { label: "Pied Droit", value: 1, locMod: 0, id: "pieddroit", categorie: "pied", nbArmure: 1, score: { min: 1, max: 1 }, coord: { top: 500, left: 0 } },
|
||||||
"jambedroite": { label: "Jambe Droite", value: 1, locMod: -1, id: "jambedroite", nbArmure: 1, score: { min: 3, max: 4 }, coord: { top: 400, left: 100 } },
|
"jambedroite": { label: "Jambe Droite", value: 1, locMod: -1, id: "jambedroite", categorie: "jambe", nbArmure: 1, score: { min: 3, max: 4 }, coord: { top: 400, left: 100 } },
|
||||||
"jambegauche": { label: "Jambe Gauche", value: 1, locMod: -1, id: "jambegauche", nbArmure: 1, score: { min: 5, max: 6 }, coord: { top: 400, left: 300 } },
|
"jambegauche": { label: "Jambe Gauche", value: 1, locMod: -1, id: "jambegauche", categorie: "jambe", nbArmure: 1, score: { min: 5, max: 6 }, coord: { top: 400, left: 300 } },
|
||||||
"piedgauche": { label: "Pied Gauche", value: 1, locMod: 0, id: "piedgauche", nbArmure: 1, score: { min: 2, max: 2 }, coord: { top: 500, left: 400 } },
|
"piedgauche": { label: "Pied Gauche", value: 1, locMod: 0, id: "piedgauche", categorie: "pied", nbArmure: 1, score: { min: 2, max: 2 }, coord: { top: 500, left: 400 } },
|
||||||
"maindroite": { label: "Main Droite", value: 1, locMod: 0, id: "maindroite", nbArmure: 1, score: { min: 7, max: 7 }, coord: { top: 0, left: 0 } },
|
"maindroite": { label: "Main Droite", value: 1, locMod: 0, id: "maindroite", categorie: "main", nbArmure: 1, score: { min: 7, max: 7 }, coord: { top: 0, left: 0 } },
|
||||||
"maingauche": { label: "Main Gauche", value: 1, locMod: 0, id: "maingauche", nbArmure: 1, score: { min: 8, max: 8 }, coord: { top: 0, left: 400 } },
|
"maingauche": { label: "Main Gauche", value: 1, locMod: 0, id: "maingauche", categorie: "main", nbArmure: 1, score: { min: 8, max: 8 }, coord: { top: 0, left: 400 } },
|
||||||
"brasdroit": { label: "Bras Droit", value: 1, locMod: -1, id: "brasdroit", nbArmure: 2, score: { min: 9, max: 10 }, coord: { top: 200, left: 0 } },
|
"brasdroit": { label: "Bras Droit", value: 1, locMod: -1, id: "brasdroit", categorie: "bras", nbArmure: 2, score: { min: 9, max: 10 }, coord: { top: 200, left: 0 } },
|
||||||
"brasgauche": { label: "Bras Gauche", value: 1, locMod: -1, id: "brasgauche", nbArmure: 2, score: { min: 11, max: 12 }, coord: { top: 200, left: 400 } },
|
"brasgauche": { label: "Bras Gauche", value: 1, locMod: -1, id: "brasgauche", categorie: "bras", nbArmure: 2, score: { min: 11, max: 12 }, coord: { top: 200, left: 400 } },
|
||||||
"corps": { label: "Corps", value: 1, id: "corps", locMod: -2, nbArmure: 2, score: { min: 13, max: 17 }, coord: { top: 200, left: 200 } },
|
"corps": { label: "Corps", value: 1, id: "corps", categorie: "corps", locMod: -2, nbArmure: 2, score: { min: 13, max: 17 }, coord: { top: 200, left: 200 } },
|
||||||
"tete": { label: "Tête", value: 1, id: "tete", locMod: -2, nbArmure: 2, score: { min: 18, max: 20 }, coord: { top: 0, left: 200 } },
|
"tete": { label: "Tête", value: 1, id: "tete", categorie: "tete", locMod: -2, nbArmure: 2, score: { min: 18, max: 20 }, coord: { top: 0, left: 200 } },
|
||||||
|
},
|
||||||
|
|
||||||
|
ATTAQUE_CIBLEES: {
|
||||||
|
"aucune": { label: "Aucune", id: "aucune", locMod: 0, description: "Attaque non ciblée" },
|
||||||
|
"pieddroit": { label: "Pied Droit", id: "pieddroit", locMod: 0, description: "Attaque ciblée sur le pied droit" },
|
||||||
|
"jambedroite": { label: "Jambe Droite", id: "jambedroite", locMod: -1, description: "Attaque ciblée sur la jambe droite" },
|
||||||
|
"jambegauche": { label: "Jambe Gauche", id: "jambegauche", locMod: -1, description: "Attaque ciblée sur la jambe gauche" },
|
||||||
|
"piedgauche": { label: "Pied Gauche", id: "piedgauche", locMod: 0, description: "Attaque ciblée sur le pied gauche" },
|
||||||
|
"maindroite": { label: "Main Droite", id: "maindroite", locMod: 0, description: "Attaque ciblée sur la main droite" },
|
||||||
|
"maingauche": { label: "Main Gauche", id: "maingauche", locMod: 0, description: "Attaque ciblée sur la main gauche" },
|
||||||
|
"brasdroit": { label: "Bras Droit", id: "brasdroit", locMod: -1, description: "Attaque ciblée sur le bras droit" },
|
||||||
|
"brasgauche": { label: "Bras Gauche", id: "brasgauche", locMod: -1, description: "Attaque ciblée sur le bras gauche" },
|
||||||
|
"corps": { label: "Corps", id: "corps", locMod: -2, description: "Attaque ciblée sur le corps" },
|
||||||
|
"tete": { label: "Tête", id: "tete", locMod: -2, description: "Attaque ciblée sur la tête" },
|
||||||
},
|
},
|
||||||
|
|
||||||
ARME_SPECIFICITE: {
|
ARME_SPECIFICITE: {
|
||||||
|
"poing": { label: "Poings", id: "poing", melee: true, tir: false },
|
||||||
|
"pied": { label: "Pieds", id: "pied", melee: true, tir: false },
|
||||||
"encombrante": { label: "Encombrante", id: "encombrante", melee: true, tir: true },
|
"encombrante": { label: "Encombrante", id: "encombrante", melee: true, tir: true },
|
||||||
"maintiendistance": { label: "Maintien à distance", id: "maintiendistance", melee: true, tir: false },
|
"maintiendistance": { label: "Maintien à distance", id: "maintiendistance", melee: true, tir: false },
|
||||||
"coupassomant": { label: "Coup assomant", id: "coupassomant", melee: true, tir: false },
|
"coupassomant": { label: "Coup assomant", id: "coupassomant", melee: true, tir: false },
|
||||||
@@ -57,7 +73,7 @@ export const TEDEUM_CONFIG = {
|
|||||||
|
|
||||||
descriptionValeurOdd: {
|
descriptionValeurOdd: {
|
||||||
1: { valeur: 1, qualite: "Mauvais", dice: "d4", negativeDice: "d20", savoir: "Sot", sensibilite: "Obtus", entregent: "Rustaud", puissance: "Menu", complexion: "Anémique", adresse: "Empesé" },
|
1: { valeur: 1, qualite: "Mauvais", dice: "d4", negativeDice: "d20", savoir: "Sot", sensibilite: "Obtus", entregent: "Rustaud", puissance: "Menu", complexion: "Anémique", adresse: "Empesé" },
|
||||||
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Frustre", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
|
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Fruste", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
|
||||||
3: { valeur: 3, qualite: "Correct", dice: "d8", negativeDice: "d10", savoir: "Mêlé", sensibilite: "Ouvert", entregent: "Badin", puissance: "Membru", complexion: "Dispos", adresse: "Ingambe" },
|
3: { valeur: 3, qualite: "Correct", dice: "d8", negativeDice: "d10", savoir: "Mêlé", sensibilite: "Ouvert", entregent: "Badin", puissance: "Membru", complexion: "Dispos", adresse: "Ingambe" },
|
||||||
4: { valeur: 4, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
|
4: { valeur: 4, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
|
||||||
5: { valeur: 5, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
|
5: { valeur: 5, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
|
||||||
@@ -71,12 +87,20 @@ export const TEDEUM_CONFIG = {
|
|||||||
},
|
},
|
||||||
descriptionValeur: {
|
descriptionValeur: {
|
||||||
1: { valeur: 1, qualite: "Mauvais", dice: "d4", negativeDice: "d20", savoir: "Sot", sensibilite: "Obtus", entregent: "Rustaud", puissance: "Menu", complexion: "Anémique", adresse: "Empesé" },
|
1: { valeur: 1, qualite: "Mauvais", dice: "d4", negativeDice: "d20", savoir: "Sot", sensibilite: "Obtus", entregent: "Rustaud", puissance: "Menu", complexion: "Anémique", adresse: "Empesé" },
|
||||||
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Frustre", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
|
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Fruste", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
|
||||||
3: { valeur: 3, qualite: "Correct", dice: "d8", negativeDice: "d10", savoir: "Mêlé", sensibilite: "Ouvert", entregent: "Badin", puissance: "Membru", complexion: "Dispos", adresse: "Ingambe" },
|
3: { valeur: 3, qualite: "Correct", dice: "d8", negativeDice: "d10", savoir: "Mêlé", sensibilite: "Ouvert", entregent: "Badin", puissance: "Membru", complexion: "Dispos", adresse: "Ingambe" },
|
||||||
4: { valeur: 4, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
|
4: { valeur: 4, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
|
||||||
5: { valeur: 5, qualite: "Excellent", dice: "d12", negativeDice: "d6", savoir: "Docte", sensibilite: "Subtil", entregent: "Galant", puissance: "Musculeux", complexion: "Sanguin", adresse: "Preste" },
|
5: { valeur: 5, qualite: "Excellent", dice: "d12", negativeDice: "d6", savoir: "Docte", sensibilite: "Subtil", entregent: "Galant", puissance: "Musculeux", complexion: "Sanguin", adresse: "Preste" },
|
||||||
6: { valeur: 6, qualite: "Admirable", dice: "d20", negativeDice: "d4", savoir: "Humaniste", sensibilite: "Spirituel", entregent: "Sémillant", puissance: "Hercule", complexion: "Aguerri", adresse: "Alerte" },
|
6: { valeur: 6, qualite: "Admirable", dice: "d20", negativeDice: "d4", savoir: "Humaniste", sensibilite: "Spirituel", entregent: "Sémillant", puissance: "Hercule", complexion: "Aguerri", adresse: "Alerte" },
|
||||||
},
|
},
|
||||||
|
descriptionValeurFemme: {
|
||||||
|
1: { valeur: 1, qualite: "Mauvais", dice: "d4", negativeDice: "d20", savoir: "Sotte", sensibilite: "Obtuse", entregent: "Rustaude", puissance: "Menue", complexion: "Anémique", adresse: "Empesée" },
|
||||||
|
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limitée", sensibilite: "Etriquée", entregent: "Fruste", puissance: "Délicate", complexion: "Languide", adresse: "Gauche" },
|
||||||
|
3: { valeur: 3, qualite: "Correct", dice: "d8", negativeDice: "d10", savoir: "Mêlée", sensibilite: "Ouverte", entregent: "Badine", puissance: "Membrue", complexion: "Dispose", adresse: "Ingambe" },
|
||||||
|
4: { valeur: 4, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettrée", sensibilite: "Fine", entregent: "Diserte", puissance: "Vigoureuse", complexion: "Gaillarde", adresse: "Leste" },
|
||||||
|
5: { valeur: 5, qualite: "Excellent", dice: "d12", negativeDice: "d6", savoir: "Docte", sensibilite: "Subtile", entregent: "Galante", puissance: "Musculeuse", complexion: "Sanguine", adresse: "Preste" },
|
||||||
|
6: { valeur: 6, qualite: "Admirable", dice: "d20", negativeDice: "d4", savoir: "Humaniste", sensibilite: "Spirituelle", entregent: "Sémillante", puissance: "Hercule", complexion: "Aguerrie", adresse: "Alerte" },
|
||||||
|
},
|
||||||
diceValeur: ["d4", "d6", "d8", "d10", "d12", "d20"],
|
diceValeur: ["d4", "d6", "d8", "d10", "d12", "d20"],
|
||||||
degatsArmure: {
|
degatsArmure: {
|
||||||
sansarmure: { label: "Sans armure" },
|
sansarmure: { label: "Sans armure" },
|
||||||
@@ -94,10 +118,10 @@ export const TEDEUM_CONFIG = {
|
|||||||
adresse: { id: "adresse", value: "adresse", label: "Adresse", description: "Cette caractéristique correspond à la rapidité et la dextérité du personnage. Elle livre le nombre d'actions qu'un personnage peut accomplir en un tour de combat et permet d'évaluer les compétences de base Initiative & Course." },
|
adresse: { id: "adresse", value: "adresse", label: "Adresse", description: "Cette caractéristique correspond à la rapidité et la dextérité du personnage. Elle livre le nombre d'actions qu'un personnage peut accomplir en un tour de combat et permet d'évaluer les compétences de base Initiative & Course." },
|
||||||
},
|
},
|
||||||
allonges: {
|
allonges: {
|
||||||
courte: { courte: { malus: 0 }, moyenne: { malus: -1 }, longue: { malus: -2 }, treslongue: { malus: 0, esquive: 2 } },
|
courte: { courte: { label: "Courte (0)", malus: 0 }, moyenne: { label: "Moyenne (-1)", malus: -1 }, longue: { label: "Longue (-2)", malus: -2 }, treslongue: { label: "Très longue (0, 2 Esquives)", malus: 0, esquive: 2 } },
|
||||||
moyenne: { courte: { malus: 0 }, moyenne: { malus: 0 }, longue: { malus: -1 }, treslongue: { malus: 0, esquive: 2 } },
|
moyenne: { courte: { label: "Courte (0)", malus: 0 }, moyenne: { label: "Moyenne (0)", malus: 0 }, longue: { label: "Longue (-1)", malus: -1 }, treslongue: { label: "Très longue (0, 2 Esquives)", malus: 0, esquive: 2 } },
|
||||||
longue: { courte: { malus: -2 }, moyenne: { malus: -1 }, longue: { malus: 0 }, treslongue: { malus: -1, esquive: 1 } },
|
longue: { courte: { label: "Courte (-2)", malus: -2 }, moyenne: { label: "Moyenne (-1)", malus: -1 }, longue: { label: "Longue (0)", malus: 0 }, treslongue: { label: "Très longue (-1, 2 Esquives)", malus: -1, esquive: 1 } },
|
||||||
treslongue: { courte: { malus: 0, esquive: 2 }, moyenne: { malus: 0, esquive: 2 }, longue: { malus: 0, esquive: 1 }, treslongue: { malus: 0 } },
|
treslongue: { courte: { label: "Courte (0, 2 Esquives)", malus: 0, esquive: 2 }, moyenne: { label: "Moyenne (0, 2 Esquives)", malus: 0, esquive: 2 }, longue: { label: "Longue (0, 1 Esquive)", malus: 0, esquive: 1 }, treslongue: { label: "Très longue (0)", malus: 0 } },
|
||||||
},
|
},
|
||||||
providence: [
|
providence: [
|
||||||
{ labelM: "Brebis égarée", labelF: "Brebis égarée", value: 0, diceValue: "0" },
|
{ labelM: "Brebis égarée", labelF: "Brebis égarée", value: 0, diceValue: "0" },
|
||||||
@@ -117,6 +141,11 @@ export const TEDEUM_CONFIG = {
|
|||||||
melee: { label: "Mêlée", value: "melee" },
|
melee: { label: "Mêlée", value: "melee" },
|
||||||
tir: { label: "Tir", value: "tir" }
|
tir: { label: "Tir", value: "tir" }
|
||||||
},
|
},
|
||||||
|
genreEducation: {
|
||||||
|
"homme": { label: "Homme", value: "Homme" },
|
||||||
|
"femme": { label: "Femme", value: "Femme" },
|
||||||
|
"mixte": { label: "Mixte", value: "Mixte" }
|
||||||
|
},
|
||||||
armeAllonges: {
|
armeAllonges: {
|
||||||
courte: { label: "Courte", value: "courte" },
|
courte: { label: "Courte", value: "courte" },
|
||||||
moyenne: { label: "Moyenne", value: "moyenne" },
|
moyenne: { label: "Moyenne", value: "moyenne" },
|
||||||
@@ -139,24 +168,29 @@ export const TEDEUM_CONFIG = {
|
|||||||
},
|
},
|
||||||
difficulte: {
|
difficulte: {
|
||||||
aucune: { label: "Aucune", key: "aucune", value: 0 },
|
aucune: { label: "Aucune", key: "aucune", value: 0 },
|
||||||
routine: { label: "Routine", key: "routine", value: 3 },
|
routine: { label: "Routine (3)", key: "routine", value: 3 },
|
||||||
facile: { label: "Facile", key: "facile", value: 5 },
|
facile: { label: "Facile (5)", key: "facile", value: 5 },
|
||||||
pardefaut: { label: "Par Défaut", key: "pardefaut", value: 7 },
|
pardefaut: { label: "Par Défaut (7)", key: "pardefaut", value: 7 },
|
||||||
malaise: { label: "Malaisé", key: "malaise", value: 9 },
|
malaise: { label: "Malaisé (9)", key: "malaise", value: 9 },
|
||||||
difficile: { label: "Difficile", key: "difficile", value: 11 },
|
difficile: { label: "Difficile (11)", key: "difficile", value: 11 },
|
||||||
perilleux: { label: "Perilleux", key: "perilleux", value: 13 },
|
perilleux: { label: "Perilleux (13)", key: "perilleux", value: 13 },
|
||||||
desespere: { label: "Désespéré", key: "desespere", value: 15 }
|
desespere: { label: "Désespéré (15)", key: "desespere", value: 15 }
|
||||||
},
|
},
|
||||||
monnaie: {
|
monnaie: {
|
||||||
denier: { label: "Deniers", id: "denier", value: 1 },
|
denier: { label: "Deniers", id: "denier", value: 1 },
|
||||||
sol: { label: "Sols", id: "sol", value: 10 },
|
sol: { label: "Sols", id: "sol", value: 10 },
|
||||||
livre: { label: "Livres", id: "livre", value: 100 }
|
livre: { label: "Livres", id: "livre", value: 100 }
|
||||||
},
|
},
|
||||||
|
monnaieUnit: {
|
||||||
|
"1": { label: "Deniers", id: "denier", value: 1 },
|
||||||
|
"10": { label: "Sols", id: "sol", value: 10 },
|
||||||
|
"100": { label: "Livres", id: "livre", value: 100 }
|
||||||
|
},
|
||||||
etapesEducation: {
|
etapesEducation: {
|
||||||
pouponniere: { label: "La Pouponnière", value: "pouponniere", agemin: 0, agemax: 6, nbCompetences: 2, nbCaracteristiques: 3, hasQuestionnaire: true, hasDebouches: false, hasMultiplier: false, canCompetencesOpt: false },
|
pouponniere: { label: "La Pouponnière", value: "pouponniere", agemin: 0, agemax: 6, nbCompetences: 2, nbCaracteristiques: 3, hasGenre: false, hasQuestionnaire: true, hasDebouches: false, hasMultiplier: false, canCompetencesOpt: false },
|
||||||
petitsgrimauds: { label: "La classe des Petits Grimauds", value: "petitsgrimauds", agemin: 7, agemax: 12, nbCompetences: 10, nbCaracteristiques: 3, hasDebouches: false, hasQuestionnaire: true, hasMultiplier: false, canCompetencesOpt: false },
|
petitsgrimauds: { label: "La classe des Petits Grimauds", value: "petitsgrimauds", agemin: 7, agemax: 12, nbCompetences: 10, hasGenre: true, nbCaracteristiques: 3, hasDebouches: false, hasQuestionnaire: true, hasMultiplier: false, canCompetencesOpt: false },
|
||||||
rosevie: { label: "Les Roses de la Vie", value: "rosevie", agemin: 13, agemax: 16, nbCompetences: 2, nbCaracteristiques: 3, hasQuestionnaire: true, hasDebouches: true, hasMultiplier: false, canCompetencesOpt: false },
|
rosevie: { label: "Les Roses de la Vie", value: "rosevie", agemin: 13, agemax: 16, nbCompetences: 2, nbCaracteristiques: 3, hasGenre: true, hasQuestionnaire: true, hasDebouches: true, hasMultiplier: false, canCompetencesOpt: false },
|
||||||
ageviril: { label: "L'Age Viril", value: "ageviril", agemin: 17, agemax: 17, nbCompetences: 9, nbCaracteristiques: 2, hasQuestionnaire: false, hasDebouches: false, hasMultiplier: true, canCompetencesOpt: true },
|
ageviril: { label: "L'Age Viril", value: "ageviril", agemin: 17, agemax: 17, nbCompetences: 9, nbCaracteristiques: 2, hasGenre: false, hasQuestionnaire: false, hasDebouches: false, hasMultiplier: true, canCompetencesOpt: true },
|
||||||
},
|
},
|
||||||
origineSociale: {
|
origineSociale: {
|
||||||
noblesseepee: { label: "Noblesse d'épée", id: "noblesseepee", caracteristiques: { entregent: 1, puissance: 1 }, cagnotte: 10, cagnotteUnit: "livres", value: 1 },
|
noblesseepee: { label: "Noblesse d'épée", id: "noblesseepee", caracteristiques: { entregent: 1, puissance: 1 }, cagnotte: 10, cagnotteUnit: "livres", value: 1 },
|
||||||
@@ -177,13 +211,14 @@ export const TEDEUM_CONFIG = {
|
|||||||
{ value: "1", label: "+1 niveau" },
|
{ value: "1", label: "+1 niveau" },
|
||||||
{ value: "2", label: "+2 niveaux" }
|
{ value: "2", label: "+2 niveaux" }
|
||||||
],
|
],
|
||||||
|
blessuresOrder: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet", "tuenet", "tuenet", "tuenet", "tuenet"],
|
||||||
blessures: {
|
blessures: {
|
||||||
indemne: { value: 0, label: "Indemne", key: "indemne", degatsMax: -1, count: 0, modifier: 0 },
|
indemne: { value: 0, label: "Indemne", key: "indemne", degatsMax: -1, count: 0, modifier: 0 },
|
||||||
estafilade: { value: 1, label: "Estafilade", key: "estafilade", degatsMin: 0, degatsMax: 2, count: 1, modifier: 0 },
|
estafilade: { value: 1, label: "Estafilade", key: "estafilade", degatsMin: 0, degatsMax: 2, count: 1, modifier: 0 },
|
||||||
plaie: { value: 2, label: "Plaie", key: "plaie", degatsMin: 3, degatsMax: 4, count: 1, modifier: -1 },
|
plaie: { value: 2, label: "Plaie", key: "plaie", degatsMin: 3, degatsMax: 4, count: 1, modifier: -1 },
|
||||||
plaiebeante: { value: 3, label: "Plaie béante", key: "plaiebeante", degatsMin: 5, degatsMax: 6, count: 1, modifier: -2 },
|
plaiebeante: { value: 3, label: "Plaie béante", key: "plaiebeante", degatsMin: 5, degatsMax: 6, count: 1, modifier: -2 },
|
||||||
plaieatroce: { value: 4, label: "Plaie atroce", key: "plaieatroce", degatsMin: 7, degatsMax: 8, count: 1, horsCombat: true, modifier: -12 },
|
plaieatroce: { value: 4, label: "Plaie atroce", key: "plaieatroce", degatsMin: 7, degatsMax: 8, count: 1, horsCombat: true, modifier: -12 },
|
||||||
tunenet: { value: 5, label: "Tué net", key: "tuenet", degatsMin: 9, degatsMax: 100, count: 1, horsCombat: true, mort: true, modifier: -12 }
|
tuenet: { value: 5, label: "Tué net", key: "tuenet", degatsMin: 9, degatsMax: 100, count: 1, horsCombat: true, mort: true, modifier: -100 }
|
||||||
},
|
},
|
||||||
virulence: {
|
virulence: {
|
||||||
aucune: { label: "Aucune", value: "aucune", modifier: 0 },
|
aucune: { label: "Aucune", value: "aucune", modifier: 0 },
|
||||||
|
|||||||
@@ -12,22 +12,63 @@ export class TeDeumUtility {
|
|||||||
CONFIG.JournalEntry.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
|
CONFIG.JournalEntry.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
|
||||||
CONFIG.Macro.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
|
CONFIG.Macro.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
|
||||||
CONFIG.Adventure.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
|
CONFIG.Adventure.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
|
||||||
|
}
|
||||||
|
|
||||||
|
static installHooks() {
|
||||||
Hooks.on('renderChatLog', (log, html, data) => TeDeumUtility.chatListeners(html));
|
Hooks.on('renderChatLog', (log, html, data) => TeDeumUtility.chatListeners(html));
|
||||||
|
|
||||||
Hooks.on("renderActorDirectory", (app, html, data) => {
|
Hooks.on("renderActorDirectory", (app, html, data) => {
|
||||||
if (game.user.can('ACTOR_CREATE')) {
|
if (game.user.can('ACTOR_CREATE')) {
|
||||||
const button = document.createElement('button');
|
const button = document.createElement('button');
|
||||||
button.style.width = '90%';
|
button.style.width = '60%';
|
||||||
|
button.classList.add('tedeum-create-character');
|
||||||
button.innerHTML = 'Créer un Personnage'
|
button.innerHTML = 'Créer un Personnage'
|
||||||
button.addEventListener('click', () => {
|
button.addEventListener('click', () => {
|
||||||
let cr = new game.system.tedeum.TeDeumCharacterCreator();
|
let cr = new game.system.tedeum.TeDeumCharacterCreator();
|
||||||
cr.init()
|
cr.init()
|
||||||
})
|
})
|
||||||
html.find('.header-actions').after(button)
|
$(html).find('.header-actions').after(button)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
//Hooks.on("getChatLogEntryContext", (html, options) => TeDeumUtility.chatMenuManager(html, options));
|
|
||||||
|
Hooks.on("combatStart", async (combat, updateData, options) => {
|
||||||
|
this.resetCombatActions(combat)
|
||||||
|
});
|
||||||
|
|
||||||
|
Hooks.on("combatRound", (combat, updateData, updateOptions) => {
|
||||||
|
// List all actors related to combatant
|
||||||
|
if (game.user.isGM) {
|
||||||
|
this.resetCombatActions(combat)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
Hooks.on("getCombatTrackerContextOptions", (html, options) => {
|
||||||
|
console.log("Get Combat Tracker Context", html, options)
|
||||||
|
this.pushCombatOptions(html, options);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static pushCombatOptions(html, options) {
|
||||||
|
options.push({ name: "Actions +1", condition: true, icon: '<i class="fas fa-plus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), 1); } })
|
||||||
|
options.push({ name: "Actions -1", condition: true, icon: '<i class="fas fa-minus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), -1); } })
|
||||||
|
options.push({ name: "Actions MG +1", condition: true, icon: '<i class="fas fa-plus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), 1, true); } })
|
||||||
|
options.push({ name: "Actions MG -1", condition: true, icon: '<i class="fas fa-minus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), -1, true); } })
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async resetCombatActions(combat) {
|
||||||
|
for (let c of combat.combatants) {
|
||||||
|
let actor = game.actors.get(c.actorId)
|
||||||
|
if (actor) {
|
||||||
|
let nbActions = actor.getNbActions()?.value || 0
|
||||||
|
let isMainGauche = (actor.getCompetenceScore("Main gauche") > 0)
|
||||||
|
let nbActionsMainGauche = isMainGauche ? nbActions : 0
|
||||||
|
await c.setFlag("world", "available-actions", { nbActions, nbActionsMainGauche })
|
||||||
|
await c.update({ name: `${c.token.name} (${nbActions} / ${nbActionsMainGauche})` })
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -92,6 +133,13 @@ export class TeDeumUtility {
|
|||||||
Handlebars.registerHelper('isGM', function () {
|
Handlebars.registerHelper('isGM', function () {
|
||||||
return game.user.isGM
|
return game.user.isGM
|
||||||
})
|
})
|
||||||
|
Handlebars.registerHelper('monnaie', function (value) {
|
||||||
|
let monnaie = game.system.tedeum.config.monnaieUnit[String(value)]
|
||||||
|
if (monnaie) {
|
||||||
|
return monnaie.label
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
})
|
||||||
|
|
||||||
// Load compendium data
|
// Load compendium data
|
||||||
const competences = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences")
|
const competences = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences")
|
||||||
@@ -160,6 +208,7 @@ export class TeDeumUtility {
|
|||||||
formData.hasMultiplier = etape.hasMultiplier;
|
formData.hasMultiplier = etape.hasMultiplier;
|
||||||
formData.hasDebouches = etape.hasDebouches;
|
formData.hasDebouches = etape.hasDebouches;
|
||||||
formData.canCompetencesOpt = etape.canCompetencesOpt;
|
formData.canCompetencesOpt = etape.canCompetencesOpt;
|
||||||
|
formData.hasGenre = etape.hasGenre;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
@@ -192,7 +241,7 @@ export class TeDeumUtility {
|
|||||||
return actor
|
return actor
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */ /* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async manageOpposition(rollData) {
|
static async manageOpposition(rollData) {
|
||||||
if (!this.currentOpposition) {
|
if (!this.currentOpposition) {
|
||||||
// Store rollData as current GM opposition
|
// Store rollData as current GM opposition
|
||||||
@@ -200,29 +249,73 @@ export class TeDeumUtility {
|
|||||||
ui.notifications.info("Opposition démarrée avec " + rollData.alias);
|
ui.notifications.info("Opposition démarrée avec " + rollData.alias);
|
||||||
} else {
|
} else {
|
||||||
// Perform the opposition
|
// Perform the opposition
|
||||||
let rWinner = this.currentOpposition
|
let isAttackWinner = true
|
||||||
let rLooser = rollData
|
let rWinner, rLooser
|
||||||
if (rWinner.total < rLooser.total) {
|
if (this.currentOpposition.total <= rollData.total) {
|
||||||
rWinner = rollData
|
rWinner = foundry.utils.duplicate(rollData)
|
||||||
rLooser = this.currentOpposition
|
rLooser = foundry.utils.duplicate(this.currentOpposition)
|
||||||
|
isAttackWinner = false
|
||||||
|
} else {
|
||||||
|
rWinner = foundry.utils.duplicate(this.currentOpposition)
|
||||||
|
rLooser = foundry.utils.duplicate(rollData)
|
||||||
|
isAttackWinner = true
|
||||||
}
|
}
|
||||||
this.currentOpposition = undefined // Reset opposition
|
this.currentOpposition = undefined // Reset opposition
|
||||||
let oppositionData = {
|
let oppositionData = {
|
||||||
winner: rWinner,
|
winner: rWinner,
|
||||||
looser: rLooser
|
looser: rLooser
|
||||||
}
|
}
|
||||||
|
// Update difficulty
|
||||||
|
rWinner.difficulty = rLooser.total
|
||||||
|
rLooser.difficulty = rWinner.total
|
||||||
|
await this.computeResults(rWinner)
|
||||||
|
await this.computeResults(rLooser)
|
||||||
|
// Auto XP management when opposed
|
||||||
|
if (rWinner.isReussiteCritique) {
|
||||||
|
let actor = this.getActorFromRollData(rWinner)
|
||||||
|
actor.modifyXP(rWinner.carac.key, 1)
|
||||||
|
}
|
||||||
|
if (rLooser.isEchecCritique) {
|
||||||
|
let actor = this.getActorFromRollData(rLooser)
|
||||||
|
actor.modifyXP(rLooser.carac.key, 1)
|
||||||
|
}
|
||||||
|
|
||||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||||
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-opposition-result.hbs`, oppositionData)
|
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-opposition-result.hbs`, oppositionData)
|
||||||
})
|
})
|
||||||
await msg.setFlag("world", "te-deum-rolldata", rollData)
|
await msg.setFlag("world", "te-deum-rolldata", rollData)
|
||||||
console.log("Rolldata result", rollData)
|
|
||||||
|
// Si le gagnant est l'attaquant, appliquer les dégats sur la victime
|
||||||
|
if (isAttackWinner && rWinner.isSuccess && rWinner.mode == "arme" && rWinner.arme?.system.typeArme == "melee" && rWinner.defenderTokenId) {
|
||||||
|
await this.appliquerDegats(rWinner)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Opposition result", rollData, isAttackWinner, oppositionData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */ /* -------------------------------------------- */
|
||||||
|
static async appliquerDegats(rollData) {
|
||||||
|
await this.processAttaqueMelee(rollData)
|
||||||
|
let defenderToken = canvas.tokens.placeables.find(t => t.id == rollData.defenderTokenId)
|
||||||
|
if (defenderToken) {
|
||||||
|
let actor = defenderToken.actor
|
||||||
|
await actor.appliquerDegats(rollData)
|
||||||
|
// Attaque naturelle avec dégats inférieur à -2
|
||||||
|
if ((rollData?.arme?.system.specificites?.poing?.hasSpec || rollData?.arme?.system.specificites?.pied?.hasSpec) && rollData.degats < -2) {
|
||||||
|
let attacker = this.getActorFromRollData(rollData)
|
||||||
|
attacker.appliquerBlessure("estafilade", "maindroite", "Contusion suite à une attaque naturelle")
|
||||||
|
ui.notifications.info(`${attacker.name} subit 1 contusion en infligeant ${rollData.degats} dégâts à mains nues`)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ui.notifications.error("Impossible de trouver la cible de l'attaque, aucun degats appliqué")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */ /* -------------------------------------------- */
|
/* -------------------------------------------- */ /* -------------------------------------------- */
|
||||||
static async chatListeners(html) {
|
static async chatListeners(html) {
|
||||||
|
|
||||||
html.on("click", '.chat-command-button', event => {
|
$(html).on("click", '.chat-command-opposition', event => {
|
||||||
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
|
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
|
||||||
let message = game.messages.get(messageId)
|
let message = game.messages.get(messageId)
|
||||||
let rollData = message.getFlag("world", "te-deum-rolldata")
|
let rollData = message.getFlag("world", "te-deum-rolldata")
|
||||||
@@ -230,6 +323,25 @@ export class TeDeumUtility {
|
|||||||
TeDeumUtility.manageOpposition(rollData, messageId)
|
TeDeumUtility.manageOpposition(rollData, messageId)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
$(html).on("click", '.chat-command-appliquer-degats', event => {
|
||||||
|
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
|
||||||
|
let message = game.messages.get(messageId)
|
||||||
|
let rollData = message.getFlag("world", "te-deum-rolldata")
|
||||||
|
if (rollData) {
|
||||||
|
TeDeumUtility.appliquerDegats(rollData, messageId)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
$(html).on("click", '.chat-command-gain-xp', event => {
|
||||||
|
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
|
||||||
|
let message = game.messages.get(messageId)
|
||||||
|
let rollData = message.getFlag("world", "te-deum-rolldata")
|
||||||
|
if (rollData) {
|
||||||
|
let actor = TeDeumUtility.getActorFromRollData(rollData)
|
||||||
|
actor.modifyXP(rollData.carac.key, 1)
|
||||||
|
// Hide this button
|
||||||
|
event.currentTarget.style.display = 'none';
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -241,7 +353,7 @@ export class TeDeumUtility {
|
|||||||
'systems/fvtt-te-deum/templates/items/partial-item-description.hbs',
|
'systems/fvtt-te-deum/templates/items/partial-item-description.hbs',
|
||||||
'systems/fvtt-te-deum/templates/dialogs/partial-creator-status.hbs'
|
'systems/fvtt-te-deum/templates/dialogs/partial-creator-status.hbs'
|
||||||
]
|
]
|
||||||
return loadTemplates(templatePaths);
|
return foundry.applications.handlebars.loadTemplates(templatePaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -318,7 +430,7 @@ export class TeDeumUtility {
|
|||||||
let rollData = msg.data.rollData
|
let rollData = msg.data.rollData
|
||||||
if (game.user.isGM) {
|
if (game.user.isGM) {
|
||||||
let chatMsg = await this.createChatMessage(rollData.alias, "blindroll", {
|
let chatMsg = await this.createChatMessage(rollData.alias, "blindroll", {
|
||||||
content: await renderTemplate(msg.data.template, rollData),
|
content: await foundry.applications.handlebars.renderTemplate(msg.data.template, rollData),
|
||||||
whisper: game.user.id
|
whisper: game.user.id
|
||||||
})
|
})
|
||||||
chatMsg.setFlag("world", "tedeum-rolldata", rollData)
|
chatMsg.setFlag("world", "tedeum-rolldata", rollData)
|
||||||
@@ -408,10 +520,11 @@ export class TeDeumUtility {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (rollData.diceSum == 1) {
|
if (rollData.diceSum == 1) {
|
||||||
let critiqueRoll = await new Roll(rollData.carac.negativeDice).roll()
|
let critiqueRoll = await new Roll(rollData.carac.negativeDice)
|
||||||
|
await critiqueRoll.evaluate()
|
||||||
await this.showDiceSoNice(critiqueRoll, game.settings.get("core", "rollMode"))
|
await this.showDiceSoNice(critiqueRoll, game.settings.get("core", "rollMode"))
|
||||||
rollData.critiqueRoll = foundry.utils.duplicate(critiqueRoll)
|
rollData.critiqueRoll = foundry.utils.duplicate(critiqueRoll)
|
||||||
if (critiqueRoll.total > rollData.competence.score) {
|
if (critiqueRoll.total > rollData.competence.system.score) {
|
||||||
rollData.isEchecCritique = true
|
rollData.isEchecCritique = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -439,9 +552,18 @@ export class TeDeumUtility {
|
|||||||
if (rollData.isMouvement) {
|
if (rollData.isMouvement) {
|
||||||
localModifier -= 1
|
localModifier -= 1
|
||||||
}
|
}
|
||||||
|
if (rollData.arme && rollData.allongeId) {
|
||||||
|
localModifier += rollData.allonges[rollData.allongeId].malus
|
||||||
|
rollData.allongeMalus = rollData.allonges[rollData.allongeId].malus
|
||||||
|
rollData.nbEsquives = rollData.allonges[rollData.allongeId]?.esquive || 0
|
||||||
|
}
|
||||||
|
if (rollData.attaqueCiblee && rollData.attaqueCiblee != "aucune") {
|
||||||
|
localModifier -= 1
|
||||||
|
rollData.loc = foundry.utils.duplicate(game.system.tedeum.config.LOCALISATION[rollData.attaqueCiblee])
|
||||||
|
}
|
||||||
let diceBase = this.modifyDice(rollData.carac.dice, localModifier + Number(rollData.bonusMalus) + rollData.santeModifier)
|
let diceBase = this.modifyDice(rollData.carac.dice, localModifier + Number(rollData.bonusMalus) + rollData.santeModifier)
|
||||||
if (!diceBase) return;
|
if (!diceBase) return;
|
||||||
diceFormula = diceBase + "x + " + rollData.competence.system.score
|
diceFormula = diceBase + "x + " + rollData.compScore
|
||||||
}
|
}
|
||||||
if (rollData.enableProvidence) {
|
if (rollData.enableProvidence) {
|
||||||
diceFormula += " + " + rollData.providence.dice
|
diceFormula += " + " + rollData.providence.dice
|
||||||
@@ -451,9 +573,12 @@ export class TeDeumUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async getLocalisation(rollData) {
|
static async getLocalisation(rollData) {
|
||||||
let locRoll = await new Roll("1d20").roll()
|
let locRoll
|
||||||
|
if (rollData.loc) {
|
||||||
|
locRoll = await new Roll(String(rollData.loc.score.min)).roll()
|
||||||
|
} else {
|
||||||
|
locRoll = await new Roll("1d20").roll()
|
||||||
await this.showDiceSoNice(locRoll, game.settings.get("core", "rollMode"))
|
await this.showDiceSoNice(locRoll, game.settings.get("core", "rollMode"))
|
||||||
rollData.locRoll = foundry.utils.duplicate(locRoll)
|
|
||||||
for (let key in game.system.tedeum.config.LOCALISATION) {
|
for (let key in game.system.tedeum.config.LOCALISATION) {
|
||||||
let loc = game.system.tedeum.config.LOCALISATION[key]
|
let loc = game.system.tedeum.config.LOCALISATION[key]
|
||||||
if (locRoll.total >= loc.score.min && locRoll.total <= loc.score.max) {
|
if (locRoll.total >= loc.score.min && locRoll.total <= loc.score.max) {
|
||||||
@@ -462,22 +587,20 @@ export class TeDeumUtility {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
rollData.locRoll = foundry.utils.duplicate(locRoll)
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async processAttaqueMelee(rollData) {
|
static async processAttaqueMelee(rollData) {
|
||||||
if (rollData.arme?.system.typeArme != "melee") {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (rollData.isSuccess) {
|
|
||||||
await this.getLocalisation(rollData)
|
await this.getLocalisation(rollData)
|
||||||
let actor = game.actors.get(rollData.actorId)
|
let actor = game.actors.get(rollData.actorId)
|
||||||
let bDegats = actor.getBonusDegats()
|
let bDegats = actor.getAttaqueBonusDegats(rollData)
|
||||||
let degatsRoll = await new Roll(rollData.arme.system.degats + "+" + bDegats.value).roll()
|
rollData.degatsFormula = rollData.arme.system.degats + "+" + bDegats
|
||||||
|
let degatsRoll = await new Roll(rollData.degatsFormula).roll()
|
||||||
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
|
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
|
||||||
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
||||||
rollData.degats = degatsRoll.total
|
rollData.degats = degatsRoll.total
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async processAttaqueDistance(rollData) {
|
static async processAttaqueDistance(rollData) {
|
||||||
@@ -489,12 +612,40 @@ export class TeDeumUtility {
|
|||||||
await this.getLocalisation(rollData)
|
await this.getLocalisation(rollData)
|
||||||
// Now the degats
|
// Now the degats
|
||||||
let degatsRoll = await new Roll(rollData.arme.system.degats).roll()
|
let degatsRoll = await new Roll(rollData.arme.system.degats).roll()
|
||||||
await this.showDiceSoNice(locRoll, game.settings.get("core", "rollMode"))
|
await this.showDiceSoNice(rollData.degatsRoll, game.settings.get("core", "rollMode"))
|
||||||
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
||||||
rollData.degats = degatsRoll.total
|
rollData.degats = degatsRoll.total
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async manageCombatActions(actor, rollData) {
|
||||||
|
let combat = game.combats.active
|
||||||
|
if (!combat) return;
|
||||||
|
let combatant = combat.getCombatantByActor(actor)
|
||||||
|
if (!combatant) return;
|
||||||
|
let ca = combatant.getFlag("world", "available-actions")
|
||||||
|
if (!ca) return;
|
||||||
|
if (rollData.mode == "arme" && rollData.isMainGauche) {
|
||||||
|
if (ca.nbActionsMainGauche > 0) {
|
||||||
|
ca.nbActionsMainGauche -= 1
|
||||||
|
ca.nbActions = Math.max(ca.nbActions - 1, 0)
|
||||||
|
} else {
|
||||||
|
ui.notifications.error(`${actor.name} n'a plus d'actions disponibles à la main gauche`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ca.nbActions > 0) {
|
||||||
|
ca.nbActions -= 1
|
||||||
|
} else {
|
||||||
|
ui.notifications.error(`${actor.name} n'a plus d'actions disponibles`)
|
||||||
|
}
|
||||||
|
await combatant.setFlag("world", "available-actions", ca)
|
||||||
|
await combatant.update({ name: `${combatant.token.name} (${ca.nbActions} / ${ca.nbActionsMainGauche})` })
|
||||||
|
rollData.hasActions = true
|
||||||
|
rollData.remainingActions = ca.nbActions
|
||||||
|
rollData.remainingActionsMainGauche = ca.nbActionsMainGauche
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async rollTeDeum(rollData) {
|
static async rollTeDeum(rollData) {
|
||||||
|
|
||||||
@@ -504,6 +655,18 @@ export class TeDeumUtility {
|
|||||||
rollData.difficulty = "pardefaut"
|
rollData.difficulty = "pardefaut"
|
||||||
}
|
}
|
||||||
rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value
|
rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value
|
||||||
|
|
||||||
|
// Compute the real competence score
|
||||||
|
if (rollData.competence) {
|
||||||
|
if (rollData.isMainGauche) {
|
||||||
|
rollData.competence = actor.getMeilleureCompetenceMainGauche(rollData.competence)
|
||||||
|
}
|
||||||
|
if (rollData.competence.system.isBase) {
|
||||||
|
rollData.compScore = actor.system.caracteristiques[rollData.competence.system.caracteristique].value
|
||||||
|
} else {
|
||||||
|
rollData.compScore = rollData.competence.system.score
|
||||||
|
}
|
||||||
|
}
|
||||||
let diceFormula = this.computeRollFormula(rollData, actor)
|
let diceFormula = this.computeRollFormula(rollData, actor)
|
||||||
if (!diceFormula) return;
|
if (!diceFormula) return;
|
||||||
console.log("RollData", rollData, diceFormula)
|
console.log("RollData", rollData, diceFormula)
|
||||||
@@ -519,10 +682,11 @@ export class TeDeumUtility {
|
|||||||
await this.computeResults(rollData)
|
await this.computeResults(rollData)
|
||||||
|
|
||||||
await this.processAttaqueDistance(rollData)
|
await this.processAttaqueDistance(rollData)
|
||||||
await this.processAttaqueMelee(rollData)
|
|
||||||
|
await this.manageCombatActions(actor, rollData)
|
||||||
|
|
||||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||||
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-generic-result.hbs`, rollData)
|
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-generic-result.hbs`, rollData)
|
||||||
})
|
})
|
||||||
await msg.setFlag("world", "te-deum-rolldata", rollData)
|
await msg.setFlag("world", "te-deum-rolldata", rollData)
|
||||||
console.log("Rolldata result", rollData)
|
console.log("Rolldata result", rollData)
|
||||||
@@ -531,19 +695,6 @@ export class TeDeumUtility {
|
|||||||
if (rollData.enableProvidence) {
|
if (rollData.enableProvidence) {
|
||||||
actor.modifyProvidence(-1)
|
actor.modifyProvidence(-1)
|
||||||
}
|
}
|
||||||
// Manage XP
|
|
||||||
if (rollData.isReussiteCritique || rollData.isEchecCritique) {
|
|
||||||
actor.modifyXP(rollData.carac.key, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// gestion degats automatique
|
|
||||||
if (rollData.arme && rollData.defenderTokenId) {
|
|
||||||
let defenderToken = canvas.tokens.placeables.find(t => t.id == rollData.defenderTokenId)
|
|
||||||
if (defenderToken) {
|
|
||||||
let actor = defenderToken.actor
|
|
||||||
await actor.appliquerDegats(rollData)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel {
|
|||||||
schema.competenceRecharge = new fields.StringField({ required: false, choices: ["aucune", "archerie", "arquebusade"], initial: "aucune", blank: true });
|
schema.competenceRecharge = new fields.StringField({ required: false, choices: ["aucune", "archerie", "arquebusade"], initial: "aucune", blank: true });
|
||||||
schema.valeurEchecCritique = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 });
|
schema.valeurEchecCritique = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 });
|
||||||
|
|
||||||
schema.initiativeBonus = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 });
|
schema.initiativeBonus = new fields.NumberField({ ...requiredInteger, initial: 0 });
|
||||||
|
|
||||||
schema.degats = new fields.StringField({ required: false, blank: true, initial: "0" });
|
schema.degats = new fields.StringField({ required: false, blank: true, initial: "0" });
|
||||||
schema.degatscrosse = new fields.StringField({ required: false, blank: true, initial: "0" });
|
schema.degatscrosse = new fields.StringField({ required: false, blank: true, initial: "0" });
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export class TeDeumBlessureSchema extends foundry.abstract.TypeDataModel {
|
|||||||
const schema = {};
|
const schema = {};
|
||||||
|
|
||||||
schema.typeBlessure = new fields.StringField({ required: true, choices: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet"], initial: "estafilade" });
|
schema.typeBlessure = new fields.StringField({ required: true, choices: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet"], initial: "estafilade" });
|
||||||
|
schema.value = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||||
schema.localisation = new fields.StringField({ required: true, choices: ["piedgauche", "pieddroit", "jambegauche", "jambedroite", "maingauche", "maindroite", "brasgauche", "brasdroit", "tete", "corps"], initial: "corps" });
|
schema.localisation = new fields.StringField({ required: true, choices: ["piedgauche", "pieddroit", "jambegauche", "jambedroite", "maingauche", "maindroite", "brasgauche", "brasdroit", "tete", "corps"], initial: "corps" });
|
||||||
|
|
||||||
schema.description = new fields.HTMLField({ required: true, blank: true });
|
schema.description = new fields.HTMLField({ required: true, blank: true });
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel {
|
|||||||
}, {})
|
}, {})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
schema.genre = new fields.StringField({required: true, initial: "Homme", choices: ["masculin", "mixte", "Homme", "Femme", "Mixte"]});
|
||||||
|
|
||||||
schema.nbChoixCarac = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 });
|
schema.nbChoixCarac = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 });
|
||||||
schema.caracteristiques = new fields.SchemaField(Array.fromRange(3, 1).reduce((caracs, i) => {
|
schema.caracteristiques = new fields.SchemaField(Array.fromRange(3, 1).reduce((caracs, i) => {
|
||||||
caracs[`carac${i}`] = new fields.SchemaField({
|
caracs[`carac${i}`] = new fields.SchemaField({
|
||||||
@@ -49,7 +51,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel {
|
|||||||
reponse: new fields.StringField({ required: true, blank: true, initial: "" }),
|
reponse: new fields.StringField({ required: true, blank: true, initial: "" }),
|
||||||
compName: new fields.StringField({ required: true, blank: true, initial: "" }),
|
compName: new fields.StringField({ required: true, blank: true, initial: "" }),
|
||||||
toSelect: new fields.BooleanField({ initial: false }),
|
toSelect: new fields.BooleanField({ initial: false }),
|
||||||
compList: new fields.SchemaField(Array.fromRange(10, 1).reduce((comps, i) => {
|
compList: new fields.SchemaField(Array.fromRange(16, 1).reduce((comps, i) => {
|
||||||
comps[`comp${i}`] = new fields.SchemaField({
|
comps[`comp${i}`] = new fields.SchemaField({
|
||||||
compName: new fields.StringField({ required: true, blank: true, initial: "" }),
|
compName: new fields.StringField({ required: true, blank: true, initial: "" }),
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -13,4 +13,10 @@ export class TeDeumEquipementSchema extends foundry.abstract.TypeDataModel {
|
|||||||
|
|
||||||
return schema;
|
return schema;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get monnaieLabel() {
|
||||||
|
console.log("monnaieLabel", this.monnaie,game.system.tedeum.config.monnaieUnit)
|
||||||
|
return game.system.tedeum.config.monnaieUnit[String(this.monnaie)]?.label;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ export class TeDeumMaladieSchema extends foundry.abstract.TypeDataModel {
|
|||||||
schema.virulence = new fields.StringField({required: true, choices: ["fatigue", "epuisement", "souffrance", "agonie"], initial: "fatigue"});
|
schema.virulence = new fields.StringField({required: true, choices: ["fatigue", "epuisement", "souffrance", "agonie"], initial: "fatigue"});
|
||||||
schema.fievre = new fields.StringField({required: true, choices: ["aucune", "legere", "forte", "grave"], initial: "aucune"});
|
schema.fievre = new fields.StringField({required: true, choices: ["aucune", "legere", "forte", "grave"], initial: "aucune"});
|
||||||
schema.symptomes = new fields.HTMLField({ required: true, blank: true });
|
schema.symptomes = new fields.HTMLField({ required: true, blank: true });
|
||||||
schema.appliquee = new fields.BooleanField({initial: false}),
|
schema.complications = new fields.HTMLField({ required: true, blank: true });
|
||||||
|
schema.appliquee = new fields.BooleanField({initial: false});
|
||||||
|
|
||||||
schema.description = new fields.HTMLField({ required: true, blank: true });
|
schema.description = new fields.HTMLField({ required: true, blank: true });
|
||||||
|
|
||||||
|
|||||||
@@ -40,18 +40,20 @@ export class TeDeumPJSchema extends foundry.abstract.TypeDataModel {
|
|||||||
});
|
});
|
||||||
|
|
||||||
schema.description = new fields.HTMLField({required: true, blank: true});
|
schema.description = new fields.HTMLField({required: true, blank: true});
|
||||||
|
schema.notes = new fields.HTMLField({required: true, blank: true});
|
||||||
schema.connaissances = new fields.HTMLField({required: true, blank: true});
|
schema.connaissances = new fields.HTMLField({required: true, blank: true});
|
||||||
schema.histoire = new fields.HTMLField({required: true, blank: true});
|
schema.histoire = new fields.HTMLField({required: true, blank: true});
|
||||||
schema.vetements = new fields.HTMLField({required: true, blank: true});
|
schema.vetements = new fields.HTMLField({required: true, blank: true});
|
||||||
schema.equipmentfree = new fields.HTMLField({required: true, blank: true});
|
schema.equipmentfree = new fields.HTMLField({required: true, blank: true});
|
||||||
|
|
||||||
schema.genre = new fields.StringField({required: true, choices: game.system.tedeum.config.genre, initial: "Femme"});
|
schema.genre = new fields.StringField({required: true, choices: game.system.tedeum.config.genre, initial: "Femme"});
|
||||||
schema.age = new fields.StringField({ required: false, blank: true, initial: undefined });
|
schema.age = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||||
schema.statutocial = new fields.StringField({ required: false, blank: true, initial: undefined });
|
schema.datenaissance = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||||
schema.chargestitre = new fields.StringField({ required: false, blank: true, initial: undefined });
|
schema.statutocial = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||||
schema.charges = new fields.StringField({ required: false, blank: true, initial: undefined });
|
schema.chargestitre = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||||
schema.religion = new fields.StringField({ required: false, blank: true, initial: undefined });
|
schema.charges = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||||
schema.lieunaissance = new fields.StringField({ required: false, blank: true, initial: undefined });
|
schema.religion = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||||
|
schema.lieunaissance = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||||
|
|
||||||
return schema;
|
return schema;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,9 +60,18 @@ export class TeDeumRollDialog extends Dialog {
|
|||||||
html.find('#bonusMalusPerso').change((event) => {
|
html.find('#bonusMalusPerso').change((event) => {
|
||||||
this.rollData.bonusMalusPerso = Number(event.currentTarget.value)
|
this.rollData.bonusMalusPerso = Number(event.currentTarget.value)
|
||||||
})
|
})
|
||||||
|
html.find('#roll-allonge').change((event) => {
|
||||||
|
this.rollData.allongeId = event.currentTarget.value
|
||||||
|
})
|
||||||
|
html.find('#roll-main-gauche').change((event) => {
|
||||||
|
this.rollData.isMainGauche = event.currentTarget.checked
|
||||||
|
})
|
||||||
html.find('#roll-difficulty').change((event) => {
|
html.find('#roll-difficulty').change((event) => {
|
||||||
this.rollData.difficulty = String(event.currentTarget.value) || "pardefaut"
|
this.rollData.difficulty = String(event.currentTarget.value) || "pardefaut"
|
||||||
})
|
})
|
||||||
|
html.find('#roll-attaque-ciblee').change((event) => {
|
||||||
|
this.rollData.attaqueCiblee = event.currentTarget.value || "0"
|
||||||
|
})
|
||||||
html.find('#roll-bonus-malus').change((event) => {
|
html.find('#roll-bonus-malus').change((event) => {
|
||||||
this.rollData.bonusMalus = event.currentTarget.value || "0"
|
this.rollData.bonusMalus = event.currentTarget.value || "0"
|
||||||
})
|
})
|
||||||
@@ -80,6 +89,12 @@ export class TeDeumRollDialog extends Dialog {
|
|||||||
html.find('#roll-tir-mouvement').change((event) => {
|
html.find('#roll-tir-mouvement').change((event) => {
|
||||||
this.rollData.isMouvement = event.currentTarget.checked
|
this.rollData.isMouvement = event.currentTarget.checked
|
||||||
})
|
})
|
||||||
|
html.find('#roll-charge-a-pied').change((event) => {
|
||||||
|
this.rollData.isChargeAPied = event.currentTarget.checked
|
||||||
|
})
|
||||||
|
html.find('#roll-charge-a-cheval').change((event) => {
|
||||||
|
this.rollData.isChargeACheval = event.currentTarget.checked
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { TeDeumUtility } from "../common/tedeum-utility.js";
|
|||||||
* Extend the basic ItemSheet with some very simple modifications
|
* Extend the basic ItemSheet with some very simple modifications
|
||||||
* @extends {ItemSheet}
|
* @extends {ItemSheet}
|
||||||
*/
|
*/
|
||||||
export class TeDeumItemSheet extends ItemSheet {
|
export class TeDeumItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
@@ -49,8 +49,8 @@ export class TeDeumItemSheet extends ItemSheet {
|
|||||||
limited: this.object.limited,
|
limited: this.object.limited,
|
||||||
options: this.options,
|
options: this.options,
|
||||||
owner: this.document.isOwner,
|
owner: this.document.isOwner,
|
||||||
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
|
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
|
||||||
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }),
|
notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }),
|
||||||
isGM: game.user.isGM
|
isGM: game.user.isGM
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +59,6 @@ export class TeDeumItemSheet extends ItemSheet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.options.editable = !(this.object.origin == "embeddedItem");
|
this.options.editable = !(this.object.origin == "embeddedItem");
|
||||||
console.log("ITEM DATA", formData, this);
|
|
||||||
return formData;
|
return formData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -82,14 +82,16 @@ Hooks.once("init", async function () {
|
|||||||
|
|
||||||
console.log("TeDeum RPG | Ready");
|
console.log("TeDeum RPG | Ready");
|
||||||
|
|
||||||
Actors.unregisterSheet("core", ActorSheet);
|
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
|
||||||
Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pj"], makeDefault: true });
|
foundry.documents.collections.Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pj"], makeDefault: true });
|
||||||
Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pnj"], makeDefault: true });
|
foundry.documents.collections.Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pnj"], makeDefault: true });
|
||||||
|
|
||||||
Items.unregisterSheet("core", ItemSheet);
|
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
||||||
Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true });
|
foundry.documents.collections.Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true });
|
||||||
|
|
||||||
TeDeumUtility.init()
|
TeDeumUtility.init()
|
||||||
|
|
||||||
|
TeDeumUtility.installHooks()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -98,6 +100,7 @@ Hooks.once("init", async function () {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
Hooks.once("ready", function () {
|
Hooks.once("ready", function () {
|
||||||
|
|
||||||
|
|
||||||
// User warning
|
// User warning
|
||||||
if (!game.user.isGM && game.user.character == undefined) {
|
if (!game.user.isGM && game.user.character == undefined) {
|
||||||
ui.notifications.info("Attention ! Aucun personnage relié au joueur !");
|
ui.notifications.info("Attention ! Aucun personnage relié au joueur !");
|
||||||
@@ -134,4 +137,3 @@ Hooks.on("chatMessage", (html, content, msg) => {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
BIN
packs/aides/000136.ldb
Normal file
BIN
packs/aides/000136.ldb
Normal file
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000023
|
MANIFEST-000157
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
2025/02/22-22:33:49.671443 7f59317fa6c0 Recovering log #21
|
2025/09/24-15:09:29.187023 7f7d00dfa6c0 Recovering log #155
|
||||||
2025/02/22-22:33:49.682157 7f59317fa6c0 Delete type=3 #19
|
2025/09/24-15:09:29.197297 7f7d00dfa6c0 Delete type=3 #153
|
||||||
2025/02/22-22:33:49.682211 7f59317fa6c0 Delete type=0 #21
|
2025/09/24-15:09:29.197358 7f7d00dfa6c0 Delete type=0 #155
|
||||||
2025/02/22-22:43:19.821691 7f5693fff6c0 Level-0 table #26: started
|
2025/09/24-15:11:47.439451 7f7cf9fff6c0 Level-0 table #160: started
|
||||||
2025/02/22-22:43:19.821739 7f5693fff6c0 Level-0 table #26: 0 bytes OK
|
2025/09/24-15:11:47.439482 7f7cf9fff6c0 Level-0 table #160: 0 bytes OK
|
||||||
2025/02/22-22:43:19.827819 7f5693fff6c0 Delete type=0 #24
|
2025/09/24-15:11:47.446526 7f7cf9fff6c0 Delete type=0 #158
|
||||||
2025/02/22-22:43:19.828050 7f5693fff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
2025/09/24-15:11:47.446682 7f7cf9fff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||||
2025/02/22-22:43:19.841442 7f5693fff6c0 Manual compaction at level-1 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
2025/02/21-17:44:00.297169 7f5931ffb6c0 Recovering log #16
|
2025/09/24-14:48:23.305998 7f7cfb7fe6c0 Recovering log #151
|
||||||
2025/02/21-17:44:00.350341 7f5931ffb6c0 Delete type=3 #14
|
2025/09/24-14:48:23.315978 7f7cfb7fe6c0 Delete type=3 #149
|
||||||
2025/02/21-17:44:00.350497 7f5931ffb6c0 Delete type=0 #16
|
2025/09/24-14:48:23.316051 7f7cfb7fe6c0 Delete type=0 #151
|
||||||
2025/02/21-17:47:55.710312 7f5693fff6c0 Level-0 table #22: started
|
2025/09/24-15:08:26.608194 7f7cf9fff6c0 Level-0 table #156: started
|
||||||
2025/02/21-17:47:55.710349 7f5693fff6c0 Level-0 table #22: 0 bytes OK
|
2025/09/24-15:08:26.608240 7f7cf9fff6c0 Level-0 table #156: 0 bytes OK
|
||||||
2025/02/21-17:47:55.716766 7f5693fff6c0 Delete type=0 #20
|
2025/09/24-15:08:26.663875 7f7cf9fff6c0 Delete type=0 #154
|
||||||
2025/02/21-17:47:55.743124 7f5693fff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
2025/09/24-15:08:26.664085 7f7cf9fff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||||
2025/02/21-17:47:55.743202 7f5693fff6c0 Manual compaction at level-1 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
|
||||||
|
|||||||
Binary file not shown.
BIN
packs/aides/MANIFEST-000157
Normal file
BIN
packs/aides/MANIFEST-000157
Normal file
Binary file not shown.
BIN
packs/aides/lost/MANIFEST-000047
Normal file
BIN
packs/aides/lost/MANIFEST-000047
Normal file
Binary file not shown.
BIN
packs/aides/lost/MANIFEST-000054
Normal file
BIN
packs/aides/lost/MANIFEST-000054
Normal file
Binary file not shown.
BIN
packs/aides/lost/MANIFEST-000061
Normal file
BIN
packs/aides/lost/MANIFEST-000061
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/armes/000239.ldb
Normal file
BIN
packs/armes/000239.ldb
Normal file
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000125
|
MANIFEST-000260
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2025/02/22-22:33:49.571959 7f5930ff96c0 Recovering log #123
|
2025/09/24-15:09:29.097777 7f7cfbfff6c0 Recovering log #258
|
||||||
2025/02/22-22:33:49.581451 7f5930ff96c0 Delete type=3 #121
|
2025/09/24-15:09:29.108008 7f7cfbfff6c0 Delete type=3 #256
|
||||||
2025/02/22-22:33:49.581507 7f5930ff96c0 Delete type=0 #123
|
2025/09/24-15:09:29.108079 7f7cfbfff6c0 Delete type=0 #258
|
||||||
2025/02/22-22:43:19.756476 7f5693fff6c0 Level-0 table #128: started
|
2025/09/24-15:11:47.381009 7f7cf9fff6c0 Level-0 table #263: started
|
||||||
2025/02/22-22:43:19.756512 7f5693fff6c0 Level-0 table #128: 0 bytes OK
|
2025/09/24-15:11:47.381035 7f7cf9fff6c0 Level-0 table #263: 0 bytes OK
|
||||||
2025/02/22-22:43:19.763078 7f5693fff6c0 Delete type=0 #126
|
2025/09/24-15:11:47.387083 7f7cf9fff6c0 Delete type=0 #261
|
||||||
2025/02/22-22:43:19.770534 7f5693fff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
2025/09/24-15:11:47.393292 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2025/02/21-17:43:59.860699 7f59317fa6c0 Recovering log #119
|
2025/09/24-14:48:23.211234 7f7cfaffd6c0 Recovering log #254
|
||||||
2025/02/21-17:43:59.916350 7f59317fa6c0 Delete type=3 #117
|
2025/09/24-14:48:23.220782 7f7cfaffd6c0 Delete type=3 #252
|
||||||
2025/02/21-17:43:59.916493 7f59317fa6c0 Delete type=0 #119
|
2025/09/24-14:48:23.220848 7f7cfaffd6c0 Delete type=0 #254
|
||||||
2025/02/21-17:47:55.663886 7f5693fff6c0 Level-0 table #124: started
|
2025/09/24-15:08:26.052999 7f7cf9fff6c0 Level-0 table #259: started
|
||||||
2025/02/21-17:47:55.663923 7f5693fff6c0 Level-0 table #124: 0 bytes OK
|
2025/09/24-15:08:26.053039 7f7cf9fff6c0 Level-0 table #259: 0 bytes OK
|
||||||
2025/02/21-17:47:55.670649 7f5693fff6c0 Delete type=0 #122
|
2025/09/24-15:08:26.114659 7f7cf9fff6c0 Delete type=0 #257
|
||||||
2025/02/21-17:47:55.677247 7f5693fff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
2025/09/24-15:08:26.173656 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
BIN
packs/armes/MANIFEST-000260
Normal file
BIN
packs/armes/MANIFEST-000260
Normal file
Binary file not shown.
0
packs/armes/lost/000158.log
Normal file
0
packs/armes/lost/000158.log
Normal file
0
packs/armes/lost/000165.log
Normal file
0
packs/armes/lost/000165.log
Normal file
0
packs/armes/lost/000233.log
Normal file
0
packs/armes/lost/000233.log
Normal file
BIN
packs/armes/lost/MANIFEST-000149
Normal file
BIN
packs/armes/lost/MANIFEST-000149
Normal file
Binary file not shown.
BIN
packs/armes/lost/MANIFEST-000156
Normal file
BIN
packs/armes/lost/MANIFEST-000156
Normal file
Binary file not shown.
BIN
packs/armes/lost/MANIFEST-000163
Normal file
BIN
packs/armes/lost/MANIFEST-000163
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/armures/000238.ldb
Normal file
BIN
packs/armures/000238.ldb
Normal file
Binary file not shown.
0
packs/armures/000261.log
Normal file
0
packs/armures/000261.log
Normal file
@@ -1 +1 @@
|
|||||||
MANIFEST-000125
|
MANIFEST-000259
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2025/02/22-22:33:49.584858 7f59317fa6c0 Recovering log #123
|
2025/09/24-15:09:29.111050 7f7cfaffd6c0 Recovering log #257
|
||||||
2025/02/22-22:33:49.595075 7f59317fa6c0 Delete type=3 #121
|
2025/09/24-15:09:29.121636 7f7cfaffd6c0 Delete type=3 #255
|
||||||
2025/02/22-22:33:49.595272 7f59317fa6c0 Delete type=0 #123
|
2025/09/24-15:09:29.121696 7f7cfaffd6c0 Delete type=0 #257
|
||||||
2025/02/22-22:43:19.749434 7f5693fff6c0 Level-0 table #128: started
|
2025/09/24-15:11:47.374855 7f7cf9fff6c0 Level-0 table #262: started
|
||||||
2025/02/22-22:43:19.749479 7f5693fff6c0 Level-0 table #128: 0 bytes OK
|
2025/09/24-15:11:47.374881 7f7cf9fff6c0 Level-0 table #262: 0 bytes OK
|
||||||
2025/02/22-22:43:19.756348 7f5693fff6c0 Delete type=0 #126
|
2025/09/24-15:11:47.380908 7f7cf9fff6c0 Delete type=0 #260
|
||||||
2025/02/22-22:43:19.770523 7f5693fff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
2025/09/24-15:11:47.393280 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2025/02/21-17:43:59.921453 7f5931ffb6c0 Recovering log #119
|
2025/09/24-14:48:23.223575 7f7d00dfa6c0 Recovering log #253
|
||||||
2025/02/21-17:43:59.978668 7f5931ffb6c0 Delete type=3 #117
|
2025/09/24-14:48:23.234727 7f7d00dfa6c0 Delete type=3 #251
|
||||||
2025/02/21-17:43:59.978782 7f5931ffb6c0 Delete type=0 #119
|
2025/09/24-14:48:23.234789 7f7d00dfa6c0 Delete type=0 #253
|
||||||
2025/02/21-17:47:55.657052 7f5693fff6c0 Level-0 table #124: started
|
2025/09/24-15:08:26.173817 7f7cf9fff6c0 Level-0 table #258: started
|
||||||
2025/02/21-17:47:55.657095 7f5693fff6c0 Level-0 table #124: 0 bytes OK
|
2025/09/24-15:08:26.173861 7f7cf9fff6c0 Level-0 table #258: 0 bytes OK
|
||||||
2025/02/21-17:47:55.663742 7f5693fff6c0 Delete type=0 #122
|
2025/09/24-15:08:26.233062 7f7cf9fff6c0 Delete type=0 #256
|
||||||
2025/02/21-17:47:55.677232 7f5693fff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
2025/09/24-15:08:26.424194 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
BIN
packs/armures/MANIFEST-000259
Normal file
BIN
packs/armures/MANIFEST-000259
Normal file
Binary file not shown.
0
packs/armures/lost/000147.log
Normal file
0
packs/armures/lost/000147.log
Normal file
0
packs/armures/lost/000151.log
Normal file
0
packs/armures/lost/000151.log
Normal file
0
packs/armures/lost/000158.log
Normal file
0
packs/armures/lost/000158.log
Normal file
0
packs/armures/lost/000165.log
Normal file
0
packs/armures/lost/000165.log
Normal file
0
packs/armures/lost/000232.log
Normal file
0
packs/armures/lost/000232.log
Normal file
BIN
packs/armures/lost/MANIFEST-000149
Normal file
BIN
packs/armures/lost/MANIFEST-000149
Normal file
Binary file not shown.
BIN
packs/armures/lost/MANIFEST-000156
Normal file
BIN
packs/armures/lost/MANIFEST-000156
Normal file
Binary file not shown.
BIN
packs/armures/lost/MANIFEST-000163
Normal file
BIN
packs/armures/lost/MANIFEST-000163
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/competences/000237.ldb
Normal file
BIN
packs/competences/000237.ldb
Normal file
Binary file not shown.
0
packs/competences/000260.log
Normal file
0
packs/competences/000260.log
Normal file
@@ -1 +1 @@
|
|||||||
MANIFEST-000122
|
MANIFEST-000258
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2025/02/22-22:33:49.555798 7f59327fc6c0 Recovering log #120
|
2025/09/24-15:09:29.084820 7f7d00dfa6c0 Recovering log #256
|
||||||
2025/02/22-22:33:49.566915 7f59327fc6c0 Delete type=3 #118
|
2025/09/24-15:09:29.094841 7f7d00dfa6c0 Delete type=3 #254
|
||||||
2025/02/22-22:33:49.567025 7f59327fc6c0 Delete type=0 #120
|
2025/09/24-15:09:29.094891 7f7d00dfa6c0 Delete type=0 #256
|
||||||
2025/02/22-22:43:19.763211 7f5693fff6c0 Level-0 table #125: started
|
2025/09/24-15:11:47.367611 7f7cf9fff6c0 Level-0 table #261: started
|
||||||
2025/02/22-22:43:19.763237 7f5693fff6c0 Level-0 table #125: 0 bytes OK
|
2025/09/24-15:11:47.367694 7f7cf9fff6c0 Level-0 table #261: 0 bytes OK
|
||||||
2025/02/22-22:43:19.770353 7f5693fff6c0 Delete type=0 #123
|
2025/09/24-15:11:47.374747 7f7cf9fff6c0 Delete type=0 #259
|
||||||
2025/02/22-22:43:19.770546 7f5693fff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
2025/09/24-15:11:47.393269 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2025/02/21-17:43:59.798767 7f5930ff96c0 Recovering log #116
|
2025/09/24-14:48:23.198206 7f7cfb7fe6c0 Recovering log #252
|
||||||
2025/02/21-17:43:59.855271 7f5930ff96c0 Delete type=3 #114
|
2025/09/24-14:48:23.208784 7f7cfb7fe6c0 Delete type=3 #250
|
||||||
2025/02/21-17:43:59.855472 7f5930ff96c0 Delete type=0 #116
|
2025/09/24-14:48:23.208841 7f7cfb7fe6c0 Delete type=0 #252
|
||||||
2025/02/21-17:47:55.650583 7f5693fff6c0 Level-0 table #121: started
|
2025/09/24-15:08:25.940494 7f7cf9fff6c0 Level-0 table #257: started
|
||||||
2025/02/21-17:47:55.650666 7f5693fff6c0 Level-0 table #121: 0 bytes OK
|
2025/09/24-15:08:25.940624 7f7cf9fff6c0 Level-0 table #257: 0 bytes OK
|
||||||
2025/02/21-17:47:55.656867 7f5693fff6c0 Delete type=0 #119
|
2025/09/24-15:08:25.991041 7f7cf9fff6c0 Delete type=0 #255
|
||||||
2025/02/21-17:47:55.677212 7f5693fff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
2025/09/24-15:08:26.173621 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
BIN
packs/competences/MANIFEST-000258
Normal file
BIN
packs/competences/MANIFEST-000258
Normal file
Binary file not shown.
0
packs/competences/lost/000144.log
Normal file
0
packs/competences/lost/000144.log
Normal file
0
packs/competences/lost/000148.log
Normal file
0
packs/competences/lost/000148.log
Normal file
0
packs/competences/lost/000155.log
Normal file
0
packs/competences/lost/000155.log
Normal file
0
packs/competences/lost/000162.log
Normal file
0
packs/competences/lost/000162.log
Normal file
0
packs/competences/lost/000229.log
Normal file
0
packs/competences/lost/000229.log
Normal file
BIN
packs/competences/lost/MANIFEST-000146
Normal file
BIN
packs/competences/lost/MANIFEST-000146
Normal file
Binary file not shown.
BIN
packs/competences/lost/MANIFEST-000153
Normal file
BIN
packs/competences/lost/MANIFEST-000153
Normal file
Binary file not shown.
BIN
packs/competences/lost/MANIFEST-000160
Normal file
BIN
packs/competences/lost/MANIFEST-000160
Normal file
Binary file not shown.
Binary file not shown.
0
packs/education/000271.log
Normal file
0
packs/education/000271.log
Normal file
@@ -1 +1 @@
|
|||||||
MANIFEST-000130
|
MANIFEST-000269
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2025/02/22-22:33:49.598250 7f5931ffb6c0 Recovering log #128
|
2025/09/24-15:09:29.123386 7f7cfb7fe6c0 Recovering log #267
|
||||||
2025/02/22-22:33:49.609114 7f5931ffb6c0 Delete type=3 #126
|
2025/09/24-15:09:29.133578 7f7cfb7fe6c0 Delete type=3 #265
|
||||||
2025/02/22-22:33:49.609187 7f5931ffb6c0 Delete type=0 #128
|
2025/09/24-15:09:29.133633 7f7cfb7fe6c0 Delete type=0 #267
|
||||||
2025/02/22-22:43:19.742523 7f5693fff6c0 Level-0 table #133: started
|
2025/09/24-15:11:47.387224 7f7cf9fff6c0 Level-0 table #272: started
|
||||||
2025/02/22-22:43:19.742609 7f5693fff6c0 Level-0 table #133: 0 bytes OK
|
2025/09/24-15:11:47.387262 7f7cf9fff6c0 Level-0 table #272: 0 bytes OK
|
||||||
2025/02/22-22:43:19.749216 7f5693fff6c0 Delete type=0 #131
|
2025/09/24-15:11:47.393170 7f7cf9fff6c0 Delete type=0 #270
|
||||||
2025/02/22-22:43:19.770500 7f5693fff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
2025/09/24-15:11:47.393301 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
2025/02/21-17:43:59.982694 7f59327fc6c0 Recovering log #124
|
2025/09/24-14:48:23.237291 7f7cfb7fe6c0 Recovering log #263
|
||||||
2025/02/21-17:44:00.043945 7f59327fc6c0 Delete type=3 #122
|
2025/09/24-14:48:23.248109 7f7cfb7fe6c0 Delete type=3 #261
|
||||||
2025/02/21-17:44:00.044048 7f59327fc6c0 Delete type=0 #124
|
2025/09/24-14:48:23.248198 7f7cfb7fe6c0 Delete type=0 #263
|
||||||
2025/02/21-17:47:55.670798 7f5693fff6c0 Level-0 table #129: started
|
2025/09/24-15:08:25.991148 7f7cf9fff6c0 Level-0 table #268: started
|
||||||
2025/02/21-17:47:55.670851 7f5693fff6c0 Level-0 table #129: 0 bytes OK
|
2025/09/24-15:08:25.998446 7f7cf9fff6c0 Level-0 table #268: 0 bytes OK
|
||||||
2025/02/21-17:47:55.677050 7f5693fff6c0 Delete type=0 #127
|
2025/09/24-15:08:26.052852 7f7cf9fff6c0 Delete type=0 #266
|
||||||
2025/02/21-17:47:55.677262 7f5693fff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
2025/09/24-15:08:26.173642 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
||||||
|
|||||||
Binary file not shown.
BIN
packs/education/MANIFEST-000269
Normal file
BIN
packs/education/MANIFEST-000269
Normal file
Binary file not shown.
0
packs/education/lost/000154.log
Normal file
0
packs/education/lost/000154.log
Normal file
0
packs/education/lost/000158.log
Normal file
0
packs/education/lost/000158.log
Normal file
0
packs/education/lost/000165.log
Normal file
0
packs/education/lost/000165.log
Normal file
0
packs/education/lost/000172.log
Normal file
0
packs/education/lost/000172.log
Normal file
0
packs/education/lost/000242.log
Normal file
0
packs/education/lost/000242.log
Normal file
BIN
packs/education/lost/MANIFEST-000156
Normal file
BIN
packs/education/lost/MANIFEST-000156
Normal file
Binary file not shown.
BIN
packs/education/lost/MANIFEST-000163
Normal file
BIN
packs/education/lost/MANIFEST-000163
Normal file
Binary file not shown.
BIN
packs/education/lost/MANIFEST-000170
Normal file
BIN
packs/education/lost/MANIFEST-000170
Normal file
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user