Give this a whirl, it will renumber any selected tokens. Tokens that represent a character will get the character name + a monotonically increasing integer value appended. Tokens that don't represent a character will get their current name with any trailing number removed and a monotonically increasing integer value appended. You can set a starting number by adding it as an argument. Each subset will start number with that number: Calling it: !renumber-selected Calling with a different base number: !renumber-selected 100 Code: on('ready',()=>{
on('chat:message',msg=>{
if('api'===msg.type && /^!renumber-selected(\b\s|$)/i.test(msg.content) && playerIsGM(msg.playerid)){
let args = msg.content.split(/\s+/);
let numBase = (parseInt(args[1])||1)-1;
let tcmap = (msg.selected || [])
.map(o=>getObj('graphic',o._id))
.filter(g=>undefined !== g)
.reduce((m,t)=>{
const rep=t.get('represents')||'%%NOCHAR%%';
m[rep]=m[rep]||[];
m[rep].push(t);
return m;
},{});
Object.keys(tcmap).forEach( c => {
let ts = tcmap[c];
let n = numBase;
let numer = (t) => {
let baseName = t.get('name').replace(/\s+\d*$/,'');
t.set('name', `${baseName} ${++n}`);
};
if('%%NOCHAR%%' !== c){
// number character tokens
let character = getObj('character',c);
if(c) {
numer = (t) => {
t.set('name', `${character.get('name')} ${++n}`);
};
}
}
ts.forEach(numer);
});
}
});
});