EDIT: The steps below are for the token-swap script. Were you referring to that one or the SpawnDefaultToken script? For Spawn, you can install from the one-click menu, or manually install a newer version here using the same steps I describe below. Explanations of the Spawn commands are given here . Feel free to post on that thread if you have questions. Ok, np. It just requires a manual install. 1) go to your api page and click on "New Script". 2) Paste the script code into the black window (included below for convenience) 3) Click the blue "Save Script" button. Now you will have the token-swap script installed! To use it, just create a macro (or preferably an ability as a token action on the Echo and/or players sheet) with the following content: !token-swap @{selected|token_id} @{target|Swap with|token_id} To use it, just select any token then run the macro and target another token that you want to swap places with! Here's TheAaron's token-swap code: on('ready',function(){
"use strict";
on('chat:message',function(msg){
var args, who;
if (msg.type !== "api") {
return;
}
who = getObj('player',msg.playerid).get('_displayname');
args = msg.content.split(/\s+/);
switch(args.shift()) {
case '!token-swap': {
let t1 = getObj('graphic',args[0]);
let t2 = getObj('graphic',args[1]);
if(!t1 || !t2) {
sendChat('TokenSwap', `/w "${who}" Please provide 2 token ids to swap: <code>!token-swap ID1 ID2</code>`);
return;
}
let p1={
top: t1.get('top'),
left: t1.get('left')
};
let p2={
top: t2.get('top'),
left: t2.get('left')
};
t1.set(p2);
t2.set(p1);
if(!playerIsGM(msg.playerid)){
sendChat('TokenSwap', `/w gm <code>${who}</code> just swapped <b>${t1.get('name')}</b> and <b>${t2.get('name')}</b>. <a href="!token-swap ${t1.id} ${t2.id}">Swap Back</a>`);
}
}
break;
}
});
});