145 lines
5.8 KiB
JavaScript
145 lines
5.8 KiB
JavaScript
import { LESOUBLIES_CONFIG } from "./les-oublies-config.js"
|
|
import { LesOubliesUtility } from "./les-oublies-utility.js"
|
|
import { LesOubliesActor } from "./les-oublies-actor.js"
|
|
import { LesOubliesItem } from "./les-oublies-item.js"
|
|
import { LesOubliesRolls } from "./les-oublies-rolls.js"
|
|
import * as models from "./models/index.mjs"
|
|
import * as sheets from "./applications/sheets/_module.mjs"
|
|
|
|
const DEFAULT_PERSONNAGE_TOKEN_TEXTURE = "systems/fvtt-les-oublies/assets/tokens/border_token_oublies.webp"
|
|
const UBERWALD_URL = "https://www.uberwald.me"
|
|
const XII_SINGES_URL = "https://www.les12singes.com/84-les-oublies"
|
|
|
|
function ensureSystemStyles() {
|
|
const href = `systems/${game.system.id}/css/les-oublies.css`
|
|
const existingLink = document.querySelector(`link[href$="${href}"]`)
|
|
if (existingLink) return
|
|
|
|
const link = document.createElement("link")
|
|
link.rel = "stylesheet"
|
|
link.type = "text/css"
|
|
link.href = href
|
|
link.dataset.systemStyle = game.system.id
|
|
document.head.append(link)
|
|
}
|
|
|
|
function usesFoundryDefaultTokenTexture(actor, data) {
|
|
const tokenTexture = foundry.utils.getProperty(data, "prototypeToken.texture.src")
|
|
?? foundry.utils.getProperty(actor, "prototypeToken.texture.src")
|
|
?? ""
|
|
return !tokenTexture || tokenTexture === CONST.DEFAULT_TOKEN || tokenTexture === "icons/svg/mystery-man.svg"
|
|
}
|
|
|
|
async function getHelpJournalEntry() {
|
|
const pack = game.packs.get(`${game.system.id}.aide-systeme`)
|
|
if (!pack) return null
|
|
|
|
const documents = await pack.getDocuments()
|
|
return documents[0] ?? null
|
|
}
|
|
|
|
async function buildWelcomeMessageContent(helpJournal) {
|
|
const helpContent = helpJournal
|
|
? await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
|
`@UUID[${helpJournal.uuid}]{${game.i18n.localize("LESOUBLIES.welcome.helpLinkLabel")}}`,
|
|
{ async: true },
|
|
)
|
|
: game.i18n.localize("LESOUBLIES.welcome.helpUnavailable")
|
|
|
|
return `
|
|
<div class="les-oublies-chat-card les-oublies-welcome-chat">
|
|
<div class="chat-card-header">
|
|
<div>
|
|
<p class="chat-card-eyebrow">${game.i18n.localize("LESOUBLIES.welcome.eyebrow")}</p>
|
|
<h3>${game.i18n.localize("LESOUBLIES.welcome.title")}</h3>
|
|
</div>
|
|
</div>
|
|
<div class="chat-card-body">
|
|
<p>${game.i18n.localize("LESOUBLIES.welcome.intro")}</p>
|
|
<p>${game.i18n.localize("LESOUBLIES.welcome.developerLabel")} <a href="${UBERWALD_URL}" target="_blank" rel="noopener noreferrer">Uberwald</a>.</p>
|
|
<p>${game.i18n.localize("LESOUBLIES.welcome.publisherLabel")} <a href="${XII_SINGES_URL}" target="_blank" rel="noopener noreferrer">Les XII Singes</a>.</p>
|
|
<p><strong>${game.i18n.localize("LESOUBLIES.welcome.helpLabel")}</strong> ${helpContent}</p>
|
|
</div>
|
|
</div>
|
|
`
|
|
}
|
|
|
|
async function showWelcomeMessage() {
|
|
const helpJournal = await getHelpJournalEntry()
|
|
const content = await buildWelcomeMessageContent(helpJournal)
|
|
|
|
await ChatMessage.create({
|
|
speaker: {
|
|
alias: game.system.title,
|
|
},
|
|
content,
|
|
whisper: [game.user.id],
|
|
})
|
|
}
|
|
|
|
Hooks.once("init", function () {
|
|
console.info("Les Oubliés | Initialisation du système")
|
|
ensureSystemStyles()
|
|
|
|
CONFIG.Actor.documentClass = LesOubliesActor
|
|
CONFIG.Actor.dataModels = {
|
|
personnage: models.PersonnageDataModel,
|
|
compagnie: models.CompagnieDataModel,
|
|
creature: models.CreatureDataModel,
|
|
}
|
|
|
|
CONFIG.Item.documentClass = LesOubliesItem
|
|
CONFIG.Item.dataModels = {
|
|
race: models.RaceDataModel,
|
|
tribu: models.TribuDataModel,
|
|
metier: models.MetierDataModel,
|
|
competence: models.CompetenceDataModel,
|
|
sortilege: models.SortilegeDataModel,
|
|
arme: models.ArmeDataModel,
|
|
armure: models.ArmureDataModel,
|
|
equipement: models.EquipementDataModel,
|
|
pouvoircompagnie: models.PouvoirCompagnieDataModel,
|
|
}
|
|
|
|
CONFIG.LESOUBLIES = LESOUBLIES_CONFIG
|
|
|
|
game.system.lesOublies = {
|
|
config: LESOUBLIES_CONFIG,
|
|
models,
|
|
sheets,
|
|
rolls: LesOubliesRolls,
|
|
utility: LesOubliesUtility,
|
|
}
|
|
|
|
foundry.documents.collections.Actors.registerSheet("fvtt-les-oublies", sheets.LesOubliesPersonnageSheet, { types: ["personnage"], makeDefault: true })
|
|
foundry.documents.collections.Actors.registerSheet("fvtt-les-oublies", sheets.LesOubliesCompagnieSheet, { types: ["compagnie"], makeDefault: true })
|
|
foundry.documents.collections.Actors.registerSheet("fvtt-les-oublies", sheets.LesOubliesCreatureSheet, { types: ["creature"], makeDefault: true })
|
|
|
|
foundry.documents.collections.Items.registerSheet("fvtt-les-oublies", sheets.LesOubliesReferenceItemSheet, { types: ["race", "tribu", "metier"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("fvtt-les-oublies", sheets.LesOubliesCompetenceSheet, { types: ["competence"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("fvtt-les-oublies", sheets.LesOubliesSortilegeSheet, { types: ["sortilege"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("fvtt-les-oublies", sheets.LesOubliesArmeSheet, { types: ["arme"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("fvtt-les-oublies", sheets.LesOubliesArmureSheet, { types: ["armure"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("fvtt-les-oublies", sheets.LesOubliesEquipementSheet, { types: ["equipement"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("fvtt-les-oublies", sheets.LesOubliesPouvoirCompagnieSheet, { types: ["pouvoircompagnie"], makeDefault: true })
|
|
|
|
LesOubliesUtility.registerHandlebarsHelpers()
|
|
})
|
|
|
|
Hooks.once("ready", function () {
|
|
showWelcomeMessage()
|
|
})
|
|
|
|
Hooks.on("preCreateActor", function (actor, data) {
|
|
if (actor.type !== "personnage") return
|
|
if (!usesFoundryDefaultTokenTexture(actor, data)) return
|
|
|
|
actor.updateSource({
|
|
prototypeToken: {
|
|
texture: {
|
|
src: DEFAULT_PERSONNAGE_TOKEN_TEXTURE,
|
|
},
|
|
},
|
|
})
|
|
})
|