player requested rolls work now with sockets

This commit is contained in:
Mike Bloy 2026-02-17 23:13:42 -06:00
parent fcab44f59d
commit 546800f672
3 changed files with 62 additions and 39 deletions

View File

@ -94,35 +94,13 @@ export function helpersRenderChatMessage(message, html, data) {
)?.id; )?.id;
} }
const result = await actor[rollFunc](rollId, options); const result = await actor[rollFunc](rollId, options);
tokenData.resolved = true; moduleHelpers.socket.executeAsGM(
tokenData.total = result.total; updateRequestRollChat,
if (result.successes == -1) { message._id,
tokenData.icon = '⛝'; tokenUuid,
tokenData.resolveClass = 'critFail'; result.total,
tokenData.value = 'Critical Failure!'; result.successes,
} else if (result.successes == 0) { );
tokenData.icon = '⛒';
tokenData.value = 'Failure';
tokenData.resolveClass = 'failure';
} else if (result.successes == 1) {
tokenData.icon = '✓';
tokenData.value = 'Success';
tokenData.resolveClass = 'success';
} else if (result.successes == 2) {
tokenData.icon = '✓✓';
tokenData.value = `Success and a raise!`;
tokenData.resolveClass = 'raise';
} else {
tokenData.icon = '✓✓';
tokenData.value = `Success and ${result.successes - 1} raises!`;
tokenData.resolveClass = 'raise';
}
await message.setFlag('swade-mb-helpers', `rollRequest.tokens.${tokenId}`, tokenData);
log('result', result);
const newData = message.getFlag('swade-mb-helpers', 'rollRequest');
const template = templates['rollRequest/chatcard.html'];
const newContent = await foundry.applications.handlebars.renderTemplate(template, newData);
await message.update({ content: newContent });
}); });
} else { } else {
buttonSpan.remove(); buttonSpan.remove();
@ -131,8 +109,49 @@ export function helpersRenderChatMessage(message, html, data) {
} }
} }
export function helpersRenderChatLog(app, html, data) { export async function updateRequestRollChat(messageId, tokenUuid, total, successes) {
// log('RENDER CHAT LOG', app, html, data); log('Update chat', messageId, tokenUuid, total, successes);
const message = game.messages.get(messageId);
if (!message) {
return;
}
const token = foundry.utils.fromUuidSync(tokenUuid);
const tokenData = {
resolved: true,
total,
};
switch (successes) {
case -1:
tokenData.icon = '⛝';
tokenData.resolveClass = 'critFail';
tokenData.value = 'Critical Failure!';
break;
case 0:
tokenData.icon = '⛒';
tokenData.value = 'Failure';
tokenData.resolveClass = 'failure';
break;
case 1:
tokenData.icon = '✓';
tokenData.value = 'Success';
tokenData.resolveClass = 'success';
break;
case 2:
tokenData.icon = '✓✓';
tokenData.value = `Success & raise!`;
tokenData.resolveClass = 'raise';
break;
default:
tokenData.icon = '✓✓';
tokenData.value = `Success & ${successes - 1} raises!`;
tokenData.resolveClass = 'raise';
break;
}
await message.setFlag('swade-mb-helpers', `rollRequest.tokens.${token._id}`, tokenData);
const newData = message.getFlag('swade-mb-helpers', 'rollRequest');
const template = templates['rollRequest/chatcard.html'];
const newContent = await foundry.applications.handlebars.renderTemplate(template, newData);
await message.update({ content: newContent });
} }
export async function requestRollFromTokens(tokens, rollType, rollDesc, options = {}) { export async function requestRollFromTokens(tokens, rollType, rollDesc, options = {}) {

View File

@ -14,7 +14,7 @@ import {
SwadeVAEbuttons, SwadeVAEbuttons,
updateOwnedToken, updateOwnedToken,
helpersRenderChatMessage, helpersRenderChatMessage,
helpersRenderChatLog, updateRequestRollChat,
} from './helpers.js'; } from './helpers.js';
import { preAttackRollModifiers, preDamageRollModifiers, preTraitRollModifiers } from './rollHelpers.js'; import { preAttackRollModifiers, preDamageRollModifiers, preTraitRollModifiers } from './rollHelpers.js';
import { log, moduleHelpers } from './globals.js'; import { log, moduleHelpers } from './globals.js';
@ -54,7 +54,6 @@ function _checkModule(name) {
Hooks.on('preCreateItem', embeddedHelperHook); Hooks.on('preCreateItem', embeddedHelperHook);
Hooks.on('renderChatMessageHTML', helpersRenderChatMessage); Hooks.on('renderChatMessageHTML', helpersRenderChatMessage);
Hooks.on('renderChatLogHTML', helpersRenderChatLog);
Hooks.on('swadePreRollAttribute', preTraitRollModifiers); Hooks.on('swadePreRollAttribute', preTraitRollModifiers);
Hooks.on('swadePreRollSkill', preTraitRollModifiers); Hooks.on('swadePreRollSkill', preTraitRollModifiers);
Hooks.on('swadeCalculateDefaultAttackMods', preAttackRollModifiers); Hooks.on('swadeCalculateDefaultAttackMods', preAttackRollModifiers);
@ -66,6 +65,7 @@ Hooks.on('visual-active-effects.createEffectButtons', SwadeVAEbuttons);
Hooks.once('socketlib.ready', () => { Hooks.once('socketlib.ready', () => {
const _socket = socketlib.registerModule('swade-mb-helpers'); const _socket = socketlib.registerModule('swade-mb-helpers');
_socket.register('updateRequestRollChat', updateRequestRollChat);
_socket.register('requestTokenRoll', requestTokenRoll); _socket.register('requestTokenRoll', requestTokenRoll);
_socket.register('updateOwnedToken', updateOwnedToken); _socket.register('updateOwnedToken', updateOwnedToken);
_socket.register('deleteToken', deleteToken); _socket.register('deleteToken', deleteToken);

View File

@ -7,24 +7,28 @@
<thead> <thead>
<tr> <tr>
<th>Token</th> <th>Token</th>
<th>Result</th> <th colspan="2">Result</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{#each tokens}} {{#each tokens}}
<tr data-token-uuid="{{uuid}}" class="mb-roll-{{resolveClass}}"> <tr data-token-uuid="{{uuid}}" class="mb-roll-{{resolveClass}}">
<td>{{name}}</td> <td>{{name}}</td>
<td> {{#unless resolved}}
{{#unless resolved}} <td colspan="2">
<button class="mb-roll-button">Roll</button> <button class="mb-roll-button">Roll</button>
<span class="mb-roll-waiting">Waiting...</span> <span class="mb-roll-waiting">Waiting...</span>
{{/unless}} </td>
{{#if resolved}} {{/unless}}
{{#if resolved}}
<td>
<span class="mb-roll-total">{{total}}</span> <span class="mb-roll-total">{{total}}</span>
</td>
<td>
<span class="mb-roll-result-icon">{{icon}}</span> <span class="mb-roll-result-icon">{{icon}}</span>
<span class="mb-roll-result">{{value}}</span> <span class="mb-roll-result">{{value}}</span>
{{/if}}
</td> </td>
{{/if}}
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>