Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
5d13500838 | |||
d21515e1e3 | |||
78ef009465 | |||
e794611bf3 | |||
529a62045e | |||
d462d22a0a | |||
710ee54531 | |||
7994aa7db4 | |||
5176b4ce87 | |||
3d6f195fc2 | |||
3693d68c24 | |||
16ccd2f3e1 | |||
631eb280ca |
12
changelog.md
12
changelog.md
@@ -1,9 +1,13 @@
|
||||
# 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
|
||||
@@ -14,12 +18,12 @@
|
||||
|
||||
# 12.0.21
|
||||
|
||||
- Creation de PNJ OK
|
||||
- Creation de PNJ OK
|
||||
|
||||
# 12.0.20
|
||||
|
||||
- Corrections sur la création de perso
|
||||
|
||||
- Corrections sur la création de perso
|
||||
|
||||
# 12.0.19
|
||||
|
||||
- Initial release !
|
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";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class TeDeumActorPJSheet extends ActorSheet {
|
||||
export class TeDeumActorPJSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
@@ -15,7 +15,7 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
classes: ["fvtt-te-deum", "sheet", "actor"],
|
||||
template: "systems/fvtt-te-deum/templates/actors/actor-sheet.hbs",
|
||||
width: 860,
|
||||
height:680,
|
||||
height: 680,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: true
|
||||
@@ -56,10 +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 }),
|
||||
equipmentfree: await TextEditor.enrichHTML(this.object.system.equipmentfree, { 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,
|
||||
@@ -67,7 +67,6 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
}
|
||||
this.formData = formData;
|
||||
|
||||
console.log("PC : ", formData, this.object);
|
||||
return formData;
|
||||
}
|
||||
|
||||
@@ -80,7 +79,7 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
html.bind("keydown", function(e) { // Ignore Enter in actores sheet
|
||||
html.bind("keydown", function (e) { // Ignore Enter in actores sheet
|
||||
if (e.keyCode === 13) return false;
|
||||
});
|
||||
|
||||
@@ -88,7 +87,7 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item-id")
|
||||
let itemId = li.data("item-id")
|
||||
const item = this.actor.items.get( itemId );
|
||||
const item = this.actor.items.get(itemId);
|
||||
item.sheet.render(true);
|
||||
});
|
||||
// Delete Inventory Item
|
||||
@@ -100,16 +99,20 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
let dataType = $(ev.currentTarget).data("type")
|
||||
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 })
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: { caracteristique: caracKey } }], { renderSheet: true })
|
||||
})
|
||||
|
||||
html.find('.subactor-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let actorId = li.data("actor-id");
|
||||
let actor = game.actors.get( actorId );
|
||||
let actor = game.actors.get(actorId);
|
||||
actor.sheet.render(true);
|
||||
});
|
||||
|
||||
@@ -120,12 +123,12 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
});
|
||||
html.find('.quantity-minus').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.incDecQuantity( li.data("item-id"), -1 );
|
||||
} );
|
||||
this.actor.incDecQuantity(li.data("item-id"), -1);
|
||||
});
|
||||
html.find('.quantity-plus').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.incDecQuantity( li.data("item-id"), +1 );
|
||||
} );
|
||||
this.actor.incDecQuantity(li.data("item-id"), +1);
|
||||
});
|
||||
|
||||
html.find('.roll-competence').click((event) => {
|
||||
let compId = $(event.currentTarget).data("comp-id")
|
||||
@@ -147,13 +150,13 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
});
|
||||
html.find('.item-equip').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.equipItem( li.data("item-id") );
|
||||
this.actor.equipItem(li.data("item-id"));
|
||||
this.render(true);
|
||||
});
|
||||
html.find('.update-field').change(ev => {
|
||||
const fieldName = $(ev.currentTarget).data("field-name");
|
||||
let value = Number(ev.currentTarget.value);
|
||||
this.actor.update( { [`${fieldName}`]: value } );
|
||||
this.actor.update({ [`${fieldName}`]: value });
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -34,7 +34,7 @@ export class TeDeumActor extends Actor {
|
||||
return actor;
|
||||
}
|
||||
|
||||
if (data.type == 'pj' || data.type == 'pnj') {
|
||||
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,14 +65,43 @@ 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
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getMeilleureCompetenceMainGauche(comp) {
|
||||
let compScore = this.getCompetenceScore(comp.name)
|
||||
let mainGaucheScore = this.getCompetenceScore("main gauche")
|
||||
if (mainGaucheScore < compScore) {
|
||||
ui.notifications.info(`${this.name} : Utilisation de la compétence Main Gauche au lieu de ${comp.name}`)
|
||||
let mainGaucheComp = this.items.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) {
|
||||
let updates = []
|
||||
@@ -112,12 +141,6 @@ export class TeDeumActor extends Actor {
|
||||
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")
|
||||
newScore = this.getCommonBaseValue(this.system.caracteristiques.puissance.value)
|
||||
if (effort && effort?.system.score != newScore) {
|
||||
@@ -147,7 +170,7 @@ export class TeDeumActor extends Actor {
|
||||
getCommonBaseValue(value) {
|
||||
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
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
@@ -155,6 +178,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]
|
||||
}
|
||||
@@ -266,41 +307,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 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: 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) {
|
||||
// Create a new blessure object
|
||||
let blessureObj = {
|
||||
name: blessure.label,
|
||||
type: "blessure",
|
||||
system: {
|
||||
typeBlessure: bId,
|
||||
localisation: rollData.loc.id,
|
||||
appliquee: true,
|
||||
description: "Blessure infligée par un coup de " + rollData.arme.name + " de " + rollData.alias,
|
||||
}
|
||||
if (rollData.isReussiteCritique) {
|
||||
bId = game.system.tedeum.config.blessuresOrder[blessure.value + 1]
|
||||
}
|
||||
rollData.blessure = blessureObj
|
||||
this.createEmbeddedDocuments('Item', [blessureObj]);
|
||||
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)
|
||||
}
|
||||
@@ -334,7 +439,7 @@ export class TeDeumActor extends Actor {
|
||||
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].labelH
|
||||
providence.qualite = game.system.tedeum.config.providence[providence.value].labelM
|
||||
} else {
|
||||
providence.qualite = game.system.tedeum.config.providence[providence.value].labelF
|
||||
}
|
||||
@@ -382,6 +487,7 @@ export class TeDeumActor extends Actor {
|
||||
xp = Math.max(xp + value, 0)
|
||||
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}`)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -454,7 +560,7 @@ export class TeDeumActor extends Actor {
|
||||
flag = armure.system.superposableCuir
|
||||
}
|
||||
if (item.system.typeArmure == "maille") {
|
||||
flag = armure.system.superposableMaille
|
||||
flag = armure.system.superposableMaille
|
||||
}
|
||||
if (item.system.typeArmure == "plate") {
|
||||
flag = armure.system.superposablePlate
|
||||
@@ -529,12 +635,16 @@ export class TeDeumActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore() {
|
||||
let initiative = this.items.find(it => it.type == "competence" && it.name.toLowerCase() == "initiative")
|
||||
if (initiative) {
|
||||
return initiative.system.score
|
||||
let initiative = this.getInitiativeValue()
|
||||
// Vérifie les armes avec bonus d'initiative
|
||||
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
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -595,6 +705,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")
|
||||
}
|
||||
|
||||
@@ -603,12 +714,12 @@ export class TeDeumActor extends Actor {
|
||||
let weapon = this.items.get(armeId)
|
||||
if (weapon) {
|
||||
let bDegats = 0
|
||||
if ( weapon.system.typeArme == "melee" ) {
|
||||
if (weapon.system.typeArme == "melee") {
|
||||
bDegats = this.getBonusDegats()
|
||||
}
|
||||
let formula = weapon.system.degats + "+" + bDegats.value
|
||||
let degatsRoll = await new Roll(formula).roll()
|
||||
await TeDeumUtility.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode") )
|
||||
await TeDeumUtility.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "degats"
|
||||
rollData.formula = formula
|
||||
@@ -653,9 +764,14 @@ export class TeDeumActor extends Actor {
|
||||
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"],
|
||||
@@ -156,7 +159,7 @@ export class TeDeumCharacterCreator {
|
||||
// Get the responseKey data
|
||||
let responseKey = $(event.target).data("response-key")
|
||||
let compName = event.target.value
|
||||
console.log("Questionnaire Change", responseKey, compName)
|
||||
console.log("Questionnaire Change", responseKey, compName)
|
||||
context.competences[responseKey] = compName.toLowerCase()
|
||||
})
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
}
|
||||
@@ -388,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)
|
||||
@@ -404,7 +420,7 @@ export class TeDeumCharacterCreator {
|
||||
/*--------------------------------------------*/
|
||||
async renderPetitsGrimauds(stage) {
|
||||
// Filter available pouponniere from origineSociale
|
||||
let grimaudsItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible && (item.system.genre === this.sexe || item.system.genre === "Mixte"))
|
||||
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",
|
||||
@@ -545,7 +561,7 @@ export class TeDeumCharacterCreator {
|
||||
let actor = await TeDeumActor.create({name: "Nouveau personnage", type: "pj"})
|
||||
let updates = {}
|
||||
for (let key in this.caracBonus) {
|
||||
updates[`system.caracteristiques.${key}.value`] = Number(this.caracBonus[key].value)+1
|
||||
updates[`system.caracteristiques.${key}.value`] = Number(this.caracBonus[key].value)+1
|
||||
}
|
||||
updates['system.genre'] = this.sexe
|
||||
updates['system.religion'] = TeDeumUtility.upperFirst(this.religion)
|
||||
@@ -553,7 +569,7 @@ export class TeDeumCharacterCreator {
|
||||
updates['system.equipmentfree'] = this.ageViril.system.trousseau
|
||||
actor.update( updates);
|
||||
|
||||
// Process competences : increase know skills
|
||||
// Process competences : increase know skills
|
||||
let updateComp = []
|
||||
let toAdd = []
|
||||
for (let compName in this.competenceBonus) {
|
||||
@@ -562,13 +578,13 @@ export class TeDeumCharacterCreator {
|
||||
updateComp.push({ _id: comp._id, "system.score": this.competenceBonus[compName].value })
|
||||
} else {
|
||||
toAdd.push( compName)
|
||||
}
|
||||
}
|
||||
}
|
||||
actor.updateEmbeddedDocuments("Item", updateComp)
|
||||
|
||||
// Process adding skills
|
||||
|
||||
// Process adding skills
|
||||
let compendiumSkill = TeDeumUtility.getCompetences()
|
||||
let compToAdd = [ this.pouponniere, this.grimauds, this.roses, this.ageViril ]
|
||||
let compToAdd = [ this.pouponniere, this.grimauds, this.roses, this.ageViril ]
|
||||
for (let compName of toAdd) {
|
||||
let comp = compendiumSkill.find( i => i.name.toLowerCase() === compName.toLowerCase())
|
||||
comp.system.score = this.competenceBonus[compName].value
|
||||
@@ -581,14 +597,42 @@ 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)
|
||||
|
||||
context.pointsCompetence = {
|
||||
"savoir": { score: actor.getCompetenceScore("Mémoriser"), label: "Savoir" },
|
||||
"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" },
|
||||
@@ -596,7 +640,7 @@ export class TeDeumCharacterCreator {
|
||||
"adresse": { score: actor.getCompetenceScore("Initiative"), label: "Adresse" },
|
||||
}
|
||||
|
||||
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-finished.hbs", context)
|
||||
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 },
|
||||
|
@@ -2,20 +2,39 @@ import { TeDeumUtility } from "../common/tedeum-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class TeDeumCombat extends Combat {
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||
//console.log("Roll INIT !")
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
for (let cId of ids) {
|
||||
const c = this.combatants.get(cId);
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore( this.id, cId ) : -1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: cId, initiative: initBonus } ]);
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore(this.id, cId) : -1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [{ _id: cId, initiative: initBonus }]);
|
||||
}
|
||||
|
||||
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() {
|
||||
while (game.combat.turn > 0) {
|
||||
|
@@ -4,30 +4,46 @@ export const SYSTEM_ID = "fvtt-te-deum";
|
||||
export const TEDEUM_CONFIG = {
|
||||
|
||||
BONUS_DEGATS: [{}, { label: "1d4", value: -2 }, { label: "1d6", value: -1 }, { label: "1d8", value: 0 },
|
||||
{ label: "1d10", value: 1 }, { label: "1d12", value: 2 }, { label: "1d20", value: 3 }],
|
||||
{ label: "1d10", value: 1 }, { label: "1d12", value: 2 }, { label: "1d20", value: 3 }],
|
||||
MAX_ARMURES_LOURDES: [{}, { value: 1 }, { value: 3 }, { value: 5 },
|
||||
{ value: 7 }, { value: 9 }, { value: 11 }],
|
||||
{ value: 7 }, { value: 9 }, { value: 11 }],
|
||||
ACTIONS_PAR_TOUR: [{}, { value: 1 }, { value: 2 }, { value: 2 },
|
||||
{ value: 3 }, { value: 3 }, { value: 4 }],
|
||||
{ value: 3 }, { value: 3 }, { value: 4 }],
|
||||
COMMON_VALUE: [{}, { value: 1 }, { value: 2 }, { value: 3 },
|
||||
{ value: 4 }, { value: 5 }, { value: 6 }],
|
||||
{ value: 4 }, { value: 5 }, { value: 6 }],
|
||||
COUT_XP: [{}, { value: 10 }, { value: 10 }, { value: 10 },
|
||||
{ value: 10 }, { value: 30 }, { value: 50 }],
|
||||
{ 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 },
|
||||
@@ -43,11 +59,11 @@ export const TEDEUM_CONFIG = {
|
||||
},
|
||||
|
||||
ARME_PORTEES: {
|
||||
"brulepourpoint": { label: "Brûle-pourpoint", difficulty: "facile", id: "brulepourpoint" },
|
||||
"courte": { label: "Courte", difficulty: "pardefaut", id: "courte" },
|
||||
"moyenne": { label: "Moyenne", difficulty: "difficile", id: "moyenne" },
|
||||
"longue": { label: "Longue", difficulty: "perilleux", id: "longue" },
|
||||
"extreme": { label: "Extrême", difficulty: "desespere", id: "extreme" },
|
||||
"brulepourpoint": { label: "Brûle-pourpoint (5)", difficulty: "facile", id: "brulepourpoint" },
|
||||
"courte": { label: "Courte (7)", difficulty: "pardefaut", id: "courte" },
|
||||
"moyenne": { label: "Moyenne (11)", difficulty: "difficile", id: "moyenne" },
|
||||
"longue": { label: "Longue (13)", difficulty: "perilleux", id: "longue" },
|
||||
"extreme": { label: "Extrême (15)", difficulty: "desespere", id: "extreme" },
|
||||
},
|
||||
|
||||
genre: {
|
||||
@@ -94,7 +110,7 @@ export const TEDEUM_CONFIG = {
|
||||
},
|
||||
|
||||
caracteristiques: {
|
||||
savoir: { id: "savoir", value: "savoir", label: "Savoir", description:"Cette caractéristique correspond à la capacité d'abstraction intellectuelle ainsi qu'à la culture générale du personnage. Elle permet d'évaluer la compétence de base Mémoriser." },
|
||||
savoir: { id: "savoir", value: "savoir", label: "Savoir", description: "Cette caractéristique correspond à la capacité d'abstraction intellectuelle ainsi qu'à la culture générale du personnage. Elle permet d'évaluer la compétence de base Mémoriser." },
|
||||
sensibilite: { id: "sensibilite", value: "sensibilite", label: "Sensibilité", description: "Cette caractéristique correspond à l'ouverture du personnage sur le monde. Elle englobe l'altruisme, la spiritualité et la créativité du personnage. Elle permet d'évaluer la compétence de base Perception." },
|
||||
entregent: { id: "entregent", value: "entregent", label: "Entregent", description: "Cette caractéristique correspond à l'ensemble des prédispositions sociales du personnage. Elle englobe le charisme et le respect des usages. Elle permet d'évaluer la compétence de base Charme." },
|
||||
complexion: { id: "complexion", value: "complexion", label: "Complexion", description: "Cette caractéristique permet d'évaluer la santé et la résistance physique du per- sonnage. Elle permet de calculer la com- pétence de base Endurance, capitale dans la résolution des blessures, la résistance à la douleur, au poison et aux maladies." },
|
||||
@@ -102,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" },
|
||||
@@ -152,13 +168,13 @@ export const TEDEUM_CONFIG = {
|
||||
},
|
||||
difficulte: {
|
||||
aucune: { label: "Aucune", key: "aucune", value: 0 },
|
||||
routine: { label: "Routine", key: "routine", value: 3 },
|
||||
facile: { label: "Facile", key: "facile", value: 5 },
|
||||
pardefaut: { label: "Par Défaut", key: "pardefaut", value: 7 },
|
||||
malaise: { label: "Malaisé", key: "malaise", value: 9 },
|
||||
difficile: { label: "Difficile", key: "difficile", value: 11 },
|
||||
perilleux: { label: "Perilleux", key: "perilleux", value: 13 },
|
||||
desespere: { label: "Désespéré", key: "desespere", value: 15 }
|
||||
routine: { label: "Routine (3)", key: "routine", value: 3 },
|
||||
facile: { label: "Facile (5)", key: "facile", value: 5 },
|
||||
pardefaut: { label: "Par Défaut (7)", key: "pardefaut", value: 7 },
|
||||
malaise: { label: "Malaisé (9)", key: "malaise", value: 9 },
|
||||
difficile: { label: "Difficile (11)", key: "difficile", value: 11 },
|
||||
perilleux: { label: "Perilleux (13)", key: "perilleux", value: 13 },
|
||||
desespere: { label: "Désespéré (15)", key: "desespere", value: 15 }
|
||||
},
|
||||
monnaie: {
|
||||
denier: { label: "Deniers", id: "denier", value: 1 },
|
||||
@@ -195,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 },
|
||||
|
@@ -12,22 +12,63 @@ export class TeDeumUtility {
|
||||
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.Adventure.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
|
||||
}
|
||||
|
||||
static installHooks() {
|
||||
Hooks.on('renderChatLog', (log, html, data) => TeDeumUtility.chatListeners(html));
|
||||
|
||||
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));
|
||||
|
||||
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})` })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -200,7 +241,7 @@ export class TeDeumUtility {
|
||||
return actor
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */ /* -------------------------------------------- */
|
||||
/* -------------------------------------------- */
|
||||
static async manageOpposition(rollData) {
|
||||
if (!this.currentOpposition) {
|
||||
// Store rollData as current GM opposition
|
||||
@@ -209,29 +250,47 @@ export class TeDeumUtility {
|
||||
} else {
|
||||
// Perform the opposition
|
||||
let isAttackWinner = true
|
||||
let rWinner = this.currentOpposition
|
||||
let rLooser = rollData
|
||||
if (rWinner.total < rLooser.total) {
|
||||
rWinner = rollData
|
||||
rLooser = this.currentOpposition
|
||||
let rWinner, rLooser
|
||||
if (this.currentOpposition.total <= rollData.total) {
|
||||
rWinner = foundry.utils.duplicate(rollData)
|
||||
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
|
||||
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)
|
||||
|
||||
// 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) {
|
||||
this.appliquerDegats(rWinner)
|
||||
if (isAttackWinner && rWinner.isSuccess && rWinner.mode == "arme" && rWinner.arme?.system.typeArme == "melee" && rWinner.defenderTokenId) {
|
||||
await this.appliquerDegats(rWinner)
|
||||
}
|
||||
|
||||
console.log("Rolldata result", rollData)
|
||||
console.log("Opposition result", rollData, isAttackWinner, oppositionData)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -242,6 +301,12 @@ export class TeDeumUtility {
|
||||
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é")
|
||||
}
|
||||
@@ -250,7 +315,7 @@ export class TeDeumUtility {
|
||||
/* -------------------------------------------- */ /* -------------------------------------------- */
|
||||
static async chatListeners(html) {
|
||||
|
||||
html.on("click", '.chat-command-opposition', 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")
|
||||
@@ -258,7 +323,7 @@ export class TeDeumUtility {
|
||||
TeDeumUtility.manageOpposition(rollData, messageId)
|
||||
}
|
||||
})
|
||||
html.on("click", '.chat-command-appliquer-degats', event => {
|
||||
$(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")
|
||||
@@ -266,6 +331,17 @@ export class TeDeumUtility {
|
||||
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';
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -277,7 +353,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);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -354,7 +430,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)
|
||||
@@ -476,9 +552,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
|
||||
@@ -488,24 +573,30 @@ export class TeDeumUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async getLocalisation(rollData) {
|
||||
let 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) {
|
||||
rollData.loc = foundry.utils.duplicate(loc)
|
||||
break
|
||||
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"))
|
||||
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) {
|
||||
rollData.loc = foundry.utils.duplicate(loc)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
rollData.locRoll = foundry.utils.duplicate(locRoll)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async processAttaqueMelee(rollData) {
|
||||
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
|
||||
@@ -521,12 +612,40 @@ export class TeDeumUtility {
|
||||
await this.getLocalisation(rollData)
|
||||
// Now the degats
|
||||
let degatsRoll = await new Roll(rollData.arme.system.degats).roll()
|
||||
await this.showDiceSoNice(rollData.locRoll, game.settings.get("core", "rollMode"))
|
||||
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
||||
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 pour ce round`)
|
||||
}
|
||||
}
|
||||
if (ca.nbActions > 0) {
|
||||
ca.nbActions -= 1
|
||||
} else {
|
||||
ui.notifications.error(`${actor.name} n'a plus d'actions disponibles pour ce round`)
|
||||
}
|
||||
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) {
|
||||
|
||||
@@ -536,6 +655,18 @@ 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.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)
|
||||
if (!diceFormula) return;
|
||||
console.log("RollData", rollData, diceFormula)
|
||||
@@ -552,8 +683,10 @@ export class TeDeumUtility {
|
||||
|
||||
await this.processAttaqueDistance(rollData)
|
||||
|
||||
await this.manageCombatActions(actor, 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)
|
||||
@@ -562,10 +695,6 @@ export class TeDeumUtility {
|
||||
if (rollData.enableProvidence) {
|
||||
actor.modifyProvidence(-1)
|
||||
}
|
||||
// Manage XP
|
||||
if (rollData.isReussiteCritique || rollData.isEchecCritique) {
|
||||
actor.modifyXP(rollData.carac.key, 1)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@@ -1,17 +1,17 @@
|
||||
export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel {
|
||||
export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
const requiredInteger = { required: true, nullable: false, integer: true };
|
||||
const requiredDouble = { required: true, nullable: false, integer: false };
|
||||
const schema = {};
|
||||
|
||||
schema.typeArme = new fields.StringField({required: true, choices: ["melee", "tir"], initial: "melee"});
|
||||
schema.allonge = new fields.StringField({required: true, choices: ["courte", "moyenne", "longue", "treslongue"], initial: "courte"});
|
||||
schema.typeArme = new fields.StringField({ required: true, choices: ["melee", "tir"], initial: "melee" });
|
||||
schema.allonge = new fields.StringField({ required: true, choices: ["courte", "moyenne", "longue", "treslongue"], initial: "courte" });
|
||||
|
||||
schema.specificites = new fields.SchemaField(
|
||||
Object.values((game.system.tedeum.config.ARME_SPECIFICITE)).reduce((obj, spec) => {
|
||||
obj[spec.id] = new fields.SchemaField({
|
||||
hasSpec: new fields.BooleanField({initial: false}),
|
||||
hasSpec: new fields.BooleanField({ initial: false }),
|
||||
});
|
||||
return obj;
|
||||
}, {})
|
||||
@@ -26,35 +26,35 @@ export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel {
|
||||
}, {})
|
||||
);
|
||||
|
||||
schema.degatsArmure = new fields.SchemaField( {
|
||||
sansarmure : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
cuir : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
plates : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
mailles : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
schema.degatsArmure = new fields.SchemaField({
|
||||
sansarmure: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
cuir: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
plates: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
mailles: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
});
|
||||
|
||||
|
||||
schema.tempsRecharge = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 });
|
||||
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.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.degatscrosse = new fields.StringField({ required: false, blank: true, initial: "0" });
|
||||
|
||||
|
||||
let comp = []
|
||||
for (let key of Object.keys(game.system.tedeum.config.armeCompetences)) {
|
||||
comp.push(key);
|
||||
}
|
||||
schema.competence = new fields.StringField({ required: true, choices:comp, initial: "bagarre" });
|
||||
schema.competence2 = new fields.StringField({ required: false, choices:comp, initial: "", blank: true });
|
||||
schema.competence = new fields.StringField({ required: true, choices: comp, initial: "bagarre" });
|
||||
schema.competence2 = new fields.StringField({ required: false, choices: comp, initial: "", blank: true });
|
||||
|
||||
schema.prix = new fields.NumberField({ ...requiredDouble, initial: 0, min: 0 });
|
||||
schema.monnaie = new fields.StringField({ required: true, blank: false, initial: "denier" });
|
||||
|
||||
schema.equipe = new fields.BooleanField({initial: false}),
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, blank: true });
|
||||
|
||||
schema.equipe = new fields.BooleanField({ initial: false }),
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, blank: true });
|
||||
|
||||
return schema;
|
||||
}
|
||||
|
@@ -4,8 +4,9 @@ export class TeDeumBlessureSchema extends foundry.abstract.TypeDataModel {
|
||||
const requiredInteger = { required: true, nullable: false, integer: true };
|
||||
const schema = {};
|
||||
|
||||
schema.typeBlessure = new fields.StringField({required: true, choices: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet"], initial: "estafilade"});
|
||||
schema.localisation = new fields.StringField({required: true, choices: ["piedgauche", "pieddroit", "jambegauche", "jambedroite", "maingauche", "maindroite", "brasgauche", "brasdroit", "tete", "corps"], initial: "corps"});
|
||||
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 });
|
||||
|
||||
|
@@ -14,7 +14,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel {
|
||||
return obj;
|
||||
}, {})
|
||||
);
|
||||
|
||||
|
||||
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 });
|
||||
@@ -32,7 +32,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel {
|
||||
});
|
||||
return comps;
|
||||
}, {}));
|
||||
|
||||
|
||||
schema.hasCompetencesOpt = new fields.BooleanField({initial: false})
|
||||
schema.competencesOptNumber = new fields.NumberField({ ...requiredInteger, initial: 1, min:0 })
|
||||
schema.competencesOpt = new fields.SchemaField(Array.fromRange(14, 1).reduce((comps, i) => {
|
||||
@@ -51,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: "" }),
|
||||
});
|
||||
@@ -63,7 +63,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel {
|
||||
});
|
||||
return questions;
|
||||
}, {}));
|
||||
|
||||
|
||||
schema.debouches = new fields.SchemaField(Array.fromRange(24, 1).reduce((debouches, i) => {
|
||||
debouches[`debouche${i}`] = new fields.SchemaField({
|
||||
debouche: new fields.StringField({ required: true, blank: true, initial: "" })
|
||||
@@ -73,7 +73,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel {
|
||||
|
||||
schema.cagnotteMultiplier = new fields.NumberField({ ...requiredDouble, initial: 1.0, min: 0 });
|
||||
schema.cagnotteDivider = new fields.NumberField({ ...requiredDouble, initial: 1.0, min: 0 });
|
||||
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, blank: true });
|
||||
schema.trousseau = new fields.StringField({ required: true, blank: true, initial: "" });
|
||||
|
||||
|
@@ -60,9 +60,18 @@ 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-main-gauche').change((event) => {
|
||||
this.rollData.isMainGauche = event.currentTarget.checked
|
||||
})
|
||||
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,8 +89,14 @@ 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,17 +49,16 @@ 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
|
||||
}
|
||||
|
||||
|
||||
if (this.object.type == "education") {
|
||||
TeDeumUtility.prepareEducationContent(formData);
|
||||
}
|
||||
|
||||
this.options.editable = !(this.object.origin == "embeddedItem");
|
||||
console.log("ITEM DATA", formData, this);
|
||||
return formData;
|
||||
}
|
||||
|
||||
@@ -103,7 +102,7 @@ export class TeDeumItemSheet extends ItemSheet {
|
||||
let levelIndex = Number($(ev.currentTarget).parents(".item").data("level-index"))
|
||||
let choiceIndex = Number($(ev.currentTarget).parents(".item").data("choice-index"))
|
||||
let featureId = $(ev.currentTarget).parents(".item").data("feature-id")
|
||||
|
||||
|
||||
let itemData = this.object.system.levels[levelIndex].choices[choiceIndex].features[featureId]
|
||||
|
||||
if (itemData.name != 'None') {
|
||||
@@ -157,7 +156,7 @@ export class TeDeumItemSheet extends ItemSheet {
|
||||
let itemType = li.data("item-type");
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
get template() {
|
||||
|
@@ -51,7 +51,7 @@ Hooks.once("init", async function () {
|
||||
// preload handlebars templates
|
||||
TeDeumUtility.preloadHandlebarsTemplates();
|
||||
|
||||
// Set an initiative formula for the system
|
||||
// Set an initiative formula for the system
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: "1d6",
|
||||
decimals: 1
|
||||
@@ -79,17 +79,19 @@ Hooks.once("init", async function () {
|
||||
blessure: TeDeumBlessureSchema,
|
||||
maladie: TeDeumMaladieSchema,
|
||||
};
|
||||
|
||||
|
||||
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 });
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { 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 });
|
||||
|
||||
TeDeumUtility.init()
|
||||
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true });
|
||||
|
||||
TeDeumUtility.init()
|
||||
|
||||
TeDeumUtility.installHooks()
|
||||
});
|
||||
|
||||
|
||||
@@ -98,6 +100,7 @@ Hooks.once("init", async function () {
|
||||
/* -------------------------------------------- */
|
||||
Hooks.once("ready", function () {
|
||||
|
||||
|
||||
// User warning
|
||||
if (!game.user.isGM && game.user.character == undefined) {
|
||||
ui.notifications.info("Attention ! Aucun personnage relié au joueur !");
|
||||
@@ -106,11 +109,11 @@ Hooks.once("ready", function () {
|
||||
user: game.user._id
|
||||
});
|
||||
}
|
||||
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
|
||||
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter => {
|
||||
console.log("ClassCounter loaded", moduleCounter)
|
||||
moduleCounter.ClassCounter.registerUsageCount()
|
||||
}).catch(err=>
|
||||
}).catch(err =>
|
||||
console.log("No stats available, giving up.")
|
||||
)
|
||||
TeDeumUtility.ready();
|
||||
@@ -134,4 +137,3 @@ Hooks.on("chatMessage", (html, content, msg) => {
|
||||
}
|
||||
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-000095
|
||||
MANIFEST-000165
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/20-09:24:48.041836 7fa413fff6c0 Recovering log #93
|
||||
2025/04/20-09:24:48.069770 7fa413fff6c0 Delete type=3 #91
|
||||
2025/04/20-09:24:48.069934 7fa413fff6c0 Delete type=0 #93
|
||||
2025/04/20-09:25:06.962777 7fa4127fc6c0 Level-0 table #98: started
|
||||
2025/04/20-09:25:06.962842 7fa4127fc6c0 Level-0 table #98: 0 bytes OK
|
||||
2025/04/20-09:25:06.970328 7fa4127fc6c0 Delete type=0 #96
|
||||
2025/04/20-09:25:06.988174 7fa4127fc6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:42:14.734893 7f7cfb7fe6c0 Recovering log #163
|
||||
2025/09/24-16:42:14.744867 7f7cfb7fe6c0 Delete type=3 #161
|
||||
2025/09/24-16:42:14.744926 7f7cfb7fe6c0 Delete type=0 #163
|
||||
2025/09/24-16:43:46.397731 7f7cf9fff6c0 Level-0 table #168: started
|
||||
2025/09/24-16:43:46.397776 7f7cf9fff6c0 Level-0 table #168: 0 bytes OK
|
||||
2025/09/24-16:43:46.462453 7f7cf9fff6c0 Delete type=0 #166
|
||||
2025/09/24-16:43:46.462659 7f7cf9fff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/11-23:06:48.405694 7f6df09f96c0 Recovering log #89
|
||||
2025/04/11-23:06:48.416695 7f6df09f96c0 Delete type=3 #87
|
||||
2025/04/11-23:06:48.416810 7f6df09f96c0 Delete type=0 #89
|
||||
2025/04/12-00:18:27.794309 7f6deabff6c0 Level-0 table #94: started
|
||||
2025/04/12-00:18:27.794331 7f6deabff6c0 Level-0 table #94: 0 bytes OK
|
||||
2025/04/12-00:18:27.828514 7f6deabff6c0 Delete type=0 #92
|
||||
2025/04/12-00:18:27.828757 7f6deabff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:34:06.472911 7f7cfbfff6c0 Recovering log #159
|
||||
2025/09/24-16:34:06.482703 7f7cfbfff6c0 Delete type=3 #157
|
||||
2025/09/24-16:34:06.482774 7f7cfbfff6c0 Delete type=0 #159
|
||||
2025/09/24-16:41:30.176475 7f7cf9fff6c0 Level-0 table #164: started
|
||||
2025/09/24-16:41:30.176525 7f7cf9fff6c0 Level-0 table #164: 0 bytes OK
|
||||
2025/09/24-16:41:30.183000 7f7cf9fff6c0 Delete type=0 #162
|
||||
2025/09/24-16:41:30.195641 7f7cf9fff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/aides/MANIFEST-000165
Normal file
BIN
packs/aides/MANIFEST-000165
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-000198
|
||||
MANIFEST-000268
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/20-09:24:47.881295 7fa412ffd6c0 Recovering log #195
|
||||
2025/04/20-09:24:47.897306 7fa412ffd6c0 Delete type=3 #193
|
||||
2025/04/20-09:24:47.897426 7fa412ffd6c0 Delete type=0 #195
|
||||
2025/04/20-09:25:06.915266 7fa4127fc6c0 Level-0 table #201: started
|
||||
2025/04/20-09:25:06.915317 7fa4127fc6c0 Level-0 table #201: 0 bytes OK
|
||||
2025/04/20-09:25:06.922256 7fa4127fc6c0 Delete type=0 #199
|
||||
2025/04/20-09:25:06.929081 7fa4127fc6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:42:14.642386 7f7d00dfa6c0 Recovering log #266
|
||||
2025/09/24-16:42:14.651936 7f7d00dfa6c0 Delete type=3 #264
|
||||
2025/09/24-16:42:14.652001 7f7d00dfa6c0 Delete type=0 #266
|
||||
2025/09/24-16:43:45.840704 7f7cf9fff6c0 Level-0 table #271: started
|
||||
2025/09/24-16:43:45.840737 7f7cf9fff6c0 Level-0 table #271: 0 bytes OK
|
||||
2025/09/24-16:43:45.898655 7f7cf9fff6c0 Delete type=0 #269
|
||||
2025/09/24-16:43:45.963394 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,14 +1,7 @@
|
||||
2025/04/11-23:06:48.304335 7f6df11fa6c0 Recovering log #191
|
||||
2025/04/11-23:06:48.314473 7f6df11fa6c0 Delete type=3 #189
|
||||
2025/04/11-23:06:48.314529 7f6df11fa6c0 Delete type=0 #191
|
||||
2025/04/12-00:18:27.071344 7f6deabff6c0 Level-0 table #196: started
|
||||
2025/04/12-00:18:27.085927 7f6deabff6c0 Level-0 table #196: 1371 bytes OK
|
||||
2025/04/12-00:18:27.118250 7f6deabff6c0 Delete type=0 #194
|
||||
2025/04/12-00:18:27.311443 7f6deabff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at '!items!GZ3Q17VzRvdlrtdF' @ 40 : 1
|
||||
2025/04/12-00:18:27.311451 7f6deabff6c0 Compacting 1@0 + 1@1 files
|
||||
2025/04/12-00:18:27.331173 7f6deabff6c0 Generated table #197@0: 38 keys, 31023 bytes
|
||||
2025/04/12-00:18:27.331200 7f6deabff6c0 Compacted 1@0 + 1@1 files => 31023 bytes
|
||||
2025/04/12-00:18:27.373984 7f6deabff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/04/12-00:18:27.374177 7f6deabff6c0 Delete type=2 #174
|
||||
2025/04/12-00:18:27.374459 7f6deabff6c0 Delete type=2 #196
|
||||
2025/04/12-00:18:27.426656 7f6deabff6c0 Manual compaction at level-0 from '!items!GZ3Q17VzRvdlrtdF' @ 40 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:34:06.383778 7f7cfb7fe6c0 Recovering log #262
|
||||
2025/09/24-16:34:06.393755 7f7cfb7fe6c0 Delete type=3 #260
|
||||
2025/09/24-16:34:06.393833 7f7cfb7fe6c0 Delete type=0 #262
|
||||
2025/09/24-16:41:30.118332 7f7cf9fff6c0 Level-0 table #267: started
|
||||
2025/09/24-16:41:30.118371 7f7cf9fff6c0 Level-0 table #267: 0 bytes OK
|
||||
2025/09/24-16:41:30.124477 7f7cf9fff6c0 Delete type=0 #265
|
||||
2025/09/24-16:41:30.124651 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-000268
Normal file
BIN
packs/armes/MANIFEST-000268
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.
@@ -1 +1 @@
|
||||
MANIFEST-000197
|
||||
MANIFEST-000267
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/20-09:24:47.903860 7fa413fff6c0 Recovering log #195
|
||||
2025/04/20-09:24:47.919442 7fa413fff6c0 Delete type=3 #193
|
||||
2025/04/20-09:24:47.919592 7fa413fff6c0 Delete type=0 #195
|
||||
2025/04/20-09:25:06.908159 7fa4127fc6c0 Level-0 table #200: started
|
||||
2025/04/20-09:25:06.908228 7fa4127fc6c0 Level-0 table #200: 0 bytes OK
|
||||
2025/04/20-09:25:06.915011 7fa4127fc6c0 Delete type=0 #198
|
||||
2025/04/20-09:25:06.929064 7fa4127fc6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:42:14.655535 7f7cfbfff6c0 Recovering log #265
|
||||
2025/09/24-16:42:14.666517 7f7cfbfff6c0 Delete type=3 #263
|
||||
2025/09/24-16:42:14.666585 7f7cfbfff6c0 Delete type=0 #265
|
||||
2025/09/24-16:43:45.762646 7f7cf9fff6c0 Level-0 table #270: started
|
||||
2025/09/24-16:43:45.762671 7f7cf9fff6c0 Level-0 table #270: 0 bytes OK
|
||||
2025/09/24-16:43:45.840542 7f7cf9fff6c0 Delete type=0 #268
|
||||
2025/09/24-16:43:45.963381 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/11-23:06:48.318150 7f6df09f96c0 Recovering log #191
|
||||
2025/04/11-23:06:48.328364 7f6df09f96c0 Delete type=3 #189
|
||||
2025/04/11-23:06:48.328522 7f6df09f96c0 Delete type=0 #191
|
||||
2025/04/12-00:18:27.192248 7f6deabff6c0 Level-0 table #196: started
|
||||
2025/04/12-00:18:27.192320 7f6deabff6c0 Level-0 table #196: 0 bytes OK
|
||||
2025/04/12-00:18:27.261480 7f6deabff6c0 Delete type=0 #194
|
||||
2025/04/12-00:18:27.426624 7f6deabff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:34:06.395848 7f7d00dfa6c0 Recovering log #261
|
||||
2025/09/24-16:34:06.405550 7f7d00dfa6c0 Delete type=3 #259
|
||||
2025/09/24-16:34:06.405604 7f7d00dfa6c0 Delete type=0 #261
|
||||
2025/09/24-16:41:30.111558 7f7cf9fff6c0 Level-0 table #266: started
|
||||
2025/09/24-16:41:30.111589 7f7cf9fff6c0 Level-0 table #266: 0 bytes OK
|
||||
2025/09/24-16:41:30.118178 7f7cf9fff6c0 Delete type=0 #264
|
||||
2025/09/24-16:41:30.124642 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-000267
Normal file
BIN
packs/armures/MANIFEST-000267
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.
@@ -1 +1 @@
|
||||
MANIFEST-000194
|
||||
MANIFEST-000266
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/20-09:24:47.857871 7fa4137fe6c0 Recovering log #192
|
||||
2025/04/20-09:24:47.873833 7fa4137fe6c0 Delete type=3 #190
|
||||
2025/04/20-09:24:47.873948 7fa4137fe6c0 Delete type=0 #192
|
||||
2025/04/20-09:25:06.901277 7fa4127fc6c0 Level-0 table #197: started
|
||||
2025/04/20-09:25:06.901384 7fa4127fc6c0 Level-0 table #197: 0 bytes OK
|
||||
2025/04/20-09:25:06.907939 7fa4127fc6c0 Delete type=0 #195
|
||||
2025/04/20-09:25:06.929038 7fa4127fc6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:42:14.629192 7f7cfaffd6c0 Recovering log #264
|
||||
2025/09/24-16:42:14.638946 7f7cfaffd6c0 Delete type=3 #262
|
||||
2025/09/24-16:42:14.639014 7f7cfaffd6c0 Delete type=0 #264
|
||||
2025/09/24-16:43:45.706058 7f7cf9fff6c0 Level-0 table #269: started
|
||||
2025/09/24-16:43:45.706134 7f7cf9fff6c0 Level-0 table #269: 0 bytes OK
|
||||
2025/09/24-16:43:45.762523 7f7cf9fff6c0 Delete type=0 #267
|
||||
2025/09/24-16:43:45.963365 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/11-23:06:48.289349 7f6debfff6c0 Recovering log #188
|
||||
2025/04/11-23:06:48.299353 7f6debfff6c0 Delete type=3 #186
|
||||
2025/04/11-23:06:48.299496 7f6debfff6c0 Delete type=0 #188
|
||||
2025/04/12-00:18:27.261661 7f6deabff6c0 Level-0 table #193: started
|
||||
2025/04/12-00:18:27.261699 7f6deabff6c0 Level-0 table #193: 0 bytes OK
|
||||
2025/04/12-00:18:27.311309 7f6deabff6c0 Delete type=0 #191
|
||||
2025/04/12-00:18:27.426641 7f6deabff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:34:06.370805 7f7cfaffd6c0 Recovering log #260
|
||||
2025/09/24-16:34:06.381415 7f7cfaffd6c0 Delete type=3 #258
|
||||
2025/09/24-16:34:06.381482 7f7cfaffd6c0 Delete type=0 #260
|
||||
2025/09/24-16:41:30.104756 7f7cf9fff6c0 Level-0 table #265: started
|
||||
2025/09/24-16:41:30.104801 7f7cf9fff6c0 Level-0 table #265: 0 bytes OK
|
||||
2025/09/24-16:41:30.111363 7f7cf9fff6c0 Delete type=0 #263
|
||||
2025/09/24-16:41:30.124633 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-000266
Normal file
BIN
packs/competences/MANIFEST-000266
Normal file
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000206
|
||||
MANIFEST-000277
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/20-09:24:47.923568 7fa418ffa6c0 Recovering log #203
|
||||
2025/04/20-09:24:47.940475 7fa418ffa6c0 Delete type=3 #201
|
||||
2025/04/20-09:24:47.940632 7fa418ffa6c0 Delete type=0 #203
|
||||
2025/04/20-09:25:06.922414 7fa4127fc6c0 Level-0 table #209: started
|
||||
2025/04/20-09:25:06.922447 7fa4127fc6c0 Level-0 table #209: 0 bytes OK
|
||||
2025/04/20-09:25:06.928838 7fa4127fc6c0 Delete type=0 #207
|
||||
2025/04/20-09:25:06.929095 7fa4127fc6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:42:14.669125 7f7cfb7fe6c0 Recovering log #275
|
||||
2025/09/24-16:42:14.678629 7f7cfb7fe6c0 Delete type=3 #273
|
||||
2025/09/24-16:42:14.678694 7f7cfb7fe6c0 Delete type=0 #275
|
||||
2025/09/24-16:43:45.898794 7f7cf9fff6c0 Level-0 table #280: started
|
||||
2025/09/24-16:43:45.898823 7f7cf9fff6c0 Level-0 table #280: 0 bytes OK
|
||||
2025/09/24-16:43:45.963207 7f7cf9fff6c0 Delete type=0 #278
|
||||
2025/09/24-16:43:45.963407 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,14 +1,7 @@
|
||||
2025/04/11-23:06:48.331428 7f6deb7fe6c0 Recovering log #199
|
||||
2025/04/11-23:06:48.343033 7f6deb7fe6c0 Delete type=3 #197
|
||||
2025/04/11-23:06:48.343104 7f6deb7fe6c0 Delete type=0 #199
|
||||
2025/04/12-00:18:27.118439 7f6deabff6c0 Level-0 table #204: started
|
||||
2025/04/12-00:18:27.137069 7f6deabff6c0 Level-0 table #204: 6892 bytes OK
|
||||
2025/04/12-00:18:27.191998 7f6deabff6c0 Delete type=0 #202
|
||||
2025/04/12-00:18:27.374641 7f6deabff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at '!items!eILBnECWQOFfkxIL' @ 443 : 1
|
||||
2025/04/12-00:18:27.374657 7f6deabff6c0 Compacting 1@0 + 1@1 files
|
||||
2025/04/12-00:18:27.393149 7f6deabff6c0 Generated table #205@0: 71 keys, 263379 bytes
|
||||
2025/04/12-00:18:27.393180 7f6deabff6c0 Compacted 1@0 + 1@1 files => 263379 bytes
|
||||
2025/04/12-00:18:27.425988 7f6deabff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/04/12-00:18:27.426166 7f6deabff6c0 Delete type=2 #186
|
||||
2025/04/12-00:18:27.426484 7f6deabff6c0 Delete type=2 #204
|
||||
2025/04/12-00:18:27.426669 7f6deabff6c0 Manual compaction at level-0 from '!items!eILBnECWQOFfkxIL' @ 443 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:34:06.407386 7f7cfaffd6c0 Recovering log #271
|
||||
2025/09/24-16:34:06.418079 7f7cfaffd6c0 Delete type=3 #269
|
||||
2025/09/24-16:34:06.418139 7f7cfaffd6c0 Delete type=0 #271
|
||||
2025/09/24-16:41:30.124766 7f7cf9fff6c0 Level-0 table #276: started
|
||||
2025/09/24-16:41:30.124809 7f7cf9fff6c0 Level-0 table #276: 0 bytes OK
|
||||
2025/09/24-16:41:30.131329 7f7cf9fff6c0 Delete type=0 #274
|
||||
2025/09/24-16:41:30.151558 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-000277
Normal file
BIN
packs/education/MANIFEST-000277
Normal file
Binary file not shown.
0
packs/education/lost/000242.log
Normal file
0
packs/education/lost/000242.log
Normal file
Binary file not shown.
BIN
packs/graces/000238.ldb
Normal file
BIN
packs/graces/000238.ldb
Normal file
Binary file not shown.
0
packs/graces/000269.log
Normal file
0
packs/graces/000269.log
Normal file
@@ -1 +1 @@
|
||||
MANIFEST-000197
|
||||
MANIFEST-000267
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/20-09:24:47.948681 7fa4137fe6c0 Recovering log #194
|
||||
2025/04/20-09:24:47.965382 7fa4137fe6c0 Delete type=3 #192
|
||||
2025/04/20-09:24:47.965487 7fa4137fe6c0 Delete type=0 #194
|
||||
2025/04/20-09:25:06.935620 7fa4127fc6c0 Level-0 table #200: started
|
||||
2025/04/20-09:25:06.935652 7fa4127fc6c0 Level-0 table #200: 0 bytes OK
|
||||
2025/04/20-09:25:06.942921 7fa4127fc6c0 Delete type=0 #198
|
||||
2025/04/20-09:25:06.956261 7fa4127fc6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:42:14.682432 7f7cfaffd6c0 Recovering log #265
|
||||
2025/09/24-16:42:14.692809 7f7cfaffd6c0 Delete type=3 #263
|
||||
2025/09/24-16:42:14.692870 7f7cfaffd6c0 Delete type=0 #265
|
||||
2025/09/24-16:43:46.011645 7f7cf9fff6c0 Level-0 table #270: started
|
||||
2025/09/24-16:43:46.011682 7f7cf9fff6c0 Level-0 table #270: 0 bytes OK
|
||||
2025/09/24-16:43:46.083954 7f7cf9fff6c0 Delete type=0 #268
|
||||
2025/09/24-16:43:46.208935 7f7cf9fff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,14 +1,7 @@
|
||||
2025/04/11-23:06:48.348395 7f6debfff6c0 Recovering log #190
|
||||
2025/04/11-23:06:48.358966 7f6debfff6c0 Delete type=3 #188
|
||||
2025/04/11-23:06:48.359028 7f6debfff6c0 Delete type=0 #190
|
||||
2025/04/12-00:18:27.516559 7f6deabff6c0 Level-0 table #195: started
|
||||
2025/04/12-00:18:27.532890 7f6deabff6c0 Level-0 table #195: 2579 bytes OK
|
||||
2025/04/12-00:18:27.581168 7f6deabff6c0 Delete type=0 #193
|
||||
2025/04/12-00:18:27.688801 7f6deabff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at '!items!o71YhfDj6rschyQM' @ 59 : 1
|
||||
2025/04/12-00:18:27.688816 7f6deabff6c0 Compacting 1@0 + 1@1 files
|
||||
2025/04/12-00:18:27.707304 7f6deabff6c0 Generated table #196@0: 49 keys, 19688 bytes
|
||||
2025/04/12-00:18:27.707343 7f6deabff6c0 Compacted 1@0 + 1@1 files => 19688 bytes
|
||||
2025/04/12-00:18:27.739125 7f6deabff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/04/12-00:18:27.739315 7f6deabff6c0 Delete type=2 #173
|
||||
2025/04/12-00:18:27.739599 7f6deabff6c0 Delete type=2 #195
|
||||
2025/04/12-00:18:27.828729 7f6deabff6c0 Manual compaction at level-0 from '!items!o71YhfDj6rschyQM' @ 59 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:34:06.421631 7f7d00dfa6c0 Recovering log #261
|
||||
2025/09/24-16:34:06.432018 7f7d00dfa6c0 Delete type=3 #259
|
||||
2025/09/24-16:34:06.432112 7f7d00dfa6c0 Delete type=0 #261
|
||||
2025/09/24-16:41:30.098303 7f7cf9fff6c0 Level-0 table #266: started
|
||||
2025/09/24-16:41:30.098366 7f7cf9fff6c0 Level-0 table #266: 0 bytes OK
|
||||
2025/09/24-16:41:30.104526 7f7cf9fff6c0 Delete type=0 #264
|
||||
2025/09/24-16:41:30.124617 7f7cf9fff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/graces/MANIFEST-000267
Normal file
BIN
packs/graces/MANIFEST-000267
Normal file
Binary file not shown.
0
packs/graces/lost/000232.log
Normal file
0
packs/graces/lost/000232.log
Normal file
Binary file not shown.
BIN
packs/maladies/000238.ldb
Normal file
BIN
packs/maladies/000238.ldb
Normal file
Binary file not shown.
0
packs/maladies/000269.log
Normal file
0
packs/maladies/000269.log
Normal file
@@ -1 +1 @@
|
||||
MANIFEST-000197
|
||||
MANIFEST-000267
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/20-09:24:47.972234 7fa412ffd6c0 Recovering log #194
|
||||
2025/04/20-09:24:47.989602 7fa412ffd6c0 Delete type=3 #192
|
||||
2025/04/20-09:24:47.989720 7fa412ffd6c0 Delete type=0 #194
|
||||
2025/04/20-09:25:06.929262 7fa4127fc6c0 Level-0 table #200: started
|
||||
2025/04/20-09:25:06.929306 7fa4127fc6c0 Level-0 table #200: 0 bytes OK
|
||||
2025/04/20-09:25:06.935454 7fa4127fc6c0 Delete type=0 #198
|
||||
2025/04/20-09:25:06.956241 7fa4127fc6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:42:14.695212 7f7cfbfff6c0 Recovering log #265
|
||||
2025/09/24-16:42:14.705156 7f7cfbfff6c0 Delete type=3 #263
|
||||
2025/09/24-16:42:14.705234 7f7cfbfff6c0 Delete type=0 #265
|
||||
2025/09/24-16:43:46.084105 7f7cf9fff6c0 Level-0 table #270: started
|
||||
2025/09/24-16:43:46.084138 7f7cf9fff6c0 Level-0 table #270: 0 bytes OK
|
||||
2025/09/24-16:43:46.141584 7f7cf9fff6c0 Delete type=0 #268
|
||||
2025/09/24-16:43:46.208949 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,14 +1,7 @@
|
||||
2025/04/11-23:06:48.361948 7f6df11fa6c0 Recovering log #190
|
||||
2025/04/11-23:06:48.372204 7f6df11fa6c0 Delete type=3 #188
|
||||
2025/04/11-23:06:48.372273 7f6df11fa6c0 Delete type=0 #190
|
||||
2025/04/12-00:18:27.468730 7f6deabff6c0 Level-0 table #195: started
|
||||
2025/04/12-00:18:27.487486 7f6deabff6c0 Level-0 table #195: 19996 bytes OK
|
||||
2025/04/12-00:18:27.516404 7f6deabff6c0 Delete type=0 #193
|
||||
2025/04/12-00:18:27.626078 7f6deabff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at '!items!ysGehYm1VkMWrI22' @ 47 : 1
|
||||
2025/04/12-00:18:27.626091 7f6deabff6c0 Compacting 1@0 + 1@1 files
|
||||
2025/04/12-00:18:27.644729 7f6deabff6c0 Generated table #196@0: 17 keys, 11448 bytes
|
||||
2025/04/12-00:18:27.644759 7f6deabff6c0 Compacted 1@0 + 1@1 files => 11448 bytes
|
||||
2025/04/12-00:18:27.688168 7f6deabff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/04/12-00:18:27.688361 7f6deabff6c0 Delete type=2 #173
|
||||
2025/04/12-00:18:27.688608 7f6deabff6c0 Delete type=2 #195
|
||||
2025/04/12-00:18:27.828710 7f6deabff6c0 Manual compaction at level-0 from '!items!ysGehYm1VkMWrI22' @ 47 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:34:06.434181 7f7cfb7fe6c0 Recovering log #261
|
||||
2025/09/24-16:34:06.444000 7f7cfb7fe6c0 Delete type=3 #259
|
||||
2025/09/24-16:34:06.444067 7f7cfb7fe6c0 Delete type=0 #261
|
||||
2025/09/24-16:41:30.144559 7f7cf9fff6c0 Level-0 table #266: started
|
||||
2025/09/24-16:41:30.144589 7f7cf9fff6c0 Level-0 table #266: 0 bytes OK
|
||||
2025/09/24-16:41:30.151446 7f7cf9fff6c0 Delete type=0 #264
|
||||
2025/09/24-16:41:30.151596 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/maladies/MANIFEST-000267
Normal file
BIN
packs/maladies/MANIFEST-000267
Normal file
Binary file not shown.
0
packs/maladies/lost/000232.log
Normal file
0
packs/maladies/lost/000232.log
Normal file
Binary file not shown.
0
packs/scenes/000206.log
Normal file
0
packs/scenes/000206.log
Normal file
@@ -1 +1 @@
|
||||
MANIFEST-000134
|
||||
MANIFEST-000204
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/20-09:24:48.018535 7fa418ffa6c0 Recovering log #132
|
||||
2025/04/20-09:24:48.034352 7fa418ffa6c0 Delete type=3 #130
|
||||
2025/04/20-09:24:48.034446 7fa418ffa6c0 Delete type=0 #132
|
||||
2025/04/20-09:25:06.943076 7fa4127fc6c0 Level-0 table #137: started
|
||||
2025/04/20-09:25:06.943110 7fa4127fc6c0 Level-0 table #137: 0 bytes OK
|
||||
2025/04/20-09:25:06.949678 7fa4127fc6c0 Delete type=0 #135
|
||||
2025/04/20-09:25:06.956277 7fa4127fc6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:42:14.720636 7f7cfaffd6c0 Recovering log #202
|
||||
2025/09/24-16:42:14.731231 7f7cfaffd6c0 Delete type=3 #200
|
||||
2025/09/24-16:42:14.731304 7f7cfaffd6c0 Delete type=0 #202
|
||||
2025/09/24-16:43:46.141700 7f7cf9fff6c0 Level-0 table #207: started
|
||||
2025/09/24-16:43:46.141727 7f7cf9fff6c0 Level-0 table #207: 0 bytes OK
|
||||
2025/09/24-16:43:46.208754 7f7cf9fff6c0 Delete type=0 #205
|
||||
2025/09/24-16:43:46.208965 7f7cf9fff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/11-23:06:48.390538 7f6deb7fe6c0 Recovering log #128
|
||||
2025/04/11-23:06:48.400234 7f6deb7fe6c0 Delete type=3 #126
|
||||
2025/04/11-23:06:48.400355 7f6deb7fe6c0 Delete type=0 #128
|
||||
2025/04/12-00:18:27.426850 7f6deabff6c0 Level-0 table #133: started
|
||||
2025/04/12-00:18:27.426889 7f6deabff6c0 Level-0 table #133: 0 bytes OK
|
||||
2025/04/12-00:18:27.468595 7f6deabff6c0 Delete type=0 #131
|
||||
2025/04/12-00:18:27.626052 7f6deabff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:34:06.459217 7f7d00dfa6c0 Recovering log #198
|
||||
2025/09/24-16:34:06.469315 7f7d00dfa6c0 Delete type=3 #196
|
||||
2025/09/24-16:34:06.469408 7f7d00dfa6c0 Delete type=0 #198
|
||||
2025/09/24-16:41:30.137845 7f7cf9fff6c0 Level-0 table #203: started
|
||||
2025/09/24-16:41:30.137895 7f7cf9fff6c0 Level-0 table #203: 0 bytes OK
|
||||
2025/09/24-16:41:30.144438 7f7cf9fff6c0 Delete type=0 #201
|
||||
2025/09/24-16:41:30.151581 7f7cf9fff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/scenes/MANIFEST-000204
Normal file
BIN
packs/scenes/MANIFEST-000204
Normal file
Binary file not shown.
0
packs/scenes/lost/000169.log
Normal file
0
packs/scenes/lost/000169.log
Normal file
Binary file not shown.
BIN
packs/simples/000239.ldb
Normal file
BIN
packs/simples/000239.ldb
Normal file
Binary file not shown.
0
packs/simples/000270.log
Normal file
0
packs/simples/000270.log
Normal file
@@ -1 +1 @@
|
||||
MANIFEST-000197
|
||||
MANIFEST-000268
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/04/20-09:24:47.993946 7fa413fff6c0 Recovering log #194
|
||||
2025/04/20-09:24:48.011487 7fa413fff6c0 Delete type=3 #192
|
||||
2025/04/20-09:24:48.011668 7fa413fff6c0 Delete type=0 #194
|
||||
2025/04/20-09:25:06.949829 7fa4127fc6c0 Level-0 table #200: started
|
||||
2025/04/20-09:25:06.949863 7fa4127fc6c0 Level-0 table #200: 0 bytes OK
|
||||
2025/04/20-09:25:06.956072 7fa4127fc6c0 Delete type=0 #198
|
||||
2025/04/20-09:25:06.956290 7fa4127fc6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:42:14.708014 7f7d00dfa6c0 Recovering log #266
|
||||
2025/09/24-16:42:14.717668 7f7d00dfa6c0 Delete type=3 #264
|
||||
2025/09/24-16:42:14.717743 7f7d00dfa6c0 Delete type=0 #266
|
||||
2025/09/24-16:43:45.963524 7f7cf9fff6c0 Level-0 table #271: started
|
||||
2025/09/24-16:43:45.963550 7f7cf9fff6c0 Level-0 table #271: 0 bytes OK
|
||||
2025/09/24-16:43:46.011489 7f7cf9fff6c0 Delete type=0 #269
|
||||
2025/09/24-16:43:46.208919 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)
|
||||
|
@@ -1,14 +1,7 @@
|
||||
2025/04/11-23:06:48.375560 7f6df09f96c0 Recovering log #190
|
||||
2025/04/11-23:06:48.386162 7f6df09f96c0 Delete type=3 #188
|
||||
2025/04/11-23:06:48.386247 7f6df09f96c0 Delete type=0 #190
|
||||
2025/04/12-00:18:27.581367 7f6deabff6c0 Level-0 table #195: started
|
||||
2025/04/12-00:18:27.597317 7f6deabff6c0 Level-0 table #195: 4361 bytes OK
|
||||
2025/04/12-00:18:27.625802 7f6deabff6c0 Delete type=0 #193
|
||||
2025/04/12-00:18:27.739840 7f6deabff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at '!items!yf5aoqeuNknhABWX' @ 41 : 1
|
||||
2025/04/12-00:18:27.739867 7f6deabff6c0 Compacting 1@0 + 1@1 files
|
||||
2025/04/12-00:18:27.757841 7f6deabff6c0 Generated table #196@0: 36 keys, 20777 bytes
|
||||
2025/04/12-00:18:27.757871 7f6deabff6c0 Compacted 1@0 + 1@1 files => 20777 bytes
|
||||
2025/04/12-00:18:27.793933 7f6deabff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/04/12-00:18:27.794075 7f6deabff6c0 Delete type=2 #173
|
||||
2025/04/12-00:18:27.794233 7f6deabff6c0 Delete type=2 #195
|
||||
2025/04/12-00:18:27.828743 7f6deabff6c0 Manual compaction at level-0 from '!items!yf5aoqeuNknhABWX' @ 41 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)
|
||||
2025/09/24-16:34:06.445870 7f7cfaffd6c0 Recovering log #262
|
||||
2025/09/24-16:34:06.456672 7f7cfaffd6c0 Delete type=3 #260
|
||||
2025/09/24-16:34:06.456727 7f7cfaffd6c0 Delete type=0 #262
|
||||
2025/09/24-16:41:30.131456 7f7cf9fff6c0 Level-0 table #267: started
|
||||
2025/09/24-16:41:30.131488 7f7cf9fff6c0 Level-0 table #267: 0 bytes OK
|
||||
2025/09/24-16:41:30.137659 7f7cf9fff6c0 Delete type=0 #265
|
||||
2025/09/24-16:41:30.151571 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/simples/MANIFEST-000268
Normal file
BIN
packs/simples/MANIFEST-000268
Normal file
Binary file not shown.
0
packs/simples/lost/000233.log
Normal file
0
packs/simples/lost/000233.log
Normal file
@@ -886,16 +886,12 @@ ul, li {
|
||||
border-radius: 0;
|
||||
background: rgba(30, 25, 20, 1);
|
||||
background-origin: padding-box;
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
}
|
||||
#controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover {
|
||||
background: rgba(72, 46, 28, 1);
|
||||
background-origin: padding-box;
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
box-shadow: 0 0 3px #ff6400;
|
||||
@@ -907,7 +903,6 @@ ul, li {
|
||||
box-shadow: 2px 2px 5px #000000;
|
||||
}
|
||||
.macro {
|
||||
-o-border-image: url(img/ui/bg_control.jpg) 21 repeat;
|
||||
border-image: url(img/ui/bg_control.jpg) 21 repeat;
|
||||
border-image-slice: 6 6 6 6 fill;
|
||||
border-image-width: 6px 6px 6px 6px;
|
||||
@@ -921,8 +916,6 @@ ul, li {
|
||||
}
|
||||
}
|
||||
#players {
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
background: rgba(30, 25, 20, 1);
|
||||
@@ -933,8 +926,6 @@ ul, li {
|
||||
&.nav-item {
|
||||
background: rgba(30, 25, 20, 1);
|
||||
background-origin: padding-box;
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
&.active {
|
||||
@@ -946,8 +937,6 @@ ul, li {
|
||||
#nav-toggle {
|
||||
background: rgba(30, 25, 20, 1);
|
||||
background-origin: padding-box;
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
}
|
||||
@@ -955,8 +944,6 @@ ul, li {
|
||||
#navigation #scene-list .scene.view, #navigation #scene-list .scene.context {
|
||||
background: rgba(72, 46, 28, 1);
|
||||
background-origin: padding-box;
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
box-shadow: 0 0 3px #ff6400;
|
||||
@@ -1105,6 +1092,11 @@ ul, li {
|
||||
.item-field {
|
||||
margin-top: 4px;
|
||||
}
|
||||
.item-field-xp {
|
||||
margin-top: 4px;
|
||||
min-width: 8rem;
|
||||
max-width: 8rem;
|
||||
}
|
||||
.item-field-label-short {
|
||||
flex-grow: 1;
|
||||
max-width: 4rem;
|
||||
@@ -1245,27 +1237,27 @@ ul, li {
|
||||
|
||||
.chat-message .message {
|
||||
font-family: "GreatPrimer";
|
||||
font-size: 0.9rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.skill-roll-dialog {
|
||||
font-family: "GreatPrimer";
|
||||
font-size: 0.9rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.fvtt-te-deum-character-creator {
|
||||
background: rgba(226, 226, 222, 0.95);
|
||||
/*background: rgba(226, 226, 222, 0.95);*/
|
||||
font-family: "GreatPrimer";
|
||||
font-size: 0.9rem;
|
||||
font-size: 0.9rem;
|
||||
.field-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
.status-section {
|
||||
display: block;
|
||||
display: block;
|
||||
max-width: 34rem;
|
||||
}
|
||||
.creator-finished-section {
|
||||
display: block;
|
||||
display: block;
|
||||
max-width: 34rem;
|
||||
text-align: center;
|
||||
margin-bottom: 1rem;
|
||||
@@ -1301,4 +1293,7 @@ ul, li {
|
||||
padding: 1px 0.5rem 0 0.25rem;
|
||||
border-radius: 0 3px 0 0;
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.tedeum-create-character {
|
||||
align-self: anchor-center;
|
||||
}
|
@@ -834,16 +834,12 @@ ul, li {
|
||||
border-radius: 0;
|
||||
background: rgba(30, 25, 20, 1);
|
||||
background-origin: padding-box;
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
}
|
||||
#controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover {
|
||||
background: rgba(72, 46, 28, 1);
|
||||
background-origin: padding-box;
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
box-shadow: 0 0 3px #ff6400;
|
||||
@@ -854,7 +850,7 @@ ul, li {
|
||||
}
|
||||
#hotbar #action-bar .macro {
|
||||
-o-border-image: url(img/ui/bg_control.jpg) 21 repeat;
|
||||
border-image: url(img/ui/bg_control.jpg) 21 repeat;
|
||||
border-image: url(img/ui/bg_control.jpg) 21 repeat;
|
||||
border-image-slice: 6 6 6 6 fill;
|
||||
border-image-width: 6px 6px 6px 6px;
|
||||
border-image-outset: 0px 0px 0px 0px;
|
||||
@@ -865,8 +861,6 @@ ul, li {
|
||||
border: 1px solid rgba(72, 46, 28, 1);
|
||||
}
|
||||
#players {
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
background: rgba(30, 25, 20, 1);
|
||||
@@ -874,8 +868,6 @@ ul, li {
|
||||
#navigation #scene-list .scene.nav-item {
|
||||
background: rgba(30, 25, 20, 1);
|
||||
background-origin: padding-box;
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px
|
||||
}
|
||||
@@ -885,16 +877,12 @@ ul, li {
|
||||
#navigation #nav-toggle {
|
||||
background: rgba(30, 25, 20, 1);
|
||||
background-origin: padding-box;
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
}
|
||||
#navigation #scene-list .scene.view, #navigation #scene-list .scene.context {
|
||||
background: rgba(72, 46, 28, 1);
|
||||
background-origin: padding-box;
|
||||
-o-border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image: url(img/ui/footer-button.png) 10 repeat;
|
||||
border-image-width: 4px;
|
||||
border-image-outset: 0px;
|
||||
box-shadow: 0 0 3px #ff6400;
|
||||
@@ -1045,6 +1033,11 @@ ul, li {
|
||||
.item-field {
|
||||
margin-top: 4px;
|
||||
}
|
||||
.item-field-xp {
|
||||
margin-top: 4px;
|
||||
min-width: 8rem;
|
||||
max-width: 8rem;
|
||||
}
|
||||
.item-field-label-short {
|
||||
flex-grow: 1;
|
||||
max-width: 4rem;
|
||||
@@ -1182,16 +1175,16 @@ ul, li {
|
||||
|
||||
.chat-message .message {
|
||||
font-family: "GreatPrimer";
|
||||
font-size: 0.9rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.skill-roll-dialog {
|
||||
font-family: "GreatPrimer";
|
||||
font-size: 0.9rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.fvtt-te-deum-character-creator {
|
||||
background: rgba(226, 226, 222, 0.95);
|
||||
/*background: rgba(226, 226, 222, 0.95);*/
|
||||
font-family: "GreatPrimer";
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
@@ -1201,12 +1194,12 @@ ul, li {
|
||||
}
|
||||
|
||||
.fvtt-te-deum-character-creator .status-section {
|
||||
display: block;
|
||||
display: block;
|
||||
max-width: 34rem;
|
||||
}
|
||||
|
||||
.fvtt-te-deum-character-creator .creator-finished-section {
|
||||
display: block;
|
||||
display: block;
|
||||
max-width: 34rem;
|
||||
text-align: center;
|
||||
margin-bottom: 1rem;
|
||||
@@ -1242,4 +1235,7 @@ ul, li {
|
||||
padding: 1px 0.5rem 0 0.25rem;
|
||||
border-radius: 0 3px 0 0;
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.tedeum-create-character {
|
||||
align-self: anchor-center;
|
||||
}
|
18
system.json
18
system.json
@@ -3,7 +3,7 @@
|
||||
"esmodules": [
|
||||
"modules/tedeum-main.js"
|
||||
],
|
||||
"grid": {
|
||||
"grid": {
|
||||
"distance": 2,
|
||||
"units": "m"
|
||||
},
|
||||
@@ -134,22 +134,22 @@
|
||||
"license": "LICENSE.txt",
|
||||
"manifest": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/latest/system.json",
|
||||
"compatibility": {
|
||||
"minimum": "12",
|
||||
"verified": "12"
|
||||
"minimum": "13",
|
||||
"verified": "13"
|
||||
},
|
||||
"id": "fvtt-te-deum",
|
||||
"primaryTokenAttribute": "secondary.health",
|
||||
"secondaryTokenAttribute": "secondary.delirium",
|
||||
"socket": true,
|
||||
"styles": [
|
||||
"styles/tedeum.css"
|
||||
{
|
||||
"src": "styles/tedeum.css"
|
||||
}
|
||||
],
|
||||
"relationships": {
|
||||
},
|
||||
"title": "Te Deum pour Un Massacre, le Jeu de Rôles (Officiel)",
|
||||
"url": "https://www.uberwald.me/gitea/public/fvtt-te-deum",
|
||||
"version": "12.0.17",
|
||||
"download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/archive/fvtt-te-deum-v12.0.17.zip",
|
||||
"version": "13.0.1",
|
||||
"download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/13.0.1/fvtt-te-deum-13.0.1.zip",
|
||||
"background": "systems/fvtt-te-deum/images/ui/tdeum_welcome_page_01.webp",
|
||||
"flags": {
|
||||
"hotReload": {
|
||||
@@ -166,4 +166,4 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -40,30 +40,35 @@
|
||||
<div class="grid grid-2col">
|
||||
|
||||
<div>
|
||||
<ul class="item-list alternate-list">
|
||||
{{#each caracList as |char key|}}
|
||||
<li class="item flexrow list-item carac-box">
|
||||
<img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" />
|
||||
<label class="item-left-pad item-field item-field-label-medium" data-tooltip="{{char.description}}">{{char.name}}</label>
|
||||
<select type="text" class="input-numeric-short" name="system.caracteristiques.{{key}}.value"
|
||||
data-dtype="Number" />
|
||||
{{selectOptions @root.config.descriptionValeur selected=char.value labelAttr="valeur"}}
|
||||
</select>
|
||||
<label class="item-field item-field-label-medium">{{char.qualite}}</label>
|
||||
<label class="item-field item-field-label-medium">{{char.dice}} ({{char.negativeDice}})</label>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
<ul class="item-list alternate-list">
|
||||
{{#each caracList as |char key|}}
|
||||
<li class="item flexrow list-item carac-box">
|
||||
<img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" />
|
||||
<label class="item-left-pad item-field item-field-label-medium"
|
||||
data-tooltip="{{char.description}}">{{char.name}}</label>
|
||||
<select type="text" class="input-numeric-short" name="system.caracteristiques.{{key}}.value"
|
||||
data-dtype="Number" />
|
||||
{{selectOptions @root.config.descriptionValeur selected=char.value labelAttr="valeur"}}
|
||||
</select>
|
||||
<label class="item-field item-field-label-medium">{{char.qualite}}</label>
|
||||
<label class="item-field item-field-label-medium">{{char.dice}} ({{char.negativeDice}})</label>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<div>
|
||||
<h4>Malus de santé : {{santeModifier}} niveaux</h4>
|
||||
</div>
|
||||
<div>
|
||||
<h4>Malus de santé : {{santeModifier}} niveaux</h4>
|
||||
</div>
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-field-title-long">
|
||||
<h3><label class="item-field-label-long">Blessures</label></h3>
|
||||
</span>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control blessure-add" data-type="blessure" title="Ajouter une Blessure"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
|
||||
</li>
|
||||
{{#each blessures as |blessure key|}}
|
||||
<li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{blessure._id}}">
|
||||
@@ -140,7 +145,8 @@
|
||||
<div>
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item carac-box">
|
||||
<label class="item-left-pad item-field item-field-label-medium" data-tooltip="{{providence.description}}">Providence</label>
|
||||
<label class="item-left-pad item-field item-field-label-medium"
|
||||
data-tooltip="{{providence.description}}">Providence</label>
|
||||
<select type="text" class="input-numeric-short" name="system.providence.value" data-dtype="Number" />
|
||||
{{selectOptions @root.config.providence selected=providence.value nameAttr="value" valueAttr="value"
|
||||
labelAttr="value"}}
|
||||
@@ -149,16 +155,21 @@
|
||||
<label class="item-field item-field-label-short">{{providence.dice}}</label>
|
||||
</li>
|
||||
<li class="item flexrow list-item carac-box">
|
||||
<label class="item-left-pad item-field item-field-label-medium" data-tooltip=" La Bienveillance n’est pas à proprement parler une compétence : il s’agit de l’évaluation chiffrée de l'atta- chement que l'ange gardien du personnage éprouve pour son protégé. Cet attachement peut se détériorer si le personnage se montre indigne ou mauvais, et s'érode avec l’âge. La Bienveillance a un score initial de 10 pour un nouveau PJ ayant moins de 30 ans.">
|
||||
<label class="item-left-pad item-field item-field-label-medium"
|
||||
data-tooltip=" La Bienveillance n’est pas à proprement parler une compétence : il s’agit de l’évaluation chiffrée de l'atta- chement que l'ange gardien du personnage éprouve pour son protégé. Cet attachement peut se détériorer si le personnage se montre indigne ou mauvais, et s'érode avec l’âge. La Bienveillance a un score initial de 10 pour un nouveau PJ ayant moins de 30 ans.">
|
||||
Bienveillance</label>
|
||||
<input class="input-numeric-short" type="text" name="system.bienveillance.value" value="{{system.bienveillance.value}}" data-dtype="Number" />
|
||||
<input class="input-numeric-short" type="text" name="system.bienveillance.value"
|
||||
value="{{system.bienveillance.value}}" data-dtype="Number" />
|
||||
<label class="item-left-pad item-field item-field-label-medium">Bonus dégats</label>
|
||||
<input class="input-numeric-short" type="text" value="{{bonusDegats.label}}" disabled data-dtype="Number" />
|
||||
<input class="input-numeric-short" type="text" value="{{bonusDegats.value}}" disabled
|
||||
data-dtype="Number" />
|
||||
</li>
|
||||
<li class="item flexrow list-item carac-box">
|
||||
<label class="item-left-pad item-field item-field-label-medium">Armures Lourdes</label>
|
||||
<input class="input-numeric-short" type="text" value="{{nbArmuresLourdes}}" disabled data-dtype="Number" /> /
|
||||
<input class="input-numeric-short" type="text" value="{{pointsArmuresLourdes.value}}" disabled data-dtype="Number" />
|
||||
<input class="input-numeric-short" type="text" value="{{nbArmuresLourdes}}" disabled
|
||||
data-dtype="Number" /> /
|
||||
<input class="input-numeric-short" type="text" value="{{pointsArmuresLourdes.value}}" disabled
|
||||
data-dtype="Number" />
|
||||
<label class="item-left-pad item-field item-field-label-medium">Actions/Tour</label>
|
||||
<input class="input-numeric-short" type="text" value="{{nbActions.value}}" disabled data-dtype="Number" />
|
||||
</li>
|
||||
@@ -172,7 +183,7 @@
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-add" data-type="grace" title="Créer une Grâce"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each graces as |grace key|}}
|
||||
@@ -204,19 +215,20 @@
|
||||
<img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" />
|
||||
<h3 class="item-field-label-long14" data-tooltip="Caracteristique">{{carac.name}} : {{carac.qualite}}</h3>
|
||||
<label class="item-field item-field-label-short">{{carac.value}}</label>
|
||||
<label class="item-field ">{{carac.dice}} (xp :
|
||||
<label class="item-field-xp ">{{carac.dice}} (xp :
|
||||
{{#if @root.isGM}}
|
||||
<input class="input-numeric-short" type="text" name="system.caracteristiques.{{key}}.experience" value="{{carac.experience}}" data-dtype="Number" />
|
||||
<input class="input-numeric-short" type="text" name="system.caracteristiques.{{key}}.experience"
|
||||
value="{{carac.experience}}" data-dtype="Number" />
|
||||
{{else}}
|
||||
{{carac.experience}})
|
||||
{{/if}}
|
||||
)
|
||||
</label>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control competence-add" data-type="competence" data-carac-key="{{key}}" title="Ajouter une Compétence"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control competence-add" data-type="competence" data-carac-key="{{key}}"
|
||||
title="Ajouter une Compétence"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
<ul class="ul-level1 flexrow item-list">
|
||||
{{#each carac.competences as |comp skillkey|}}
|
||||
@@ -267,11 +279,13 @@
|
||||
</span>
|
||||
<span class="item-field-label-medium">{{upperFirst arme.system.typeArme}}</span>
|
||||
<span class="item-field-label-medium">{{upperFirst arme.system.competence}}</span>
|
||||
<span class="item-field-label-medium"><a class="roll-degats" data-arme-id="{{arme._id}}">{{arme.system.degats}}</a></span>
|
||||
<span class="item-field-label-medium"><a class="roll-degats"
|
||||
data-arme-id="{{arme._id}}">{{arme.system.degats}}</a></span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed-full">
|
||||
<a class="item-control item-equip" title="Equiper" {{#unless arme.system.equipe}}style="color:gray;"{{/unless}}>
|
||||
<a class="item-control item-equip" title="Equiper" {{#unless arme.system.equipe}}style="color:gray;"
|
||||
{{/unless}}>
|
||||
<i class="fas fa-shield-alt"></i>
|
||||
</a>
|
||||
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
|
||||
@@ -297,7 +311,8 @@
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed-full">
|
||||
<a class="item-control item-equip" title="Equiper" {{#unless armure.system.equipe}}style="color:gray;"{{/unless}}>
|
||||
<a class="item-control item-equip" title="Equiper" {{#unless armure.system.equipe}}style="color:gray;"
|
||||
{{/unless}}>
|
||||
<i class="fas fa-shield-alt"></i>
|
||||
</a>
|
||||
<a class="item-control item-edit" title="Editer l'armure"><i class="fas fa-edit"></i></a>
|
||||
@@ -318,12 +333,12 @@
|
||||
<h4 class="center">{{loc.score.min}}-{{loc.score.max}}. {{loc.label}}</h4>
|
||||
<div class="flexcol">
|
||||
{{#each loc.armures as |armure idx| }}
|
||||
<span>{{armure.name}} ({{armure.system.protection}})</span>
|
||||
<span>{{armure.name}} ({{armure.system.protection}})</span>
|
||||
{{/each}}
|
||||
<span>Touché : {{touche}}</span>
|
||||
<span>Blessures : </span>
|
||||
{{#each loc.blessures as |blessure idx| }}
|
||||
<span>{{blessure.name}} ({{blessure.malus}})</span>
|
||||
<span>{{blessure.name}} ({{blessure.malus}})</span>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -397,8 +412,7 @@
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-add" data-type="simple" title="Créer une simple"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
<a class="item-control item-add" data-type="simple" title="Créer une simple"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each simples as |simple key|}}
|
||||
@@ -415,7 +429,7 @@
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -428,7 +442,7 @@
|
||||
<li class="item flexrow">
|
||||
<label class="item-name-label-medium">Genre</label>
|
||||
<select type="text" class="" name="system.genre" value="{{system.genre}}" data-dtype="String" />
|
||||
{{selectOptions @root.config.genre selected=system.genre}}
|
||||
{{selectOptions @root.config.genre selected=system.genre}}
|
||||
</select>
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
@@ -438,8 +452,7 @@
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-name-label-medium">Age</label>
|
||||
<input type="text" class="" name="system.age" value="{{system.age}}"
|
||||
data-dtype="String" />
|
||||
<input type="text" class="" name="system.age" value="{{system.age}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-name-label-medium">Date de Naissance</label>
|
||||
@@ -462,8 +475,7 @@
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-name-label-medium">Religion</label>
|
||||
<input type="text" class="" name="system.religion" value="{{system.religion}}"
|
||||
data-dtype="String" />
|
||||
<input type="text" class="" name="system.religion" value="{{system.religion}}" data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@@ -5,27 +5,95 @@
|
||||
<h4 class="chat-actor-name">{{alias}}</h4>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
{{#if img}}
|
||||
<div >
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
<hr>
|
||||
|
||||
<div class="flexcol">
|
||||
</div>
|
||||
{{#if img}}
|
||||
<div>
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
{{#if blessure}}
|
||||
<li>{{defenderName}} a subi une blessure!</li>
|
||||
<li>Gravité : {{blessure.name}}</li>
|
||||
<li>Localisation : {{loc.label}}</li>
|
||||
{{else}}
|
||||
<li>Aucune blessure subie par {{defenderName}}</li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="flexcol">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div>
|
||||
<ul>
|
||||
<li><strong>{{alias}}</strong> attaque <strong>{{defenderName}}</strong></li>
|
||||
|
||||
{{#if arme}}
|
||||
<li><label class="chat-weapon-name">Dégats {{arme.name}} : {{degats}} ({{degatsFormula}})</label></li>
|
||||
{{/if}}
|
||||
{{#if loc}}
|
||||
<li>Localisation : {{loc.label}}</li>
|
||||
<li>Touché : {{touche}}</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if gantelet}}
|
||||
<li>Poing avec gantelet: +1 dégat</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if isChargeAPied}}
|
||||
<li>Charge à pied (+Course)</li>
|
||||
{{/if}}
|
||||
{{#if isChargeACheval}}
|
||||
<li>Charge à cheval (+Equitation)</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if isReussiteCritique}}
|
||||
<li><strong class="chat-result-success">Réussite critique : La blessure a été augmentée d'un niveau</strong></li>
|
||||
{{/if}}
|
||||
{{#if blessure}}
|
||||
<li><strong>{{defenderName}} a subi une blessure!</strong></li>
|
||||
<li>Gravité : {{blessure.name}}</li>
|
||||
|
||||
|
||||
{{#if (eq loc.categorie "tete")}}
|
||||
{{#if (gt blessure.system.value 0)}}
|
||||
<li><strong class="chat-result-warning">{{defenderName}} doit réussir un test d'Endurance de difficulté 7 ou être
|
||||
assommé</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq loc.categorie "bras")}}
|
||||
{{#if (gt blessure.system.value 2)}}
|
||||
<li><strong class="chat-result-warning">{{defenderName}} lache l'objet tenu par son bras. Il doit faire un test
|
||||
d'endurance
|
||||
pour l'utiliser désormais.</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq loc.categorie "jambe")}}
|
||||
{{#if (gt blessure.system.value 2)}}
|
||||
<li><strong class="chat-result-warning">{{defenderName}} tombe au sol. Pour se relever et marcher, il doit réussir
|
||||
un test
|
||||
d'Endurance à chaque tour.
|
||||
</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq loc.categorie "main")}}
|
||||
{{#if (gt blessure.system.value 1)}}
|
||||
<li><strong class="chat-result-warning">{{defenderName}} lache l'objet tenu par sa main. Il doit faire un test
|
||||
d'endurance
|
||||
pour l'utiliser désormais.</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq loc.categorie "pied")}}
|
||||
{{#if (gt blessure.system.value 1)}}
|
||||
<li><strong class="chat-result-warning">{{defenderName}} tombe au sol. Pour se relever et marcher, il doit réussir
|
||||
un test
|
||||
d'Endurance à chaque tour.
|
||||
</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
|
||||
{{else}}
|
||||
<li>Aucune blessure subie par {{defenderName}}</li>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
@@ -5,19 +5,34 @@
|
||||
<h4 class="chat-actor-name">{{alias}}</h4>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
{{#if img}}
|
||||
<div >
|
||||
<img class="chat-icon" src="{{arme.img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
<hr>
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
<li>Dégats de {{arme.name}}: {{formula}} </li>
|
||||
<li>Dégats infligés : {{degats}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{{#if img}}
|
||||
<div>
|
||||
<img class="chat-icon" src="{{arme.img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
<div>
|
||||
<ul>
|
||||
<li>Dégats de {{arme.name}}: {{formula}} </li>
|
||||
{{#if gantelet}}
|
||||
<li>Poing avec gantelet: +1 dégat</li>
|
||||
{{/if}}
|
||||
{{#if isChargeAPied}}
|
||||
<li>Charge à pied (+Course)</li>
|
||||
{{/if}}
|
||||
{{#if isChargeACheval}}
|
||||
<li>Charge à cheval (+Equitation)</li>
|
||||
{{/if}}
|
||||
<li>Dégats infligés : {{degats}}</li>
|
||||
{{#if loc}}
|
||||
<li>Localisation : {{loc.label}}</li>
|
||||
{{/if}}
|
||||
{{#if isReussiteCritique}}
|
||||
<li><strong class="chat-result-success">Réussite critique : La blessure sera augmentée d'un niveau</strong></li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
@@ -5,92 +5,130 @@
|
||||
<h4 class="chat-actor-name">{{alias}}</h4>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
{{#if img}}
|
||||
<div >
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
<hr>
|
||||
|
||||
<div class="flexcol">
|
||||
</div>
|
||||
{{#if img}}
|
||||
<div>
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
{{#if carac}}
|
||||
<li>{{carac.name}}: {{carac.qualite}} ({{carac.dice}}) </li>
|
||||
{{/if}}
|
||||
{{#if competence}}
|
||||
<li>{{competence.name}}: {{competence.system.score}} </li>
|
||||
{{/if}}
|
||||
{{#if bonusMalus}}
|
||||
<li>Bonus/Malus: {{bonusMalus}} </li>
|
||||
{{/if}}
|
||||
{{#if santeModifier}}
|
||||
<li>Santé: {{santeModifier}} niveaux</li>
|
||||
{{/if}}
|
||||
{{#if enableProvidence}}
|
||||
<li>Un niveau de Providence a été utilisé !</li>
|
||||
{{/if}}
|
||||
{{#if isViser}}
|
||||
<li>Bonus de visée (+1 niveau)</li>
|
||||
{{/if}}
|
||||
{{#if isMouvement}}
|
||||
<li>Malus de cible petite ou en mouvement (-1 niveau)</li>
|
||||
{{/if}}
|
||||
<div class="flexcol">
|
||||
</div>
|
||||
|
||||
<li>Dés: {{diceFormula}} </li>
|
||||
{{#if isTir}}
|
||||
<li>Portée: {{porteeLabel}} ( {{difficulty}} )</li>
|
||||
{{else}}
|
||||
<li>Difficulté: {{difficulty}} </li>
|
||||
{{/if}}
|
||||
<div>
|
||||
<ul>
|
||||
{{#if carac}}
|
||||
<li>{{carac.name}}: {{carac.qualite}} ({{carac.dice}}) </li>
|
||||
{{/if}}
|
||||
{{#if competence}}
|
||||
<li>{{competence.name}}: {{compScore}} </li>
|
||||
{{/if}}
|
||||
{{#if bonusMalus}}
|
||||
<li>Bonus/Malus: {{bonusMalus}} </li>
|
||||
{{/if}}
|
||||
{{#if santeModifier}}
|
||||
<li>Santé: {{santeModifier}} niveaux</li>
|
||||
{{/if}}
|
||||
{{#if enableProvidence}}
|
||||
<li>Un niveau de Providence a été utilisé !</li>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
{{#if hasActions}}
|
||||
<li data-tooltip="Nombre d'actions restantes, avec MG = Main Gauche">Actions restantes: {{remainingActions}}
|
||||
(MG:{{remainingActionsMainGauche}})</li>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexrow">
|
||||
<ul class="chat-result-column">
|
||||
<li><strong>Résultat: {{total}}</strong> </li>
|
||||
{{#if isSuccess}}
|
||||
<li><strong class="chat-result-success">Succès !</strong> </li>
|
||||
{{#if isReussiteCritique}}
|
||||
<li><strong class="chat-result-success">Réussite critique ! 1 XP gagné en {{carac.name}}.</strong> </li>
|
||||
{{/if}}
|
||||
{{#if arme}}
|
||||
{{#if isViser}}
|
||||
<li>Bonus de visée (+1 niveau)</li>
|
||||
{{/if}}
|
||||
{{#if isMouvement}}
|
||||
<li>Malus de cible petite ou en mouvement (-1 niveau)</li>
|
||||
{{/if}}
|
||||
{{#if attaqueCiblee}}
|
||||
<li>Attaque ciblée, -1 niveau</li>
|
||||
{{/if}}
|
||||
{{#if allongeMalus}}
|
||||
<li>Malus d'allonge: {{allongeMalus}} niveau</li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if arme}}
|
||||
<li><strong class="">Attaque réussie ! Faites une opposition avec la défense de la cible ou appliquez directement les dégats.</strong> </li>
|
||||
{{/if}}
|
||||
<li>Dés: {{diceFormula}} </li>
|
||||
{{#if isTir}}
|
||||
<li>Portée: {{porteeLabel}} ( {{difficulty}} )</li>
|
||||
{{else}}
|
||||
<li>Difficulté: {{difficulty}} </li>
|
||||
{{/if}}
|
||||
|
||||
{{else}}
|
||||
<li><strong class="chat-result-failure">Echec !</strong> </li>
|
||||
{{#if isEchecCritique}}
|
||||
<li><strong class="chat-result-failure">Echec critique ! 1 XP gagné en {{carac.name}}.</strong> </li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if loc}}
|
||||
<li><strong>Attaque réussie !!</strong> </li>
|
||||
<li>Localisation: {{loc.label}} </li>
|
||||
<li>Dégats: {{degats}} {{#if isReussiteCritique}}(Augmentez la gravité de la blessure d'un niveau){{/if}}</li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
<div>
|
||||
<a class="chat-command-opposition" >
|
||||
<img class="chat-command-img" data-tooltip="Test en opposition" src="systems/fvtt-te-deum/images/icons/opposition.webp">
|
||||
</a>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{{#if arme}}
|
||||
{{#if isSuccess}}
|
||||
<a class="chat-command-appliquer-degats" >
|
||||
<img class="chat-command-img" data-tooltip="Appliquer les dégats directement sans opposition" src="systems/fvtt-te-deum/images/icons/appliquer-degats.webp">
|
||||
</a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<div class="flexrow">
|
||||
<ul class="chat-result-column">
|
||||
<li><strong>Résultat: {{total}}</strong> </li>
|
||||
{{#if isSuccess}}
|
||||
<li><strong class="chat-result-success">Succès !</strong> </li>
|
||||
{{#if isReussiteCritique}}
|
||||
<li data-tooltip="Si le jet n'est pas opposé, cliquez sur le bouton pour gagner 1 XP gagné en {{carac.name}}">
|
||||
<strong class="chat-result-success">Réussite critique (XP potentiel) !</strong>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if arme}}
|
||||
<li><strong class="">Attaque réussie ! Faites une opposition avec la défense de la cible ou appliquez directement
|
||||
les dégats.</strong> </li>
|
||||
{{/if}}
|
||||
|
||||
{{else}}
|
||||
<li><strong class="chat-result-failure">Echec !</strong> </li>
|
||||
{{#if isEchecCritique}}
|
||||
<li data-tooltip="Si le jet n'est pas opposé, cliquez sur le bouton pour gagner 1 XP gagné en {{carac.name}}">
|
||||
<strong class="chat-result-failure">Echec critique (XP potentiel) !</strong>
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if nbEsquives}}
|
||||
<li>Rappel : vous devez réussir {{nbEsquives}} tests d'esquive pour arriver au contact (règle d'allonge des armes).
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if loc}}
|
||||
<li><strong>Attaque réussie !!</strong> </li>
|
||||
<li>Localisation: {{loc.label}} </li>
|
||||
{{/if}}
|
||||
|
||||
{{#if degats}}
|
||||
<li>Dégats: {{degats}} {{#if isReussiteCritique}}(Augmentez la gravité de la blessure d'un niveau){{/if}}</li>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
<div>
|
||||
|
||||
{{#if (or isEchecCritique isReussiteCritique)}}
|
||||
<a class="chat-command-gain-xp">
|
||||
<img class="chat-command-img" data-tooltip="Cliquez ici pour +1 XP en {{carac.name}} si pas d'opposition"
|
||||
src="systems/fvtt-te-deum/images/icons/xpplus1.webp">
|
||||
</a>
|
||||
{{/if}}
|
||||
|
||||
<a class="chat-command-opposition">
|
||||
<img class="chat-command-img" data-tooltip="Test en opposition"
|
||||
src="systems/fvtt-te-deum/images/icons/opposition.webp">
|
||||
</a>
|
||||
|
||||
{{#if arme}}
|
||||
{{#if isSuccess}}
|
||||
<a class="chat-command-appliquer-degats">
|
||||
<img class="chat-command-img" data-tooltip="Appliquer les dégats directement sans opposition"
|
||||
src="systems/fvtt-te-deum/images/icons/appliquer-degats.webp">
|
||||
</a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user