forked from public/fvtt-cthulhu-eternal
185 lines
7.6 KiB
JavaScript
185 lines
7.6 KiB
JavaScript
/**
|
|
* Cthulhu Eternal RPG System
|
|
* Author: LeRatierBretonnien/Uberwald
|
|
*/
|
|
|
|
import { SYSTEM } from "./module/config/system.mjs"
|
|
globalThis.SYSTEM = SYSTEM // Expose the SYSTEM object to the global scope
|
|
|
|
// Import modules
|
|
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 { handleSocketEvent } from "./module/socket.mjs"
|
|
import { Macros } from "./module/macros.mjs"
|
|
import { setupTextEnrichers } from "./module/enrichers.mjs"
|
|
import CthulhuEternalUtils 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)}}}
|
|
|
|
Hooks.once("init", function () {
|
|
console.info("Cthulhu Eternal RPG | Initializing System")
|
|
console.info(SYSTEM.ASCII)
|
|
|
|
globalThis.CthulhuEternal = game.system
|
|
game.system.CONST = SYSTEM
|
|
|
|
// Expose the system API
|
|
game.system.api = {
|
|
applications,
|
|
models,
|
|
documents,
|
|
}
|
|
|
|
CONFIG.Actor.documentClass = documents.CthulhuEternalActor
|
|
CONFIG.Actor.dataModels = {
|
|
protagonist: models.CthulhuEternalProtagonist
|
|
}
|
|
|
|
CONFIG.Item.documentClass = documents.CthulhuEternalItem
|
|
CONFIG.Item.dataModels = {
|
|
skill: models.CthulhuEternalSkill,
|
|
injury: models.CthulhuEternalInjury,
|
|
weapon: models.CthulhuEternalWeapon,
|
|
armor: models.CthulhuEternalArmor,
|
|
motivation: models.CthulhuEternalMotivation,
|
|
mentaldisorder: models.CthulhuEternalMentalDisorder,
|
|
bond: models.CthulhuEternalBond,
|
|
arcane: models.CthulhuEternalArcane,
|
|
gear: models.CthulhuEternalGear,
|
|
archetype: models.CthulhuEternalArchetype
|
|
}
|
|
|
|
// Register sheet application classes
|
|
Actors.unregisterSheet("core", ActorSheet)
|
|
Actors.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalProtagonistSheet, { types: ["protagonist"], makeDefault: true })
|
|
|
|
Items.unregisterSheet("core", ItemSheet)
|
|
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalSkillSheet, { types: ["skill"], makeDefault: true })
|
|
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalInjurySheet, { types: ["injury"], makeDefault: true })
|
|
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalMotivationSheet, { types: ["motivation"], makeDefault: true })
|
|
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalMentalDisorderSheet, { types: ["mentaldisorder"], makeDefault: true })
|
|
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalWeaponSheet, { types: ["weapon"], makeDefault: true })
|
|
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalArcaneSheet, { types: ["arcane"], makeDefault: true })
|
|
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalArmorSheet, { types: ["armor"], makeDefault: true })
|
|
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalBondSheet, { types: ["bond"], makeDefault: true })
|
|
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalGearSheet, { types: ["gear"], makeDefault: true })
|
|
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalArchetypeSheet, { types: ["archetype"], makeDefault: true })
|
|
|
|
// Other Document Configuration
|
|
CONFIG.ChatMessage.documentClass = documents.CthulhuEternalChatMessage
|
|
|
|
// Dice system configuration
|
|
CONFIG.Dice.rolls.push(documents.CthulhuEternalRoll)
|
|
|
|
game.settings.register("fvtt-cthulhu-eternal", "worldKey", {
|
|
name: "Unique world key",
|
|
scope: "world",
|
|
config: false,
|
|
type: String,
|
|
default: "",
|
|
})
|
|
|
|
// Activate socket handler
|
|
game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent)
|
|
|
|
setupTextEnrichers()
|
|
CthulhuEternalUtils.registerSettings()
|
|
CthulhuEternalUtils.registerHandlebarsHelpers()
|
|
CthulhuEternalUtils.setupCSSRootVariables()
|
|
|
|
// Gestion des jets de dés depuis les journaux
|
|
document.addEventListener("click", (event) => {
|
|
const anchor = event.target.closest("a.ask-roll-journal")
|
|
if (!anchor) return
|
|
event.preventDefault()
|
|
event.stopPropagation()
|
|
const type = anchor.dataset.rollType
|
|
const target = anchor.dataset.rollTarget
|
|
const title = anchor.dataset.rollTitle
|
|
})
|
|
|
|
console.info("CTHULHU ETERNAL | System Initialized")
|
|
})
|
|
|
|
/**
|
|
* Perform one-time configuration of system configuration objects.
|
|
*/
|
|
function preLocalizeConfig() {
|
|
const localizeConfigObject = (obj, keys) => {
|
|
for (let o of Object.values(obj)) {
|
|
for (let k of keys) {
|
|
o[k] = game.i18n.localize(o[k])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Hooks.once("ready", function () {
|
|
console.info("CTHULHU ETERNAL | Ready")
|
|
ClassCounter.registerUsageCount("fvtt-cthulhu-eternal", {})
|
|
_showUserGuide()
|
|
|
|
/* Display the user guide */
|
|
async function _showUserGuide() {
|
|
if (game.user.isGM) {
|
|
const newVer = game.system.version
|
|
}
|
|
}
|
|
})
|
|
|
|
Hooks.on("renderChatMessage", (message, html, data) => {
|
|
const typeMessage = data.message.flags.CthulhuEternal?.typeMessage
|
|
// Message de demande de jet de dés
|
|
if (typeMessage === "askRoll") {
|
|
// Affichage des boutons de jet de dés uniquement pour les joueurs
|
|
if (game.user.isGM) {
|
|
html.find(".ask-roll-dice").each((i, btn) => {
|
|
btn.style.display = "none"
|
|
})
|
|
} else {
|
|
html.find(".ask-roll-dice").click((event) => {
|
|
const btn = $(event.currentTarget)
|
|
const type = btn.data("type")
|
|
const value = btn.data("value")
|
|
const avantage = btn.data("avantage") ?? "="
|
|
const character = game.user.character
|
|
if (type === SYSTEM.ROLL_TYPE.RESOURCE) character.rollResource(value)
|
|
else if (type === SYSTEM.ROLL_TYPE.SAVE) character.rollSave(value, avantage)
|
|
})
|
|
}
|
|
}
|
|
})
|
|
|
|
Hooks.on("updateSetting", async (setting, update, options, id) => {
|
|
})
|
|
|
|
// Dice-so-nice Ready
|
|
Hooks.once("diceSoNiceReady", (dice3d) => {
|
|
configureDiceSoNice(dice3d)
|
|
})
|
|
|
|
/**
|
|
* Create a macro when dropping an entity on the hotbar
|
|
* Item - open roll dialog
|
|
* Actor - open actor sheet
|
|
* Journal - open journal sheet
|
|
*/
|
|
Hooks.on("hotbarDrop", (bar, data, slot) => {
|
|
if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) {
|
|
Macros.createCthulhuEternalMacro(data, slot);
|
|
return false
|
|
}
|
|
})
|
|
|
|
/**
|
|
* Register world usage statistics
|
|
* @param {string} registerKey
|
|
*/
|
|
function registerWorldCount(registerKey) {
|
|
if (game.user.isGM) {
|
|
ClassCounter.registerUsageCount(game.system.id, {})
|
|
}
|
|
}
|