Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
8d9cc1045c | |||
4af277d8a2 | |||
bc9f397755 |
6
LICENSE
6
LICENSE
@@ -0,0 +1,6 @@
|
||||
Code license :
|
||||
|
||||
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
|
||||
This license requires that reusers give credit to the creator. It allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, for noncommercial purposes only. If others modify or adapt the material, they must license the modified material under identical terms.
|
||||
|
||||
|
@@ -3041,6 +3041,9 @@ i.fvtt-cthulhu-eternal {
|
||||
font-size: calc(var(--font-size-standard) * 2);
|
||||
color: var(--color-dark-1);
|
||||
}
|
||||
.li-apply-wounds {
|
||||
display: none;
|
||||
}
|
||||
.dice-roll {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
@@ -29,6 +29,12 @@ Hooks.once("init", function () {
|
||||
models,
|
||||
documents,
|
||||
}
|
||||
// Set an initiative formula for the system
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: "@characteristics.dex.value",
|
||||
decimals: 1
|
||||
};
|
||||
|
||||
|
||||
CONFIG.Actor.documentClass = documents.CthulhuEternalActor
|
||||
CONFIG.Actor.dataModels = {
|
||||
@@ -93,14 +99,14 @@ Hooks.once("init", function () {
|
||||
CthulhuEternalUtils.registerSettings()
|
||||
CthulhuEternalUtils.registerHandlebarsHelpers()
|
||||
CthulhuEternalUtils.setupCSSRootVariables()
|
||||
|
||||
CONFIG.debug.hooks = false;
|
||||
|
||||
console.info("CTHULHU ETERNAL | System Initialized")
|
||||
})
|
||||
|
||||
Hooks.once('babele.init', (babele) => {
|
||||
babele.setSystemTranslationsDir("compendiums");
|
||||
CthulhuEternalUtils.registerBabeleTranslations(babele);
|
||||
babele.setSystemTranslationsDir("compendiums");
|
||||
CthulhuEternalUtils.registerBabeleTranslations(babele);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -165,6 +171,15 @@ Hooks.on("renderChatMessageHTML", (message, html, data) => {
|
||||
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)
|
||||
})
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
/**
|
||||
|
@@ -730,7 +730,8 @@
|
||||
"visibility": "Visibility",
|
||||
"rangedRange": "Range",
|
||||
"aimingLastRound": "Aiming Last Round (+20)",
|
||||
"aimingWithSight": "Aiming with Sight (+20)"
|
||||
"aimingWithSight": "Aiming with Sight (+20)",
|
||||
"applyWounds": "Apply To"
|
||||
},
|
||||
"ChatMessage": {
|
||||
"exhausted": "Your protagonist is exhausted. He loses [[/r 1d6]] Willpower Points."
|
||||
@@ -755,6 +756,9 @@
|
||||
"rollDamage": "Roll Damage"
|
||||
},
|
||||
"Chat": {
|
||||
"noArmor": "No armor absorbed damage.",
|
||||
"armorAbsorbed": "Armor absorbed {armor} damage.",
|
||||
"woundsApplied": "Wounds applied to {name}: {effectiveWounds} (armor absorbed : {armorText})"
|
||||
},
|
||||
"Notifications": {
|
||||
"NoWeaponSkill": "No weapon skill found for this weapon. Check Weapon definition or available skills/era",
|
||||
|
@@ -751,7 +751,8 @@
|
||||
"visibility": "Visibilité",
|
||||
"rangedRange": "Portée",
|
||||
"aimingLastRound": "Visée lors du dernier round (+20)",
|
||||
"aimingWithSight": "Visée avec lunette (+20)"
|
||||
"aimingWithSight": "Visée avec lunette (+20)",
|
||||
"applyWounds": "Appliquer à"
|
||||
},
|
||||
"ChatMessage": {
|
||||
"exhausted": "Votre protagoniste est épuisé. Il perd [[/r 1d6]] Points de Volonté."
|
||||
@@ -776,6 +777,9 @@
|
||||
"rollDamage": "Lancer les dégâts"
|
||||
},
|
||||
"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": {
|
||||
"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.",
|
||||
|
@@ -23,8 +23,10 @@ export default class CthulhuEternalActor extends Actor {
|
||||
data.items.push(skill.toObject())
|
||||
}
|
||||
}
|
||||
data.items.push({ 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" } })
|
||||
data.items.push({
|
||||
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);
|
||||
@@ -43,6 +45,39 @@ export default class CthulhuEternalActor extends Actor {
|
||||
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) {
|
||||
let newData = []
|
||||
if (embeddedName === "Item") {
|
||||
@@ -71,18 +106,18 @@ export default class CthulhuEternalActor extends Actor {
|
||||
}
|
||||
|
||||
async _preCreate(data, options, user) {
|
||||
await super._preCreate(data, options, user)
|
||||
await super._preCreate(data, options, user)
|
||||
|
||||
// Configure prototype token settings
|
||||
const prototypeToken = {}
|
||||
if (this.type === "protagonist") {
|
||||
Object.assign(prototypeToken, {
|
||||
sight: { enabled: true },
|
||||
actorLink: true,
|
||||
disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY,
|
||||
})
|
||||
this.updateSource({ prototypeToken })
|
||||
// Configure prototype token settings
|
||||
const prototypeToken = {}
|
||||
if (this.type === "protagonist") {
|
||||
Object.assign(prototypeToken, {
|
||||
sight: { enabled: true },
|
||||
actorLink: true,
|
||||
disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY,
|
||||
})
|
||||
this.updateSource({ prototypeToken })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -146,6 +146,15 @@ export default class CthulhuEternalRoll extends Roll {
|
||||
|
||||
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) {
|
||||
let lethalityRoll = new Roll("1d100")
|
||||
await lethalityRoll.evaluate()
|
||||
@@ -159,20 +168,22 @@ export default class CthulhuEternalRoll extends Roll {
|
||||
}
|
||||
let wounds = Math.floor(lethalityRoll.total / 10) + (lethalityRoll.total % 10)
|
||||
let msgData = {
|
||||
actorId: actor.id,
|
||||
weapon,
|
||||
wounds,
|
||||
lethalScore,
|
||||
isLethal,
|
||||
ammoUsed,
|
||||
rollResult: lethalityRoll.total,
|
||||
combatants: combatants
|
||||
}
|
||||
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,
|
||||
content: flavor,
|
||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||
}, { rollMode: options.rollMode, create: true })
|
||||
|
||||
await msg.setFlag("fvtt-cthulhu-eternal", "woundData", msgData)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -190,21 +201,24 @@ export default class CthulhuEternalRoll extends Roll {
|
||||
"system.ammo.value": Math.max(0, weapon.system.ammo.value - ammoUsed)
|
||||
}])
|
||||
}
|
||||
console.log("Weapon damage formula", formula, weapon, ammoUsed)
|
||||
|
||||
let damageRoll = new Roll(formula)
|
||||
await damageRoll.evaluate()
|
||||
let msgData = {
|
||||
weapon,
|
||||
formula,
|
||||
ammoUsed,
|
||||
rollResult: damageRoll.total,
|
||||
}
|
||||
let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-regular-damage.hbs", msgData)
|
||||
ChatMessage.create({
|
||||
user: game.user.id,
|
||||
content: flavor,
|
||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||
}, { rollMode: options.rollMode, create: true })
|
||||
actorId: actor.id,
|
||||
weapon,
|
||||
formula,
|
||||
ammoUsed,
|
||||
rollResult: damageRoll.total,
|
||||
combatants: combatants
|
||||
}
|
||||
let flavor = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-regular-damage.hbs", msgData)
|
||||
let msg = await ChatMessage.create({
|
||||
user: game.user.id,
|
||||
content: flavor,
|
||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||
}, { rollMode: options.rollMode, create: true })
|
||||
await msg.setFlag("fvtt-cthulhu-eternal", "woundData", msgData)
|
||||
}
|
||||
|
||||
|
||||
|
@@ -229,7 +229,7 @@ export default class CthulhuEternalUtils {
|
||||
let healingFormula = rollData.rollItem.system.healingFormula
|
||||
let healingMsg = "CTHULHUETERNAL.Label.healingRoll"
|
||||
if (rollData.resultType === "successCritical") {
|
||||
healingFormula += " * 2"
|
||||
healingFormula += " * 2"
|
||||
}
|
||||
if (rollData.resultType === "failureCritical") {
|
||||
healingMsg = "CTHULHUETERNAL.Label.healingRollFailure"
|
||||
@@ -268,11 +268,11 @@ export default class CthulhuEternalUtils {
|
||||
}
|
||||
|
||||
static async registerBabeleTranslations(babele) {
|
||||
babele.registerConverters( {
|
||||
'translateRangeUnit': (originalValue) => {
|
||||
babele.registerConverters({
|
||||
'translateRangeUnit': (originalValue) => {
|
||||
return CthulhuEternalUtils.translateRangeUnit(originalValue)
|
||||
},
|
||||
'translateRange' : (originalValue) => {
|
||||
'translateRange': (originalValue) => {
|
||||
return CthulhuEternalUtils.translateRange(originalValue)
|
||||
}
|
||||
})
|
||||
@@ -280,7 +280,7 @@ export default class CthulhuEternalUtils {
|
||||
|
||||
static async damageRoll(rollMessage, formula = null) {
|
||||
let rollData = rollMessage.rolls[0]?.options?.rollData
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
if (!actor) {
|
||||
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Label.noActorFound"))
|
||||
return
|
||||
@@ -336,8 +336,8 @@ export default class CthulhuEternalUtils {
|
||||
rejectClose: false, // Click on Close button will not launch an error
|
||||
render: (event, dialog) => {
|
||||
$(".nudged-score-select").change(event => {
|
||||
dialogContext.nudgedValue = Number(event.target.value)+1
|
||||
dialogContext.wpCost = Math.ceil(Math.abs(rollMessage.rolls[0].total - dialogContext.nudgedValue) / 5)
|
||||
dialogContext.nudgedValue = Number(event.target.value) + 1
|
||||
dialogContext.wpCost = Math.ceil(Math.abs(rollMessage.rolls[0].total - dialogContext.nudgedValue) / 5)
|
||||
$("#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")`);
|
||||
}
|
||||
|
||||
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.
@@ -1 +1 @@
|
||||
MANIFEST-000230
|
||||
MANIFEST-000249
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/07/29-18:28:11.485462 7fbfdeffd6c0 Recovering log #227
|
||||
2025/07/29-18:28:11.542963 7fbfdeffd6c0 Delete type=3 #225
|
||||
2025/07/29-18:28:11.543020 7fbfdeffd6c0 Delete type=0 #227
|
||||
2025/07/29-18:28:25.939648 7fbd3ffff6c0 Level-0 table #233: started
|
||||
2025/07/29-18:28:25.939685 7fbd3ffff6c0 Level-0 table #233: 0 bytes OK
|
||||
2025/07/29-18:28:25.996353 7fbd3ffff6c0 Delete type=0 #231
|
||||
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-10:24:47.689741 7fc4987f86c0 Recovering log #246
|
||||
2025/10/01-10:24:47.787870 7fc4987f86c0 Delete type=3 #244
|
||||
2025/10/01-10:24:47.787986 7fc4987f86c0 Delete type=0 #246
|
||||
2025/10/01-11:24:12.555415 7fc497ff76c0 Level-0 table #252: started
|
||||
2025/10/01-11:24:12.555461 7fc497ff76c0 Level-0 table #252: 0 bytes OK
|
||||
2025/10/01-11:24:12.565317 7fc497ff76c0 Delete type=0 #250
|
||||
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)
|
||||
|
@@ -1,11 +1,11 @@
|
||||
2025/07/29-17:56:07.304105 7fbfddffb6c0 Delete type=3 #1
|
||||
2025/07/29-18:20:36.901079 7fbd3ffff6c0 Level-0 table #228: started
|
||||
2025/07/29-18:20:36.901119 7fbd3ffff6c0 Level-0 table #228: 0 bytes OK
|
||||
2025/07/29-18:20:36.907068 7fbd3ffff6c0 Delete type=0 #226
|
||||
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/07/29-18:20:36.913051 7fbd3ffff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/07/29-18:20:36.917150 7fbd3ffff6c0 Generated table #229@0: 26 keys, 60964 bytes
|
||||
2025/07/29-18:20:36.917172 7fbd3ffff6c0 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/07/29-18:20:36.924086 7fbd3ffff6c0 Delete type=2 #60
|
||||
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:23:25.493413 7fc499ffb6c0 Delete type=3 #1
|
||||
2025/10/01-09:24:30.037985 7fc497ff76c0 Level-0 table #247: started
|
||||
2025/10/01-09:24:30.038031 7fc497ff76c0 Level-0 table #247: 0 bytes OK
|
||||
2025/10/01-09:24:30.044462 7fc497ff76c0 Delete type=0 #245
|
||||
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/10/01-09:24:30.069672 7fc497ff76c0 Compacting 1@0 + 0@1 files
|
||||
2025/10/01-09:24:30.073695 7fc497ff76c0 Generated table #248@0: 26 keys, 60964 bytes
|
||||
2025/10/01-09:24:30.073722 7fc497ff76c0 Compacted 1@0 + 0@1 files => 60964 bytes
|
||||
2025/10/01-09:24:30.080151 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/10/01-09:24:30.080234 7fc497ff76c0 Delete type=2 #242
|
||||
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.
@@ -1 +1 @@
|
||||
MANIFEST-000399
|
||||
MANIFEST-000418
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/07/29-18:28:11.326583 7fbfdd7fa6c0 Recovering log #396
|
||||
2025/07/29-18:28:11.422544 7fbfdd7fa6c0 Delete type=3 #394
|
||||
2025/07/29-18:28:11.422600 7fbfdd7fa6c0 Delete type=0 #396
|
||||
2025/07/29-18:28:25.859630 7fbd3ffff6c0 Level-0 table #402: started
|
||||
2025/07/29-18:28:25.859675 7fbd3ffff6c0 Level-0 table #402: 0 bytes OK
|
||||
2025/07/29-18:28:25.902834 7fbd3ffff6c0 Delete type=0 #400
|
||||
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-10:24:47.499257 7fc4997fa6c0 Recovering log #415
|
||||
2025/10/01-10:24:47.596647 7fc4997fa6c0 Delete type=3 #413
|
||||
2025/10/01-10:24:47.596724 7fc4997fa6c0 Delete type=0 #415
|
||||
2025/10/01-11:24:12.545465 7fc497ff76c0 Level-0 table #421: started
|
||||
2025/10/01-11:24:12.545499 7fc497ff76c0 Level-0 table #421: 0 bytes OK
|
||||
2025/10/01-11:24:12.555310 7fc497ff76c0 Delete type=0 #419
|
||||
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)
|
||||
|
@@ -1,11 +1,11 @@
|
||||
2025/07/29-17:56:07.265693 7fbfddffb6c0 Delete type=3 #1
|
||||
2025/07/29-18:20:36.941849 7fbd3ffff6c0 Level-0 table #397: started
|
||||
2025/07/29-18:20:36.941895 7fbd3ffff6c0 Level-0 table #397: 0 bytes OK
|
||||
2025/07/29-18:20:36.948373 7fbd3ffff6c0 Delete type=0 #395
|
||||
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/07/29-18:20:36.960577 7fbd3ffff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/07/29-18:20:36.968003 7fbd3ffff6c0 Generated table #398@0: 556 keys, 320457 bytes
|
||||
2025/07/29-18:20:36.968044 7fbd3ffff6c0 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/07/29-18:20:36.974209 7fbd3ffff6c0 Delete type=2 #277
|
||||
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:23:25.444068 7fc499ffb6c0 Delete type=3 #1
|
||||
2025/10/01-09:24:30.024822 7fc497ff76c0 Level-0 table #416: started
|
||||
2025/10/01-09:24:30.024870 7fc497ff76c0 Level-0 table #416: 0 bytes OK
|
||||
2025/10/01-09:24:30.030665 7fc497ff76c0 Delete type=0 #414
|
||||
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/10/01-09:24:30.044598 7fc497ff76c0 Compacting 1@0 + 0@1 files
|
||||
2025/10/01-09:24:30.051264 7fc497ff76c0 Generated table #417@0: 556 keys, 320457 bytes
|
||||
2025/10/01-09:24:30.051285 7fc497ff76c0 Compacted 1@0 + 0@1 files => 320457 bytes
|
||||
2025/10/01-09:24:30.058278 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/10/01-09:24:30.058439 7fc497ff76c0 Delete type=2 #411
|
||||
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.
@@ -1 +1 @@
|
||||
MANIFEST-000045
|
||||
MANIFEST-000064
|
||||
|
@@ -1,7 +1,7 @@
|
||||
2025/07/29-18:28:11.426069 7fbfde7fc6c0 Recovering log #42
|
||||
2025/07/29-18:28:11.482529 7fbfde7fc6c0 Delete type=3 #40
|
||||
2025/07/29-18:28:11.482582 7fbfde7fc6c0 Delete type=0 #42
|
||||
2025/07/29-18:28:25.996691 7fbd3ffff6c0 Level-0 table #48: started
|
||||
2025/07/29-18:28:25.996717 7fbd3ffff6c0 Level-0 table #48: 0 bytes OK
|
||||
2025/07/29-18:28:26.032508 7fbd3ffff6c0 Delete type=0 #46
|
||||
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-10:24:47.601344 7fc499ffb6c0 Recovering log #61
|
||||
2025/10/01-10:24:47.686801 7fc499ffb6c0 Delete type=3 #59
|
||||
2025/10/01-10:24:47.686869 7fc499ffb6c0 Delete type=0 #61
|
||||
2025/10/01-11:24:12.535658 7fc497ff76c0 Level-0 table #67: started
|
||||
2025/10/01-11:24:12.535725 7fc497ff76c0 Level-0 table #67: 0 bytes OK
|
||||
2025/10/01-11:24:12.545352 7fc497ff76c0 Delete type=0 #65
|
||||
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)
|
||||
|
@@ -1,11 +1,11 @@
|
||||
2025/07/29-17:56:07.286370 7fbfdeffd6c0 Delete type=3 #1
|
||||
2025/07/29-18:20:36.907148 7fbd3ffff6c0 Level-0 table #43: started
|
||||
2025/07/29-18:20:36.907174 7fbd3ffff6c0 Level-0 table #43: 0 bytes OK
|
||||
2025/07/29-18:20:36.912933 7fbd3ffff6c0 Delete type=0 #41
|
||||
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/07/29-18:20:36.924252 7fbd3ffff6c0 Compacting 1@0 + 0@1 files
|
||||
2025/07/29-18:20:36.928859 7fbd3ffff6c0 Generated table #44@0: 362 keys, 93592 bytes
|
||||
2025/07/29-18:20:36.928870 7fbd3ffff6c0 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/07/29-18:20:36.935675 7fbd3ffff6c0 Delete type=2 #35
|
||||
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:23:25.469063 7fc499ffb6c0 Delete type=3 #1
|
||||
2025/10/01-09:24:30.030754 7fc497ff76c0 Level-0 table #62: started
|
||||
2025/10/01-09:24:30.030783 7fc497ff76c0 Level-0 table #62: 0 bytes OK
|
||||
2025/10/01-09:24:30.037809 7fc497ff76c0 Delete type=0 #60
|
||||
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/10/01-09:24:30.058646 7fc497ff76c0 Compacting 1@0 + 0@1 files
|
||||
2025/10/01-09:24:30.063565 7fc497ff76c0 Generated table #63@0: 362 keys, 93592 bytes
|
||||
2025/10/01-09:24:30.063591 7fc497ff76c0 Compacted 1@0 + 0@1 files => 93592 bytes
|
||||
2025/10/01-09:24:30.069446 7fc497ff76c0 compacted to: files[ 0 1 0 0 0 0 0 ]
|
||||
2025/10/01-09:24:30.069529 7fc497ff76c0 Delete type=2 #57
|
||||
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)
|
||||
|
@@ -11,8 +11,8 @@
|
||||
@import "weapon.less";
|
||||
@import "armor.less";
|
||||
@import "motivation.less";
|
||||
@import "mentaldisorder.less";
|
||||
@import "bond.less";
|
||||
@import "mentaldisorder.less";
|
||||
@import "bond.less";
|
||||
@import "chat.less";
|
||||
@import "gear.less";
|
||||
@import "arcane.less";
|
||||
@@ -21,4 +21,4 @@
|
||||
@import "tome.less";
|
||||
}
|
||||
|
||||
@import "roll.less";
|
||||
@import "roll.less";
|
||||
|
@@ -53,6 +53,10 @@
|
||||
color: var(--color-dark-1);
|
||||
}
|
||||
|
||||
.li-apply-wounds {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.dice-roll {
|
||||
flex-direction: column;
|
||||
|
||||
@@ -70,7 +74,7 @@
|
||||
border: 0px;
|
||||
}
|
||||
.intro-chat {
|
||||
color:var(--color-dark-1);
|
||||
color: var(--color-dark-1);
|
||||
border-radius: 20px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
@@ -91,20 +95,20 @@
|
||||
li {
|
||||
margin: 0 10px;
|
||||
font-family: var(--font-primary);
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
font-size: calc(var(--font-size-standard) * 1);
|
||||
}
|
||||
.nudge-roll {
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
font-size: calc(var(--font-size-standard) * 1);
|
||||
margin-left: 2rem;
|
||||
display: none;
|
||||
}
|
||||
.healing-roll {
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
font-size: calc(var(--font-size-standard) * 1);
|
||||
margin-left: 2rem;
|
||||
display: none;
|
||||
}
|
||||
.roll-damage {
|
||||
font-size: calc(var(--font-size-standard) * 1.0);
|
||||
font-size: calc(var(--font-size-standard) * 1);
|
||||
margin-left: 2rem;
|
||||
display: none;
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
<div class="chat-lethal-damage">
|
||||
<ul>
|
||||
<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}}
|
||||
@@ -21,12 +21,20 @@
|
||||
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
||||
{{/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}}
|
||||
<li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityLethal"}}</li>
|
||||
<li class="result-lethal">{{localize "CTHULHUETERNAL.Label.lethalityWounded"}}</li>
|
||||
{{else}}
|
||||
<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}}
|
||||
|
||||
</ul>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
<div class="chat-lethal-damage">
|
||||
<ul>
|
||||
<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)}}
|
||||
<li>{{localize "CTHULHUETERNAL.Label.killRadius"}} : {{weapon.system.killRadius}} {{weapon.system.rangeUnit}}</li>
|
||||
@@ -12,11 +12,23 @@
|
||||
{{#if (gt weapon.system.armorPiercing 0)}}
|
||||
<li>{{localize "CTHULHUETERNAL.Label.armorPiercing"}} : {{weapon.system.armorPiercing}}</li>
|
||||
{{/if}}
|
||||
{{#if (gt weapon.system.penetration 0)}}
|
||||
<li>{{localize "CTHULHUETERNAL.Label.penetration"}} : {{weapon.system.penetration}}</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if ammoUsed}}
|
||||
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
||||
{{/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>
|
||||
|
||||
|
Reference in New Issue
Block a user