Compare commits
24 Commits
12.0.19
...
d462d22a0a
| Author | SHA1 | Date | |
|---|---|---|---|
| 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:
|
||||
version: ${{steps.get_version.outputs.version-without-v}}
|
||||
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
|
||||
|
||||
# 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.
|
||||
|
||||
|
||||
@@ -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 !
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 8.1 KiB |
@@ -6,7 +6,7 @@
|
||||
import { TeDeumUtility } from "../common/tedeum-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class TeDeumActorPJSheet extends ActorSheet {
|
||||
export class TeDeumActorPJSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
@@ -42,6 +42,7 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
providence: this.actor.prepareProvidence(),
|
||||
arbreCompetences: this.actor.prepareArbreCompetences(),
|
||||
equipements: this.actor.getEquipements(),
|
||||
simples: this.actor.getSimples(),
|
||||
armures: this.actor.getArmures(),
|
||||
graces: this.actor.getGraces(),
|
||||
blessures: this.actor.getBlessures(),
|
||||
@@ -55,9 +56,10 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
nbArmuresLourdes: this.actor.getNbArmuresLourdesActuel(),
|
||||
santeModifier: this.actor.getSanteModifier(),
|
||||
educations: this.actor.getEducations(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
|
||||
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }),
|
||||
histoire: await TextEditor.enrichHTML(this.object.system.histoire, { async: true }),
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
|
||||
equipmentfree: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.equipmentfree, { 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,
|
||||
owner: this.document.isOwner,
|
||||
editScore: this.options.editScore,
|
||||
@@ -65,7 +67,6 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
}
|
||||
this.formData = formData;
|
||||
|
||||
console.log("PC : ", formData, this.object);
|
||||
return formData;
|
||||
}
|
||||
|
||||
@@ -96,7 +97,16 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
})
|
||||
html.find('.item-add').click(ev => {
|
||||
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 => {
|
||||
|
||||
+147
-19
@@ -34,7 +34,7 @@ export class TeDeumActor extends Actor {
|
||||
return actor;
|
||||
}
|
||||
|
||||
if (data.type == 'pj') {
|
||||
if (data.type == 'pj' || data.type == 'pnj') {
|
||||
const skills = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences")
|
||||
data.items = data.items || []
|
||||
for (let skill of skills) {
|
||||
@@ -65,6 +65,18 @@ export class TeDeumActor extends Actor {
|
||||
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
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_onUpdate(changed, options, userId) {
|
||||
let updates = []
|
||||
@@ -119,6 +131,8 @@ export class TeDeumActor extends Actor {
|
||||
if (updates.length > 0) {
|
||||
this.updateEmbeddedDocuments('Item', updates)
|
||||
}
|
||||
|
||||
super._onUpdate(changed, options, userId);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -145,6 +159,24 @@ export class TeDeumActor extends Actor {
|
||||
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() {
|
||||
return game.system.tedeum.config.MAX_ARMURES_LOURDES[this.system.caracteristiques.puissance.value]
|
||||
}
|
||||
@@ -190,6 +222,11 @@ export class TeDeumActor extends Actor {
|
||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getSimples() {
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'simple') || [])
|
||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getArmures() {
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'armure') || [])
|
||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||
@@ -251,41 +288,105 @@ export class TeDeumActor extends Actor {
|
||||
modTotal += blessDef.modifier
|
||||
}
|
||||
// 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")
|
||||
if (blessures.length > endurance.system.score) {
|
||||
let enduranceScore = this.getCompetenceScore("endurance")
|
||||
if (blessures.length > enduranceScore) {
|
||||
modTotal += -1
|
||||
}
|
||||
return modTotal
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async appliquerDegats(rollData) {
|
||||
let combat = this.prepareCombat()
|
||||
rollData.defenderName = this.name
|
||||
let touche = combat[rollData.loc.id].touche
|
||||
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) {
|
||||
async appliquerBlessure(blessureId, locId, comment = "") {
|
||||
let blessure = game.system.tedeum.config.blessures[blessureId]
|
||||
if (!blessure) {
|
||||
ui.notifications.warn("Type de blessure inconnu : " + blessureId)
|
||||
console.error("Type de blessure inconnu : " + blessureId)
|
||||
return
|
||||
}
|
||||
// Create a new blessure object
|
||||
let blessureObj = {
|
||||
name: blessure.label,
|
||||
type: "blessure",
|
||||
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,
|
||||
value: blessure.value,
|
||||
appliquee: true,
|
||||
description: "Blessure infligée par un coup de " + rollData.arme.name + " de " + rollData.alias,
|
||||
}
|
||||
}
|
||||
rollData.blessure = blessureObj
|
||||
rollData.touche = touche
|
||||
this.createEmbeddedDocuments('Item', [blessureObj]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Display the relevant chat message
|
||||
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)
|
||||
}
|
||||
@@ -295,7 +396,11 @@ export class TeDeumActor extends Actor {
|
||||
c.key = key
|
||||
c.name = game.system.tedeum.config.caracteristiques[key].label
|
||||
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]
|
||||
} else {
|
||||
c.qualite = game.system.tedeum.config.descriptionValeurFemme[c.value][key]
|
||||
}
|
||||
c.dice = game.system.tedeum.config.descriptionValeur[c.value].dice
|
||||
c.negativeDice = game.system.tedeum.config.descriptionValeur[c.value].negativeDice
|
||||
}
|
||||
@@ -314,7 +419,11 @@ export class TeDeumActor extends Actor {
|
||||
prepareProvidence() {
|
||||
let providence = foundry.utils.deepClone(this.system.providence)
|
||||
providence.name = "Providence"
|
||||
if (this.system.genre.toLowerCase() == "homme") {
|
||||
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.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
|
||||
@@ -352,11 +461,14 @@ export class TeDeumActor extends Actor {
|
||||
providence.value = Math.min(Math.max(providence.value + value, 0), 6)
|
||||
this.update({ "system.providence": providence })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
modifyXP(key, value) {
|
||||
async modifyXP(key, value) {
|
||||
let xp = this.system.caracteristiques[key].experience
|
||||
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}`)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -505,6 +617,15 @@ export class TeDeumActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore() {
|
||||
let initiative = this.items.find(it => it.type == "competence" && it.name.toLowerCase() == "initiative")
|
||||
initiative = foundry.utils.duplicate(initiative)
|
||||
// Vérifie les armes avec bonus d'initiative
|
||||
let armes = this.getArmes()
|
||||
for (let arme of armes) {
|
||||
if (arme.system.equipe && arme.system.bonusInitiative != 0) {
|
||||
ui.notifications.info("L'arme " + arme.name + " vous confère un bonus d'initiative de " + arme.system.bonusInitiative)
|
||||
initiative.system.score += 1
|
||||
}
|
||||
}
|
||||
if (initiative) {
|
||||
return initiative.system.score
|
||||
}
|
||||
@@ -570,6 +691,7 @@ export class TeDeumActor extends Actor {
|
||||
let rollData = this.getCommonCompetence(compId)
|
||||
rollData.mode = "competence"
|
||||
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")
|
||||
}
|
||||
|
||||
@@ -622,14 +744,20 @@ export class TeDeumActor extends Actor {
|
||||
|
||||
// Setup competence + carac
|
||||
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())
|
||||
if (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])
|
||||
this.updateCarac(c, competence.system.caracteristique)
|
||||
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 {
|
||||
ui.notifications.warn("Impossible de trouver la compétence " + compName)
|
||||
return
|
||||
|
||||
@@ -6,13 +6,14 @@ export class TeDeumCharacterCreator {
|
||||
async init() {
|
||||
this.stages = {}
|
||||
this.currentStage = "origineSociale"
|
||||
this.sex = undefined
|
||||
this.sexe = undefined
|
||||
this.origineSociale = undefined
|
||||
this.religion = undefined
|
||||
this.caracBonus = {}
|
||||
this.competenceBonus = {}
|
||||
this.suiviReponses = []
|
||||
this.competences = TeDeumUtility.getCompetencesForDropDown()
|
||||
this.choiceSummary = {}
|
||||
|
||||
for (let k in game.system.tedeum.config.caracteristiques) {
|
||||
this.caracBonus[k] = { value: 0 }
|
||||
@@ -39,6 +40,7 @@ export class TeDeumCharacterCreator {
|
||||
} else {
|
||||
this.competenceBonus[compName].value += 1
|
||||
}
|
||||
this.choiceSummary[this.currentStage].competences[compName] = 1
|
||||
}
|
||||
|
||||
/*--------------------------------------------*/
|
||||
@@ -69,7 +71,7 @@ export class TeDeumCharacterCreator {
|
||||
|
||||
/*--------------------------------------------*/
|
||||
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({
|
||||
window: { title: context.title },
|
||||
classes: ["fvtt-te-deum"],
|
||||
@@ -116,6 +118,7 @@ export class TeDeumCharacterCreator {
|
||||
/*--------------------------------------------*/
|
||||
async askQuestionnaire(stage, context) {
|
||||
context.subtitle = "Questionnaire"
|
||||
this.choiceSummary[this.currentStage].questionnaire = {}
|
||||
|
||||
for (let key in stage.system.questionnaire) {
|
||||
let question = stage.system.questionnaire[key]
|
||||
@@ -127,7 +130,7 @@ export class TeDeumCharacterCreator {
|
||||
context.competences = {}
|
||||
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({
|
||||
window: { title: context.title },
|
||||
classes: ["fvtt-te-deum"],
|
||||
@@ -170,13 +173,14 @@ export class TeDeumCharacterCreator {
|
||||
let compName = context.competences[context.responseKey] || selectedResponse.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) {
|
||||
context.subtitle = "Choix des Compétences"
|
||||
this.choiceSummary[this.currentStage].competences = {}
|
||||
|
||||
context.fixedCompetences = {}
|
||||
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({
|
||||
window: { title: context.title },
|
||||
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({
|
||||
window: { title: context.title },
|
||||
classes: ["fvtt-te-deum"],
|
||||
@@ -273,6 +277,10 @@ export class TeDeumCharacterCreator {
|
||||
/*------------- -------------------------------*/
|
||||
async askCarac(stage, context) {
|
||||
context.subtitle = "Choix des Caractéristiques"
|
||||
this.choiceSummary[this.currentStage] = {
|
||||
caracBonus : {},
|
||||
competences : {}
|
||||
}
|
||||
|
||||
let selected = []
|
||||
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])
|
||||
}
|
||||
|
||||
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({
|
||||
window: { title: context.title },
|
||||
classes: ["fvtt-te-deum"],
|
||||
@@ -312,6 +320,7 @@ export class TeDeumCharacterCreator {
|
||||
}
|
||||
this.caracBonus[choiceResult.carac].value += 1
|
||||
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
|
||||
}
|
||||
|
||||
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 choiceResult = await foundry.applications.api.DialogV2.wait({
|
||||
window: { title: context.title },
|
||||
@@ -360,6 +369,12 @@ export class TeDeumCharacterCreator {
|
||||
for (let key in this.origineSociale.caracteristiques) {
|
||||
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"
|
||||
|
||||
}
|
||||
@@ -374,6 +389,7 @@ export class TeDeumCharacterCreator {
|
||||
title: "Création de personnage - La Pouponnière",
|
||||
subtitle: "Choix de la Pouponnière",
|
||||
label: "Valider le choix de la Pouponnière",
|
||||
hasGenre: false,
|
||||
choices: pouponniereItems,
|
||||
caracBonus: this.caracBonus,
|
||||
competenceBonus: this.competenceBonus
|
||||
@@ -387,6 +403,7 @@ export class TeDeumCharacterCreator {
|
||||
this.pouponniere = foundry.utils.duplicate(stage.items.find(item => item.id === choiceResult.selectedItem))
|
||||
context.title = `La Pouponnière - ${this.pouponniere.name}`
|
||||
TeDeumUtility.prepareEducationContent(this.pouponniere);
|
||||
this.choiceSummary['pouponniere'] = {}
|
||||
|
||||
context.label = "Valider l'augmentation de caracteristique"
|
||||
await this.askCarac(this.pouponniere, context)
|
||||
@@ -403,11 +420,12 @@ export class TeDeumCharacterCreator {
|
||||
/*--------------------------------------------*/
|
||||
async renderPetitsGrimauds(stage) {
|
||||
// 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 = {
|
||||
title: "Les Petits Grimauds",
|
||||
label: "Valider le choix des Petits Grimauds",
|
||||
hasGenre: true,
|
||||
choices: grimaudsItems,
|
||||
caracBonus: this.caracBonus,
|
||||
competenceBonus: this.competenceBonus
|
||||
@@ -437,12 +455,13 @@ export class TeDeumCharacterCreator {
|
||||
/*--------------------------------------------*/
|
||||
async renderRosesDeLaVie(stage) {
|
||||
// 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 = {
|
||||
title: "Création de personnage - Les Roses de la Vie",
|
||||
label: "Valider le choix des Roses de la Vie",
|
||||
choices: rosesItems,
|
||||
hasGenre: true,
|
||||
caracBonus: this.caracBonus,
|
||||
competenceBonus: this.competenceBonus
|
||||
|
||||
@@ -488,6 +507,7 @@ export class TeDeumCharacterCreator {
|
||||
title: "Création de personnage - L'Age Viril",
|
||||
label: "Valider le choix de l'Age Viril",
|
||||
choices: ageVirilItems,
|
||||
hasGenre: false,
|
||||
caracBonus: this.caracBonus,
|
||||
competenceBonus: this.competenceBonus
|
||||
}
|
||||
@@ -577,14 +597,50 @@ export class TeDeumCharacterCreator {
|
||||
await actor.update({ [`system.fortune.${this.origineSociale.cagnotteUnit}`]: newArgent})
|
||||
|
||||
let histoire = ""
|
||||
for (let reponse of this.suiviReponses) {
|
||||
histoire += `<p>${reponse.question}<br>${reponse.reponse} (${reponse.compName})</p>`
|
||||
for ( let key in this.choiceSummary) {
|
||||
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})
|
||||
|
||||
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 choiceResult = await foundry.applications.api.DialogV2.wait({
|
||||
window: { title: context.title },
|
||||
|
||||
@@ -5,7 +5,7 @@ export class TeDeumCombat extends Combat {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
|
||||
console.log("Roll INIT !")
|
||||
//console.log("Roll INIT !")
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
for (let cId of ids) {
|
||||
const c = this.combatants.get(cId);
|
||||
|
||||
@@ -15,19 +15,35 @@ export const TEDEUM_CONFIG = {
|
||||
{ value: 10 }, { value: 30 }, { value: 50 }],
|
||||
|
||||
LOCALISATION: {
|
||||
"pieddroit": { label: "Pied Droit", value: 1, locMod: 0, id: "pieddroit", 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 } },
|
||||
"jambegauche": { label: "Jambe Gauche", value: 1, locMod: -1, id: "jambegauche", 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 } },
|
||||
"maindroite": { label: "Main Droite", value: 1, locMod: 0, id: "maindroite", 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 } },
|
||||
"brasdroit": { label: "Bras Droit", value: 1, locMod: -1, id: "brasdroit", 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 } },
|
||||
"corps": { label: "Corps", value: 1, id: "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 } },
|
||||
"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", categorie: "jambe", nbArmure: 1, score: { min: 3, max: 4 }, coord: { top: 400, left: 100 } },
|
||||
"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", categorie: "pied", nbArmure: 1, score: { min: 2, max: 2 }, coord: { top: 500, left: 400 } },
|
||||
"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", categorie: "main", nbArmure: 1, score: { min: 8, max: 8 }, coord: { top: 0, left: 400 } },
|
||||
"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", categorie: "bras", nbArmure: 2, score: { min: 11, max: 12 }, coord: { top: 200, left: 400 } },
|
||||
"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", 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: {
|
||||
"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 },
|
||||
"maintiendistance": { label: "Maintien à distance", id: "maintiendistance", melee: true, tir: false },
|
||||
"coupassomant": { label: "Coup assomant", id: "coupassomant", melee: true, tir: false },
|
||||
@@ -57,7 +73,7 @@ export const TEDEUM_CONFIG = {
|
||||
|
||||
descriptionValeurOdd: {
|
||||
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" },
|
||||
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" },
|
||||
@@ -71,12 +87,20 @@ export const TEDEUM_CONFIG = {
|
||||
},
|
||||
descriptionValeur: {
|
||||
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" },
|
||||
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" },
|
||||
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"],
|
||||
degatsArmure: {
|
||||
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." },
|
||||
},
|
||||
allonges: {
|
||||
courte: { courte: { malus: 0 }, moyenne: { malus: -1 }, longue: { malus: -2 }, treslongue: { malus: 0, esquive: 2 } },
|
||||
moyenne: { courte: { malus: 0 }, moyenne: { malus: 0 }, longue: { malus: -1 }, treslongue: { malus: 0, esquive: 2 } },
|
||||
longue: { courte: { malus: -2 }, moyenne: { malus: -1 }, longue: { malus: 0 }, treslongue: { malus: -1, esquive: 1 } },
|
||||
treslongue: { courte: { malus: 0, esquive: 2 }, moyenne: { malus: 0, esquive: 2 }, longue: { malus: 0, esquive: 1 }, treslongue: { malus: 0 } },
|
||||
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: { 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: { 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: { 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: [
|
||||
{ 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" },
|
||||
tir: { label: "Tir", value: "tir" }
|
||||
},
|
||||
genreEducation: {
|
||||
"homme": { label: "Homme", value: "Homme" },
|
||||
"femme": { label: "Femme", value: "Femme" },
|
||||
"mixte": { label: "Mixte", value: "Mixte" }
|
||||
},
|
||||
armeAllonges: {
|
||||
courte: { label: "Courte", value: "courte" },
|
||||
moyenne: { label: "Moyenne", value: "moyenne" },
|
||||
@@ -152,11 +181,16 @@ export const TEDEUM_CONFIG = {
|
||||
sol: { label: "Sols", id: "sol", value: 10 },
|
||||
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: {
|
||||
pouponniere: { label: "La Pouponnière", value: "pouponniere", agemin: 0, agemax: 6, nbCompetences: 2, nbCaracteristiques: 3, 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 },
|
||||
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 },
|
||||
ageviril: { label: "L'Age Viril", value: "ageviril", agemin: 17, agemax: 17, nbCompetences: 9, nbCaracteristiques: 2, hasQuestionnaire: false, hasDebouches: false, hasMultiplier: true, canCompetencesOpt: true },
|
||||
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, 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, 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, hasGenre: false, hasQuestionnaire: false, hasDebouches: false, hasMultiplier: true, canCompetencesOpt: true },
|
||||
},
|
||||
origineSociale: {
|
||||
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: "2", label: "+2 niveaux" }
|
||||
],
|
||||
blessuresOrder: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet", "tuenet", "tuenet", "tuenet", "tuenet"],
|
||||
blessures: {
|
||||
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 },
|
||||
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 },
|
||||
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: {
|
||||
aucune: { label: "Aucune", value: "aucune", modifier: 0 },
|
||||
|
||||
@@ -18,13 +18,14 @@ export class TeDeumUtility {
|
||||
Hooks.on("renderActorDirectory", (app, html, data) => {
|
||||
if (game.user.can('ACTOR_CREATE')) {
|
||||
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.addEventListener('click', () => {
|
||||
let cr = new game.system.tedeum.TeDeumCharacterCreator();
|
||||
cr.init()
|
||||
})
|
||||
html.find('.header-actions').after(button)
|
||||
$(html).find('.header-actions').after(button)
|
||||
}
|
||||
})
|
||||
//Hooks.on("getChatLogEntryContext", (html, options) => TeDeumUtility.chatMenuManager(html, options));
|
||||
@@ -92,6 +93,13 @@ export class TeDeumUtility {
|
||||
Handlebars.registerHelper('isGM', function () {
|
||||
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
|
||||
const competences = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences")
|
||||
@@ -160,6 +168,7 @@ export class TeDeumUtility {
|
||||
formData.hasMultiplier = etape.hasMultiplier;
|
||||
formData.hasDebouches = etape.hasDebouches;
|
||||
formData.canCompetencesOpt = etape.canCompetencesOpt;
|
||||
formData.hasGenre = etape.hasGenre;
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
@@ -200,29 +209,71 @@ export class TeDeumUtility {
|
||||
ui.notifications.info("Opposition démarrée avec " + rollData.alias);
|
||||
} else {
|
||||
// Perform the opposition
|
||||
let isAttackWinner = true
|
||||
let rWinner = this.currentOpposition
|
||||
let rLooser = rollData
|
||||
if (rWinner.total < rLooser.total) {
|
||||
if (rWinner.total <= rLooser.total) {
|
||||
rWinner = rollData
|
||||
rLooser = this.currentOpposition
|
||||
isAttackWinner = false
|
||||
}
|
||||
this.currentOpposition = undefined // Reset opposition
|
||||
let oppositionData = {
|
||||
winner: rWinner,
|
||||
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, {
|
||||
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)
|
||||
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) {
|
||||
|
||||
html.on("click", '.chat-command-button', event => {
|
||||
$(html).on("click", '.chat-command-opposition', event => {
|
||||
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "te-deum-rolldata")
|
||||
@@ -230,6 +281,25 @@ export class TeDeumUtility {
|
||||
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 +311,7 @@ export class TeDeumUtility {
|
||||
'systems/fvtt-te-deum/templates/items/partial-item-description.hbs',
|
||||
'systems/fvtt-te-deum/templates/dialogs/partial-creator-status.hbs'
|
||||
]
|
||||
return loadTemplates(templatePaths);
|
||||
return foundry.applications.handlebars.loadTemplates(templatePaths);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -318,7 +388,7 @@ export class TeDeumUtility {
|
||||
let rollData = msg.data.rollData
|
||||
if (game.user.isGM) {
|
||||
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
|
||||
})
|
||||
chatMsg.setFlag("world", "tedeum-rolldata", rollData)
|
||||
@@ -408,10 +478,11 @@ export class TeDeumUtility {
|
||||
}
|
||||
}
|
||||
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"))
|
||||
rollData.critiqueRoll = foundry.utils.duplicate(critiqueRoll)
|
||||
if (critiqueRoll.total > rollData.competence.score) {
|
||||
if (critiqueRoll.total > rollData.competence.system.score) {
|
||||
rollData.isEchecCritique = true
|
||||
}
|
||||
}
|
||||
@@ -439,9 +510,18 @@ export class TeDeumUtility {
|
||||
if (rollData.isMouvement) {
|
||||
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)
|
||||
if (!diceBase) return;
|
||||
diceFormula = diceBase + "x + " + rollData.competence.system.score
|
||||
diceFormula = diceBase + "x + " + rollData.compScore
|
||||
}
|
||||
if (rollData.enableProvidence) {
|
||||
diceFormula += " + " + rollData.providence.dice
|
||||
@@ -451,9 +531,12 @@ export class TeDeumUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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"))
|
||||
rollData.locRoll = foundry.utils.duplicate(locRoll)
|
||||
for (let key in game.system.tedeum.config.LOCALISATION) {
|
||||
let loc = game.system.tedeum.config.LOCALISATION[key]
|
||||
if (locRoll.total >= loc.score.min && locRoll.total <= loc.score.max) {
|
||||
@@ -462,22 +545,20 @@ export class TeDeumUtility {
|
||||
}
|
||||
}
|
||||
}
|
||||
rollData.locRoll = foundry.utils.duplicate(locRoll)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async processAttaqueMelee(rollData) {
|
||||
if (rollData.arme?.system.typeArme != "melee") {
|
||||
return
|
||||
}
|
||||
if (rollData.isSuccess) {
|
||||
await this.getLocalisation(rollData)
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let bDegats = actor.getBonusDegats()
|
||||
let degatsRoll = await new Roll(rollData.arme.system.degats + "+" + bDegats.value).roll()
|
||||
let bDegats = actor.getAttaqueBonusDegats(rollData)
|
||||
rollData.degatsFormula = rollData.arme.system.degats + "+" + bDegats
|
||||
let degatsRoll = await new Roll(rollData.degatsFormula).roll()
|
||||
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
||||
rollData.degats = degatsRoll.total
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async processAttaqueDistance(rollData) {
|
||||
@@ -489,7 +570,7 @@ export class TeDeumUtility {
|
||||
await this.getLocalisation(rollData)
|
||||
// Now the degats
|
||||
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.degats = degatsRoll.total
|
||||
}
|
||||
@@ -504,6 +585,14 @@ export class TeDeumUtility {
|
||||
rollData.difficulty = "pardefaut"
|
||||
}
|
||||
rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value
|
||||
// Compute the real competence score
|
||||
if (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)
|
||||
if (!diceFormula) return;
|
||||
console.log("RollData", rollData, diceFormula)
|
||||
@@ -519,10 +608,9 @@ export class TeDeumUtility {
|
||||
await this.computeResults(rollData)
|
||||
|
||||
await this.processAttaqueDistance(rollData)
|
||||
await this.processAttaqueMelee(rollData)
|
||||
|
||||
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)
|
||||
console.log("Rolldata result", rollData)
|
||||
@@ -531,19 +619,6 @@ export class TeDeumUtility {
|
||||
if (rollData.enableProvidence) {
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
@@ -5,6 +5,7 @@ export class TeDeumBlessureSchema extends foundry.abstract.TypeDataModel {
|
||||
const schema = {};
|
||||
|
||||
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.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.caracteristiques = new fields.SchemaField(Array.fromRange(3, 1).reduce((caracs, i) => {
|
||||
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: "" }),
|
||||
compName: new fields.StringField({ required: true, blank: true, initial: "" }),
|
||||
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({
|
||||
compName: new fields.StringField({ required: true, blank: true, initial: "" }),
|
||||
});
|
||||
|
||||
@@ -13,4 +13,10 @@ export class TeDeumEquipementSchema extends foundry.abstract.TypeDataModel {
|
||||
|
||||
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.fievre = new fields.StringField({required: true, choices: ["aucune", "legere", "forte", "grave"], initial: "aucune"});
|
||||
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 });
|
||||
|
||||
|
||||
@@ -40,18 +40,20 @@ export class TeDeumPJSchema extends foundry.abstract.TypeDataModel {
|
||||
});
|
||||
|
||||
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.histoire = 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.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.statutocial = new fields.StringField({ required: false, blank: true, initial: undefined });
|
||||
schema.chargestitre = new fields.StringField({ required: false, blank: true, initial: undefined });
|
||||
schema.charges = new fields.StringField({ required: false, blank: true, initial: undefined });
|
||||
schema.religion = new fields.StringField({ required: false, blank: true, initial: undefined });
|
||||
schema.lieunaissance = new fields.StringField({ required: false, blank: true, initial: undefined });
|
||||
schema.age = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||
schema.datenaissance = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||
schema.statutocial = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||
schema.chargestitre = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||
schema.charges = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||
schema.religion = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||
schema.lieunaissance = new fields.StringField({ required: false, blank: true, initial: "" });
|
||||
|
||||
return schema;
|
||||
}
|
||||
|
||||
@@ -60,9 +60,15 @@ export class TeDeumRollDialog extends Dialog {
|
||||
html.find('#bonusMalusPerso').change((event) => {
|
||||
this.rollData.bonusMalusPerso = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#roll-allonge').change((event) => {
|
||||
this.rollData.allongeId = event.currentTarget.value
|
||||
})
|
||||
html.find('#roll-difficulty').change((event) => {
|
||||
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) => {
|
||||
this.rollData.bonusMalus = event.currentTarget.value || "0"
|
||||
})
|
||||
@@ -80,6 +86,12 @@ export class TeDeumRollDialog extends Dialog {
|
||||
html.find('#roll-tir-mouvement').change((event) => {
|
||||
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
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class TeDeumItemSheet extends ItemSheet {
|
||||
export class TeDeumItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
@@ -49,8 +49,8 @@ export class TeDeumItemSheet extends ItemSheet {
|
||||
limited: this.object.limited,
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
|
||||
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }),
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
|
||||
notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }),
|
||||
isGM: game.user.isGM
|
||||
}
|
||||
|
||||
@@ -59,7 +59,6 @@ export class TeDeumItemSheet extends ItemSheet {
|
||||
}
|
||||
|
||||
this.options.editable = !(this.object.origin == "embeddedItem");
|
||||
console.log("ITEM DATA", formData, this);
|
||||
return formData;
|
||||
}
|
||||
|
||||
|
||||
@@ -82,12 +82,12 @@ Hooks.once("init", async function () {
|
||||
|
||||
console.log("TeDeum RPG | Ready");
|
||||
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pj"], makeDefault: true });
|
||||
Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pnj"], makeDefault: true });
|
||||
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pj"], makeDefault: true });
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pnj"], makeDefault: true });
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true });
|
||||
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true });
|
||||
|
||||
TeDeumUtility.init()
|
||||
});
|
||||
@@ -134,4 +134,3 @@ Hooks.on("chatMessage", (html, content, msg) => {
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+1
-1
@@ -1 +1 @@
|
||||
MANIFEST-000023
|
||||
MANIFEST-000137
|
||||
|
||||
+7
-8
@@ -1,8 +1,7 @@
|
||||
2025/02/22-22:33:49.671443 7f59317fa6c0 Recovering log #21
|
||||
2025/02/22-22:33:49.682157 7f59317fa6c0 Delete type=3 #19
|
||||
2025/02/22-22:33:49.682211 7f59317fa6c0 Delete type=0 #21
|
||||
2025/02/22-22:43:19.821691 7f5693fff6c0 Level-0 table #26: started
|
||||
2025/02/22-22:43:19.821739 7f5693fff6c0 Level-0 table #26: 0 bytes OK
|
||||
2025/02/22-22:43:19.827819 7f5693fff6c0 Delete type=0 #24
|
||||
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/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)
|
||||
2025/09/18-17:25:25.945688 7f7f2affd6c0 Recovering log #134
|
||||
2025/09/18-17:25:25.962577 7f7f2affd6c0 Delete type=3 #132
|
||||
2025/09/18-17:25:25.962629 7f7f2affd6c0 Delete type=0 #134
|
||||
2025/09/18-17:25:58.096205 7f7f29bff6c0 Level-0 table #140: started
|
||||
2025/09/18-17:25:58.096281 7f7f29bff6c0 Level-0 table #140: 0 bytes OK
|
||||
2025/09/18-17:25:58.103314 7f7f29bff6c0 Delete type=0 #138
|
||||
2025/09/18-17:25:58.103571 7f7f29bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||
|
||||
+11
-8
@@ -1,8 +1,11 @@
|
||||
2025/02/21-17:44:00.297169 7f5931ffb6c0 Recovering log #16
|
||||
2025/02/21-17:44:00.350341 7f5931ffb6c0 Delete type=3 #14
|
||||
2025/02/21-17:44:00.350497 7f5931ffb6c0 Delete type=0 #16
|
||||
2025/02/21-17:47:55.710312 7f5693fff6c0 Level-0 table #22: started
|
||||
2025/02/21-17:47:55.710349 7f5693fff6c0 Level-0 table #22: 0 bytes OK
|
||||
2025/02/21-17:47:55.716766 7f5693fff6c0 Delete type=0 #20
|
||||
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/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)
|
||||
2025/09/18-11:50:45.746719 7f7f2bfff6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:09.744265 7f7f29bff6c0 Level-0 table #135: started
|
||||
2025/09/18-17:24:09.744308 7f7f29bff6c0 Level-0 table #135: 0 bytes OK
|
||||
2025/09/18-17:24:09.802551 7f7f29bff6c0 Delete type=0 #133
|
||||
2025/09/18-17:24:09.802767 7f7f29bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 25 : 1
|
||||
2025/09/18-17:24:09.802780 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:09.830358 7f7f29bff6c0 Generated table #136@0: 5 keys, 3728 bytes
|
||||
2025/09/18-17:24:09.830408 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 3728 bytes
|
||||
2025/09/18-17:24:09.891222 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:09.891483 7f7f29bff6c0 Delete type=2 #103
|
||||
2025/09/18-17:24:10.130709 7f7f29bff6c0 Manual compaction at level-0 from '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 25 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
-1
@@ -1 +1 @@
|
||||
MANIFEST-000125
|
||||
MANIFEST-000240
|
||||
|
||||
+7
-7
@@ -1,7 +1,7 @@
|
||||
2025/02/22-22:33:49.571959 7f5930ff96c0 Recovering log #123
|
||||
2025/02/22-22:33:49.581451 7f5930ff96c0 Delete type=3 #121
|
||||
2025/02/22-22:33:49.581507 7f5930ff96c0 Delete type=0 #123
|
||||
2025/02/22-22:43:19.756476 7f5693fff6c0 Level-0 table #128: started
|
||||
2025/02/22-22:43:19.756512 7f5693fff6c0 Level-0 table #128: 0 bytes OK
|
||||
2025/02/22-22:43:19.763078 7f5693fff6c0 Delete type=0 #126
|
||||
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/18-17:25:25.808742 7f7f2bfff6c0 Recovering log #237
|
||||
2025/09/18-17:25:25.826162 7f7f2bfff6c0 Delete type=3 #235
|
||||
2025/09/18-17:25:25.826217 7f7f2bfff6c0 Delete type=0 #237
|
||||
2025/09/18-17:25:58.034192 7f7f29bff6c0 Level-0 table #243: started
|
||||
2025/09/18-17:25:58.034230 7f7f29bff6c0 Level-0 table #243: 0 bytes OK
|
||||
2025/09/18-17:25:58.040524 7f7f29bff6c0 Delete type=0 #241
|
||||
2025/09/18-17:25:58.047737 7f7f29bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
||||
|
||||
+11
-7
@@ -1,7 +1,11 @@
|
||||
2025/02/21-17:43:59.860699 7f59317fa6c0 Recovering log #119
|
||||
2025/02/21-17:43:59.916350 7f59317fa6c0 Delete type=3 #117
|
||||
2025/02/21-17:43:59.916493 7f59317fa6c0 Delete type=0 #119
|
||||
2025/02/21-17:47:55.663886 7f5693fff6c0 Level-0 table #124: started
|
||||
2025/02/21-17:47:55.663923 7f5693fff6c0 Level-0 table #124: 0 bytes OK
|
||||
2025/02/21-17:47:55.670649 7f5693fff6c0 Delete type=0 #122
|
||||
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/18-11:50:45.598190 7f7f2a7fc6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.419689 7f7f29bff6c0 Level-0 table #238: started
|
||||
2025/09/18-17:24:08.419727 7f7f29bff6c0 Level-0 table #238: 0 bytes OK
|
||||
2025/09/18-17:24:08.484925 7f7f29bff6c0 Delete type=0 #236
|
||||
2025/09/18-17:24:08.766692 7f7f29bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at '!items!wxIHkrq98eQ3cOvp' @ 73 : 1
|
||||
2025/09/18-17:24:08.766704 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:08.800723 7f7f29bff6c0 Generated table #239@0: 38 keys, 31247 bytes
|
||||
2025/09/18-17:24:08.800756 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 31247 bytes
|
||||
2025/09/18-17:24:08.859553 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:08.859745 7f7f29bff6c0 Delete type=2 #206
|
||||
2025/09/18-17:24:08.860015 7f7f29bff6c0 Manual compaction at level-0 from '!items!wxIHkrq98eQ3cOvp' @ 73 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000125
|
||||
MANIFEST-000239
|
||||
|
||||
+7
-7
@@ -1,7 +1,7 @@
|
||||
2025/02/22-22:33:49.584858 7f59317fa6c0 Recovering log #123
|
||||
2025/02/22-22:33:49.595075 7f59317fa6c0 Delete type=3 #121
|
||||
2025/02/22-22:33:49.595272 7f59317fa6c0 Delete type=0 #123
|
||||
2025/02/22-22:43:19.749434 7f5693fff6c0 Level-0 table #128: started
|
||||
2025/02/22-22:43:19.749479 7f5693fff6c0 Level-0 table #128: 0 bytes OK
|
||||
2025/02/22-22:43:19.756348 7f5693fff6c0 Delete type=0 #126
|
||||
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/18-17:25:25.829687 7f7f2a7fc6c0 Recovering log #236
|
||||
2025/09/18-17:25:25.846790 7f7f2a7fc6c0 Delete type=3 #234
|
||||
2025/09/18-17:25:25.846846 7f7f2a7fc6c0 Delete type=0 #236
|
||||
2025/09/18-17:25:58.026302 7f7f29bff6c0 Level-0 table #242: started
|
||||
2025/09/18-17:25:58.026357 7f7f29bff6c0 Level-0 table #242: 0 bytes OK
|
||||
2025/09/18-17:25:58.034035 7f7f29bff6c0 Delete type=0 #240
|
||||
2025/09/18-17:25:58.047715 7f7f29bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
||||
|
||||
+11
-7
@@ -1,7 +1,11 @@
|
||||
2025/02/21-17:43:59.921453 7f5931ffb6c0 Recovering log #119
|
||||
2025/02/21-17:43:59.978668 7f5931ffb6c0 Delete type=3 #117
|
||||
2025/02/21-17:43:59.978782 7f5931ffb6c0 Delete type=0 #119
|
||||
2025/02/21-17:47:55.657052 7f5693fff6c0 Level-0 table #124: started
|
||||
2025/02/21-17:47:55.657095 7f5693fff6c0 Level-0 table #124: 0 bytes OK
|
||||
2025/02/21-17:47:55.663742 7f5693fff6c0 Delete type=0 #122
|
||||
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/18-11:50:45.617997 7f7f2a7fc6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.294497 7f7f29bff6c0 Level-0 table #237: started
|
||||
2025/09/18-17:24:08.294539 7f7f29bff6c0 Level-0 table #237: 0 bytes OK
|
||||
2025/09/18-17:24:08.351872 7f7f29bff6c0 Delete type=0 #235
|
||||
2025/09/18-17:24:08.582142 7f7f29bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at '!items!ufvhWG5V8pX0qrtR' @ 54 : 1
|
||||
2025/09/18-17:24:08.582154 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:08.616167 7f7f29bff6c0 Generated table #238@0: 29 keys, 12111 bytes
|
||||
2025/09/18-17:24:08.616198 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 12111 bytes
|
||||
2025/09/18-17:24:08.671918 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:08.672212 7f7f29bff6c0 Delete type=2 #205
|
||||
2025/09/18-17:24:08.859972 7f7f29bff6c0 Manual compaction at level-0 from '!items!ufvhWG5V8pX0qrtR' @ 54 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000122
|
||||
MANIFEST-000238
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2025/02/22-22:33:49.555798 7f59327fc6c0 Recovering log #120
|
||||
2025/02/22-22:33:49.566915 7f59327fc6c0 Delete type=3 #118
|
||||
2025/02/22-22:33:49.567025 7f59327fc6c0 Delete type=0 #120
|
||||
2025/02/22-22:43:19.763211 7f5693fff6c0 Level-0 table #125: started
|
||||
2025/02/22-22:43:19.763237 7f5693fff6c0 Level-0 table #125: 0 bytes OK
|
||||
2025/02/22-22:43:19.770353 7f5693fff6c0 Delete type=0 #123
|
||||
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/18-17:25:25.789090 7f7f2b7fe6c0 Recovering log #235
|
||||
2025/09/18-17:25:25.805571 7f7f2b7fe6c0 Delete type=3 #233
|
||||
2025/09/18-17:25:25.805686 7f7f2b7fe6c0 Delete type=0 #235
|
||||
2025/09/18-17:25:58.040659 7f7f29bff6c0 Level-0 table #241: started
|
||||
2025/09/18-17:25:58.040687 7f7f29bff6c0 Level-0 table #241: 0 bytes OK
|
||||
2025/09/18-17:25:58.047473 7f7f29bff6c0 Delete type=0 #239
|
||||
2025/09/18-17:25:58.047759 7f7f29bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
2025/02/21-17:43:59.798767 7f5930ff96c0 Recovering log #116
|
||||
2025/02/21-17:43:59.855271 7f5930ff96c0 Delete type=3 #114
|
||||
2025/02/21-17:43:59.855472 7f5930ff96c0 Delete type=0 #116
|
||||
2025/02/21-17:47:55.650583 7f5693fff6c0 Level-0 table #121: started
|
||||
2025/02/21-17:47:55.650666 7f5693fff6c0 Level-0 table #121: 0 bytes OK
|
||||
2025/02/21-17:47:55.656867 7f5693fff6c0 Delete type=0 #119
|
||||
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/18-11:50:45.576078 7f7f2affd6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.352040 7f7f29bff6c0 Level-0 table #236: started
|
||||
2025/09/18-17:24:08.352081 7f7f29bff6c0 Level-0 table #236: 0 bytes OK
|
||||
2025/09/18-17:24:08.419524 7f7f29bff6c0 Delete type=0 #234
|
||||
2025/09/18-17:24:08.672479 7f7f29bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at '!items!yx4k7lQHGcom99mk' @ 237 : 1
|
||||
2025/09/18-17:24:08.672498 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:08.706074 7f7f29bff6c0 Generated table #237@0: 115 keys, 38139 bytes
|
||||
2025/09/18-17:24:08.706156 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 38139 bytes
|
||||
2025/09/18-17:24:08.766397 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:08.766527 7f7f29bff6c0 Delete type=2 #231
|
||||
2025/09/18-17:24:08.859995 7f7f29bff6c0 Manual compaction at level-0 from '!items!yx4k7lQHGcom99mk' @ 237 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000130
|
||||
MANIFEST-000249
|
||||
|
||||
+7
-7
@@ -1,7 +1,7 @@
|
||||
2025/02/22-22:33:49.598250 7f5931ffb6c0 Recovering log #128
|
||||
2025/02/22-22:33:49.609114 7f5931ffb6c0 Delete type=3 #126
|
||||
2025/02/22-22:33:49.609187 7f5931ffb6c0 Delete type=0 #128
|
||||
2025/02/22-22:43:19.742523 7f5693fff6c0 Level-0 table #133: started
|
||||
2025/02/22-22:43:19.742609 7f5693fff6c0 Level-0 table #133: 0 bytes OK
|
||||
2025/02/22-22:43:19.749216 7f5693fff6c0 Delete type=0 #131
|
||||
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/18-17:25:25.849643 7f7f2affd6c0 Recovering log #246
|
||||
2025/09/18-17:25:25.865539 7f7f2affd6c0 Delete type=3 #244
|
||||
2025/09/18-17:25:25.865600 7f7f2affd6c0 Delete type=0 #246
|
||||
2025/09/18-17:25:58.061760 7f7f29bff6c0 Level-0 table #252: started
|
||||
2025/09/18-17:25:58.061807 7f7f29bff6c0 Level-0 table #252: 0 bytes OK
|
||||
2025/09/18-17:25:58.069452 7f7f29bff6c0 Delete type=0 #250
|
||||
2025/09/18-17:25:58.076019 7f7f29bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
||||
|
||||
+11
-7
@@ -1,7 +1,11 @@
|
||||
2025/02/21-17:43:59.982694 7f59327fc6c0 Recovering log #124
|
||||
2025/02/21-17:44:00.043945 7f59327fc6c0 Delete type=3 #122
|
||||
2025/02/21-17:44:00.044048 7f59327fc6c0 Delete type=0 #124
|
||||
2025/02/21-17:47:55.670798 7f5693fff6c0 Level-0 table #129: started
|
||||
2025/02/21-17:47:55.670851 7f5693fff6c0 Level-0 table #129: 0 bytes OK
|
||||
2025/02/21-17:47:55.677050 7f5693fff6c0 Delete type=0 #127
|
||||
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/18-11:50:45.638850 7f7f2bfff6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.232941 7f7f29bff6c0 Level-0 table #247: started
|
||||
2025/09/18-17:24:08.233014 7f7f29bff6c0 Level-0 table #247: 0 bytes OK
|
||||
2025/09/18-17:24:08.294274 7f7f29bff6c0 Delete type=0 #245
|
||||
2025/09/18-17:24:08.485079 7f7f29bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at '!items!zGlRtP7zSnkjuuue' @ 510 : 1
|
||||
2025/09/18-17:24:08.485093 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:08.521894 7f7f29bff6c0 Generated table #248@0: 71 keys, 264331 bytes
|
||||
2025/09/18-17:24:08.521971 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 264331 bytes
|
||||
2025/09/18-17:24:08.581818 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:08.581947 7f7f29bff6c0 Delete type=2 #231
|
||||
2025/09/18-17:24:08.859951 7f7f29bff6c0 Manual compaction at level-0 from '!items!zGlRtP7zSnkjuuue' @ 510 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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