Foundry v13 migration
All checks were successful
Release Creation / build (release) Successful in 58s

This commit is contained in:
LeRatierBretonnien 2025-05-14 10:02:08 +02:00
parent aaef4dd896
commit b4d6616cb4
76 changed files with 356 additions and 421 deletions

View File

@ -4,7 +4,7 @@
}
@font-face {
font-family: "BaskervilleBold";
src: url("../fonts/baskerville-bold.ttf") format("truetype");
src: url("../assets/fonts/baskerville-bold.ttf") format("truetype");
}
:root {
--font-primary: "TimesNewRoman", serif;
@ -229,6 +229,10 @@ i.lethalfantasy {
display: flex;
align-items: center;
}
.lethalfantasy .character-main .character-characteristics .character-characteristic span {
min-width: 2.2rem;
max-width: 2.2rem;
}
.lethalfantasy .character-main .character-characteristics .character-characteristic .rollable:hover,
.lethalfantasy .character-main .character-characteristics .character-characteristic .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
@ -342,22 +346,22 @@ i.lethalfantasy {
.lethalfantasy .character-main .character-characteristic-edit {
min-width: 160px;
}
.lethalfantasy .tab.character-biography .biodata {
.lethalfantasy .tab.character-biography .main-div .biodata {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-biography .biodata .biodata-elem {
.lethalfantasy .tab.character-biography .main-div .biodata .biodata-elem {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-biography .biodata .biodata-elem .item-img {
.lethalfantasy .tab.character-biography .main-div .biodata .biodata-elem .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.lethalfantasy .tab.character-biography .biodata .biodata-elem .name {
.lethalfantasy .tab.character-biography .main-div .biodata .biodata-elem .name {
min-width: 8rem;
}
.lethalfantasy .character-biography prose-mirror.inactive {
@ -366,345 +370,345 @@ i.lethalfantasy {
.lethalfantasy .character-biography prose-mirror.active {
min-height: 150px;
}
.lethalfantasy .tab.character-skills {
.lethalfantasy .tab.character-skills .main-div {
display: grid;
grid-template-columns: 1fr;
}
.lethalfantasy .tab.character-skills legend a {
.lethalfantasy .tab.character-skills .main-div legend a {
font-size: calc(var(--font-size-standard) * 1);
padding-left: 4px;
}
.lethalfantasy .tab.character-skills .skills {
.lethalfantasy .tab.character-skills .main-div .skills {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-skills .skills .skill {
.lethalfantasy .tab.character-skills .main-div .skills .skill {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-skills .skills .skill .item-img {
.lethalfantasy .tab.character-skills .main-div .skills .skill .item-img {
width: 24px;
height: 24px;
}
.lethalfantasy .tab.character-skills .skills .skill .name {
.lethalfantasy .tab.character-skills .main-div .skills .skill .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-skills .gifts {
.lethalfantasy .tab.character-skills .main-div .gifts {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-skills .gifts .gift {
.lethalfantasy .tab.character-skills .main-div .gifts .gift {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-skills .gifts .gift .item-img {
.lethalfantasy .tab.character-skills .main-div .gifts .gift .item-img {
width: 24px;
height: 24px;
}
.lethalfantasy .tab.character-skills .gifts .gift .name {
.lethalfantasy .tab.character-skills .main-div .gifts .gift .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-skills .vulnerabilities {
.lethalfantasy .tab.character-skills .main-div .vulnerabilities {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-skills .vulnerabilities .vulnerability {
.lethalfantasy .tab.character-skills .main-div .vulnerabilities .vulnerability {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-skills .vulnerabilities .vulnerability .item-img {
.lethalfantasy .tab.character-skills .main-div .vulnerabilities .vulnerability .item-img {
width: 24px;
height: 24px;
}
.lethalfantasy .tab.character-skills .vulnerabilities .vulnerability .name {
.lethalfantasy .tab.character-skills .main-div .vulnerabilities .vulnerability .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-equipment {
.lethalfantasy .tab.character-equipment .main-div {
display: grid;
grid-template-columns: 1fr;
}
.lethalfantasy .tab.character-equipment legend a {
.lethalfantasy .tab.character-equipment .main-div legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 4px;
}
.lethalfantasy .tab.character-equipment .moneys {
.lethalfantasy .tab.character-equipment .main-div .moneys {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-equipment .equipments {
.lethalfantasy .tab.character-equipment .main-div .equipments {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-equipment .equipments .equipment {
.lethalfantasy .tab.character-equipment .main-div .equipments .equipment {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-equipment .equipments .equipment .item-img {
.lethalfantasy .tab.character-equipment .main-div .equipments .equipment .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.lethalfantasy .tab.character-equipment .equipments .equipment .name {
.lethalfantasy .tab.character-equipment .main-div .equipments .equipment .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-equipment .equipments .name {
.lethalfantasy .tab.character-equipment .main-div .equipments .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-combat {
.lethalfantasy .tab.character-combat .main-div {
display: grid;
grid-template-columns: 1fr;
}
.lethalfantasy .tab.character-combat legend a {
.lethalfantasy .tab.character-combat .main-div legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 4px;
}
.lethalfantasy .tab.character-combat .combat-details {
.lethalfantasy .tab.character-combat .main-div .combat-details {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-combat .combat-details .combat-detail {
.lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-combat .combat-details .combat-detail .input {
.lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail .input {
min-width: 2.5rem;
max-width: 2.5rem;
}
.lethalfantasy .tab.character-combat .combat-details .combat-detail button {
.lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail button {
min-width: 9rem;
}
.lethalfantasy .tab.character-combat .combat-details .combat-detail .armor-hp {
.lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail .armor-hp {
margin-right: 4px;
min-width: 10rem;
max-width: 10rem;
}
.lethalfantasy .tab.character-combat .combat-details .combat-detail .armor-hp .name {
.lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail .armor-hp .name {
min-width: 6rem;
max-width: 6rem;
}
.lethalfantasy .tab.character-combat .combat-details .combat-detail .armor-hp .input {
.lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail .armor-hp .input {
min-width: 2.5rem;
max-width: 2.5rem;
}
.lethalfantasy .tab.character-combat .combat-details .combat-detail .granted {
.lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail .granted {
min-width: 8rem;
max-width: 8rem;
}
.lethalfantasy .tab.character-combat .combat-details .combat-detail .granted .input {
.lethalfantasy .tab.character-combat .main-div .combat-details .combat-detail .granted .input {
min-width: 2.5rem;
max-width: 2.5rem;
}
.lethalfantasy .tab.character-combat .wounds {
.lethalfantasy .tab.character-combat .main-div .wounds {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-combat .wounds .wound {
.lethalfantasy .tab.character-combat .main-div .wounds .wound {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-combat .wounds .wound .wound-description {
.lethalfantasy .tab.character-combat .main-div .wounds .wound .wound-description {
min-width: 14rem;
max-width: 14rem;
}
.lethalfantasy .tab.character-combat .wounds .wound .wound-duration {
.lethalfantasy .tab.character-combat .main-div .wounds .wound .wound-duration {
min-width: 3rem;
max-width: 3rem;
}
.lethalfantasy .tab.character-combat .wounds .wound .wound-value {
.lethalfantasy .tab.character-combat .main-div .wounds .wound .wound-value {
min-width: 3rem;
max-width: 3rem;
}
.lethalfantasy .tab.character-combat .wounds .wound .item-img {
.lethalfantasy .tab.character-combat .main-div .wounds .wound .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.lethalfantasy .tab.character-combat .wounds .wound .name {
.lethalfantasy .tab.character-combat .main-div .wounds .wound .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-combat .weapons {
.lethalfantasy .tab.character-combat .main-div .weapons {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-combat .weapons .weapon {
.lethalfantasy .tab.character-combat .main-div .weapons .weapon {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-combat .weapons .weapon .item-img {
.lethalfantasy .tab.character-combat .main-div .weapons .weapon .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.lethalfantasy .tab.character-combat .weapons .weapon .name {
.lethalfantasy .tab.character-combat .main-div .weapons .weapon .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-combat .weapons .weapon .attack-icons a {
.lethalfantasy .tab.character-combat .main-div .weapons .weapon .attack-icons a {
margin-left: 8px;
margin-right: 8px;
}
.lethalfantasy .tab.character-combat .armors {
.lethalfantasy .tab.character-combat .main-div .armors {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-combat .armors .armor {
.lethalfantasy .tab.character-combat .main-div .armors .armor {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-combat .armors .armor .item-img {
.lethalfantasy .tab.character-combat .main-div .armors .armor .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.lethalfantasy .tab.character-combat .armors .name {
.lethalfantasy .tab.character-combat .main-div .armors .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-combat .armors .item-detail {
.lethalfantasy .tab.character-combat .main-div .armors .item-detail {
min-width: 2rem;
}
.lethalfantasy .tab.character-combat .shields {
.lethalfantasy .tab.character-combat .main-div .shields {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
min-width: 20rem;
}
.lethalfantasy .tab.character-combat .shields .shield {
.lethalfantasy .tab.character-combat .main-div .shields .shield {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-combat .shields .shield .item-img {
.lethalfantasy .tab.character-combat .main-div .shields .shield .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.lethalfantasy .tab.character-combat .shields .item-detail {
.lethalfantasy .tab.character-combat .main-div .shields .item-detail {
min-width: 2.5rem;
}
.lethalfantasy .tab.character-combat .shields .name {
.lethalfantasy .tab.character-combat .main-div .shields .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-spells {
.lethalfantasy .tab.character-spells .main-div {
display: grid;
grid-template-columns: 1fr;
}
.lethalfantasy .tab.character-spells legend a {
.lethalfantasy .tab.character-spells .main-div legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 4px;
}
.lethalfantasy .tab.character-spells .spell-details {
.lethalfantasy .tab.character-spells .main-div .spell-details {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-spells .spell-details .spell-detail {
.lethalfantasy .tab.character-spells .main-div .spell-details .spell-detail {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-spells .spell-details .spell-detail button {
.lethalfantasy .tab.character-spells .main-div .spell-details .spell-detail button {
min-width: 10rem;
}
.lethalfantasy .tab.character-spells .spell-details .spell-detail .armor-hp {
.lethalfantasy .tab.character-spells .main-div .spell-details .spell-detail .armor-hp {
min-width: 12rem;
max-width: 12rem;
}
.lethalfantasy .tab.character-spells .spell-details .spell-detail .armor-hp .input {
.lethalfantasy .tab.character-spells .main-div .spell-details .spell-detail .armor-hp .input {
flex: 0;
min-width: 3rem;
max-width: 3rem;
}
.lethalfantasy .tab.character-spells .spells {
.lethalfantasy .tab.character-spells .main-div .spells {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
min-width: 18rem;
}
.lethalfantasy .tab.character-spells .spells .spell {
.lethalfantasy .tab.character-spells .main-div .spells .spell {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-spells .spells .spell .item-img {
.lethalfantasy .tab.character-spells .main-div .spells .spell .item-img {
width: 24px;
height: 24px;
}
.lethalfantasy .tab.character-spells .spells .spell .name {
.lethalfantasy .tab.character-spells .main-div .spells .spell .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-spells prose-mirror.inactive {
.lethalfantasy .tab.character-spells .main-div prose-mirror.inactive {
min-height: 40px;
}
.lethalfantasy .tab.character-spells prose-mirror.active {
.lethalfantasy .tab.character-spells .main-div prose-mirror.active {
min-height: 150px;
}
.lethalfantasy .tab.character-miracles {
.lethalfantasy .tab.character-miracles .main-div {
display: grid;
grid-template-columns: 1fr;
}
.lethalfantasy .tab.character-miracles legend a {
.lethalfantasy .tab.character-miracles .main-div legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 4px;
}
.lethalfantasy .tab.character-miracles .miracle-details {
.lethalfantasy .tab.character-miracles .main-div .miracle-details {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.lethalfantasy .tab.character-miracles .miracle-details .miracle-detail {
.lethalfantasy .tab.character-miracles .main-div .miracle-details .miracle-detail {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-miracles .miracle-details .miracle-detail button {
.lethalfantasy .tab.character-miracles .main-div .miracle-details .miracle-detail button {
min-width: 10rem;
}
.lethalfantasy .tab.character-miracles .miracle-details .miracle-detail .armor-hp {
.lethalfantasy .tab.character-miracles .main-div .miracle-details .miracle-detail .armor-hp {
min-width: 20rem;
max-width: 20rem;
}
.lethalfantasy .tab.character-miracles .miracle-details .miracle-detail .armor-hp .input {
.lethalfantasy .tab.character-miracles .main-div .miracle-details .miracle-detail .armor-hp .input {
min-width: 3rem;
max-width: 3rem;
}
.lethalfantasy .tab.character-miracles .miracles {
.lethalfantasy .tab.character-miracles .main-div .miracles {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
min-width: 18rem;
}
.lethalfantasy .tab.character-miracles .miracles .miracle {
.lethalfantasy .tab.character-miracles .main-div .miracles .miracle {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.character-miracles .miracles .miracle .item-img {
.lethalfantasy .tab.character-miracles .main-div .miracles .miracle .item-img {
width: 24px;
height: 24px;
}
.lethalfantasy .tab.character-miracles .miracles .miracle .name {
.lethalfantasy .tab.character-miracles .main-div .miracles .miracle .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-miracles prose-mirror.inactive {
.lethalfantasy .tab.character-miracles .main-div prose-mirror.inactive {
min-height: 40px;
}
.lethalfantasy .tab.character-miracles prose-mirror.active {
.lethalfantasy .tab.character-miracles .main-div prose-mirror.active {
min-height: 150px;
}
.lethalfantasy .monster-content {
@ -848,6 +852,10 @@ i.lethalfantasy {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.lethalfantasy .monster-main .monster-characteristics .monster-characteristic span {
min-width: 2.2rem;
max-width: 2.2rem;
}
.lethalfantasy .monster-main .monster-characteristics .monster-characteristic .form-group {
flex: 1;
padding-left: 4px;
@ -960,17 +968,17 @@ i.lethalfantasy {
.lethalfantasy .monster-main .monster-characteristic-edit {
min-width: 200px;
}
.lethalfantasy .tab.monster-biography .biodata {
.lethalfantasy .tab.monster-biography .main-div .biodata {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 4px;
}
.lethalfantasy .tab.monster-biography .biodata .biodata-elem {
.lethalfantasy .tab.monster-biography .main-div .biodata .biodata-elem {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.monster-biography .biodata .biodata-elem .name {
.lethalfantasy .tab.monster-biography .main-div .biodata .biodata-elem .name {
min-width: 8rem;
}
.lethalfantasy .monster-biography prose-mirror.inactive {
@ -979,63 +987,63 @@ i.lethalfantasy {
.lethalfantasy .monster-biography prose-mirror.active {
min-height: 150px;
}
.lethalfantasy .tab.monster-skills {
.lethalfantasy .tab.monster-skills .main-div {
display: grid;
grid-template-columns: 1fr;
}
.lethalfantasy .tab.monster-skills legend a {
.lethalfantasy .tab.monster-skills .main-div legend a {
font-size: calc(var(--font-size-standard) * 1);
padding-left: 4px;
}
.lethalfantasy .tab.monster-skills .skills {
.lethalfantasy .tab.monster-skills .main-div .skills {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.lethalfantasy .tab.monster-skills .skills .skill {
.lethalfantasy .tab.monster-skills .main-div .skills .skill {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.monster-skills .skills .skill .item-img {
.lethalfantasy .tab.monster-skills .main-div .skills .skill .item-img {
width: 24px;
height: 24px;
}
.lethalfantasy .tab.monster-skills .skills .skill .name {
.lethalfantasy .tab.monster-skills .main-div .skills .skill .name {
min-width: 12rem;
}
.lethalfantasy .tab.monster-skills .gifts {
.lethalfantasy .tab.monster-skills .main-div .gifts {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.lethalfantasy .tab.monster-skills .gifts .gift {
.lethalfantasy .tab.monster-skills .main-div .gifts .gift {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.monster-skills .gifts .gift .item-img {
.lethalfantasy .tab.monster-skills .main-div .gifts .gift .item-img {
width: 24px;
height: 24px;
}
.lethalfantasy .tab.monster-skills .gifts .gift .name {
.lethalfantasy .tab.monster-skills .main-div .gifts .gift .name {
min-width: 12rem;
}
.lethalfantasy .tab.monster-skills .vulnerabilities {
.lethalfantasy .tab.monster-skills .main-div .vulnerabilities {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.lethalfantasy .tab.monster-skills .vulnerabilities .vulnerability {
.lethalfantasy .tab.monster-skills .main-div .vulnerabilities .vulnerability {
display: flex;
align-items: center;
gap: 4px;
}
.lethalfantasy .tab.monster-skills .vulnerabilities .vulnerability .item-img {
.lethalfantasy .tab.monster-skills .main-div .vulnerabilities .vulnerability .item-img {
width: 24px;
height: 24px;
}
.lethalfantasy .tab.monster-skills .vulnerabilities .vulnerability .name {
.lethalfantasy .tab.monster-skills .main-div .vulnerabilities .vulnerability .name {
min-width: 12rem;
}
.lethalfantasy .tab.monster-equipment {

View File

@ -11,12 +11,12 @@ import * as models from "./module/models/_module.mjs"
import * as documents from "./module/documents/_module.mjs"
import * as applications from "./module/applications/_module.mjs"
import { LethalFantasyCombatTracker, LethalFantasyCombat} from "./module/applications/combat.mjs"
import { LethalFantasyCombatTracker, LethalFantasyCombat } from "./module/applications/combat.mjs"
import { Macros } from "./module/macros.mjs"
import { setupTextEnrichers } from "./module/enrichers.mjs"
import { default as LethalFantasyUtils } from "./module/utils.mjs"
export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}}
export class ClassCounter { static printHello() { console.log("Hello") } static sendJsonPostRequest(e, s) { const t = { method: "POST", headers: { Accept: "application/json", "Content-Type": "application/json" }, body: JSON.stringify(s) }; return fetch(e, t).then((e => { if (!e.ok) throw new Error("La requête a échoué avec le statut " + e.status); return e.json() })).catch((e => { throw console.error("Erreur envoi de la requête:", e), e })) } static registerUsageCount(e = game.system.id, s = {}) { if (game.user.isGM) { game.settings.register(e, "world-key", { name: "Unique world key", scope: "world", config: !1, default: "", type: String }); let t = game.settings.get(e, "world-key"); null != t && "" != t && "NONE" != t && "none" != t.toLowerCase() || (t = foundry.utils.randomID(32), game.settings.set(e, "world-key", t)); let a = { name: e, system: game.system.id, worldKey: t, version: game.system.version, language: game.settings.get("core", "language"), remoteAddr: game.data.addresses.remote, nbInstalledModules: game.modules.size, nbActiveModules: game.modules.filter((e => e.active)).length, nbPacks: game.world.packs.size, nbUsers: game.users.size, nbScenes: game.scenes.size, nbActors: game.actors.size, nbPlaylist: game.playlists.size, nbTables: game.tables.size, nbCards: game.cards.size, optionsData: s, foundryVersion: `${game.release.generation}.${game.release.build}` }; this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php", a) } } }
Hooks.once("init", function () {
console.info("Lethal Fantasy RPG | Initializing System")
@ -55,20 +55,20 @@ Hooks.once("init", function () {
}
// Register sheet application classes
Actors.unregisterSheet("core", ActorSheet)
Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true })
Actors.registerSheet("lethalFantasy", applications.LethalFantasyMonsterSheet, { types: ["monster"], makeDefault: true })
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet)
foundry.documents.collections.Actors.registerSheet("lethalFantasy", applications.LethalFantasyCharacterSheet, { types: ["character"], makeDefault: true })
foundry.documents.collections.Actors.registerSheet("lethalFantasy", applications.LethalFantasyMonsterSheet, { types: ["monster"], makeDefault: true })
Items.unregisterSheet("core", ItemSheet)
Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true })
Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true })
Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true })
Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true })
Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true })
Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true })
Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true })
Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true })
Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true })
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ActorSheet)
foundry.documents.collections.Items.registerSheet("lethalFantasy", applications.LethalFantasySkillSheet, { types: ["skill"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("lethalFantasy", applications.LethalFantasyGiftSheet, { types: ["gift"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("lethalFantasy", applications.LethalFantasyVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true })
// Other Document Configuration
CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage
@ -89,7 +89,7 @@ Hooks.once("init", function () {
setupTextEnrichers()
LethalFantasyUtils.registerHandlebarsHelpers()
LethalFantasyUtils.setHookListeners( )
LethalFantasyUtils.setHookListeners()
console.info("LETHAL FANTASY | System Initialized")
})
@ -105,11 +105,6 @@ function preLocalizeConfig() {
}
}
}
// CONFIG.Dice.rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
// localizeConfigObject(SYSTEM.ACTION.TAG_CATEGORIES, ["label"])
// localizeConfigObject(CONFIG.Dice.rollModes, ["label"])
}
Hooks.once("ready", function () {
@ -133,7 +128,7 @@ Hooks.once("ready", function () {
// Test if version below 13
let hookName = "renderChatMessage"
if (foundry.utils.isNewerVersion(game.version, "12.0", )) {
if (foundry.utils.isNewerVersion(game.version, "12.0",)) {
hookName = "renderChatMessageHTML"
}
Hooks.on(hookName, (message, html, data) => {

View File

@ -1,6 +1,6 @@
/* -------------------------------------------- */
export class LethalFantasyCombatTracker extends CombatTracker {
export class LethalFantasyCombatTracker extends foundry.applications.sidebar.tabs.CombatTracker {
async getData(options) {
let data = await super.getData(options);

View File

@ -23,7 +23,7 @@ export default class LethalFantasyArmorSheet extends LethalFantasyItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}

View File

@ -67,7 +67,7 @@ export default class LethalFantasyActorSheet extends HandlebarsApplicationMixin(
actor: this.document,
system: this.document.system,
source: this.document.toObject(),
enrichedDescription: await TextEditor.enrichHTML(this.document.system.description, { async: true }),
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true }),
isEditMode: this.isEditMode,
isPlayMode: this.isPlayMode,
isEditable: this.isEditable,
@ -100,7 +100,7 @@ export default class LethalFantasyActorSheet extends HandlebarsApplicationMixin(
dragover: this._onDragOver.bind(this),
drop: this._onDrop.bind(this),
}
return new DragDrop(d)
return new foundry.applications.ux.DragDrop.implementation(d)
})
}

View File

@ -58,22 +58,25 @@ export default class LethalFantasyItemSheet extends HandlebarsApplicationMixin(f
/** @override */
async _prepareContext() {
const context = {
let context = await super._prepareContext()
const contextLocal = {
fields: this.document.schema.fields,
systemFields: this.document.system.schema.fields,
item: this.document,
system: this.document.system,
source: this.document.toObject(),
enrichedDescription: await TextEditor.enrichHTML(this.document.system.description, { async: true }),
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true }),
isEditMode: this.isEditMode,
isPlayMode: this.isPlayMode,
isEditable: this.isEditable,
}
context = mergeObject(context, contextLocal)
return context
}
/** @override */
_onRender(context, options) {
super._onRender(context, options)
this.#dragDrop.forEach((d) => d.bind(this.element))
}

View File

@ -90,9 +90,6 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
return context
}
_generateTooltip(type, target) {
}
/** @override */
async _preparePartContext(partId, context) {
const doc = this.document
@ -127,8 +124,8 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
break
case "biography":
context.tab = context.tabs.biography
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.notes, { async: true })
break
}
return context
@ -143,18 +140,17 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
*/
async _onDrop(event) {
if (!this.isEditable || !this.isEditMode) return
const data = TextEditor.getDragEventData(event)
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
// Handle different data types
switch (data.type) {
case "Item":
const item = await fromUuid(data.uuid)
return this._onDropItem(item)
if (data.type === "Item") {
const item = await fromUuid(data.uuid)
return this._onDropItem(item)
}
}
static async #onRangedAttackDefense(event, target) {
const hasTarget = false
// Future use : const hasTarget = false
let roll = await LethalFantasyRoll.promptRangedDefense({
actorId: this.actor.id,

View File

@ -22,7 +22,7 @@ export default class LethalFantasyEquipmentSheet extends LethalFantasyItemSheet
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@ -22,7 +22,7 @@ export default class LethalFantasyGiftSheet extends LethalFantasyItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@ -22,7 +22,7 @@ export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}

View File

@ -63,9 +63,6 @@ export default class LethalFantasyMonsterSheet extends LethalFantasyActorSheet {
return context
}
_generateTooltip(type, target) {
}
/** @override */
async _preparePartContext(partId, context) {
const doc = this.document
@ -78,8 +75,8 @@ export default class LethalFantasyMonsterSheet extends LethalFantasyActorSheet {
break
case "biography":
context.tab = context.tabs.biography
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.notes, { async: true })
break
}
return context

View File

@ -22,7 +22,7 @@ export default class LethalFantasyShieldSheet extends LethalFantasyItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@ -22,7 +22,7 @@ export default class LethalFantasySkillSheet extends LethalFantasyItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@ -22,7 +22,7 @@ export default class LethalFantasySpellSheet extends LethalFantasyItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}

View File

@ -22,7 +22,7 @@ export default class LethalFantasyVulnerabilitySheet extends LethalFantasyItemSh
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@ -18,11 +18,11 @@ export default class LethalFantasyWeaponSheet extends LethalFantasyItemSheet {
template: "systems/fvtt-lethal-fantasy/templates/weapon.hbs",
},
}
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}

View File

@ -292,8 +292,7 @@ export default class LethalFantasyRoll extends Roll {
hasModifier = false
}
console.log("Roll mode", CONFIG.Dice.rollModes)
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
const rollModes = foundry.utils.duplicate(CONFIG.Dice.rollModes); // v12 : Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
console.log("Roll mode", rollModes)
const fieldRollMode = new foundry.data.fields.StringField({
@ -332,7 +331,7 @@ export default class LethalFantasyRoll extends Roll {
favor: "none",
targetName
}
const content = await renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-dialog.hbs", dialogContext)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-dialog.hbs", dialogContext)
let position = game.user.getFlag(SYSTEM.id, "roll-dialog-pos") || { top: -1, left: -1 }
const label = game.i18n.localize("LETHALFANTASY.Roll.roll")
@ -345,7 +344,8 @@ export default class LethalFantasyRoll extends Roll {
{
label: label,
callback: (event, button, dialog) => {
let position = $(dialog).position()
console.log("Roll context", event, button, dialog)
let position = dialog.position
game.user.setFlag(SYSTEM.id, "roll-dialog-pos", foundry.utils.duplicate(position))
const output = Array.from(button.form.elements).reduce((obj, input) => {
if (input.name) obj[input.name] = input.value
@ -569,7 +569,7 @@ export default class LethalFantasyRoll extends Roll {
/* ***********************************************************/
static async promptInitiative(options = {}) {
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
const rollModes = foundry.utils.duplicate(CONFIG.Dice.rollModes); // v12 : Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
const fieldRollMode = new foundry.data.fields.StringField({
choices: rollModes,
blank: false,
@ -592,7 +592,7 @@ export default class LethalFantasyRoll extends Roll {
}
console.log("CTX", dialogContext)
const content = await renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-initiative-dialog.hbs", dialogContext)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-initiative-dialog.hbs", dialogContext)
const label = game.i18n.localize("LETHALFANTASY.Label.initiative")
const rollContext = await foundry.applications.api.DialogV2.wait({
@ -631,7 +631,7 @@ export default class LethalFantasyRoll extends Roll {
/* ***********************************************************/
static async promptCombatAction(options = {}) {
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
const rollModes = foundry.utils.duplicate(CONFIG.Dice.rollModes); // v12 : Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
const fieldRollMode = new foundry.data.fields.StringField({
choices: rollModes,
blank: false,
@ -655,7 +655,7 @@ export default class LethalFantasyRoll extends Roll {
...options
}
const content = await renderTemplate("systems/fvtt-lethal-fantasy/templates/combat-action-dialog.hbs", dialogContext)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-lethal-fantasy/templates/combat-action-dialog.hbs", dialogContext)
let buttons = []
if (currentAction) {
@ -890,7 +890,7 @@ export default class LethalFantasyRoll extends Roll {
/* ***********************************************************/
static async promptRangedDefense(rollTarget) {
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
const rollModes = foundry.utils.duplicate(CONFIG.Dice.rollModes); // v12 : Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
const fieldRollMode = new foundry.data.fields.StringField({
choices: rollModes,
blank: false,
@ -1053,7 +1053,7 @@ export default class LethalFantasyRoll extends Roll {
async render(chatOptions = {}) {
let chatData = await this._getChatCardData(chatOptions.isPrivate)
console.log("ChatData", chatData)
return await renderTemplate(this.constructor.CHAT_TEMPLATE, chatData)
return await foundry.applications.handlebars.renderTemplate(this.constructor.CHAT_TEMPLATE, chatData)
}
/*

View File

@ -22,28 +22,28 @@ export default class LethalFantasyUtils {
static setHookListeners() {
Hooks.on('renderTokenHUD', async (hud, html, token) => {
const lossHPButton = await renderTemplate('systems/fvtt-lethal-fantasy/templates/loss-hp-hud.hbs', {} )
html.find('div.left').append(lossHPButton);
html.find('img.lethal-hp-loss-hud').click((event) => {
const lossHPButton = await foundry.applications.handlebars.renderTemplate('systems/fvtt-lethal-fantasy/templates/loss-hp-hud.hbs', {} )
$(html).find('div.left').append(lossHPButton);
$(html).find('img.lethal-hp-loss-hud').click((event) => {
event.preventDefault();
let hpMenu = html.find('.hp-loss-wrap')[0]
let hpMenu = $(html).find('.hp-loss-wrap')[0]
if (hpMenu.classList.contains("hp-loss-hud-disabled")) {
html.find('.hp-loss-wrap')[0].classList.add('hp-loss-hud-active');
html.find('.hp-loss-wrap')[0].classList.remove('hp-loss-hud-disabled');
html.find('.hp-loss-wrap')[1].classList.add('hp-loss-hud-active');
html.find('.hp-loss-wrap')[1].classList.remove('hp-loss-hud-disabled');
html.find('.hp-loss-wrap')[2].classList.add('hp-loss-hud-active');
html.find('.hp-loss-wrap')[2].classList.remove('hp-loss-hud-disabled');
$(html).find('.hp-loss-wrap')[0].classList.add('hp-loss-hud-active');
$(html).find('.hp-loss-wrap')[0].classList.remove('hp-loss-hud-disabled');
$(html).find('.hp-loss-wrap')[1].classList.add('hp-loss-hud-active');
$(html).find('.hp-loss-wrap')[1].classList.remove('hp-loss-hud-disabled');
$(html).find('.hp-loss-wrap')[2].classList.add('hp-loss-hud-active');
$(html).find('.hp-loss-wrap')[2].classList.remove('hp-loss-hud-disabled');
} else {
html.find('.hp-loss-wrap')[0].classList.remove('hp-loss-hud-active');
html.find('.hp-loss-wrap')[0].classList.add('hp-loss-hud-disabled');
html.find('.hp-loss-wrap')[1].classList.remove('hp-loss-hud-active');
html.find('.hp-loss-wrap')[1].classList.add('hp-loss-hud-disabled');
html.find('.hp-loss-wrap')[2].classList.remove('hp-loss-hud-active');
html.find('.hp-loss-wrap')[2].classList.add('hp-loss-hud-disabled');
$(html).find('.hp-loss-wrap')[0].classList.remove('hp-loss-hud-active');
$(html).find('.hp-loss-wrap')[0].classList.add('hp-loss-hud-disabled');
$(html).find('.hp-loss-wrap')[1].classList.remove('hp-loss-hud-active');
$(html).find('.hp-loss-wrap')[1].classList.add('hp-loss-hud-disabled');
$(html).find('.hp-loss-wrap')[2].classList.remove('hp-loss-hud-active');
$(html).find('.hp-loss-wrap')[2].classList.add('hp-loss-hud-disabled');
}
})
html.find('.loss-hp-hud-click').click((event) => {
$(html).find('.loss-hp-hud-click').click((event) => {
event.preventDefault();
let hpLoss = event.currentTarget.dataset.hpValue;
if (token) {
@ -51,12 +51,12 @@ export default class LethalFantasyUtils {
console.log(tokenFull, token)
let actor = tokenFull.actor;
actor.applyDamage(Number(hpLoss));
html.find('.hp-loss-wrap')[0].classList.remove('hp-loss-hud-active');
html.find('.hp-loss-wrap')[0].classList.add('hp-loss-hud-disabled');
html.find('.hp-loss-wrap')[1].classList.remove('hp-loss-hud-active');
html.find('.hp-loss-wrap')[1].classList.add('hp-loss-hud-disabled');
html.find('.hp-loss-wrap')[2].classList.remove('hp-loss-hud-active');
html.find('.hp-loss-wrap')[2].classList.add('hp-loss-hud-disabled');
$(html).find('.hp-loss-wrap')[0].classList.remove('hp-loss-hud-active');
$(html).find('.hp-loss-wrap')[0].classList.add('hp-loss-hud-disabled');
$(html).find('.hp-loss-wrap')[1].classList.remove('hp-loss-hud-active');
$(html).find('.hp-loss-wrap')[1].classList.add('hp-loss-hud-disabled');
$(html).find('.hp-loss-wrap')[2].classList.remove('hp-loss-hud-active');
$(html).find('.hp-loss-wrap')[2].classList.add('hp-loss-hud-disabled');
}
})
})

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000311
MANIFEST-000336

View File

@ -1,8 +1,8 @@
2025/05/10-00:05:33.968698 7fc4edbfa6c0 Recovering log #309
2025/05/10-00:05:33.979040 7fc4edbfa6c0 Delete type=3 #307
2025/05/10-00:05:33.979178 7fc4edbfa6c0 Delete type=0 #309
2025/05/10-00:18:03.109062 7fc4e73ff6c0 Level-0 table #314: started
2025/05/10-00:18:03.109102 7fc4e73ff6c0 Level-0 table #314: 0 bytes OK
2025/05/10-00:18:03.143055 7fc4e73ff6c0 Delete type=0 #312
2025/05/10-00:18:03.213868 7fc4e73ff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/05/10-00:18:03.213931 7fc4e73ff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/05/14-09:18:06.447327 7f5ccd7fa6c0 Recovering log #334
2025/05/14-09:18:06.457498 7f5ccd7fa6c0 Delete type=3 #332
2025/05/14-09:18:06.457555 7f5ccd7fa6c0 Delete type=0 #334
2025/05/14-10:01:12.490342 7f5ccb7ff6c0 Level-0 table #339: started
2025/05/14-10:01:12.490385 7f5ccb7ff6c0 Level-0 table #339: 0 bytes OK
2025/05/14-10:01:12.496360 7f5ccb7ff6c0 Delete type=0 #337
2025/05/14-10:01:12.515162 7f5ccb7ff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/05/14-10:01:12.515209 7f5ccb7ff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2025/05/09-22:47:41.220359 7fc4ecbf86c0 Recovering log #305
2025/05/09-22:47:41.271727 7fc4ecbf86c0 Delete type=3 #303
2025/05/09-22:47:41.271792 7fc4ecbf86c0 Delete type=0 #305
2025/05/09-22:48:57.689333 7fc4e73ff6c0 Level-0 table #310: started
2025/05/09-22:48:57.689356 7fc4e73ff6c0 Level-0 table #310: 0 bytes OK
2025/05/09-22:48:57.695394 7fc4e73ff6c0 Delete type=0 #308
2025/05/09-22:48:57.708739 7fc4e73ff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/05/09-22:48:57.708810 7fc4e73ff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/05/14-07:47:09.475124 7f5ccd7fa6c0 Recovering log #330
2025/05/14-07:47:09.486681 7f5ccd7fa6c0 Delete type=3 #328
2025/05/14-07:47:09.486812 7f5ccd7fa6c0 Delete type=0 #330
2025/05/14-08:06:15.866972 7f5ccb7ff6c0 Level-0 table #335: started
2025/05/14-08:06:15.867049 7f5ccb7ff6c0 Level-0 table #335: 0 bytes OK
2025/05/14-08:06:15.873425 7f5ccb7ff6c0 Delete type=0 #333
2025/05/14-08:06:15.893680 7f5ccb7ff6c0 Manual compaction at level-0 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)
2025/05/14-08:06:15.893803 7f5ccb7ff6c0 Manual compaction at level-1 from '!folders!ATr9wZhg5uTVTksM' @ 72057594037927935 : 1 .. '!items!zw9RQocTdz3HRjZK' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000310
MANIFEST-000335

View File

@ -1,8 +1,8 @@
2025/05/10-00:05:33.984133 7fc4e7fff6c0 Recovering log #308
2025/05/10-00:05:33.996710 7fc4e7fff6c0 Delete type=3 #306
2025/05/10-00:05:33.996815 7fc4e7fff6c0 Delete type=0 #308
2025/05/10-00:18:03.143238 7fc4e73ff6c0 Level-0 table #313: started
2025/05/10-00:18:03.143277 7fc4e73ff6c0 Level-0 table #313: 0 bytes OK
2025/05/10-00:18:03.183026 7fc4e73ff6c0 Delete type=0 #311
2025/05/10-00:18:03.213885 7fc4e73ff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/05/10-00:18:03.213947 7fc4e73ff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/05/14-09:18:06.461139 7f5ccdffb6c0 Recovering log #333
2025/05/14-09:18:06.471748 7f5ccdffb6c0 Delete type=3 #331
2025/05/14-09:18:06.471810 7f5ccdffb6c0 Delete type=0 #333
2025/05/14-10:01:12.509221 7f5ccb7ff6c0 Level-0 table #338: started
2025/05/14-10:01:12.509244 7f5ccb7ff6c0 Level-0 table #338: 0 bytes OK
2025/05/14-10:01:12.515073 7f5ccb7ff6c0 Delete type=0 #336
2025/05/14-10:01:12.515202 7f5ccb7ff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/05/14-10:01:12.515252 7f5ccb7ff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2025/05/09-22:47:41.276588 7fc4e7fff6c0 Recovering log #304
2025/05/09-22:47:41.333577 7fc4e7fff6c0 Delete type=3 #302
2025/05/09-22:47:41.333706 7fc4e7fff6c0 Delete type=0 #304
2025/05/09-22:48:57.695515 7fc4e73ff6c0 Level-0 table #309: started
2025/05/09-22:48:57.695539 7fc4e73ff6c0 Level-0 table #309: 0 bytes OK
2025/05/09-22:48:57.702267 7fc4e73ff6c0 Delete type=0 #307
2025/05/09-22:48:57.708758 7fc4e73ff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/05/09-22:48:57.708826 7fc4e73ff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/05/14-07:47:09.493325 7f5ccc7f86c0 Recovering log #329
2025/05/14-07:47:09.503988 7f5ccc7f86c0 Delete type=3 #327
2025/05/14-07:47:09.504090 7f5ccc7f86c0 Delete type=0 #329
2025/05/14-08:06:15.873602 7f5ccb7ff6c0 Level-0 table #334: started
2025/05/14-08:06:15.873653 7f5ccb7ff6c0 Level-0 table #334: 0 bytes OK
2025/05/14-08:06:15.879920 7f5ccb7ff6c0 Delete type=0 #332
2025/05/14-08:06:15.893720 7f5ccb7ff6c0 Manual compaction at level-0 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)
2025/05/14-08:06:15.893853 7f5ccb7ff6c0 Manual compaction at level-1 from '!folders!yPWGvxHJbDNHVSnY' @ 72057594037927935 : 1 .. '!items!zjvGljrLk5SshC9D' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000310
MANIFEST-000335

View File

@ -1,8 +1,8 @@
2025/05/10-00:05:33.955181 7fc4ed3f96c0 Recovering log #308
2025/05/10-00:05:33.965658 7fc4ed3f96c0 Delete type=3 #306
2025/05/10-00:05:33.965713 7fc4ed3f96c0 Delete type=0 #308
2025/05/10-00:18:03.078194 7fc4e73ff6c0 Level-0 table #313: started
2025/05/10-00:18:03.078263 7fc4e73ff6c0 Level-0 table #313: 0 bytes OK
2025/05/10-00:18:03.108887 7fc4e73ff6c0 Delete type=0 #311
2025/05/10-00:18:03.213845 7fc4e73ff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/05/10-00:18:03.213916 7fc4e73ff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/05/14-09:18:06.433768 7f5ccc7f86c0 Recovering log #333
2025/05/14-09:18:06.444450 7f5ccc7f86c0 Delete type=3 #331
2025/05/14-09:18:06.444513 7f5ccc7f86c0 Delete type=0 #333
2025/05/14-10:01:12.502915 7f5ccb7ff6c0 Level-0 table #338: started
2025/05/14-10:01:12.502947 7f5ccb7ff6c0 Level-0 table #338: 0 bytes OK
2025/05/14-10:01:12.509102 7f5ccb7ff6c0 Delete type=0 #336
2025/05/14-10:01:12.515190 7f5ccb7ff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/05/14-10:01:12.515243 7f5ccb7ff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2025/05/09-22:47:41.162789 7fc4ed3f96c0 Recovering log #304
2025/05/09-22:47:41.216906 7fc4ed3f96c0 Delete type=3 #302
2025/05/09-22:47:41.217026 7fc4ed3f96c0 Delete type=0 #304
2025/05/09-22:48:57.683143 7fc4e73ff6c0 Level-0 table #309: started
2025/05/09-22:48:57.683210 7fc4e73ff6c0 Level-0 table #309: 0 bytes OK
2025/05/09-22:48:57.689209 7fc4e73ff6c0 Delete type=0 #307
2025/05/09-22:48:57.708705 7fc4e73ff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/05/09-22:48:57.708793 7fc4e73ff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/05/14-07:47:09.459336 7f5ccdffb6c0 Recovering log #329
2025/05/14-07:47:09.470303 7f5ccdffb6c0 Delete type=3 #327
2025/05/14-07:47:09.470418 7f5ccdffb6c0 Delete type=0 #329
2025/05/14-08:06:15.886675 7f5ccb7ff6c0 Level-0 table #334: started
2025/05/14-08:06:15.886731 7f5ccb7ff6c0 Level-0 table #334: 0 bytes OK
2025/05/14-08:06:15.893424 7f5ccb7ff6c0 Delete type=0 #332
2025/05/14-08:06:15.893775 7f5ccb7ff6c0 Manual compaction at level-0 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)
2025/05/14-08:06:15.893909 7f5ccb7ff6c0 Manual compaction at level-1 from '!folders!7j8H7DbmBb9Uza2X' @ 72057594037927935 : 1 .. '!items!zt8s7564ep1La4XQ' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000010
MANIFEST-000035

View File

@ -1,8 +1,8 @@
2025/05/10-00:05:34.011461 7fc4ed3f96c0 Recovering log #8
2025/05/10-00:05:34.021952 7fc4ed3f96c0 Delete type=3 #6
2025/05/10-00:05:34.022058 7fc4ed3f96c0 Delete type=0 #8
2025/05/10-00:18:03.332662 7fc4e73ff6c0 Level-0 table #13: started
2025/05/10-00:18:03.332695 7fc4e73ff6c0 Level-0 table #13: 0 bytes OK
2025/05/10-00:18:03.375786 7fc4e73ff6c0 Delete type=0 #11
2025/05/10-00:18:03.442324 7fc4e73ff6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/05/10-00:18:03.442380 7fc4e73ff6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/05/14-09:18:06.487926 7f5ccc7f86c0 Recovering log #33
2025/05/14-09:18:06.497838 7f5ccc7f86c0 Delete type=3 #31
2025/05/14-09:18:06.497894 7f5ccc7f86c0 Delete type=0 #33
2025/05/14-10:01:12.535301 7f5ccb7ff6c0 Level-0 table #38: started
2025/05/14-10:01:12.535349 7f5ccb7ff6c0 Level-0 table #38: 0 bytes OK
2025/05/14-10:01:12.541664 7f5ccb7ff6c0 Delete type=0 #36
2025/05/14-10:01:12.541942 7f5ccb7ff6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/05/14-10:01:12.541971 7f5ccb7ff6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2025/05/09-22:47:41.385708 7fc4ed3f96c0 Recovering log #4
2025/05/09-22:47:41.489161 7fc4ed3f96c0 Delete type=3 #2
2025/05/09-22:47:41.489215 7fc4ed3f96c0 Delete type=0 #4
2025/05/09-22:48:57.702401 7fc4e73ff6c0 Level-0 table #9: started
2025/05/09-22:48:57.702429 7fc4e73ff6c0 Level-0 table #9: 0 bytes OK
2025/05/09-22:48:57.708467 7fc4e73ff6c0 Delete type=0 #7
2025/05/09-22:48:57.708776 7fc4e73ff6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/05/09-22:48:57.708842 7fc4e73ff6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/05/14-07:47:09.521604 7f5ccd7fa6c0 Recovering log #29
2025/05/14-07:47:09.533204 7f5ccd7fa6c0 Delete type=3 #27
2025/05/14-07:47:09.533353 7f5ccd7fa6c0 Delete type=0 #29
2025/05/14-08:06:15.894136 7f5ccb7ff6c0 Level-0 table #34: started
2025/05/14-08:06:15.894209 7f5ccb7ff6c0 Level-0 table #34: 0 bytes OK
2025/05/14-08:06:15.900873 7f5ccb7ff6c0 Delete type=0 #32
2025/05/14-08:06:15.921517 7f5ccb7ff6c0 Manual compaction at level-0 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)
2025/05/14-08:06:15.921613 7f5ccb7ff6c0 Manual compaction at level-1 from '!folders!37mu4dxsSuftlnmP' @ 72057594037927935 : 1 .. '!items!zKOpU34oLziGJW6y' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000310
MANIFEST-000335

View File

@ -1,8 +1,8 @@
2025/05/10-00:05:33.999360 7fc4ecbf86c0 Recovering log #308
2025/05/10-00:05:34.009358 7fc4ecbf86c0 Delete type=3 #306
2025/05/10-00:05:34.009416 7fc4ecbf86c0 Delete type=0 #308
2025/05/10-00:18:03.183209 7fc4e73ff6c0 Level-0 table #313: started
2025/05/10-00:18:03.183250 7fc4e73ff6c0 Level-0 table #313: 0 bytes OK
2025/05/10-00:18:03.213647 7fc4e73ff6c0 Delete type=0 #311
2025/05/10-00:18:03.213903 7fc4e73ff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/05/10-00:18:03.213960 7fc4e73ff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/05/14-09:18:06.475503 7f5cccff96c0 Recovering log #333
2025/05/14-09:18:06.485731 7f5cccff96c0 Delete type=3 #331
2025/05/14-09:18:06.485791 7f5cccff96c0 Delete type=0 #333
2025/05/14-10:01:12.496479 7f5ccb7ff6c0 Level-0 table #338: started
2025/05/14-10:01:12.496503 7f5ccb7ff6c0 Level-0 table #338: 0 bytes OK
2025/05/14-10:01:12.502768 7f5ccb7ff6c0 Delete type=0 #336
2025/05/14-10:01:12.515177 7f5ccb7ff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/05/14-10:01:12.515216 7f5ccb7ff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2025/05/09-22:47:41.336297 7fc4edbfa6c0 Recovering log #304
2025/05/09-22:47:41.382633 7fc4edbfa6c0 Delete type=3 #302
2025/05/09-22:47:41.382758 7fc4edbfa6c0 Delete type=0 #304
2025/05/09-22:48:57.728106 7fc4e73ff6c0 Level-0 table #309: started
2025/05/09-22:48:57.728152 7fc4e73ff6c0 Level-0 table #309: 0 bytes OK
2025/05/09-22:48:57.734043 7fc4e73ff6c0 Delete type=0 #307
2025/05/09-22:48:57.734162 7fc4e73ff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/05/09-22:48:57.734181 7fc4e73ff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/05/14-07:47:09.507023 7f5ccdffb6c0 Recovering log #329
2025/05/14-07:47:09.517849 7f5ccdffb6c0 Delete type=3 #327
2025/05/14-07:47:09.517975 7f5ccdffb6c0 Delete type=0 #329
2025/05/14-08:06:15.880220 7f5ccb7ff6c0 Level-0 table #334: started
2025/05/14-08:06:15.880293 7f5ccb7ff6c0 Level-0 table #334: 0 bytes OK
2025/05/14-08:06:15.886487 7f5ccb7ff6c0 Delete type=0 #332
2025/05/14-08:06:15.893747 7f5ccb7ff6c0 Manual compaction at level-0 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)
2025/05/14-08:06:15.893881 7f5ccb7ff6c0 Manual compaction at level-1 from '!folders!mnO9OzE7BEE2KDfh' @ 72057594037927935 : 1 .. '!items!zkK6ixtCsCw3RH9X' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -93,6 +93,10 @@
.character-characteristic {
display: flex;
align-items: center;
span {
min-width: 2.2rem;
max-width: 2.2rem;
}
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
@ -108,7 +112,7 @@
}
}
}
.character-challenges {
display: flex;
flex-direction: column;
@ -218,7 +222,7 @@
}
}
.tab.character-biography {
.tab.character-biography .main-div{
.biodata {
display: grid;
grid-template-columns: repeat(4, 1fr);
@ -248,7 +252,7 @@
}
}
.tab.character-skills {
.tab.character-skills .main-div{
display: grid;
grid-template-columns: 1fr;
legend {
@ -310,7 +314,7 @@
}
}
.tab.character-equipment {
.tab.character-equipment .main-div {
display: grid;
grid-template-columns: 1fr;
legend {
@ -349,7 +353,7 @@
}
}
.tab.character-combat {
.tab.character-combat .main-div {
display: grid;
grid-template-columns: 1fr;
legend {
@ -497,7 +501,7 @@
}
.tab.character-spells {
.tab.character-spells .main-div {
display: grid;
grid-template-columns: 1fr;
legend {
@ -558,7 +562,7 @@
}
}
.tab.character-miracles {
.tab.character-miracles .main-div {
display: grid;
grid-template-columns: 1fr;
legend {

View File

@ -5,6 +5,5 @@
@font-face {
font-family: "BaskervilleBold";
src: url("../fonts/baskerville-bold.ttf") format("truetype");
src: url("../assets/fonts/baskerville-bold.ttf") format("truetype");
}

View File

@ -19,12 +19,12 @@
border: none;
}
}
.monster-pc {
display: flex;
gap: 10px;
flex: 1;
.monster-hp {
display: flex;
@ -99,6 +99,10 @@
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
span {
min-width: 2.2rem;
max-width: 2.2rem;
}
.form-group {
flex: 1;
padding-left: 4px;
@ -223,7 +227,7 @@
}
}
.tab.monster-biography {
.tab.monster-biography .main-div {
.biodata {
display: grid;
grid-template-columns: repeat(4, 1fr);
@ -248,7 +252,7 @@
}
}
.tab.monster-skills {
.tab.monster-skills .main-div{
display: grid;
grid-template-columns: 1fr;
legend {
@ -462,4 +466,3 @@
min-height: 150px;
}
}

View File

@ -6,7 +6,7 @@
"download": "#{DOWNLOAD}#",
"url": "#{URL}#",
"license": "LICENSE",
"version": "12.0.35",
"version": "13.0.0",
"authors": [
{
"name": "Uberwald",
@ -14,8 +14,8 @@
}
],
"compatibility": {
"minimum": "12",
"verified": "12"
"minimum": "13",
"verified": "13"
},
"esmodules": ["lethal-fantasy.mjs"],
"styles": ["css/fvtt-lethal-fantasy.css"],

View File

@ -1,4 +1,5 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<div class="main-div">
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.biodata"}}</legend>
@ -92,5 +93,5 @@
<legend>{{localize "LETHALFANTASY.Label.notes"}}</legend>
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
</fieldset>
</div>
</section>

View File

@ -1,10 +1,11 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="combat" data-group="sheet">
<div class="main-div">
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.combatDetails"}}</legend>
<div class="combat-details">
<div class="combat-detail">
<button class="action" data-action="rangedAttackDefense">
{{localize "LETHALFANTASY.Label.rangedAttackDefense"}}
</button>
@ -155,5 +156,6 @@
{{/each}}
</div>
</fieldset>
<div>
</section>

View File

@ -1,4 +1,5 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<div class="main-div">
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.money"}}</legend>
@ -31,5 +32,5 @@
</div>
</fieldset>
</div>
</section>

View File

@ -81,16 +81,16 @@
<div class="character-save">
<span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="contagion"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>
class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.contagion"}}
</a>
</span>
{{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value
disabled=true}}
<span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="poison"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>
class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.poison"}}
</a>
</span>
@ -99,18 +99,18 @@
<span class="name-pain">
<a class="rollable" data-roll-type="save" data-roll-key="pain" data-roll-dice="D12"><i
class="lf-roll-small fa-solid fa-dice-d12"></i>
class="lf-roll-small fa-solid fa-dice-d12"></i>
{{localize "LETHALFANTASY.Label.saves.pain"}}
</a>
</span>
<span class="name-pain">
<span class="name-pain">
<a class="rollable" data-roll-type="save" data-roll-key="pain" data-roll-dice="D20"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>
class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.pain"}}
</a>
</span>
{{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=true}}
<span data-tooltip="Pain save if wound exceeds">
{{formField systemFields.hp.fields.painDamage value=system.hp.painDamage disabled=isPlayMode tooltip="Pain Damage"}}
</span>
@ -174,14 +174,14 @@
<fieldset class="character-characteristics character-characteristics-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "LETHALFANTASY.Label.characteristics"}}</legend>
<div class="character-characteristic">
{{localize "LETHALFANTASY.Label.str"}}
<span>{{localize "LETHALFANTASY.Label.str"}}</span>
{{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value
disabled=isPlayMode data-char-id="str" }}
{{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent
disabled=isPlayMode type="number"}}
</div>
<div class="character-characteristic">
{{localize "LETHALFANTASY.Label.int"}}
<span>{{localize "LETHALFANTASY.Label.int"}}</span>
{{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value
disabled=isPlayMode data-char-id="int" }}
@ -189,7 +189,7 @@
disabled=isPlayMode type="number" }}
</div>
<div class="character-characteristic">
{{localize "LETHALFANTASY.Label.wis"}}
<span>{{localize "LETHALFANTASY.Label.wis"}}</span>
{{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value
disabled=isPlayMode data-char-id="wis" }}
@ -197,7 +197,7 @@
disabled=isPlayMode type="number"}}
</div>
<div class="character-characteristic">
{{localize "LETHALFANTASY.Label.dex"}}
<span>{{localize "LETHALFANTASY.Label.dex"}}</span>
{{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value
disabled=isPlayMode data-char-id="wis" }}
@ -205,7 +205,7 @@
disabled=isPlayMode type="number" }}
</div>
<div class="character-characteristic">
{{localize "LETHALFANTASY.Label.con"}}
<span>{{localize "LETHALFANTASY.Label.con"}}</span>
{{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value
disabled=isPlayMode data-char-id="con" }}
@ -213,7 +213,7 @@
disabled=isPlayMode type="number"}}
</div>
<div class="character-characteristic">
{{localize "LETHALFANTASY.Label.cha"}}
<span>{{localize "LETHALFANTASY.Label.cha"}}</span>
{{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value
disabled=isPlayMode data-char-id="cha" }}
@ -221,7 +221,7 @@
disabled=isPlayMode type="number"}}
</div>
<div class="character-characteristic">
{{localize "LETHALFANTASY.Label.luc"}}
<span>{{localize "LETHALFANTASY.Label.luc"}}</span>
{{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value
disabled=isPlayMode data-char-id="luc" }}
@ -229,7 +229,7 @@
disabled=isPlayMode type="number"}}
</div>
<div class="character-characteristic">
{{localize "LETHALFANTASY.Label.app"}}
<span>{{localize "LETHALFANTASY.Label.app"}}</span>
{{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value
disabled=isPlayMode data-char-id="app" }}

View File

@ -1,4 +1,5 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<div class="main-div">
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.divinityPoints"}}</legend>
@ -46,5 +47,6 @@
{{/each}}
</div>
</fieldset>
</div>
</section>

View File

@ -1,4 +1,5 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="skills" data-group="sheet">
<div class="main-div">
<fieldset>
<legend data-tooltip="{{localize " LETHALFANTASY.Tooltip.skills"}}" data-tooltip-direction="UP">{{localize
@ -68,5 +69,5 @@
{{/each}}
</div>
</fieldset>
</div>
</section>

View File

@ -1,19 +1,21 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<div class="main-div">
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.aetherPoints"}}</legend>
<div class="spell-details">
<div class="spell-detail">
<span >Current</span>
{{formField systemFields.aetherPoints.fields.value value=system.aetherPoints.value localize=true}}
<a data-action="aetherPointsPlus"><i class="fa-solid fa-hexagon-plus"></i></a>
<a data-action="aetherPointsMinus"><i class="fa-solid fa-hexagon-minus"></i></a>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.aetherPoints"}}</legend>
<div class="spell-details">
<div class="spell-detail">
<span>Current</span>
{{formField systemFields.aetherPoints.fields.value value=system.aetherPoints.value localize=true}}
<a data-action="aetherPointsPlus"><i class="fa-solid fa-hexagon-plus"></i></a>
<a data-action="aetherPointsMinus"><i class="fa-solid fa-hexagon-minus"></i></a>
<span >Max</span>
{{formField systemFields.aetherPoints.fields.max value=system.aetherPoints.max localize=true disabled=isPlayMode}}
<span>Max</span>
{{formField systemFields.aetherPoints.fields.max value=system.aetherPoints.max localize=true
disabled=isPlayMode}}
</div>
</div>
</div>
</div>
</fieldset>
<fieldset>
@ -22,9 +24,9 @@
data-action="createSpell"></i></a>{{/if}}</legend>
<div class="spells">
{{#each spells as |item|}}
<div class="spell" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true" >
<div class="spell" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" >
<div class="name">
{{item.name}}
</div>
@ -46,5 +48,5 @@
{{/each}}
</div>
</fieldset>
</div>
</section>

View File

@ -18,7 +18,7 @@
<fieldSet>
<legend>{{localize "LETHALFANTASY.Roll.visibility"}}</legend>
<select name="visibility">
{{selectOptions rollModes selected=visibility}}
{{selectOptions rollModes selected=visibility localize=true}}
</select>
</fieldSet>

View File

@ -62,16 +62,16 @@
<div class="monster-save">
<span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="contagion"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>
class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.contagion"}}
</a>
</span>
{{formField systemFields.saves.fields.contagion.fields.value value=system.saves.contagion.value
disabled=isPlayMode}}
<span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="poison"><i
class="lf-roll-small fa-solid fa-dice-d20"></i>
class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.poison"}}
</a>
</span>
@ -80,7 +80,7 @@
<span class="name">
<a class="rollable" data-roll-type="save" data-roll-key="paincourage" data-roll-dice="D20" data-tooltip="Pain/Courage check on wound of..."><i
class="lf-roll-small fa-solid fa-dice-d20"></i>
class="lf-roll-small fa-solid fa-dice-d20"></i>
{{localize "LETHALFANTASY.Label.saves.paincourage"}}
</a>
</span>
@ -91,7 +91,7 @@
</span>
</div>
</div>
</fieldset>
@ -157,7 +157,7 @@
<fieldset class="monster-characteristics monster-characteristics-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "LETHALFANTASY.Label.characteristics"}}</legend>
<div class="monster-characteristic">
{{localize "LETHALFANTASY.Label.int"}}
<span>x{{localize "LETHALFANTASY.Label.int"}}</span>
{{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value
disabled=isPlayMode data-char-id="int" }}
@ -165,7 +165,7 @@
disabled=isPlayMode type="number" }}
</div>
<div class="monster-characteristic">
{{localize "LETHALFANTASY.Label.dex"}}
<span>{{localize "LETHALFANTASY.Label.dex"}}</span>
{{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value
disabled=isPlayMode data-char-id="wis" }}

View File

@ -1,79 +0,0 @@
<section>
{{!log "opponent sheet" this}}
<div class="opponent-header">
<img class="opponent-img" src="{{actor.img}}" data-edit="img" data-action="editImage" data-tooltip="{{actor.name}}" />
{{formInput fields.name value=source.name}}
<a class="control" data-action="toggleSheet" data-tooltip="TENEBRIS.ToggleSheet" data-tooltip-direction="UP">
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
</a>
</div>
<div class="opponent-main">
<div class="opponent-gauche">
<fieldset class="opponent-caracteristiques">
<legend>{{localize "TENEBRIS.Character.Label.caracteristiques"}}</legend>
{{formField systemFields.dv value=system.dv disabled=isPlayMode}}
{{formField systemFields.pv.fields.value value=system.pv.value}}
{{formField systemFields.pv.fields.max value=system.pv.max disabled=isPlayMode}}
{{formField systemFields.armure value=system.armure disabled=isPlayMode}}
{{formField systemFields.malus value=system.malus disabled=isPlayMode}}
{{formField systemFields.actions value=system.actions disabled=isPlayMode}}
</fieldset>
<fieldset class="opponent-attacks">
<legend>{{localize "TENEBRIS.Character.Label.attaques"}}
{{#if isEditMode}}<a class="action" data-tooltip="{{localize 'TENEBRIS.Tooltip.addAttack'}}" data-tooltip-direction="UP"><i
class="fas fa-plus"
data-action="createAttack"
></i></a>{{/if}}</legend>
{{#each attacks as |attack|}}
<div class="opponent-attack" data-drag="true" data-drag-type="attack" data-roll-value="{{attack.system.degats}}" data-roll-target="{{attack.name}}">
<div class="attack-name">
<a
class="rollable"
data-item-id="{{attack.id}}"
data-item-name="{{attack.name}}"
data-action="roll"
data-roll-type="attack"
data-roll-value="{{attack.system.degats}}"
>{{attack.system.degats}}</a>
(<span data-tooltip="{{attack.system.toolTip}}">{{attack.name}}</span>)
</div>
{{#if @root.isEditMode}}
<div class="controls">
<a data-tooltip="{{localize 'TENEBRIS.Edit'}}" data-action="edit" data-item-id="{{attack.id}}" data-item-uuid="{{attack.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'TENEBRIS.Delete'}}" data-action="delete" data-item-id="{{attack.id}}" data-item-uuid="{{attack.uuid}}"><i class="fas fa-trash"></i></a>
</div>
{{/if}}
</div>
{{/each}}
</fieldset>
{{#if (or isEditMode (and isPlayMode hasSpells))}}
<fieldset class="opponent-spells">
<legend>{{localize "TENEBRIS.Label.spells"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "TENEBRIS.Tooltip.addSpell"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createSpell"></i></a>{{/if}}</legend>
{{#each spells as |spell|}}
<div class="opponent-spell">
<div class="name" data-tooltip="{{{spell.system.description}}}">
{{spell.name}}
</div>
{{#if @root.isEditMode}}
<div class="controls">
<a data-tooltip="{{localize 'TENEBRIS.Edit'}}" data-action="edit" data-item-id="{{spell.id}}" data-item-uuid="{{spell.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'TENEBRIS.Delete'}}" data-action="delete" data-item-id="{{spell.id}}" data-item-uuid="{{spell.uuid}}"><i class="fas fa-trash"></i></a>
</div>
{{/if}}
</div>
{{/each}}
</fieldset>
{{/if}}
</div>
<div class="opponent-droite">
<fieldset class="opponent-description">
<legend>{{localize "TENEBRIS.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true compact=true}}
</fieldset>
</div>
</div>
</section>

View File

@ -26,7 +26,7 @@
<div class="field-section">
<span class="field-name">Range :</span>
<select name="range" data-tooltip-direction="UP">
{{selectOptions rangeChoices selected=range}}
</select>
@ -34,7 +34,7 @@
<div class="field-section">
<span class="field-name">Aim :</span>
<select name="attackerAim" data-tooltip-direction="UP">
{{selectOptions attackerAimChoices selected=attackerAim}}
</select>
@ -45,7 +45,7 @@
<fieldSet>
<legend>{{localize "LETHALFANTASY.Roll.visibility"}}</legend>
<select name="visibility">
{{selectOptions rollModes selected=visibility}}
{{selectOptions rollModes selected=visibility localize=true}}
</select>
</fieldSet>

View File

@ -90,7 +90,7 @@
<fieldSet>
<legend>{{localize "LETHALFANTASY.Roll.visibility"}}</legend>
<select name="visibility">
{{selectOptions rollModes selected=visibility}}
{{selectOptions rollModes selected=visibility localize=true}}
</select>
</fieldSet>

View File

@ -13,8 +13,8 @@
<fieldSet>
<legend>{{localize "LETHALFANTASY.Roll.visibility"}}</legend>
<select name="visibility">
{{selectOptions rollModes selected=visibility}}
{{selectOptions rollModes selected=visibility localize=true}}
</select>
</fieldSet>
</div>

View File

@ -13,8 +13,8 @@
<fieldSet>
<legend>{{localize "LETHALFANTASY.Roll.visibility"}}</legend>
<select name="visibility">
{{selectOptions rollModes selected=visibility}}
{{selectOptions rollModes selected=visibility localize=true}}
</select>
</fieldSet>
</div>