Update item sheets

This commit is contained in:
LeRatierBretonnien 2024-12-04 03:06:33 +01:00
parent 91c468e736
commit 1cc3a0bc21
26 changed files with 6117 additions and 772 deletions

View File

@ -13,7 +13,6 @@ import * as applications from "./module/applications/_module.mjs"
import { handleSocketEvent } from "./module/socket.mjs"
import { Macros } from "./module/macros.mjs"
import { initControlButtons } from "./module/control-buttons.mjs"
import { setupTextEnrichers } from "./module/enrichers.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)}}}
@ -82,9 +81,6 @@ Hooks.once("init", function () {
// Activate socket handler
game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent)
initControlButtons()
setupTextEnrichers()
// Gestion des jets de dés depuis les journaux
@ -97,7 +93,6 @@ Hooks.once("init", function () {
const target = anchor.dataset.rollTarget
const title = anchor.dataset.rollTitle
const avantage = anchor.dataset.rollAvantage
applications.CthulhuEternalManager.askRollForAll(type, target, title, avantage)
})
console.info("CTHULHU ETERNAL | System Initialized")
@ -114,28 +109,14 @@ 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 () {
console.info("CTHULHU ETERNAL | Ready")
game.system.applicationManager = new applications.CthulhuEternalManager()
if (game.user.isGM) {
//game.system.applicationManager.render(true)
}
if (!SYSTEM.DEV_MODE) {
registerWorldCount("fvtt-cthulhu-eternal")
}
ClassCounter.registerUsageCount("fvtt-cthulhu-eternal", {})
_showUserGuide()
/**
*
*/
/* Display the user guide */
async function _showUserGuide() {
if (game.user.isGM) {
const newVer = game.system.version

View File

@ -40,28 +40,18 @@
"int": {
"label": "Intelligence"
},
"wis": {
"label": "Wisdom"
"pow": {
"label": "Power"
},
"con": {
"label": "Constitution"
},
"char": {
"label": "Charisma"
},
"app": {
"label": "Appearance"
}
}
},
"Skill": {
"Category": {
"layperson": "Layperson",
"professional": "Professional",
"weapon": "Weapon",
"armor": "Armor",
"resist": "Resist"
},
"FIELDS": {
"diceEvolved": {
"label": "Can increase on failure"
@ -82,22 +72,16 @@
},
"Gear": {
"FIELDS": {
"cost": {
"label": "Cost"
"resourceLevel": {
"label": "Resource level"
},
"money": {
"label": "Money unit"
},
"description": {
"label": "Description"
"settings": {
"label": "Settings era"
}
}
},
"Injury": {
"FIELDS": {
"cost": {
"label": "Cost"
},
"description": {
"label": "Description"
}
@ -109,175 +93,52 @@
"ranged": "Ranged"
},
"FIELDS": {
"settings": {
"label": "Settings era"
},
"weaponType": {
"label": "Type"
},
"damageType": {
"typeP": {
"label": "Piercing"
},
"typeB": {
"label": "Bashing"
},
"typeS": {
"label": "Slashing"
}
},
"damage": {
"damageS": {
"label": "Small"
},
"damageM": {
"label": "Medium"
}
"label": "Damage"
},
"hands": {
"label": "Hands"
"description": {
"label": "Description"
},
"defenseMax": {
"label": "Defense max"
"baseRange": {
"label": "Base range"
},
"secondsToAttack": {
"label": "Seconds to attack"
"rangeUnit": {
"label": "Range unit"
},
"speed": {
"simpleAim": {
"label": "Simple aim"
},
"carefulAim": {
"label": "Careful aim"
},
"focusedAim": {
"label": "Focused aim"
}
"killRadius": {
"label": "Kill radius"
},
"defense": {
"label": "Defense"
"lethality": {
"label": "Lethality"
},
"range": {
"pointBlank": {
"label": "Point blank"
},
"short": {
"label": "Short"
},
"medium": {
"label": "Medium"
},
"long": {
"label": "Long"
},
"extreme": {
"label": "Extreme"
},
"outOfSkill": {
"label": "Out of skill"
}
},
"load": {
"label": "Load"
},
"cost": {
"label": "Cost"
},
"money": {
"label": "Money unit"
"resourceLevel": {
"label": "Resource level"
}
}
},
"Armor": {
"Category": {
"light": "Light",
"medium": "Medium",
"heavy": "Heavy"
},
"FIELDS": {
"armortype": {
"label": "Category"
"settings": {
"label": "Settings Era"
},
"defense": {
"label": "Defense"
"protection": {
"label": "Protection"
},
"movementreduction": {
"label": "Movement reduction"
},
"hp": {
"label": "HP"
},
"damagereduction": {
"label": "Damage reduction"
},
"load": {
"label": "Load"
},
"cost": {
"label": "Cost"
},
"money": {
"label": "Money unit"
"resourceLevel": {
"label": "Resource level"
}
}
},
"Motivation": {
"FIELDS": {
"defense": {
"label": "Defense"
},
"movementreduction": {
"label": "Movement reduction"
},
"hp": {
"label": "HP"
},
"standing": {
"min":{
"label": "Min"
},
"max":{
"label": "Max"
}
},
"crouching": {
"min":{
"label": "Min"
},
"max":{
"label": "Max"
}
},
"destruction": {
"bashing": {
"label": "Bashing"
},
"slashing": {
"label": "Slashing"
},
"piercing": {
"label": "Piercing"
}
},
"autodestruction": {
"bashing": {
"label": "Bashing"
},
"slashing": {
"label": "Slashing"
},
"piercing": {
"label": "Piercing"
}
},
"damagereduction": {
"label": "Damage reduction"
},
"load": {
"label": "Load"
},
"cost": {
"label": "Cost"
},
"money": {
"label": "Money unit"
"description": {
"label": "Description"
}
}
},
@ -285,51 +146,19 @@
"FIELDS": {
"description": {
"label": "Description"
},
"components": {
"verbal": {
"label": "Verbal"
},
"somatic": {
"label": "Somatic"
},
"material": {
"label": "Material"
}
},
"level": {
"label": "Level"
},
"cost" : {
"label": "Cost"
},
"castingTime": {
"label": "Casting time"
},
"range": {
"label": "Range"
},
"duration": {
"label": "Duration"
},
"areaAffected": {
"label": "Area affected"
},
"savingThrow": {
"label": "Saving throw"
},
"extraAetherPoints": {
"label": "Extra aether points"
}
}
},
"Bond": {
"FIELDS": {
"cost": {
"label": "Cost"
"bondType": {
"label": "Type"
},
"description": {
"label": "Description"
},
"value": {
"label": "Value"
}
}
},
@ -343,6 +172,10 @@
}
}
},
"BondType": {
"individual": "Individual",
"community": "Community"
},
"Label": {
"description": "Description",
"total": "Total",

View File

@ -8,4 +8,3 @@ export { default as CthulhuEternalArmorSheet } from "./sheets/armor-sheet.mjs"
export { default as CthulhuEternalMentalDisorderSheet } from "./sheets/mentaldisorder-sheet.mjs"
export { default as CthulhuEternalGearSheet } from "./sheets/gear-sheet.mjs"
export { default as CthulhuEternalMotivationSheet } from "./sheets/motivation-sheet.mjs"
export { default as CthulhuEternalManager } from "./manager.mjs"

View File

@ -1,142 +0,0 @@
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api
import { SYSTEM } from "../config/system.mjs"
/**
* An application for configuring the permissions which are available to each User role.
* @extends ApplicationV2
* @mixes HandlebarsApplication
* @alias PermissionConfig
*/
export default class CthulhuEternalManager extends HandlebarsApplicationMixin(ApplicationV2) {
static DEFAULT_OPTIONS = {
id: "cthulhueternal-application-manager",
tag: "form",
window: {
contentClasses: ["cthulhueternal-manager"],
title: "CTHULHUETERNAL.Manager.title",
resizable: true,
},
position: {
width: "auto",
height: "auto",
top: 80,
left: 400,
},
form: {
closeOnSubmit: true,
},
actions: {
resourceAll: CthulhuEternalManager.#onResourceAll,
resourceOne: CthulhuEternalManager.#onResourceOne,
saveAll: CthulhuEternalManager.#onSaveAll,
saveOne: CthulhuEternalManager.#onSaveOne,
openSheet: CthulhuEternalManager.#onOpenSheet,
},
}
/** @override */
static PARTS = {
main: {
template: "systems/fvtt-cthulhu-eternal/templates/manager.hbs",
},
}
/* -------------------------------------------- */
/* Rendering */
/* -------------------------------------------- */
/** @override */
async _prepareContext(_options = {}) {
return {
players: game.users.filter((u) => u.hasPlayerOwner && u.active),
}
}
static async #onResourceAll(event, target) {
const value = event.target.dataset.resource
CthulhuEternalManager.askRollForAll("resource", value)
}
static async #onSaveAll(event, target) {
const value = event.target.dataset.save
CthulhuEternalManager.askRollForAll("save", value)
}
static #onResourceOne(event, target) {
const value = event.target.dataset.resource
const recipient = event.target.parentElement.dataset.userId
const name = event.target.parentElement.dataset.characterName
CthulhuEternalManager.askRollForOne("resource", value, recipient, name)
}
static async #onSaveOne(event, target) {
const value = event.target.dataset.save
const recipient = event.target.parentElement.dataset.userId
const name = event.target.parentElement.dataset.characterName
CthulhuEternalManager.askRollForOne("save", value, recipient, name)
}
static #onOpenSheet(event, target) {
const characterId = event.target.dataset.characterId
game.actors.get(characterId).sheet.render(true)
}
static async askRollForAll(type, value, title = null, avantage = null) {
let label = game.i18n.localize(`CTHULHUETERNAL.Manager.${value}`)
let text = game.i18n.format("CTHULHUETERNAL.Chat.askRollForAll", { value: label })
if (avantage) {
switch (avantage) {
case "++":
text += ` ${game.i18n.localize("CTHULHUETERNAL.Roll.doubleAvantage")}`
break
case "+":
text += ` ${game.i18n.localize("CTHULHUETERNAL.Roll.avantage")}`
break
case "-":
text += ` ${game.i18n.localize("CTHULHUETERNAL.Roll.desavantage")}`
break
case "--":
text += ` ${game.i18n.localize("CTHULHUETERNAL.Roll.doubleDesavantage")}`
break
default:
break
}
}
ChatMessage.create({
user: game.user.id,
content: await renderTemplate(`systems/fvtt-cthulhu-eternal/templates/chat-ask-roll.hbs`, {
title: title !== null ? title : "",
text: text,
rollType: type,
value: value,
avantage: avantage,
}),
flags: { tenebris: { typeMessage: "askRoll" } },
})
}
static async askRollForOne(type, value, recipient, name) {
let label = game.i18n.localize(`CTHULHUETERNAL.Manager.${value}`)
const text = game.i18n.format("CTHULHUETERNAL.Chat.askRollForOne", { value: label, name: name })
game.socket.emit(`system.${SYSTEM.id}`, {
action: "askRoll",
data: {
userId: recipient,
},
})
ChatMessage.create({
user: game.user.id,
content: await renderTemplate(`systems/fvtt-cthulhu-eternal/templates/chat-ask-roll.hbs`, {
text: text,
rollType: type,
value: value,
}),
whisper: [recipient],
flags: { tenebris: { typeMessage: "askRoll" } },
})
}
}

View File

@ -1,5 +1,5 @@
export const BOND_TYPE = {
"individual": "CTHULHUETERNAL.Weapon.WeaponType.melee",
"community": "CTHULHUETERNAL.Weapon.WeaponType.ranged"
"individual": "CTHULHUETERNAL.BondType.individual",
"community": "CTHULHUETERNAL.BondType.community"
}

View File

@ -7,9 +7,9 @@ export const CHARACTERISTICS = Object.freeze({
id: "int",
label: "CTHULHUETERNAL.Character.int.label"
},
wis: {
id: "wis",
label: "CTHULHUETERNAL.Character.wis.label"
pow: {
id: "pow",
label: "CTHULHUETERNAL.Character.pow.label"
},
dex: {
id: "dex",
@ -22,36 +22,6 @@ export const CHARACTERISTICS = Object.freeze({
cha: {
id: "cha",
label: "CTHULHUETERNAL.Character.cha.label"
},
app: {
id: "app",
label: "CTHULHUETERNAL.Character.app.label"
},
})
export const SAVES = Object.freeze({
str: {
id: "str",
label: "CTHULHUETERNAL.Character.str.label"
},
agility: {
id: "agility",
label: "CTHULHUETERNAL.Character.agility.label"
},
dying: {
id: "dying",
label: "CTHULHUETERNAL.Character.dying.label"
},
will: {
id: "will",
label: "CTHULHUETERNAL.Character.will.label"
},
dodge: {
id: "dodge",
label: "CTHULHUETERNAL.Character.dodge.label"
},
toughness: {
id: "toughness",
label: "CTHULHUETERNAL.Character.toughness.label"
}
})

View File

@ -1,44 +0,0 @@
/**
* Menu spécifique au système
*/
export function initControlButtons() {
CONFIG.Canvas.layers.tenebris = { layerClass: ControlsLayer, group: "primary" }
Hooks.on("getSceneControlButtons", (btns) => {
let menu = []
menu.push({
name: "fortune",
title: game.i18n.localize("TENEBRIS.Fortune.title"),
icon: "fa-solid fa-clover",
button: true,
onClick: () => {
if (!foundry.applications.instances.has("tenebris-application-fortune")) {
game.system.applicationFortune.render(true)
} else game.system.applicationFortune.close()
},
})
if (game.user.isGM) {
menu.push({
name: "gm-manager",
title: game.i18n.localize("TENEBRIS.Manager.title"),
icon: "fa-solid fa-users",
button: true,
onClick: () => {
if (!foundry.applications.instances.has("tenebris-application-manager")) {
game.system.applicationManager.render(true)
} else game.system.applicationManager.close()
},
})
}
btns.push({
name: "tenebris",
title: "Cthulhu CthulhuEternal",
icon: "tenebris",
layer: "tenebris",
tools: menu,
})
})
}

View File

@ -105,21 +105,21 @@ export default class CthulhuEternalRoll extends Roll {
switch (this.type) {
case ROLL_TYPE.SAVE:
const saveLabel = game.i18n.localize(`TENEBRIS.Character.FIELDS.caracteristiques.${this.target}.valeur.label`)
text = game.i18n.format("TENEBRIS.Roll.save", { save: saveLabel })
const saveLabel = game.i18n.localize(`CTHULHUETERNAL.Character.FIELDS.caracteristiques.${this.target}.valeur.label`)
text = game.i18n.format("CTHULHUETERNAL.Roll.save", { save: saveLabel })
text = text.concat("<br>").concat(`Seuil : ${this.treshold}`)
break
case ROLL_TYPE.RESOURCE:
const resourceLabel = game.i18n.localize(`TENEBRIS.Character.FIELDS.ressources.${this.target}.valeur.label`)
text = game.i18n.format("TENEBRIS.Roll.resource", { resource: resourceLabel })
const resourceLabel = game.i18n.localize(`CTHULHUETERNAL.Character.FIELDS.ressources.${this.target}.valeur.label`)
text = game.i18n.format("CTHULHUETERNAL.Roll.resource", { resource: resourceLabel })
break
case ROLL_TYPE.DAMAGE:
const damageLabel = this.target
text = game.i18n.format("TENEBRIS.Roll.damage", { item: damageLabel })
text = game.i18n.format("CTHULHUETERNAL.Roll.damage", { item: damageLabel })
break
case ROLL_TYPE.ATTACK:
const attackLabel = this.target
text = game.i18n.format("TENEBRIS.Roll.attack", { item: attackLabel })
text = game.i18n.format("CTHULHUETERNAL.Roll.attack", { item: attackLabel })
break
}
return text
@ -131,7 +131,7 @@ export default class CthulhuEternalRoll extends Roll {
* @returns {string} A formatted string containing the value, help, hindrance, and modifier.
*/
_createIntroTextTooltip() {
let tooltip = game.i18n.format("TENEBRIS.Tooltip.saveIntroTextTooltip", { value: this.value, aide: this.aide, gene: this.gene, modificateur: this.modificateur })
let tooltip = game.i18n.format("CTHULHUETERNAL.Tooltip.saveIntroTextTooltip", { value: this.value, aide: this.aide, gene: this.gene, modificateur: this.modificateur })
if (this.hasTarget) {
tooltip = tooltip.concat(`<br>Cible : ${this.targetName}`)
}
@ -160,9 +160,9 @@ export default class CthulhuEternalRoll extends Roll {
// Formula for a resource roll
if (options.rollType === ROLL_TYPE.RESOURCE) {
let ressource = game.i18n.localize(`TENEBRIS.Character.FIELDS.ressources.${options.rollTarget}.valeur.label`)
let ressource = game.i18n.localize(`CTHULHUETERNAL.Character.FIELDS.ressources.${options.rollTarget}.valeur.label`)
if (formula === "0" || formula === "") {
ui.notifications.warn(game.i18n.format("TENEBRIS.Warning.plusDeRessource", { ressource: ressource }))
ui.notifications.warn(game.i18n.format("CTHULHUETERNAL.Warning.plusDeRessource", { ressource: ressource }))
return null
}
}
@ -266,10 +266,10 @@ export default class CthulhuEternalRoll extends Roll {
const content = await renderTemplate("systems/fvtt-cthulhu-eternal/templates/roll-dialog.hbs", dialogContext)
const title = CthulhuEternalRoll.createTitle(options.rollType, options.rollTarget)
const label = game.i18n.localize("TENEBRIS.Roll.roll")
const label = game.i18n.localize("CTHULHUETERNAL.Roll.roll")
const rollContext = await foundry.applications.api.DialogV2.wait({
window: { title: title },
classes: ["lethalfantasy"],
classes: ["fvtt-cthulhu-eternal"],
content,
buttons: [
{
@ -429,15 +429,15 @@ export default class CthulhuEternalRoll extends Roll {
static createTitle(type, target) {
switch (type) {
case ROLL_TYPE.SAVE:
return `${game.i18n.localize("TENEBRIS.Dialog.titleSave")} : ${game.i18n.localize(`TENEBRIS.Manager.${target}`)}`
return `${game.i18n.localize("CTHULHUETERNAL.Dialog.titleSave")} : ${game.i18n.localize(`CTHULHUETERNAL.Manager.${target}`)}`
case ROLL_TYPE.RESOURCE:
return `${game.i18n.localize("TENEBRIS.Dialog.titleResource")} : ${game.i18n.localize(`TENEBRIS.Manager.${target}`)}`
return `${game.i18n.localize("CTHULHUETERNAL.Dialog.titleResource")} : ${game.i18n.localize(`CTHULHUETERNAL.Manager.${target}`)}`
case ROLL_TYPE.DAMAGE:
return `${game.i18n.localize("TENEBRIS.Dialog.titleDamage")} : ${target}`
return `${game.i18n.localize("CTHULHUETERNAL.Dialog.titleDamage")} : ${target}`
case ROLL_TYPE.ATTACK:
return `${game.i18n.localize("TENEBRIS.Dialog.titleAttack")} : ${target}`
return `${game.i18n.localize("CTHULHUETERNAL.Dialog.titleAttack")} : ${target}`
default:
return game.i18n.localize("TENEBRIS.Dialog.titleStandard")
return game.i18n.localize("CTHULHUETERNAL.Dialog.titleStandard")
}
}
@ -543,25 +543,25 @@ export default class CthulhuEternalRoll extends Roll {
static _convertAvantages(value) {
switch (value) {
case "1":
return game.i18n.localize("TENEBRIS.Roll.doubleDesavantage")
return game.i18n.localize("CTHULHUETERNAL.Roll.doubleDesavantage")
case "2":
return game.i18n.localize("TENEBRIS.Roll.desavantage")
return game.i18n.localize("CTHULHUETERNAL.Roll.desavantage")
case "3":
return game.i18n.localize("TENEBRIS.Roll.normal")
return game.i18n.localize("CTHULHUETERNAL.Roll.normal")
case "4":
return game.i18n.localize("TENEBRIS.Roll.avantage")
return game.i18n.localize("CTHULHUETERNAL.Roll.avantage")
case "5":
return game.i18n.localize("TENEBRIS.Roll.doubleAvantage")
return game.i18n.localize("CTHULHUETERNAL.Roll.doubleAvantage")
case "--":
return game.i18n.localize("TENEBRIS.Roll.doubleDesavantage")
return game.i18n.localize("CTHULHUETERNAL.Roll.doubleDesavantage")
case "-":
return game.i18n.localize("TENEBRIS.Roll.desavantage")
return game.i18n.localize("CTHULHUETERNAL.Roll.desavantage")
case "=":
return game.i18n.localize("TENEBRIS.Roll.normal")
return game.i18n.localize("CTHULHUETERNAL.Roll.normal")
case "+":
return game.i18n.localize("TENEBRIS.Roll.avantage")
return game.i18n.localize("CTHULHUETERNAL.Roll.avantage")
case "++":
return game.i18n.localize("TENEBRIS.Roll.doubleAvantage")
return game.i18n.localize("CTHULHUETERNAL.Roll.doubleAvantage")
}
}

View File

@ -14,9 +14,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
const characteristicField = (label) => {
const schema = {
value: new fields.NumberField({ ...requiredInteger, initial: 3, min: 0 }),
percent: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 100 }),
attackMod: new fields.NumberField({ ...requiredInteger, initial: 0 }),
defenseMod: new fields.NumberField({ ...requiredInteger, initial: 0 })
feature: new fields.StringField({ required: true, nullable: false, initial: "" })
}
return new fields.SchemaField(schema, { label })
}
@ -28,44 +26,44 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
}, {}),
)
schema.wp = new fields.SchemaField({
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
exhausted: new fields.BooleanField({ required: true, initial: false })
})
schema.hp = new fields.SchemaField({
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
})
schema.perception = new fields.SchemaField({
schema.san = new fields.SchemaField({
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
recoverySAN: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
violence: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
helplessness: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
breakingPoint: new fields.BooleanField({ required: true, initial: false })
})
schema.grit = new fields.SchemaField({
earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
})
schema.luck = new fields.SchemaField({
earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
})
schema.movement = new fields.SchemaField({
walk: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
jog: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
sprint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
schema.damageBonus = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.resources = new fields.SchemaField({
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
hand: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
stowed: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
storage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
})
schema.biodata = new fields.SchemaField({
class: new fields.StringField({ required: true, nullable: false, initial: "" }),
level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }),
mortal: new fields.StringField({ required: true, nullable: false, initial: "" }),
alignment: new fields.StringField({ required: true, nullable: false, initial: "" }),
age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }),
height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }),
gender: new fields.StringField({ required: true, nullable: false, initial: "" }),
home: new fields.StringField({ required: true, nullable: false, initial: "" }),
birthplace: new fields.StringField({ required: true, nullable: false, initial: "" }),
eyes: new fields.StringField({ required: true, nullable: false, initial: "" }),
hair: new fields.StringField({ required: true, nullable: false, initial: "" })
})
schema.developmentPoints = new fields.SchemaField({
total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
remaining: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
})
return schema
}

View File

@ -12,7 +12,7 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel {
schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE })
schema.damage = new fields.StringField({required: true, initial: "1d6"})
schema.baseRange = new fields.StringField({required: true, initial: ""})
schema.rangeDistance = new fields.StringField({ required: true, initial: "yard", choices: SYSTEM.WEAPON_RANGE_UNIT })
schema.rangeUnit = new fields.StringField({ required: true, initial: "yard", choices: SYSTEM.WEAPON_RANGE_UNIT })
schema.lethality = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.killRadius = new fields.NumberField({ required: true, initial: 0, min: 0 })

5967
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -3,11 +3,9 @@
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
{{formField systemFields.cost value=system.cost}}
{{formField systemFields.money value=system.money localize=true}}
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}}
</fieldset>

View File

@ -4,18 +4,12 @@
{{formInput fields.name value=source.name}}
</div>
{{formField systemFields.armortype value=system.armortype localize=true}}
{{formField systemFields.defense value=system.defense}}
{{formField systemFields.movementreduction value=system.movementreduction}}
{{formField systemFields.hp value=system.hp}}
{{formField systemFields.damagereduction value=system.damagereduction}}
{{formField systemFields.load value=system.load}}
{{formField systemFields.cost value=system.cost}}
{{formField systemFields.money value=system.money localize=true}}
{{formField systemFields.settings value=system.settings localize=true}}
{{formField systemFields.protection value=system.protection}}
{{formField systemFields.resourceLevel value=system.resourceLevel}}
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput
systemFields.description
enriched=description

View File

@ -1,12 +0,0 @@
<section>
<div class="header">
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
{{formField systemFields.degats value=system.degats}}
<fieldset>
<legend>{{localize "TENEBRIS.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</fieldset>
</section>

View File

@ -3,10 +3,12 @@
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
{{formField systemFields.bondType value=system.bondType localize=true}}
{{formField systemFields.value value=system.value}}
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</fieldset>

View File

@ -1,17 +0,0 @@
{{!log 'chat-fortune' this}}
<div class="tenebris fortune">
<div class="intro-chat">
{{#if (ne actingCharImg "icons/svg/mystery-man.svg")}}
<div class="intro-img">
<img src="{{actingCharImg}}" data-tooltip="{{name}}" />
</div>
{{/if}}
<div class="intro-right">
<p class="introText">{{localize "TENEBRIS.Chat.askFortune" name=name}}</p>
</div>
</div>
{{#if isGM}}
<a class="button control" data-action="accept-fortune" data-tooltip="Accepter"><i class="fa-solid fa-check"></i></a>
<div class="fortune-accepted" style="display: none;">Accepté !</div>
{{/if}}
</div>

15
templates/gear.hbs Normal file
View File

@ -0,0 +1,15 @@
<section>
<div class="header">
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
{{formField systemFields.settings value=system.settings localize=true}}
{{formField systemFields.resourceLevel value=system.resourceLevel}}
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}}
</fieldset>
</section>

View File

@ -3,10 +3,9 @@
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
{{formField systemFields.cost value=system.cost}}
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</fieldset>

View File

@ -0,0 +1,17 @@
<section>
<div class="header">
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput
systemFields.description
enriched=description
value=system.description
name="system.description"
toggled="false"
}}
</fieldset>
</section>

View File

@ -6,7 +6,7 @@
{{formField systemFields.cost value=system.cost}}
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}}
</fieldset>

View File

@ -1,7 +0,0 @@
<section class="path-name">
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}}
<a class="control" data-action="toggleSheet" data-tooltip="TENEBRIS.ToggleSheet">
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
</a>
</section>

View File

@ -1,44 +0,0 @@
<section class="tab path-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "TENEBRIS.Label.profil"}}</legend>
<div class="profil">
<div class="profil-gauche">
{{formField systemFields.caracteristiques.fields.rob.fields.valeur value=system.caracteristiques.rob.valeur rootId=partId disabled=isPlayMode}}
{{formField systemFields.caracteristiques.fields.dex.fields.valeur value=system.caracteristiques.dex.valeur rootId=partId disabled=isPlayMode}}
{{formField systemFields.caracteristiques.fields.int.fields.valeur value=system.caracteristiques.int.valeur rootId=partId disabled=isPlayMode}}
{{formField systemFields.caracteristiques.fields.per.fields.valeur value=system.caracteristiques.per.valeur rootId=partId disabled=isPlayMode}}
{{formField systemFields.caracteristiques.fields.vol.fields.valeur value=system.caracteristiques.vol.valeur rootId=partId disabled=isPlayMode}}
{{formField systemFields.dv value=system.dv rootId=partId disabled=isPlayMode}}
</div>
<div class="profil-droite">
{{formField systemFields.dmax value=system.dmax rootId=partId disabled=isPlayMode}}
{{formField systemFields.ressources.fields.san.fields.valeur value=system.ressources.san.valeur rootId=partId disabled=isPlayMode}}
{{formField systemFields.ressources.fields.oeil.fields.valeur value=system.ressources.oeil.valeur rootId=partId disabled=isPlayMode}}
{{formField systemFields.ressources.fields.verbe.fields.valeur value=system.ressources.verbe.valeur rootId=partId disabled=isPlayMode}}
{{formField systemFields.ressources.fields.bourse.fields.valeur value=system.ressources.bourse.valeur rootId=partId disabled=isPlayMode}}
{{formField systemFields.ressources.fields.magie.fields.valeur value=system.ressources.magie.valeur rootId=partId disabled=isPlayMode}}
</div>
</div>
</fieldset>
<fieldset class="biens">
<legend>{{localize "TENEBRIS.Label.biens"}}</legend>
{{formInput systemFields.biens enriched=enrichedBiens value=system.biens documentUUID=item.uuid name="system.biens" collaborate="true" toggled=true}}
</fieldset>
<fieldset class="langues">
<legend>{{localize "TENEBRIS.Label.langues"}}</legend>
{{formInput systemFields.langues enriched=enrichedLangues value=system.langues documentUUID=item.uuid name="system.langues" collaborate="true" toggled=true}}
</fieldset>
<fieldset class="description">
<legend>{{localize "TENEBRIS.Label.description"}}</legend>
{{formInput
systemFields.description
enriched=enrichedDescription
value=system.description
name="system.description"
toggled=true
}}
</fieldset>
</section>

View File

@ -1,28 +0,0 @@
<section class="tab path-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
{{!log "path-talents" this}}
{{#each talents as |item|}}
{{!log "path-talent" this}}
<div class="talent" data-item-uuid="{{item.uuid}}">
<div class="header">
<div class="name">{{item.name}} {{#if item.system.canProgress}}<span data-tooltip="{{localize 'TENEBRIS.Label.progressionPossible'}}"> (P)</span>{{/if}}
{{#if item.system.isLearned}}
<span data-tooltip="{{localize 'TENEBRIS.Talent.FIELDS.appris.label'}}"> <i class="fa-solid fa-book"></i>({{item.system.niveau}})</span>
{{/if}}
</div>
{{#if @root.isEditMode}}
<div class="controls">
<a data-tooltip="{{localize 'TENEBRIS.Edit'}}" data-action="edit" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'TENEBRIS.Delete'}}" data-action="delete" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
{{/if}}
</div>
{{#if item.system.isLearned}}
<div class="progression">
<div>{{localize "TENEBRIS.Label.appris"}}</div>
<div>{{localize "TENEBRIS.Label.niveau"}} {{item.system.niveau}}</div>
</div>
{{/if}}
<div class="description">{{{item.system.improvedDescription}}}</div>
</div>
{{/each}}
</section>

View File

@ -1,59 +0,0 @@
<section>
<div class="header">
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
<div class="flexrow">
<div class="align-top">
{{formField systemFields.defense value=system.defense}}
{{formField systemFields.movementreduction value=system.movementreduction}}
<label>Standing</label>
<div class="shift-right">
{{formField systemFields.standing.fields.min value=system.standing.min}}
{{formField systemFields.standing.fields.max value=system.standing.min}}
</div>
<label>Crouching</label>
<div class="shift-right">
{{formField systemFields.crouching.fields.min value=system.crouching.min}}
{{formField systemFields.crouching.fields.max value=system.crouching.min}}
</div>
</div>
<div class="align-top">
<label>Destruction</label>
<div class="shift-right">
{{formField systemFields.destruction.fields.bashing value=system.destruction.bashing}}
{{formField systemFields.destruction.fields.slashing value=system.destruction.slashing}}
{{formField systemFields.destruction.fields.piercing value=system.destruction.piercing}}
</div>
<label>Auto-Destruction</label>
<div class="shift-right">
{{formField systemFields.autodestruction.fields.bashing value=system.autodestruction.bashing}}
{{formField systemFields.autodestruction.fields.slashing value=system.autodestruction.slashing}}
{{formField systemFields.autodestruction.fields.piercing value=system.autodestruction.piercing}}
</div>
{{formField systemFields.load value=system.load}}
{{formField systemFields.cost value=system.cost}}
{{formField systemFields.money value=system.money localize=true}}
</div>
</div>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
{{formInput
systemFields.description
enriched=description
value=system.description
name="system.description"
toggled="false"
}}
</fieldset>
</section>

View File

@ -1,29 +0,0 @@
<section>
<div class="header">
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
{{formField systemFields.level value=system.level}}
{{formField systemFields.cost value=system.cost}}
<label>Components</label>
<div class="shift-right">
{{formField systemFields.components.fields.verbal value=system.components.verbal}}
{{formField systemFields.components.fields.somatic value=system.components.somatic}}
{{formField systemFields.components.fields.material value=system.components.material}}
</div>
{{formField systemFields.castingTime value=system.castingTime}}
{{formField systemFields.range value=system.range}}
{{formField systemFields.areaAffected value=system.areaAffected}}
{{formField systemFields.duration value=system.duration}}
{{formField systemFields.savingThrow value=system.savingThrow}}
{{formField systemFields.extraAetherPoints value=system.extraAetherPoints}}
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
{{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}}
</fieldset>
</section>

View File

@ -4,65 +4,19 @@
{{formInput fields.name value=source.name}}
</div>
<div class="flexrow">
<div class="align-top">
{{formField systemFields.settings value=system.settings localize=true}}
{{formField systemFields.weaponType value=system.weaponType localize=true}}
{{formField systemFields.weaponType value=system.weaponType localize=true}}
{{formField systemFields.damage value=system.damage}}
{{formField systemFields.baseRange value=system.baseRange}}
{{formField systemFields.rangeUnit value=system.rangeUnit localize=true}}
{{formField systemFields.lethality value=system.lethality}}
{{formField systemFields.killRadius value=system.killRadius}}
<label>Damage Type</label>
<div class="shift-right">
{{formField systemFields.damageType.fields.typeP value=system.standing.typeP}}
{{formField systemFields.damageType.fields.typeB value=system.standing.typeB}}
{{formField systemFields.damageType.fields.typeS value=system.standing.typeS}}
</div>
<label>Damage</label>
<div class="shift-right">
{{formField systemFields.damage.fields.damageS value=system.standing.damageS}}
{{formField systemFields.damage.fields.damageM value=system.standing.damageM}}
</div>
{{formField systemFields.hands value=system.hands localize=true}}
{{#if (eq system.weaponType "melee")}}
{{formField systemFields.defenseMax value=system.defenseMax}}
{{formField systemFields.secondsToAttack value=system.secondsToAttack}}
{{/if}}
{{#if (eq system.weaponType "ranged")}}
<label>Speed</label>
<div class="shift-right">
{{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}}
{{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}}
{{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}}
</div>
{{/if}}
</div>
<div class="align-top">
{{#if (eq system.weaponType "ranged")}}
{{formField systemFields.defense value=system.defense}}
<label>Range</label>
<div class="shift-right">
{{formField systemFields.range.fields.pointBlank value=system.range.pointBlank}}
{{formField systemFields.range.fields.short value=system.range.short}}
{{formField systemFields.range.fields.medium value=system.range.medium}}
{{formField systemFields.range.fields.long value=system.range.long}}
{{formField systemFields.range.fields.extreme value=system.range.extreme}}
{{formField systemFields.range.fields.outOfSkill value=system.range.outOfSkill}}
</div>
{{/if}}
{{formField systemFields.load value=system.load}}
{{formField systemFields.cost value=system.cost}}
{{formField systemFields.money value=system.money localize=true}}
</div>
</div>
{{formField systemFields.resourceLevel value=system.resourceLevel}}
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput
systemFields.description
enriched=description