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