v1.4.11
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import {compatibleCore} from "../misc.js";
|
||||
import { compatibleCore } from "../misc.js";
|
||||
|
||||
const proficiencyColors = {
|
||||
0: "#000000",
|
||||
@@ -9,11 +9,19 @@ const proficiencyColors = {
|
||||
|
||||
export class dnd5e{
|
||||
constructor(){
|
||||
|
||||
console.log("Material Deck: Using system 'Dungeons & Dragons 5e'");
|
||||
}
|
||||
|
||||
getActorData(token) {
|
||||
return compatibleCore('10.0') ? token.actor.system : token.actor.data.data;
|
||||
}
|
||||
|
||||
getItemData(item) {
|
||||
return compatibleCore('10.0') ? item.system : item.data.data;
|
||||
}
|
||||
|
||||
getHP(token) {
|
||||
const hp = token.actor.data.data.attributes.hp;
|
||||
const hp = this.getActorData(token).attributes.hp;
|
||||
return {
|
||||
value: hp.value,
|
||||
max: hp.max
|
||||
@@ -21,7 +29,7 @@ export class dnd5e{
|
||||
}
|
||||
|
||||
getTempHP(token) {
|
||||
const hp = token.actor.data.data.attributes.hp;
|
||||
const hp = this.getActorData(token).attributes.hp;
|
||||
return {
|
||||
value: (hp.temp == null) ? 0 : hp.temp,
|
||||
max: (hp.tempmax == null) ? 0 : hp.tempmax
|
||||
@@ -29,7 +37,7 @@ export class dnd5e{
|
||||
}
|
||||
|
||||
getAC(token) {
|
||||
return token.actor.data.data.attributes.ac.value;
|
||||
return this.getActorData(token).attributes.ac.value;
|
||||
}
|
||||
|
||||
getShieldHP(token) {
|
||||
@@ -37,41 +45,36 @@ export class dnd5e{
|
||||
}
|
||||
|
||||
getSpeed(token) {
|
||||
const movement = token.actor.data.data.attributes.movement;
|
||||
const movement = this.getActorData(token).attributes.movement;
|
||||
let speed = "";
|
||||
if (movement != undefined){
|
||||
if (movement.burrow > 0) speed += `${game.i18n.localize("DND5E.MovementBurrow")}: ${movement.burrow + movement.units}`;
|
||||
if (movement.climb > 0) {
|
||||
if (speed.length > 0) speed += '\n';
|
||||
speed += `${game.i18n.localize("DND5E.MovementClimb")}: ${movement.climb + movement.units}`;
|
||||
}
|
||||
if (movement.fly > 0) {
|
||||
if (speed.length > 0) speed += '\n';
|
||||
speed += `${game.i18n.localize("DND5E.MovementFly")}: ${movement.fly + movement.units}`;
|
||||
}
|
||||
if (movement.hover > 0) {
|
||||
if (speed.length > 0) speed += '\n';
|
||||
speed += `${game.i18n.localize("DND5E.MovementHover")}: ${movement.hover + movement.units}`;
|
||||
}
|
||||
if (movement.swim > 0) {
|
||||
if (speed.length > 0) speed += '\n';
|
||||
speed += `${game.i18n.localize("DND5E.MovementSwim")}: ${movement.swim + movement.units}`;
|
||||
}
|
||||
if (movement.walk > 0) {
|
||||
if (speed.length > 0) speed += '\n';
|
||||
speed += `${game.i18n.localize("DND5E.MovementWalk")}: ${movement.walk + movement.units}`;
|
||||
}
|
||||
|
||||
if (movement.burrow > 0) speed += `${game.i18n.localize("DND5E.MovementBurrow")}: ${movement.burrow + movement.units}`;
|
||||
if (movement.climb > 0) {
|
||||
if (speed.length > 0) speed += '\n';
|
||||
speed += `${game.i18n.localize("DND5E.MovementClimb")}: ${movement.climb + movement.units}`;
|
||||
}
|
||||
else {
|
||||
const spd = token.actor.data.data.attributes.speed;
|
||||
speed = spd.value;
|
||||
if (spd.special.length > 0) speed + "\n" + spd.special;
|
||||
if (movement.fly > 0) {
|
||||
if (speed.length > 0) speed += '\n';
|
||||
speed += `${game.i18n.localize("DND5E.MovementFly")}: ${movement.fly + movement.units}`;
|
||||
}
|
||||
if (movement.hover > 0) {
|
||||
if (speed.length > 0) speed += '\n';
|
||||
speed += `${game.i18n.localize("DND5E.MovementHover")}: ${movement.hover + movement.units}`;
|
||||
}
|
||||
if (movement.swim > 0) {
|
||||
if (speed.length > 0) speed += '\n';
|
||||
speed += `${game.i18n.localize("DND5E.MovementSwim")}: ${movement.swim + movement.units}`;
|
||||
}
|
||||
if (movement.walk > 0) {
|
||||
if (speed.length > 0) speed += '\n';
|
||||
speed += `${game.i18n.localize("DND5E.MovementWalk")}: ${movement.walk + movement.units}`;
|
||||
}
|
||||
|
||||
return speed;
|
||||
}
|
||||
|
||||
getInitiative(token) {
|
||||
let initiative = token.actor.data.data.attributes.init.total;
|
||||
let initiative = this.getActorData(token).attributes.init.total;
|
||||
return (initiative >= 0) ? `+${initiative}` : initiative;
|
||||
}
|
||||
|
||||
@@ -80,38 +83,38 @@ export class dnd5e{
|
||||
}
|
||||
|
||||
getPassivePerception(token) {
|
||||
return token.actor.data.data.skills.prc.passive;
|
||||
return this.getActorData(token).skills.prc.passive;
|
||||
}
|
||||
|
||||
getPassiveInvestigation(token) {
|
||||
return token.actor.data.data.skills.inv.passive;
|
||||
return this.getActorData(token).skills.inv.passive;
|
||||
}
|
||||
|
||||
getAbility(token, ability) {
|
||||
if (ability == undefined) ability = 'str';
|
||||
return token.actor.data.data.abilities?.[ability].value;
|
||||
return this.getActorData(token).abilities?.[ability].value;
|
||||
}
|
||||
|
||||
getAbilityModifier(token, ability) {
|
||||
if (ability == undefined) ability = 'str';
|
||||
let val = token.actor.data.data.abilities?.[ability].mod;
|
||||
let val = this.getActorData(token).abilities?.[ability].mod;
|
||||
return (val >= 0) ? `+${val}` : val;
|
||||
}
|
||||
|
||||
getAbilitySave(token, ability) {
|
||||
if (ability == undefined) ability = 'str';
|
||||
let val = token.actor.data.data.abilities?.[ability].save;
|
||||
let val = this.getActorData(token).abilities?.[ability].save;
|
||||
return (val >= 0) ? `+${val}` : val;
|
||||
}
|
||||
|
||||
getSkill(token, skill) {
|
||||
if (skill == undefined) skill = 'acr';
|
||||
const val = token.actor.data.data.skills?.[skill].total;
|
||||
const val = this.getActorData(token).skills?.[skill].total;
|
||||
return (val >= 0) ? `+${val}` : val;
|
||||
}
|
||||
|
||||
getProficiency(token) {
|
||||
const val = token.actor.data.data.attributes.prof;
|
||||
const val = this.getActorData(token).attributes.prof;
|
||||
return (val >= 0) ? `+${val}` : val;
|
||||
}
|
||||
|
||||
@@ -151,7 +154,10 @@ export class dnd5e{
|
||||
if (roll == 'ability') token.actor.rollAbilityTest(ability,options);
|
||||
else if (roll == 'save') token.actor.rollAbilitySave(save,options);
|
||||
else if (roll == 'skill') token.actor.rollSkill(skill,options);
|
||||
else if (roll == 'initiative') token.actor.rollInitiative(options);
|
||||
else if (roll == 'initiative') {
|
||||
options.rerollInitiative = true;
|
||||
token.actor.rollInitiative(options);
|
||||
}
|
||||
else if (roll == 'deathSave') token.actor.rollDeathSave(options);
|
||||
}
|
||||
|
||||
@@ -166,7 +172,7 @@ export class dnd5e{
|
||||
}
|
||||
|
||||
getItemUses(item) {
|
||||
return {available: item.data.data.quantity};
|
||||
return {available: this.getItemData(item).quantity};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -175,15 +181,18 @@ export class dnd5e{
|
||||
getFeatures(token,featureType) {
|
||||
if (featureType == undefined) featureType = 'any';
|
||||
const allItems = token.actor.items;
|
||||
if (featureType == 'any') return allItems.filter(i => i.type == 'class' || i.type == 'feat')
|
||||
else return allItems.filter(i => i.type == featureType)
|
||||
|
||||
if (featureType == 'any') return allItems.filter(i => i.type == 'class' || i.type == 'feat')
|
||||
else if (featureType == 'activeAbilities') return allItems.filter(i => i.type == 'feat' && i.labels.featType == 'Action')
|
||||
else if (featureType == 'passiveAbilities') return allItems.filter(i => i.type == 'feat' && i.labels.featType == 'Passive')
|
||||
else return allItems.filter(i => i.type == featureType)
|
||||
}
|
||||
|
||||
getFeatureUses(item) {
|
||||
if (item.data.type == 'class') return {available: item.data.data.levels};
|
||||
if (item.type == 'class') return {available: this.getItemData(item).levels};
|
||||
else return {
|
||||
available: item.data.data.uses.value,
|
||||
maximum: item.data.data.uses.max
|
||||
available: this.getItemData(item).uses.value,
|
||||
maximum: this.getItemData(item).uses.max
|
||||
};
|
||||
}
|
||||
|
||||
@@ -194,33 +203,65 @@ export class dnd5e{
|
||||
if (level == undefined) level = 'any';
|
||||
const allItems = token.actor.items;
|
||||
if (level == 'any') return allItems.filter(i => i.type == 'spell')
|
||||
else return allItems.filter(i => i.type == 'spell' && i.data.data.level == level)
|
||||
else return allItems.filter(i => i.type == 'spell' && this.getItemData(i).level == level)
|
||||
}
|
||||
|
||||
getSpellUses(token,level,item) {
|
||||
if (level == undefined) level = 'any';
|
||||
if (item.data.data.level == 0) return;
|
||||
if (level == undefined || level == 'any') level = this.getItemData(item).level;
|
||||
if (this.getItemData(item).level == 0) return;
|
||||
return {
|
||||
available: token.actor.data.data.spells?.[`spell${level}`].value,
|
||||
maximum: token.actor.data.data.spells?.[`spell${level}`].max
|
||||
available: this.getActorData(token).spells?.[`spell${level}`].value,
|
||||
maximum: this.getActorData(token).spells?.[`spell${level}`].max
|
||||
}
|
||||
}
|
||||
|
||||
rollItem(item) {
|
||||
return item.roll()
|
||||
rollItem(item, settings, rollOption) {
|
||||
let options = {
|
||||
fastForward: rollOption != 'dialog',
|
||||
advantage: rollOption == 'advantage',
|
||||
disadvantage: rollOption == 'disadvantage'
|
||||
}
|
||||
if (settings.inventoryType == 'weapon') {
|
||||
if (settings.weaponRollMode == 'attack') {
|
||||
options.fastForward = true;
|
||||
return item.rollAttack(options);
|
||||
}
|
||||
else if (settings.weaponRollMode == 'damage' || settings.weaponRollMode == 'versatile') {
|
||||
options.fastForward = true;
|
||||
return item.rollDamage({
|
||||
options,
|
||||
critical:false,
|
||||
versatile: settings.weaponRollMode == 'versatile'
|
||||
});
|
||||
}
|
||||
else if (settings.weaponRollMode == 'damageCrit' || settings.weaponRollMode == 'versatileCrit') {
|
||||
options.fastForward = true;
|
||||
return item.rollDamage({
|
||||
options,
|
||||
critical:true,
|
||||
versatile: settings.weaponRollMode == 'versatile' || settings.weaponRollMode == 'versatileCrit'
|
||||
});
|
||||
}
|
||||
else if (settings.weaponRollMode == 'otherFormula') {
|
||||
return item.rollFormula(options);
|
||||
}
|
||||
}
|
||||
|
||||
if (compatibleCore('10.0')) item.use(options)
|
||||
else item.roll(options)
|
||||
}
|
||||
|
||||
/**
|
||||
* Ring Colors
|
||||
*/
|
||||
getSkillRingColor(token, skill) {
|
||||
const profLevel = token.actor.data.data?.skills[skill]?.proficient;
|
||||
const profLevel = this.getActorData(token).skills[skill]?.proficient;
|
||||
if (profLevel == undefined) return;
|
||||
return proficiencyColors?.[profLevel];
|
||||
}
|
||||
|
||||
getSaveRingColor(token, save) {
|
||||
const profLevel = token.actor.data.data?.abilities[save]?.proficient;
|
||||
const profLevel = this.getActorData(token).abilities[save]?.proficient;
|
||||
if (profLevel == undefined) return;
|
||||
return proficiencyColors?.[profLevel];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user