Skip to content

DrD2StatusMarkers patch 0.1.4 #2022

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions DrD2StatusMarkers/0.1.4/DrD2StatusMarkers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
// Github: TBD
// By: nesuprachy
// Contact: https://app.roll20.net/users/11071738/nesuprachy
//
// This script sets token markers based on relevant sheet attributes.
// Works with the DrD2 token marker set, icons must be named `RED`, `BLU`, `GRN`, `VIO`, `BLK`, `GRY`, `load` followed by corresponding values
// Uses TokenMod to set token markers from chat https://wiki.roll20.net/Script:Token_Mod

var DrD2StatusMarkers = DrD2StatusMarkers || (function() {
'use strict';

const version = '0.1.4';
const lastUpdate = 1739435813976;
const markerAttributes = ['body_scarred', 'spirit_scarred', 'influence_scarred', 'danger', 'advantages', 'companion_bond_scarred', 'load'];
const markerMap = {
body_scarred: 'RED',
spirit_scarred: 'BLU',
influence_scarred: 'GRN',
danger: 'VIO',
advantages: 'BLK',
companion_bond_scarred: 'GRY',
load: 'load'
};

checkInstall = function () {
log(`-=> DrD2StatusMarkers v${version} <=- [${new Date(lastUpdate)}]`);
},

handleMarkerAttributes = function (obj, prev) {
//const startTime = Date.now();

const attr = obj.get('name');
let marker = markerMap[attr];
const charId = obj.get('_characterid');

// Parse old and new values
const prevVal = (attr === 'load') ? prev.current : parseInt(prev.current) || 0;
const newVal = (attr === 'load') ? obj.get('current') : parseInt(obj.get('current')) || 0;
if(newVal === prevVal) return;

//log(`\'${obj.get('name')}\' of character \'${(getObj('character', charId)).get('name')}\' changed from ${prevVal} -> ${newVal}`);

// If attribute is 'load' set marker to 'S', 'L' or 'T'
// If newVal is between 0 and 10 set marker to new value
// If newVal is >= 10 set marker to 9+
// if newVal is <= 0 remove all markers except 'load'
if(marker){
const clearAllMarkers = `|-${marker}1|-${marker}2|-${marker}3|-${marker}4|-${marker}5|-${marker}6|-${marker}7|-${marker}8|-${marker}9|-${marker}9plus`;
if(attr === 'load'){
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-loadL|-loadS|-loadT|load${newVal}`, null, {noarchive:true});
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-loadL|-loadS|-loadT|load${newVal}`);
} else if(newVal > 0 && newVal < 10) {
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}|${marker}${newVal}`, null, {noarchive:true} );
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}|${marker}${newVal}`);
} else if(newVal >= 10) {
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}|${marker}9plus`, null, {noarchive:true} );
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}|${marker}9plus`);
} else {
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}`, null, {noarchive:true} );
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}`);
}
}

//const endTime = Date.now();
//log(`handleMarkerAttributes() took ${endTime - startTime} ms to execute`);
},

registerEventHandlers = function () {
on('change:attribute:current', function(obj, prev){
if(markerAttributes.includes(obj.get('name'))) handleMarkerAttributes(obj, prev);
});
};

return {
CheckInstall: checkInstall,
RegisterEventHandlers: registerEventHandlers
};

}());

