So, i build my first Script. It tracks encumberance and anounce in the chat when someone gets encumbered and sets a character status icon in its token. Ofcourse i copied it from someone else (Giger HazInspiration) and modified it for my on use. So the script tracks if the character sheet encumbrance has been updated in the OGL 5E sheet and sets a token (snail) if the character has overweight. I created 3 functions: announceEncumberance for Encumbered, announceEncumberanceOne for Heavily Encumbered and announceEncumberanceTwo for immobile. The thing is that i am using the line bellow to set the token status to snail, but with this status marker I can't differentiate the 3 status. I know that using The Aaron TokenMod script I can put a number in each status and my idea is to use the numbers (1, 2 and 3, or just 1 and 2) to represent each of the status. How can i implment that in the script? getCharacterTokens(character.id).forEach((t)=>t.set('status_snail',true)); TokenMod Code to use a number and a status icon Update v0.8.2 -- Added multiple status markers. I haven't updated the help for it yet, but basically, anything that works for a single status works for one with an index. The first command here sets the blue status marker on with a number of 1. The second line adds a second blue status marker and sets it's value to 2: !token-mod --set statusmarkers|snail:1
!token-mod --set statusmarkers|snail[2]:2 Here is the whole code for tracking encumberance: //HazEncumbrance v. 0.1 created on the 11-05-2020 by Krupas, my first script code shamelessly stolen from Giger HazInspiration Script
/*
This script reports to the chat window, and updates the players token with an icon, to indicate whether the player has overweight or not.
Designed for the 5th Edition ( OGL by Roll20 ) Character Sheet.
*/
on('ready',()=>{
const getCharacterTokens = (cid) => findObjs({type:'graphic'}).filter((t)=>t.get('represents')===cid);
//Brightness
var getBrightness = getBrightness || {};
var getHex2Dec = getHex2Dec || {};
function getBrightness(hex) {
hex = hex.replace('#', '');
var c_r = getHex2Dec(hex.substr(0, 2));
var c_g = getHex2Dec(hex.substr(2, 2));
var c_b = getHex2Dec(hex.substr(4, 2));
return ((c_r * 299) + (c_g * 587) + (c_b * 114)) / 1000;
};
function getHex2Dec(hex_string) {
hex_string = (hex_string + '').replace(/[^a-f0-9]/gi, '');
return parseInt(hex_string, 16);
};
const announceEncumberance = function (id) {
//Handles Chat Annoucement
if ( _.isEmpty(id)) return;
var character = getObj("character", id);
var AlertTokenName = character.get("name");
var AlertColor = getObj("player", character.get("controlledby").split(",")[0]).get("color");
var AlertTextColor = (getBrightness(AlertColor) < (255 / 2)) ? "#FFF" : "#000";
var AlertShadowColor = (AlertTextColor == "#000") ? "#FFF" : "#000";
var AlertOuterStyle = "max-height: 500px; width: 100%; margin: 10px 0px 5px -7px; line-height: 40px;";
var AlertInnerStyle = "max-height: 500px; width: 100%; margin: 0px; padding: 0px 0px 2px 0px; clear: both; overflow: hidden; font-family: Candal; font-weight: lighter; font-size: 13px; line-height: 20px; color: " + AlertTextColor + "; background-color: " + AlertColor + "; background-image: linear-gradient(rgba(255, 255, 255, .4), rgba(255, 255, 255, 0)); border: 1px solid #000; border-radius: 4px; text-shadow: -1px -1px 0 " + AlertShadowColor + ", 1px -1px 0 " + AlertShadowColor + ", -1px 1px 0 " + AlertShadowColor + ", 1px 1px 0 " + AlertShadowColor + ";";
var AlertImageStyle = "height: 40px; width: 40px; float: right; margin: -32px 5px 0px 0px;";
sendChat("", "/desc <div style='" + AlertOuterStyle + "'><div style='" + AlertInnerStyle + "'>" + AlertTokenName + " está com Sobrecarga! </div>");
//Set Status Icon on Token
getCharacterTokens(character.id).forEach((t)=>t.set('status_snail',true));
};
const announceEncumberanceOne = function (id) {
//Handles Chat Annoucement
if ( _.isEmpty(id)) return;
var character = getObj("character", id);
var AlertTokenName = character.get("name");
var AlertColor = getObj("player", character.get("controlledby").split(",")[0]).get("color");
var AlertTextColor = (getBrightness(AlertColor) < (255 / 2)) ? "#FFF" : "#000";
var AlertShadowColor = (AlertTextColor == "#000") ? "#FFF" : "#000";
var AlertOuterStyle = "max-height: 500px; width: 100%; margin: 10px 0px 5px -7px; line-height: 40px;";
var AlertInnerStyle = "max-height: 500px; width: 100%; margin: 0px; padding: 0px 0px 2px 0px; clear: both; overflow: hidden; font-family: Candal; font-weight: lighter; font-size: 13px; line-height: 20px; color: " + AlertTextColor + "; background-color: " + AlertColor + "; background-image: linear-gradient(rgba(255, 255, 255, .4), rgba(255, 255, 255, 0)); border: 1px solid #000; border-radius: 4px; text-shadow: -1px -1px 0 " + AlertShadowColor + ", 1px -1px 0 " + AlertShadowColor + ", -1px 1px 0 " + AlertShadowColor + ", 1px 1px 0 " + AlertShadowColor + ";";
var AlertImageStyle = "height: 40px; width: 40px; float: right; margin: -32px 5px 0px 0px;";
sendChat("", "/desc <div style='" + AlertOuterStyle + "'><div style='" + AlertInnerStyle + "'>" + AlertTokenName + " está com Sobrecarga Pesada! </div><img src='<a href="https://s3.amazonaws.com/files.d20.io/images/39783029/-w45_4ICV9QnFzijBimwKA/max.png" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/39783029/-w45_4ICV9QnFzijBimwKA/max.png</a>' style='" + AlertImageStyle + "'></img></div>");
//Set Status Icon on Token
getCharacterTokens(character.id).forEach((t)=>t.set('status_snail',true));
};
const announceEncumberanceTwo = function (id) {
//Handles Chat Annoucement
if ( _.isEmpty(id)) return;
var character = getObj("character", id);
var AlertTokenName = character.get("name");
var AlertColor = getObj("player", character.get("controlledby").split(",")[0]).get("color");
var AlertTextColor = (getBrightness(AlertColor) < (255 / 2)) ? "#FFF" : "#000";
var AlertShadowColor = (AlertTextColor == "#000") ? "#FFF" : "#000";
var AlertOuterStyle = "max-height: 500px; width: 100%; margin: 10px 0px 5px -7px; line-height: 40px;";
var AlertInnerStyle = "max-height: 500px; width: 100%; margin: 0px; padding: 0px 0px 2px 0px; clear: both; overflow: hidden; font-family: Candal; font-weight: lighter; font-size: 13px; line-height: 20px; color: " + AlertTextColor + "; background-color: " + AlertColor + "; background-image: linear-gradient(rgba(255, 255, 255, .4), rgba(255, 255, 255, 0)); border: 1px solid #000; border-radius: 4px; text-shadow: -1px -1px 0 " + AlertShadowColor + ", 1px -1px 0 " + AlertShadowColor + ", -1px 1px 0 " + AlertShadowColor + ", 1px 1px 0 " + AlertShadowColor + ";";
var AlertImageStyle = "height: 40px; width: 40px; float: right; margin: -32px 5px 0px 0px;";
sendChat("", "/desc <div style='" + AlertOuterStyle + "'><div style='" + AlertInnerStyle + "'>" + AlertTokenName + " está imóvel! </div>");
//Set Status Icon on Token
getCharacterTokens(character.id).forEach((t)=>t.set('status_snail',true));
};
const dropEncumberance = function (id) {
//Remove Status Icon from Token
if ( _.isEmpty(id)) return;
var character = getObj("character", id);
var AlertTokenName = character.get("name");
var AlertColor = getObj("player", character.get("controlledby").split(",")[0]).get("color");
var AlertTextColor = (getBrightness(AlertColor) < (255 / 2)) ? "#FFF" : "#000";
var AlertShadowColor = (AlertTextColor == "#000") ? "#FFF" : "#000";
var AlertOuterStyle = "max-height: 500px; width: 100%; margin: 10px 0px 5px -7px; line-height: 40px;";
var AlertInnerStyle = "max-height: 500px; width: 100%; margin: 0px; padding: 0px 0px 2px 0px; clear: both; overflow: hidden; font-family: Candal; font-weight: lighter; font-size: 13px; line-height: 20px; color: " + AlertTextColor + "; background-color: " + AlertColor + "; background-image: linear-gradient(rgba(255, 255, 255, .4), rgba(255, 255, 255, 0)); border: 1px solid #000; border-radius: 4px; text-shadow: -1px -1px 0 " + AlertShadowColor + ", 1px -1px 0 " + AlertShadowColor + ", -1px 1px 0 " + AlertShadowColor + ", 1px 1px 0 " + AlertShadowColor + ";";
var AlertImageStyle = "height: 40px; width: 40px; float: right; margin: -32px 5px 0px 0px;";
sendChat("", "/desc <div style='" + AlertOuterStyle + "'><div style='" + AlertInnerStyle + "'>" + AlertTokenName + " não está mais com sobrecarga! </div>");
//Drop Status Icon on Token
getCharacterTokens(character.id).forEach((t)=>t.set('status_snail',false));
};
on("chat:message", function(msg) {
//Is script running?
if(msg.type == "api" && msg.content.indexOf("!inspiration") !== -1) {
sendChat("", "/desc <div style='max-height: 40px; width: 100%; margin: 10px 0px 5px -7px; line-height: 40px;'><div style='max-height: 20px; width: 100%; margin: 0px; padding: 0px 0px 2px 0px; clear: both; overflow: hidden; font-family: Candal; font-weight: lighter; font-size: 13px; line-height: 20px; color: fff; background-color: 20b2aa; background-image: linear-gradient(rgba(255, 255, 255, .4), rgba(255, 255, 255, 0)); border: 1px solid #000; border-radius: 4px; text-shadow: -1px -1px 0 000, 1px -1px 0 000, -1px 1px 0 000, 1px 1px 0 000'>Inspiration Tracking Online!</div></div>");
}
});
// Has a character sheet been updated?
on("change:attribute", function(obj) {
var isupdated = obj.get("name");
//Was it the Inspiration attribute?
if (isupdated =="encumberance"){
var val = obj.get("current");
var id = obj.get("_characterid");
//Gained encumberance?
if (isupdated =="encumberance" && val == "ENCUMBERED"){
// Announce Character Encumbered
announceEncumberance(id);
}if (isupdated =="encumberance" && val == "HEAVILY ENCUMBERED"){
// Announce Character Heavy Encumbered
announceEncumberanceOne(id);
}if (isupdated =="encumberance" && val == "IMMOBILE"){
// Announce Character Immobile
announceEncumberanceTwo(id);
}
else if (isupdated =="encumberance" && val == " "){
//Remove Encumbered Icon from Token
dropEncumberance(id);
}
}
});
log('-=> HazEncumberance <=- V0.1');
sendChat("", "/desc <div style='max-height: 40px; width: 100%; margin: 10px 0px 5px -7px; line-height: 40px;'><div style='max-height: 20px; width: 100%; margin: 0px; padding: 0px 0px 2px 0px; clear: both; overflow: hidden; font-family: Candal; font-weight: lighter; font-size: 13px; line-height: 20px; color: fff; background-color: 20b2aa; background-image: linear-gradient(rgba(255, 255, 255, .4), rgba(255, 255, 255, 0)); border: 1px solid #000; border-radius: 4px; text-shadow: -1px -1px 0 000, 1px -1px 0 000, -1px 1px 0 000, 1px 1px 0 000'>Encumberance Tracking Online!</div></div>");
});