Do you mean shuffle a pile of cards on the table? Here's a script that does that. Use the command: !shuffle-selected With all the cards in a pile selected.
const RandomDepth = (() => { // eslint-disable-line no-unused-vars
const version = 0.2; // eslint-disable-line no-unused-vars
const fixedToBack = (()=>{
let queue=[];
let last=0;
const DELAY = 100;
let callbacks = [];
const burndownQueue = ()=>{
let o = queue.shift();
toBack(o);
last = Date.now();
if(queue.length){
setTimeout(burndownQueue,DELAY);
} else {
let cblist = [...callbacks];
callbacks = [];
cblist.forEach(cb => cb());
}
};
return (obj, cb = ()=>{}) => {
callbacks.push(cb);
if(queue.length){
queue.push(obj);
} else {
let t = Date.now();
if(last+DELAY > t){
queue.push(obj);
setTimeout(burndownQueue,(last+DELAY-t));
} else {
toBack(obj);
last = t;
}
}
};
})();
const randomToFrontList = (l,cb) => {
while( l.length > 1) {
let i = randomInteger(l.length)-1;
fixedToBack(l[i]);
l = l.filter((o,k)=>k!==i);
}
fixedToBack(l[0],cb);
};
const handleMessages = (msg) => {
if('api' !== msg.type ) {
return;
}
let args = msg.content.split(/\s+/);
let who = (getObj('player',msg.playerid)||{get:()=>'API'}).get('_displayname');
switch(args.shift())
{
case '!shuffle-selected':
case '!random-depth': {
let tokens = (msg.selected || [])
.map(o=>getObj('graphic',o._id))
.filter(g=>undefined !== g)
;
let count = tokens.length;
if(count){
randomToFrontList(tokens,()=>{
sendChat('',`/w "${who}" Finished shuffling."`);
});
sendChat('',`/w "${who}" Shuffling ${count} items."`);
} else {
sendChat('',`/w "${who}" Please select something and run the command again."`);
}
}
break;
}
},
registerEventHandlers = function(){
on('chat:message',handleMessages);
};
on('ready',registerEventHandlers);
return {
};
})();