I ' m having issues with this being able to recreate "Possible Infinite Loop Detected" reliably by using the command several times. Until I can figure out why I'm leaving this post striked out. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- With the help of The Aaron (Thanks man!) I have a new copy of the script which should do the trick: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- I have a few dungeons that are multiple floors and really big (100 x 100 for the larger floors) While adjusting encounters and adding / removing NPCs I sometimes forget where a token is and have a hard time finding them. Here is a quick and dirty script I wrote where you supply the token's name and it will "ping" its location and move your window centered on the token (if it finds one) Syntax: !find-token -- [token name] Here is the UPDATED Script: /* findTokenn v0.8.2 By: Kastion Profile: <a href="https://app.roll20.net/users/3173313/kastion" rel="nofollow">https://app.roll20.net/users/3173313/kastion</a> */ on('ready',()=>{ const getPageForPlayer = (playerid) => { let player = getObj('player',playerid); if(playerIsGM(playerid)){ return player.get('lastpage'); } let psp = Campaign().get('playerspecificpages'); if(psp[playerid]){ return psp[playerid]; } return Campaign.get('playerpageid'); }; on('chat:message',(msg)=>{ if('api' !== msg.type || !playerIsGM(msg.playerid)) { return; } const cmdName = "!find-token"; const msgTxt = msg.content; if (msgTxt.indexOf(cmdName) === 0 && msgTxt.indexOf("--") !== -1 ) { let token_name = msg.content.split("--")[1]; if (token_name) { const playerPageID = getPageForPlayer(msg.playerid); const tokens = findObjs({ _pageid: playerPageID, _type: "graphic", _name: token_name.trim() }); if(tokens.length){ const doPings = () => { let t = tokens.shift(); sendPing(t.get("left"), t.get("top"), playerPageID, msg.playerid, true); if(tokens.length){ setTimeout(doPings,0); } }; doPings(); } else { sendChat('FindToken',`/w gm No tokens found on your current page named <code>${token_name}</code>.`); } } else { sendChat('FindToken',`/w gm Please use the format <code>!find-token -- token name</code>.`); } } }); log("-=> Find Token Loaded (!find-token) [Last Edited July 15th 2018] <=-"); }); Short and simple. Maybe someone will find it as useful as I have.