Hahaha, sorry, I didn't mean to imply you'd need to write it. How's this: Command: !tally-tokens Script: on('ready',()=>{
const getPageForPlayer = (playerid) => {
let player = getObj('player',playerid);
if(playerIsGM(playerid)){
return player.get('lastpage') || Campaign().get('playerpageid');
}
let psp = Campaign().get('playerspecificpages');
if(psp[playerid]){
return psp[playerid];
}
return Campaign().get('playerpageid');
};
const css = (o)=>Object.keys(o).reduce((m,k)=>`${m}${k}:${o[k]};`,'');
const s = {
box: css({
["font-weight"] : "bold",
["border-bottom"] : "2px solid #0F3DA0",
["border-top"] : "4px solid #0F3DA0",
["background-color"] : "#AEB6C6"
}),
heading: css({
["font-weight"] : "bold",
["font-size"] : "1.3em"
}),
title: css({
["font-weight"] : "bold"
}),
row: css({
["margin"] : ".1em",
["border-bottom"] : "1px solid #0F3DA0"
}),
num: css({
["display"] : "inline-block",
["float"] : "right",
["font-size"] : "1.3em",
["padding"] : ".1em"
}),
img: css({
["max-width"] : "2em",
["max-height"] : "2em",
["float"] : "left",
["border"] : "1px solid #999999",
["border-radius"] : ".25em",
["background-color"] : "white"
}),
clear: css({
["clear"] : "both"
})
};
const f = {
content: (t,c) => `<div style="${s.content}">${f.heading(t)}${c}</div>`,
heading: (t) => `<div style="${s.heading}">${t}</div>`,
box: (t) => `<div style="${s.box}">${t}</div>`,
img: (url) => `<img style="${s.img}" src="${url}">`,
title: (t) => `<div style="${s.title}">${t}</div>`,
clear: () => `<div style="${s.clear}"></div>`,
num: (n) => `<div style="${s.num}">${n}</div>`,
row: (...o) => `<div style="${s.row}">${o.join(' ')}${f.clear()}</div>`
};
on('chat:message',msg=>{
if('api'===msg.type && /^!tally-tokens(\b\s|$)/i.test(msg.content)){
let pageid = getPageForPlayer(msg.playerid);
let data =findObjs({
type: "graphic",
pageid: pageid,
layer: "objects"
}).reduce( (m,t)=>{
let n = t.get('name');
if(!m.hasOwnProperty(n)){
m[n]={
name: n,
img: t.get('imgsrc'),
count: 0
};
}
m[n].count++;
return m;
},{});
sendChat('',f.content("Token Tallies",f.box(
Object.values(data).map(d=>f.row(f.img(d.img),f.num(d.count),f.title(d.name))).join('')
)));
}
});
});