remove warpgate from fear roll and token vision macros

This commit is contained in:
Mike Bloy 2024-05-16 23:12:04 -05:00
parent 3357145ea9
commit a1246bf758
11 changed files with 172 additions and 137 deletions

View File

@ -1,39 +1,40 @@
const requestFearRollFromTokens = game.modules.get('swade-mb-helpers').api.requestRollFromTokens const requestFearRollFromTokens = game.modules.get('swade-mb-helpers').api.requestFearRollFromTokens;
async function main () { async function main() {
let tokens = Array.from(game.user.targets) let tokens = Array.from(game.user.targets);
if (tokens.length < 1) { if (tokens.length < 1) {
tokens = canvas.tokens.controlled tokens = canvas.tokens.controlled;
} }
if (tokens.length < 1) { if (tokens.length < 1) {
ui.notifications.error('Please target or select some tokens') ui.notifications.error('Please target or select some tokens');
return return;
} }
const menuData = { new Dialog({
inputs: [ title: 'Request Fear roll...',
{ type: 'info', label: `Requesting Fear roll from ${tokens.map(t => t.name).join(', ')}` }, content: `
{ type: 'number', label: 'Fear Check Penalty', options: 0 } <form>
], <p>Requesting Fear roll from ${tokens.map((t) => t.name).join(', ')}.</p>
buttons: [ <div class="form-group">
{ label: 'Request roll', value: 'ok', default: true }, <label>Fear Check Penalty
{ label: 'Cancel', value: 'cancel' } <input type="number" value="0" name="fear">
] </label>
} </div>
const menuConfig = { </form>`,
title: 'Request Fear roll...' buttons: {
} ok: {
const result = await warpgate.menu(menuData, menuConfig) label: 'Request Roll',
callback: (html) => {
if (result.buttons !== 'ok') { const fear = parseInt(html.find('input[name="fear"]').val()) || 0;
return const options = { targetNumber: 4, fear };
} requestFearRollFromTokens(tokens, options);
console.log(result) },
const fear = result.inputs[1] || 0 },
const targetNumber = 4 cancel: {
const options = { targetNumber, fear } label: 'Cancel',
},
requestFearRollFromTokens(tokens, options) },
}).render(true);
} }
main() main();

View File

@ -1,123 +1,157 @@
const argBright = typeof args === 'undefined' ? null : args.length > 0 ? args[0] : null /* globals args */
const argBright = typeof args === 'undefined' ? null : args.length > 0 ? args[0] : null;
// argument can be one of 'bright', 'dim', 'dark', 'pitchdark'. Other values // argument can be one of 'bright', 'dim', 'dark', 'pitchdark'. Other values
// will guess based on scene darkness // will guess based on scene darkness
const BRIGHT_LEVELS = ['bright', 'dim', 'dark', 'pitchdark'] const BRIGHT_LEVELS = ['bright', 'dim', 'dark', 'pitchdark'];
const THRESHOLDS = { const THRESHOLDS = {
dim: 0.4, dim: 0.4,
dark: 0.6, dark: 0.6,
pitchdark: 0.8 pitchdark: 0.8,
} };
const RANGES = { const RANGES = {
basic: { basic: {
bright: 25, bright: 25,
dim: 25, dim: 25,
dark: 10, dark: 10,
pitchdark: 0 pitchdark: 0,
}, },
lowlight: { lowlight: {
bright: 25, bright: 25,
dim: 25, dim: 25,
dark: 10, dark: 10,
pitchdark: 0 pitchdark: 0,
}, },
darkvision: { darkvision: {
bright: 25, bright: 25,
dim: 25, dim: 25,
dark: 10, dark: 10,
pitchdark: 10 pitchdark: 10,
}, },
nightvision: { nightvision: {
bright: 200, bright: 200,
dim: 200, dim: 200,
dark: 200, dark: 200,
pitchdark: 200 pitchdark: 200,
}, },
blindsense: { blindsense: {
bright: 5, bright: 5,
dim: 5, dim: 5,
dark: 5, dark: 5,
pitchdark: 5 pitchdark: 5,
} },
} };
const SIGHT_NAMES = { const SIGHT_NAMES = {
lowlight: 'low-light-vision', lowlight: 'low-light-vision',
darkvision: 'darkvision', darkvision: 'darkvision',
nightvision: 'night-vision', nightvision: 'night-vision',
blindsense: 'blindsense' blindsense: 'blindsense',
} };
const SIGHT_MODES = { const SIGHT_MODES = {
lowlight: 'lowlight', lowlight: 'lowlight',
darkvision: 'darkvision', darkvision: 'darkvision',
nightvision: 'darkvision', nightvision: 'darkvision',
basic: 'basic', basic: 'basic',
blindsense: 'blindsense' blindsense: 'blindsense',
};
function findAbility(token, swid) {
return token.actor.items.find((i) => i.type === 'ability' && i.system.swid === swid);
} }
function findAbility (token, swid) { async function main() {
return token.actor.items.find(i => i.type === 'ability' && i.system.swid === swid) const scene = game.scenes.current;
} let sceneBright = BRIGHT_LEVELS[0];
async function main () {
const scene = game.scenes.current
let sceneBright = BRIGHT_LEVELS[0]
if (scene.darkness > THRESHOLDS.pitchdark) { if (scene.darkness > THRESHOLDS.pitchdark) {
sceneBright = BRIGHT_LEVELS[3] sceneBright = BRIGHT_LEVELS[3];
} else if (scene.darkness > THRESHOLDS.dark) { } else if (scene.darkness > THRESHOLDS.dark) {
sceneBright = BRIGHT_LEVELS[2] sceneBright = BRIGHT_LEVELS[2];
} else if (scene.darkness > THRESHOLDS.dim) { } else if (scene.darkness > THRESHOLDS.dim) {
sceneBright = BRIGHT_LEVELS[1] sceneBright = BRIGHT_LEVELS[1];
} }
let bright = sceneBright let bright = sceneBright;
if (argBright && BRIGHT_LEVELS.includes(argBright)) { if (argBright && BRIGHT_LEVELS.includes(argBright)) {
bright = argBright bright = argBright;
}
const menuData = {
inputs: [
{ type: 'radio', label: 'Bright Light', options: ['bright', bright === BRIGHT_LEVELS[0]] },
{ type: 'radio', label: 'Dim Light', options: ['bright', bright === BRIGHT_LEVELS[1]] },
{ type: 'radio', label: 'Dark', options: ['bright', bright === BRIGHT_LEVELS[2]] },
{ type: 'radio', label: 'Pitch Dark', options: ['bright', bright === BRIGHT_LEVELS[3]] }
],
buttons: [
{ label: 'Select Scene Brightness', value: 'ok', default: true },
{ label: 'Cancel', value: 'cancel' }
]
}
const menuConfig = { title: 'Select scene brightness' }
const result = await warpgate.menu(menuData, menuConfig)
if (result.buttons !== 'ok') { return }
for (let i = 0; i < 4; i++) {
if (result.inputs[i]) { bright = BRIGHT_LEVELS[i] }
} }
for (const tokenId of scene.tokens.map(t => t.id)) { new Dialog({
const token = scene.tokens.get(tokenId) title: 'Select scene brightness',
if (!token.sight.enabled) { content: `
console.log(`Skipping ${token.name}, vision not enabled`) <form>
continue <h2>Set token vision</h2>
// don't set sight on a token where it's not enabled <p>All tokens with vision will be adjusted</p>
} <div class="form-group">
let sightType = 'basic' <label class="checkbox">
for (const sight in SIGHT_NAMES) { <input type="radio" name="bright" value="${BRIGHT_LEVELS[0]}"
if (findAbility(token, SIGHT_NAMES[sight])) { ${bright === BRIGHT_LEVELS[0] ? 'checked' : ''}/>
sightType = sight Bright Light
} </label>
} </div>
const range = RANGES[sightType][bright] <div class="form-group">
const sightMode = SIGHT_MODES[sightType] <label class="checkbox">
const visionModeData = CONFIG.Canvas.visionModes[sightMode].vision.defaults <input type="radio" name="bright" value="${BRIGHT_LEVELS[1]}"
const data = { ${bright === BRIGHT_LEVELS[1] ? 'checked' : ''}/>
'sight.range': range, Dim Light
'sight.visionMode': sightMode, </label>
'sight.attenuation': visionModeData.attenuation, </div>
'sight.brightness': visionModeData.brightness, <div class="form-group">
'sight.saturation': visionModeData.saturation, <label class="checkbox">
'sight.contrast': visionModeData.contrast <input type="radio" name="bright" value="${BRIGHT_LEVELS[2]}"
} ${bright === BRIGHT_LEVELS[2] ? 'checked' : ''}/>
console.log(`Updating ${token.name}:`, sightType, bright, data) Dark
await token.update(data) </label>
} </div>
<div class="form-group">
<label class="checkbox">
<input type="radio" name="bright" value="${BRIGHT_LEVELS[3]}"
${bright === BRIGHT_LEVELS[3] ? 'checked' : ''}/>
Pitch Dark
</label>
</div>
</form>
`,
buttons: {
ok: {
label: 'Select scene Brightness',
value: 'ok',
callback: (html) => {
const form = html[0].querySelector('form');
const formDataObject = new FormDataExtended(form).Object;
console.log('form data', formDataObject, form);
bright = formDataObject.bright;
for (const tokenId of scene.tokens.map((t) => t.id)) {
const token = scene.tokens.get(tokenId);
if (!token.sight.enabled) {
console.log(`Skipping ${token.name}, vision not enabled`);
continue;
// don't set sight on a token where it's not enabled
}
let sightType = 'basic';
for (const sight in SIGHT_NAMES) {
if (findAbility(token, SIGHT_NAMES[sight])) {
sightType = sight;
}
}
const range = RANGES[sightType][bright];
const sightMode = SIGHT_MODES[sightType];
const visionModeData = CONFIG.Canvas.visionModes[sightMode].vision.defaults;
const data = {
'sight.range': range,
'sight.visionMode': sightMode,
'sight.attenuation': visionModeData.attenuation,
'sight.brightness': visionModeData.brightness,
'sight.saturation': visionModeData.saturation,
'sight.contrast': visionModeData.contrast,
};
console.log(`Updating ${token.name}:`, sightType, bright, data);
token.update(data);
}
},
},
cancel: {
label: 'Cancel',
},
},
}).render(true);
} }
main() main();

View File

@ -1,5 +1,5 @@
2024/05/11-22:30:06.794747 7f284b7fe700 Delete type=3 #1 2024/05/16-23:14:05.503945 7fb7397bc700 Delete type=3 #1
2024/05/11-22:30:06.796933 7f284a7fc700 Level-0 table #5: started 2024/05/16-23:14:05.506913 7fb738fbb700 Level-0 table #5: started
2024/05/11-22:30:06.799703 7f284a7fc700 Level-0 table #5: 17097 bytes OK 2024/05/16-23:14:05.514549 7fb738fbb700 Level-0 table #5: 17097 bytes OK
2024/05/11-22:30:06.802321 7f284a7fc700 Delete type=0 #3 2024/05/16-23:14:05.529036 7fb738fbb700 Delete type=0 #3
2024/05/11-22:30:06.802396 7f284a7fc700 Manual compaction at level-0 from '!folders!0nDRFmMBs5DBJU9M' @ 72057594037927935 : 1 .. '!items.effects!RC1Nz6iph8wPPK1B.g9W5hJisq3MsCpZW' @ 0 : 0; will stop at (end) 2024/05/16-23:14:05.529186 7fb738fbb700 Manual compaction at level-0 from '!folders!0nDRFmMBs5DBJU9M' @ 72057594037927935 : 1 .. '!items.effects!RC1Nz6iph8wPPK1B.g9W5hJisq3MsCpZW' @ 0 : 0; will stop at (end)

View File

@ -1,5 +1,5 @@
2024/05/11-22:30:06.919608 7f7785fbc700 Delete type=3 #1 2024/05/16-23:14:05.659843 7f43fa7bf700 Delete type=3 #1
2024/05/11-22:30:06.921651 7f7785540700 Level-0 table #5: started 2024/05/16-23:14:05.662531 7f415bfff700 Level-0 table #5: started
2024/05/11-22:30:06.924491 7f7785540700 Level-0 table #5: 6787 bytes OK 2024/05/16-23:14:05.669856 7f415bfff700 Level-0 table #5: 6787 bytes OK
2024/05/11-22:30:06.927162 7f7785540700 Delete type=0 #3 2024/05/16-23:14:05.678710 7f415bfff700 Delete type=0 #3
2024/05/11-22:30:06.927239 7f7785540700 Manual compaction at level-0 from '!items!JWyBQe4tnOYljFAF' @ 72057594037927935 : 1 .. '!items!tWWSfEMmLmws6Yb1' @ 0 : 0; will stop at (end) 2024/05/16-23:14:05.678846 7f415bfff700 Manual compaction at level-0 from '!items!JWyBQe4tnOYljFAF' @ 72057594037927935 : 1 .. '!items!tWWSfEMmLmws6Yb1' @ 0 : 0; will stop at (end)

View File

@ -1,5 +1,5 @@
2024/05/11-22:30:07.047674 7ff91d7bd700 Delete type=3 #1 2024/05/16-23:14:05.828069 7fce92ffd700 Delete type=3 #1
2024/05/11-22:30:07.050100 7ff67ffff700 Level-0 table #5: started 2024/05/16-23:14:05.830670 7fce92581700 Level-0 table #5: started
2024/05/11-22:30:07.052851 7ff67ffff700 Level-0 table #5: 1751 bytes OK 2024/05/16-23:14:05.841187 7fce92581700 Level-0 table #5: 1751 bytes OK
2024/05/11-22:30:07.055441 7ff67ffff700 Delete type=0 #3 2024/05/16-23:14:05.856746 7fce92581700 Delete type=0 #3
2024/05/11-22:30:07.055515 7ff67ffff700 Manual compaction at level-0 from '!actors!U5v4gFHquo0Y1SAq' @ 72057594037927935 : 1 .. '!actors!U5v4gFHquo0Y1SAq' @ 0 : 0; will stop at (end) 2024/05/16-23:14:05.856904 7fce92581700 Manual compaction at level-0 from '!actors!U5v4gFHquo0Y1SAq' @ 72057594037927935 : 1 .. '!actors!U5v4gFHquo0Y1SAq' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -1,5 +1,5 @@
2024/05/11-22:30:07.176777 7f1c8173d700 Delete type=3 #1 2024/05/16-23:14:06.012926 7f4a3bfff700 Delete type=3 #1
2024/05/11-22:30:07.179316 7f19e3fff700 Level-0 table #5: started 2024/05/16-23:14:06.015815 7f4a3a7fc700 Level-0 table #5: started
2024/05/11-22:30:07.182350 7f19e3fff700 Level-0 table #5: 24404 bytes OK 2024/05/16-23:14:06.024676 7f4a3a7fc700 Level-0 table #5: 24947 bytes OK
2024/05/11-22:30:07.185008 7f19e3fff700 Delete type=0 #3 2024/05/16-23:14:06.043395 7f4a3a7fc700 Delete type=0 #3
2024/05/11-22:30:07.185087 7f19e3fff700 Manual compaction at level-0 from '!folders!8FWN37c0gcpAisAv' @ 72057594037927935 : 1 .. '!macros!ypFtlnrgQkzqLpxI' @ 0 : 0; will stop at (end) 2024/05/16-23:14:06.043576 7f4a3a7fc700 Manual compaction at level-0 from '!folders!8FWN37c0gcpAisAv' @ 72057594037927935 : 1 .. '!macros!ypFtlnrgQkzqLpxI' @ 0 : 0; will stop at (end)

View File

@ -1,5 +1,5 @@
2024/05/11-22:30:07.310028 7fc6c173e700 Delete type=3 #1 2024/05/16-23:14:06.188000 7f7cda7bf700 Delete type=3 #1
2024/05/11-22:30:07.312330 7fc6bfcc0700 Level-0 table #5: started 2024/05/16-23:14:06.191101 7f7a3bfff700 Level-0 table #5: started
2024/05/11-22:30:07.315206 7fc6bfcc0700 Level-0 table #5: 18987 bytes OK 2024/05/16-23:14:06.210876 7f7a3bfff700 Level-0 table #5: 18987 bytes OK
2024/05/11-22:30:07.317871 7fc6bfcc0700 Delete type=0 #3 2024/05/16-23:14:06.219803 7f7a3bfff700 Delete type=0 #3
2024/05/11-22:30:07.317982 7fc6bfcc0700 Manual compaction at level-0 from '!journal!HbtPlHNFO1L6RVj0' @ 72057594037927935 : 1 .. '!journal.pages!w4TImRTAiNiqDWeL.vQhO6BVdKZOubTUQ' @ 0 : 0; will stop at (end) 2024/05/16-23:14:06.219923 7f7a3bfff700 Manual compaction at level-0 from '!journal!HbtPlHNFO1L6RVj0' @ 72057594037927935 : 1 .. '!journal.pages!w4TImRTAiNiqDWeL.vQhO6BVdKZOubTUQ' @ 0 : 0; will stop at (end)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long