on('ready', () => {
'use strict';

DrD2StatusMarkers.CheckInstall();
DrD2StatusMarkers.RegisterEventHandlers();
});
108 changes: 50 additions & 58 deletions DrD2StatusMarkers/DrD2StatusMarkers.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,74 +9,66 @@
var DrD2StatusMarkers = DrD2StatusMarkers || (function() {
'use strict';

const version = '0.1.3';
const lastUpdate = 1731662174989;
const version = '0.1.4';
const lastUpdate = 1739435813976;
const markerAttributes = ['body_scarred', 'spirit_scarred', 'influence_scarred', 'danger', 'advantages', 'companion_bond_scarred', 'load'];

const markerMap = {
body_scarred: 'RED',
spirit_scarred: 'BLU',
influence_scarred: 'GRN',
danger: 'VIO',
advantages: 'BLK',
companion_bond_scarred: 'GRY',
load: 'load'
};

checkInstall = function () {
log(`-=> DrD2StatusMarkers v${version} <=- [${new Date(lastUpdate)}]`);
},

handleMarkerAttributes = function (obj, prev) {
var attr = obj.get('name');
if(markerAttributes.includes(attr)) {
var prevVal, newVal;
if(attr === 'load') {
prevVal = prev.current;
newVal = obj.get('current');
}else {
prevVal = parseInt(prev.current)||0;
newVal = parseInt(obj.get('current'))||0;
}
var charId = obj.get('_characterid');
var marker = '';
//log(`${obj.get('name')} changed`);
//log(`prevVal ${prevVal} -> newVal ${newVal}`);
switch (attr) {
case markerAttributes[0]:
marker = 'RED';
break;
case markerAttributes[1]:
marker = 'BLU';
break;
case markerAttributes[2]:
marker = 'GRN';
break;
case markerAttributes[3]:
marker = 'VIO';
break;
case markerAttributes[4]:
marker = 'BLK';
break;
case markerAttributes[5]:
marker = 'GRY';
break;
case markerAttributes[6]:
marker= 'load';
break;
default:
break;
}
if(marker){
if(attr === 'load'){
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-loadL|-loadS|-loadT|load${newVal}`, null, {noarchive:true});
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-loadL|-loadS|-loadT|load${newVal}`);
} else if(newVal > 0 && newVal < 10) {
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-${marker}1|-${marker}2|-${marker}3|-${marker}4|-${marker}5|-${marker}6|-${marker}7|-${marker}8|-${marker}9|-${marker}9plus|${marker}${newVal}`, null, {noarchive:true} );
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-${marker}1|-${marker}2|-${marker}3|-${marker}4|-${marker}5|-${marker}6|-${marker}7|-${marker}8|-${marker}9|-${marker}9plus|${marker}${newVal}`);
} else if(newVal >= 10) {
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-${marker}1|-${marker}2|-${marker}3|-${marker}4|-${marker}5|-${marker}6|-${marker}7|-${marker}8|-${marker}9|${marker}9plus`, null, {noarchive:true} );
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-${marker}1|-${marker}2|-${marker}3|-${marker}4|-${marker}5|-${marker}6|-${marker}7|-${marker}8|-${marker}9|${marker}9plus`);
} else {
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-${marker}1|-${marker}2|-${marker}3|-${marker}4|-${marker}5|-${marker}6|-${marker}7|-${marker}8|-${marker}9|-${marker}9plus`, null, {noarchive:true} );
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-${marker}1|-${marker}2|-${marker}3|-${marker}4|-${marker}5|-${marker}6|-${marker}7|-${marker}8|-${marker}9|-${marker}9plus`);
}
//const startTime = Date.now();

const attr = obj.get('name');
let marker = markerMap[attr];
const charId = obj.get('_characterid');

// Parse old and new values
const prevVal = (attr === 'load') ? prev.current : parseInt(prev.current) || 0;
const newVal = (attr === 'load') ? obj.get('current') : parseInt(obj.get('current')) || 0;
if(newVal === prevVal) return;

//log(`\'${obj.get('name')}\' of character \'${(getObj('character', charId)).get('name')}\' changed from ${prevVal} -> ${newVal}`);

// If attribute is 'load' set marker to 'S', 'L' or 'T'
// If newVal is between 0 and 10 set marker to new value
// If newVal is >= 10 set marker to 9+
// if newVal is <= 0 remove all markers except 'load'
if(marker){
const clearAllMarkers = `|-${marker}1|-${marker}2|-${marker}3|-${marker}4|-${marker}5|-${marker}6|-${marker}7|-${marker}8|-${marker}9|-${marker}9plus`;
if(attr === 'load'){
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-loadL|-loadS|-loadT|load${newVal}`, null, {noarchive:true});
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers|-loadL|-loadS|-loadT|load${newVal}`);
} else if(newVal > 0 && newVal < 10) {
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}|${marker}${newVal}`, null, {noarchive:true} );
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}|${marker}${newVal}`);
} else if(newVal >= 10) {
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}|${marker}9plus`, null, {noarchive:true} );
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}|${marker}9plus`);
} else {
sendChat('API', `!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}`, null, {noarchive:true} );
//log(`!token-mod --ignore-selected --ids ${charId} --set statusmarkers${clearAllMarkers}`);
}
}

//const endTime = Date.now();
//log(`handleMarkerAttributes() took ${endTime - startTime} ms to execute`);
},

registerEventHandlers = function () {
on('change:attribute:current', function(obj, prev){handleMarkerAttributes(obj, prev)});
on('change:attribute:current', function(obj, prev){
if(markerAttributes.includes(obj.get('name'))) handleMarkerAttributes(obj, prev);
});
};

return {
Expand Down
4 changes: 2 additions & 2 deletions DrD2StatusMarkers/script.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "DrD2StatusMarkers",
"script": "DrD2StatusMarkers.js",
"version": "0.1.3",
"previousversions": ["0.1.0", "0.1.1", "0.1.2"],
"version": "0.1.4",
"previousversions": ["0.1.0", "0.1.1", "0.1.2", "0.1.3"],
"description": "Designed for use only with the Draci Doupe II sheet.\n\nThis script sets token markers based on relevant sheet attributes.\nWorks with the DrD2 token marker set, icons must be named `RED`, `BLU`, `GRN`, `VIO`, `BLK`, `GRY`, `load` followed by corresponding values.\nYou can download the token marker set [here](https://download-directory.github.io/?url=https%3A%2F%2Fgithub.com%2Fnesuprachy%2Froll20-character-sheets%2Ftree%2FDraci-doupe-II%2FDraci%2520doupe%2520II%2Fassets%2FDrD2-token_markers).",
"authors": "nesuprachy",
"roll20userid": "11071738",
Expand Down
Loading