v10 migration
This commit is contained in:
@@ -74,8 +74,8 @@ export class CrucibleUtility {
|
||||
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))
|
||||
this.weaponSkills = duplicate(this.skills.filter(item => item.system.isweaponskill))
|
||||
this.shieldSkills = duplicate(this.skills.filter(item => item.system.isshieldskill))
|
||||
|
||||
const rollTables = await CrucibleUtility.loadCompendium("fvtt-crucible-rpg.rolltables")
|
||||
this.rollTables = rollTables.map(i => i.toObject())
|
||||
@@ -96,56 +96,56 @@ export class CrucibleUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static isArmorLight(armor) {
|
||||
if (armor && (armor.data.armortype.includes("light") || armor.data.armortype.includes("clothes"))) {
|
||||
if (armor && (armor.system.armortype.includes("light") || armor.system.armortype.includes("clothes"))) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static isWeaponPenetrating(weapon) {
|
||||
if (weapon && weapon.data.qualities.toLowerCase().includes("penetrating")) {
|
||||
if (weapon && weapon.system.qualities.toLowerCase().includes("penetrating")) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static isWeaponLight(weapon) {
|
||||
if (weapon && weapon.data.qualities.toLowerCase().includes("light")) {
|
||||
if (weapon && weapon.system.qualities.toLowerCase().includes("light")) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static isWeaponHeavy(weapon) {
|
||||
if (weapon && weapon.data.qualities.toLowerCase().includes("heavy")) {
|
||||
if (weapon && weapon.system.qualities.toLowerCase().includes("heavy")) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static isWeaponHack(weapon) {
|
||||
if (weapon && weapon.data.qualities.toLowerCase().includes("hack")) {
|
||||
if (weapon && weapon.system.qualities.toLowerCase().includes("hack")) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static isWeaponUndamaging(weapon) {
|
||||
if (weapon && weapon.data.qualities.toLowerCase().includes("undamaging")) {
|
||||
if (weapon && weapon.system.qualities.toLowerCase().includes("undamaging")) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static isWeaponDangerous(weapon) {
|
||||
if (weapon && weapon.data.qualities.toLowerCase().includes("dangerous")) {
|
||||
if (weapon && weapon.system.qualities.toLowerCase().includes("dangerous")) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static isWeaponDeadly(weapon) {
|
||||
if (weapon && weapon.data.qualities.toLowerCase().includes("deadly")) {
|
||||
if (weapon && weapon.system.qualities.toLowerCase().includes("deadly")) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@@ -168,7 +168,7 @@ export class CrucibleUtility {
|
||||
static async getCritical(level, weapon) {
|
||||
const pack = game.packs.get("fvtt-crucible-rpg.rolltables")
|
||||
|
||||
let tableName = "Crit " + level + " (" + this.upperFirst(weapon.data.damage) + ")"
|
||||
let tableName = "Crit " + level + " (" + this.upperFirst(weapon.system.damage) + ")"
|
||||
const index = await pack.getIndex()
|
||||
const entry = index.find(e => e.name === tableName)
|
||||
let table = await pack.getDocument(entry._id)
|
||||
@@ -238,18 +238,6 @@ export class CrucibleUtility {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static templateData(it) {
|
||||
return CrucibleUtility.data(it)?.data ?? {}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static data(it) {
|
||||
if (it instanceof Actor || it instanceof Item || it instanceof Combatant) {
|
||||
return it.data;
|
||||
}
|
||||
return it;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createDirectOptionList(min, max) {
|
||||
@@ -302,15 +290,16 @@ export class CrucibleUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async displayDefenseMessage(rollData) {
|
||||
if (rollData.defenderTokenId) {
|
||||
if (rollData.mode == "weapon" && rollData.defenderTokenId) {
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
if (game.user.isGM || (game.user.character && game.user.character.id == defender.id)) {
|
||||
rollData.defender = defender
|
||||
rollData.defenderWeapons = defender.getEquippedWeapons()
|
||||
rollData.isRollTarget = rollData.weapon?.data.isranged
|
||||
rollData.isRollTarget = rollData.weapon?.system.isranged
|
||||
this.createChatWithRollMode(defender.name, {
|
||||
name: defender.name,
|
||||
alias: defender.name,
|
||||
user: defender.id,
|
||||
//user: defender.id,
|
||||
content: await renderTemplate(`systems/fvtt-crucible-rpg/templates/chat-request-defense.html`, rollData),
|
||||
whisper: [defender.id].concat(ChatMessage.getWhisperRecipients('GM')),
|
||||
})
|
||||
@@ -330,7 +319,7 @@ export class CrucibleUtility {
|
||||
return { result: "miss" }
|
||||
}
|
||||
if (rollData.sumSuccess == 0) {
|
||||
if (rollData.attackRollData.weapon.data.isranged) {
|
||||
if (rollData.attackRollData.weapon.system.isranged) {
|
||||
return { result: "target_space", aoe: true }
|
||||
} else {
|
||||
return { result: "clash", hack_vs_shields: true }
|
||||
@@ -375,7 +364,7 @@ export class CrucibleUtility {
|
||||
result.attackerHPLossValue = await attacker.incDecHP("-" + result.attackerHPLoss)
|
||||
}
|
||||
if (attacker && defender && result.defenderDamage) {
|
||||
let dmgDice = (rollData.attackRollData.weapon.data.isranged) ? "d6" : "d8"
|
||||
let dmgDice = (rollData.attackRollData.weapon.system.isranged) ? "d6" : "d8"
|
||||
result.damageWeaponFormula = result.defenderDamage + dmgDice
|
||||
result.defenderHPLossValue = await defender.incDecHP("-" + result.damageWeaponFormula)
|
||||
}
|
||||
@@ -385,7 +374,7 @@ export class CrucibleUtility {
|
||||
if (result.critical_1 || result.critical_2) {
|
||||
let isDeadly = CrucibleUtility.isWeaponDeadly(rollData.attackRollData.weapon)
|
||||
result.critical = await this.getCritical((result.critical_1) ? "I" : "II", rollData.attackRollData.weapon )
|
||||
result.criticalText = result.critical.data.text
|
||||
result.criticalText = result.critical.text
|
||||
}
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-crucible-rpg/templates/chat-attack-defense-result.html`, rollData)
|
||||
@@ -486,9 +475,9 @@ 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]
|
||||
skill.system.level = skill.system.background + skill.system.basic + skill.system.class + skill.system.explevel
|
||||
if (skill.system.level > 7) { skill.system.level = 7 }
|
||||
skill.system.skilldice = __skillLevel2Dice[skill.system.level]
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -511,28 +500,28 @@ export class CrucibleUtility {
|
||||
// feat => 4
|
||||
// bonus => 6
|
||||
if (rollData.skill) {
|
||||
let level = rollData.skill.data.level
|
||||
if (rollData.skill.data.issl2) {
|
||||
let level = rollData.skill.system.level
|
||||
if (rollData.skill.system.issl2) {
|
||||
rollData.hasSLBonus = true
|
||||
level += 2
|
||||
if (level > 7) { level = 7 }
|
||||
}
|
||||
rollData.skill.data.skilldice = __skillLevel2Dice[level]
|
||||
diceFormula += "+" + String(rollData.skill.data.skilldice) + "cs>=5"
|
||||
rollData.skill.system.skilldice = __skillLevel2Dice[level]
|
||||
diceFormula += "+" + String(rollData.skill.system.skilldice) + "cs>=5"
|
||||
|
||||
if (rollData.skill.data.skilltype == "complex" && rollData.skill.data.level == 0) {
|
||||
if (rollData.skill.system.skilltype == "complex" && rollData.skill.system.level == 0) {
|
||||
rollData.complexSkillDisadvantage = true
|
||||
rollData.rollAdvantage = "roll-disadvantage"
|
||||
}
|
||||
|
||||
if (rollData.skill.data.isfeatdie) {
|
||||
if (rollData.skill.system.isfeatdie) {
|
||||
rollData.hasFeatDie = true
|
||||
diceFormula += "+ 1d10cs>=5"
|
||||
} else {
|
||||
diceFormula += `+ 0d10cs>=5`
|
||||
}
|
||||
if (rollData.skill.data.bonusdice != "none") {
|
||||
rollData.hasBonusDice = rollData.skill.data.bonusdice
|
||||
if (rollData.skill.system.bonusdice != "none") {
|
||||
rollData.hasBonusDice = rollData.skill.system.bonusdice
|
||||
diceFormula += `+ ${rollData.hasBonusDice}cs>=5`
|
||||
} else {
|
||||
diceFormula += `+ 0d6cs>=5`
|
||||
@@ -564,11 +553,11 @@ export class CrucibleUtility {
|
||||
// armor => 12
|
||||
let skillArmorPenalty = 0
|
||||
for (let armor of rollData.armors) {
|
||||
if (armor.data.equipped) {
|
||||
skillArmorPenalty += armor.data.skillpenalty
|
||||
if (armor.system.equipped) {
|
||||
skillArmorPenalty += armor.system.skillpenalty
|
||||
}
|
||||
}
|
||||
if (rollData.skill && rollData.skill.data.armorpenalty && skillArmorPenalty > 0) {
|
||||
if (rollData.skill && rollData.skill.system.armorpenalty && skillArmorPenalty > 0) {
|
||||
rollData.skillArmorPenalty = skillArmorPenalty
|
||||
diceFormula += `- ${skillArmorPenalty}d8cs>=5`
|
||||
} else {
|
||||
@@ -577,7 +566,7 @@ export class CrucibleUtility {
|
||||
|
||||
// shield => 14
|
||||
if (rollData.useshield && rollData.shield) {
|
||||
diceFormula += "+ 1" + String(rollData.shield.data.shielddie) + "cs>=5"
|
||||
diceFormula += "+ 1" + String(rollData.shield.system.shielddie) + "cs>=5"
|
||||
} else {
|
||||
diceFormula += " + 0d6cs>=5"
|
||||
}
|
||||
@@ -603,11 +592,15 @@ export class CrucibleUtility {
|
||||
rollData.rollOrder = 2
|
||||
let myRoll2 = new Roll(diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll2, game.settings.get("core", "rollMode"))
|
||||
|
||||
rollData.roll = myRoll2 // Tmp switch to display the proper results
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-crucible-rpg/templates/chat-generic-result.html`, rollData)
|
||||
})
|
||||
rollData.roll = myRoll // Revert the tmp switch
|
||||
rollData.nbSuccess = myRoll.total
|
||||
|
||||
if (rollData.rollAdvantage == "roll-advantage") {
|
||||
if (myRoll2.total > rollData.nbSuccess) {
|
||||
hasChanged = true
|
||||
@@ -626,10 +619,10 @@ export class CrucibleUtility {
|
||||
|
||||
rollData.isFirstRollAdvantage = false
|
||||
// Manage exp
|
||||
if (rollData.skill && rollData.skill.data.level > 0) {
|
||||
if (rollData.skill && rollData.skill.system.level > 0) {
|
||||
let nbSkillSuccess = rollData.roll.terms[2].total
|
||||
if (nbSkillSuccess == 0 || nbSkillSuccess == rollData.skill.data.level) {
|
||||
actor.incrementSkillExp(rollData.skill._id, 1)
|
||||
if (nbSkillSuccess == 0 || nbSkillSuccess == rollData.skill.system.level) {
|
||||
actor.incrementSkillExp(rollData.skill.id, 1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -665,7 +658,7 @@ export class CrucibleUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getUsers(filter) {
|
||||
return game.users.filter(filter).map(user => user.data._id);
|
||||
return game.users.filter(filter).map(user => user.id);
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static getWhisperRecipients(rollMode, name) {
|
||||
|
Reference in New Issue
Block a user