diff --git a/README.md b/README.md index 0c4e41b..ae2fb53 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# The Mill's Messages - v0.1.0 +# The Mill's Messages - v0.2.0 This little [FoundryVTT](https://foundryvtt.com/) module gives the GMs a way to send messages to PCs with a bit more flair than the chat, and more spontaneity than journals ! diff --git a/assets/bubble_above_three_players.webp b/assets/bubble_above_three_players.webp new file mode 100644 index 0000000..e85f5a2 Binary files /dev/null and b/assets/bubble_above_three_players.webp differ diff --git a/assets/bubble_above_two_players.webp b/assets/bubble_above_two_players.webp new file mode 100644 index 0000000..e1c498c Binary files /dev/null and b/assets/bubble_above_two_players.webp differ diff --git a/lang/en.json b/lang/en.json index 311ef90..9418595 100644 --- a/lang/en.json +++ b/lang/en.json @@ -3,6 +3,8 @@ "UI": { "ToolbarCategory": "Message controls", "ToolbarSendMessage": "Send message", + "ToolbarSendMessageToConnected": "Send message to all connected players", + "ToolbarSendMessageToAll": "Send message to all players", "HistoryJournalTitle": "Messages for {name}" }, "Dialogs": { diff --git a/lang/fr.json b/lang/fr.json index ade8c2e..0680f44 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -3,6 +3,8 @@ "UI": { "ToolbarCategory": "Contrôles messages", "ToolbarSendMessage": "Envoyer des messages", + "ToolbarSendMessageToConnected": "Envoyer un message à tous les joueurs connectés", + "ToolbarSendMessageToAll": "Envoyer des messages à tous les joueurs", "HistoryJournalTitle": "Messages pour {name}" }, "Dialogs": { diff --git a/module.json b/module.json index 1acd06f..9a379d4 100644 --- a/module.json +++ b/module.json @@ -2,7 +2,7 @@ "id": "the-mills-messages", "title": "The Mill's Messages", "description": "A little message-sending modules for GMs", - "version": "0.1.0", + "version": "0.2.0", "compatibility": { "minimum": "12", "verified": "12", @@ -49,5 +49,5 @@ "readme": "README.md", "url": "https://git.tfk-astrodome.net/trotFunky/TheMillsMessages/src/branch/release", "manifest": "https://git.tfk-astrodome.net/trotFunky/TheMillsMessages/raw/branch/release/module.json", - "download": "https://git.tfk-astrodome.net/trotFunky/TheMillsMessages/archive/v0.1.0.zip" + "download": "https://git.tfk-astrodome.net/trotFunky/TheMillsMessages/archive/v0.2.0.zip" } diff --git a/scripts/mills_messages.mjs b/scripts/mills_messages.mjs index 2383e79..15ddffd 100644 --- a/scripts/mills_messages.mjs +++ b/scripts/mills_messages.mjs @@ -71,16 +71,24 @@ async function create_history_journal(user) { * This allows us to populate the form with previous inputs and go back and forth * within the chain, to be able to fix mistakes or send fewer messages. * + * We also use this to pre-fill the first form with data if any is passed. + * * NOTE: The recipients are the same for all the messages of a chain, to simplify * the processing later as we only have to build one array of messages, shared among * the recipients. + * + * @param {MessageFormResponse|null} initial_form_data Data to pre-fill the first form with. * @returns {Promise} The Promise for the processing of the messages. */ -async function send_message_dialog() { +async function send_message_dialog(initial_form_data = null) { /** @type{MessageFormResponse[]} */ let messages = [] let current_message = 0 + if (initial_form_data !== null) { + messages.push(initial_form_data); + } + let chain = false; do { if (chain) { @@ -324,6 +332,28 @@ function main() { title: "MM.UI.ToolbarCategory", icon: "mm-chat-bubble", tools: [{ + name: "send-message-to-all", + title: "MM.UI.ToolbarSendMessageToAll", + button: true, + visible: true, + icon: "mm-bubble-above-three-players", + onClick: () => send_message_dialog({ + recipients: game.users.players.map((user) => user.id) + }) + }, + { + name: "send-message-to-connected", + title: "MM.UI.ToolbarSendMessageToConnected", + button: true, + visible: true, + icon: "mm-bubble-above-two-players", + onClick: () => send_message_dialog({ + recipients: game.users.players + .filter((user) => user.active) + .map((user) => user.id) + }) + }, + { name: "send-message", title: "MM.UI.ToolbarSendMessage", button: true, diff --git a/scripts/send_dialog_form.mjs b/scripts/send_dialog_form.mjs index 1daa956..4083ea0 100644 --- a/scripts/send_dialog_form.mjs +++ b/scripts/send_dialog_form.mjs @@ -43,7 +43,7 @@ export function validate_form(form_response) { */ export function prepare_send_message_html(existing_values = null, chain = false) { let players_options = [] - for (let user of game.users.filter((user) => !user.isGM)) { + for (let user of game.users.players) { players_options.push({ label: user.character ? user.character.name : user.name, value: user.id, diff --git a/styles/mills_messages.css b/styles/mills_messages.css index f205cb0..79443fe 100644 --- a/styles/mills_messages.css +++ b/styles/mills_messages.css @@ -9,6 +9,26 @@ background-image: url("/modules/the-mills-messages/assets/chat_bubble.webp"); } +.mm-bubble-above-two-players { + display: inline-block; + width: 32px; + height: 32px; + background-size: cover; + cursor: pointer; + image-rendering: pixelated; + background-image: url("/modules/the-mills-messages/assets/bubble_above_two_players.webp"); +} + +.mm-bubble-above-three-players { + display: inline-block; + width: 32px; + height: 32px; + background-size: cover; + cursor: pointer; + image-rendering: pixelated; + background-image: url("/modules/the-mills-messages/assets/bubble_above_three_players.webp"); +} + /* * Override Foundry's `.application .scrollable`, whose right margin does not work * with ProseMirror's editor internal divs which need a 0 right margin.