Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fc6bb7a4b1 | |||
| f26130d208 | |||
| 39da08d4cb | |||
| e639b6ae3e | |||
| 8c247a8981 | |||
| a09e1a1d95 | |||
| 787f88873a | |||
| ac481e0dd9 | |||
| 375622d900 | |||
| 3bc055cc1f | |||
| c97b7a4889 | |||
| 5d13500838 | |||
| d21515e1e3 | |||
| 78ef009465 | |||
| e794611bf3 | |||
| 529a62045e |
54
.gitignore
vendored
Normal file
54
.gitignore
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
# Dependencies
|
||||
node_modules/
|
||||
package-lock.json
|
||||
|
||||
# Build outputs
|
||||
styles/tedeum.css
|
||||
styles/*.css.map
|
||||
|
||||
# IDE & Editor files
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.DS_Store
|
||||
|
||||
# System files
|
||||
Thumbs.db
|
||||
desktop.ini
|
||||
|
||||
# Logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
*.log
|
||||
|
||||
# Temporary files
|
||||
*.tmp
|
||||
*.temp
|
||||
.cache/
|
||||
|
||||
# Environment variables
|
||||
.env
|
||||
.env.local
|
||||
|
||||
# Optional: Uncomment if you want to ignore pack database files
|
||||
# These are usually committed for systems, but can be regenerated
|
||||
# packs/**/*.ldb
|
||||
# packs/**/LOG
|
||||
# packs/**/LOG.old
|
||||
# packs/**/MANIFEST-*
|
||||
# packs/**/CURRENT
|
||||
|
||||
# Compiled source
|
||||
dist/
|
||||
build/
|
||||
|
||||
# OS generated files
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
24
gulpfile.js
24
gulpfile.js
@@ -1,25 +1,17 @@
|
||||
var gulp = require('gulp');
|
||||
|
||||
var less = require('gulp-less');
|
||||
var postcss = require('gulp-postcss');
|
||||
|
||||
var autoprefixer = require('autoprefixer');
|
||||
var cssnext = require('postcss-preset-env');
|
||||
var precss = require('precss');
|
||||
|
||||
gulp.task('css', function () {
|
||||
|
||||
var processors = [
|
||||
autoprefixer,
|
||||
cssnext,
|
||||
precss
|
||||
];
|
||||
|
||||
return gulp.src('./postcss/*.css')
|
||||
.pipe(postcss(processors))
|
||||
return gulp.src('./less/*.less')
|
||||
.pipe(less())
|
||||
.pipe(postcss([autoprefixer]))
|
||||
.pipe(gulp.dest('./styles'));
|
||||
});
|
||||
|
||||
gulp.task('watch', function () {
|
||||
gulp.watch('./less/*.less', gulp.series('css'));
|
||||
});
|
||||
|
||||
function watchUpdates() {
|
||||
gulp.watch('./postcss/*.css', css);
|
||||
}
|
||||
gulp.task('default', gulp.series('css'));
|
||||
|
||||
2071
less/tedeum.less
Normal file
2071
less/tedeum.less
Normal file
File diff suppressed because it is too large
Load Diff
@@ -77,6 +77,31 @@ export class TeDeumActor extends Actor {
|
||||
return 0
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getMeilleureCompetenceMainGauche(comp) {
|
||||
let compScore = this.getCompetenceScore(comp.name)
|
||||
let mainGaucheScore = this.getCompetenceScore("main gauche")
|
||||
if (mainGaucheScore < compScore) {
|
||||
ui.notifications.info(`${this.name} : Utilisation de la compétence Main Gauche au lieu de ${comp.name}`)
|
||||
let mainGaucheComp = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "main gauche")
|
||||
if (!mainGaucheComp) {
|
||||
// Create a fake competence object
|
||||
mainGaucheComp = foundry.utils.duplicate(comp)
|
||||
mainGaucheComp.name = "Main Gauche"
|
||||
mainGaucheComp.system.isBase = false
|
||||
mainGaucheComp.system.score = 0
|
||||
mainGaucheComp.system.caracteristique = "adresse"
|
||||
mainGaucheComp.system.description = "Compétence Main Gauche (automatique)"
|
||||
mainGaucheComp.system.isMainGauche = true
|
||||
return mainGaucheComp
|
||||
} else {
|
||||
return mainGaucheComp
|
||||
}
|
||||
} else {
|
||||
return comp
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_onUpdate(changed, options, userId) {
|
||||
let updates = []
|
||||
@@ -116,12 +141,6 @@ export class TeDeumActor extends Actor {
|
||||
updates.push({ _id: initiative.id, "system.score": Number(newScore) })
|
||||
}
|
||||
|
||||
let actionsTour = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "actions/tour")
|
||||
newScore = this.getCommonBaseValue(this.system.caracteristiques.adresse.value)
|
||||
if (actionsTour && actionsTour?.system.score != newScore) {
|
||||
updates.push({ _id: actionsTour.id, "system.score": Number(newScore) })
|
||||
}
|
||||
|
||||
let effort = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "effort")
|
||||
newScore = this.getCommonBaseValue(this.system.caracteristiques.puissance.value)
|
||||
if (effort && effort?.system.score != newScore) {
|
||||
@@ -151,7 +170,7 @@ export class TeDeumActor extends Actor {
|
||||
getCommonBaseValue(value) {
|
||||
return game.system.tedeum.config.COMMON_VALUE[value]?.value || 0
|
||||
}
|
||||
getInitiative() {
|
||||
getInitiativeValue() {
|
||||
return game.system.tedeum.config.COMMON_VALUE[this.system.caracteristiques.adresse.value]?.value || 0
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
@@ -616,21 +635,16 @@ export class TeDeumActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore() {
|
||||
let initiative = this.items.find(it => it.type == "competence" && it.name.toLowerCase() == "initiative")
|
||||
initiative = foundry.utils.duplicate(initiative)
|
||||
let initiative = this.getInitiativeValue()
|
||||
// Vérifie les armes avec bonus d'initiative
|
||||
let armes = this.getArmes()
|
||||
for (let arme of armes) {
|
||||
if (arme.system.equipe && arme.system.bonusInitiative != 0) {
|
||||
ui.notifications.info("L'arme " + arme.name + " vous confère un bonus d'initiative de " + arme.system.bonusInitiative)
|
||||
initiative.system.score += 1
|
||||
if (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
|
||||
}
|
||||
}
|
||||
if (initiative) {
|
||||
return initiative.system.score
|
||||
}
|
||||
ui.notifications.warn("Impossible de trouver la compétence Initiative pour l'acteur " + this.name)
|
||||
return -1;
|
||||
return initiative
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -699,7 +713,7 @@ export class TeDeumActor extends Actor {
|
||||
async rollDegatsArme(armeId) {
|
||||
let weapon = this.items.get(armeId)
|
||||
if (weapon) {
|
||||
let bDegats = 0
|
||||
let bDegats = { value: 0 }
|
||||
if (weapon.system.typeArme == "melee") {
|
||||
bDegats = this.getBonusDegats()
|
||||
}
|
||||
@@ -714,7 +728,7 @@ export class TeDeumActor extends Actor {
|
||||
rollData.degats = degatsRoll.total
|
||||
|
||||
let msg = await TeDeumUtility.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-degats-result.hbs`, rollData)
|
||||
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-degats-result.hbs`, rollData)
|
||||
})
|
||||
await msg.setFlag("world", "te-deum-rolldata", rollData)
|
||||
console.log("Rolldata result", rollData)
|
||||
|
||||
@@ -2,20 +2,44 @@ import { TeDeumUtility } from "../common/tedeum-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class TeDeumCombat extends Combat {
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||
//console.log("Roll INIT !")
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
for (let cId of ids) {
|
||||
const c = this.combatants.get(cId);
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore( this.id, cId ) : -1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: cId, initiative: initBonus } ]);
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore(this.id, cId) : -1;
|
||||
console.log("Init Bonus : ", c.name, initBonus)
|
||||
await this.updateEmbeddedDocuments("Combatant", [{ _id: cId, initiative: initBonus }]);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async modifyAction(combatantId, delta, isMainGauche = false) {
|
||||
let combatant = this.combatants.get(combatantId)
|
||||
if (!combatant) return;
|
||||
let ca = combatant.getFlag("world", "available-actions")
|
||||
if (!ca) {
|
||||
ca = { nbActions: 1, nbActionsMainGauche: 0 }
|
||||
}
|
||||
if (isMainGauche) {
|
||||
ca.nbActionsMainGauche += delta
|
||||
} else {
|
||||
ca.nbActions += delta
|
||||
}
|
||||
if (ca.nbActionsMainGauche < 0) ca.nbActionsMainGauche = 0
|
||||
if (ca.nbActions < 0) ca.nbActions = 0
|
||||
console.log("Modify Action : ", combatant.name, ca)
|
||||
if (game.user.isGM) {
|
||||
await TeDeumUtility.updateCombatantActions(combatant, ca)
|
||||
} else {
|
||||
game.socket.emit("system.fvtt-te-deum", { msg: "msg_modify_combat_action", data: { combatantId: combatantId, ca: ca } })
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async checkTurnPosition() {
|
||||
while (game.combat.turn > 0) {
|
||||
|
||||
@@ -59,11 +59,11 @@ export const TEDEUM_CONFIG = {
|
||||
},
|
||||
|
||||
ARME_PORTEES: {
|
||||
"brulepourpoint": { label: "Brûle-pourpoint", difficulty: "facile", id: "brulepourpoint" },
|
||||
"courte": { label: "Courte", difficulty: "pardefaut", id: "courte" },
|
||||
"moyenne": { label: "Moyenne", difficulty: "difficile", id: "moyenne" },
|
||||
"longue": { label: "Longue", difficulty: "perilleux", id: "longue" },
|
||||
"extreme": { label: "Extrême", difficulty: "desespere", id: "extreme" },
|
||||
"brulepourpoint": { label: "Brûle-pourpoint (5)", difficulty: "facile", id: "brulepourpoint" },
|
||||
"courte": { label: "Courte (7)", difficulty: "pardefaut", id: "courte" },
|
||||
"moyenne": { label: "Moyenne (11)", difficulty: "difficile", id: "moyenne" },
|
||||
"longue": { label: "Longue (13)", difficulty: "perilleux", id: "longue" },
|
||||
"extreme": { label: "Extrême (15)", difficulty: "desespere", id: "extreme" },
|
||||
},
|
||||
|
||||
genre: {
|
||||
@@ -168,13 +168,13 @@ export const TEDEUM_CONFIG = {
|
||||
},
|
||||
difficulte: {
|
||||
aucune: { label: "Aucune", key: "aucune", value: 0 },
|
||||
routine: { label: "Routine", key: "routine", value: 3 },
|
||||
facile: { label: "Facile", key: "facile", value: 5 },
|
||||
pardefaut: { label: "Par Défaut", key: "pardefaut", value: 7 },
|
||||
malaise: { label: "Malaisé", key: "malaise", value: 9 },
|
||||
difficile: { label: "Difficile", key: "difficile", value: 11 },
|
||||
perilleux: { label: "Perilleux", key: "perilleux", value: 13 },
|
||||
desespere: { label: "Désespéré", key: "desespere", value: 15 }
|
||||
routine: { label: "Routine (3)", key: "routine", value: 3 },
|
||||
facile: { label: "Facile (5)", key: "facile", value: 5 },
|
||||
pardefaut: { label: "Par Défaut (7)", key: "pardefaut", value: 7 },
|
||||
malaise: { label: "Malaisé (9)", key: "malaise", value: 9 },
|
||||
difficile: { label: "Difficile (11)", key: "difficile", value: 11 },
|
||||
perilleux: { label: "Perilleux (13)", key: "perilleux", value: 13 },
|
||||
desespere: { label: "Désespéré (15)", key: "desespere", value: 15 }
|
||||
},
|
||||
monnaie: {
|
||||
denier: { label: "Deniers", id: "denier", value: 1 },
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const ECRYME_WELCOME_MESSAGE_URL = "https://www.uberwald.me/gitea/public/fvtt-te-deum/raw/branch/main/welcome-message-tedeum.html"
|
||||
|
||||
export class TeDeumUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -12,7 +14,9 @@ export class TeDeumUtility {
|
||||
CONFIG.JournalEntry.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
|
||||
CONFIG.Macro.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
|
||||
CONFIG.Adventure.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp"
|
||||
}
|
||||
|
||||
static installHooks() {
|
||||
Hooks.on('renderChatLog', (log, html, data) => TeDeumUtility.chatListeners(html));
|
||||
|
||||
Hooks.on("renderActorDirectory", (app, html, data) => {
|
||||
@@ -28,7 +32,47 @@ export class TeDeumUtility {
|
||||
$(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) {
|
||||
if (game.user.isGM) {
|
||||
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})` })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -127,14 +171,25 @@ export class TeDeumUtility {
|
||||
/* -------------------------------------------- */
|
||||
static welcomeMessage() {
|
||||
if (game.user.isGM) {
|
||||
ChatMessage.create({
|
||||
user: game.user.id,
|
||||
whisper: [game.user.id],
|
||||
content: `<div id="chat-welcome welcome-message-tedeum"><span class="rdd-roll-part">
|
||||
<strong>Bienvenu dans Te Deum Pour Un Massacre !</strong>
|
||||
<div class="chat-welcome">Ce système vous est proposé par Open Sesame Games.<br>
|
||||
Vous trouverez de l'aide dans @UUID[Compendium.fvtt-te-deum.aides.JournalEntry.uNwJgi4kXBCiZmAH]{Aide pour Te Deum}<br>
|
||||
ainsi que sur le Discord de Foundry FR : https://discord.gg/pPSDNJk</div>` });
|
||||
// Try to fetch the welcome message from the github repo "welcome-message-ecryme.html"
|
||||
fetch(ECRYME_WELCOME_MESSAGE_URL)
|
||||
.then(response => response.text())
|
||||
.then(html => {
|
||||
console.log("Fetched welcome message:", html);
|
||||
ChatMessage.create({
|
||||
user: game.user.id,
|
||||
whisper: [game.user.id],
|
||||
content: html
|
||||
});
|
||||
})
|
||||
.catch(error => {
|
||||
console.error("Error fetching welcome message:", error);
|
||||
ChatMessage.create({
|
||||
user: game.user.id,
|
||||
whisper: [game.user.id],
|
||||
content: "<b>Bienvenue dans Ecryme RPG !</b><br>Visitez le site officiel pour plus d'informations."
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,7 +256,7 @@ export class TeDeumUtility {
|
||||
return actor
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */ /* -------------------------------------------- */
|
||||
/* -------------------------------------------- */
|
||||
static async manageOpposition(rollData) {
|
||||
if (!this.currentOpposition) {
|
||||
// Store rollData as current GM opposition
|
||||
@@ -210,12 +265,15 @@ export class TeDeumUtility {
|
||||
} else {
|
||||
// Perform the opposition
|
||||
let isAttackWinner = true
|
||||
let rWinner = this.currentOpposition
|
||||
let rLooser = rollData
|
||||
if (rWinner.total <= rLooser.total) {
|
||||
rWinner = rollData
|
||||
rLooser = this.currentOpposition
|
||||
let rWinner, rLooser
|
||||
if (this.currentOpposition.total <= rollData.total) {
|
||||
rWinner = foundry.utils.duplicate(rollData)
|
||||
rLooser = foundry.utils.duplicate(this.currentOpposition)
|
||||
isAttackWinner = false
|
||||
} else {
|
||||
rWinner = foundry.utils.duplicate(this.currentOpposition)
|
||||
rLooser = foundry.utils.duplicate(rollData)
|
||||
isAttackWinner = true
|
||||
}
|
||||
this.currentOpposition = undefined // Reset opposition
|
||||
let oppositionData = {
|
||||
@@ -247,7 +305,6 @@ export class TeDeumUtility {
|
||||
await this.appliquerDegats(rWinner)
|
||||
}
|
||||
|
||||
|
||||
console.log("Opposition result", rollData, isAttackWinner, oppositionData)
|
||||
}
|
||||
}
|
||||
@@ -258,7 +315,12 @@ export class TeDeumUtility {
|
||||
let defenderToken = canvas.tokens.placeables.find(t => t.id == rollData.defenderTokenId)
|
||||
if (defenderToken) {
|
||||
let actor = defenderToken.actor
|
||||
await actor.appliquerDegats(rollData)
|
||||
if (game.user.isGM || actor.isOwner) {
|
||||
await actor.appliquerDegats(rollData)
|
||||
} else {
|
||||
// Send a socket message
|
||||
game.socket.emit("system.fvtt-te-deum", { name: "msg_apply_damage", data: { 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)
|
||||
@@ -394,6 +456,28 @@ export class TeDeumUtility {
|
||||
chatMsg.setFlag("world", "tedeum-rolldata", rollData)
|
||||
}
|
||||
}
|
||||
if (msg.name == "msg_modify_combat_action") {
|
||||
if (game.user.isGM) {
|
||||
let { combatantId, ca } = msg.data
|
||||
let combatant = game.combat.combatants.get(combatantId)
|
||||
if (combatant) {
|
||||
console.log("sock - Modify Combat Action : ", combatant.name, ca)
|
||||
await TeDeumUtility.updateCombatantActions(combatant, ca)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (msg.name == "msg_apply_damage") {
|
||||
if (game.user.isGM) {
|
||||
let rollData = msg.data.rollData
|
||||
let defenderToken = canvas.tokens.placeables.find(t => t.id == rollData.defenderTokenId)
|
||||
if (defenderToken) {
|
||||
let actor = defenderToken.actor
|
||||
await actor.appliquerDegats(rollData)
|
||||
} else {
|
||||
ui.notifications.error("Impossible de trouver la cible de l'attaque, aucun degats appliqué")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -479,9 +563,11 @@ export class TeDeumUtility {
|
||||
}
|
||||
if (rollData.diceSum == 1) {
|
||||
let critiqueRoll = await new Roll(rollData.carac.negativeDice)
|
||||
rollData.isSuccess = false
|
||||
await critiqueRoll.evaluate()
|
||||
await this.showDiceSoNice(critiqueRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.critiqueRoll = foundry.utils.duplicate(critiqueRoll)
|
||||
rollData.critiqueTotal = critiqueRoll.total
|
||||
if (critiqueRoll.total > rollData.competence.system.score) {
|
||||
rollData.isEchecCritique = true
|
||||
}
|
||||
@@ -570,12 +656,51 @@ export class TeDeumUtility {
|
||||
await this.getLocalisation(rollData)
|
||||
// Now the degats
|
||||
let degatsRoll = await new Roll(rollData.arme.system.degats).roll()
|
||||
await this.showDiceSoNice(rollData.degatsRoll, game.settings.get("core", "rollMode"))
|
||||
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
||||
rollData.degats = degatsRoll.total
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async updateCombatantActions(combatant, ca) {
|
||||
await combatant.setFlag("world", "available-actions", ca)
|
||||
await combatant.update({ name: `${combatant.token.name} (${ca.nbActions} / ${ca.nbActionsMainGauche})` })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async manageCombatActions(actor, rollData) {
|
||||
let combat = game.combats.active
|
||||
if (!combat) return;
|
||||
let combatant = combat.getCombatantByActor(actor)
|
||||
if (!combatant) return;
|
||||
let ca = combatant.getFlag("world", "available-actions")
|
||||
if (!ca) return;
|
||||
if (rollData.mode == "arme" && rollData.isMainGauche) {
|
||||
if (ca.nbActionsMainGauche > 0) {
|
||||
ca.nbActionsMainGauche -= 1
|
||||
ca.nbActions = Math.max(ca.nbActions - 1, 0)
|
||||
} else {
|
||||
ui.notifications.error(`${actor.name} n'a plus d'actions disponibles à la main gauche pour ce round`)
|
||||
}
|
||||
}
|
||||
if (ca.nbActions > 0) {
|
||||
ca.nbActions -= 1
|
||||
} else {
|
||||
ui.notifications.error(`${actor.name} n'a plus d'actions disponibles pour ce round`)
|
||||
}
|
||||
console.log("Manage combat actions 1", actor.name, combatant)
|
||||
if (game.user.isGM) {
|
||||
await this.updateCombatantActions(combatant, ca)
|
||||
} else {
|
||||
// Send a socket message
|
||||
game.socket.emit("system.fvtt-te-deum", { name: "msg_modify_combat_action", data: { combatantId: combatant.id, ca } });
|
||||
}
|
||||
rollData.hasActions = true
|
||||
rollData.remainingActions = ca.nbActions
|
||||
rollData.remainingActionsMainGauche = ca.nbActionsMainGauche
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollTeDeum(rollData) {
|
||||
|
||||
@@ -585,8 +710,12 @@ export class TeDeumUtility {
|
||||
rollData.difficulty = "pardefaut"
|
||||
}
|
||||
rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value
|
||||
|
||||
// Compute the real competence score
|
||||
if (rollData.competence) {
|
||||
if (rollData.isMainGauche) {
|
||||
rollData.competence = actor.getMeilleureCompetenceMainGauche(rollData.competence)
|
||||
}
|
||||
if (rollData.competence.system.isBase) {
|
||||
rollData.compScore = actor.system.caracteristiques[rollData.competence.system.caracteristique].value
|
||||
} else {
|
||||
@@ -609,6 +738,8 @@ export class TeDeumUtility {
|
||||
|
||||
await this.processAttaqueDistance(rollData)
|
||||
|
||||
await this.manageCombatActions(actor, rollData)
|
||||
|
||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel {
|
||||
export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
const requiredInteger = { required: true, nullable: false, integer: true };
|
||||
const requiredDouble = { required: true, nullable: false, integer: false };
|
||||
const schema = {};
|
||||
|
||||
schema.typeArme = new fields.StringField({required: true, choices: ["melee", "tir"], initial: "melee"});
|
||||
schema.allonge = new fields.StringField({required: true, choices: ["courte", "moyenne", "longue", "treslongue"], initial: "courte"});
|
||||
schema.typeArme = new fields.StringField({ required: true, choices: ["melee", "tir"], initial: "melee" });
|
||||
schema.allonge = new fields.StringField({ required: true, choices: ["courte", "moyenne", "longue", "treslongue"], initial: "courte" });
|
||||
|
||||
schema.specificites = new fields.SchemaField(
|
||||
Object.values((game.system.tedeum.config.ARME_SPECIFICITE)).reduce((obj, spec) => {
|
||||
obj[spec.id] = new fields.SchemaField({
|
||||
hasSpec: new fields.BooleanField({initial: false}),
|
||||
hasSpec: new fields.BooleanField({ initial: false }),
|
||||
});
|
||||
return obj;
|
||||
}, {})
|
||||
@@ -26,35 +26,35 @@ export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel {
|
||||
}, {})
|
||||
);
|
||||
|
||||
schema.degatsArmure = new fields.SchemaField( {
|
||||
sansarmure : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
cuir : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
plates : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
mailles : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
schema.degatsArmure = new fields.SchemaField({
|
||||
sansarmure: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
cuir: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
plates: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
mailles: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
});
|
||||
|
||||
|
||||
schema.tempsRecharge = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 });
|
||||
schema.competenceRecharge = new fields.StringField({ required: false, choices:["aucune", "archerie", "arquebusade"], initial: "aucune", blank: true });
|
||||
schema.competenceRecharge = new fields.StringField({ required: false, choices: ["aucune", "archerie", "arquebusade"], initial: "aucune", blank: true });
|
||||
schema.valeurEchecCritique = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 });
|
||||
|
||||
schema.initiativeBonus = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 });
|
||||
schema.initiativeBonus = new fields.NumberField({ ...requiredInteger, initial: 0 });
|
||||
|
||||
schema.degats = new fields.StringField({ required: false, blank: true, initial: "0" });
|
||||
schema.degatscrosse = new fields.StringField({ required: false, blank: true, initial: "0" });
|
||||
|
||||
|
||||
let comp = []
|
||||
for (let key of Object.keys(game.system.tedeum.config.armeCompetences)) {
|
||||
comp.push(key);
|
||||
}
|
||||
schema.competence = new fields.StringField({ required: true, choices:comp, initial: "bagarre" });
|
||||
schema.competence2 = new fields.StringField({ required: false, choices:comp, initial: "", blank: true });
|
||||
schema.competence = new fields.StringField({ required: true, choices: comp, initial: "bagarre" });
|
||||
schema.competence2 = new fields.StringField({ required: false, choices: comp, initial: "", blank: true });
|
||||
|
||||
schema.prix = new fields.NumberField({ ...requiredDouble, initial: 0, min: 0 });
|
||||
schema.monnaie = new fields.StringField({ required: true, blank: false, initial: "denier" });
|
||||
|
||||
schema.equipe = new fields.BooleanField({initial: false}),
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, blank: true });
|
||||
|
||||
schema.equipe = new fields.BooleanField({ initial: false }),
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, blank: true });
|
||||
|
||||
return schema;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ export class TeDeumRollDialog extends Dialog {
|
||||
static async create(actor, rollData) {
|
||||
|
||||
let options = { classes: ["tedeum-roll-dialog"], width: 540, height: 'fit-content', 'z-index': 99999 }
|
||||
let html = await renderTemplate('systems/fvtt-te-deum/templates/dialogs/roll-dialog-generic.hbs', rollData);
|
||||
let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-te-deum/templates/dialogs/roll-dialog-generic.hbs', rollData);
|
||||
return new TeDeumRollDialog(actor, rollData, html, options);
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ export class TeDeumRollDialog extends Dialog {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async refreshDialog() {
|
||||
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/roll-dialog-generic.hbs", this.rollData)
|
||||
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/roll-dialog-generic.hbs", this.rollData)
|
||||
this.data.content = content
|
||||
this.render(true)
|
||||
}
|
||||
@@ -63,6 +63,9 @@ export class TeDeumRollDialog extends Dialog {
|
||||
html.find('#roll-allonge').change((event) => {
|
||||
this.rollData.allongeId = event.currentTarget.value
|
||||
})
|
||||
html.find('#roll-main-gauche').change((event) => {
|
||||
this.rollData.isMainGauche = event.currentTarget.checked
|
||||
})
|
||||
html.find('#roll-difficulty').change((event) => {
|
||||
this.rollData.difficulty = String(event.currentTarget.value) || "pardefaut"
|
||||
})
|
||||
|
||||
@@ -91,7 +91,7 @@ export class TeDeumItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||
payload: chatData,
|
||||
});
|
||||
|
||||
renderTemplate('systems/fvtt-te-deum/templates/post-item.html', chatData).then(html => {
|
||||
foundry.applications.handlebars.renderTemplate('systems/fvtt-te-deum/templates/post-item.html', chatData).then(html => {
|
||||
let chatOptions = TeDeumUtility.chatDataSetup(html);
|
||||
ChatMessage.create(chatOptions)
|
||||
});
|
||||
|
||||
@@ -90,6 +90,8 @@ Hooks.once("init", async function () {
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true });
|
||||
|
||||
TeDeumUtility.init()
|
||||
|
||||
TeDeumUtility.installHooks()
|
||||
});
|
||||
|
||||
|
||||
@@ -98,6 +100,7 @@ Hooks.once("init", async function () {
|
||||
/* -------------------------------------------- */
|
||||
Hooks.once("ready", function () {
|
||||
|
||||
|
||||
// User warning
|
||||
if (!game.user.isGM && game.user.character == undefined) {
|
||||
ui.notifications.info("Attention ! Aucun personnage relié au joueur !");
|
||||
@@ -107,10 +110,10 @@ Hooks.once("ready", function () {
|
||||
});
|
||||
}
|
||||
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter => {
|
||||
console.log("ClassCounter loaded", moduleCounter)
|
||||
moduleCounter.ClassCounter.registerUsageCount()
|
||||
}).catch(err=>
|
||||
}).catch(err =>
|
||||
console.log("No stats available, giving up.")
|
||||
)
|
||||
TeDeumUtility.ready();
|
||||
|
||||
21
package.json
Normal file
21
package.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "fvtt-te-deum",
|
||||
"version": "1.0.0",
|
||||
"description": "Système Te Deum pour FoundryVTT",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build:css": "gulp css",
|
||||
"watch:css": "gulp watch"
|
||||
},
|
||||
"devDependencies": {
|
||||
"gulp": "^4.0.2",
|
||||
"gulp-less": "^5.0.0",
|
||||
"less": "^4.2.0",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"gulp-postcss": "^9.0.1",
|
||||
"postcss": "^8.4.49"
|
||||
},
|
||||
"keywords": ["foundry-vtt", "te-deum"],
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
MANIFEST-000137
|
||||
MANIFEST-000214
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2025/09/18-17:25:25.945688 7f7f2affd6c0 Recovering log #134
|
||||
2025/09/18-17:25:25.962577 7f7f2affd6c0 Delete type=3 #132
|
||||
2025/09/18-17:25:25.962629 7f7f2affd6c0 Delete type=0 #134
|
||||
2025/09/18-17:25:58.096205 7f7f29bff6c0 Level-0 table #140: started
|
||||
2025/09/18-17:25:58.096281 7f7f29bff6c0 Level-0 table #140: 0 bytes OK
|
||||
2025/09/18-17:25:58.103314 7f7f29bff6c0 Delete type=0 #138
|
||||
2025/09/18-17:25:58.103571 7f7f29bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||
2026/01/04-21:26:37.933804 7f93eb7fe6c0 Recovering log #212
|
||||
2026/01/04-21:26:37.943801 7f93eb7fe6c0 Delete type=3 #210
|
||||
2026/01/04-21:26:37.943854 7f93eb7fe6c0 Delete type=0 #212
|
||||
2026/01/04-21:27:02.505234 7f93e9ffb6c0 Level-0 table #217: started
|
||||
2026/01/04-21:27:02.505262 7f93e9ffb6c0 Level-0 table #217: 0 bytes OK
|
||||
2026/01/04-21:27:02.512734 7f93e9ffb6c0 Delete type=0 #215
|
||||
2026/01/04-21:27:02.512909 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
2025/09/18-11:50:45.746719 7f7f2bfff6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:09.744265 7f7f29bff6c0 Level-0 table #135: started
|
||||
2025/09/18-17:24:09.744308 7f7f29bff6c0 Level-0 table #135: 0 bytes OK
|
||||
2025/09/18-17:24:09.802551 7f7f29bff6c0 Delete type=0 #133
|
||||
2025/09/18-17:24:09.802767 7f7f29bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 25 : 1
|
||||
2025/09/18-17:24:09.802780 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:09.830358 7f7f29bff6c0 Generated table #136@0: 5 keys, 3728 bytes
|
||||
2025/09/18-17:24:09.830408 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 3728 bytes
|
||||
2025/09/18-17:24:09.891222 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:09.891483 7f7f29bff6c0 Delete type=2 #103
|
||||
2025/09/18-17:24:10.130709 7f7f29bff6c0 Manual compaction at level-0 from '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 25 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||
2025/12/20-18:12:56.443928 7f244d1ff6c0 Recovering log #208
|
||||
2025/12/20-18:12:56.494058 7f244d1ff6c0 Delete type=3 #206
|
||||
2025/12/20-18:12:56.494134 7f244d1ff6c0 Delete type=0 #208
|
||||
2025/12/20-18:36:44.261828 7f2436ffd6c0 Level-0 table #213: started
|
||||
2025/12/20-18:36:44.261865 7f2436ffd6c0 Level-0 table #213: 0 bytes OK
|
||||
2025/12/20-18:36:44.320648 7f2436ffd6c0 Delete type=0 #211
|
||||
2025/12/20-18:36:44.320833 7f2436ffd6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
BIN
packs/aides/MANIFEST-000214
Normal file
BIN
packs/aides/MANIFEST-000214
Normal file
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000240
|
||||
MANIFEST-000317
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2025/09/18-17:25:25.808742 7f7f2bfff6c0 Recovering log #237
|
||||
2025/09/18-17:25:25.826162 7f7f2bfff6c0 Delete type=3 #235
|
||||
2025/09/18-17:25:25.826217 7f7f2bfff6c0 Delete type=0 #237
|
||||
2025/09/18-17:25:58.034192 7f7f29bff6c0 Level-0 table #243: started
|
||||
2025/09/18-17:25:58.034230 7f7f29bff6c0 Level-0 table #243: 0 bytes OK
|
||||
2025/09/18-17:25:58.040524 7f7f29bff6c0 Delete type=0 #241
|
||||
2025/09/18-17:25:58.047737 7f7f29bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
||||
2026/01/04-21:26:37.828637 7f93eb7fe6c0 Recovering log #315
|
||||
2026/01/04-21:26:37.839103 7f93eb7fe6c0 Delete type=3 #313
|
||||
2026/01/04-21:26:37.839200 7f93eb7fe6c0 Delete type=0 #315
|
||||
2026/01/04-21:27:02.452079 7f93e9ffb6c0 Level-0 table #320: started
|
||||
2026/01/04-21:27:02.452098 7f93e9ffb6c0 Level-0 table #320: 0 bytes OK
|
||||
2026/01/04-21:27:02.458511 7f93e9ffb6c0 Delete type=0 #318
|
||||
2026/01/04-21:27:02.458741 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
2025/09/18-11:50:45.598190 7f7f2a7fc6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.419689 7f7f29bff6c0 Level-0 table #238: started
|
||||
2025/09/18-17:24:08.419727 7f7f29bff6c0 Level-0 table #238: 0 bytes OK
|
||||
2025/09/18-17:24:08.484925 7f7f29bff6c0 Delete type=0 #236
|
||||
2025/09/18-17:24:08.766692 7f7f29bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at '!items!wxIHkrq98eQ3cOvp' @ 73 : 1
|
||||
2025/09/18-17:24:08.766704 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:08.800723 7f7f29bff6c0 Generated table #239@0: 38 keys, 31247 bytes
|
||||
2025/09/18-17:24:08.800756 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 31247 bytes
|
||||
2025/09/18-17:24:08.859553 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:08.859745 7f7f29bff6c0 Delete type=2 #206
|
||||
2025/09/18-17:24:08.860015 7f7f29bff6c0 Manual compaction at level-0 from '!items!wxIHkrq98eQ3cOvp' @ 73 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
|
||||
2025/12/20-18:12:56.039187 7f244d1ff6c0 Recovering log #311
|
||||
2025/12/20-18:12:56.089963 7f244d1ff6c0 Delete type=3 #309
|
||||
2025/12/20-18:12:56.090033 7f244d1ff6c0 Delete type=0 #311
|
||||
2025/12/20-18:36:43.701277 7f2436ffd6c0 Level-0 table #316: started
|
||||
2025/12/20-18:36:43.701303 7f2436ffd6c0 Level-0 table #316: 0 bytes OK
|
||||
2025/12/20-18:36:43.756264 7f2436ffd6c0 Delete type=0 #314
|
||||
2025/12/20-18:36:43.812180 7f2436ffd6c0 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-000317
Normal file
BIN
packs/armes/MANIFEST-000317
Normal file
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000239
|
||||
MANIFEST-000317
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2025/09/18-17:25:25.829687 7f7f2a7fc6c0 Recovering log #236
|
||||
2025/09/18-17:25:25.846790 7f7f2a7fc6c0 Delete type=3 #234
|
||||
2025/09/18-17:25:25.846846 7f7f2a7fc6c0 Delete type=0 #236
|
||||
2025/09/18-17:25:58.026302 7f7f29bff6c0 Level-0 table #242: started
|
||||
2025/09/18-17:25:58.026357 7f7f29bff6c0 Level-0 table #242: 0 bytes OK
|
||||
2025/09/18-17:25:58.034035 7f7f29bff6c0 Delete type=0 #240
|
||||
2025/09/18-17:25:58.047715 7f7f29bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
||||
2026/01/04-21:26:37.843261 7f93ea7fc6c0 Recovering log #315
|
||||
2026/01/04-21:26:37.853735 7f93ea7fc6c0 Delete type=3 #313
|
||||
2026/01/04-21:26:37.853805 7f93ea7fc6c0 Delete type=0 #315
|
||||
2026/01/04-21:27:02.446245 7f93e9ffb6c0 Level-0 table #320: started
|
||||
2026/01/04-21:27:02.446262 7f93e9ffb6c0 Level-0 table #320: 0 bytes OK
|
||||
2026/01/04-21:27:02.452006 7f93e9ffb6c0 Delete type=0 #318
|
||||
2026/01/04-21:27:02.458726 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
2025/09/18-11:50:45.617997 7f7f2a7fc6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.294497 7f7f29bff6c0 Level-0 table #237: started
|
||||
2025/09/18-17:24:08.294539 7f7f29bff6c0 Level-0 table #237: 0 bytes OK
|
||||
2025/09/18-17:24:08.351872 7f7f29bff6c0 Delete type=0 #235
|
||||
2025/09/18-17:24:08.582142 7f7f29bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at '!items!ufvhWG5V8pX0qrtR' @ 54 : 1
|
||||
2025/09/18-17:24:08.582154 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:08.616167 7f7f29bff6c0 Generated table #238@0: 29 keys, 12111 bytes
|
||||
2025/09/18-17:24:08.616198 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 12111 bytes
|
||||
2025/09/18-17:24:08.671918 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:08.672212 7f7f29bff6c0 Delete type=2 #205
|
||||
2025/09/18-17:24:08.859972 7f7f29bff6c0 Manual compaction at level-0 from '!items!ufvhWG5V8pX0qrtR' @ 54 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
|
||||
2025/12/20-18:12:56.095054 7f24377fe6c0 Recovering log #311
|
||||
2025/12/20-18:12:56.148579 7f24377fe6c0 Delete type=3 #309
|
||||
2025/12/20-18:12:56.148653 7f24377fe6c0 Delete type=0 #311
|
||||
2025/12/20-18:36:43.637340 7f2436ffd6c0 Level-0 table #316: started
|
||||
2025/12/20-18:36:43.637367 7f2436ffd6c0 Level-0 table #316: 0 bytes OK
|
||||
2025/12/20-18:36:43.701178 7f2436ffd6c0 Delete type=0 #314
|
||||
2025/12/20-18:36:43.812170 7f2436ffd6c0 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-000317
Normal file
BIN
packs/armures/MANIFEST-000317
Normal file
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000238
|
||||
MANIFEST-000315
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2025/09/18-17:25:25.789090 7f7f2b7fe6c0 Recovering log #235
|
||||
2025/09/18-17:25:25.805571 7f7f2b7fe6c0 Delete type=3 #233
|
||||
2025/09/18-17:25:25.805686 7f7f2b7fe6c0 Delete type=0 #235
|
||||
2025/09/18-17:25:58.040659 7f7f29bff6c0 Level-0 table #241: started
|
||||
2025/09/18-17:25:58.040687 7f7f29bff6c0 Level-0 table #241: 0 bytes OK
|
||||
2025/09/18-17:25:58.047473 7f7f29bff6c0 Delete type=0 #239
|
||||
2025/09/18-17:25:58.047759 7f7f29bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
||||
2026/01/04-21:26:37.813752 7f93eaffd6c0 Recovering log #313
|
||||
2026/01/04-21:26:37.823461 7f93eaffd6c0 Delete type=3 #311
|
||||
2026/01/04-21:26:37.823509 7f93eaffd6c0 Delete type=0 #313
|
||||
2026/01/04-21:27:02.440062 7f93e9ffb6c0 Level-0 table #318: started
|
||||
2026/01/04-21:27:02.440091 7f93e9ffb6c0 Level-0 table #318: 0 bytes OK
|
||||
2026/01/04-21:27:02.446167 7f93e9ffb6c0 Delete type=0 #316
|
||||
2026/01/04-21:27:02.458712 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
2025/09/18-11:50:45.576078 7f7f2affd6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.352040 7f7f29bff6c0 Level-0 table #236: started
|
||||
2025/09/18-17:24:08.352081 7f7f29bff6c0 Level-0 table #236: 0 bytes OK
|
||||
2025/09/18-17:24:08.419524 7f7f29bff6c0 Delete type=0 #234
|
||||
2025/09/18-17:24:08.672479 7f7f29bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at '!items!yx4k7lQHGcom99mk' @ 237 : 1
|
||||
2025/09/18-17:24:08.672498 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:08.706074 7f7f29bff6c0 Generated table #237@0: 115 keys, 38139 bytes
|
||||
2025/09/18-17:24:08.706156 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 38139 bytes
|
||||
2025/09/18-17:24:08.766397 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:08.766527 7f7f29bff6c0 Delete type=2 #231
|
||||
2025/09/18-17:24:08.859995 7f7f29bff6c0 Manual compaction at level-0 from '!items!yx4k7lQHGcom99mk' @ 237 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
|
||||
2025/12/20-18:12:55.979585 7f244c9fe6c0 Recovering log #309
|
||||
2025/12/20-18:12:56.031769 7f244c9fe6c0 Delete type=3 #307
|
||||
2025/12/20-18:12:56.031837 7f244c9fe6c0 Delete type=0 #309
|
||||
2025/12/20-18:36:43.574310 7f2436ffd6c0 Level-0 table #314: started
|
||||
2025/12/20-18:36:43.574360 7f2436ffd6c0 Level-0 table #314: 0 bytes OK
|
||||
2025/12/20-18:36:43.637222 7f2436ffd6c0 Delete type=0 #312
|
||||
2025/12/20-18:36:43.812158 7f2436ffd6c0 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-000315
Normal file
BIN
packs/competences/MANIFEST-000315
Normal file
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000249
|
||||
MANIFEST-000327
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2025/09/18-17:25:25.849643 7f7f2affd6c0 Recovering log #246
|
||||
2025/09/18-17:25:25.865539 7f7f2affd6c0 Delete type=3 #244
|
||||
2025/09/18-17:25:25.865600 7f7f2affd6c0 Delete type=0 #246
|
||||
2025/09/18-17:25:58.061760 7f7f29bff6c0 Level-0 table #252: started
|
||||
2025/09/18-17:25:58.061807 7f7f29bff6c0 Level-0 table #252: 0 bytes OK
|
||||
2025/09/18-17:25:58.069452 7f7f29bff6c0 Delete type=0 #250
|
||||
2025/09/18-17:25:58.076019 7f7f29bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
||||
2026/01/04-21:26:37.858384 7f93eaffd6c0 Recovering log #325
|
||||
2026/01/04-21:26:37.868673 7f93eaffd6c0 Delete type=3 #323
|
||||
2026/01/04-21:26:37.868726 7f93eaffd6c0 Delete type=0 #325
|
||||
2026/01/04-21:27:02.458878 7f93e9ffb6c0 Level-0 table #330: started
|
||||
2026/01/04-21:27:02.458920 7f93e9ffb6c0 Level-0 table #330: 0 bytes OK
|
||||
2026/01/04-21:27:02.465606 7f93e9ffb6c0 Delete type=0 #328
|
||||
2026/01/04-21:27:02.485393 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
2025/09/18-11:50:45.638850 7f7f2bfff6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.232941 7f7f29bff6c0 Level-0 table #247: started
|
||||
2025/09/18-17:24:08.233014 7f7f29bff6c0 Level-0 table #247: 0 bytes OK
|
||||
2025/09/18-17:24:08.294274 7f7f29bff6c0 Delete type=0 #245
|
||||
2025/09/18-17:24:08.485079 7f7f29bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at '!items!zGlRtP7zSnkjuuue' @ 510 : 1
|
||||
2025/09/18-17:24:08.485093 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:08.521894 7f7f29bff6c0 Generated table #248@0: 71 keys, 264331 bytes
|
||||
2025/09/18-17:24:08.521971 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 264331 bytes
|
||||
2025/09/18-17:24:08.581818 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:08.581947 7f7f29bff6c0 Delete type=2 #231
|
||||
2025/09/18-17:24:08.859951 7f7f29bff6c0 Manual compaction at level-0 from '!items!zGlRtP7zSnkjuuue' @ 510 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
|
||||
2025/12/20-18:12:56.154781 7f244c9fe6c0 Recovering log #321
|
||||
2025/12/20-18:12:56.203650 7f244c9fe6c0 Delete type=3 #319
|
||||
2025/12/20-18:12:56.206209 7f244c9fe6c0 Delete type=0 #321
|
||||
2025/12/20-18:36:43.812286 7f2436ffd6c0 Level-0 table #326: started
|
||||
2025/12/20-18:36:43.812329 7f2436ffd6c0 Level-0 table #326: 0 bytes OK
|
||||
2025/12/20-18:36:43.867818 7f2436ffd6c0 Delete type=0 #324
|
||||
2025/12/20-18:36:44.048015 7f2436ffd6c0 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-000327
Normal file
BIN
packs/education/MANIFEST-000327
Normal file
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000239
|
||||
MANIFEST-000316
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2025/09/18-17:25:25.869600 7f7f2b7fe6c0 Recovering log #236
|
||||
2025/09/18-17:25:25.884627 7f7f2b7fe6c0 Delete type=3 #234
|
||||
2025/09/18-17:25:25.884728 7f7f2b7fe6c0 Delete type=0 #236
|
||||
2025/09/18-17:25:58.019852 7f7f29bff6c0 Level-0 table #242: started
|
||||
2025/09/18-17:25:58.019893 7f7f29bff6c0 Level-0 table #242: 0 bytes OK
|
||||
2025/09/18-17:25:58.026069 7f7f29bff6c0 Delete type=0 #240
|
||||
2025/09/18-17:25:58.047683 7f7f29bff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
|
||||
2026/01/04-21:26:37.873703 7f93ebfff6c0 Recovering log #314
|
||||
2026/01/04-21:26:37.885324 7f93ebfff6c0 Delete type=3 #312
|
||||
2026/01/04-21:26:37.885427 7f93ebfff6c0 Delete type=0 #314
|
||||
2026/01/04-21:27:02.433342 7f93e9ffb6c0 Level-0 table #319: started
|
||||
2026/01/04-21:27:02.433382 7f93e9ffb6c0 Level-0 table #319: 0 bytes OK
|
||||
2026/01/04-21:27:02.439918 7f93e9ffb6c0 Delete type=0 #317
|
||||
2026/01/04-21:27:02.458692 7f93e9ffb6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
2025/09/18-11:50:45.661051 7f7f2b7fe6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.860133 7f7f29bff6c0 Level-0 table #237: started
|
||||
2025/09/18-17:24:08.860169 7f7f29bff6c0 Level-0 table #237: 0 bytes OK
|
||||
2025/09/18-17:24:08.917842 7f7f29bff6c0 Delete type=0 #235
|
||||
2025/09/18-17:24:09.119729 7f7f29bff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at '!items!zUYIVOuFpRur9aAR' @ 109 : 1
|
||||
2025/09/18-17:24:09.119743 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:09.155742 7f7f29bff6c0 Generated table #238@0: 49 keys, 20052 bytes
|
||||
2025/09/18-17:24:09.155788 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 20052 bytes
|
||||
2025/09/18-17:24:09.214820 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:09.214942 7f7f29bff6c0 Delete type=2 #205
|
||||
2025/09/18-17:24:09.499501 7f7f29bff6c0 Manual compaction at level-0 from '!items!zUYIVOuFpRur9aAR' @ 109 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
|
||||
2025/12/20-18:12:56.214726 7f2437fff6c0 Recovering log #310
|
||||
2025/12/20-18:12:56.267981 7f2437fff6c0 Delete type=3 #308
|
||||
2025/12/20-18:12:56.268051 7f2437fff6c0 Delete type=0 #310
|
||||
2025/12/20-18:36:43.756462 7f2436ffd6c0 Level-0 table #315: started
|
||||
2025/12/20-18:36:43.756507 7f2436ffd6c0 Level-0 table #315: 0 bytes OK
|
||||
2025/12/20-18:36:43.812023 7f2436ffd6c0 Delete type=0 #313
|
||||
2025/12/20-18:36:43.812190 7f2436ffd6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
BIN
packs/graces/MANIFEST-000316
Normal file
BIN
packs/graces/MANIFEST-000316
Normal file
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000239
|
||||
MANIFEST-000316
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2025/09/18-17:25:25.887557 7f7f2a7fc6c0 Recovering log #236
|
||||
2025/09/18-17:25:25.903745 7f7f2a7fc6c0 Delete type=3 #234
|
||||
2025/09/18-17:25:25.903805 7f7f2a7fc6c0 Delete type=0 #236
|
||||
2025/09/18-17:25:58.055681 7f7f29bff6c0 Level-0 table #242: started
|
||||
2025/09/18-17:25:58.055706 7f7f29bff6c0 Level-0 table #242: 0 bytes OK
|
||||
2025/09/18-17:25:58.061636 7f7f29bff6c0 Delete type=0 #240
|
||||
2025/09/18-17:25:58.076006 7f7f29bff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)
|
||||
2026/01/04-21:26:37.889654 7f93ea7fc6c0 Recovering log #314
|
||||
2026/01/04-21:26:37.899518 7f93ea7fc6c0 Delete type=3 #312
|
||||
2026/01/04-21:26:37.899583 7f93ea7fc6c0 Delete type=0 #314
|
||||
2026/01/04-21:27:02.472063 7f93e9ffb6c0 Level-0 table #319: started
|
||||
2026/01/04-21:27:02.472086 7f93e9ffb6c0 Level-0 table #319: 0 bytes OK
|
||||
2026/01/04-21:27:02.478114 7f93e9ffb6c0 Delete type=0 #317
|
||||
2026/01/04-21:27:02.485430 7f93e9ffb6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
2025/09/18-11:50:45.681692 7f7f2affd6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.917988 7f7f29bff6c0 Level-0 table #237: started
|
||||
2025/09/18-17:24:08.918018 7f7f29bff6c0 Level-0 table #237: 0 bytes OK
|
||||
2025/09/18-17:24:08.983600 7f7f29bff6c0 Delete type=0 #235
|
||||
2025/09/18-17:24:09.215118 7f7f29bff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at '!items!ysGehYm1VkMWrI22' @ 71 : 1
|
||||
2025/09/18-17:24:09.215131 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:09.251613 7f7f29bff6c0 Generated table #238@0: 17 keys, 11517 bytes
|
||||
2025/09/18-17:24:09.251694 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 11517 bytes
|
||||
2025/09/18-17:24:09.305026 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:09.305314 7f7f29bff6c0 Delete type=2 #205
|
||||
2025/09/18-17:24:09.499516 7f7f29bff6c0 Manual compaction at level-0 from '!items!ysGehYm1VkMWrI22' @ 71 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)
|
||||
2025/12/20-18:12:56.274845 7f24377fe6c0 Recovering log #310
|
||||
2025/12/20-18:12:56.318675 7f24377fe6c0 Delete type=3 #308
|
||||
2025/12/20-18:12:56.318757 7f24377fe6c0 Delete type=0 #310
|
||||
2025/12/20-18:36:43.935645 7f2436ffd6c0 Level-0 table #315: started
|
||||
2025/12/20-18:36:43.935673 7f2436ffd6c0 Level-0 table #315: 0 bytes OK
|
||||
2025/12/20-18:36:43.994623 7f2436ffd6c0 Delete type=0 #313
|
||||
2025/12/20-18:36:44.048051 7f2436ffd6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
BIN
packs/maladies/MANIFEST-000316
Normal file
BIN
packs/maladies/MANIFEST-000316
Normal file
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000176
|
||||
MANIFEST-000253
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2025/09/18-17:25:25.926154 7f7f2b7fe6c0 Recovering log #173
|
||||
2025/09/18-17:25:25.941736 7f7f2b7fe6c0 Delete type=3 #171
|
||||
2025/09/18-17:25:25.941811 7f7f2b7fe6c0 Delete type=0 #173
|
||||
2025/09/18-17:25:58.069595 7f7f29bff6c0 Level-0 table #179: started
|
||||
2025/09/18-17:25:58.069627 7f7f29bff6c0 Level-0 table #179: 0 bytes OK
|
||||
2025/09/18-17:25:58.075769 7f7f29bff6c0 Delete type=0 #177
|
||||
2025/09/18-17:25:58.076032 7f7f29bff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)
|
||||
2026/01/04-21:26:37.919630 7f93ebfff6c0 Recovering log #251
|
||||
2026/01/04-21:26:37.930006 7f93ebfff6c0 Delete type=3 #249
|
||||
2026/01/04-21:26:37.930066 7f93ebfff6c0 Delete type=0 #251
|
||||
2026/01/04-21:27:02.478265 7f93e9ffb6c0 Level-0 table #256: started
|
||||
2026/01/04-21:27:02.478296 7f93e9ffb6c0 Level-0 table #256: 0 bytes OK
|
||||
2026/01/04-21:27:02.485146 7f93e9ffb6c0 Delete type=0 #254
|
||||
2026/01/04-21:27:02.485444 7f93e9ffb6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
2025/09/18-11:50:45.725670 7f7f2a7fc6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:09.049574 7f7f29bff6c0 Level-0 table #174: started
|
||||
2025/09/18-17:24:09.049607 7f7f29bff6c0 Level-0 table #174: 0 bytes OK
|
||||
2025/09/18-17:24:09.119551 7f7f29bff6c0 Delete type=0 #172
|
||||
2025/09/18-17:24:09.404507 7f7f29bff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at '!scenes!FJXugdbkBpEJEdR6' @ 5 : 1
|
||||
2025/09/18-17:24:09.404524 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:09.434413 7f7f29bff6c0 Generated table #175@0: 1 keys, 1344 bytes
|
||||
2025/09/18-17:24:09.434448 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 1344 bytes
|
||||
2025/09/18-17:24:09.499220 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:09.499350 7f7f29bff6c0 Delete type=2 #142
|
||||
2025/09/18-17:24:09.499541 7f7f29bff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 5 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)
|
||||
2025/12/20-18:12:56.387036 7f2437fff6c0 Recovering log #247
|
||||
2025/12/20-18:12:56.440877 7f2437fff6c0 Delete type=3 #245
|
||||
2025/12/20-18:12:56.440965 7f2437fff6c0 Delete type=0 #247
|
||||
2025/12/20-18:36:43.994753 7f2436ffd6c0 Level-0 table #252: started
|
||||
2025/12/20-18:36:43.994783 7f2436ffd6c0 Level-0 table #252: 0 bytes OK
|
||||
2025/12/20-18:36:44.047877 7f2436ffd6c0 Delete type=0 #250
|
||||
2025/12/20-18:36:44.048061 7f2436ffd6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
BIN
packs/scenes/MANIFEST-000253
Normal file
BIN
packs/scenes/MANIFEST-000253
Normal file
Binary file not shown.
@@ -1 +1 @@
|
||||
MANIFEST-000240
|
||||
MANIFEST-000317
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
2025/09/18-17:25:25.906336 7f7f2bfff6c0 Recovering log #237
|
||||
2025/09/18-17:25:25.922455 7f7f2bfff6c0 Delete type=3 #235
|
||||
2025/09/18-17:25:25.922542 7f7f2bfff6c0 Delete type=0 #237
|
||||
2025/09/18-17:25:58.047930 7f7f29bff6c0 Level-0 table #243: started
|
||||
2025/09/18-17:25:58.048063 7f7f29bff6c0 Level-0 table #243: 0 bytes OK
|
||||
2025/09/18-17:25:58.055551 7f7f29bff6c0 Delete type=0 #241
|
||||
2025/09/18-17:25:58.075985 7f7f29bff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)
|
||||
2026/01/04-21:26:37.904069 7f93eaffd6c0 Recovering log #315
|
||||
2026/01/04-21:26:37.914574 7f93eaffd6c0 Delete type=3 #313
|
||||
2026/01/04-21:26:37.914647 7f93eaffd6c0 Delete type=0 #315
|
||||
2026/01/04-21:27:02.465731 7f93e9ffb6c0 Level-0 table #320: started
|
||||
2026/01/04-21:27:02.465755 7f93e9ffb6c0 Level-0 table #320: 0 bytes OK
|
||||
2026/01/04-21:27:02.471938 7f93e9ffb6c0 Delete type=0 #318
|
||||
2026/01/04-21:27:02.485413 7f93e9ffb6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
2025/09/18-11:50:45.701807 7f7f2a7fc6c0 Delete type=3 #1
|
||||
2025/09/18-17:24:08.983751 7f7f29bff6c0 Level-0 table #238: started
|
||||
2025/09/18-17:24:08.983779 7f7f29bff6c0 Level-0 table #238: 0 bytes OK
|
||||
2025/09/18-17:24:09.049421 7f7f29bff6c0 Delete type=0 #236
|
||||
2025/09/18-17:24:09.305611 7f7f29bff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at '!items!zs67k4sxCid6oTK3' @ 80 : 1
|
||||
2025/09/18-17:24:09.305631 7f7f29bff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/09/18-17:24:09.339316 7f7f29bff6c0 Generated table #239@0: 36 keys, 20892 bytes
|
||||
2025/09/18-17:24:09.339411 7f7f29bff6c0 Compacted 1@0 + 0@1 files => 20892 bytes
|
||||
2025/09/18-17:24:09.404093 7f7f29bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/09/18-17:24:09.404255 7f7f29bff6c0 Delete type=2 #218
|
||||
2025/09/18-17:24:09.499531 7f7f29bff6c0 Manual compaction at level-0 from '!items!zs67k4sxCid6oTK3' @ 80 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)
|
||||
2025/12/20-18:12:56.325650 7f244c9fe6c0 Recovering log #311
|
||||
2025/12/20-18:12:56.379165 7f244c9fe6c0 Delete type=3 #309
|
||||
2025/12/20-18:12:56.379237 7f244c9fe6c0 Delete type=0 #311
|
||||
2025/12/20-18:36:43.867925 7f2436ffd6c0 Level-0 table #316: started
|
||||
2025/12/20-18:36:43.867945 7f2436ffd6c0 Level-0 table #316: 0 bytes OK
|
||||
2025/12/20-18:36:43.935523 7f2436ffd6c0 Delete type=0 #314
|
||||
2025/12/20-18:36:44.048037 7f2436ffd6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end)
|
||||
|
||||
Binary file not shown.
BIN
packs/simples/MANIFEST-000317
Normal file
BIN
packs/simples/MANIFEST-000317
Normal file
Binary file not shown.
1299
postcss/tedeum.css
1299
postcss/tedeum.css
File diff suppressed because it is too large
Load Diff
1931
styles/tedeum.css
1931
styles/tedeum.css
File diff suppressed because it is too large
Load Diff
@@ -148,8 +148,8 @@
|
||||
],
|
||||
"title": "Te Deum pour Un Massacre, le Jeu de Rôles (Officiel)",
|
||||
"url": "https://www.uberwald.me/gitea/public/fvtt-te-deum",
|
||||
"version": "13.0.1",
|
||||
"download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/13.0.1/fvtt-te-deum-13.0.1.zip",
|
||||
"version": "13.0.2",
|
||||
"download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/13.0.1/fvtt-te-deum-13.0.2.zip",
|
||||
"background": "systems/fvtt-te-deum/images/ui/tdeum_welcome_page_01.webp",
|
||||
"flags": {
|
||||
"hotReload": {
|
||||
|
||||
@@ -238,7 +238,11 @@
|
||||
</label>
|
||||
<span> </span>
|
||||
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
|
||||
{{#if comp.system.isBase}}
|
||||
<span class="item-control"><i class="fa-solid fa-trash-slash"></i></span>
|
||||
{{else}}
|
||||
<a class="item-control item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
||||
{{/if}}
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
@@ -1,93 +1,110 @@
|
||||
<div class="chat-message-header">
|
||||
{{#if actorImg}}
|
||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
||||
{{/if}}
|
||||
<h4 class="chat-actor-name">{{alias}}</h4>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="chat-roll-details" style="margin-top: 0.3rem;">
|
||||
{{#if img}}
|
||||
<div style="text-align: center; margin-bottom: 0.3rem;">
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if img}}
|
||||
<div>
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="chat-info-badge" style="margin-bottom: 0.4rem;">
|
||||
<strong>{{alias}}</strong>
|
||||
attaque
|
||||
<strong>{{defenderName}}</strong>
|
||||
</div>
|
||||
|
||||
<div class="flexcol">
|
||||
</div>
|
||||
<ul style="margin: 0; padding-left: 0.5rem;">
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
{{#if arme}}
|
||||
<label class="chat-weapon-name">Dégats {{arme.name}} : {{degats}} ({{degatsFormula}})</label>
|
||||
<li style="margin: 0.2rem 0;"><span class="chat-info-badge">Dégâts
|
||||
{{arme.name}}
|
||||
:
|
||||
{{degats}}
|
||||
({{degatsFormula}})</span></li>
|
||||
{{/if}}
|
||||
{{#if loc}}
|
||||
<li>Localisation : {{loc.label}}</li>
|
||||
<li>Touché : {{touche}}</li>
|
||||
<li style="margin: 0.2rem 0;"><span
|
||||
class="chat-difficulty-badge"
|
||||
>Localisation : {{loc.label}}</span></li>
|
||||
<li style="margin: 0.2rem 0;">Touché : {{touche}}</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if gantelet}}
|
||||
<li>Poing avec gantelet: +1 dégat</li>
|
||||
<li>Poing avec gantelet: +1 dégat</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if isChargeAPied}}
|
||||
<li>Charge à pied (+Course)</li>
|
||||
<li>Charge à pied (+Course)</li>
|
||||
{{/if}}
|
||||
{{#if isChargeACheval}}
|
||||
<li>Charge à cheval (+Equitation)</li>
|
||||
<li>Charge à cheval (+Equitation)</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if isReussiteCritique}}
|
||||
<li><strong class="chat-result-success">Réussite critique : La blessure a été augmentée d'un niveau</strong></li>
|
||||
<li style="margin: 0.3rem 0;"><span class="chat-result-success">🎯
|
||||
Réussite critique : La blessure a été augmentée d'un niveau</span></li>
|
||||
{{/if}}
|
||||
{{#if blessure}}
|
||||
<li>{{defenderName}} a subi une blessure!</li>
|
||||
<li>Gravité : {{blessure.name}}</li>
|
||||
<li style="margin: 0.3rem 0;"><span class="chat-warning-badge">⚔️
|
||||
{{defenderName}}
|
||||
a subi une blessure!</span></li>
|
||||
<li style="margin: 0.2rem 0;"><strong>Gravité :
|
||||
{{blessure.name}}</strong></li>
|
||||
|
||||
{{#if (eq loc.categorie "tete")}}
|
||||
{{#if (gt blessure.system.value 0)}}
|
||||
<li style="margin: 0.3rem 0;"><span class="chat-result-failure">💥
|
||||
{{defenderName}}
|
||||
doit réussir un test d'Endurance de difficulté 7 ou être assommé</span></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq loc.categorie "tete")}}
|
||||
{{#if (gt blessure.system.value 0)}}
|
||||
<li><strong class="chat-result-warning">{{alias}} doit réussir un test d'Endurance de difficulté 7 ou être
|
||||
assomé</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{#if (eq loc.categorie "bras")}}
|
||||
{{#if (gt blessure.system.value 2)}}
|
||||
<li style="margin: 0.3rem 0;"><span class="chat-result-failure">💥
|
||||
{{defenderName}}
|
||||
lâche l'objet tenu par son bras. Il doit faire un test d'endurance
|
||||
pour l'utiliser désormais.</span></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq loc.categorie "bras")}}
|
||||
{{#if (gt blessure.system.value 2)}}
|
||||
<li><strong class="chat-result-warning">{{alias}} lache l'objet tenu par son bras. Il doit faire un test d'endurance
|
||||
pour l'utiliser désormais.</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{#if (eq loc.categorie "jambe")}}
|
||||
{{#if (gt blessure.system.value 2)}}
|
||||
<li style="margin: 0.3rem 0;"><span class="chat-result-failure">💥
|
||||
{{defenderName}}
|
||||
tombe au sol. Pour se relever et marcher, il doit réussir un test
|
||||
d'Endurance à chaque tour.</span></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq loc.categorie "jambe")}}
|
||||
{{#if (gt blessure.system.value 2)}}
|
||||
<li><strong class="chat-result-warning">{{alias}} tombe au sol. Pour se relever et marcher, il doit réussir un test
|
||||
d'Endurance à chaque tour.
|
||||
</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq loc.categorie "main")}}
|
||||
{{#if (gt blessure.system.value 1)}}
|
||||
<li><strong class="chat-result-warning">{{alias}} lache l'objet tenu par sa main. Il doit faire un test d'endurance
|
||||
pour l'utiliser désormais.</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq loc.categorie "pied")}}
|
||||
{{#if (gt blessure.system.value 1)}}
|
||||
<li><strong class="chat-result-warning">{{alias}} tombe au sol. Pour se relever et marcher, il doit réussir un test
|
||||
d'Endurance à chaque tour.
|
||||
</strong></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{#if (eq loc.categorie "main")}}
|
||||
{{#if (gt blessure.system.value 1)}}
|
||||
<li style="margin: 0.3rem 0;"><span class="chat-result-failure">💥
|
||||
{{defenderName}}
|
||||
lâche l'objet tenu par sa main. Il doit faire un test d'endurance
|
||||
pour l'utiliser désormais.</span></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq loc.categorie "pied")}}
|
||||
{{#if (gt blessure.system.value 1)}}
|
||||
<li style="margin: 0.3rem 0;"><span class="chat-result-failure">💥
|
||||
{{defenderName}}
|
||||
tombe au sol. Pour se relever et marcher, il doit réussir un test
|
||||
d'Endurance à chaque tour.</span></li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{else}}
|
||||
<li>Aucune blessure subie par {{defenderName}}</li>
|
||||
<li style="margin: 0.3rem 0;"><span class="chat-result-success">✓ Aucune
|
||||
blessure subie par
|
||||
{{defenderName}}</span></li>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -1,38 +1,44 @@
|
||||
<div class="chat-message-header">
|
||||
{{#if actorImg}}
|
||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
||||
{{/if}}
|
||||
<h4 class="chat-actor-name">{{alias}}</h4>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="chat-roll-details" style="margin-top: 0.3rem;">
|
||||
{{#if img}}
|
||||
<div style="text-align: center; margin-bottom: 0.3rem;">
|
||||
<img class="chat-icon" src="{{arme.img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if img}}
|
||||
<div>
|
||||
<img class="chat-icon" src="{{arme.img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
<li>Dégats de {{arme.name}}: {{formula}} </li>
|
||||
<ul style="margin: 0; padding-left: 0.5rem;">
|
||||
<li style="margin: 0.2rem 0;"><span class="chat-info-badge">Dégâts de
|
||||
{{arme.name}}:
|
||||
{{formula}}</span></li>
|
||||
{{#if gantelet}}
|
||||
<li>Poing avec gantelet: +1 dégat</li>
|
||||
<li style="margin: 0.2rem 0;"><span class="chat-difficulty-badge">🥊 Poing
|
||||
avec gantelet: +1 dégât</span></li>
|
||||
{{/if}}
|
||||
{{#if isChargeAPied}}
|
||||
<li>Charge à pied (+Course)</li>
|
||||
<li style="margin: 0.2rem 0;"><span class="chat-difficulty-badge">🏃
|
||||
Charge à pied (+Course)</span></li>
|
||||
{{/if}}
|
||||
{{#if isChargeACheval}}
|
||||
<li>Charge à cheval (+Equitation)</li>
|
||||
<li style="margin: 0.2rem 0;"><span class="chat-difficulty-badge">🐴
|
||||
Charge à cheval (+Équitation)</span></li>
|
||||
{{/if}}
|
||||
<li>Dégats infligés : {{degats}}</li>
|
||||
<li style="margin: 0.3rem 0;"><span class="chat-warning-badge">⚔️ Dégâts
|
||||
infligés :
|
||||
{{degats}}</span></li>
|
||||
{{#if loc}}
|
||||
<li>Localisation : {{loc.label}}</li>
|
||||
<li style="margin: 0.2rem 0;"><span class="chat-difficulty-badge">🎯
|
||||
Localisation :
|
||||
{{loc.label}}</span></li>
|
||||
{{/if}}
|
||||
{{#if isReussiteCritique}}
|
||||
<li><strong class="chat-result-success">Réussite critique : La blessure sera augmentée d'un niveau</strong></li>
|
||||
<li style="margin: 0.3rem 0;"><span class="chat-result-success">🎯
|
||||
Réussite critique : La blessure sera augmentée d'un niveau</span></li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -5,122 +5,134 @@
|
||||
<h4 class="chat-actor-name">{{alias}}</h4>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
{{#if img}}
|
||||
<div>
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
||||
<div style="text-align: center; padding: 0.25rem;">
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" style="border-radius: 4px; box-shadow: 0 2px 4px rgba(0,0,0,0.15);" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexcol">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="chat-roll-details">
|
||||
<ul>
|
||||
{{#if carac}}
|
||||
<li>{{carac.name}}: {{carac.qualite}} ({{carac.dice}}) </li>
|
||||
<li><strong>{{carac.name}}:</strong> {{carac.qualite}} <span class="chat-dice-formula">{{carac.dice}}</span></li>
|
||||
{{/if}}
|
||||
{{#if competence}}
|
||||
<li>{{competence.name}}: {{compScore}} </li>
|
||||
<li><strong>{{competence.name}}:</strong> {{compScore}}</li>
|
||||
{{/if}}
|
||||
{{#if bonusMalus}}
|
||||
<li>Bonus/Malus: {{bonusMalus}} </li>
|
||||
<li class="chat-info-badge"><strong>Bonus/Malus:</strong> {{bonusMalus}}</li>
|
||||
{{/if}}
|
||||
{{#if santeModifier}}
|
||||
<li>Santé: {{santeModifier}} niveaux</li>
|
||||
<li class="chat-warning-badge"><strong>Santé:</strong> {{santeModifier}} niveaux</li>
|
||||
{{/if}}
|
||||
{{#if enableProvidence}}
|
||||
<li>Un niveau de Providence a été utilisé !</li>
|
||||
{{/if}}
|
||||
{{#if isViser}}
|
||||
<li>Bonus de visée (+1 niveau)</li>
|
||||
{{/if}}
|
||||
{{#if isMouvement}}
|
||||
<li>Malus de cible petite ou en mouvement (-1 niveau)</li>
|
||||
{{/if}}
|
||||
{{#if attaqueCiblee}}
|
||||
<li>Attaque ciblée, -1 niveau</li>
|
||||
{{/if}}
|
||||
{{#if allongeMalus}}
|
||||
<li>Malus d'allonge: {{allongeMalus}} niveau</li>
|
||||
<li class="chat-info-badge" style="background: rgba(255, 215, 0, 0.2); border-left-color: goldenrod;">⭐ Un niveau de Providence a été utilisé !</li>
|
||||
{{/if}}
|
||||
|
||||
<li>Dés: {{diceFormula}} </li>
|
||||
{{#if isTir}}
|
||||
<li>Portée: {{porteeLabel}} ( {{difficulty}} )</li>
|
||||
{{else}}
|
||||
<li>Difficulté: {{difficulty}} </li>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="flexrow">
|
||||
<ul class="chat-result-column">
|
||||
<li><strong>Résultat: {{total}}</strong> </li>
|
||||
{{#if isSuccess}}
|
||||
<li><strong class="chat-result-success">Succès !</strong> </li>
|
||||
{{#if isReussiteCritique}}
|
||||
<li data-tooltip="Si le jet n'est pas opposé, cliquez sur le bouton pour gagner 1 XP gagné en {{carac.name}}">
|
||||
<strong class="chat-result-success">Réussite critique (XP potentiel) !</strong>
|
||||
{{#if hasActions}}
|
||||
<li class="chat-info-badge" data-tooltip="Nombre d'actions restantes, avec MG = Main Gauche">
|
||||
<strong>Actions restantes:</strong> {{remainingActions}} (MG:{{remainingActionsMainGauche}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if arme}}
|
||||
<li><strong class="">Attaque réussie ! Faites une opposition avec la défense de la cible ou appliquez directement
|
||||
les dégats.</strong> </li>
|
||||
{{#if isViser}}
|
||||
<li class="chat-info-badge">✓ Bonus de visée (+1 niveau)</li>
|
||||
{{/if}}
|
||||
{{#if isMouvement}}
|
||||
<li class="chat-warning-badge">⚠ Malus de cible petite ou en mouvement (-1 niveau)</li>
|
||||
{{/if}}
|
||||
{{#if attaqueCiblee}}
|
||||
<li class="chat-warning-badge">⚠ Attaque ciblée, -1 niveau</li>
|
||||
{{/if}}
|
||||
{{#if allongeMalus}}
|
||||
<li class="chat-warning-badge">⚠ Malus d'allonge: {{allongeMalus}} niveau</li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
<li><strong>Formule:</strong> <span class="chat-dice-formula">{{diceFormula}}</span></li>
|
||||
{{#if isTir}}
|
||||
<li><strong>Portée:</strong> {{porteeLabel}} <span class="chat-difficulty-badge">Difficulté: {{difficulty}}</span></li>
|
||||
{{else}}
|
||||
<li><strong>Difficulté:</strong> <span class="chat-difficulty-badge">{{difficulty}}</span></li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="chat-roll-result-section">
|
||||
<div class="chat-total-result">Résultat: {{total}}</div>
|
||||
|
||||
<div style="text-align: center;">
|
||||
{{#if isSuccess}}
|
||||
<div class="chat-result-success">Succès !</div>
|
||||
{{#if isReussiteCritique}}
|
||||
<div class="chat-result-success" data-tooltip="Si le jet n'est pas opposé, cliquez sur le bouton pour gagner 1 XP en {{carac.name}}" style="margin-top: 0.3rem;">
|
||||
🌟 Réussite critique (XP potentiel) !
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if arme}}
|
||||
<div class="chat-info-badge" style="display: block; margin-top: 0.4rem; padding: 0.3rem; font-size: 0.9em;">
|
||||
⚔️ <strong>Attaque réussie !</strong> Faites une opposition avec la défense de la cible ou appliquez directement les dégâts.
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{else}}
|
||||
<li><strong class="chat-result-failure">Echec !</strong> </li>
|
||||
<div class="chat-result-failure">Échec !</div>
|
||||
{{#if critiqueTotal}}
|
||||
<div class="chat-negative-dice" style="margin-top: 0.3rem;">
|
||||
Dé négatif: {{critiqueTotal}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if isEchecCritique}}
|
||||
<li data-tooltip="Si le jet n'est pas opposé, cliquez sur le bouton pour gagner 1 XP gagné en {{carac.name}}">
|
||||
<strong class="chat-result-failure">Echec critique (XP potentiel) !</strong>
|
||||
</li>
|
||||
<div class="chat-result-failure" data-tooltip="Si le jet n'est pas opposé, cliquez sur le bouton pour gagner 1 XP en {{carac.name}}" style="margin-top: 0.3rem;">
|
||||
💀 Échec critique (XP potentiel) !
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if nbEsquives}}
|
||||
<li>Rappel : vous devez réussir {{nbEsquives}} tests d'esquive pour arriver au contact (règle d'allonge des armes).
|
||||
</li>
|
||||
<div class="chat-warning-badge" style="display: block; margin-top: 0.4rem; padding: 0.3rem;">
|
||||
⚠️ Rappel : vous devez réussir {{nbEsquives}} tests d'esquive pour arriver au contact (règle d'allonge des armes).
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if loc}}
|
||||
<li><strong>Attaque réussie !!</strong> </li>
|
||||
<li>Localisation: {{loc.label}} </li>
|
||||
<div class="chat-info-badge" style="display: block; margin-top: 0.4rem; padding: 0.3rem; background: rgba(255, 215, 0, 0.15); border-left-color: goldenrod;">
|
||||
🎯 <strong>Localisation:</strong> {{loc.label}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if degats}}
|
||||
<li>Dégats: {{degats}} {{#if isReussiteCritique}}(Augmentez la gravité de la blessure d'un niveau){{/if}}</li>
|
||||
<div class="chat-warning-badge" style="display: block; margin-top: 0.4rem; padding: 0.3rem; font-size: 0.95em; background: rgba(255, 100, 100, 0.15); border-left-color: #a82020;">
|
||||
⚔️ <strong>Dégâts:</strong> {{degats}} {{#if isReussiteCritique}}<em>(Augmentez la gravité de la blessure d'un niveau)</em>{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</ul>
|
||||
<div>
|
||||
|
||||
{{#if (or isEchecCritique isReussiteCritique)}}
|
||||
<a class="chat-command-gain-xp">
|
||||
<img class="chat-command-img" data-tooltip="Cliquez ici pour +1 XP en {{carac.name}} si pas d'opposition"
|
||||
src="systems/fvtt-te-deum/images/icons/xpplus1.webp">
|
||||
</a>
|
||||
{{/if}}
|
||||
|
||||
<a class="chat-command-opposition">
|
||||
<img class="chat-command-img" data-tooltip="Test en opposition"
|
||||
src="systems/fvtt-te-deum/images/icons/opposition.webp">
|
||||
</a>
|
||||
|
||||
{{#if arme}}
|
||||
{{#if isSuccess}}
|
||||
<a class="chat-command-appliquer-degats">
|
||||
<img class="chat-command-img" data-tooltip="Appliquer les dégats directement sans opposition"
|
||||
src="systems/fvtt-te-deum/images/icons/appliquer-degats.webp">
|
||||
</a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="chat-actions-bar">
|
||||
{{#if (or isEchecCritique isReussiteCritique)}}
|
||||
<a class="chat-command-gain-xp">
|
||||
<img class="chat-command-img" data-tooltip="Cliquez ici pour +1 XP en {{carac.name}} si pas d'opposition"
|
||||
src="systems/fvtt-te-deum/images/icons/xpplus1.webp">
|
||||
</a>
|
||||
{{/if}}
|
||||
|
||||
<a class="chat-command-opposition">
|
||||
<img class="chat-command-img" data-tooltip="Test en opposition"
|
||||
src="systems/fvtt-te-deum/images/icons/opposition.webp">
|
||||
</a>
|
||||
|
||||
{{#if arme}}
|
||||
{{#if isSuccess}}
|
||||
<a class="chat-command-appliquer-degats">
|
||||
<img class="chat-command-img" data-tooltip="Appliquer les dégâts directement sans opposition"
|
||||
src="systems/fvtt-te-deum/images/icons/appliquer-degats.webp">
|
||||
</a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -1,101 +1,176 @@
|
||||
<form class="skill-roll-dialog">
|
||||
<header class="roll-dialog-header">
|
||||
{{#if img}}
|
||||
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
{{/if}}
|
||||
<h1 class="dialog-roll-title roll-dialog-header">{{title}}</h1>
|
||||
</header>
|
||||
|
||||
<div class="flexcol">
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Caracteristique </span>
|
||||
<span class="roll-dialog-label">{{carac.name}} : {{carac.qualite}} ({{carac.dice}})</span>
|
||||
<span class="roll-dialog-label">⚡ Caractéristique </span>
|
||||
<span class="roll-dialog-label">{{carac.name}}
|
||||
:
|
||||
{{carac.qualite}}
|
||||
({{carac.dice}})</span>
|
||||
</div>
|
||||
|
||||
{{#if competence}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Compétence </span>
|
||||
<span class="roll-dialog-label">{{competence.name}} ({{compScore}})</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">🎯 Compétence </span>
|
||||
<span class="roll-dialog-label">{{competence.name}}
|
||||
({{compScore}})</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if santeModifier}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Malus Blessures </span>
|
||||
<span class="roll-dialog-label">{{santeModifier}} niveaux</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">💔 Malus Blessures </span>
|
||||
<span class="roll-dialog-label">{{santeModifier}} niveaux</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Bonus/Malus : </span>
|
||||
<select class="" type="text" id="roll-bonus-malus" value="{{bonusMalus}}" data-dtype="Number">
|
||||
{{selectOptions config.bonusMalus selected=bonusMalus labelAttr="label" valueAttr="value" nameAttr="value"}}
|
||||
<span class="roll-dialog-label">➕➖ Bonus/Malus : </span>
|
||||
<select
|
||||
class=""
|
||||
type="text"
|
||||
id="roll-bonus-malus"
|
||||
value="{{bonusMalus}}"
|
||||
data-dtype="Number"
|
||||
>
|
||||
{{selectOptions
|
||||
config.bonusMalus
|
||||
selected=bonusMalus
|
||||
labelAttr="label"
|
||||
valueAttr="value"
|
||||
nameAttr="value"
|
||||
}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#if providence.value}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Utiliser la Providence ({{providence.dice}})</span>
|
||||
<input type="checkbox" id="roll-enable-providence" {{checked enableProvidence}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">✨ Utiliser la Providence ({{providence.dice}})</span>
|
||||
<input
|
||||
type="checkbox"
|
||||
id="roll-enable-providence"
|
||||
{{checked enableProvidence}}
|
||||
/>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if arme}}
|
||||
{{#if isTir}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Portée : </span>
|
||||
<select class="" type="text" id="roll-portee-tir" value="{{porteeTir}}" data-dtype="String">
|
||||
{{#select porteeTir}}
|
||||
{{#each config.ARME_PORTEES as |portee key|}}
|
||||
<option value="{{key}}">{{portee.label}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Viser : </span>
|
||||
<input type="checkbox" id="roll-tir-viser" {{checked isViser}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Cible petite/en mouvement : </span>
|
||||
<input type="checkbox" id="roll-tir-mouvement" {{checked isMouvement}} />
|
||||
</div>
|
||||
{{#if isTir}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">🏹 Portée : </span>
|
||||
<select
|
||||
class=""
|
||||
type="text"
|
||||
id="roll-portee-tir"
|
||||
value="{{porteeTir}}"
|
||||
data-dtype="String"
|
||||
>
|
||||
{{#select porteeTir}}
|
||||
{{#each config.ARME_PORTEES as |portee key|}}
|
||||
<option value="{{key}}">{{portee.label}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">👁️ Viser : </span>
|
||||
<input type="checkbox" id="roll-tir-viser" {{checked isViser}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">🏃 Cible petite/en mouvement : </span>
|
||||
<input
|
||||
type="checkbox"
|
||||
id="roll-tir-mouvement"
|
||||
{{checked isMouvement}}
|
||||
/>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">⚔️ Allonge
|
||||
{{allongeLabel}}
|
||||
: Indiquez l'allonge de votre adversaire ci-dessous.</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span
|
||||
class="roll-dialog-label"
|
||||
data-tooltip="Modification d'allonge selon votre arme et celle de votre adversaire"
|
||||
>🗡️ Allonge arme adversaire :
|
||||
</span>
|
||||
<select
|
||||
class=""
|
||||
type="text"
|
||||
id="roll-allonge"
|
||||
value="{{allongeId}}"
|
||||
data-dtype="String"
|
||||
>
|
||||
{{#select allongeId}}
|
||||
{{#each allonges as |allonge key|}}
|
||||
<option value="{{key}}">{{allonge.label}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">🏃 Charge à pied ?</span>
|
||||
<input
|
||||
type="checkbox"
|
||||
id="roll-charge-a-pied"
|
||||
{{checked isChargeAPied}}
|
||||
/>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">🐴 Charge à cheval ?</span>
|
||||
<input
|
||||
type="checkbox"
|
||||
id="roll-charge-a-cheval"
|
||||
{{checked isChargeACheval}}
|
||||
/>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">✋ Main gauche ?</span>
|
||||
<input type="checkbox" id="roll-main-gauche" {{checked isMainGauche}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">🎯 Attaque ciblée (-1 Niveau): </span>
|
||||
<select
|
||||
class=""
|
||||
type="text"
|
||||
id="roll-attaque-ciblee"
|
||||
value="{{attaqueCiblee}}"
|
||||
data-dtype="String"
|
||||
>
|
||||
{{#select attaqueCiblee}}
|
||||
{{#each config.ATTAQUE_CIBLEES as |attaque key|}}
|
||||
<option value="{{key}}">{{attaque.label}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Allonge {{allongeLabel}} : Indiquez l'allonge de votre adversaire
|
||||
ci-dessous.</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label"
|
||||
data-tooltip="Modification d'allonge selon votre arme et celle de votre adversaire">Allonge arme adversaire :
|
||||
</span>
|
||||
<select class="" type="text" id="roll-allonge" value="{{allongeId}}" data-dtype="String">
|
||||
{{#select allongeId}}
|
||||
{{#each allonges as |allonge key|}}
|
||||
<option value="{{key}}">{{allonge.label}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Charge à pied ?</span>
|
||||
<input type="checkbox" id="roll-charge-a-pied" {{checked isChargeAPied}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Charge à cheval ?</span>
|
||||
<input type="checkbox" id="roll-charge-a-cheval" {{checked isChargeACheval}} />
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Attaque ciblée (-1 Niveau): </span>
|
||||
<select class="" type="text" id="roll-attaque-ciblee" value="{{attaqueCiblee}}" data-dtype="String">
|
||||
{{#select attaqueCiblee}}
|
||||
{{#each config.ATTAQUE_CIBLEES as |attaque key|}}
|
||||
<option value="{{key}}">{{attaque.label}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">📊 Difficulté : </span>
|
||||
<select
|
||||
class=""
|
||||
type="text"
|
||||
id="roll-difficulty"
|
||||
value="{{difficulty}}"
|
||||
data-dtype="String"
|
||||
>
|
||||
{{selectOptions
|
||||
config.difficulte
|
||||
selected=difficulty
|
||||
valueAttr="key"
|
||||
labelAttr="label"
|
||||
}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
@@ -38,22 +38,22 @@
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<h3>Spécificités</h3>
|
||||
<h3>⚔️ Spécificités</h3>
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Dégâts</label>
|
||||
<label class="item-name-label-long">💥 Dégâts</label>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short"
|
||||
name="system.degats" value="{{system.degats}}" data-dtype="String" />
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Valeur d'echec critique (ie 1 par défaut)</label>
|
||||
<label class="item-name-label-long">⚠️ Valeur d'échec critique (ie 1 par défaut)</label>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short"
|
||||
name="system.valeurEchecCritique" value="{{system.valeurEchecCritique}}" data-dtype="Numeric" />
|
||||
</li>
|
||||
|
||||
{{#if (eq system.typeArme "melee")}}
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Allonge</label>
|
||||
<label class="item-name-label-long">🗡️ Allonge</label>
|
||||
<select name="system.allonge">
|
||||
{{selectOptions config.armeAllonges selected=system.allonge labelAttr="label"}}
|
||||
</select>
|
||||
@@ -62,12 +62,12 @@
|
||||
|
||||
{{#if (eq system.typeArme "tir")}}
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Temps de recharge</label>
|
||||
<label class="item-name-label-long">⏱️ Temps de recharge</label>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short"
|
||||
name="system.tempsRecharge" value="{{system.tempsRecharge}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Compétence de recharge</label>
|
||||
<label class="item-name-label-long">🔄 Compétence de recharge</label>
|
||||
<select name="system.competenceRecharge">
|
||||
{{selectOptions config.competencesRecharge selected=system.competenceRecharge labelAttr="label"}}
|
||||
</select>
|
||||
@@ -90,7 +90,7 @@
|
||||
{{/each}}
|
||||
|
||||
{{#if (eq system.typeArme "tir")}}
|
||||
<h3>Portées</h3>
|
||||
<h3>🎯 Portées</h3>
|
||||
{{#each system.portees as |portee porteeId|}}
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">{{getConfigLabel "ARME_PORTEES" porteeId}}</label>
|
||||
@@ -100,7 +100,7 @@
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
|
||||
<h3>Degats sur armures</h3>
|
||||
<h3>🛡️ Degats sur armures</h3>
|
||||
{{#each system.degatsArmure as |degat degtId|}}
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">{{getConfigLabel "degatsArmure" degtId}}</label>
|
||||
@@ -109,21 +109,21 @@
|
||||
</li>
|
||||
{{/each}}
|
||||
|
||||
<h3>Autres</h3>
|
||||
<h3>📝 Autres</h3>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Equipé?</label>
|
||||
<label class="item-name-label-long">✅ Equipé?</label>
|
||||
<input type="checkbox" name="system.equipe" {{checked system.equipe}} />
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Bonus d'Initiative</label>
|
||||
<label class="item-name-label-long">⚡ Bonus d'Initiative</label>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short"
|
||||
name="system.initiativeBonus" value="{{system.initiativeBonus}}" data-dtype="Number" />
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Prix</label>
|
||||
<label class="item-name-label-long">💰 Prix</label>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short"
|
||||
name="system.prix" value="{{system.prix}}" data-dtype="Number" />
|
||||
<select name="system.monnaie">
|
||||
|
||||
@@ -33,13 +33,13 @@
|
||||
{{/each}}
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Protection</label>
|
||||
<label class="item-name-label-long">🛡️ Protection</label>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short"
|
||||
name="system.protection" value="{{system.protection}}" data-dtype="Number" />
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Cout en pièces d'Armure Lourde</label>
|
||||
<label class="item-name-label-long">⚖️ Cout en pièces d'Armure Lourde</label>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short"
|
||||
name="system.coutArmureLourde" value="{{system.coutArmureLourde}}" data-dtype="Number" />
|
||||
</li>
|
||||
@@ -57,12 +57,12 @@
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Equipé?</label>
|
||||
<label class="item-name-label-long">✅ Equipé?</label>
|
||||
<input type="checkbox" name="system.equipe" {{checked system.equipe}} />
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Prix</label>
|
||||
<label class="item-name-label-long">💰 Prix</label>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short"
|
||||
name="system.prix" value="{{system.prix}}" data-dtype="Number" />
|
||||
<select name="system.monnaie">
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
|
||||
<ul>
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Type de Blessure</label>
|
||||
<label class="item-name-label-long">🩸 Type de Blessure</label>
|
||||
<select name="system.typeBlessure">
|
||||
{{selectOptions config.blessures selected=system.typeBlessure valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</li>
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Localisation</label>
|
||||
<label class="item-name-label-long">🎯 Localisation</label>
|
||||
<select name="system.localisation">
|
||||
{{selectOptions config.LOCALISATION selected=system.localisation valueAttr="id" nameAttr="id" labelAttr="label"}}
|
||||
</select>
|
||||
|
||||
@@ -19,19 +19,19 @@
|
||||
<div class="tab" data-group="primary">
|
||||
<ul>
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Caractéristique</label>
|
||||
<label class="item-name-label-long">⚡ Caractéristique</label>
|
||||
<select name="system.caracteristique">
|
||||
{{selectOptions config.caracteristiques selected=system.caracteristique labelAttr="label" blank=""}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Compétence de base</label>
|
||||
<label class="item-name-label-long">🎯 Compétence de base</label>
|
||||
<input type="checkbox" name="system.isBase" {{checked system.isBase}} />
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Score</label>
|
||||
<label class="item-name-label-long">📊 Score</label>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short"
|
||||
name="system.score" value="{{system.score}}" data-dtype="Number" {{#if system.isBase}}disabled{{/if}}/>
|
||||
</li>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Prix</label>
|
||||
<label class="item-name-label-long">💰 Prix</label>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short"
|
||||
name="system.prix" value="{{system.prix}}" data-dtype="Number" />
|
||||
<select name="system.monnaie">
|
||||
|
||||
@@ -25,25 +25,25 @@
|
||||
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
|
||||
<h4 class="item-name-label-long">Vertus médicinales</h4>
|
||||
<h4 class="item-name-label-long">🌿 Vertus médicinales</h4>
|
||||
<textarea name="system.vertus" rows="6" data-dtype="String">
|
||||
{{{system.vertus}}}
|
||||
</textarea>
|
||||
|
||||
<h4 class="item-name-label-long">Toxicité</h4>
|
||||
<h4 class="item-name-label-long">☠️ Toxicité</h4>
|
||||
<textarea name="system.toxicite" rows="6" data-dtype="String">
|
||||
{{{system.toxicite}}}
|
||||
</textarea>
|
||||
|
||||
<ul>
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Difficulté au test d'Endurance</label>
|
||||
<label class="item-name-label-long">💪 Difficulté au test d'Endurance</label>
|
||||
<select class="" type="text" name="system.difficulteEndurance" data-dtype="String">
|
||||
{{selectOptions config.difficulte selected=system.difficulteEndurance abelAttr="label"}}
|
||||
</select>
|
||||
</li>
|
||||
<li class="flexrow">
|
||||
<label class="item-name-label-long">Virulence</label>
|
||||
<label class="item-name-label-long">🔥 Virulence</label>
|
||||
<select name="system.virulence">
|
||||
{{selectOptions config.virulencePoison selected=system.virulence labelAttr="label"}}
|
||||
</select>
|
||||
|
||||
26
welcome-message-tedeum.html
Normal file
26
welcome-message-tedeum.html
Normal file
@@ -0,0 +1,26 @@
|
||||
<h3 class="welcome-message-h3">Bonjour à tous !</h3>
|
||||
|
||||
<div class="message-chat-center">
|
||||
Open Sesame Game a mis en place un nouveau Discord pour ceux ou celles qui
|
||||
souhaiteraient participer plus activement à la communauté des jeux d'Open
|
||||
Sesame Games, avec un espace dédié à Te Deum ! <br />
|
||||
Nouveaux joueurs comme vétérans sont les bienvenus, n'hésitez pas à passer
|
||||
pour papoter, profiter de nos ressources, ou suivre les nouvelles d'OSG plus
|
||||
directement. Cliquez ici :<br />
|
||||
<a href="https://discord.gg/dUPhNfJdaD">https://discord.gg/dUPhNfJdaD</a
|
||||
><br />
|
||||
</div>
|
||||
|
||||
<div class="message-chat-center">
|
||||
Ce système vous est proposé par Open Sesame Games.<br />
|
||||
Vous trouverez de l'aide dans
|
||||
@UUID[Compendium.fvtt-te-deum.aides.JournalEntry.uNwJgi4kXBCiZmAH]{Aide pour
|
||||
Te Deum}<br />
|
||||
ainsi que sur le Discord de Foundry FR :
|
||||
<a href="https://discord.gg/pPSDNJk">https://discord.gg/pPSDNJk</a>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
Merci pour votre attention et à très bientôt pour la suite ! L'équipe Open
|
||||
Sesame Games
|
||||
</div>
|
||||
Reference in New Issue
Block a user