Add shield skills

This commit is contained in:
2022-08-04 10:25:40 +02:00
parent dfadc5e1ca
commit 49c3560771
32 changed files with 128 additions and 21 deletions

View File

@@ -45,6 +45,8 @@ export class CrucibleActorSheet extends ActorSheet {
spells: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getLore())),
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ),
equippedWeapons: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquippedWeapons()) ),
equippedArmor: this.actor.getEquippedArmor(),
equippedShield: this.actor.getEquippedShield(),
feats: duplicate(this.actor.getFeats()),
subActors: duplicate(this.actor.getSubActors()),
race: duplicate(this.actor.getRace()),
@@ -150,6 +152,15 @@ export class CrucibleActorSheet extends ActorSheet {
const skillId = li.data("item-id")
this.actor.rollWeapon(skillId)
});
html.find('.roll-armor-die').click((event) => {
//TODO
ui.notifications.warn("Not implemented")
});
html.find('.roll-shield-die').click((event) => {
//TODO
ui.notifications.warn("Not implemented")
});
html.find('.roll-save').click((event) => {
const saveKey = $(event.currentTarget).data("save-key")
this.actor.rollSave(saveKey)

View File

@@ -62,23 +62,23 @@ export class CrucibleActor extends Actor {
}
/* -------------------------------------------- */
computeHitPoints( ) {
computeHitPoints() {
let hp = duplicate(this.data.data.secondary.hp)
let max = (this.data.data.abilities.str.value + this.data.data.abilities.con.value) * 6
if ( max != hp.max || hp.value > max) {
if (max != hp.max || hp.value > max) {
hp.max = max
hp.value = max // Init case
this.update({ 'data.secondary.hp': hp})
this.update({ 'data.secondary.hp': hp })
}
}
/* -------------------------------------------- */
computeEffortPoints( ) {
computeEffortPoints() {
let effort = duplicate(this.data.data.secondary.effort)
let max = (this.data.data.abilities.con.value + this.data.data.abilities.int.value) * 6
if ( max != effort.max || effort.value > max) {
if (max != effort.max || effort.value > max) {
effort.max = max
effort.value = max // Init case
this.update({ 'data.secondary.effort': effort})
this.update({ 'data.secondary.effort': effort })
}
}
@@ -146,12 +146,27 @@ export class CrucibleActor extends Actor {
CrucibleUtility.sortArrayObjectsByName(comp)
return comp;
}
getEquippedArmor() {
let comp = this.data.items.find(item => item.type == 'armor' && item.data.data.equipped)
if (comp) {
return duplicate(comp)
}
return undefined
}
/* -------------------------------------------- */
getShields() {
let comp = duplicate(this.data.items.filter(item => item.type == 'shield') || []);
CrucibleUtility.sortArrayObjectsByName(comp)
return comp;
}
getEquippedShield() {
let comp = this.data.items.find(item => item.type == 'shield' && item.data.data.equipped)
if (comp) {
return duplicate(comp)
}
return undefined
}
/* -------------------------------------------- */
getRace() {
let race = this.data.items.filter(item => item.type == 'race')
return race[0] ?? [];
@@ -205,8 +220,22 @@ export class CrucibleActor extends Actor {
/* -------------------------------------------- */
async equipItem(itemId) {
let item = this.data.items.find(item => item.id == itemId);
let item = this.data.items.find(item => item.id == itemId)
if (item && item.data.data) {
if (item.type == "armor") {
let armor = this.data.items.find(item => item.id != itemId && item.type == "armor" && item.data.data.equipped)
if (armor) {
ui.notifications.warn("You already have an armor equipped!")
return
}
}
if (item.type == "shield") {
let shield = this.data.items.find(item => item.id != itemId && item.type == "shield" && item.data.data.equipped)
if (shield) {
ui.notifications.warn("You already have a shield equipped!")
return
}
}
let update = { _id: item.id, "data.equipped": !item.data.data.equipped };
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
}
@@ -236,15 +265,18 @@ export class CrucibleActor extends Actor {
getSaveRoll() {
return {
reflex: {
"label": "Reflex",
"label": "Reflex Save",
"img": "systems/fvtt-crucible-rpg/images/icons/saves/reflex_save.webp",
"value": this.data.data.abilities.agi.value + this.data.data.abilities.wit.value
},
fortitude: {
"label": "Fortitude",
"label": "Fortitude Save",
"img": "systems/fvtt-crucible-rpg/images/icons/saves/fortitude_save.webp",
"value": this.data.data.abilities.str.value + this.data.data.abilities.con.value
},
willpower: {
"label": "Willpower",
"label": "Willpower Save",
"img": "systems/fvtt-crucible-rpg/images/icons/saves/will_save.webp",
"value": this.data.data.abilities.int.value + this.data.data.abilities.cha.value
}
}
@@ -521,7 +553,7 @@ export class CrucibleActor extends Actor {
let weapon = this.data.items.get(weaponId)
if (weapon) {
weapon = duplicate(weapon)
let skill = this.data.items.find( item => item.name.toLowerCase() == weapon.data.skill.toLowerCase())
let skill = this.data.items.find(item => item.name.toLowerCase() == weapon.data.skill.toLowerCase())
if (skill) {
skill = duplicate(skill)
CrucibleUtility.updateSkill(skill)
@@ -539,7 +571,7 @@ export class CrucibleActor extends Actor {
}
}
/* -------------------------------------------- */
rollSave( saveKey) {
rollSave(saveKey) {
let saves = this.getSaveRoll()
let save = saves[saveKey]
if (save) {

View File

@@ -64,6 +64,7 @@ export class CrucibleItemSheet extends ItemSheet {
editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked",
weaponSkills: CrucibleUtility.getWeaponSkills(),
shieldSkills: CrucibleUtility.getShieldSkills(),
data: itemData,
limited: this.object.limited,
options: this.options,

View File

@@ -55,12 +55,17 @@ export class CrucibleUtility {
static getWeaponSkills() {
return duplicate(this.weaponSkills)
}
/*-------------------------------------------- */
static getShieldSkills() {
return duplicate(this.shieldSkills)
}
/* -------------------------------------------- */
static async ready() {
const skills = await CrucibleUtility.loadCompendium("fvtt-crucible-rpg.skills")
this.skills = skills.map(i => i.toObject())
this.weaponSkills = duplicate( this.skills.filter( item => item.data.isweaponskill))
this.shieldSkills = duplicate( this.skills.filter( item => item.data.isshieldskill))
}
/* -------------------------------------------- */