Hi Aaron, Here's the script I think David is talking about (thanks for the ping!): on('ready',()=>{
const scriptName = 'RandomLightFlash';
const version = '0.1.0';
const schemaVersion = 0.1;
const lastUpdate = 1643732108;
const CHANGE_MIN = 5;
const CHANGE_MAX = 7;
const EmitPattern = [[0,2.5],[2.5,5],[5,10],[5,5],[2.5,5],[0,2.5]];
const PHASE_DELAY = 100;
const checkInstall = () => {
log(`-=> ${scriptName} v${version} <=- [${lastUpdate}]`);
if (
!state.hasOwnProperty(scriptName) ||
state[scriptName].version !== schemaVersion
) {
log(` > Updating Schema to v${schemaVersion} <`);
switch (state[scriptName] && state[scriptName].version) {
case 0.1:
/* break; // intentional dropthrough */ /* falls through */
case "UpdateSchemaVersion":
state[scriptName].version = schemaVersion;
break;
default:
state[scriptName] = {
version: schemaVersion,
options: {},
tokenMap: {}
};
break;
}
}
};
const flashToken = (t) => {
t.set({
emits_bright_light: true,
emits_low_light: true,
});
let phases = [...EmitPattern];
const burndown = () => {
let phase = phases.shift();
if(phase){
t.set({
bright_light_distance: phase[0],
low_light_distance: phase[0]+phase[1]
});
setTimeout(burndown,PHASE_DELAY);
} else {
t.set({
emits_bright_light: false,
emits_low_light: false,
bright_light_distance: 0,
low_light_distance: 0
});
}
};
burndown();
};
const checkTokens = () => {
let now = Date.now();
Object.keys(state[scriptName].tokenMap).forEach(t=>{
if(state[scriptName].tokenMap[t].nextChange < now){
let token = getObj('graphic',t);
if(token){
flashToken(token);
state[scriptName].tokenMap[t].nextChange = now + (CHANGE_MIN + randomInteger(CHANGE_MAX-CHANGE_MIN))*1000;
} else {
delete state[scriptName].tokenMap[t];
}
}
});
};
let interval = setInterval(checkTokens,1000);
on('chat:message',msg=>{
if('api'===msg.type && /^!toggle-flashing(\b\s|$)/i.test(msg.content) && playerIsGM(msg.playerid)){
let who = (getObj('player',msg.playerid)||{get:()=>'API'}).get('_displayname');
let now = Date.now();
(msg.selected || [])
.map(o=>getObj('graphic',o._id))
.filter(g=>undefined !== g)
.forEach(token=>{
if(state[scriptName].tokenMap.hasOwnProperty(token.id)){
delete state[scriptName].tokenMap[token.id];
} else {
state[scriptName].tokenMap[token.id] = {
nextChange: now + (CHANGE_MIN + randomInteger(CHANGE_MAX-CHANGE_MIN))*1000
};
}
})
;
}
});
checkInstall();
});
Just select tokens you want to have as your emitters and run: !toggle-flashing Those tokens will then begin emitting UDL flashes every 5-7 seconds. Cheers!