This commit is contained in:
Cristian Deenen
2022-09-05 01:42:15 +02:00
parent 033a7351e4
commit 9a7088a310
40 changed files with 2161 additions and 1387 deletions

View File

@@ -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];
}