diff --git a/module/Apps/DelveDiceHUD.mjs b/module/Apps/DelveDiceHUD.mjs index 6dd69fe..e9a6f2f 100644 --- a/module/Apps/DelveDiceHUD.mjs +++ b/module/Apps/DelveDiceHUD.mjs @@ -228,6 +228,13 @@ export class DelveDiceHUD extends HandlebarsApplicationMixin(ApplicationV2) { localizer(`RipCrypt.notifs.info.cryptic-event-alert`), { console: false }, ); + game.socket.emit(`system.ripcrypt`, { + event: `notify`, + payload: { + message: `RipCrypt.notifs.info.cryptic-event-alert`, + type: `info`, + }, + }); }; if ([`both`, `pause`].includes(alertType) && game.user.isGM) { diff --git a/module/hooks/ready.mjs b/module/hooks/ready.mjs index ad9122c..71e9c99 100644 --- a/module/hooks/ready.mjs +++ b/module/hooks/ready.mjs @@ -16,7 +16,7 @@ Hooks.once(`ready`, () => { if (game.settings.get(`ripcrypt`, `devMode`)) { ui.sidebar.expand(); - if (game.paused) { game.togglePause() }; + if (game.paused) { game.togglePause(false, { broadcast: true }) }; }; ui.delveDice.render({ force: true }); diff --git a/module/sockets/_index.mjs b/module/sockets/_index.mjs index e866530..bcb2b5e 100644 --- a/module/sockets/_index.mjs +++ b/module/sockets/_index.mjs @@ -1,8 +1,10 @@ import { localizer } from "../utils/Localizer.mjs"; import { Logger } from "../utils/Logger.mjs"; +import { notify } from "./notify.mjs"; import { updateSands } from "./updateSands.mjs"; const events = { + notify, updateSands, }; diff --git a/module/sockets/notify.mjs b/module/sockets/notify.mjs new file mode 100644 index 0000000..072e5af --- /dev/null +++ b/module/sockets/notify.mjs @@ -0,0 +1,56 @@ +import { localizer } from "../utils/Localizer.mjs"; + +export function notify(payload) { + // #region Payload Validity + const { + message, + users = [], + type = `info`, + permanent = false, + } = payload; + + if (!message) { + ui.notifications.error(localizer( + `RipCrypt.notifs.error.malformed-socket-payload`, + { + event: `notify`, + details: `A message must be provided`, + }, + )); + return; + }; + + if (users && !Array.isArray(users)) { + ui.notifications.error(localizer( + `RipCrypt.notifs.error.malformed-socket-payload`, + { + event: `notify`, + details: `"users" must be an array of user IDs`, + }, + )); + return; + }; + + if (![`info`, `error`, `success`].includes(type)) { + ui.notifications.error(localizer( + `RipCrypt.notifs.error.malformed-socket-payload`, + { + event: `notify`, + details: `An invalid notification type was provided.`, + }, + )); + return; + } + // #endregion Payload Validity + + // Act + if (users.length === 0 || users.includes(game.user.id)) { + ui.notifications[type]?.( + localizer(message), + { + console: false, + permanent, + }, + ); + }; +};