186 lines
7.7 KiB
JavaScript
186 lines
7.7 KiB
JavaScript
/**
|
|
* Prism 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 { PrismRPGCombatTracker, PrismRPGCombat } from "./module/applications/combat.mjs"
|
|
import { Macros } from "./module/macros.mjs"
|
|
import { setupTextEnrichers } from "./module/enrichers.mjs"
|
|
import { default as PrismRPGUtils } 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("Prism RPG | Initializing System")
|
|
console.info(SYSTEM.ASCII)
|
|
|
|
globalThis.prismRPG = game.system
|
|
game.system.CONST = SYSTEM
|
|
|
|
// Expose the system API
|
|
game.system.api = {
|
|
applications,
|
|
models,
|
|
documents,
|
|
}
|
|
|
|
CONFIG.ui.combat = PrismRPGCombatTracker
|
|
CONFIG.Combat.documentClass = PrismRPGCombat;
|
|
|
|
CONFIG.Actor.documentClass = documents.PrismRPGActor
|
|
CONFIG.Actor.dataModels = {
|
|
character: models.PrismRPGCharacter,
|
|
monster: models.PrismRPGMonster,
|
|
}
|
|
|
|
CONFIG.Item.documentClass = documents.PrismRPGItem
|
|
CONFIG.Item.dataModels = {
|
|
skill: models.PrismRPGSkill,
|
|
gift: models.PrismRPGGift,
|
|
weapon: models.PrismRPGWeapon,
|
|
armor: models.PrismRPGArmor,
|
|
shield: models.PrismRPGShield,
|
|
spell: models.PrismRPGSpell,
|
|
vulnerability: models.PrismRPGVulnerability,
|
|
equipment: models.PrismRPGEquipment,
|
|
miracle: models.PrismRPGMiracle
|
|
}
|
|
|
|
// Register sheet application classes
|
|
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet)
|
|
foundry.documents.collections.Actors.registerSheet("prismRPG", applications.PrismRPGCharacterSheet, { types: ["character"], makeDefault: true })
|
|
foundry.documents.collections.Actors.registerSheet("prismRPG", applications.PrismRPGMonsterSheet, { types: ["monster"], makeDefault: true })
|
|
|
|
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ActorSheet)
|
|
foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGSkillSheet, { types: ["skill"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGGiftSheet, { types: ["gift"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGWeaponSheet, { types: ["weapon"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGSpellSheet, { types: ["spell"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGArmorSheet, { types: ["armor"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGShieldSheet, { types: ["shield"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGEquipmentSheet, { types: ["equipment"], makeDefault: true })
|
|
foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGMiracleSheet, { types: ["miracle"], makeDefault: true })
|
|
|
|
// Other Document Configuration
|
|
CONFIG.ChatMessage.documentClass = documents.PrismRPGChatMessage
|
|
|
|
// Dice system configuration
|
|
CONFIG.Dice.rolls.push(documents.PrismRPGRoll)
|
|
|
|
game.settings.register("prismRPG", "worldKey", {
|
|
name: "Unique world key",
|
|
scope: "world",
|
|
config: false,
|
|
type: String,
|
|
default: "",
|
|
})
|
|
|
|
// Activate socket handler
|
|
game.socket.on(`system.${SYSTEM.id}`, PrismRPGUtils.handleSocketEvent)
|
|
|
|
setupTextEnrichers()
|
|
PrismRPGUtils.registerHandlebarsHelpers()
|
|
PrismRPGUtils.setHookListeners()
|
|
|
|
console.info("PRISM RPG | System Initialized")
|
|
})
|
|
|
|
/**
|
|
* Perform one-time configuration of system configuration objects.f
|
|
*/
|
|
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("PRISM RPG | Ready")
|
|
|
|
if (!SYSTEM.DEV_MODE) {
|
|
registerWorldCount("prismRPG")
|
|
}
|
|
|
|
_showUserGuide()
|
|
|
|
/**
|
|
*
|
|
*/
|
|
async function _showUserGuide() {
|
|
if (game.user.isGM) {
|
|
const newVer = game.system.version
|
|
}
|
|
}
|
|
})
|
|
|
|
// Test if version below 13
|
|
let hookName = "renderChatMessage"
|
|
if (foundry.utils.isNewerVersion(game.version, "12.0",)) {
|
|
hookName = "renderChatMessageHTML"
|
|
}
|
|
Hooks.on(hookName, (message, html, data) => {
|
|
const typeMessage = data.message.flags.prismRPG?.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("getCombatTrackerEntryContext", (html, options) => {
|
|
PrismRPGUtils.pushCombatOptions(html, options);
|
|
});
|
|
|
|
/**
|
|
* 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.createPrismRPGMacro(data, slot);
|
|
return false
|
|
}
|
|
})
|
|
|
|
/**
|
|
* Register world usage statistics
|
|
* @param {string} registerKey
|
|
*/
|
|
async function registerWorldCount(registerKey) {
|
|
if (game.user.isGM) {
|
|
try {
|
|
ClassCounter.registerUsageCount(game.system.id, {})
|
|
} catch {
|
|
console.log("No usage log ")
|
|
}
|
|
}
|
|
} |