You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

117 lines
3.4 KiB

var HitDice = HitDice || (function() {
'use strict';
var tokenIds = [],
configure = function() {
if(!state.HitDice) {
state.HitDice = {
version: 0.1,
config: {
bar: 3,
hitDiceAttribute: 'npc_hitdice',
}
};
}
},
handleInput = function(msg) {
if (msg.type === "api" && /^!mhd(\b|$)/i.test(msg.content) && playerIsGM(msg.playerid) ) {
let who = (getObj('player',msg.playerid)||{get:()=>'API'}).get('_displayname');
let count = 0;
// WUSSALLTHISTHEN
(msg.selected || [])
.map(o=>getObj('graphic',o._id))
.filter(g=>undefined !== g)
.forEach( o => {
++count;
tokenIds.push(o.id);
rollHitDice(o);
})
;
sendChat('',`/w "${who}" Rolling hit dice for ${count} token(s).`);
}
},
findRoll = function(txt){
return txt.match(/\d+d\d+(\+\d+)?/)[0] || 0;
},
rollHitDice = function(obj) {
var sets = {},
bar = 'bar'+state.HitDice.config.bar,
hdAttrib,
hdExpression = 0,
bonus = 0
;
if(_.contains(tokenIds,obj.id)){
tokenIds=_.without(tokenIds,obj.id);
if('graphic' === obj.get('type') &&
'token' === obj.get('subtype') &&
'' !== obj.get('represents')
) {
if( obj && '' === obj.get(bar+'_link') ) {
hdAttrib = findObjs({
type: 'attribute',
characterid: obj.get('represents'),
name: state.HitDice.config.hitDiceAttribute
})[0];
if( hdAttrib ) {
//sendChat('', 'HERE WE ARE');
//log(hdAttrib);
hdExpression = findRoll(hdAttrib.get('current'));
sendChat('','/r '+hdExpression+'+'+bonus,function(r){
var hp=0;
_.each(r,function(subr){
var val=JSON.parse(subr.content);
if(_.has(val,'total'))
{
hp+=val.total;
}
});
sets[bar+"_value"] = hp||1;
sets[bar+"_max"] = hp||1;
obj.set(sets);
});
}
}
}
}
},
saveTokenId = function(obj){
tokenIds.push(obj.id);
setTimeout((function(id){
return function(){
var token=getObj('graphic',id);
if(token){
rollHitDice(token);
}
};
}(obj.id)),100);
},
registerEventHandlers = function() {
on('chat:message', handleInput);
on('add:graphic', saveTokenId);
on('change:graphic', rollHitDice);
};
return {
configure: configure,
RegisterEventHandlers: registerEventHandlers
};
}());
on('ready',function() {
'use strict';
HitDice.configure();
HitDice.RegisterEventHandlers();
});