Fight helper !

This commit is contained in:
2025-10-01 11:24:41 +02:00
parent bc9f397755
commit 4af277d8a2
26 changed files with 218 additions and 105 deletions

View File

@@ -3041,6 +3041,9 @@ i.fvtt-cthulhu-eternal {
font-size: calc(var(--font-size-standard) * 2); font-size: calc(var(--font-size-standard) * 2);
color: var(--color-dark-1); color: var(--color-dark-1);
} }
.li-apply-wounds {
display: none;
}
.dice-roll { .dice-roll {
flex-direction: column; flex-direction: column;
} }

View File

@@ -171,6 +171,15 @@ Hooks.on("renderChatMessageHTML", (message, html, data) => {
CthulhuEternalUtils.applySANType(message, event) CthulhuEternalUtils.applySANType(message, event)
}) })
} }
if (game.user.isGM) {
$(html).find(".li-apply-wounds").each((i, btn) => {
btn.style.display = "inline"
})
$(html).find(".li-apply-wounds-select").click((event) => {
CthulhuEternalUtils.applyWounds(message, event)
})
}
}) })
/** /**

View File

@@ -730,7 +730,8 @@
"visibility": "Visibility", "visibility": "Visibility",
"rangedRange": "Range", "rangedRange": "Range",
"aimingLastRound": "Aiming Last Round (+20)", "aimingLastRound": "Aiming Last Round (+20)",
"aimingWithSight": "Aiming with Sight (+20)" "aimingWithSight": "Aiming with Sight (+20)",
"applyWounds": "Apply To"
}, },
"ChatMessage": { "ChatMessage": {
"exhausted": "Your protagonist is exhausted. He loses [[/r 1d6]] Willpower Points." "exhausted": "Your protagonist is exhausted. He loses [[/r 1d6]] Willpower Points."
@@ -755,6 +756,9 @@
"rollDamage": "Roll Damage" "rollDamage": "Roll Damage"
}, },
"Chat": { "Chat": {
"noArmor": "No armor absorbed damage.",
"armorAbsorbed": "Armor absorbed {armor} damage.",
"woundsApplied": "Wounds applied to {name}: {effectiveWounds} (armor absorbed : {armorText})"
}, },
"Notifications": { "Notifications": {
"NoWeaponSkill": "No weapon skill found for this weapon. Check Weapon definition or available skills/era", "NoWeaponSkill": "No weapon skill found for this weapon. Check Weapon definition or available skills/era",

View File

@@ -751,7 +751,8 @@
"visibility": "Visibilité", "visibility": "Visibilité",
"rangedRange": "Portée", "rangedRange": "Portée",
"aimingLastRound": "Visée lors du dernier round (+20)", "aimingLastRound": "Visée lors du dernier round (+20)",
"aimingWithSight": "Visée avec lunette (+20)" "aimingWithSight": "Visée avec lunette (+20)",
"applyWounds": "Appliquer à"
}, },
"ChatMessage": { "ChatMessage": {
"exhausted": "Votre protagoniste est épuisé. Il perd [[/r 1d6]] Points de Volonté." "exhausted": "Votre protagoniste est épuisé. Il perd [[/r 1d6]] Points de Volonté."
@@ -776,6 +777,9 @@
"rollDamage": "Lancer les dégâts" "rollDamage": "Lancer les dégâts"
}, },
"Chat": { "Chat": {
"armorAbsorbed": "L'armure a absorbé {armor} points de dégâts.",
"noArmor": "Pas d'armure.",
"woundsApplied": "Blessures appliquées à {name} : {effectiveWounds} (armure absorbée : {armorText})"
}, },
"Notifications": { "Notifications": {
"NoWeaponSkill": "Aucune compétence associée n'a été trouvé pour cette arme. Vérifier la définition de l'arme ainsi que l'époque configurée.", "NoWeaponSkill": "Aucune compétence associée n'a été trouvé pour cette arme. Vérifier la définition de l'arme ainsi que l'époque configurée.",

View File

@@ -23,8 +23,10 @@ export default class CthulhuEternalActor extends Actor {
data.items.push(skill.toObject()) data.items.push(skill.toObject())
} }
} }
data.items.push({ type:"weapon", img: "systems/fvtt-cthulhu-eternal/assets/icons/icon_fist.svg", data.items.push({
name: game.i18n.localize("CTHULHUETERNAL.Label.Unarmed"), system: { damage: "1d4-1", weaponType: "unarmed" } }) type: "weapon", img: "systems/fvtt-cthulhu-eternal/assets/icons/icon_fist.svg",
name: game.i18n.localize("CTHULHUETERNAL.Label.Unarmed"), system: { damage: "1d4-1", weaponType: "unarmed" }
})
} }
return super.create(data, options); return super.create(data, options);
@@ -43,6 +45,39 @@ export default class CthulhuEternalActor extends Actor {
return super._onUpdate(changed, options, userId) return super._onUpdate(changed, options, userId)
} }
applyWounds(woundData) {
let updates = {}
// Get available armor
let armors = this.items.filter(i => i.type === "armor" && i.system.equipped)
let totalArmor = 0
for (let armor of armors) {
totalArmor += armor.system.protection
}
let effectiveWounds = Math.max(woundData.rollResult - totalArmor, 0)
if (woundData.isLethal) {
effectiveWounds = this.system.hp.value // Killed!
}
// Apply armor reduction
let hp = Math.max(this.system.hp.value - effectiveWounds, 0)
if (this.system.hp.value !== hp) {
updates[`system.hp.value`] = hp
}
if (Object.keys(updates).length > 0) {
this.update(updates)
}
// Chat message for GM only
if (game.user.isGM) {
let armorText = totalArmor > 0 ? game.i18n.format("CTHULHUETERNAL.Chat.armorAbsorbed", { armor: totalArmor }) : game.i18n.localize("CTHULHUETERNAL.Chat.noArmor")
ChatMessage.create({
user: game.user.id,
speaker: { alias: this.name },
rollMode: "gmroll",
content: game.i18n.format("CTHULHUETERNAL.Chat.woundsApplied", { name: this.name, effectiveWounds, armorText }),
})
}
}
async createEmbeddedDocuments(embeddedName, data, operation) { async createEmbeddedDocuments(embeddedName, data, operation) {
let newData = [] let newData = []
if (embeddedName === "Item") { if (embeddedName === "Item") {
@@ -71,18 +106,18 @@ export default class CthulhuEternalActor extends Actor {
} }
async _preCreate(data, options, user) { async _preCreate(data, options, user) {
await super._preCreate(data, options, user) await super._preCreate(data, options, user)
// Configure prototype token settings // Configure prototype token settings
const prototypeToken = {} const prototypeToken = {}
if (this.type === "protagonist") { if (this.type === "protagonist") {
Object.assign(prototypeToken, { Object.assign(prototypeToken, {
sight: { enabled: true }, sight: { enabled: true },
actorLink: true, actorLink: true,
disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY, disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY,
}) })
this.updateSource({ prototypeToken }) this.updateSource({ prototypeToken })
}
} }
}
} }

View File

@@ -146,6 +146,15 @@ export default class CthulhuEternalRoll extends Roll {
ammoUsed = Number(ammoUsed) ammoUsed = Number(ammoUsed)
let combatants = []
if (game?.combat?.combatants) {
for (let c of game.combat.combatants) {
if (c.actor.id !== actor.id) {
combatants.push({ id: c.actor.id, name: c.name })
}
}
}
if (weapon.system.lethality > 0) { if (weapon.system.lethality > 0) {
let lethalityRoll = new Roll("1d100") let lethalityRoll = new Roll("1d100")
await lethalityRoll.evaluate() await lethalityRoll.evaluate()
@@ -159,20 +168,22 @@ export default class CthulhuEternalRoll extends Roll {
} }
let wounds = Math.floor(lethalityRoll.total / 10) + (lethalityRoll.total % 10) let wounds = Math.floor(lethalityRoll.total / 10) + (lethalityRoll.total % 10)
let msgData = { let msgData = {
actorId: actor.id,
weapon, weapon,
wounds, wounds,
lethalScore, lethalScore,
isLethal, isLethal,
ammoUsed, ammoUsed,
rollResult: lethalityRoll.total, rollResult: lethalityRoll.total,
combatants: combatants
} }
let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-lethal-damage.hbs", msgData) let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-lethal-damage.hbs", msgData)
ChatMessage.create({ let msg = await ChatMessage.create({
user: game.user.id, user: game.user.id,
content: flavor, content: flavor,
speaker: ChatMessage.getSpeaker({ actor: actor }), speaker: ChatMessage.getSpeaker({ actor: actor }),
}, { rollMode: options.rollMode, create: true }) }, { rollMode: options.rollMode, create: true })
await msg.setFlag("fvtt-cthulhu-eternal", "woundData", msgData)
return return
} }
@@ -190,21 +201,24 @@ export default class CthulhuEternalRoll extends Roll {
"system.ammo.value": Math.max(0, weapon.system.ammo.value - ammoUsed) "system.ammo.value": Math.max(0, weapon.system.ammo.value - ammoUsed)
}]) }])
} }
console.log("Weapon damage formula", formula, weapon, ammoUsed)
let damageRoll = new Roll(formula) let damageRoll = new Roll(formula)
await damageRoll.evaluate() await damageRoll.evaluate()
let msgData = { let msgData = {
weapon, actorId: actor.id,
formula, weapon,
ammoUsed, formula,
rollResult: damageRoll.total, ammoUsed,
} rollResult: damageRoll.total,
let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-regular-damage.hbs", msgData) combatants: combatants
ChatMessage.create({ }
user: game.user.id, let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-regular-damage.hbs", msgData)
content: flavor, let msg = await ChatMessage.create({
speaker: ChatMessage.getSpeaker({ actor: actor }), user: game.user.id,
}, { rollMode: options.rollMode, create: true }) content: flavor,
speaker: ChatMessage.getSpeaker({ actor: actor }),
}, { rollMode: options.rollMode, create: true })
await msg.setFlag("fvtt-cthulhu-eternal", "woundData", msgData)
} }

View File

@@ -229,7 +229,7 @@ export default class CthulhuEternalUtils {
let healingFormula = rollData.rollItem.system.healingFormula let healingFormula = rollData.rollItem.system.healingFormula
let healingMsg = "CTHULHUETERNAL.Label.healingRoll" let healingMsg = "CTHULHUETERNAL.Label.healingRoll"
if (rollData.resultType === "successCritical") { if (rollData.resultType === "successCritical") {
healingFormula += " * 2" healingFormula += " * 2"
} }
if (rollData.resultType === "failureCritical") { if (rollData.resultType === "failureCritical") {
healingMsg = "CTHULHUETERNAL.Label.healingRollFailure" healingMsg = "CTHULHUETERNAL.Label.healingRollFailure"
@@ -268,11 +268,11 @@ export default class CthulhuEternalUtils {
} }
static async registerBabeleTranslations(babele) { static async registerBabeleTranslations(babele) {
babele.registerConverters( { babele.registerConverters({
'translateRangeUnit': (originalValue) => { 'translateRangeUnit': (originalValue) => {
return CthulhuEternalUtils.translateRangeUnit(originalValue) return CthulhuEternalUtils.translateRangeUnit(originalValue)
}, },
'translateRange' : (originalValue) => { 'translateRange': (originalValue) => {
return CthulhuEternalUtils.translateRange(originalValue) return CthulhuEternalUtils.translateRange(originalValue)
} }
}) })
@@ -280,7 +280,7 @@ export default class CthulhuEternalUtils {
static async damageRoll(rollMessage, formula = null) { static async damageRoll(rollMessage, formula = null) {
let rollData = rollMessage.rolls[0]?.options?.rollData let rollData = rollMessage.rolls[0]?.options?.rollData
let actor = game.actors.get(rollData.actorId) let actor = game.actors.get(rollData.actorId)
if (!actor) { if (!actor) {
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Label.noActorFound")) ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Label.noActorFound"))
return return
@@ -336,8 +336,8 @@ export default class CthulhuEternalUtils {
rejectClose: false, // Click on Close button will not launch an error rejectClose: false, // Click on Close button will not launch an error
render: (event, dialog) => { render: (event, dialog) => {
$(".nudged-score-select").change(event => { $(".nudged-score-select").change(event => {
dialogContext.nudgedValue = Number(event.target.value)+1 dialogContext.nudgedValue = Number(event.target.value) + 1
dialogContext.wpCost = Math.ceil(Math.abs(rollMessage.rolls[0].total - dialogContext.nudgedValue) / 5) dialogContext.wpCost = Math.ceil(Math.abs(rollMessage.rolls[0].total - dialogContext.nudgedValue) / 5)
$("#nudged-wp-cost").val(dialogContext.wpCost) $("#nudged-wp-cost").val(dialogContext.wpCost)
}) })
} }
@@ -375,4 +375,24 @@ export default class CthulhuEternalUtils {
document.documentElement.style.setProperty('--background-image-base', `linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../assets/ui/${era}_background_main.webp")`); document.documentElement.style.setProperty('--background-image-base', `linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../assets/ui/${era}_background_main.webp")`);
} }
static applyWounds(message, event) {
let woundData = message.getFlag("fvtt-cthulhu-eternal", "woundData")
if (!woundData) {
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noRollDataFound"))
return
}
let actor = game.actors.get(woundData.actorId)
if (!actor) {
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noActorFound"))
return
}
// Get the targetted actorId from the HTML select event
let targetActorId = event.target.value
let targetActor = game.actors.get(targetActorId)
if (!targetActor) {
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noTargetActorFound") + targetActorId)
return
}
targetActor.applyWounds(woundData)
}
} }

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000230 MANIFEST-000249

View File

@@ -1,7 +1,7 @@
2025/07/29-18:28:11.485462 7fbfdeffd6c0 Recovering log #227 2025/10/01-10:24:47.689741 7fc4987f86c0 Recovering log #246
2025/07/29-18:28:11.542963 7fbfdeffd6c0 Delete type=3 #225 2025/10/01-10:24:47.787870 7fc4987f86c0 Delete type=3 #244
2025/07/29-18:28:11.543020 7fbfdeffd6c0 Delete type=0 #227 2025/10/01-10:24:47.787986 7fc4987f86c0 Delete type=0 #246
2025/07/29-18:28:25.939648 7fbd3ffff6c0 Level-0 table #233: started 2025/10/01-11:24:12.555415 7fc497ff76c0 Level-0 table #252: started
2025/07/29-18:28:25.939685 7fbd3ffff6c0 Level-0 table #233: 0 bytes OK 2025/10/01-11:24:12.555461 7fc497ff76c0 Level-0 table #252: 0 bytes OK
2025/07/29-18:28:25.996353 7fbd3ffff6c0 Delete type=0 #231 2025/10/01-11:24:12.565317 7fc497ff76c0 Delete type=0 #250
2025/07/29-18:28:25.996608 7fbd3ffff6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end) 2025/10/01-11:24:12.577205 7fc497ff76c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,11 @@
2025/07/29-17:56:07.304105 7fbfddffb6c0 Delete type=3 #1 2025/10/01-09:23:25.493413 7fc499ffb6c0 Delete type=3 #1
2025/07/29-18:20:36.901079 7fbd3ffff6c0 Level-0 table #228: started 2025/10/01-09:24:30.037985 7fc497ff76c0 Level-0 table #247: started
2025/07/29-18:20:36.901119 7fbd3ffff6c0 Level-0 table #228: 0 bytes OK 2025/10/01-09:24:30.038031 7fc497ff76c0 Level-0 table #247: 0 bytes OK
2025/07/29-18:20:36.907068 7fbd3ffff6c0 Delete type=0 #226 2025/10/01-09:24:30.044462 7fc497ff76c0 Delete type=0 #245
2025/07/29-18:20:36.913035 7fbd3ffff6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at '!items!zVFfp3o0G0Zg3Ia4' @ 52 : 1 2025/10/01-09:24:30.069660 7fc497ff76c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at '!items!zVFfp3o0G0Zg3Ia4' @ 52 : 1
2025/07/29-18:20:36.913051 7fbd3ffff6c0 Compacting 1@0 + 0@1 files 2025/10/01-09:24:30.069672 7fc497ff76c0 Compacting 1@0 + 0@1 files
2025/07/29-18:20:36.917150 7fbd3ffff6c0 Generated table #229@0: 26 keys, 60964 bytes 2025/10/01-09:24:30.073695 7fc497ff76c0 Generated table #248@0: 26 keys, 60964 bytes
2025/07/29-18:20:36.917172 7fbd3ffff6c0 Compacted 1@0 + 0@1 files => 60964 bytes 2025/10/01-09:24:30.073722 7fc497ff76c0 Compacted 1@0 + 0@1 files => 60964 bytes
2025/07/29-18:20:36.923988 7fbd3ffff6c0 compacted to: files[ 0 1 0 0 0 0 0 ] 2025/10/01-09:24:30.080151 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/07/29-18:20:36.924086 7fbd3ffff6c0 Delete type=2 #60 2025/10/01-09:24:30.080234 7fc497ff76c0 Delete type=2 #242
2025/07/29-18:20:36.941818 7fbd3ffff6c0 Manual compaction at level-0 from '!items!zVFfp3o0G0Zg3Ia4' @ 52 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end) 2025/10/01-09:24:30.086925 7fc497ff76c0 Manual compaction at level-0 from '!items!zVFfp3o0G0Zg3Ia4' @ 52 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000399 MANIFEST-000418

View File

@@ -1,7 +1,7 @@
2025/07/29-18:28:11.326583 7fbfdd7fa6c0 Recovering log #396 2025/10/01-10:24:47.499257 7fc4997fa6c0 Recovering log #415
2025/07/29-18:28:11.422544 7fbfdd7fa6c0 Delete type=3 #394 2025/10/01-10:24:47.596647 7fc4997fa6c0 Delete type=3 #413
2025/07/29-18:28:11.422600 7fbfdd7fa6c0 Delete type=0 #396 2025/10/01-10:24:47.596724 7fc4997fa6c0 Delete type=0 #415
2025/07/29-18:28:25.859630 7fbd3ffff6c0 Level-0 table #402: started 2025/10/01-11:24:12.545465 7fc497ff76c0 Level-0 table #421: started
2025/07/29-18:28:25.859675 7fbd3ffff6c0 Level-0 table #402: 0 bytes OK 2025/10/01-11:24:12.545499 7fc497ff76c0 Level-0 table #421: 0 bytes OK
2025/07/29-18:28:25.902834 7fbd3ffff6c0 Delete type=0 #400 2025/10/01-11:24:12.555310 7fc497ff76c0 Delete type=0 #419
2025/07/29-18:28:25.996583 7fbd3ffff6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end) 2025/10/01-11:24:12.577192 7fc497ff76c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,11 @@
2025/07/29-17:56:07.265693 7fbfddffb6c0 Delete type=3 #1 2025/10/01-09:23:25.444068 7fc499ffb6c0 Delete type=3 #1
2025/07/29-18:20:36.941849 7fbd3ffff6c0 Level-0 table #397: started 2025/10/01-09:24:30.024822 7fc497ff76c0 Level-0 table #416: started
2025/07/29-18:20:36.941895 7fbd3ffff6c0 Level-0 table #397: 0 bytes OK 2025/10/01-09:24:30.024870 7fc497ff76c0 Level-0 table #416: 0 bytes OK
2025/07/29-18:20:36.948373 7fbd3ffff6c0 Delete type=0 #395 2025/10/01-09:24:30.030665 7fc497ff76c0 Delete type=0 #414
2025/07/29-18:20:36.960564 7fbd3ffff6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at '!items!zvoUByzWSWZ87fxA' @ 1281 : 1 2025/10/01-09:24:30.044587 7fc497ff76c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at '!items!zvoUByzWSWZ87fxA' @ 1281 : 1
2025/07/29-18:20:36.960577 7fbd3ffff6c0 Compacting 1@0 + 0@1 files 2025/10/01-09:24:30.044598 7fc497ff76c0 Compacting 1@0 + 0@1 files
2025/07/29-18:20:36.968003 7fbd3ffff6c0 Generated table #398@0: 556 keys, 320457 bytes 2025/10/01-09:24:30.051264 7fc497ff76c0 Generated table #417@0: 556 keys, 320457 bytes
2025/07/29-18:20:36.968044 7fbd3ffff6c0 Compacted 1@0 + 0@1 files => 320457 bytes 2025/10/01-09:24:30.051285 7fc497ff76c0 Compacted 1@0 + 0@1 files => 320457 bytes
2025/07/29-18:20:36.974076 7fbd3ffff6c0 compacted to: files[ 0 1 0 0 0 0 0 ] 2025/10/01-09:24:30.058278 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/07/29-18:20:36.974209 7fbd3ffff6c0 Delete type=2 #277 2025/10/01-09:24:30.058439 7fc497ff76c0 Delete type=2 #411
2025/07/29-18:20:36.980862 7fbd3ffff6c0 Manual compaction at level-0 from '!items!zvoUByzWSWZ87fxA' @ 1281 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end) 2025/10/01-09:24:30.086897 7fc497ff76c0 Manual compaction at level-0 from '!items!zvoUByzWSWZ87fxA' @ 1281 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000045 MANIFEST-000064

View File

@@ -1,7 +1,7 @@
2025/07/29-18:28:11.426069 7fbfde7fc6c0 Recovering log #42 2025/10/01-10:24:47.601344 7fc499ffb6c0 Recovering log #61
2025/07/29-18:28:11.482529 7fbfde7fc6c0 Delete type=3 #40 2025/10/01-10:24:47.686801 7fc499ffb6c0 Delete type=3 #59
2025/07/29-18:28:11.482582 7fbfde7fc6c0 Delete type=0 #42 2025/10/01-10:24:47.686869 7fc499ffb6c0 Delete type=0 #61
2025/07/29-18:28:25.996691 7fbd3ffff6c0 Level-0 table #48: started 2025/10/01-11:24:12.535658 7fc497ff76c0 Level-0 table #67: started
2025/07/29-18:28:25.996717 7fbd3ffff6c0 Level-0 table #48: 0 bytes OK 2025/10/01-11:24:12.535725 7fc497ff76c0 Level-0 table #67: 0 bytes OK
2025/07/29-18:28:26.032508 7fbd3ffff6c0 Delete type=0 #46 2025/10/01-11:24:12.545352 7fc497ff76c0 Delete type=0 #65
2025/07/29-18:28:26.140428 7fbd3ffff6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end) 2025/10/01-11:24:12.577171 7fc497ff76c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)

View File

@@ -1,11 +1,11 @@
2025/07/29-17:56:07.286370 7fbfdeffd6c0 Delete type=3 #1 2025/10/01-09:23:25.469063 7fc499ffb6c0 Delete type=3 #1
2025/07/29-18:20:36.907148 7fbd3ffff6c0 Level-0 table #43: started 2025/10/01-09:24:30.030754 7fc497ff76c0 Level-0 table #62: started
2025/07/29-18:20:36.907174 7fbd3ffff6c0 Level-0 table #43: 0 bytes OK 2025/10/01-09:24:30.030783 7fc497ff76c0 Level-0 table #62: 0 bytes OK
2025/07/29-18:20:36.912933 7fbd3ffff6c0 Delete type=0 #41 2025/10/01-09:24:30.037809 7fc497ff76c0 Delete type=0 #60
2025/07/29-18:20:36.924240 7fbd3ffff6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at '!items!zyxA9DhO36t5OBDv' @ 55 : 1 2025/10/01-09:24:30.058634 7fc497ff76c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at '!items!zyxA9DhO36t5OBDv' @ 55 : 1
2025/07/29-18:20:36.924252 7fbd3ffff6c0 Compacting 1@0 + 0@1 files 2025/10/01-09:24:30.058646 7fc497ff76c0 Compacting 1@0 + 0@1 files
2025/07/29-18:20:36.928859 7fbd3ffff6c0 Generated table #44@0: 362 keys, 93592 bytes 2025/10/01-09:24:30.063565 7fc497ff76c0 Generated table #63@0: 362 keys, 93592 bytes
2025/07/29-18:20:36.928870 7fbd3ffff6c0 Compacted 1@0 + 0@1 files => 93592 bytes 2025/10/01-09:24:30.063591 7fc497ff76c0 Compacted 1@0 + 0@1 files => 93592 bytes
2025/07/29-18:20:36.935549 7fbd3ffff6c0 compacted to: files[ 0 1 0 0 0 0 0 ] 2025/10/01-09:24:30.069446 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/07/29-18:20:36.935675 7fbd3ffff6c0 Delete type=2 #35 2025/10/01-09:24:30.069529 7fc497ff76c0 Delete type=2 #57
2025/07/29-18:20:36.941835 7fbd3ffff6c0 Manual compaction at level-0 from '!items!zyxA9DhO36t5OBDv' @ 55 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end) 2025/10/01-09:24:30.086915 7fc497ff76c0 Manual compaction at level-0 from '!items!zyxA9DhO36t5OBDv' @ 55 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)

View File

@@ -11,8 +11,8 @@
@import "weapon.less"; @import "weapon.less";
@import "armor.less"; @import "armor.less";
@import "motivation.less"; @import "motivation.less";
@import "mentaldisorder.less"; @import "mentaldisorder.less";
@import "bond.less"; @import "bond.less";
@import "chat.less"; @import "chat.less";
@import "gear.less"; @import "gear.less";
@import "arcane.less"; @import "arcane.less";
@@ -21,4 +21,4 @@
@import "tome.less"; @import "tome.less";
} }
@import "roll.less"; @import "roll.less";

View File

@@ -53,6 +53,10 @@
color: var(--color-dark-1); color: var(--color-dark-1);
} }
.li-apply-wounds {
display: none;
}
&.dice-roll { &.dice-roll {
flex-direction: column; flex-direction: column;
@@ -70,7 +74,7 @@
border: 0px; border: 0px;
} }
.intro-chat { .intro-chat {
color:var(--color-dark-1); color: var(--color-dark-1);
border-radius: 20px; border-radius: 20px;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -91,20 +95,20 @@
li { li {
margin: 0 10px; margin: 0 10px;
font-family: var(--font-primary); font-family: var(--font-primary);
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1);
} }
.nudge-roll { .nudge-roll {
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1);
margin-left: 2rem; margin-left: 2rem;
display: none; display: none;
} }
.healing-roll { .healing-roll {
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1);
margin-left: 2rem; margin-left: 2rem;
display: none; display: none;
} }
.roll-damage { .roll-damage {
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1);
margin-left: 2rem; margin-left: 2rem;
display: none; display: none;
} }

View File

@@ -2,7 +2,7 @@
<div class="chat-lethal-damage"> <div class="chat-lethal-damage">
<ul> <ul>
<li><strong>{{weapon.name}} : {{localize "CTHULHUETERNAL.Label.lethalityRoll"}}</strong></li> <li><strong>{{weapon.name}} : {{localize "CTHULHUETERNAL.Label.lethalityRoll"}}</strong></li>
<li>{{localize "CTHULHUETERNAL.Label.result"}} :{{rollResult}} ({{lethalScore}})</li> <li>{{localize "CTHULHUETERNAL.Label.result"}} :{{rollResult}} ({{lethalScore}})</li>
{{#if weapon.system.selectiveFireChoice}} {{#if weapon.system.selectiveFireChoice}}
@@ -21,12 +21,20 @@
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li> <li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
{{/if}} {{/if}}
<li class="li-apply-wounds">
<button type="button" class="apply-wounds">{{localize "CTHULHUETERNAL.Label.applyWounds"}}</button>
<select name="combatant" class="roll-skill-modifier">
{{selectOptions combatants valueAttr="id" labelAttr="name"}}
</select>
</li>
{{#if isLethal}} {{#if isLethal}}
<li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityLethal"}}</li> <li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityLethal"}}</li>
<li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityWounded"}}</li> <li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityWounded"}}</li>
{{else}} {{else}}
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotLethal"}}</li> <li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotLethal"}}</li>
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotWounded"}}: <strong>{{wounds}}</strong></li> <li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.lethalityNotWounded"}}: <strong>{{wounds}}</strong>
</li>
{{/if}} {{/if}}
</ul> </ul>

View File

@@ -2,7 +2,7 @@
<div class="chat-lethal-damage"> <div class="chat-lethal-damage">
<ul> <ul>
<li><strong>{{weapon.name}} : {{localize "CTHULHUETERNAL.Label.damageRoll"}}</strong></li> <li><strong>{{weapon.name}} : {{localize "CTHULHUETERNAL.Label.damageRoll"}}</strong></li>
<li>{{localize "CTHULHUETERNAL.Label.result"}} :{{rollResult}} ({{formula}})</li> <li>{{localize "CTHULHUETERNAL.Label.result"}} :{{rollResult}} ({{formula}})</li>
{{#if (gt weapon.system.killRadius 0)}} {{#if (gt weapon.system.killRadius 0)}}
<li>{{localize "CTHULHUETERNAL.Label.killRadius"}} : {{weapon.system.killRadius}} {{weapon.system.rangeUnit}}</li> <li>{{localize "CTHULHUETERNAL.Label.killRadius"}} : {{weapon.system.killRadius}} {{weapon.system.rangeUnit}}</li>
@@ -12,11 +12,23 @@
{{#if (gt weapon.system.armorPiercing 0)}} {{#if (gt weapon.system.armorPiercing 0)}}
<li>{{localize "CTHULHUETERNAL.Label.armorPiercing"}} : {{weapon.system.armorPiercing}}</li> <li>{{localize "CTHULHUETERNAL.Label.armorPiercing"}} : {{weapon.system.armorPiercing}}</li>
{{/if}} {{/if}}
{{#if (gt weapon.system.penetration 0)}}
<li>{{localize "CTHULHUETERNAL.Label.penetration"}} : {{weapon.system.penetration}}</li>
{{/if}}
{{#if ammoUsed}} {{#if ammoUsed}}
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li> <li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
{{/if}} {{/if}}
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.damageMessage"}}: <strong>{{rollResult}}</strong></li>
<li class="li-apply-wounds">
{{localize "CTHULHUETERNAL.Label.applyWounds"}}
<select name="combatant" class="li-apply-wounds-select">
{{selectOptions combatants valueAttr="id" labelAttr="name"}}
</select>
</li>
<li class="result-non-lethal">{{localize "CTHULHUETERNAL.Label.damageMessage"}}: <strong>{{rollResult}}</strong>
</li>
</ul> </ul>