Character Vault
Any Concept / Any System
Your System Come To Life
Roll20 for Android
Streamlined for your Tablet
Roll20 for iPad
Streamlined for your Tablet

Personal tools

Script:Highlight Token at Top of Initiative

From Roll20 Wiki

Revision as of 22:23, 7 January 2015 by Brian (Talk | contribs)

Jump to: navigation, search
API ScriptAuthor: HoneyBadger
Version: 1.2
Last Modified: 2014-03-15
Code: Highlight Token at Top of Initiative
Dependencies: None
Conflicts: None

Highlights the token at the top of the turn order window. Also creates the API command !eot, allowing players to advance the turn.




There is one configuration variable near the top of the script. You may alter it to customize the script functionality:

  • AnnounceNewRound – Set to true if you want the script to announce the round, or false otherwise.


var TurnOrderAgent = TurnOrderAgent || {};

// AnnounceNewRound - Set to TRUE if you want the script to announce
// the beginning of each new round.
var AnnounceNewRound = true;

on("chat:message", function(msg) {
    // Exit if not an api command
    if (msg.type != "api") return;
    // Get the API Chat Command
    msg.who = msg.who.replace(" (GM)", "");
    msg.content = msg.content.replace("(GM) ", "");
    var command = msg.content.split(" ", 1);

    if (command == "!eot") {
        if (!Campaign().get('turnorder')) return;                   // Exit if the turn order tracker is not open
        var turn_order = JSON.parse(Campaign().get('turnorder'));   // Parse the turn order information into JSON
        if (!turn_order.length) return;                             // Exit if there are no tokens on the tracker
        var turn = turn_order.shift();                              // Grab the info for the top of initiative        
        turn_order.push({                                           // Add the info to the bottom of initiative
            custom: turn.custom
        Campaign().set("turnorder", JSON.stringify(turn_order));    // Send the turn order back to the tracker

on("change:campaign:turnorder", function(obj) {

function TurnOrderAgent () {
    if (!Campaign().get("turnorder")) return;
    var turn_order = JSON.parse(Campaign().get("turnorder"));
    if (!turn_order.length) return;
    if (typeof turn_order[0].pr == "string") {
        if (turn_order[0].pr.substring(0, 5) == "Round") {
            var RoundTracker = turn_order[0].pr;
            var CurrentRound = parseInt(RoundTracker.substring(5));
            turn_order[0].pr = "Round " + (CurrentRound + 1);
            Campaign().set({turnorder: JSON.stringify(turn_order)});
            if(AnnounceNewRound == true) {
                sendChat("", "/desc ");
                sendChat("", "/direct <div style='width: 100%; color: #C8DE84; border: 1px solid #91bd09; background-color: #749a02; box-shadow: 0 0 15px #91bd09; display: block; text-align: center; font-size: 20px; padding: 5px 0; margin-bottom: 0.25em; font-family: Garamond;'>" + turn_order[0].pr + "</div>");
    // Exit script if custom item on turn order tracker instead of a token...
    if (turn_order[0].id == -1) return;
    var current_token = getObj("graphic", turn_order[0].id);
    var initiative_highlighter = findObjs({name: "InitiativeHighlight", pageid: current_token.get("pageid")}, {caseInsensitive: true})[0];
    if (initiative_highlighter == undefined) {
        // sendChat("ERROR", "/w gm Cannot find an initiative highlight token on this page.");
    if (initiative_highlighter.get("layer") == "gmlayer" && current_token.get("layer") != "gmlayer") {
            "top": current_token.get("top"),
            "left": current_token.get("left"),
            "height": current_token.get("height"),
            "width": current_token.get("width")
        setTimeout(function() {
                "layer": current_token.get("layer")
        }, 500);
    } else {
            "layer": current_token.get("layer"),
            "top": current_token.get("top"),
            "left": current_token.get("left"),
            "height": current_token.get("height"),
            "width": current_token.get("width")