Various fixes and ehnagcements

This commit is contained in:
2022-08-01 21:39:17 +02:00
parent e7faf7937b
commit 277cf7075c
13 changed files with 128 additions and 66 deletions

View File

@@ -227,6 +227,11 @@ export class CrucibleActorSheet extends ActorSheet {
const skillId = li.data("item-id")
this.actor.rollSkill(skillId)
});
html.find('.roll-weapon').click((event) => {
const li = $(event.currentTarget).parents(".item");
const skillId = li.data("item-id")
this.actor.rollWeapon(skillId)
});
html.find('.weapon-roll').click((event) => {
const li = $(event.currentTarget).parents(".item");
const weaponId = li.data("item-id");

View File

@@ -166,6 +166,9 @@ export class CrucibleActor extends Actor {
/* -------------------------------------------- */
getSkills() {
let comp = duplicate(this.data.items.filter(item => item.type == 'skill') || [])
for (let skill of comp) {
CrucibleUtility.updateSkill(skill)
}
CrucibleUtility.sortArrayObjectsByName(comp)
return comp
}
@@ -403,12 +406,12 @@ export class CrucibleActor extends Actor {
}
ChatMessage.create(chatData)
if (skill.data.data.exp >= 25) {
await this.updateEmbeddedDocuments('Item', [{ _id: skill.id, 'data.exp': 0, 'data.level': skill.data.data.level + 1 }])
await this.updateEmbeddedDocuments('Item', [{ _id: skill.id, 'data.exp': 0, 'data.explevel': skill.data.data.explevel + 1 }])
let chatData = {
user: game.user.id,
rollMode: game.settings.get("core", "rollMode"),
whisper: [game.user.id].concat(ChatMessage.getWhisperRecipients('GM')),
content: `<div>${this.name} has gained 1 SL in the skill ${skill.name} (new SL : ${skill.data.data.level}) !</div`
content: `<div>${this.name} has gained 1 exp SL in the skill ${skill.name} (new exp SL : ${skill.data.data.explevel}) !</div`
}
ChatMessage.create(chatData)
}
@@ -445,10 +448,12 @@ export class CrucibleActor extends Actor {
rollData.img = this.img
rollData.featsDie = this.getFeatsWithDie()
rollData.featsSL = this.getFeatsWithSL()
rollData.armors = this.getArmors()
rollData.featDieName = "none"
rollData.featSLName = "none"
rollData.rollAdvantage = "none"
rollData.advantage = "none"
rollData.disadvantage = "none"
if (abilityKey) {
rollData.ability = this.getAbility(abilityKey)
@@ -477,6 +482,7 @@ export class CrucibleActor extends Actor {
return
}
skill = duplicate(skill)
CrucibleUtility.updateSkill(skill)
let abilityKey = skill.data.ability
let rollData = this.getCommonRollData(abilityKey)
rollData.mode = "skill"
@@ -487,6 +493,29 @@ export class CrucibleActor extends Actor {
}
}
/* -------------------------------------------- */
rollWeapon(weaponId) {
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())
if (skill) {
skill = duplicate(skill)
CrucibleUtility.updateSkill(skill)
let abilityKey = skill.data.ability
let rollData = this.getCommonRollData(abilityKey)
rollData.mode = "weapon"
rollData.skill = skill
rollData.weapon = weapon
rollData.img = weapon.img
this.startRoll(rollData)
} else {
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
}
}
}
/* -------------------------------------------- */
async startRoll(rollData) {
this.syncRoll(rollData)

View File

@@ -49,8 +49,12 @@ export class CrucibleItemSheet extends ItemSheet {
/* -------------------------------------------- */
async getData() {
const objectData = CrucibleUtility.data(this.object);
if ( objectData.type == "skill") {
console.log(objectData)
CrucibleUtility.updateSkill(objectData)
}
let itemData = foundry.utils.deepClone(CrucibleUtility.templateData(this.object));
let itemData = foundry.utils.deepClone(CrucibleUtility.templateData(this.object))
let formData = {
title: this.title,
id: this.id,

View File

@@ -61,15 +61,18 @@ export class CrucibleRollDialog extends Dialog {
html.find('#advantage').change((event) => {
this.rollData.advantage = event.currentTarget.value
})
html.find('#disadvantage').change((event) => {
this.rollData.disadvantage = event.currentTarget.value
})
html.find('#rollAdvantage').change((event) => {
this.rollData.rollAdvantage = event.currentTarget.value
})
html.find('#featDieName').change((event) => {
/*html.find('#featDieName').change((event) => {
this.rollData.featDieName = event.currentTarget.value
})
html.find('#featDieSL').change((event) => {
this.rollData.featDieSL = event.currentTarget.value
})
})*/
}
}

View File

@@ -5,6 +5,7 @@ import { CrucibleCommands } from "./crucible-commands.js";
/* -------------------------------------------- */
const __level2Dice = ["d0", "d4", "d6", "d8", "d10", "d12"];
const __name2DiceValue = { "0": 0, "d0": 0, "d4": 4, "d6": 6, "d8": 8, "d10": 10, "d12": 12 }
const __skillLevel2Dice = ["0d8", "1d8", "2d8","3d8", "4d8", '6d8', "8d8", "10d8"]
/* -------------------------------------------- */
export class CrucibleUtility {
@@ -258,6 +259,12 @@ export class CrucibleUtility {
}
}
/* -------------------------------------------- */
static updateSkill( skill) {
skill.data.level = skill.data.background + skill.data.basic + skill.data.class + skill.data.explevel
if (skill.data.level > 7) { skill.data.level = 7}
skill.data.skilldice = __skillLevel2Dice[skill.data.level]
}
/* -------------------------------------------- */
static async rollCrucible(rollData) {
@@ -267,17 +274,27 @@ export class CrucibleUtility {
let diceFormula = String(rollData.ability.value) + "d6cs>=5"
if (rollData.skill) {
let level = rollData.skill.data.level
if (rollData.featSLName != "none") {
let feat = rollData.featsSL.find(item => item.name == rollData.featSLName )
level += feat.data.sl
rollData.featSL = feat.data.sl
if (level == 0 && rollData.skill.data.isfeatdie ) {
rollData.hasSLBonus = true
level += 2
if (level > 7) { level = 7}
rollData.skill.data.skilldice = __skillLevel2Dice[level]
}
diceFormula += "+" + String(level) + "d8cs>=5"
diceFormula += "+" + String(rollData.skill.data.skilldice) + "cs>=5"
if (rollData.skill.data.skilltype == "complex" && rollData.skill.data.level == 0) {
rollData.complexSkillDisadvantage = true
rollData.rollAdvantage = "roll-disadvantage"
}
if (rollData.skill.data.level > 0 && rollData.skill.data.isfeatdie) {
rollData.hasFeatDie = true
diceFormula += "+ 1d10cs>=5"
}
if (rollData.skill.data.bonusdice != "none") {
rollData.hasBonusDice = rollData.skill.data.bonusdice
diceFormula += `+ ${rollData.hasBonusDice}cs>=5`
}
}
if(rollData.advantage == "advantage1") {
@@ -286,15 +303,21 @@ export class CrucibleUtility {
if(rollData.advantage == "advantage2") {
diceFormula += "+ 2d10cs>=5"
}
if(rollData.advantage == "disadvantage1") {
if(rollData.disadvantage == "disadvantage1") {
diceFormula += "- 1d10cs>=5"
}
if(rollData.advantage == "disadvantage2") {
if(rollData.disadvantage == "disadvantage2") {
diceFormula += "- 2d10cs>=5"
}
if (rollData.featDieName != "none") {
diceFormula += "+ 1d10cs>=5"
let skillArmorPenalty = 0
for (let armor of rollData.armors) {
skillArmorPenalty += armor.data.skillpenalty
}
if (skillArmorPenalty > 0 ) {
rollData.skillArmorPenalty = skillArmorPenalty
diceFormula += `- ${skillArmorPenalty}d10cs>=5`
}
// Performs roll
let myRoll = rollData.roll
if (!myRoll) { // New rolls only of no rerolls