Compare commits
5 Commits
bol-v1.4.0
...
bol-v10.0.
Author | SHA1 | Date | |
---|---|---|---|
05f044bc7c | |||
996ac1c88d | |||
cc1964093d | |||
d27b78d1d2 | |||
7259d3dc21 |
@ -389,6 +389,8 @@
|
|||||||
"BOL.chat.spell": "Sort",
|
"BOL.chat.spell": "Sort",
|
||||||
"BOL.chat.spellcost": "Cout en Points de Pouvoir",
|
"BOL.chat.spellcost": "Cout en Points de Pouvoir",
|
||||||
"BOL.chat.spellremaining": "Points de Pouvoir restants",
|
"BOL.chat.spellremaining": "Points de Pouvoir restants",
|
||||||
|
"BOL.chat.nodamagesummary": "Aucun dégats n'a été subi ....",
|
||||||
|
"BOL.chat.damageresume": "{name} a subi des blessures ...",
|
||||||
|
|
||||||
"BOL.dialog.soeasy": "Inmanquable (+4)",
|
"BOL.dialog.soeasy": "Inmanquable (+4)",
|
||||||
"BOL.dialog.veryeasy": "Trés Facile (+2)",
|
"BOL.dialog.veryeasy": "Trés Facile (+2)",
|
||||||
|
@ -66,10 +66,9 @@ export class BoLActorSheet extends ActorSheet {
|
|||||||
const incr = parseInt(dataset.incr)
|
const incr = parseInt(dataset.incr)
|
||||||
const min = parseInt(dataset.min)
|
const min = parseInt(dataset.min)
|
||||||
const max = parseInt(dataset.max) || 10000
|
const max = parseInt(dataset.max) || 10000
|
||||||
const itemData = item.data;
|
let value = eval("item." + target)
|
||||||
let value = eval("itemData." + target)
|
|
||||||
value = value || 0
|
value = value || 0
|
||||||
console.log("IncDec", item, target, value, operator, min, max)
|
//console.log("IncDec", item, target, value, operator, min, max)
|
||||||
if (operator === "minus") {
|
if (operator === "minus") {
|
||||||
if (value >= min + incr) value -= incr;
|
if (value >= min + incr) value -= incr;
|
||||||
else value = min;
|
else value = min;
|
||||||
@ -109,12 +108,12 @@ export class BoLActorSheet extends ActorSheet {
|
|||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
getData(options) {
|
getData(options) {
|
||||||
const data = super.getData(options);
|
const data = super.getData(options)
|
||||||
const actorData = duplicate(data.data);
|
const actorData = duplicate(data)
|
||||||
let formData = duplicate(data)
|
let formData = duplicate(data)
|
||||||
|
|
||||||
formData.config = game.bol.config
|
formData.config = game.bol.config
|
||||||
formData.data = actorData.data
|
formData.data = actorData
|
||||||
formData.details = this.actor.details
|
formData.details = this.actor.details
|
||||||
formData.attributes = this.actor.attributes
|
formData.attributes = this.actor.attributes
|
||||||
formData.aptitudes = this.actor.aptitudes
|
formData.aptitudes = this.actor.aptitudes
|
||||||
@ -140,6 +139,8 @@ export class BoLActorSheet extends ActorSheet {
|
|||||||
formData.owner = this.document.isOwner
|
formData.owner = this.document.isOwner
|
||||||
formData.editScore = this.options.editScore
|
formData.editScore = this.options.editScore
|
||||||
formData.useBougette = BoLUtility.getUseBougette()
|
formData.useBougette = BoLUtility.getUseBougette()
|
||||||
|
formData.charType = this.actor.getCharType()
|
||||||
|
formData.villainy = this.actor.getVillainy()
|
||||||
|
|
||||||
formData.isSorcerer = this.actor.isSorcerer()
|
formData.isSorcerer = this.actor.isSorcerer()
|
||||||
formData.isAlchemist = this.actor.isAlchemist()
|
formData.isAlchemist = this.actor.isAlchemist()
|
||||||
|
@ -9,29 +9,43 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
prepareData() {
|
prepareData() {
|
||||||
const actorData = this.data;
|
|
||||||
|
|
||||||
if (actorData.type === 'character') {
|
if (this.type === 'character') {
|
||||||
actorData.type = 'player';
|
this.chartype = 'player'
|
||||||
actorData.villainy = false;
|
this.villainy = false
|
||||||
}
|
}
|
||||||
if (actorData.type === 'encounter') {
|
if (this.type === 'encounter') {
|
||||||
actorData.type = 'tough';
|
this.chartype = 'tough'
|
||||||
actorData.villainy = true;
|
this.villainy = true
|
||||||
}
|
}
|
||||||
super.prepareData();
|
super.prepareData()
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
getCharType() {
|
||||||
|
if (this.type === 'character') {
|
||||||
|
return 'player'
|
||||||
|
}
|
||||||
|
return 'tough'
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
getVillainy() {
|
||||||
|
if (this.type === 'character') {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
updateResourcesData() {
|
updateResourcesData() {
|
||||||
if (this.type == 'character') {
|
if (this.type == 'character') {
|
||||||
let newVitality = 10 + this.data.data.attributes.vigor.value + this.data.data.resources.hp.bonus
|
let newVitality = 10 + this.system.attributes.vigor.value + this.system.resources.hp.bonus
|
||||||
if (this.data.data.resources.hp.max != newVitality) {
|
if (this.system.resources.hp.max != newVitality) {
|
||||||
this.update({ 'data.resources.hp.max': newVitality })
|
this.update({ 'system.resources.hp.max': newVitality })
|
||||||
}
|
}
|
||||||
let newPower = 10 + this.data.data.attributes.mind.value + this.data.data.resources.power.bonus
|
let newPower = 10 + this.system.attributes.mind.value + this.system.resources.power.bonus
|
||||||
if (this.data.data.resources.power.max != newPower) {
|
if (this.system.resources.power.max != newPower) {
|
||||||
this.update({ 'data.resources.power.max': newPower })
|
this.update({ 'system.resources.power.max': newPower })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -44,25 +58,22 @@ export class BoLActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
get itemData() {
|
|
||||||
return Array.from(this.data.items.values()).map(i => i.data)
|
|
||||||
}
|
|
||||||
get details() {
|
get details() {
|
||||||
return this.data.data.details
|
return this.system.details
|
||||||
}
|
}
|
||||||
get attributes() {
|
get attributes() {
|
||||||
return Object.values(this.data.data.attributes)
|
return Object.values(this.system.attributes)
|
||||||
}
|
}
|
||||||
get aptitudes() {
|
get aptitudes() {
|
||||||
return Object.values(this.data.data.aptitudes)
|
return Object.values(this.system.aptitudes)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
clearRoundModifiers() { // Process data/items that are finished at end of a round
|
clearRoundModifiers() { // Process data/items that are finished at end of a round
|
||||||
let foList = this.fightoptions
|
let foList = this.fightoptions
|
||||||
for (let fo of foList) {
|
for (let fo of foList) {
|
||||||
if (fo.data.properties.used) {
|
if (fo.system.properties.used) {
|
||||||
this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'data.properties.used': false }])
|
this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'system.properties.used': false }])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -71,28 +82,28 @@ export class BoLActor extends Actor {
|
|||||||
get defenseValue() {
|
get defenseValue() {
|
||||||
let defMod = 0
|
let defMod = 0
|
||||||
let fo = this.getActiveFightOption()
|
let fo = this.getActiveFightOption()
|
||||||
if (fo && fo.data.properties.fightoptiontype == "intrepid") {
|
if (fo && fo.system.properties.fightoptiontype == "intrepid") {
|
||||||
defMod += -2
|
defMod += -2
|
||||||
}
|
}
|
||||||
if (fo && fo.data.properties.fightoptiontype == "fulldefense") {
|
if (fo && fo.system.properties.fightoptiontype == "fulldefense") {
|
||||||
defMod += 2
|
defMod += 2
|
||||||
}
|
}
|
||||||
if (fo && fo.data.properties.fightoptiontype == "twoweaponsdef" && !fo.data.properties.used) {
|
if (fo && fo.system.properties.fightoptiontype == "twoweaponsdef" && !fo.system.properties.used) {
|
||||||
defMod += 1
|
defMod += 1
|
||||||
this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'data.properties.used': true }])
|
this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'system.properties.used': true }])
|
||||||
}
|
}
|
||||||
if (fo && fo.data.properties.fightoptiontype == "defense") {
|
if (fo && fo.system.properties.fightoptiontype == "defense") {
|
||||||
defMod += 1
|
defMod += 1
|
||||||
}
|
}
|
||||||
if (fo && fo.data.properties.fightoptiontype == "attack") {
|
if (fo && fo.system.properties.fightoptiontype == "attack") {
|
||||||
defMod += -1
|
defMod += -1
|
||||||
}
|
}
|
||||||
return this.data.data.aptitudes.def.value + defMod
|
return this.system.aptitudes.def.value + defMod
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getActiveFightOption() {
|
getActiveFightOption() {
|
||||||
let it = this.itemData.find(i => i.type === "feature" && i.data.subtype === "fightoption" && i.data.properties.activated)
|
let it = this.items.find(i => i.type === "feature" && i.system.subtype === "fightoption" && i.system.properties.activated)
|
||||||
if (it) {
|
if (it) {
|
||||||
return duplicate(it)
|
return duplicate(it)
|
||||||
}
|
}
|
||||||
@ -101,14 +112,14 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
incAttributeXP(key) {
|
incAttributeXP(key) {
|
||||||
let attr = duplicate(this.data.data.attributes[key])
|
let attr = duplicate(this.system.attributes[key])
|
||||||
if (attr) {
|
if (attr) {
|
||||||
let nextXP = (attr.value == -1) ? 2 : attr.value + (attr.value + 1)
|
let nextXP = (attr.value == -1) ? 2 : attr.value + (attr.value + 1)
|
||||||
let xp = duplicate(this.data.data.xp)
|
let xp = duplicate(this.system.xp)
|
||||||
if (xp.total - xp.spent >= nextXP) {
|
if (xp.total - xp.spent >= nextXP) {
|
||||||
attr.value += 1
|
attr.value += 1
|
||||||
xp.spent += nextXP
|
xp.spent += nextXP
|
||||||
this.update({ [`data.attributes.${key}`]: attr, [`data.xp`]: xp })
|
this.update({ [`system.attributes.${key}`]: attr, [`system.xp`]: xp })
|
||||||
} else {
|
} else {
|
||||||
ui.notifications.warn("Pas assez de points d'expérience !")
|
ui.notifications.warn("Pas assez de points d'expérience !")
|
||||||
}
|
}
|
||||||
@ -117,14 +128,14 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
incAptitudeXP(key) {
|
incAptitudeXP(key) {
|
||||||
let apt = duplicate(this.data.data.aptitudes[key])
|
let apt = duplicate(this.system.aptitudes[key])
|
||||||
if (apt) {
|
if (apt) {
|
||||||
let nextXP = (apt.value == -1) ? 1 : apt.value + 2
|
let nextXP = (apt.value == -1) ? 1 : apt.value + 2
|
||||||
let xp = duplicate(this.data.data.xp)
|
let xp = duplicate(this.system.xp)
|
||||||
if (xp.total - xp.spent >= nextXP) {
|
if (xp.total - xp.spent >= nextXP) {
|
||||||
apt.value += 1
|
apt.value += 1
|
||||||
xp.spent += nextXP
|
xp.spent += nextXP
|
||||||
this.update({ [`data.aptitudes.${key}`]: apt, [`data.xp`]: xp })
|
this.update({ [`system.aptitudes.${key}`]: apt, [`system.xp`]: xp })
|
||||||
} else {
|
} else {
|
||||||
ui.notifications.warn("Pas assez de points d'expérience !")
|
ui.notifications.warn("Pas assez de points d'expérience !")
|
||||||
}
|
}
|
||||||
@ -132,15 +143,15 @@ export class BoLActor extends Actor {
|
|||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
incCareerXP(itemId) {
|
incCareerXP(itemId) {
|
||||||
let career = this.data.items.get(itemId)
|
let career = this.items.get(itemId)
|
||||||
if (career) {
|
if (career) {
|
||||||
career = duplicate(career)
|
career = duplicate(career)
|
||||||
let nextXP = career.data.rank + 1
|
let nextXP = career.system.rank + 1
|
||||||
let xp = duplicate(this.data.data.xp)
|
let xp = duplicate(this.system.xp)
|
||||||
if (xp.total - xp.spent >= nextXP) {
|
if (xp.total - xp.spent >= nextXP) {
|
||||||
xp.spent += nextXP
|
xp.spent += nextXP
|
||||||
this.update({ [`data.xp`]: xp })
|
this.update({ [`system.xp`]: xp })
|
||||||
this.updateEmbeddedDocuments('Item', [{ _id: career._id, 'data.rank': career.data.rank + 1 }])
|
this.updateEmbeddedDocuments('Item', [{ _id: career._id, 'system.rank': career.system.rank + 1 }])
|
||||||
} else {
|
} else {
|
||||||
ui.notifications.warn("Pas assez de points d'expérience !")
|
ui.notifications.warn("Pas assez de points d'expérience !")
|
||||||
}
|
}
|
||||||
@ -149,18 +160,18 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async toggleFightOption(itemId) {
|
async toggleFightOption(itemId) {
|
||||||
let fightOption = this.data.items.get(itemId)
|
let fightOption = this.items.get(itemId)
|
||||||
let state
|
let state
|
||||||
let updates = []
|
let updates = []
|
||||||
|
|
||||||
if (fightOption) {
|
if (fightOption) {
|
||||||
fightOption = duplicate(fightOption)
|
fightOption = duplicate(fightOption)
|
||||||
if (fightOption.data.properties.activated) {
|
if (fightOption.system.properties.activated) {
|
||||||
state = false
|
state = false
|
||||||
} else {
|
} else {
|
||||||
state = true
|
state = true
|
||||||
}
|
}
|
||||||
updates.push({ _id: fightOption._id, 'data.properties.activated': state }) // Update the selected one
|
updates.push({ _id: fightOption._id, 'system.properties.activated': state }) // Update the selected one
|
||||||
await this.updateEmbeddedDocuments("Item", updates) // Apply all changes
|
await this.updateEmbeddedDocuments("Item", updates) // Apply all changes
|
||||||
// Then notify
|
// Then notify
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
@ -175,13 +186,13 @@ export class BoLActor extends Actor {
|
|||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
get armorMalusValue() { // used for Fight Options
|
get armorMalusValue() { // used for Fight Options
|
||||||
for (let armor of this.armors) {
|
for (let armor of this.armors) {
|
||||||
if (armor.data.properties.armorQuality.includes("light")) {
|
if (armor.system.properties.armorQuality.includes("light")) {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
if (armor.data.properties.armorQuality.includes("medium")) {
|
if (armor.system.properties.armorQuality.includes("medium")) {
|
||||||
return 2
|
return 2
|
||||||
}
|
}
|
||||||
if (armor.data.properties.armorQuality.includes("heavy")) {
|
if (armor.system.properties.armorQuality.includes("heavy")) {
|
||||||
return 3
|
return 3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -189,112 +200,112 @@ export class BoLActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get resources() {
|
get resources() {
|
||||||
return Object.values(this.data.data.resources)
|
return Object.values(this.system.resources)
|
||||||
}
|
}
|
||||||
get boons() {
|
get boons() {
|
||||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "boon");
|
return this.items.filter(i => i.type === "feature" && i.system.subtype === "boon");
|
||||||
}
|
}
|
||||||
get flaws() {
|
get flaws() {
|
||||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "flaw");
|
return this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw");
|
||||||
}
|
}
|
||||||
get careers() {
|
get careers() {
|
||||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "career");
|
return duplicate( this.items.filter(i => i.type === "feature" && i.system.subtype === "career") || [])
|
||||||
}
|
}
|
||||||
get origins() {
|
get origins() {
|
||||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "origin");
|
return this.items.filter(i => i.type === "feature" && i.system.subtype === "origin");
|
||||||
}
|
}
|
||||||
get races() {
|
get races() {
|
||||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "race");
|
return this.items.filter(i => i.type === "feature" && i.system.subtype === "race");
|
||||||
}
|
}
|
||||||
get languages() {
|
get languages() {
|
||||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "language")
|
return this.items.filter(i => i.type === "feature" && i.system.subtype === "language")
|
||||||
}
|
}
|
||||||
get fightoptions() {
|
get fightoptions() {
|
||||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "fightoption")
|
return this.items.filter(i => i.type === "feature" && i.system.subtype === "fightoption")
|
||||||
}
|
}
|
||||||
get godsfaith() {
|
get godsfaith() {
|
||||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "godsfaith")
|
return this.items.filter(i => i.type === "feature" && i.system.subtype === "godsfaith")
|
||||||
}
|
}
|
||||||
get features() {
|
get features() {
|
||||||
return this.itemData.filter(i => i.type === "feature")
|
return this.items.filter(i => i.type === "feature")
|
||||||
}
|
}
|
||||||
get equipment() {
|
get equipment() {
|
||||||
return this.itemData.filter(i => i.type === "item")
|
return this.items.filter(i => i.type === "item")
|
||||||
}
|
}
|
||||||
get equipmentCreature() {
|
get equipmentCreature() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && (( i.data.subtype === "weapon" && i.data.properties.natural === true) || (i.data.subtype === "armor")) )
|
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && (( i.system.subtype === "weapon" && i.system.properties.natural === true) || (i.system.subtype === "armor")) )
|
||||||
}
|
}
|
||||||
get armors() {
|
get armors() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "armor");
|
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "armor");
|
||||||
}
|
}
|
||||||
get helms() {
|
get helms() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "helm");
|
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "helm");
|
||||||
}
|
}
|
||||||
get shields() {
|
get shields() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "shield");
|
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "shield");
|
||||||
}
|
}
|
||||||
|
|
||||||
get weapons() {
|
get weapons() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "weapon");
|
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "weapon");
|
||||||
}
|
}
|
||||||
get protections() {
|
get protections() {
|
||||||
return this.armors.concat(this.helms).concat(this.shields)
|
return this.armors.concat(this.helms).concat(this.shields)
|
||||||
}
|
}
|
||||||
get spells() {
|
get spells() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "spell");
|
return this.items.filter(i => i.type === "item" && i.system.category === "spell");
|
||||||
}
|
}
|
||||||
get alchemy() {
|
get alchemy() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "alchemy");
|
return this.items.filter(i => i.type === "item" && i.system.category === "alchemy");
|
||||||
}
|
}
|
||||||
get melee() {
|
get melee() {
|
||||||
return this.weapons.filter(i => i.data.properties.melee === true);
|
return this.weapons.filter(i => i.system.properties.melee === true);
|
||||||
}
|
}
|
||||||
get natural() {
|
get natural() {
|
||||||
return this.weapons.filter(i => i.data.properties.natural === true);
|
return this.weapons.filter(i => i.system.properties.natural === true);
|
||||||
}
|
}
|
||||||
get ranged() {
|
get ranged() {
|
||||||
return this.weapons.filter(i => i.data.properties.ranged === true);
|
return this.weapons.filter(i => i.system.properties.ranged === true);
|
||||||
}
|
}
|
||||||
|
|
||||||
get containers() {
|
get containers() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "container");
|
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "container");
|
||||||
}
|
}
|
||||||
|
|
||||||
get treasure() {
|
get treasure() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "currency");
|
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "currency");
|
||||||
}
|
}
|
||||||
|
|
||||||
get vehicles() {
|
get vehicles() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "vehicle");
|
return this.items.filter(i => i.type === "item" && i.system.category === "vehicle");
|
||||||
}
|
}
|
||||||
|
|
||||||
get ammos() {
|
get ammos() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "ammunition");
|
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "ammunition");
|
||||||
}
|
}
|
||||||
|
|
||||||
get misc() {
|
get misc() {
|
||||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && (i.data.subtype === "other" || i.data.subtype === "container" || i.data.subtype === "scroll" || i.data.subtype === "jewel"));
|
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && (i.system.subtype === "other" || i.system.subtype === "container" || i.system.subtype === "scroll" || i.system.subtype === "jewel"));
|
||||||
}
|
}
|
||||||
|
|
||||||
get bonusBoons() {
|
get bonusBoons() {
|
||||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "boon" && i.data.properties.isbonusdice);
|
return this.items.filter(i => i.type === "feature" && i.system.subtype === "boon" && i.system.properties.isbonusdice);
|
||||||
}
|
}
|
||||||
get malusFlaws() {
|
get malusFlaws() {
|
||||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "flaw" && i.data.properties.ismalusdice);
|
return this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw" && i.system.properties.ismalusdice);
|
||||||
}
|
}
|
||||||
|
|
||||||
isSorcerer() {
|
isSorcerer() {
|
||||||
if (this.careers.find(item => item.data.properties.sorcerer == true))
|
if (this.careers.find(item => item.system.properties.sorcerer == true))
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
isAlchemist() {
|
isAlchemist() {
|
||||||
if (this.careers.find(item => item.data.properties.alchemist == true))
|
if (this.careers.find(item => item.system.properties.alchemist == true))
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
isPriest() {
|
isPriest() {
|
||||||
if (this.careers.find(item => item.data.properties.priest == true))
|
if (this.careers.find(item => item.system.properties.priest == true))
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -304,8 +315,8 @@ export class BoLActor extends Actor {
|
|||||||
let armors = this.armors
|
let armors = this.armors
|
||||||
let ppCostArmor = 0
|
let ppCostArmor = 0
|
||||||
for (let armor of armors) {
|
for (let armor of armors) {
|
||||||
if (armor.data.worn) {
|
if (armor.system.worn) {
|
||||||
ppCostArmor += Number(armor.data.properties.modifiers.powercost) || 0
|
ppCostArmor += Number(armor.system.properties.modifiers.powercost) || 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ppCostArmor
|
return ppCostArmor
|
||||||
@ -314,8 +325,8 @@ export class BoLActor extends Actor {
|
|||||||
getArmorAgiMalus() {
|
getArmorAgiMalus() {
|
||||||
let malusAgi = 0
|
let malusAgi = 0
|
||||||
for (let armor of this.protections) {
|
for (let armor of this.protections) {
|
||||||
if (armor.data.worn) {
|
if (armor.system.worn) {
|
||||||
malusAgi += Number(armor.data.properties.modifiers.agility) || 0
|
malusAgi += Number(armor.system.properties.modifiers.agility) || 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return malusAgi
|
return malusAgi
|
||||||
@ -324,8 +335,8 @@ export class BoLActor extends Actor {
|
|||||||
getArmorInitMalus() {
|
getArmorInitMalus() {
|
||||||
let malusInit = 0
|
let malusInit = 0
|
||||||
for (let armor of this.protections) {
|
for (let armor of this.protections) {
|
||||||
if (armor.data.worn) {
|
if (armor.system.worn) {
|
||||||
malusInit += Number(armor.data.properties.modifiers.init) || 0
|
malusInit += Number(armor.system.properties.modifiers.init) || 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return malusInit
|
return malusInit
|
||||||
@ -333,14 +344,15 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
spendPowerPoint(ppCost) {
|
spendPowerPoint(ppCost) {
|
||||||
let newPP = this.data.data.resources.power.value - ppCost
|
let newPP = this.system.resources.power.value - ppCost
|
||||||
newPP = (newPP < 0) ? 0 : newPP
|
newPP = (newPP < 0) ? 0 : newPP
|
||||||
this.update({ 'data.resources.power.value': newPP })
|
this.update({ 'data.resources.power.value': newPP })
|
||||||
|
return newPP
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
resetAlchemyStatus(alchemyId) {
|
resetAlchemyStatus(alchemyId) {
|
||||||
let alchemy = this.data.items.get(alchemyId)
|
let alchemy = this.items.get(alchemyId)
|
||||||
if (alchemy) {
|
if (alchemy) {
|
||||||
this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'data.properties.pccurrent': 0 }])
|
this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'data.properties.pccurrent': 0 }])
|
||||||
}
|
}
|
||||||
@ -348,14 +360,14 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
async spendAlchemyPoint(alchemyId, pcCost) {
|
async spendAlchemyPoint(alchemyId, pcCost) {
|
||||||
let alchemy = this.data.items.get(alchemyId)
|
let alchemy = this.items.get(alchemyId)
|
||||||
if (alchemy) {
|
if (alchemy) {
|
||||||
pcCost = Number(pcCost) ?? 0
|
pcCost = Number(pcCost) ?? 0
|
||||||
if (this.data.data.resources.alchemypoints.value >= pcCost) {
|
if (this.system.resources.alchemypoints.value >= pcCost) {
|
||||||
let newPC = this.data.data.resources.alchemypoints.value - pcCost
|
let newPC = this.system.resources.alchemypoints.value - pcCost
|
||||||
newPC = (newPC < 0) ? 0 : newPC
|
newPC = (newPC < 0) ? 0 : newPC
|
||||||
this.update({ 'data.resources.alchemypoints.value': newPC })
|
this.update({ 'data.resources.alchemypoints.value': newPC })
|
||||||
newPC = alchemy.data.data.properties.pccurrent + pcCost
|
newPC = alchemy.system.properties.pccurrent + pcCost
|
||||||
await this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'data.properties.pccurrent': newPC }])
|
await this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'data.properties.pccurrent': newPC }])
|
||||||
} else {
|
} else {
|
||||||
ui.notifications.warn("Plus assez de Points de Création !")
|
ui.notifications.warn("Plus assez de Points de Création !")
|
||||||
@ -363,27 +375,30 @@ export class BoLActor extends Actor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------- */
|
||||||
getAlchemistBonus() {
|
getAlchemistBonus() {
|
||||||
let sorcerer = this.careers.find(item => item.data.properties.alchemist == true)
|
let sorcerer = this.careers.find(item => item.system.properties.alchemist == true)
|
||||||
if (sorcerer) {
|
if (sorcerer) {
|
||||||
return sorcerer.data.rank
|
return sorcerer.system.rank
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/*-------------------------------------------- */
|
||||||
getSorcererBonus() {
|
getSorcererBonus() {
|
||||||
let sorcerer = this.careers.find(item => item.data.properties.sorcerer == true)
|
let sorcerer = this.careers.find(item => item.system.properties.sorcerer == true)
|
||||||
if (sorcerer) {
|
if (sorcerer) {
|
||||||
return sorcerer.data.rank
|
return sorcerer.system.rank
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------- */
|
||||||
heroReroll() {
|
heroReroll() {
|
||||||
if (this.type == 'character') {
|
if (this.type == 'character') {
|
||||||
return this.data.data.resources.hero.value > 0;
|
return this.system.resources.hero.value > 0;
|
||||||
} else {
|
} else {
|
||||||
if (this.data.data.type == 'adversary') {
|
if (this.system.type == 'adversary') {
|
||||||
return this.data.data.resources.hero.value > 0;
|
return this.system.resources.hero.value > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@ -392,17 +407,17 @@ export class BoLActor extends Actor {
|
|||||||
getResourcesFromType() {
|
getResourcesFromType() {
|
||||||
let resources = {};
|
let resources = {};
|
||||||
if (this.type == 'encounter') {
|
if (this.type == 'encounter') {
|
||||||
resources['hp'] = this.data.data.resources.hp;
|
resources['hp'] = this.system.resources.hp;
|
||||||
if (this.data.data.type != 'base') {
|
if (this.system.type != 'base') {
|
||||||
resources['faith'] = this.data.data.resources.faith
|
resources['faith'] = this.system.resources.faith
|
||||||
resources['power'] = this.data.data.resources.power
|
resources['power'] = this.system.resources.power
|
||||||
}
|
}
|
||||||
if (this.data.data.type == 'adversary') {
|
if (this.system.type == 'adversary') {
|
||||||
resources['hero'] = duplicate(this.data.data.resources.hero)
|
resources['hero'] = duplicate(this.system.resources.hero)
|
||||||
resources['hero'].label = "BOL.resources.villainy"
|
resources['hero'].label = "BOL.resources.villainy"
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
resources = this.data.data.resources;
|
resources = this.system.resources;
|
||||||
}
|
}
|
||||||
return resources
|
return resources
|
||||||
}
|
}
|
||||||
@ -528,13 +543,13 @@ export class BoLActor extends Actor {
|
|||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
buildRollList() {
|
buildRollList() {
|
||||||
let rolls = []
|
let rolls = []
|
||||||
for (let key in this.data.data.attributes) {
|
for (let key in this.system.attributes) {
|
||||||
let attr = this.data.data.attributes[key]
|
let attr = this.system.attributes[key]
|
||||||
rolls.push({ key: key, value: attr.value, name: attr.label, type: "attribute" })
|
rolls.push({ key: key, value: attr.value, name: attr.label, type: "attribute" })
|
||||||
}
|
}
|
||||||
for (let key in this.data.data.aptitudes) {
|
for (let key in this.system.aptitudes) {
|
||||||
if (key != "def") {
|
if (key != "def") {
|
||||||
let apt = this.data.data.aptitudes[key]
|
let apt = this.system.aptitudes[key]
|
||||||
rolls.push({ key: key, value: apt.value, name: apt.label, type: "aptitude" })
|
rolls.push({ key: key, value: apt.value, name: apt.label, type: "aptitude" })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -550,13 +565,13 @@ export class BoLActor extends Actor {
|
|||||||
async manageHealthState() {
|
async manageHealthState() {
|
||||||
let hpID = "lastHP" + this.id
|
let hpID = "lastHP" + this.id
|
||||||
let lastHP = await this.getFlag("world", hpID)
|
let lastHP = await this.getFlag("world", hpID)
|
||||||
if (lastHP != this.data.data.resources.hp.value && this.isOwner ) {
|
if (lastHP != this.system.resources.hp.value && game.user.isGM ) { // Only GM sends this
|
||||||
await this.setFlag("world", hpID, this.data.data.resources.hp.value)
|
await this.setFlag("world", hpID, this.system.resources.hp.value)
|
||||||
if (this.data.data.resources.hp.value <= 0) {
|
if (this.system.resources.hp.value <= 0) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
alias: this.name,
|
alias: this.name,
|
||||||
whisper: BoLUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: BoLUtility.getWhisperRecipientsAndGMs(this.name),
|
||||||
content: await renderTemplate('systems/bol/templates/chat/chat-vitality-zero.hbs', { name: this.name, img: this.img, hp: this.data.data.resources.hp.value })
|
content: await renderTemplate('systems/bol/templates/chat/chat-vitality-zero.hbs', { name: this.name, img: this.img, hp: this.system.resources.hp.value })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -564,46 +579,46 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
registerInit(initScore, isCritical, isFumble) {
|
registerInit(initScore, isCritical, isFumble) {
|
||||||
this.update({ 'data.combat.lastinit': initScore, 'data.combat.iscritical': isCritical, 'data.combat.isfumble': isFumble })
|
this.update({ 'system.combat.lastinit': initScore, 'system.combat.iscritical': isCritical, 'system.combat.isfumble': isFumble })
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
getLastInitData() {
|
getLastInitData() {
|
||||||
return this.data.data.combat
|
return this.system.combat
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
async subHeroPoints(nb) {
|
async subHeroPoints(nb) {
|
||||||
let newHeroP = this.data.data.resources.hero.value - nb;
|
let newHeroP = this.system.resources.hero.value - nb;
|
||||||
newHeroP = (newHeroP < 0) ? 0 : newHeroP;
|
newHeroP = (newHeroP < 0) ? 0 : newHeroP;
|
||||||
await this.update({ 'data.resources.hero.value': newHeroP });
|
await this.update({ 'system.resources.hero.value': newHeroP });
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
async sufferDamage(damage) {
|
async sufferDamage(damage) {
|
||||||
let newHP = this.data.data.resources.hp.value - damage
|
let newHP = this.system.resources.hp.value - damage
|
||||||
await this.update({ 'data.resources.hp.value': newHP })
|
await this.update({ 'system.resources.hp.value': newHP })
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getArmorFormula() {
|
getArmorFormula() {
|
||||||
let protectWorn = this.protections.filter(item => item.data.worn)
|
let protectWorn = this.protections.filter(item => item.system.worn)
|
||||||
let formula = ""
|
let formula = ""
|
||||||
for (let protect of protectWorn) {
|
for (let protect of protectWorn) {
|
||||||
if (protect.data.subtype == 'helm') {
|
if (protect.system.subtype == 'helm') {
|
||||||
formula += "+1"
|
formula += "+1"
|
||||||
} else if (protect.data.subtype == 'armor') {
|
} else if (protect.system.subtype == 'armor') {
|
||||||
if (BoLUtility.getRollArmor()) {
|
if (BoLUtility.getRollArmor()) {
|
||||||
if (!protect.data.properties.soak.formula || protect.data.properties.soak.formula == "") {
|
if (!protect.system.properties.soak.formula || protect.system.properties.soak.formula == "") {
|
||||||
ui.notifications.warn(`L'armure ${protect.name} n'a pas de formule pour la protection !`)
|
ui.notifications.warn(`L'armure ${protect.name} n'a pas de formule pour la protection !`)
|
||||||
} else {
|
} else {
|
||||||
formula += "+" + " max(" + protect.data.properties.soak.formula +",0)"
|
formula += "+" + " max(" + protect.system.properties.soak.formula +",0)"
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (protect.data.properties.soak.value == undefined) {
|
if (protect.system.properties.soak.value == undefined) {
|
||||||
ui.notifications.warn(`L'armure ${protect.name} n'a pas de valeur fixe pour la protection !`)
|
ui.notifications.warn(`L'armure ${protect.name} n'a pas de valeur fixe pour la protection !`)
|
||||||
} else {
|
} else {
|
||||||
formula += "+ " + protect.data.properties.soak.value
|
formula += "+ " + protect.system.properties.soak.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -614,9 +629,9 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
rollProtection(itemId) {
|
rollProtection(itemId) {
|
||||||
let armor = this.data.items.get(itemId)
|
let armor = duplicate(this.items.get(itemId))
|
||||||
if (armor) {
|
if (armor) {
|
||||||
let armorFormula = "max("+armor.data.data.properties.soak.formula + ", 0)"
|
let armorFormula = "max("+armor.system.properties.soak.formula + ", 0)"
|
||||||
let rollArmor = new Roll(armorFormula)
|
let rollArmor = new Roll(armorFormula)
|
||||||
rollArmor.roll({ async: false }).toMessage()
|
rollArmor.roll({ async: false }).toMessage()
|
||||||
}
|
}
|
||||||
@ -624,7 +639,7 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
rollWeaponDamage(itemId) {
|
rollWeaponDamage(itemId) {
|
||||||
let weapon = this.data.items.get(itemId)
|
let weapon = duplicate(this.items.get(itemId))
|
||||||
if (weapon) {
|
if (weapon) {
|
||||||
let r = new BoLDefaultRoll({ id: randomID(16), isSuccess: true, mode: "weapon", weapon: weapon, actorId: this.id, actor: this })
|
let r = new BoLDefaultRoll({ id: randomID(16), isSuccess: true, mode: "weapon", weapon: weapon, actorId: this.id, actor: this })
|
||||||
r.setSuccess(true)
|
r.setSuccess(true)
|
||||||
@ -634,10 +649,10 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
toggleEquipItem(item) {
|
toggleEquipItem(item) {
|
||||||
const equipable = item.data.data.properties.equipable;
|
const equipable = item.system.properties.equipable;
|
||||||
if (equipable) {
|
if (equipable) {
|
||||||
let itemData = duplicate(item.data);
|
let itemData = duplicate(item);
|
||||||
itemData.data.worn = !itemData.data.worn;
|
itemData.system.worn = !itemData.system.worn;
|
||||||
return item.update(itemData);
|
return item.update(itemData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,7 @@ function registerUsageCount( registerKey ) {
|
|||||||
name: "Unique world key",
|
name: "Unique world key",
|
||||||
scope: "world",
|
scope: "world",
|
||||||
config: false,
|
config: false,
|
||||||
|
default: "",
|
||||||
type: String
|
type: String
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -88,7 +89,7 @@ function registerUsageCount( registerKey ) {
|
|||||||
game.settings.set(registerKey, "world-key", worldKey )
|
game.settings.set(registerKey, "world-key", worldKey )
|
||||||
}
|
}
|
||||||
// Simple API counter
|
// Simple API counter
|
||||||
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.data.version}"`
|
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"`
|
||||||
$.ajax(regURL)
|
$.ajax(regURL)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ export class BoLRoll {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static attributeCheck(actor, key) {
|
static attributeCheck(actor, key) {
|
||||||
|
|
||||||
let attribute = eval(`actor.data.data.attributes.${key}`)
|
let attribute = eval(`actor.system.attributes.${key}`)
|
||||||
let label = (attribute.label) ? game.i18n.localize(attribute.label) : null
|
let label = (attribute.label) ? game.i18n.localize(attribute.label) : null
|
||||||
let description = game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label)
|
let description = game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label)
|
||||||
|
|
||||||
@ -43,9 +43,9 @@ export class BoLRoll {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static aptitudeCheck(actor, key) {
|
static aptitudeCheck(actor, key) {
|
||||||
|
|
||||||
let aptitude = eval(`actor.data.data.aptitudes.${key}`)
|
let aptitude = eval(`actor.system.aptitudes.${key}`)
|
||||||
let attrKey = this.getDefaultAttribute(key)
|
let attrKey = this.getDefaultAttribute(key)
|
||||||
let attribute = eval(`actor.data.data.attributes.${attrKey}`)
|
let attribute = eval(`actor.system.attributes.${attrKey}`)
|
||||||
|
|
||||||
let label = (aptitude.label) ? game.i18n.localize(aptitude.label) : null;
|
let label = (aptitude.label) ? game.i18n.localize(aptitude.label) : null;
|
||||||
let description = game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label);
|
let description = game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label);
|
||||||
@ -72,13 +72,13 @@ export class BoLRoll {
|
|||||||
|
|
||||||
let target = BoLUtility.getTarget()
|
let target = BoLUtility.getTarget()
|
||||||
|
|
||||||
let weaponData = weapon.data.data
|
let weaponData = weapon.system
|
||||||
let attribute = eval(`actor.data.data.attributes.${weaponData.properties.attackAttribute}`)
|
let attribute = eval(`actor.system.attributes.${weaponData.properties.attackAttribute}`)
|
||||||
let aptitude = eval(`actor.data.data.aptitudes.${weaponData.properties.attackAptitude}`)
|
let aptitude = eval(`actor.system.aptitudes.${weaponData.properties.attackAptitude}`)
|
||||||
|
|
||||||
// Manage specific case
|
// Manage specific case
|
||||||
let fightOption = actor.getActiveFightOption()
|
let fightOption = actor.getActiveFightOption()
|
||||||
if (fightOption && fightOption.data.fightoptiontype == "fulldefense") {
|
if (fightOption && fightOption.system.fightoptiontype == "fulldefense") {
|
||||||
ui.notifications.warn(`{{actor.name}} est en Défense Totale ! Il ne peut pas attaquer ce round.`)
|
ui.notifications.warn(`{{actor.name}} est en Défense Totale ! Il ne peut pas attaquer ce round.`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -92,7 +92,7 @@ export class BoLRoll {
|
|||||||
targetId: target?.id,
|
targetId: target?.id,
|
||||||
fightOption: fightOption,
|
fightOption: fightOption,
|
||||||
careerBonus: 0,
|
careerBonus: 0,
|
||||||
defenderId: target?.data?.actorId,
|
defenderId: target?.actor.id,
|
||||||
attribute: attribute,
|
attribute: attribute,
|
||||||
aptitude: aptitude,
|
aptitude: aptitude,
|
||||||
attrValue: attribute.value,
|
attrValue: attribute.value,
|
||||||
@ -109,23 +109,25 @@ export class BoLRoll {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static weaponCheck(actor, event) {
|
static weaponCheck(actor, event) {
|
||||||
const li = $(event.currentTarget).parents(".item")
|
const li = $(event.currentTarget).parents(".item")
|
||||||
const weapon = actor.items.get(li.data("item-id"))
|
let weapon = actor.items.get(li.data("item-id"))
|
||||||
if (!weapon) {
|
if (!weapon) {
|
||||||
ui.notifications.warn("Unable to find weapon !")
|
ui.notifications.warn("Unable to find weapon !")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
weapon = duplicate(weapon)
|
||||||
return this.weaponCheckWithWeapon(actor, weapon)
|
return this.weaponCheckWithWeapon(actor, weapon)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static alchemyCheck(actor, event) {
|
static alchemyCheck(actor, event) {
|
||||||
const li = $(event.currentTarget).parents(".item");
|
const li = $(event.currentTarget).parents(".item");
|
||||||
const alchemy = actor.items.get(li.data("item-id"));
|
let alchemy = actor.items.get(li.data("item-id"));
|
||||||
if (!alchemy) {
|
if (!alchemy) {
|
||||||
ui.notifications.warn("Unable to find Alchemy !");
|
ui.notifications.warn("Unable to find Alchemy !");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let alchemyData = alchemy.data.data
|
alchemy = duplicate(alchemy)
|
||||||
|
let alchemyData = alchemy.data
|
||||||
if (alchemyData.properties.pccurrent < alchemyData.properties.pccost) {
|
if (alchemyData.properties.pccurrent < alchemyData.properties.pccost) {
|
||||||
ui.notifications.warn("Pas assez de Points de Cration investis dans la Préparation !")
|
ui.notifications.warn("Pas assez de Points de Cration investis dans la Préparation !")
|
||||||
return
|
return
|
||||||
@ -136,8 +138,8 @@ export class BoLRoll {
|
|||||||
actorId: actor.id,
|
actorId: actor.id,
|
||||||
img: actor.img,
|
img: actor.img,
|
||||||
alchemy: alchemy,
|
alchemy: alchemy,
|
||||||
attribute: actor.data.data.attributes.mind,
|
attribute: actor.system.attributes.mind,
|
||||||
attrValue: actor.data.data.attributes.mind.value,
|
attrValue: actor.system.attributes.mind.value,
|
||||||
aptValue: 0,
|
aptValue: 0,
|
||||||
careerBonus: actor.getAlchemistBonus(),
|
careerBonus: actor.getAlchemistBonus(),
|
||||||
pcCost: Number(alchemyData.properties.pccost),
|
pcCost: Number(alchemyData.properties.pccost),
|
||||||
@ -154,41 +156,41 @@ export class BoLRoll {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static spellCheckWithSpell( actor, spell ) {
|
static spellCheckWithSpell( actor, spell ) {
|
||||||
let spellData = spell.data.data
|
|
||||||
let spellDef = {
|
let spellDef = {
|
||||||
mode: "spell",
|
mode: "spell",
|
||||||
actorId: actor.id,
|
actorId: actor.id,
|
||||||
img: actor.img,
|
img: actor.img,
|
||||||
spell: spell,
|
spell: spell,
|
||||||
attribute: actor.data.data.attributes.mind,
|
attribute: actor.system.attributes.mind,
|
||||||
attrValue: actor.data.data.attributes.mind.value,
|
attrValue: actor.system.attributes.mind.value,
|
||||||
aptValue: 0,
|
aptValue: 0,
|
||||||
ppCurrent: Number(actor.data.data.resources.power.value),
|
ppCurrent: Number(actor.system.resources.power.value),
|
||||||
careerBonus: actor.getSorcererBonus(),
|
careerBonus: actor.getSorcererBonus(),
|
||||||
ppCostArmor: actor.getPPCostArmor(),
|
ppCostArmor: actor.getPPCostArmor(),
|
||||||
ppCost: Number(spell.data.data.properties.ppcost),
|
ppCost: Number(spell.system.properties.ppcost),
|
||||||
mod: Number(spellData.properties.difficulty),
|
mod: Number(spell.system.properties.difficulty),
|
||||||
armorAgiMalus: actor.getArmorAgiMalus(),
|
armorAgiMalus: actor.getArmorAgiMalus(),
|
||||||
armorInitMalus: actor.getArmorInitMalus(),
|
armorInitMalus: actor.getArmorInitMalus(),
|
||||||
label: spell.name,
|
label: spell.name,
|
||||||
description: game.i18n.localize('BOL.ui.focusSpell') + " : " + spell.name,
|
description: game.i18n.localize('BOL.ui.focusSpell') + " : " + spell.name,
|
||||||
}
|
}
|
||||||
console.log("SPELL!", spellDef)
|
//console.log("SPELL!", spellDef)
|
||||||
return this.displayRollDialog(spellDef)
|
return this.displayRollDialog(spellDef)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static spellCheck(actor, event) {
|
static spellCheck(actor, event) {
|
||||||
if (actor.data.data.resources.power.value <= 0) {
|
if (actor.system.resources.power.value <= 0) {
|
||||||
ui.notifications.warn("Plus assez de points de Pouvoir !")
|
ui.notifications.warn("Plus assez de points de Pouvoir !")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const li = $(event.currentTarget).parents(".item")
|
const li = $(event.currentTarget).parents(".item")
|
||||||
const spell = actor.items.get(li.data("item-id"))
|
let spell = actor.items.get(li.data("item-id"))
|
||||||
if (!spell) {
|
if (!spell) {
|
||||||
ui.notifications.warn("Impossible de trouver ce sort !")
|
ui.notifications.warn("Impossible de trouver ce sort !")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
spell = duplicate(spell)
|
||||||
return this.spellCheckWithSpell( actor, spell)
|
return this.spellCheckWithSpell( actor, spell)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,7 +209,7 @@ export class BoLRoll {
|
|||||||
$('#roll-nbdice').val("2 + " + String(Math.abs(this.rollData.bmDice)) + letter)
|
$('#roll-nbdice').val("2 + " + String(Math.abs(this.rollData.bmDice)) + letter)
|
||||||
}
|
}
|
||||||
let rollbase = this.rollData.attrValue + "+" + this.rollData.aptValue
|
let rollbase = this.rollData.attrValue + "+" + this.rollData.aptValue
|
||||||
if ( this.rollData.weapon && this.rollData.weapon.data.data.properties.onlymodifier ) {
|
if ( this.rollData.weapon && this.rollData.weapon.system.properties.onlymodifier ) {
|
||||||
rollbase = ""
|
rollbase = ""
|
||||||
}
|
}
|
||||||
$('#roll-modifier').val(rollbase + "+" + this.rollData.careerBonus + "+" + this.rollData.mod + "+" +
|
$('#roll-modifier').val(rollbase + "+" + this.rollData.careerBonus + "+" + this.rollData.mod + "+" +
|
||||||
@ -224,20 +226,20 @@ export class BoLRoll {
|
|||||||
let fgItem = rollData.fightOption
|
let fgItem = rollData.fightOption
|
||||||
if (fgItem) {
|
if (fgItem) {
|
||||||
console.log(fgItem)
|
console.log(fgItem)
|
||||||
if (fgItem.data.properties.fightoptiontype == "armordefault") {
|
if (fgItem.system.properties.fightoptiontype == "armordefault") {
|
||||||
rollData.modArmorMalus = rollData.armorMalus // Activate the armor malus
|
rollData.modArmorMalus = rollData.armorMalus // Activate the armor malus
|
||||||
rollData.damagesIgnoresArmor = true
|
rollData.damagesIgnoresArmor = true
|
||||||
}
|
}
|
||||||
if (fgItem.data.properties.fightoptiontype == "intrepid") {
|
if (fgItem.system.properties.fightoptiontype == "intrepid") {
|
||||||
rollData.attackModifier += 2
|
rollData.attackModifier += 2
|
||||||
}
|
}
|
||||||
if (fgItem.data.properties.fightoptiontype == "defense") {
|
if (fgItem.system.properties.fightoptiontype == "defense") {
|
||||||
rollData.attackModifier += -1
|
rollData.attackModifier += -1
|
||||||
}
|
}
|
||||||
if (fgItem.data.properties.fightoptiontype == "attack") {
|
if (fgItem.system.properties.fightoptiontype == "attack") {
|
||||||
rollData.attackModifier += 1
|
rollData.attackModifier += 1
|
||||||
}
|
}
|
||||||
if (fgItem.data.properties.fightoptiontype == "twoweaponsdef" || fgItem.data.properties.fightoptiontype == "twoweaponsatt") {
|
if (fgItem.system.properties.fightoptiontype == "twoweaponsdef" || fgItem.system.properties.fightoptiontype == "twoweaponsatt") {
|
||||||
rollData.attackModifier += -1
|
rollData.attackModifier += -1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -287,15 +289,15 @@ export class BoLRoll {
|
|||||||
html.find('#attr').change((event) => {
|
html.find('#attr').change((event) => {
|
||||||
let attrKey = event.currentTarget.value
|
let attrKey = event.currentTarget.value
|
||||||
let actor = game.actors.get( this.rollData.actorId)
|
let actor = game.actors.get( this.rollData.actorId)
|
||||||
this.rollData.attribute = duplicate(actor.data.data.attributes[attrKey])
|
this.rollData.attribute = duplicate(actor.system.attributes[attrKey])
|
||||||
this.rollData.attrValue = actor.data.data.attributes[attrKey].value
|
this.rollData.attrValue = actor.system.attributes[attrKey].value
|
||||||
this.updateTotalDice()
|
this.updateTotalDice()
|
||||||
})
|
})
|
||||||
html.find('#apt').change((event) => {
|
html.find('#apt').change((event) => {
|
||||||
let aptKey = event.currentTarget.value
|
let aptKey = event.currentTarget.value
|
||||||
let actor = game.actors.get( this.rollData.actorId)
|
let actor = game.actors.get( this.rollData.actorId)
|
||||||
this.rollData.aptitude = duplicate(actor.data.data.aptitudes[aptKey])
|
this.rollData.aptitude = duplicate(actor.system.aptitudes[aptKey])
|
||||||
this.rollData.aptValue = actor.data.data.aptitudes[aptKey].value
|
this.rollData.aptValue = actor.system.aptitudes[aptKey].value
|
||||||
this.updateTotalDice()
|
this.updateTotalDice()
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -337,16 +339,16 @@ export class BoLRoll {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static preProcessWeapon(rollData, defender) {
|
static preProcessWeapon(rollData, defender) {
|
||||||
if (rollData.mode == "weapon") {
|
if (rollData.mode == "weapon") {
|
||||||
rollData.weaponModifier = rollData.weapon.data.data.properties.attackModifiers ?? 0;
|
rollData.weaponModifier = rollData.weapon.system.properties.attackModifiers ?? 0;
|
||||||
rollData.attackBonusDice = rollData.weapon.data.data.properties.attackBonusDice
|
rollData.attackBonusDice = rollData.weapon.system.properties.attackBonusDice
|
||||||
if (defender) { // If target is selected
|
if (defender) { // If target is selected
|
||||||
rollData.defence = defender.defenseValue
|
rollData.defence = defender.defenseValue
|
||||||
rollData.armorMalus = defender.armorMalusValue
|
rollData.armorMalus = defender.armorMalusValue
|
||||||
rollData.shieldBlock = 'none'
|
rollData.shieldBlock = 'none'
|
||||||
let shields = defender.shields
|
let shields = defender.shields
|
||||||
for (let shield of shields) {
|
for (let shield of shields) {
|
||||||
rollData.shieldBlock = (shield.data.properties.blocking.blockingAll) ? 'blockall' : 'blockone';
|
rollData.shieldBlock = (shield.system.properties.blocking.blockingAll) ? 'blockall' : 'blockone';
|
||||||
rollData.shieldAttackMalus = (shield.data.properties.blocking.malus) ? shield.data.properties.blocking.malus : 1;
|
rollData.shieldAttackMalus = (shield.system.properties.blocking.malus) ? shield.system.properties.blocking.malus : 1;
|
||||||
rollData.applyShieldMalus = false
|
rollData.applyShieldMalus = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -429,7 +431,7 @@ export class BoLRoll {
|
|||||||
rollData.nbDice += (rollData.attackBonusDice) ? 1 : 0
|
rollData.nbDice += (rollData.attackBonusDice) ? 1 : 0
|
||||||
|
|
||||||
let rollbase = rollData.attrValue + rollData.aptValue
|
let rollbase = rollData.attrValue + rollData.aptValue
|
||||||
if ( rollData.weapon && rollData.weapon.data.data.properties.onlymodifier ) {
|
if ( rollData.weapon && rollData.weapon.system.properties.onlymodifier ) {
|
||||||
rollbase = 0
|
rollbase = 0
|
||||||
}
|
}
|
||||||
const modifiers = rollbase + rollData.careerBonus + rollData.mod + rollData.weaponModifier - rollData.defence - rollData.modArmorMalus + rollData.shieldMalus + rollData.attackModifier + rollData.appliedArmorMalus
|
const modifiers = rollbase + rollData.careerBonus + rollData.mod + rollData.weaponModifier - rollData.defence - rollData.modArmorMalus + rollData.shieldMalus + rollData.attackModifier + rollData.appliedArmorMalus
|
||||||
@ -454,7 +456,6 @@ export class BoLRoll {
|
|||||||
export class BoLDefaultRoll {
|
export class BoLDefaultRoll {
|
||||||
|
|
||||||
constructor(rollData) {
|
constructor(rollData) {
|
||||||
BoLUtility.storeRoll(rollData)
|
|
||||||
this.rollData = rollData
|
this.rollData = rollData
|
||||||
if (this.rollData.isSuccess == undefined) { // First init
|
if (this.rollData.isSuccess == undefined) { // First init
|
||||||
this.rollData.isSuccess = false;
|
this.rollData.isSuccess = false;
|
||||||
@ -462,10 +463,10 @@ export class BoLDefaultRoll {
|
|||||||
this.rollData.isFumble = false;
|
this.rollData.isFumble = false;
|
||||||
}
|
}
|
||||||
if (this.rollData.optionsId) {
|
if (this.rollData.optionsId) {
|
||||||
$(`#${this.rollData.optionsId}`).hide() // Hide the options roll buttons
|
BoLUtility.cleanupButtons( this.rollData.optionsId)
|
||||||
}
|
}
|
||||||
if (this.rollData.applyId) {
|
if (this.rollData.applyId) {
|
||||||
$(`#${this.rollData.applyId}`).hide() // Hide the options roll buttons
|
BoLUtility.cleanupButtons( this.rollData.applyId)
|
||||||
}
|
}
|
||||||
this.rollData.optionsId = randomID(16)
|
this.rollData.optionsId = randomID(16)
|
||||||
this.rollData.applyId = randomID(16)
|
this.rollData.applyId = randomID(16)
|
||||||
@ -497,10 +498,10 @@ export class BoLDefaultRoll {
|
|||||||
actor.registerInit(r.total, this.rollData.isCritical, this.rollData.isFumble)
|
actor.registerInit(r.total, this.rollData.isCritical, this.rollData.isFumble)
|
||||||
}
|
}
|
||||||
if (this.rollData.isSuccess && this.rollData.mode == "spell") { // PP cost management
|
if (this.rollData.isSuccess && this.rollData.mode == "spell") { // PP cost management
|
||||||
actor.spendPowerPoint(this.rollData.ppCost + this.rollData.ppCostArmor)
|
this.rollData.remainingPP = actor.spendPowerPoint(this.rollData.ppCost + this.rollData.ppCostArmor)
|
||||||
}
|
}
|
||||||
if (this.rollData.mode == "alchemy") { // PP cost management
|
if (this.rollData.mode == "alchemy") { // PP cost management
|
||||||
actor.resetAlchemyStatus(this.rollData.alchemy.id)
|
actor.resetAlchemyStatus(this.rollData.alchemy._id)
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.sendChatMessage()
|
await this.sendChatMessage()
|
||||||
@ -509,14 +510,15 @@ export class BoLDefaultRoll {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async sendChatMessage() {
|
async sendChatMessage() {
|
||||||
let actor = game.actors.get( this.rollData.actorId)
|
let actor = game.actors.get( this.rollData.actorId)
|
||||||
this._buildChatMessage(this.rollData).then(msgFlavor => {
|
this._buildChatMessage(this.rollData).then( async msgFlavor => {
|
||||||
this.rollData.roll.toMessage({
|
let msg = await this.rollData.roll.toMessage({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
rollMode: game.settings.get("core", "rollMode"),
|
rollMode: game.settings.get("core", "rollMode"),
|
||||||
//whisper: BoLUtility.getWhisperRecipientsAndGMs(this.rollData.actor.name),
|
//whisper: BoLUtility.getWhisperRecipientsAndGMs(this.rollData.actor.name),
|
||||||
flavor: msgFlavor,
|
flavor: msgFlavor,
|
||||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||||
})
|
})
|
||||||
|
msg.setFlag("world", "bol-roll-data", this.rollData)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -555,14 +557,15 @@ export class BoLDefaultRoll {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async sendDamageMessage() {
|
async sendDamageMessage() {
|
||||||
let actor = game.actors.get( this.rollData.actorId)
|
let actor = game.actors.get( this.rollData.actorId)
|
||||||
this._buildDamageChatMessage(this.rollData).then(msgFlavor => {
|
this._buildDamageChatMessage(this.rollData).then(async msgFlavor => {
|
||||||
this.rollData.damageRoll.toMessage({
|
let msg = await this.rollData.damageRoll.toMessage({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
flavor: msgFlavor,
|
flavor: msgFlavor,
|
||||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||||
flags: { msgType: "default" }
|
flags: { msgType: "default" }
|
||||||
})
|
})
|
||||||
});
|
msg.setFlag("world", "bol-roll-data", this.rollData)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -571,7 +574,7 @@ export class BoLDefaultRoll {
|
|||||||
|
|
||||||
let actor = game.actors.get( (actorId) ? actorId: this.rollData.actorId)
|
let actor = game.actors.get( (actorId) ? actorId: this.rollData.actorId)
|
||||||
if (attrDamage.includes("vigor")) {
|
if (attrDamage.includes("vigor")) {
|
||||||
attrDamageValue = actor.data.data.attributes.vigor.value
|
attrDamageValue = actor.system.attributes.vigor.value
|
||||||
if (attrDamage.includes("half")) {
|
if (attrDamage.includes("half")) {
|
||||||
attrDamageValue = Math.floor(attrDamageValue / 2)
|
attrDamageValue = Math.floor(attrDamageValue / 2)
|
||||||
}
|
}
|
||||||
@ -582,7 +585,7 @@ export class BoLDefaultRoll {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollDamage() {
|
async rollDamage() {
|
||||||
if (this.rollData.mode != "weapon") { // Only specific process in Weapon mode
|
if (this.rollData.mode != "weapon") { // Only specific process in Weapon mode
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.rollData.isSuccess) {
|
if (this.rollData.isSuccess) {
|
||||||
@ -594,8 +597,8 @@ export class BoLDefaultRoll {
|
|||||||
if (this.rollData.damageMode == 'damage-plus-12') {
|
if (this.rollData.damageMode == 'damage-plus-12') {
|
||||||
bonusDmg = 12
|
bonusDmg = 12
|
||||||
}
|
}
|
||||||
let attrDamageValue = this.getDamageAttributeValue(this.rollData.weapon.data.data.properties.damageAttribute)
|
let attrDamageValue = this.getDamageAttributeValue(this.rollData.weapon.system.properties.damageAttribute)
|
||||||
let weaponFormula = BoLUtility.getDamageFormula(this.rollData.weapon.data.data, this.rollData.fightOption)
|
let weaponFormula = BoLUtility.getDamageFormula(this.rollData.weapon.system, this.rollData.fightOption)
|
||||||
|
|
||||||
let damageFormula = weaponFormula + "+" + bonusDmg + "+" + attrDamageValue
|
let damageFormula = weaponFormula + "+" + bonusDmg + "+" + attrDamageValue
|
||||||
console.log("DAMAGE !!!", damageFormula, attrDamageValue, this.rollData)
|
console.log("DAMAGE !!!", damageFormula, attrDamageValue, this.rollData)
|
||||||
@ -606,7 +609,7 @@ export class BoLDefaultRoll {
|
|||||||
await this.rollData.damageRoll.roll({ "async": false })
|
await this.rollData.damageRoll.roll({ "async": false })
|
||||||
this.rollData.damageTotal = this.rollData.damageRoll.total
|
this.rollData.damageTotal = this.rollData.damageRoll.total
|
||||||
}
|
}
|
||||||
$(`#${this.rollData.optionsId}`).hide() // Hide the options roll buttons
|
BoLUtility.cleanupButtons(this.rollData.optionsId)
|
||||||
this.sendDamageMessage()
|
this.sendDamageMessage()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,42 +20,41 @@ export class BoLItemSheet extends ItemSheet {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/** @override */
|
/** @override */
|
||||||
getData(options) {
|
getData(options) {
|
||||||
const data = super.getData(options);
|
const data = super.getData(options)
|
||||||
const itemData = data.data;
|
let itemData = duplicate(data.document)
|
||||||
data.config = game.bol.config;
|
data.config = game.bol.config
|
||||||
data.item = itemData;
|
data.item = itemData
|
||||||
data.data = itemData.data;
|
data.category = itemData.system.category
|
||||||
data.category = itemData.category;
|
|
||||||
data.itemProperties = this.item.itemProperties;
|
|
||||||
data.isGM = game.user.isGM;
|
data.isGM = game.user.isGM;
|
||||||
|
data.itemProperties = this.item.itemProperties;
|
||||||
|
|
||||||
// Dynamic default data fix/adapt
|
// Dynamic default data fix/adapt
|
||||||
if (itemData.type == "item") {
|
if (itemData.type == "item") {
|
||||||
if (!itemData.data.category) {
|
if (!itemData.system.category) {
|
||||||
itemData.data.category = "equipment"
|
itemData.system.category = "equipment"
|
||||||
}
|
}
|
||||||
if ( itemData.data.category == "equipment" && itemData.data.properties.equipable) {
|
if ( itemData.system.category == "equipment" && itemData.system.properties.equipable) {
|
||||||
if (!itemData.data.properties.slot) {
|
if (!itemData.system.properties.slot) {
|
||||||
itemData.data.properties.slot = "-"
|
itemData.system.properties.slot = "-"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (itemData.data.category == 'spell') {
|
if (itemData.system.category == 'spell') {
|
||||||
if(!itemData.data.properties.mandatoryconditions) {
|
if(!itemData.system.properties.mandatoryconditions) {
|
||||||
itemData.data.properties.mandatoryconditions = []
|
itemData.system.properties.mandatoryconditions = []
|
||||||
}
|
}
|
||||||
if(!itemData.data.properties.optionnalconditions) {
|
if(!itemData.system.properties.optionnalconditions) {
|
||||||
itemData.data.properties.optionnalconditions = []
|
itemData.system.properties.optionnalconditions = []
|
||||||
}
|
}
|
||||||
for (let i = 0; i < 4; i++) {
|
for (let i = 0; i < 4; i++) {
|
||||||
itemData.data.properties.mandatoryconditions[i] = itemData.data.properties.mandatoryconditions[i] ?? ""
|
itemData.system.properties.mandatoryconditions[i] = itemData.system.properties.mandatoryconditions[i] ?? ""
|
||||||
}
|
}
|
||||||
for (let i = 0; i < 8; i++) {
|
for (let i = 0; i < 8; i++) {
|
||||||
itemData.data.properties.optionnalconditions[i] = itemData.data.properties.optionnalconditions[i] ?? ""
|
itemData.system.properties.optionnalconditions[i] = itemData.system.properties.optionnalconditions[i] ?? ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!itemData.data.subtype) {
|
if (!itemData.system.subtype) {
|
||||||
itemData.data.category = "origin"
|
itemData.system.category = "origin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,21 +7,17 @@ export class BoLItem extends Item {
|
|||||||
* Augment the basic Item data model with additional dynamic data.
|
* Augment the basic Item data model with additional dynamic data.
|
||||||
*/
|
*/
|
||||||
prepareData() {
|
prepareData() {
|
||||||
super.prepareData();
|
super.prepareData()
|
||||||
// console.debug("Item prepareData");
|
|
||||||
// Get the Item's data
|
|
||||||
const itemData = this.data;
|
|
||||||
// console.log(itemData);
|
|
||||||
const actorData = this.actor ? this.actor.data : {};
|
|
||||||
const data = itemData.data;
|
|
||||||
}
|
|
||||||
|
|
||||||
get properties() {
|
const actorData = this.actor ? this.actor.system : {}
|
||||||
return this.data.properties;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
get properties() {
|
||||||
|
return this.system.properties
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
/**
|
/**
|
||||||
* Get the Array of item properties which are used in the small sidebar of the description tab
|
* Get the Array of item properties which are used in the small sidebar of the description tab
|
||||||
* @return {Array}
|
* @return {Array}
|
||||||
@ -29,11 +25,11 @@ export class BoLItem extends Item {
|
|||||||
*/
|
*/
|
||||||
get itemProperties() {
|
get itemProperties() {
|
||||||
const props = [];
|
const props = [];
|
||||||
if ( this.data.type === "item" ) {
|
if ( this.type === "item" ) {
|
||||||
const entries = Object.entries(this.data.data.properties);
|
const entries = Object.entries(this.system.properties)
|
||||||
props.push(...entries.filter(e => e[1] === true).map(e => { return game.bol.config.itemProperties2[e[0]] }));
|
props.push(...entries.filter(e => e[1] === true).map(e => { return game.bol.config.itemProperties2[e[0]] }))
|
||||||
}
|
}
|
||||||
return props.filter(p => !!p);
|
return props.filter(p => !!p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ export class BoLTokenHud {
|
|||||||
let actionIndex = Number(event.currentTarget.attributes['data-action-index'].value)
|
let actionIndex = Number(event.currentTarget.attributes['data-action-index'].value)
|
||||||
let action = hudData.actionsList[actionIndex]
|
let action = hudData.actionsList[actionIndex]
|
||||||
const weapon = actor.items.get( action._id )
|
const weapon = actor.items.get( action._id )
|
||||||
BoLRoll.weaponCheckWithWeapon(hudData.actor, weapon)
|
BoLRoll.weaponCheckWithWeapon(hudData.actor, duplicate(weapon))
|
||||||
//console.log("Clicked", action)
|
//console.log("Clicked", action)
|
||||||
} )
|
} )
|
||||||
|
|
||||||
|
@ -63,12 +63,12 @@ export class BoLUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static storeRoll(roll) {
|
static storeRoll(roll) {
|
||||||
this.lastRoll = roll
|
this.rollTab[roll.id] = roll
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getLastRoll() {
|
static getRoll(rollId) {
|
||||||
return this.lastRoll
|
return this.rollTab[roll.id]
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -127,16 +127,16 @@ export class BoLUtility {
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getOtherWhisperRecipients( name) {
|
static getOtherWhisperRecipients(name) {
|
||||||
let users = []
|
let users = []
|
||||||
for( let user of game.users) {
|
for (let user of game.users) {
|
||||||
if ( !user.isGM && user.name != name) {
|
if (!user.isGM && user.name != name) {
|
||||||
users.push( user.data._id)
|
users.push(user.data._id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return users
|
return users
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getWhisperRecipientsAndGMs(name) {
|
static getWhisperRecipientsAndGMs(name) {
|
||||||
let recep1 = ChatMessage.getWhisperRecipients(name) || [];
|
let recep1 = ChatMessage.getWhisperRecipients(name) || [];
|
||||||
@ -173,35 +173,47 @@ export class BoLUtility {
|
|||||||
//console.log("FOUND 1!!! ", actor)
|
//console.log("FOUND 1!!! ", actor)
|
||||||
if (actor && actor.isOwner) return
|
if (actor && actor.isOwner) return
|
||||||
else if (game.user.isGM || data.author.id === game.user.id) return
|
else if (game.user.isGM || data.author.id === game.user.id) return
|
||||||
|
|
||||||
const divButtons = chatCard.find('.actions-section')
|
const divButtons = chatCard.find('.actions-section')
|
||||||
console.log("FOUND 2!! ", divButtons)
|
|
||||||
divButtons.hide()
|
divButtons.hide()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static getRollDataFromMessage(event) {
|
||||||
|
let messageId = BoLUtility.findChatMessageId(event.currentTarget)
|
||||||
|
let message = game.messages.get(messageId)
|
||||||
|
return message.getFlag("world", "bol-roll-data")
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static cleanupButtons(id) {
|
||||||
|
$(`#${id}`).hide() // Hide the options roll buttons
|
||||||
|
game.socket.emit("system.bol", { name: "msg_cleanup_buttons", data: { id: id } })
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async chatListeners(html) {
|
static async chatListeners(html) {
|
||||||
|
|
||||||
// Damage handling
|
// Damage handling
|
||||||
html.on("click", '.chat-damage-apply', event => {
|
html.on("click", '.chat-damage-apply', event => {
|
||||||
let rollData = BoLUtility.getLastRoll()
|
let rollData = BoLUtility.getRollDataFromMessage(event)
|
||||||
$(`#${rollData.applyId}`).hide()
|
BoLUtility.cleanupButtons(rollData.applyId)
|
||||||
BoLUtility.sendAttackSuccess(rollData)
|
BoLUtility.sendAttackSuccess(rollData)
|
||||||
});
|
});
|
||||||
|
|
||||||
html.on("click", '.chat-damage-roll', event => {
|
html.on("click", '.chat-damage-roll', event => {
|
||||||
event.preventDefault();
|
event.preventDefault()
|
||||||
let rollData = BoLUtility.getLastRoll()
|
let rollData = BoLUtility.getRollDataFromMessage(event)
|
||||||
rollData.damageMode = event.currentTarget.attributes['data-damage-mode'].value;
|
rollData.damageMode = event.currentTarget.attributes['data-damage-mode'].value
|
||||||
let bolRoll = new BoLDefaultRoll(rollData)
|
let bolRoll = new BoLDefaultRoll(rollData)
|
||||||
bolRoll.rollDamage()
|
bolRoll.rollDamage()
|
||||||
});
|
});
|
||||||
|
|
||||||
html.on("click", '.transform-legendary-roll', event => {
|
html.on("click", '.transform-legendary-roll', event => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let rollData = BoLUtility.getLastRoll()
|
let rollData = BoLUtility.getRollDataFromMessage(event)
|
||||||
let actor = game.actors.get( rollData.actorId)
|
let actor = game.actors.get(rollData.actorId)
|
||||||
actor.subHeroPoints(1)
|
actor.subHeroPoints(1)
|
||||||
let r = new BoLDefaultRoll(rollData)
|
let r = new BoLDefaultRoll(rollData)
|
||||||
r.upgradeToLegendary()
|
r.upgradeToLegendary()
|
||||||
@ -209,8 +221,8 @@ export class BoLUtility {
|
|||||||
|
|
||||||
html.on("click", '.transform-heroic-roll', event => {
|
html.on("click", '.transform-heroic-roll', event => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let rollData = BoLUtility.getLastRoll()
|
let rollData = BoLUtility.getRollDataFromMessage(event)
|
||||||
let actor = game.actors.get( rollData.actorId)
|
let actor = game.actors.get(rollData.actorId)
|
||||||
actor.subHeroPoints(1)
|
actor.subHeroPoints(1)
|
||||||
let r = new BoLDefaultRoll(rollData)
|
let r = new BoLDefaultRoll(rollData)
|
||||||
r.upgradeToHeroic()
|
r.upgradeToHeroic()
|
||||||
@ -218,8 +230,8 @@ export class BoLUtility {
|
|||||||
|
|
||||||
html.on("click", '.hero-reroll', event => {
|
html.on("click", '.hero-reroll', event => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let rollData = BoLUtility.getLastRoll()
|
let rollData = BoLUtility.getRollDataFromMessage(event)
|
||||||
let actor = game.actors.get( rollData.actorId)
|
let actor = game.actors.get(rollData.actorId)
|
||||||
actor.subHeroPoints(1)
|
actor.subHeroPoints(1)
|
||||||
rollData.reroll = false // Disable reroll option for second roll
|
rollData.reroll = false // Disable reroll option for second roll
|
||||||
let r = new BoLDefaultRoll(rollData)
|
let r = new BoLDefaultRoll(rollData)
|
||||||
@ -231,24 +243,24 @@ export class BoLUtility {
|
|||||||
let attackId = event.currentTarget.attributes['data-attack-id'].value
|
let attackId = event.currentTarget.attributes['data-attack-id'].value
|
||||||
let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
|
let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
|
||||||
let weaponId = (event.currentTarget.attributes['data-weapon-id']) ? event.currentTarget.attributes['data-weapon-id'].value : -1
|
let weaponId = (event.currentTarget.attributes['data-weapon-id']) ? event.currentTarget.attributes['data-weapon-id'].value : -1
|
||||||
|
|
||||||
|
// Remove message for all
|
||||||
|
let msgId = BoLUtility.findChatMessageId(event.currentTarget)
|
||||||
if (game.user.isGM) {
|
if (game.user.isGM) {
|
||||||
console.log("Process handling !!! -> GM direct damage handling")
|
BoLUtility.processDamageHandling(attackId, defenseMode, weaponId, msgId)
|
||||||
BoLUtility.processDamageHandling(event, attackId, defenseMode, weaponId)
|
|
||||||
} else {
|
} else {
|
||||||
console.log("Process handling !!! -> socket emit")
|
game.socket.emit("system.bol", { name: "msg_damage_handling", data: { msgId: msgId, attackId: attackId, defenseMode: defenseMode, weaponId: weaponId } })
|
||||||
game.socket.emit("system.bol", { name: "msg_damage_handling", data: { event: event, attackId: attackId, defenseMode: defenseMode, weaponId: weaponId } });
|
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async processDamageHandling(event, attackId, defenseMode, weaponId = -1) {
|
static async processDamageHandling(attackId, defenseMode, weaponId = -1, msgId) {
|
||||||
if (!game.user.isGM) {
|
if (!game.user.isGM) {
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
BoLUtility.removeChatMessageId(BoLUtility.findChatMessageId(event.currentTarget));
|
BoLUtility.removeChatMessageId( msgId )
|
||||||
|
console.log("Damage Handling", attackId, defenseMode, weaponId)
|
||||||
console.log("Damage Handling", event, attackId, defenseMode, weaponId)
|
|
||||||
// Only GM process this
|
// Only GM process this
|
||||||
let attackDef = this.attackStore[attackId]
|
let attackDef = this.attackStore[attackId]
|
||||||
if (attackDef && attackDef.defenderId) {
|
if (attackDef && attackDef.defenderId) {
|
||||||
@ -263,16 +275,16 @@ export class BoLUtility {
|
|||||||
if (defenseMode == 'damage-with-armor') {
|
if (defenseMode == 'damage-with-armor') {
|
||||||
let armorFormula = defender.getArmorFormula()
|
let armorFormula = defender.getArmorFormula()
|
||||||
attackDef.rollArmor = new Roll(armorFormula)
|
attackDef.rollArmor = new Roll(armorFormula)
|
||||||
attackDef.rollArmor.roll( { async: false } )
|
attackDef.rollArmor.roll({ async: false })
|
||||||
console.log("Armor roll ", attackDef.rollArmor)
|
attackDef.armorProtect = (attackDef.rollArmor.total < 0) ? 0 : attackDef.rollArmor.total
|
||||||
attackDef.armorProtect = (attackDef.rollArmor.total < 0) ? 0 : attackDef.rollArmor.total;
|
attackDef.finalDamage = attackDef.damageTotal - attackDef.armorProtect
|
||||||
attackDef.finalDamage = attackDef.damageRoll.total - attackDef.armorProtect;
|
attackDef.finalDamage = (attackDef.finalDamage < 0) ? 0 : attackDef.finalDamage
|
||||||
attackDef.finalDamage = (attackDef.finalDamage < 0) ? 0 : attackDef.finalDamage;
|
defender.sufferDamage(attackDef.finalDamage)
|
||||||
defender.sufferDamage(attackDef.finalDamage);
|
console.log("Armor roll -> result ", attackDef)
|
||||||
}
|
}
|
||||||
if (defenseMode == 'damage-without-armor') {
|
if (defenseMode == 'damage-without-armor') {
|
||||||
attackDef.finalDamage = attackDef.damageRoll.total;
|
attackDef.finalDamage = attackDef.damageTotal
|
||||||
defender.sufferDamage(attackDef.finalDamage);
|
defender.sufferDamage(attackDef.finalDamage)
|
||||||
}
|
}
|
||||||
if (defenseMode == 'hero-reduce-damage') {
|
if (defenseMode == 'hero-reduce-damage') {
|
||||||
let armorFormula = defender.getArmorFormula()
|
let armorFormula = defender.getArmorFormula()
|
||||||
@ -281,7 +293,7 @@ export class BoLUtility {
|
|||||||
attackDef.armorProtect = (attackDef.rollArmor.total < 0) ? 0 : attackDef.rollArmor.total
|
attackDef.armorProtect = (attackDef.rollArmor.total < 0) ? 0 : attackDef.rollArmor.total
|
||||||
attackDef.rollHero = new Roll("1d6")
|
attackDef.rollHero = new Roll("1d6")
|
||||||
attackDef.rollHero.roll({ async: false })
|
attackDef.rollHero.roll({ async: false })
|
||||||
attackDef.finalDamage = attackDef.damageRoll.total - attackDef.rollHero.total - attackDef.armorProtect
|
attackDef.finalDamage = attackDef.damageTotal - attackDef.rollHero.total - attackDef.armorProtect
|
||||||
attackDef.finalDamage = (attackDef.finalDamage < 0) ? 0 : attackDef.finalDamage
|
attackDef.finalDamage = (attackDef.finalDamage < 0) ? 0 : attackDef.finalDamage
|
||||||
defender.sufferDamage(attackDef.finalDamage)
|
defender.sufferDamage(attackDef.finalDamage)
|
||||||
defender.subHeroPoints(1)
|
defender.subHeroPoints(1)
|
||||||
@ -291,21 +303,35 @@ export class BoLUtility {
|
|||||||
attackDef.weaponHero = defender.weapons.find(item => item._id == weaponId);
|
attackDef.weaponHero = defender.weapons.find(item => item._id == weaponId);
|
||||||
defender.deleteEmbeddedDocuments("Item", [weaponId]);
|
defender.deleteEmbeddedDocuments("Item", [weaponId]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let defenderUser
|
||||||
|
for (let user of game.users) {
|
||||||
|
if ( user.character && user.character.id == defender.id ) {
|
||||||
|
defenderUser = user
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let damageResults = {
|
||||||
|
attackId: attackDef.id,
|
||||||
|
attacker: attackDef.attacker,
|
||||||
|
rollArmor: attackDef.rollArmor,
|
||||||
|
rollHero: attackDef.rollHero,
|
||||||
|
weaponHero: attackDef.weaponHero,
|
||||||
|
armorProtect: attackDef.armorProtect,
|
||||||
|
name: defender.name,
|
||||||
|
defender: defender,
|
||||||
|
defenseMode: attackDef.defenseMode,
|
||||||
|
finalDamage: attackDef.finalDamage
|
||||||
|
}
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
alias: defender.name,
|
alias: defender.name,
|
||||||
whisper: BoLUtility.getWhisperRecipientsAndGMs(defender.name),
|
whisper: BoLUtility.getWhisperRecipientsAndGMs(defender.name),
|
||||||
content: await renderTemplate('systems/bol/templates/chat/rolls/defense-result-card.hbs', {
|
content: await renderTemplate('systems/bol/templates/chat/rolls/defense-result-card.hbs', damageResults)
|
||||||
attackId: attackDef.id,
|
})
|
||||||
attacker: attackDef.attacker,
|
console.log("Defender data : ", defenderUser)
|
||||||
rollArmor: attackDef.rollArmor,
|
ChatMessage.create({
|
||||||
rollHero: attackDef.rollHero,
|
alias: defender.name,
|
||||||
weaponHero: attackDef.weaponHero,
|
whisper: BoLUtility.getOtherWhisperRecipients(defenderUser?.name),
|
||||||
armorProtect: attackDef.armorProtect,
|
content: await renderTemplate('systems/bol/templates/chat/rolls/defense-summary-card.hbs', damageResults)
|
||||||
name: defender.name,
|
|
||||||
defender: defender,
|
|
||||||
defenseMode: attackDef.defenseMode,
|
|
||||||
finalDamage: attackDef.finalDamage
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -388,8 +414,8 @@ export class BoLUtility {
|
|||||||
}
|
}
|
||||||
// Build and send the defense message to the relevant people (ie GM + defender)
|
// Build and send the defense message to the relevant people (ie GM + defender)
|
||||||
let defender = game.actors.get(attackDef.defenderId)
|
let defender = game.actors.get(attackDef.defenderId)
|
||||||
let defenderWeapons = defender.weapons
|
console.log("DEF WEP", attackDef, defender)
|
||||||
console.log("DEF WEP", attackDef)
|
let defenderWeapons = defender.weapons || []
|
||||||
this.attackStore[attackDef.id] = attackDef // Store !
|
this.attackStore[attackDef.id] = attackDef // Store !
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
alias: defender.name,
|
alias: defender.name,
|
||||||
@ -410,15 +436,18 @@ export class BoLUtility {
|
|||||||
if (sockmsg.name == "msg_attack_success") {
|
if (sockmsg.name == "msg_attack_success") {
|
||||||
BoLUtility.processAttackSuccess(sockmsg.data)
|
BoLUtility.processAttackSuccess(sockmsg.data)
|
||||||
}
|
}
|
||||||
|
if (sockmsg.name == "msg_cleanup_buttons") {
|
||||||
|
$(`#${sockmsg.data.id}`).hide() // Hide the options roll buttons
|
||||||
|
}
|
||||||
if (sockmsg.name == "msg_damage_handling") {
|
if (sockmsg.name == "msg_damage_handling") {
|
||||||
BoLUtility.processDamageHandling(sockmsg.data.event, sockmsg.data.attackId, sockmsg.data.defenseMode)
|
BoLUtility.processDamageHandling(sockmsg.data.attackId, sockmsg.data.defenseMode, sockmsg.data.weaponId, sockmsg.data.msgId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static computeSpellCost(spell, nbOptCond = 0) {
|
static computeSpellCost(spell, nbOptCond = 0) {
|
||||||
let pp = spell.data.data.properties.ppcost
|
let pp = spell.data.properties.ppcost
|
||||||
let minpp = __circle2minpp[spell.data.data.properties.circle]
|
let minpp = __circle2minpp[spell.data.properties.circle]
|
||||||
pp = (pp - nbOptCond < minpp) ? minpp : pp - nbOptCond
|
pp = (pp - nbOptCond < minpp) ? minpp : pp - nbOptCond
|
||||||
return pp
|
return pp
|
||||||
}
|
}
|
||||||
@ -443,11 +472,11 @@ export class BoLUtility {
|
|||||||
let postForm = 'kh' + nbDice
|
let postForm = 'kh' + nbDice
|
||||||
let modIndex = 3
|
let modIndex = 3
|
||||||
// Upgrade damage if needed
|
// Upgrade damage if needed
|
||||||
if ( upgradeDamage && ( !res[3] || res[3]=="") ) {
|
if (upgradeDamage && (!res[3] || res[3] == "")) {
|
||||||
res[3] = "B" // Upgrade to bonus
|
res[3] = "B" // Upgrade to bonus
|
||||||
}
|
}
|
||||||
if (res[3]) {
|
if (res[3]) {
|
||||||
if ( upgradeDamage && res[3] == 'M') {
|
if (upgradeDamage && res[3] == 'M') {
|
||||||
res[3] = "" // Disable lamlus for upgradeDamage
|
res[3] = "" // Disable lamlus for upgradeDamage
|
||||||
}
|
}
|
||||||
if (res[3] == 'M') {
|
if (res[3] == 'M') {
|
||||||
|
42
packs/objets-alchimie.db
Normal file
42
packs/objets-alchimie.db
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{"name":"Serrure ou piège élaboré","type":"item","img":"icons/environment/traps/saw-steel.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>-4 pour les crocheter/désamorcer ; un piège inflige d6+1 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"0Yhn3r8AFsKXEKeS"}
|
||||||
|
{"name":"Lance-éclair","type":"item","img":"icons/weapons/crossbows/handcrossbow-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>une arme qui a vaguement la forme d’une arbalète et projette un éclair. Facteur de portée : 75 m ; d6 x2 points de dégâts ignorant les armure</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"1JMT3kjaWSP8umZ4"}
|
||||||
|
{"name":"Armure Mythique","type":"item","img":"icons/equipment/chest/breastplate-helmet-metal.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>comme une armure légendaire, mais sans malus d’agilité ; un héros pourrait même nager en portant cette armure</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"1VKW5IwOhopbnD70"}
|
||||||
|
{"name":"Horloge","type":"item","img":"icons/sundries/misc/hourglass-wood.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"2vB2YGtQUh2Uv1Fm"}
|
||||||
|
{"name":"Habitation intelligente","type":"item","img":"icons/environment/settlement/hut.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"4loLeFR0iwfUnPuK"}
|
||||||
|
{"name":"Création par croisement et hybridation de plantes ou d’animaux mortellement dangereux","type":"item","img":"icons/commodities/flowers/cornflower-gold.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"4siOagfdWzjP5zH7"}
|
||||||
|
{"name":"Substance chimique luminescente","type":"item","img":"icons/consumables/potions/flask-corked-yellow-glow.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>produit de la lumière pour une demi-journée</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"4tw89CLuUKdEPTjP"}
|
||||||
|
{"name":"Ceinture d’allanium","type":"item","img":"icons/equipment/waist/belt-buckle-spiral-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>permet de flotter dans les airs</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"5mTphkODHSGq3nSQ"}
|
||||||
|
{"name":"Outil","type":"item","img":"icons/tools/hand/hammer-mason-white-grey.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Les armes et armures de cette qualité permettent, une fois par round, de relancer un 1 obtenu sur un jet de dégâts/de protection.</p>\n<p>En dehors des armes, les autres créations infligeant des dégâts ou soignant des blessures provoquent respectivement la perte ou la récupération de d3 points de vitalité.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"9Q5RVK5vLFffDzbF"}
|
||||||
|
{"name":"Allume-feu","type":"item","img":"icons/tools/laboratory/bowl-liquid-orange.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>permet d’allumer un feu facilement et rapidement</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"BPWbng0g7yGicbo1"}
|
||||||
|
{"name":"Membre Artificiel","type":"item","img":"icons/commodities/biological/hand-yellow-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>non articulé, mais bien plus élégant qu’un simple crochet</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"IuRy0AzysqvPBitL"}
|
||||||
|
{"name":"Arme","type":"item","img":"icons/weapons/swords/greatsword-crossguard-engraved-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Les armes et armures de cette qualité permettent, une fois par round, de relancer un 1 obtenu sur un jet de dégâts/de protection.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"J4dFYrwkmlm0Nmk3"}
|
||||||
|
{"name":"Arme dissimulée dans un Objet Courant","type":"item","img":"icons/weapons/fist/fist-katar-gold.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>En dehors des armes, les autres créations infligeant des dégâts ou soignant des blessures provoquent respectivement la perte ou la récupération de d6 points de vitalité.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"JaB3ain6oqdYMHO5"}
|
||||||
|
{"name":"Création de formes de vie hybrides d’homme et d’animal","type":"item","img":"icons/creatures/magical/humanoid-silhouette-green.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"KNww1UqQ5xDsoipn"}
|
||||||
|
{"name":"Antirouille","type":"item","img":"icons/tools/laboratory/bowl-liquid-black.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>quantité suffisante pour ôter la rouille d’une armure complète</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"KlbAhlqMv2aYrVV6"}
|
||||||
|
{"name":"Cuve de clonage des individus","type":"item","img":"icons/creatures/magical/humanoid-silhouette-aliens-green.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"LDpAggSZbGqrXmlw"}
|
||||||
|
{"name":"Armure","type":"item","img":"icons/equipment/chest/breastplate-scale-grey.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Les armes et armures de cette qualité permettent, une fois par round, de relancer un 1 obtenu sur un jet de dégâts/de protection.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"NOeeuqGt5sRZzjZW"}
|
||||||
|
{"name":"Huile Brulante","type":"item","img":"icons/tools/laboratory/bowl-powder-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>brûle au contact et inflige d6 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"NsWmlAIAiDgaOouM"}
|
||||||
|
{"name":"Ceinture d’invisibilité","type":"item","img":"icons/equipment/waist/belt-buckle-horned.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>quand on la boucle, cette ceinture offre le même effet que la poudre d’invisibilité</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"RuW6v3YvbEE80rWv"}
|
||||||
|
{"name":"Armure Supérieure","type":"item","img":"icons/equipment/chest/breastplate-layered-leather-stitched.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>offre une protection semblable à celle d’une armure de la catégorie supérieure – une armure légère apporte la même protection qu’une armure moyenne, et une armure lourde apporte une protection de d6. De plus, l’armure diminue de moitié les dégâts supplémentaires infligés par un succès héroïque ou légendaire</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"WXGXDYvnGFqPznDW"}
|
||||||
|
{"name":"Arme Mythique","type":"item","img":"icons/weapons/swords/greatsword-evil-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>comme une arme légendaire, mais elle est de plus considérée comme une arme favorite, cf. l’avantage du même nom</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"XLTcm3ZrC5f2obak"}
|
||||||
|
{"name":"Instrument de musique au son parfait","type":"item","img":"icons/tools/instruments/harp-gold-glowing.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>un dé de bonus pour en jouer</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"YZ9Pd2jmxmEf7Bfr"}
|
||||||
|
{"name":"Arme Légendaire","type":"item","img":"icons/weapons/swords/sword-guard-flanged-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>ajoute un dé de bonus aux jets de dégâts et ignore les armures, à l’exception de celles créées par un alchimiste. De plus, l’arme est incassable. Une arme aussi exceptionnelle se doit de recevoir un nom</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"Z16TTJJBk4gifNi4"}
|
||||||
|
{"name":"Serrure ou piège particulièrement ingénieux","type":"item","img":"icons/environment/traps/metal-spikes.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>-6 pour les crocheter/désamorcer ; le piège inflige d6 x2 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"cH4xnb61y15y0VB9"}
|
||||||
|
{"name":"Microscope","type":"item","img":"icons/tools/scribal/magnifying-glass.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"czeLiVAATVSJXurP"}
|
||||||
|
{"name":"Dague à lame creuse en verre","type":"item","img":"icons/weapons/daggers/dagger-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>remplie d’acide ou de poison</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"dPjpAs6k4oJ1PBJY"}
|
||||||
|
{"name":"Serrure","type":"item","img":"icons/skills/trades/security-locksmith-key-gray.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>malus de -2 pour la forcer</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"eyhRUXzKxs5USWn4"}
|
||||||
|
{"name":"Création de formes de vie en laboratoire","type":"item","img":"icons/environment/creatures/bug-worm-teeth-green.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"g0LHWZNu9sSppfS1"}
|
||||||
|
{"name":"Armure Légendaire","type":"item","img":"icons/equipment/chest/breastplate-pieced-black-02.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>offre une protection semblable à celle d’une armure de la catégorie supérieure – une armure légère apporte la même protection qu’une armure moyenne, et une armure lourde apporte une protection de d6. De plus, le jet de protection de l’armure se fait avec un dé de bonus, et elle diminue de moitié les dégâts supplémentaires infligés par un succès héroïque ou légendaire.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"ifyxS1mYVPrVva3D"}
|
||||||
|
{"name":"Machine Volante","type":"item","img":"icons/magic/air/wind-weather-sailing-ship.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>nef volante, par exemple</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"kGTTnSlZA6ZoQ3u3"}
|
||||||
|
{"name":"Télescope","type":"item","img":"icons/tools/navigation/spyglass-telescope-brass.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"ket3hVgoT0QwcBEq"}
|
||||||
|
{"name":"Arme Supérieure","type":"item","img":"icons/weapons/swords/greatsword-crossguard-flanged-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>un dé de bonus aux jets de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"ki1xuxtM0H4pgTiy"}
|
||||||
|
{"name":"Arbalète à Grappin","type":"item","img":"icons/weapons/crossbows/handcrossbow-black.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>tire un grappin attaché à une corde en soie avec un facteur de portée de 7,5 m</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"kuypZbs1owvKVTqI"}
|
||||||
|
{"name":"Casque permettant à son porteur de respirer sous l’eau","type":"item","img":"icons/equipment/head/helm-spangen-ridged.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"lEfQUM98WsqLkIxz"}
|
||||||
|
{"name":"Périscope","type":"item","img":"icons/tools/scribal/magnifying-glass.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"mNOicjjxjXgZmmLy"}
|
||||||
|
{"name":"Serrure ou piège à la complexité unique","type":"item","img":"icons/commodities/tech/sensor-yellow.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>-8 pour les crocheter/désamorcer ; un piège inflige d6 x3 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"oB6gDtBff0AxZ79M"}
|
||||||
|
{"name":"Machine dotée d'une semi-conscience","type":"item","img":"icons/creatures/magical/construct-iron-stomping-yellow.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"ok8HQzoEyF9GgSKA"}
|
||||||
|
{"name":"Automate ou golem ayant la forme d’une armure animée","type":"item","img":"icons/magic/symbols/cog-orange-red.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"opFsywlBa1q9cb0z"}
|
||||||
|
{"name":"Navire submersible","type":"item","img":"icons/tools/navigation/sextant-brass-brown.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>un sous-marin descendant à une profondeur maximale de 6 mètres et pouvant emporter un équipage de quatre personnes. Un tuyau flottant jusqu’à la surface alimente le sous-marin en oxygène (et peut être repéré en surface). Le sous-marin contient suffisamment d’air pour rester en plongée pendant une heure. Il se déplace à une vitesse d’environ 8 kilomètres à l’heure, propulsé par la force des membres de l’équipage qui pédalent pour faire tourner l’hélice</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"rg9EZ0jwe2ZdNrcJ"}
|
||||||
|
{"name":"Fabrication d’allanium et de janium","type":"item","img":"icons/commodities/metal/ingot-engraved-gold.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"tcKKDzPjPqTA8doj"}
|
||||||
|
{"name":"Machine de guerre blindée","type":"item","img":"icons/commodities/tech/smoke-bomb-yellow.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"vWhFzHoi5H6kVeFM"}
|
||||||
|
{"name":"Piège","type":"item","img":"icons/environment/traps/trap-jaw-tan.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>malus de -2 pour le repérer et le désamorcer ; inflige d3+1 points de dégât</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"xVWrSPiX0Nwccsn6"}
|
37
packs/potions-alchimie.db
Normal file
37
packs/potions-alchimie.db
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{"name":"Prouesse","type":"item","img":"icons/consumables/potions/bottle-corked-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>un dé de bonus aux jets d’attaque de corps à corps ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"0a8UFoCOd3D35WBb"}
|
||||||
|
{"name":"Immortalité","type":"item","img":"icons/consumables/potions/bottle-conical-corked-labeled-skull-poison-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Prévient toute mort naturelle. Le buveur vieillit lentement, en se desséchant au fil des siècles. Seule une mort violente peut l’ emporter.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"1CGNqrAk8i4yZHMu"}
|
||||||
|
{"name":"Alcool de Qualité","type":"item","img":"icons/consumables/drinks/wine-amphora-clay-gray.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>3 bouteilles</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"1","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"3axZyF07LhrFoIKn"}
|
||||||
|
{"name":"Sommeil Instantané","type":"item","img":"icons/consumables/potions/conical-ornate-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur doit réussir un jet de vigueur avec votre rang d’alchimiste en malus, ou sombrer dans un profond sommeil pendant une demi-journée.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"3d31dycrddqS41oH"}
|
||||||
|
{"name":"Feu Alchimique","type":"item","img":"icons/consumables/potions/flask-corked-red-glow.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>une fiole qui, quand elle est brisée, explose en une boule de feu de 3 m de rayon, infligeant d6 x2 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"3hbPr9YV5UFPT5xV"}
|
||||||
|
{"name":"Acide","type":"item","img":"icons/consumables/potions/vial-cork-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>1 petite fiole, inflige d3 points de dégâts ou peut percer 2,5 cm de bois ou de métal</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"9g9V7Khr66RkfqYp"}
|
||||||
|
{"name":"Beauté","type":"item","img":"icons/consumables/potions/bottle-pear-corked-pink.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>+1 en aura ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"CZoAbYpw5V35ICsl"}
|
||||||
|
{"name":"Puissance","type":"item","img":"icons/consumables/potions/bottle-round-corked-orante-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>+1 en vigueur ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"DPbSKaYROI8Ys2QL"}
|
||||||
|
{"name":"Somnifere","type":"item","img":"icons/consumables/potions/bottle-bulb-corked-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>A l’ingestion, provoque 2d6 heures de sommeil profond, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{},"_id":"DukviN6iQWAZxvO6"}
|
||||||
|
{"name":"Antidote Universel","type":"item","img":"icons/consumables/potions/bottle-circular-corked-labeled-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>soigne instantanément n’importe quel empoisonnement, même magique ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"DzNxbiCwykhOI8il"}
|
||||||
|
{"name":"Agrandissement ou Rapetissement","type":"item","img":"icons/consumables/potions/bottle-corked-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Durée : 1 scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"EScizWIAqEGey7k9"}
|
||||||
|
{"name":"Altération permanente","type":"item","img":"icons/consumables/potions/potion-jar-corked-labeled-purple-pink.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>bonus permanent de +1 dans un attribut ; on ne peut bénéficier qu’une seule fois des effets de cet élixir</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"EvAWKqbqVmOAiJuy"}
|
||||||
|
{"name":"Perspicacité","type":"item","img":"icons/consumables/potions/bottle-conical-corked-labeled-shell-cyan.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>+1 en esprit ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"HzRud4Pt5prjxdOp"}
|
||||||
|
{"name":"Anti-Fièvre","type":"item","img":"icons/consumables/potions/bottle-ornate-bat-teal.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>2d6 heures d'effet, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"IwLxp7qwaVqFkXIT"}
|
||||||
|
{"name":"Illusion de la Jeunesse","type":"item","img":"icons/consumables/potions/flask-corked-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur retrouve l’apparence qu’il avait à 25 ans ; durée : une semaine ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"LgCquDfrRj68TpGD"}
|
||||||
|
{"name":"Résistance","type":"item","img":"icons/consumables/potions/potion-tube-corked-bat-gold-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>la peau du buveur devient aussi résistante qu’une armure, lui offrant d6 de protection ; durée : une scène ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"OPg1rCpWtrMEwdpi"}
|
||||||
|
{"name":"Régénération Suprême","type":"item","img":"icons/consumables/potions/bottle-corked-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>provoque la régénération d’un membre amputé, d’un œil perdu, etc., annulant le désavantage associé à ce handicap</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"PCGayeKrqCe5y8Yr"}
|
||||||
|
{"name":"Paralysant","type":"item","img":"icons/consumables/potions/potion-bottle-corked-fancy-orange.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur doit réussir un jet de vigueur avec votre rang d’alchimiste en malus ou se retrouver paralysé pour une durée de 24 heures ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"ROaHo4M8ry9J0no8"}
|
||||||
|
{"name":"Mort aux Rats","type":"item","img":"icons/consumables/potions/conical-mushroom-poison-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Tue les petits animaux nuisibles</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"RYq5MG3t3r1yFsKZ"}
|
||||||
|
{"name":"Philtre d’amour","type":"item","img":"icons/consumables/potions/round-cork-leaf-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur doit réussir un jet d’esprit avec votre rang d’alchimiste en malus ou tomber follement amoureux ; durée : une lune ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"RwLL4Ps54lMaUShO"}
|
||||||
|
{"name":"Poudre d’invisibilité","type":"item","img":"icons/consumables/potions/round-decorated-snake-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>rend invisible aux yeux d’autrui, à moins d’entreprendre une action qui attire l’attention ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"UBDnUINYuRk1MT67"}
|
||||||
|
{"name":"Antalgique","type":"item","img":"icons/consumables/potions/bottle-ornate-bat-teal.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>2d6 heures d'effet, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"1","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"UlDQi8b2L5nvdfar"}
|
||||||
|
{"name":"Sens Accrus","type":"item","img":"icons/consumables/potions/bottle-round-label-cork-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Un dé de bonus aux jets d’action pour détecter ou repérer quelque chose ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"aExkw1SAqQXQKfih"}
|
||||||
|
{"name":"Antidote contre les Venins Animaux et Poisons Végétaux","type":"item","img":"icons/consumables/potions/bottle-metal-yellow-gray.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>soigne l’ empoisonnement en 1 heure, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"cnOu9ysD1SLZ9s1d"}
|
||||||
|
{"name":"Répulsifs à Insecte","type":"item","img":"icons/consumables/potions/potion-tube-corked-orange.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>4d6 heures d’effet, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"1","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"dadXiS7LGF9hsQFd"}
|
||||||
|
{"name":"Antidote aux Poisons Alchimiques","type":"item","img":"icons/consumables/potions/bottle-bulb-corked-labeled-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Soigne l’ empoisonnement en 1 heure, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"g2dZBvSyW8fUdmvi"}
|
||||||
|
{"name":"Neutralisant d’acide","type":"item","img":"icons/consumables/potions/bottle-conical-corked-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>stoppe instantanément les effets d’une quantité équivalente d’acide ; 9 petites fioles</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"hSftVccCmrEhSYmc"}
|
||||||
|
{"name":"Teinture de respiration aquatique","type":"item","img":"icons/consumables/potions/potion-bottle-corked-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>permet au buveur de respirer sous l’eau pendant une demi-journée</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"iQnztmumTwpX8vbi"}
|
||||||
|
{"name":"Remède contre la Vérole","type":"item","img":"icons/consumables/potions/bottle-conical-corked-tied-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"j0GkKyweP9tQGybn"}
|
||||||
|
{"name":"Métamorphose","type":"item","img":"icons/consumables/potions/bottle-bulb-corked-glowing-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur prend l’apparence d’une autre personne, pour une durée d’une heure. Nécessite quelques cheveux, rognures d’ongles, ou gouttes de sang de la personne en question ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"lVVZdSHnxj7ISSoE"}
|
||||||
|
{"name":"Vivacité","type":"item","img":"icons/consumables/potions/bottle-round-label-cork-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>+1 en agilité ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"m1TrGH7Y71bcsWvC"}
|
||||||
|
{"name":"Panacée","type":"item","img":"icons/consumables/potions/flask-decorated-label-pink.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur est guéri de n’importe quelle maladie ; 2 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"pBxSv3oC7qVdWk82"}
|
||||||
|
{"name":"Héroïsme","type":"item","img":"icons/consumables/potions/flask-corked-yellow-glow.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur bénéficie d’un bonus de +1 à toutes ses aptitudes de combat ; durée : une scène ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"r4v0uPgUkeXiojMu"}
|
||||||
|
{"name":"Poudre de Phénix","type":"item","img":"icons/consumables/potions/potion-bottle-corked-labeled-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>une poudre qui brûle au contact, même sous l’ eau, en infligeant d6 x3 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"seLHMb7EGeX5skWd"}
|
||||||
|
{"name":"Précision","type":"item","img":"icons/consumables/potions/bottle-conical-corked-yellow.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>un dé de bonus aux jets d’attaque de tir ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"wxdS4VRUgiEZwteO"}
|
||||||
|
{"name":"Remède contre le Scorbut","type":"item","img":"icons/consumables/potions/bottle-conical-corked-tied-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"y84Et9OUilBgtqv6"}
|
||||||
|
{"name":"Encre Invisible","type":"item","img":"icons/commodities/materials/feather-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Réapparaît quand elle est mouillée ou chauffée</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"1","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"y9NHZCxKXMZEqcRo"}
|
0
packs/prepaalchimiques.db
Normal file
0
packs/prepaalchimiques.db
Normal file
26
system.json
26
system.json
@ -14,10 +14,10 @@
|
|||||||
"url": "https://www.uberwald.me/gitea/public/bol",
|
"url": "https://www.uberwald.me/gitea/public/bol",
|
||||||
"license": "LICENSE.txt",
|
"license": "LICENSE.txt",
|
||||||
"flags": {},
|
"flags": {},
|
||||||
"version": "1.4.0",
|
"version": "10.0.0",
|
||||||
"templateVersion": 10,
|
"templateVersion": 10,
|
||||||
"minimumCoreVersion": "0.8.6",
|
"minimumCoreVersion": "10",
|
||||||
"compatibleCoreVersion": "9",
|
"compatibleCoreVersion": "10",
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"esmodules": [
|
"esmodules": [
|
||||||
"module/bol.js"
|
"module/bol.js"
|
||||||
@ -154,6 +154,22 @@
|
|||||||
"system": "bol",
|
"system": "bol",
|
||||||
"private": false
|
"private": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"label": "Alchimie - Potions",
|
||||||
|
"type": "Item",
|
||||||
|
"name": "potions-alchimie",
|
||||||
|
"path": "packs/potions-alchimie.db",
|
||||||
|
"system": "bol",
|
||||||
|
"private": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Alchimie - Objets",
|
||||||
|
"type": "Item",
|
||||||
|
"name": "objets-alchimie",
|
||||||
|
"path": "packs/objets-alchimie.db",
|
||||||
|
"system": "bol",
|
||||||
|
"private": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"label": "Créatures",
|
"label": "Créatures",
|
||||||
"type": "Actor",
|
"type": "Actor",
|
||||||
@ -166,8 +182,8 @@
|
|||||||
"system": [],
|
"system": [],
|
||||||
"dependencies": [],
|
"dependencies": [],
|
||||||
"socket": true,
|
"socket": true,
|
||||||
"manifest": "https://www.uberwald.me/gitea/public/bol/raw/master/system.json",
|
"manifest": "https://www.uberwald.me/gitea/public/bol/raw/v10/system.json",
|
||||||
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v1.4.0.zip",
|
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.0.0.zip",
|
||||||
"protected": false,
|
"protected": false,
|
||||||
"background": "images/map_lemurie.webp",
|
"background": "images/map_lemurie.webp",
|
||||||
"gridDistance": 1.5,
|
"gridDistance": 1.5,
|
||||||
|
@ -137,7 +137,7 @@
|
|||||||
},
|
},
|
||||||
"character": {
|
"character": {
|
||||||
"templates": [ "base" ],
|
"templates": [ "base" ],
|
||||||
"type": "player",
|
"chartype": "player",
|
||||||
"villainy": false,
|
"villainy": false,
|
||||||
"bougette": {
|
"bougette": {
|
||||||
"state": "nomoney"
|
"state": "nomoney"
|
||||||
@ -157,7 +157,7 @@
|
|||||||
},
|
},
|
||||||
"encounter": {
|
"encounter": {
|
||||||
"templates": [ "base" ],
|
"templates": [ "base" ],
|
||||||
"type": "tough",
|
"chartype": "tough",
|
||||||
"villainy": false,
|
"villainy": false,
|
||||||
"size": "",
|
"size": "",
|
||||||
"environment": ""
|
"environment": ""
|
||||||
|
@ -12,14 +12,14 @@
|
|||||||
<li class="item flexrow" data-item-id="{{item._id}}">
|
<li class="item flexrow" data-item-id="{{item._id}}">
|
||||||
<div class="item-image" ><img src="{{item.img}}" title="{{item.name}}"/></div>
|
<div class="item-image" ><img src="{{item.img}}" title="{{item.name}}"/></div>
|
||||||
<h4 class="item-name flex2">{{#if ../weapon}}<a class="rollable" data-roll-type="weapon">{{/if}}{{item.name}}{{#if ../weapon}}</a>{{/if}}</h4>
|
<h4 class="item-name flex2">{{#if ../weapon}}<a class="rollable" data-roll-type="weapon">{{/if}}{{item.name}}{{#if ../weapon}}</a>{{/if}}</h4>
|
||||||
{{#if ../protection}}<div class="item-field"><a class="rollable" data-roll-type="protection">{{item.data.properties.soak.formula}}</a> / {{item.data.properties.soak.value}}</div>{{/if}}
|
{{#if ../protection}}<div class="item-field"><a class="rollable" data-roll-type="protection">{{item.system.properties.soak.formula}}</a> / {{item.system.properties.soak.value}}</div>{{/if}}
|
||||||
{{#if ../blocking}}<div class="item-field">{{item.data.properties.blocking.malus}}</div>{{/if}}
|
{{#if ../blocking}}<div class="item-field">{{item.system.properties.blocking.malus}}</div>{{/if}}
|
||||||
{{#if ../weapon}}<div class="item-field"><a class="rollable" data-roll-type="damage">
|
{{#if ../weapon}}<div class="item-field"><a class="rollable" data-roll-type="damage">
|
||||||
{{item.data.properties.damage}}+{{item.data.properties.damageModifiers}} x{{item.data.properties.damageMultiplier}}
|
{{item.system.properties.damage}}+{{item.system.properties.damageModifiers}}x{{item.system.properties.damageMultiplier}}
|
||||||
</a></div>{{/if}}
|
</a></div>{{/if}}
|
||||||
{{#if ../ranged}}<div class="item-field">{{item.data.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
{{#if ../ranged}}<div class="item-field">{{item.system.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||||
{{#if ../options}}<div class="item-field">
|
{{#if ../options}}<div class="item-field">
|
||||||
{{#if item.data.properties.activated}}
|
{{#if item.system.properties.activated}}
|
||||||
<a class="toggle-fight-option">{{localize "BOL.ui.toactivated"}}</a>
|
<a class="toggle-fight-option">{{localize "BOL.ui.toactivated"}}</a>
|
||||||
{{else}}
|
{{else}}
|
||||||
<a class="toggle-fight-option">{{localize "BOL.ui.todeactivated"}}</a>
|
<a class="toggle-fight-option">{{localize "BOL.ui.todeactivated"}}</a>
|
||||||
|
@ -1,29 +1,29 @@
|
|||||||
<ol class="items-list">
|
<ol class="items-list">
|
||||||
{{#if (ne data.type "creature")}}
|
{{#if (ne actor.type "creature")}}
|
||||||
<li class="item flexrow item-header">
|
<li class="item flexrow item-header">
|
||||||
<div class="item-name left">{{localize "BOL.ui.biosize"}}</div>
|
<div class="item-name left">{{localize "BOL.ui.biosize"}}</div>
|
||||||
<div class="item-field flex2 left"><input type="text" name="data.details.height" value="{{data.details.height}}"></div>
|
<div class="item-field flex2 left"><input type="text" name="system.details.height" value="{{details.height}}"></div>
|
||||||
<div class="item-name right">{{localize "BOL.ui.bioweight"}}</div>
|
<div class="item-name right">{{localize "BOL.ui.bioweight"}}</div>
|
||||||
<div class="item-field flex2 "><input type="text" name="data.details.weight" value="{{data.details.weight}}"></div>
|
<div class="item-field flex2 "><input type="text" name="system.details.weight" value="{{details.weight}}"></div>
|
||||||
<div class="item-name right">{{localize "BOL.ui.bioage"}} </div>
|
<div class="item-name right">{{localize "BOL.ui.bioage"}} </div>
|
||||||
<div class="item-field flex2 "><input type="text" name="data.details.age" value="{{data.details.age}}"></div>
|
<div class="item-field flex2 "><input type="text" name="system.details.age" value="{{details.age}}"></div>
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow item-header">
|
<li class="item flexrow item-header">
|
||||||
<div class="item-name left">{{localize "BOL.ui.biohair"}} </div>
|
<div class="item-name left">{{localize "BOL.ui.biohair"}} </div>
|
||||||
<div class="item-field flex2 left"><input type="text" name="data.details.hait" value="{{data.details.hait}}"></div>
|
<div class="item-field flex2 left"><input type="text" name="system.details.hait" value="{{details.hait}}"></div>
|
||||||
<div class="item-name right">{{localize "BOL.ui.bioeyes"}} </div>
|
<div class="item-name right">{{localize "BOL.ui.bioeyes"}} </div>
|
||||||
<div class="item-field flex2 "><input type="text" name="data.details.eyes" value="{{data.details.eyes}}"></div>
|
<div class="item-field flex2 "><input type="text" name="system.details.eyes" value="{{details.eyes}}"></div>
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow item-header">
|
<li class="item flexrow item-header">
|
||||||
<div class="item-name left">{{localize "BOL.ui.biosigns"}} </div>
|
<div class="item-name left">{{localize "BOL.ui.biosigns"}} </div>
|
||||||
<div class="item-field flex2 left"><input type="text" name="data.details.signs" value="{{data.details.signs}}"></div>
|
<div class="item-field flex2 left"><input type="text" name="system.details.signs" value="{{details.signs}}"></div>
|
||||||
</li>
|
</li>
|
||||||
{{else}}
|
{{else}}
|
||||||
<li class="item flexrow item-header">
|
<li class="item flexrow item-header">
|
||||||
<div class="item-name left">Taille </div>
|
<div class="item-name left">Taille </div>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<select class="field-value size" name="data.details.size" data-dtype="String">
|
<select class="field-value size" name="system.details.size" data-dtype="String">
|
||||||
{{#select data.details.size}}
|
{{#select details.size}}
|
||||||
{{#each config.creatureSize as |value id|}}
|
{{#each config.creatureSize as |value id|}}
|
||||||
<option value="{{id}}">{{localize value}}</option>
|
<option value="{{id}}">{{localize value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -40,7 +40,7 @@
|
|||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
{{editor content=data.details.biography target="data.details.biography" button=true owner=owner
|
{{editor details.biography target="system.details.biography" button=true owner=owner
|
||||||
editable=editable}}
|
editable=editable}}
|
||||||
|
|
||||||
<ol class="items-list">
|
<ol class="items-list">
|
||||||
@ -49,4 +49,4 @@ editable=editable}}
|
|||||||
<div class="item-field flex1 right"></div>
|
<div class="item-field flex1 right"></div>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
{{editor content=data.details.notes target="data.details.notes" button=true owner=owner editable=editable}}
|
{{editor details.notes target="system.details.notes" button=true owner=owner editable=editable}}
|
@ -21,10 +21,10 @@
|
|||||||
<li class="item flexrow" data-item-id="{{item._id}}">
|
<li class="item flexrow" data-item-id="{{item._id}}">
|
||||||
<div class="item-image {{#if ../weapon}}roll-weapon{{/if}}"><img src="{{item.img}}" title="{{item.name}}"/></div>
|
<div class="item-image {{#if ../weapon}}roll-weapon{{/if}}"><img src="{{item.img}}" title="{{item.name}}"/></div>
|
||||||
<h4 class="item-name flex2"><a class="item-edit">{{item.name}}</a></h4>
|
<h4 class="item-name flex2"><a class="item-edit">{{item.name}}</a></h4>
|
||||||
{{#if ../protection}}<div class="item-field">{{item.data.properties.soak.value}}</div>{{/if}}
|
{{#if ../protection}}<div class="item-field">{{item.system.properties.soak.value}}</div>{{/if}}
|
||||||
{{#if ../blocking}}<div class="item-field">{{item.data.properties.blocking.malus}}</div>{{/if}}
|
{{#if ../blocking}}<div class="item-field">{{item.system.properties.blocking.malus}}</div>{{/if}}
|
||||||
{{#if ../weapon}}<div class="item-field">{{item.data.properties.damage}}</div>{{/if}}
|
{{#if ../weapon}}<div class="item-field">{{item.system.properties.damage}}</div>{{/if}}
|
||||||
{{#if ../ranged}}<div class="item-field">{{item.data.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
{{#if ../ranged}}<div class="item-field">{{item.system.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ol>
|
</ol>
|
||||||
|
@ -12,8 +12,8 @@
|
|||||||
<div class="item-image"><img src="icons/containers/bags/coinpouch-simple-leather-brown.webp" title="{{localize "BOL.ui.money"}}" /></div>
|
<div class="item-image"><img src="icons/containers/bags/coinpouch-simple-leather-brown.webp" title="{{localize "BOL.ui.money"}}" /></div>
|
||||||
{{localize "BOL.ui.money"}}
|
{{localize "BOL.ui.money"}}
|
||||||
</h4>
|
</h4>
|
||||||
<select class="field-value" name="data.bougette.state" data-dtype="String">
|
<select class="field-value" name="system.bougette.state" data-dtype="String">
|
||||||
{{#select data.bougette.state}}
|
{{#select system.bougette.state}}
|
||||||
{{#each config.bougetteState as |value id|}}
|
{{#each config.bougetteState as |value id|}}
|
||||||
<option value="{{id}}">{{localize value}}</option>
|
<option value="{{id}}">{{localize value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -39,26 +39,26 @@
|
|||||||
<a class="item-edit">{{item.name}}</a>
|
<a class="item-edit">{{item.name}}</a>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="item-field flex2 center">
|
<div class="item-field flex2 center">
|
||||||
{{#if item.data.properties.equipable}}
|
{{#if item.system.properties.equipable}}
|
||||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field group-btns flex1 center">
|
<div class="item-field group-btns flex1 center">
|
||||||
{{#if item.data.properties.stackable}}
|
{{#if item.system.properties.stackable}}
|
||||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||||
<span class="item-field">{{item.data.quantity}}</span>
|
<span class="item-field">{{item.system.quantity}}</span>
|
||||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.price}}</span>
|
<span class="item-field">{{item.system.price}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
{{#if data.properties.equipable}}
|
{{#if system.properties.equipable}}
|
||||||
{{#if data.worn}}
|
{{#if system.worn}}
|
||||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||||
class="fas fa-shield-alt"></i></a></span>
|
class="fas fa-shield-alt"></i></a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
@ -92,32 +92,32 @@
|
|||||||
<a class="item-edit">{{item.name}}</a>
|
<a class="item-edit">{{item.name}}</a>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="item-field flex2 center">
|
<div class="item-field flex2 center">
|
||||||
{{#if item.data.properties.equipable}}
|
{{#if item.system.properties.equipable}}
|
||||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex2 center">
|
<div class="item-field flex2 center">
|
||||||
{{#if item.data.properties.equipable}}
|
{{#if item.system.properties.equipable}}
|
||||||
<span class="item-field"
|
<span class="item-field"
|
||||||
style="font-size: smaller; font-style: italic; color:#4b4a44">{{data.properties.soak.formula}}</span>
|
style="font-size: smaller; font-style: italic; color:#4b4a44">{{system.properties.soak.formula}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field group-btns flex1 center">
|
<div class="item-field group-btns flex1 center">
|
||||||
{{#if item.data.properties.stackable}}
|
{{#if item.system.properties.stackable}}
|
||||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||||
<span class="item-field">{{item.data.quantity}}</span>
|
<span class="item-field">{{item.system.quantity}}</span>
|
||||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.price}}</span>
|
<span class="item-field">{{item.system.price}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
{{#if data.properties.equipable}}
|
{{#if system.properties.equipable}}
|
||||||
{{#if data.worn}}
|
{{#if system.worn}}
|
||||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||||
class="fas fa-shield-alt"></i></a></span>
|
class="fas fa-shield-alt"></i></a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
@ -150,26 +150,26 @@
|
|||||||
<a class="item-edit">{{item.name}}</a>
|
<a class="item-edit">{{item.name}}</a>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="item-field flex2 center">
|
<div class="item-field flex2 center">
|
||||||
{{#if item.data.properties.equipable}}
|
{{#if item.system.properties.equipable}}
|
||||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field group-btns flex1 center">
|
<div class="item-field group-btns flex1 center">
|
||||||
{{#if item.data.properties.stackable}}
|
{{#if item.system.properties.stackable}}
|
||||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||||
<span class="item-field">{{item.data.quantity}}</span>
|
<span class="item-field">{{item.system.quantity}}</span>
|
||||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.price}}</span>
|
<span class="item-field">{{item.system.price}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
{{#if data.properties.equipable}}
|
{{#if system.properties.equipable}}
|
||||||
{{#if data.worn}}
|
{{#if system.worn}}
|
||||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||||
class="fas fa-shield-alt"></i></a></span>
|
class="fas fa-shield-alt"></i></a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
@ -202,26 +202,26 @@
|
|||||||
<a class="item-edit">{{item.name}}</a>
|
<a class="item-edit">{{item.name}}</a>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="item-field flex2 center">
|
<div class="item-field flex2 center">
|
||||||
{{#if item.data.properties.equipable}}
|
{{#if item.system.properties.equipable}}
|
||||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field group-btns flex1 center">
|
<div class="item-field group-btns flex1 center">
|
||||||
{{#if item.data.properties.stackable}}
|
{{#if item.system.properties.stackable}}
|
||||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="system-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||||
<span class="item-field">{{item.data.quantity}}</span>
|
<span class="item-field">{{item.system.quantity}}</span>
|
||||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.price}}</span>
|
<span class="item-field">{{item.system.price}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
{{#if data.properties.equipable}}
|
{{#if system.properties.equipable}}
|
||||||
{{#if data.worn}}
|
{{#if system.worn}}
|
||||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||||
class="fas fa-shield-alt"></i></a></span>
|
class="fas fa-shield-alt"></i></a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
@ -254,26 +254,26 @@
|
|||||||
<a class="item-edit">{{item.name}}</a>
|
<a class="item-edit">{{item.name}}</a>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="item-field flex2 center">
|
<div class="item-field flex2 center">
|
||||||
{{#if item.data.properties.equipable}}
|
{{#if item.system.properties.equipable}}
|
||||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field group-btns flex1 center">
|
<div class="item-field group-btns flex1 center">
|
||||||
{{#if item.data.properties.stackable}}
|
{{#if item.system.properties.stackable}}
|
||||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||||
<span class="item-field">{{item.data.quantity}}</span>
|
<span class="item-field">{{item.system.quantity}}</span>
|
||||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.price}}</span>
|
<span class="item-field">{{item.system.price}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
{{#if data.properties.equipable}}
|
{{#if system.properties.equipable}}
|
||||||
{{#if data.worn}}
|
{{#if system.worn}}
|
||||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||||
class="fas fa-shield-alt"></i></a></span>
|
class="fas fa-shield-alt"></i></a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
@ -306,26 +306,26 @@
|
|||||||
<a class="item-edit">{{item.name}}</a>
|
<a class="item-edit">{{item.name}}</a>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="item-field flex2 center">
|
<div class="item-field flex2 center">
|
||||||
{{#if item.data.properties.equipable}}
|
{{#if item.system.properties.equipable}}
|
||||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field group-btns flex1 center">
|
<div class="item-field group-btns flex1 center">
|
||||||
{{#if item.data.properties.stackable}}
|
{{#if item.system.properties.stackable}}
|
||||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||||
<span class="item-field">{{item.data.quantity}}</span>
|
<span class="item-field">{{item.system.quantity}}</span>
|
||||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.price}}</span>
|
<span class="item-field">{{item.system.price}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
{{#if data.properties.equipable}}
|
{{#if system.properties.equipable}}
|
||||||
{{#if data.worn}}
|
{{#if system.worn}}
|
||||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||||
class="fas fa-shield-alt"></i></a></span>
|
class="fas fa-shield-alt"></i></a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
@ -358,26 +358,26 @@
|
|||||||
<a class="item-edit">{{item.name}}</a>
|
<a class="item-edit">{{item.name}}</a>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="item-field flex2 center">
|
<div class="item-field flex2 center">
|
||||||
{{#if item.data.properties.equipable}}
|
{{#if item.system.properties.equipable}}
|
||||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field group-btns flex1 center">
|
<div class="item-field group-btns flex1 center">
|
||||||
{{#if item.data.properties.stackable}}
|
{{#if item.system.properties.stackable}}
|
||||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||||
<span class="item-field">{{item.data.quantity}}</span>
|
<span class="item-field">{{item.system.quantity}}</span>
|
||||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.price}}</span>
|
<span class="item-field">{{item.system.price}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
{{#if data.properties.equipable}}
|
{{#if system.properties.equipable}}
|
||||||
{{#if data.worn}}
|
{{#if system.worn}}
|
||||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||||
class="fas fa-shield-alt"></i></a></span>
|
class="fas fa-shield-alt"></i></a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
|
@ -16,18 +16,18 @@
|
|||||||
</h4>
|
</h4>
|
||||||
<div class="item-field group-btns center flex2">
|
<div class="item-field group-btns center flex2">
|
||||||
{{#if (equals key "careers")}}
|
{{#if (equals key "careers")}}
|
||||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.rank" data-incr="1" data-min="0" data-max="5"><i class="fas fa-minus-square"></i></a>
|
<a class="inc-dec-btns" data-operator="minus" data-target="system.rank" data-incr="1" data-min="0" data-max="5"><i class="fas fa-minus-square"></i></a>
|
||||||
<span class="item-field">{{item.data.rank}}</span>
|
<span class="item-field">{{item.system.rank}}</span>
|
||||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.rank" data-incr="1" data-min="0" data-max="5"><i class="fas fa-plus-square"></i></a>
|
<a class="inc-dec-btns" data-operator="plus" data-target="system.rank" data-incr="1" data-min="0" data-max="5"><i class="fas fa-plus-square"></i></a>
|
||||||
<span class="item-field"> </span>
|
<span class="item-field"> </span>
|
||||||
<span class="tooltip-container">
|
<span class="tooltip-container">
|
||||||
<span class="stat-roll rollable" title="XP" data-roll-type="careerxp" data-key="{{key}}">
|
<span class="stat-roll rollable" title="XP" data-roll-type="careerxp" data-key="{{key}}">
|
||||||
<i class="xp-next fas fa-arrow-up"></i></span>
|
<i class="xp-next fas fa-arrow-up"></i></span>
|
||||||
<span class="tooltiptext">
|
<span class="tooltiptext">
|
||||||
{{#if (eq data.rank 0)}}
|
{{#if (eq system.rank 0)}}
|
||||||
1 XP
|
1 XP
|
||||||
{{else}}
|
{{else}}
|
||||||
{{add data.rank 1}} XP
|
{{add system.rank 1}} XP
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
@ -14,10 +14,10 @@
|
|||||||
<a class="rollable" data-roll-type="spell">{{item.name}}</a>
|
<a class="rollable" data-roll-type="spell">{{item.name}}</a>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.properties.circle}}</span>
|
<span class="item-field">{{item.system.properties.circle}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.properties.difficulty}}</span>
|
<span class="item-field">{{item.system.properties.difficulty}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 right">
|
<div class="item-field flex1 right">
|
||||||
<a class="item-control item-edit" title="{{localize "BOL.ui.edit"}}"><i class="fas fa-square"></i></a>
|
<a class="item-control item-edit" title="{{localize "BOL.ui.edit"}}"><i class="fas fa-square"></i></a>
|
||||||
@ -44,13 +44,13 @@
|
|||||||
<a class="rollable" data-roll-type="alchemy">{{item.name}}</a>
|
<a class="rollable" data-roll-type="alchemy">{{item.name}}</a>
|
||||||
</h4>
|
</h4>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{localize (concat "BOL.alchemyItem." item.data.properties.alchemytype)}}</span>
|
<span class="item-field">{{localize (concat "BOL.alchemyItem." item.system.properties.alchemytype)}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.properties.difficulty}}</span>
|
<span class="item-field">{{item.system.properties.difficulty}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<span class="item-field">{{item.data.properties.pccurrent}} / {{item.data.properties.pccost}}</span>
|
<span class="item-field">{{item.system.properties.pccurrent}} / {{item.system.properties.pccost}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-field flex1 center">
|
<div class="item-field flex1 center">
|
||||||
<a class="inc-dec-btns-alchemy"><i class="fas fa-plus-square"></i></a>
|
<a class="inc-dec-btns-alchemy"><i class="fas fa-plus-square"></i></a>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<div class="attributes flexrow">
|
<div class="attributes flexrow">
|
||||||
{{#each data.attributes as |attribute id|}}
|
{{#each attributes as |attribute id|}}
|
||||||
<div class="attribute stat flex1 flex-group-center {{key}}">
|
<div class="attribute stat flex1 flex-group-center {{key}}">
|
||||||
<label class="stat-label"><a class="rollable" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">{{localize label}}</a></label><br/>
|
<label class="stat-label"><a class="rollable" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">{{localize label}}</a></label><br/>
|
||||||
<input class="stat-value rounded" type="text" name="data.attributes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
<input class="stat-value rounded" type="text" name="system.attributes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||||
<span class="stat-roll rollable" title="2d6" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">
|
<span class="stat-roll rollable" title="2d6" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">
|
||||||
<i class="darkgreen fas fa-dice"></i>
|
<i class="darkgreen fas fa-dice"></i>
|
||||||
</span>
|
</span>
|
||||||
@ -22,10 +22,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<hr/>
|
<hr/>
|
||||||
<div class="aptitudes flexrow">
|
<div class="aptitudes flexrow">
|
||||||
{{#each data.aptitudes as |aptitude id|}}
|
{{#each aptitudes as |aptitude id|}}
|
||||||
<div class="aptitude stat flex1 flex-group-center">
|
<div class="aptitude stat flex1 flex-group-center">
|
||||||
<label class="stat-label"><a class="rollable" data-roll-type="aptitude" data-roll="2d6+@aptitudes.{{key}}.value" data-adv="0" data-key="{{key}}">{{localize label}}</a></label><br/>
|
<label class="stat-label"><a class="rollable" data-roll-type="aptitude" data-roll="2d6+@aptitudes.{{key}}.value" data-adv="0" data-key="{{key}}">{{localize label}}</a></label><br/>
|
||||||
<input class="stat-value rounded-border" type="text" name="data.aptitudes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
<input class="stat-value rounded-border" type="text" name="system.aptitudes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||||
<span class="stat-roll rollable" title="2d6" data-roll-type="aptitude" data-roll="2d6+@aptitudes.{{key}}.value" data-adv="0" data-key="{{key}}">
|
<span class="stat-roll rollable" title="2d6" data-roll-type="aptitude" data-roll="2d6+@aptitudes.{{key}}.value" data-adv="0" data-key="{{key}}">
|
||||||
<i class="darkgreen fas fa-dice"></i>
|
<i class="darkgreen fas fa-dice"></i>
|
||||||
</span>
|
</span>
|
||||||
@ -50,29 +50,29 @@
|
|||||||
{{#if @root.isAlchemist}}
|
{{#if @root.isAlchemist}}
|
||||||
<div class="resource stat flex1 flex-group-center">
|
<div class="resource stat flex1 flex-group-center">
|
||||||
<label class="stat-label">{{localize label}}</label><br/>
|
<label class="stat-label">{{localize label}}</label><br/>
|
||||||
<input class="stat-value resources-value" type="text" name="data.resources.{{key}}.value" value="{{numberFormat value decimals=0 sign=false}}" data-dtype="Number"/>
|
<input class="stat-value resources-value" type="text" name="system.resources.{{key}}.value" value="{{numberFormat value decimals=0 sign=false}}" data-dtype="Number"/>
|
||||||
{{#if (eq @root.data.type 'player')}}
|
{{#if (eq @root.chartype 'player')}}
|
||||||
{{#if (exists bonus)}}
|
{{#if (exists bonus)}}
|
||||||
<span class="flexrow"><label class="stat-max bonus-text">Bonus</label><input class="resource-bonus resources-value" type="text" name="data.resources.{{key}}.bonus" value="{{numberFormat bonus decimals=0 sign=false}}" data-dtype="Number"/></span>
|
<span class="flexrow"><label class="stat-max bonus-text">Bonus</label><input class="resource-bonus resources-value" type="text" name="system.resources.{{key}}.bonus" value="{{numberFormat bonus decimals=0 sign=false}}" data-dtype="Number"/></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
<span class="flexrow"><label class="stat-max resources-value"> </label><input class="resource-bonus resources-novalue" type="text" value="" disabled></span>
|
<span class="flexrow"><label class="stat-max resources-value"> </label><input class="resource-bonus resources-novalue" type="text" value="" disabled></span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<input class="resources-value" type="text" name="data.resources.{{key}}.max" value="{{numberFormat max decimals=0 sign=false}}" data-dtype="Number"/>
|
<input class="resources-value" type="text" name="system.resources.{{key}}.max" value="{{numberFormat max decimals=0 sign=false}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<div class="resource stat flex1 flex-group-center">
|
<div class="resource stat flex1 flex-group-center">
|
||||||
<label class="stat-label">{{localize label}}</label><br/>
|
<label class="stat-label">{{localize label}}</label><br/>
|
||||||
<input class="stat-value resources-value" type="text" name="data.resources.{{key}}.value" value="{{numberFormat value decimals=0 sign=false}}" data-dtype="Number"/>
|
<input class="stat-value resources-value" type="text" name="system.resources.{{key}}.value" value="{{numberFormat value decimals=0 sign=false}}" data-dtype="Number"/>
|
||||||
{{#if (eq @root.data.type 'player')}}
|
{{#if (eq @root.chartype 'player')}}
|
||||||
{{#if (exists bonus)}}
|
{{#if (exists bonus)}}
|
||||||
<span class="flexrow"><label class="stat-max bonus-text">Bonus</label><input class="resource-bonus resources-value" type="text" name="data.resources.{{key}}.bonus" value="{{numberFormat bonus decimals=0 sign=false}}" data-dtype="Number"/></span>
|
<span class="flexrow"><label class="stat-max bonus-text">Bonus</label><input class="resource-bonus resources-value" type="text" name="system.resources.{{key}}.bonus" value="{{numberFormat bonus decimals=0 sign=false}}" data-dtype="Number"/></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
<span class="flexrow"><label class="stat-max"> </label><input class="resource-bonus resources-novalue" type="text" value="" disabled></span>
|
<span class="flexrow"><label class="stat-max"> </label><input class="resource-bonus resources-novalue" type="text" value="" disabled></span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<input class="resources-value" type="text" name="data.resources.{{key}}.max" value="{{numberFormat max decimals=0 sign=false}}" data-dtype="Number"/>
|
<input class="resources-value" type="text" name="system.resources.{{key}}.max" value="{{numberFormat max decimals=0 sign=false}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
@ -12,12 +12,12 @@
|
|||||||
<li class="item flexrow" data-item-id="{{item._id}}">
|
<li class="item flexrow" data-item-id="{{item._id}}">
|
||||||
<div class="item-image" ><img src="{{item.img}}" title="{{item.name}}"/></div>
|
<div class="item-image" ><img src="{{item.img}}" title="{{item.name}}"/></div>
|
||||||
<h4 class="item-name flex2">{{#if ../weapon}}<a class="rollable" data-roll-type="weapon">{{/if}}{{item.name}}{{#if ../weapon}}</a>{{/if}}</h4>
|
<h4 class="item-name flex2">{{#if ../weapon}}<a class="rollable" data-roll-type="weapon">{{/if}}{{item.name}}{{#if ../weapon}}</a>{{/if}}</h4>
|
||||||
{{#if ../protection}}<div class="item-field"><a class="rollable" data-roll-type="protection">{{item.data.properties.soak.formula}}</a> / {{item.data.properties.soak.value}}</div>{{/if}}
|
{{#if ../protection}}<div class="item-field"><a class="rollable" data-roll-type="protection">{{item.system.properties.soak.formula}}</a> / {{item.system.properties.soak.value}}</div>{{/if}}
|
||||||
{{#if ../blocking}}<div class="item-field">{{item.data.properties.blocking.malus}}</div>{{/if}}
|
{{#if ../blocking}}<div class="item-field">{{item.system.properties.blocking.malus}}</div>{{/if}}
|
||||||
{{#if ../weapon}}<div class="item-field"><a class="rollable" data-roll-type="damage">{{item.data.properties.damage}}+{{item.data.properties.damageModifiers}} x{{item.data.properties.damageMultiplier}}</a></div>{{/if}}
|
{{#if ../weapon}}<div class="item-field"><a class="rollable" data-roll-type="damage">{{item.system.properties.damage}}+{{item.system.properties.damageModifiers}} x{{item.system.properties.damageMultiplier}}</a></div>{{/if}}
|
||||||
{{#if ../ranged}}<div class="item-field">{{item.data.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
{{#if ../ranged}}<div class="item-field">{{item.system.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||||
{{#if ../options}}<div class="item-field">
|
{{#if ../options}}<div class="item-field">
|
||||||
{{#if item.data.properties.activated}}
|
{{#if item.system.properties.activated}}
|
||||||
<a class="toggle-fight-option">{{localize "BOL.ui.toactivated"}}</a>
|
<a class="toggle-fight-option">{{localize "BOL.ui.toactivated"}}</a>
|
||||||
{{else}}
|
{{else}}
|
||||||
<a class="toggle-fight-option">{{localize "BOL.ui.todeactivated"}}</a>
|
<a class="toggle-fight-option">{{localize "BOL.ui.todeactivated"}}</a>
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<div class="attributes flexrow">
|
<div class="attributes flexrow">
|
||||||
{{#each data.attributes as |attribute id|}}
|
{{#each attributes as |attribute id|}}
|
||||||
{{#if (ne id "appeal")}}
|
{{#if (ne id "appeal")}}
|
||||||
<div class="attribute stat flex1 flex-group-center {{key}}">
|
<div class="attribute stat flex1 flex-group-center {{key}}">
|
||||||
<label class="stat-label"><a class="rollable" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">{{localize label}}</a></label><br/>
|
<label class="stat-label"><a class="rollable" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">{{localize label}}</a></label><br/>
|
||||||
<input class="stat-value rounded" type="text" name="data.attributes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
<input class="stat-value rounded" type="text" name="system.attributes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||||
<span class="stat-roll rollable" title="2d6" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">
|
<span class="stat-roll rollable" title="2d6" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">
|
||||||
<i class="darkgreen fas fa-dice"></i>
|
<i class="darkgreen fas fa-dice"></i>
|
||||||
</span>
|
</span>
|
||||||
@ -15,7 +15,7 @@
|
|||||||
<div class="aptitudes flexrow">
|
<div class="aptitudes flexrow">
|
||||||
<div class="aptitude stat flex1 flex-group-center">
|
<div class="aptitude stat flex1 flex-group-center">
|
||||||
<div class="stat-label"><a class="rollable" data-roll-type="aptitude" data-roll="2d6+@aptitudes.def.value" data-adv="0" data-key="def">{{localize "BOL.aptitudes.def"}}</a></label><br/>
|
<div class="stat-label"><a class="rollable" data-roll-type="aptitude" data-roll="2d6+@aptitudes.def.value" data-adv="0" data-key="def">{{localize "BOL.aptitudes.def"}}</a></label><br/>
|
||||||
<input class="stat-value rounded-border" type="text" name="data.aptitudes.def.value" value="{{numberFormat aptitudes.3.value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
<input class="stat-value rounded-border" type="text" name="system.aptitudes.def.value" value="{{numberFormat aptitudes.3.value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||||
<span class="stat-roll rollable" title="2d6" data-roll-type="aptitude" data-roll="2d6+@aptitudes.def.value" data-adv="0" data-key="def">
|
<span class="stat-roll rollable" title="2d6" data-roll-type="aptitude" data-roll="2d6+@aptitudes.def.value" data-adv="0" data-key="def">
|
||||||
<i class="darkgreen fas fa-dice"></i>
|
<i class="darkgreen fas fa-dice"></i>
|
||||||
</span>
|
</span>
|
||||||
@ -26,7 +26,7 @@
|
|||||||
<div class="resources flexrow">
|
<div class="resources flexrow">
|
||||||
<div class="resource stat flex1 flex-group-center">
|
<div class="resource stat flex1 flex-group-center">
|
||||||
<label class="stat-label">{{localize "BOL.resources.hp"}}</label><br/>
|
<label class="stat-label">{{localize "BOL.resources.hp"}}</label><br/>
|
||||||
<input class="stat-value" type="text" name="data.resources.hp.value" value="{{numberFormat resources.hp.value decimals=0 sign=false}}" data-dtype="Number"/>
|
<input class="stat-value" type="text" name="system.resources.hp.value" value="{{numberFormat resources.hp.value decimals=0 sign=false}}" data-dtype="Number"/>
|
||||||
<input class="stat-max" type="text" name="data.resources.hp.max" value="{{numberFormat resources.hp.max decimals=0 sign=false}}" data-dtype="Number"/>
|
<input class="stat-max" type="text" name="system.resources.hp.max" value="{{numberFormat resources.hp.max decimals=0 sign=false}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<button class="damage-handling" data-defense-mode="damage-with-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.witharmor"}}</button>
|
<button class="damage-handling" data-defense-mode="damage-with-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.witharmor"}}</button>
|
||||||
<button class="damage-handling" data-defense-mode="damage-without-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.withoutarmor"}}</button>
|
<button class="damage-handling" data-defense-mode="damage-without-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.withoutarmor"}}</button>
|
||||||
|
|
||||||
{{#if defender.data.data.resources.hero.value}}
|
{{#if defender.system.resources.hero.value}}
|
||||||
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">{{localize "BOL.chat.shakeoff"}}</button>
|
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">{{localize "BOL.chat.shakeoff"}}</button>
|
||||||
|
|
||||||
{{#each defenderWeapons as |weapon idx|}}
|
{{#each defenderWeapons as |weapon idx|}}
|
||||||
|
11
templates/chat/rolls/defense-summary-card.hbs
Normal file
11
templates/chat/rolls/defense-summary-card.hbs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<img class="chat-icon" src="{{defender.img}}" alt="{{defender.name}}"/>
|
||||||
|
<h3>{{localize "BOL.chat.damagesummary" name=name}}</h3>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
{{#if (eq finalDamage 0)}}
|
||||||
|
{{localize "BOL.chat.nodamagesummary"}}
|
||||||
|
{{else}}
|
||||||
|
{{localize "BOL.chat.damageresume" name=name}}
|
||||||
|
{{/if}}
|
||||||
|
</li>
|
||||||
|
</ul>
|
@ -1,4 +1,4 @@
|
|||||||
<h4><strong>{{localize "BOL.chat.spell"}} : {{spell.name}}</strong></h4>
|
<h4><strong>{{localize "BOL.chat.spell"}} : {{spell.name}}</strong></h4>
|
||||||
<h4><strong>{{localize "BOL.chat.spellcost"}} : {{ppCost}}</strong></h4>
|
<h4><strong>{{localize "BOL.chat.spellcost"}} : {{ppCost}}</strong></h4>
|
||||||
<h4><strong>{{localize "BOL.chat.spellremaining"}} : {{sub ppCurrent ppCost}}</strong></h4>
|
<h4><strong>{{localize "BOL.chat.spellremaining"}} : {{remainingPP}}</strong></h4>
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<div class="flex1 center cell">
|
<div class="flex1 center cell">
|
||||||
<select class="flex1" name="career" id="career" data-type="String" multiple>
|
<select class="flex1" name="career" id="career" data-type="String" multiple>
|
||||||
{{#each careers as | career id|}}
|
{{#each careers as | career id|}}
|
||||||
<option value="{{career.data.rank}}">{{career.name}} ({{numberFormat career.data.rank decimals=0 sign=true}})</option>
|
<option value="{{career.system.rank}}">{{career.name}} ({{numberFormat career.system.rank decimals=0 sign=true}})</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<div class="flex1 center bg-darkred">
|
<div class="flex1 center bg-darkred">
|
||||||
<label for="mod">{{localize 'BOL.ui.attackValue'}}</label>
|
<label for="mod">{{localize 'BOL.ui.attackValue'}}</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex1 center cell">{{weapon.data.data.properties.attackModifiers}}</div>
|
<div class="flex1 center cell">{{weapon.system.properties.attackModifiers}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flexrow roll-box" >
|
<div class="flexrow roll-box" >
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
|
{{editor item.system.description target="system.description" button=true owner=owner editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
<div class="tab properties" data-group="primary" data-tab="properties">
|
<div class="tab properties" data-group="primary" data-tab="properties">
|
||||||
{{#if (eq item.type "item")}}
|
{{#if (eq item.type "item")}}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.subtype"}}</label>
|
<label class="property-label">{{localize "BOL.ui.subtype"}}</label>
|
||||||
<select name="data.subtype" value="{{data.subtype}}" data-dtype="String">
|
<select name="system.subtype" value="{{item.system.subtype}}" data-dtype="String">
|
||||||
{{#select data.subtype}}
|
{{#select item.system.subtype}}
|
||||||
{{#each config.featureSubtypes as |item id|}}
|
{{#each config.featureSubtypes as |item id|}}
|
||||||
<option value="{{id}}">{{localize item}}</option>
|
<option value="{{id}}">{{localize item}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -9,18 +9,18 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#if (equals data.subtype "career")}}
|
{{#if (equals item.system.subtype "career")}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/feature/career-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/feature/career-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if (equals data.subtype "fightoption")}}
|
{{#if (equals item.system.subtype "fightoption")}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/feature/fightoption-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/feature/fightoption-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{!#if (equals data.subtype "race")}}
|
{{!#if (equals data.subtype "race")}}
|
||||||
{{!> "systems/bol/templates/item/parts/properties/feature/race-properties.hbs"}}
|
{{!> "systems/bol/templates/item/parts/properties/feature/race-properties.hbs"}}
|
||||||
{{!/if}}
|
{{!/if}}
|
||||||
{{#if (equals data.subtype "boon")}}
|
{{#if (equals item.system.subtype "boon")}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/feature/boon-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/feature/boon-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if (equals data.subtype "flaw")}}
|
{{#if (equals item.system.subtype "flaw")}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/feature/flaw-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/feature/flaw-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<h3 class="form-header">{{localize 'BOL.featureSubtypes.boon'}}</h3>
|
<h3 class="form-header">{{localize 'BOL.featureSubtypes.boon'}}</h3>
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.isbonusdice"}}</label>
|
<label class="property-label">{{localize "BOL.ui.isbonusdice"}}</label>
|
||||||
<input class="field-value" type="checkbox" name="data.properties.isbonusdice" {{checked data.properties.isbonusdice}}>
|
<input class="field-value" type="checkbox" name="system.properties.isbonusdice" {{checked item.system.properties.isbonusdice}}>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
<h3 class="form-header">{{localize 'BOL.featureSubtypes.career'}}</h3>
|
<h3 class="form-header">{{localize 'BOL.featureSubtypes.career'}}</h3>
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.rank"}}</label>
|
<label class="property-label">{{localize "BOL.ui.rank"}}</label>
|
||||||
<input type="text" name="data.rank" value="{{data.rank}}" data-dtype="Number"/>
|
<input type="text" name="system.rank" value="{{item.system.rank}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.isSorcerer"}}</label>
|
<label class="property-label">{{localize "BOL.ui.isSorcerer"}}</label>
|
||||||
<input class="field-value" type="checkbox" name="data.properties.sorcerer" {{checked data.properties.sorcerer}}>
|
<input class="field-value" type="checkbox" name="system.properties.sorcerer" {{checked item.system.properties.sorcerer}}>
|
||||||
</div>
|
</div>
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.isAlchemist"}}</label>
|
<label class="property-label">{{localize "BOL.ui.isAlchemist"}}</label>
|
||||||
<input class="field-value" type="checkbox" name="data.properties.alchemist" {{checked data.properties.alchemist}}>
|
<input class="field-value" type="checkbox" name="system.properties.alchemist" {{checked item.system.properties.alchemist}}>
|
||||||
</div>
|
</div>
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.isPriest"}}</label>
|
<label class="property-label">{{localize "BOL.ui.isPriest"}}</label>
|
||||||
<input class="field-value" type="checkbox" name="data.properties.priest" {{checked data.properties.priest}}>
|
<input class="field-value" type="checkbox" name="system.properties.priest" {{checked item.system.properties.priest}}>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.ui.fightOptionType"}}</label>
|
<label class="property-label">{{localize "BOL.ui.fightOptionType"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<select name="data.properties.fightoptiontype" data-dtype="String">
|
<select name="system.properties.fightoptiontype" data-dtype="String">
|
||||||
{{#select data.properties.fightoptiontype}}
|
{{#select item.system.properties.fightoptiontype}}
|
||||||
{{#each config.fightOptionTypes as |item id|}}
|
{{#each config.fightOptionTypes as |item id|}}
|
||||||
<option value="{{id}}">{{localize item}}</option>
|
<option value="{{id}}">{{localize item}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -14,6 +14,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.activated"}}</label>
|
<label class="property-label">{{localize "BOL.ui.activated"}}</label>
|
||||||
<input class="field-value" type="checkbox" name="data.properties.activated" {{checked data.properties.activated}}>
|
<input class="field-value" type="checkbox" name="system.properties.activated" {{checked item.system.properties.activated}}>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<h3 class="form-header">{{localize 'BOL.featureSubtypes.flaw'}}</h3>
|
<h3 class="form-header">{{localize 'BOL.featureSubtypes.flaw'}}</h3>
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.ismalusdice"}}</label>
|
<label class="property-label">{{localize "BOL.ui.ismalusdice"}}</label>
|
||||||
<input class="field-value" type="checkbox" name="data.properties.ismalusdice" {{checked data.properties.ismalusdice}}>
|
<input class="field-value" type="checkbox" name="system.properties.ismalusdice" {{checked item.system.properties.ismalusdice}}>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.ui.category"}}</label>
|
<label class="property-label">{{localize "BOL.ui.category"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<select class="field-value" name="data.category" value="{{data.category}}" data-dtype="String">
|
<select class="field-value" name="system.category" value="{{item.system.category}}" data-dtype="String">
|
||||||
{{#select data.category}}
|
{{#select item.system.category}}
|
||||||
{{#each config.itemCategories as |item id|}}
|
{{#each config.itemCategories as |item id|}}
|
||||||
<option value="{{id}}">{{localize item}}</option>
|
<option value="{{id}}">{{localize item}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -11,18 +11,18 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#if (eq data.category "equipment")}}
|
{{#if (eq item.system.category "equipment")}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/equipment-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/equipment-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if (eq data.category "capacity")}}
|
{{#if (eq item.system.category "capacity")}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/capacity-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/capacity-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if (eq data.category "vehicle")}}
|
{{#if (eq item.system.category "vehicle")}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/vehicle-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/vehicle-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if (eq data.category "spell")}}
|
{{#if (eq item.system.category "spell")}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/spell-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/spell-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if (eq data.category "alchemy")}}
|
{{#if (eq item.system.category "alchemy")}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/alchemy-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/alchemy-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.alchemyType"}}</label>
|
<label class="property-label">{{localize "BOL.ui.alchemyType"}}</label>
|
||||||
<select class="field-value" name="data.properties.alchemytype" data-dtype="String">
|
<select class="field-value" name="system.properties.alchemytype" data-dtype="String">
|
||||||
{{#select data.properties.alchemytype}}
|
{{#select item.system.properties.alchemytype}}
|
||||||
{{#each config.alchemyType as |value id|}}
|
{{#each config.alchemyType as |value id|}}
|
||||||
<option value="{{id}}">{{localize value}}</option>
|
<option value="{{id}}">{{localize value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -13,8 +13,8 @@
|
|||||||
|
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.difficulty"}}</label>
|
<label class="property-label">{{localize "BOL.ui.difficulty"}}</label>
|
||||||
<select name="data.properties.difficulty" value="{{data.properties.difficulty}}">
|
<select name="system.properties.difficulty" value="{{item.system.properties.difficulty}}">
|
||||||
{{#select data.properties.difficulty}}
|
{{#select item.system.properties.difficulty}}
|
||||||
<option value="2">{{localize "BOL.dialog.veryeasy"}}</option>
|
<option value="2">{{localize "BOL.dialog.veryeasy"}}</option>
|
||||||
<option value="1">{{localize "BOL.dialog.easy"}}</option>
|
<option value="1">{{localize "BOL.dialog.easy"}}</option>
|
||||||
<option value="0">{{localize "BOL.dialog.moderate"}}</option>
|
<option value="0">{{localize "BOL.dialog.moderate"}}</option>
|
||||||
@ -29,11 +29,11 @@
|
|||||||
|
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.pccost"}}</label>
|
<label class="property-label">{{localize "BOL.ui.pccost"}}</label>
|
||||||
<input class="field-value" type="text" name="data.properties.pccost" value="{{data.properties.pccost}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.pccost" value="{{item.system.properties.pccost}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.pcnow"}}</label>
|
<label class="property-label">{{localize "BOL.ui.pcnow"}}</label>
|
||||||
<input class="field-value" type="text" name="data.properties.pccurrent" value="{{data.properties.pccurrent}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.pccurrent" value="{{item.system.properties.pccurrent}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -3,23 +3,23 @@
|
|||||||
<label class="property-label">{{localize "BOL.ui.type"}}</label>
|
<label class="property-label">{{localize "BOL.ui.type"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.weapon" {{checked data.properties.weapon}}> {{localize "BOL.itemProperty.weapon"}}
|
<input class="field-value" type="checkbox" name="system.properties.weapon" {{checked item.system.properties.weapon}}> {{localize "BOL.itemProperty.weapon"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.protection" {{checked data.properties.protection}}> {{localize "BOL.itemProperty.protection"}}
|
<input class="field-value" type="checkbox" name="system.properties.protection" {{checked item.system.properties.protection}}> {{localize "BOL.itemProperty.protection"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.magical" {{checked data.properties.magical}}> {{localize "BOL.itemProperty.magical"}}
|
<input class="field-value" type="checkbox" name="system.properties.magical" {{checked item.system.properties.magical}}> {{localize "BOL.itemProperty.magical"}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#if data.properties.weapon}}
|
{{#if item.system.properties.weapon}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/weapon-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/weapon-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if data.properties.protection}}
|
{{#if item.system.properties.protection}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/protection-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/protection-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if data.properties.magical}}
|
{{#if item.system.properties.magical}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/magical-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/magical-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.ui.subtype"}}</label>
|
<label class="property-label">{{localize "BOL.ui.subtype"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<select name="data.subtype" data-dtype="String">
|
<select name="system.subtype" data-dtype="String">
|
||||||
{{#select data.subtype}}
|
{{#select item.system.subtype}}
|
||||||
{{#each config.itemSubtypes as |item id|}}
|
{{#each config.itemSubtypes as |item id|}}
|
||||||
<option value="{{id}}">{{localize item}}</option>
|
<option value="{{id}}">{{localize item}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -17,13 +17,13 @@
|
|||||||
<label class="property-label">{{localize "BOL.ui.capacities"}}</label>
|
<label class="property-label">{{localize "BOL.ui.capacities"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.weapon" {{checked data.properties.weapon}}> {{localize "BOL.itemProperty.weapon"}}
|
<input class="field-value" type="checkbox" name="system.properties.weapon" {{checked item.system.properties.weapon}}> {{localize "BOL.itemProperty.weapon"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.protection" {{checked data.properties.protection}}> {{localize "BOL.itemProperty.protection"}}
|
<input class="field-value" type="checkbox" name="system.properties.protection" {{checked item.system.properties.protection}}> {{localize "BOL.itemProperty.protection"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.magical" {{checked data.properties.magical}}> {{localize "BOL.itemProperty.magical"}}
|
<input class="field-value" type="checkbox" name="system.properties.magical" {{checked item.system.properties.magical}}> {{localize "BOL.itemProperty.magical"}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -32,31 +32,31 @@
|
|||||||
<label class="property-label">{{localize "BOL.ui.properties"}}</label>
|
<label class="property-label">{{localize "BOL.ui.properties"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.equipable" {{checked data.properties.equipable}}> {{localize "BOL.itemProperty.equipable"}}
|
<input class="field-value" type="checkbox" name="system.properties.equipable" {{checked item.system.properties.equipable}}> {{localize "BOL.itemProperty.equipable"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.stackable" {{checked data.properties.stackable}}> {{localize "BOL.itemProperty.stackable"}}
|
<input class="field-value" type="checkbox" name="system.properties.stackable" {{checked item.system.properties.stackable}}> {{localize "BOL.itemProperty.stackable"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.consumable" {{checked data.properties.consumable}}> {{localize "BOL.itemProperty.consumable"}}
|
<input class="field-value" type="checkbox" name="system.properties.consumable" {{checked item.system.properties.consumable}}> {{localize "BOL.itemProperty.consumable"}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr/>
|
<hr/>
|
||||||
{{#if data.properties.equipable}}
|
{{#if item.system.properties.equipable}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>{{localize "BOL.itemProperty.worn"}}</label>
|
<label>{{localize "BOL.itemProperty.worn"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.worn" {{checked data.worn}}> {{localize "BOL.itemProperty.worn"}}
|
<input class="field-value" type="checkbox" name="system.worn" {{checked item.system.worn}}> {{localize "BOL.itemProperty.worn"}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>{{localize "BOL.itemProperty.slot"}}</label>
|
<label>{{localize "BOL.itemProperty.slot"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<select class="field-value" name="data.properties.slot" data-dtype="String">
|
<select class="field-value" name="system.properties.slot" data-dtype="String">
|
||||||
{{#select data.properties.slot}}
|
{{#select item.system.properties.slot}}
|
||||||
{{#each config.equipmentSlots as |value id|}}
|
{{#each config.equipmentSlots as |value id|}}
|
||||||
<option value="{{id}}">{{localize value}}</option>
|
<option value="{{id}}">{{localize value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -66,41 +66,35 @@
|
|||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if data.properties.stackable}}
|
{{#if item.system.properties.stackable}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.ui.quantity"}}</label>
|
<label class="property-label">{{localize "BOL.ui.quantity"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.quantity" value="{{data.quantity}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.quantity" value="{{item.system.quantity}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.ui.stacksize"}}</label>
|
<label class="property-label">{{localize "BOL.ui.stacksize"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.properties.stacksize" value="{{data.properties.stacksize}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.stacksize" value="{{item.system.properties.stacksize}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<!--<div class="form-group">-->
|
|
||||||
<!-- <label class="property-label">{{!localize "BOL.ui.weight"}}</label>-->
|
|
||||||
<!-- <div class="form-fields">-->
|
|
||||||
<!-- <input class="field-value" type="text" name="data.weight" value="{{!data.weight}}" data-dtype="Number"/>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!--</div>-->
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.ui.price"}}</label>
|
<label class="property-label">{{localize "BOL.ui.price"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.price" value="{{data.price}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.price" value="{{item.system.price}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
{{#if data.properties.weapon}}
|
{{#if item.system.properties.weapon}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/weapon-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/weapon-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if data.properties.protection}}
|
{{#if item.system.properties.protection}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/protection-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/protection-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if data.properties.magical}}
|
{{#if item.system.properties.magical}}
|
||||||
{{> "systems/bol/templates/item/parts/properties/item/magical-properties.hbs"}}
|
{{> "systems/bol/templates/item/parts/properties/item/magical-properties.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
@ -3,31 +3,24 @@
|
|||||||
<label>{{localize "BOL.ui.subtype"}}</label>
|
<label>{{localize "BOL.ui.subtype"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.armor" {{checked data.properties.armor}}> {{localize "BOL.itemProperty.armor"}}
|
<input class="field-value" type="checkbox" name="system.properties.armor" {{checked item.system.properties.armor}}> {{localize "BOL.itemProperty.armor"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.shield" {{checked data.properties.shield}}> {{localize "BOL.itemProperty.shield"}}
|
<input class="field-value" type="checkbox" name="system.properties.shield" {{checked item.system.properties.shield}}> {{localize "BOL.itemProperty.shield"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.helm" {{checked data.properties.helm}}> {{localize "BOL.itemProperty.helm"}}
|
<input class="field-value" type="checkbox" name="system.properties.helm" {{checked item.system.properties.helm}}> {{localize "BOL.itemProperty.helm"}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr/>
|
<hr/>
|
||||||
<!--<div class="form-group">-->
|
|
||||||
<!-- <label>{{!localize "BOL.ui.properties"}}</label>-->
|
{{#if item.system.properties.armor}}
|
||||||
<!-- <div class="form-fields">-->
|
|
||||||
<!-- <label class="checkbox">-->
|
|
||||||
<!-- <input class="field-value" type="checkbox" name="data.properties.throwable" {{!checked data.properties.throwable}}> {{!localize "BOL.itemProperty.throwable"}}-->
|
|
||||||
<!-- </label>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!--</div>-->
|
|
||||||
{{#if data.properties.armor}}
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.armorQuality"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.armorQuality"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<select class="field-value armorQuality" name="data.properties.armorQuality" data-dtype="String">
|
<select class="field-value armorQuality" name="system.properties.armorQuality" data-dtype="String">
|
||||||
{{#select data.properties.armorQuality}}
|
{{#select item.system.properties.armorQuality}}
|
||||||
{{#each config.armorQualities as |value id|}}
|
{{#each config.armorQualities as |value id|}}
|
||||||
<option value="{{id}}">{{localize value}}</option>
|
<option value="{{id}}">{{localize value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -38,41 +31,41 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.soakFormula"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.soakFormula"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value soakFormula" type="text" name="data.properties.soak.formula" value="{{data.properties.soak.formula}}" data-dtype="String"/>
|
<input class="field-value soakFormula" type="text" name="system.properties.soak.formula" value="{{item.system.properties.soak.formula}}" data-dtype="String"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.soakValue"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.soakValue"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.properties.soak.value" value="{{data.properties.soak.value}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.soak.value" value="{{item.system.properties.soak.value}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if data.properties.helm}}
|
{{#if item.system.properties.helm}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.soakModifiers"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.soakModifiers"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.properties.soak.modifier" value="{{data.properties.soak.modifier}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.soak.modifier" value="{{item.system.properties.soak.modifier}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if data.properties.shield}}
|
{{#if item.system.properties.shield}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.blockingMalus"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.blockingMalus"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.properties.blocking.malus" value="{{data.properties.blocking.malus}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.blocking.malus" value="{{item.system.properties.blocking.malus}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.blockingAttacksBlocked"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.blockingAttacksBlocked"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.blocking.blocking1" {{checked data.properties.blocking.blocking1}}> {{localize "BOL.itemProperty.blocking1Attack"}}
|
<input class="field-value" type="checkbox" name="system.properties.blocking.blocking1" {{checked item.system.properties.blocking.blocking1}}> {{localize "BOL.itemProperty.blocking1Attack"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.blocking.blockingAll" {{checked data.properties.blocking.blockingAll}}> {{localize "BOL.itemProperty.blockingAllAttacks"}}
|
<input class="field-value" type="checkbox" name="system.properties.blocking.blockingAll" {{checked item.system.properties.blocking.blockingAll}}> {{localize "BOL.itemProperty.blockingAllAttacks"}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -83,26 +76,26 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemModifiers.init"}}</label>
|
<label class="property-label">{{localize "BOL.itemModifiers.init"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.properties.modifiers.init" value="{{data.properties.modifiers.c}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.modifiers.init" value="{{item.system.properties.modifiers.c}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemModifiers.agility"}}</label>
|
<label class="property-label">{{localize "BOL.itemModifiers.agility"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.properties.modifiers.agility" value="{{data.properties.modifiers.agility}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.modifiers.agility" value="{{item.system.properties.modifiers.agility}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemModifiers.powercost"}}</label>
|
<label class="property-label">{{localize "BOL.itemModifiers.powercost"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.properties.modifiers.powercost" value="{{data.properties.modifiers.powercost}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.modifiers.powercost" value="{{item.system.properties.modifiers.powercost}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemModifiers.social"}}</label>
|
<label class="property-label">{{localize "BOL.itemModifiers.social"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.modifiers.social" {{checked data.properties.modifiers.social}}>
|
<input class="field-value" type="checkbox" name="system.properties.modifiers.social" {{checked item.system.properties.modifiers.social}}>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.circle"}}</label>
|
<label class="property-label">{{localize "BOL.ui.circle"}}</label>
|
||||||
<select class="field-value" name="data.properties.circle" data-dtype="Number">
|
<select class="field-value" name="system.properties.circle" data-dtype="Number">
|
||||||
{{#select data.properties.circle}}
|
{{#select item.system.properties.circle}}
|
||||||
{{#each config.spellType as |value id|}}
|
{{#each config.spellType as |value id|}}
|
||||||
<option value="{{id}}">{{localize value}}</option>
|
<option value="{{id}}">{{localize value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -13,8 +13,8 @@
|
|||||||
|
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.difficulty"}}</label>
|
<label class="property-label">{{localize "BOL.ui.difficulty"}}</label>
|
||||||
<select name="data.properties.difficulty" value="{{data.properties.difficulty}}">
|
<select name="system.properties.difficulty" value="{{item.system.properties.difficulty}}">
|
||||||
{{#select data.properties.difficulty}}
|
{{#select item.system.properties.difficulty}}
|
||||||
<option value="2">{{localize "BOL.dialog.veryeasy"}}</option>
|
<option value="2">{{localize "BOL.dialog.veryeasy"}}</option>
|
||||||
<option value="1">{{localize "BOL.dialog.easy"}}</option>
|
<option value="1">{{localize "BOL.dialog.easy"}}</option>
|
||||||
<option value="0">{{localize "BOL.dialog.moderate"}}</option>
|
<option value="0">{{localize "BOL.dialog.moderate"}}</option>
|
||||||
@ -29,18 +29,18 @@
|
|||||||
|
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.ppcost"}}</label>
|
<label class="property-label">{{localize "BOL.ui.ppcost"}}</label>
|
||||||
<input class="field-value" type="text" name="data.properties.ppcost" value="{{data.properties.ppcost}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.ppcost" value="{{item.system.properties.ppcost}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.duration"}}</label>
|
<label class="property-label">{{localize "BOL.ui.duration"}}</label>
|
||||||
<input class="field-value" type="text" name="data.properties.duration" value="{{data.properties.duration}}" data-dtype="String"/>
|
<input class="field-value" type="text" name="system.properties.duration" value="{{item.system.properties.duration}}" data-dtype="String"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.mandatoryconditions"}}</label>
|
<label class="property-label">{{localize "BOL.ui.mandatoryconditions"}}</label>
|
||||||
<select class="field-value" name="data.properties.nbmandatoryconditions" data-dtype="Number">
|
<select class="field-value" name="system.properties.nbmandatoryconditions" data-dtype="Number">
|
||||||
{{#select data.properties.nbmandatoryconditions}}
|
{{#select item.system.properties.nbmandatoryconditions}}
|
||||||
<option value="1">1</option>
|
<option value="1">1</option>
|
||||||
<option value="2">2</option>
|
<option value="2">2</option>
|
||||||
<option value="3">3</option>
|
<option value="3">3</option>
|
||||||
@ -49,19 +49,19 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#each data.properties.mandatoryconditions as |cond idx|}}
|
{{#each item.system.properties.mandatoryconditions as |cond idx|}}
|
||||||
{{#if (lt idx @root.data.properties.nbmandatoryconditions)}}
|
{{#if (lt idx @root.item.system.properties.nbmandatoryconditions)}}
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.mandatoryconditions"}} {{add idx 1}}</label>
|
<label class="property-label">{{localize "BOL.ui.mandatoryconditions"}} {{add idx 1}}</label>
|
||||||
<input class="field-value" type="text" name="data.properties.mandatoryconditions.{{idx}}" value="{{cond}}" data-dtype="String"/>
|
<input class="field-value" type="text" name="system.properties.mandatoryconditions.{{idx}}" value="{{cond}}" data-dtype="String"/>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.optionnalconditions"}}</label>
|
<label class="property-label">{{localize "BOL.ui.optionnalconditions"}}</label>
|
||||||
<select class="field-value" name="data.properties.nboptionnalconditions" data-dtype="Number">
|
<select class="field-value" name="system.properties.nboptionnalconditions" data-dtype="Number">
|
||||||
{{#select data.properties.nboptionnalconditions}}
|
{{#select item.system.properties.nboptionnalconditions}}
|
||||||
<option value="1">1</option>
|
<option value="1">1</option>
|
||||||
<option value="2">2</option>
|
<option value="2">2</option>
|
||||||
<option value="3">3</option>
|
<option value="3">3</option>
|
||||||
@ -74,11 +74,11 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#each data.properties.optionnalconditions as |cond idx|}}
|
{{#each item.system.optionnalconditions as |cond idx|}}
|
||||||
{{#if (lt idx @root.data.properties.nboptionnalconditions)}}
|
{{#if (lt idx @root.item.system.properties.nboptionnalconditions)}}
|
||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<label class="property-label">{{localize "BOL.ui.optionnalconditions"}} {{add idx 1}}</label>
|
<label class="property-label">{{localize "BOL.ui.optionnalconditions"}} {{add idx 1}}</label>
|
||||||
<input class="field-value" type="text" name="data.properties.optionnalconditions.{{idx}}" value="{{cond}}" data-dtype="String"/>
|
<input class="field-value" type="text" name="system.properties.optionnalconditions.{{idx}}" value="{{cond}}" data-dtype="String"/>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -86,12 +86,12 @@
|
|||||||
<div class="property flexrow">
|
<div class="property flexrow">
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.spellkeep" {{checked data.properties.spellkeep}}> {{localize "BOL.ui.spellkeep"}}
|
<input class="field-value" type="checkbox" name="system.properties.spellkeep" {{checked item.system.properties.spellkeep}}> {{localize "BOL.ui.spellkeep"}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.concentrate" {{checked data.properties.concentrate}}> {{localize "BOL.ui.concentrate"}}
|
<input class="field-value" type="checkbox" name="system.properties.concentrate" {{checked item.system.properties.concentrate}}> {{localize "BOL.ui.concentrate"}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.ui.subtype"}}</label>
|
<label class="property-label">{{localize "BOL.ui.subtype"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<select name="data.subtype" data-dtype="String">
|
<select name="system.subtype" data-dtype="String">
|
||||||
{{#select data.subtype}}
|
{{#select item.system.subtype}}
|
||||||
{{#each config.vehicleSubtypes as |item id|}}
|
{{#each config.vehicleSubtypes as |item id|}}
|
||||||
<option value="{{id}}">{{localize item}}</option>
|
<option value="{{id}}">{{localize item}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -16,13 +16,13 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.ui.speed"}}</label>
|
<label class="property-label">{{localize "BOL.ui.speed"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.properties.speed" value="{{data.properties.speed}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.speed" value="{{item.system.properties.speed}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.ui.price"}}</label>
|
<label class="property-label">{{localize "BOL.ui.price"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<input class="field-value" type="text" name="data.price" value="{{data.price}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.price" value="{{item.system.price}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,16 +3,16 @@
|
|||||||
<label>{{localize "BOL.ui.reach"}}</label>
|
<label>{{localize "BOL.ui.reach"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.melee" {{checked data.properties.melee}}> {{localize "BOL.itemProperty.melee"}}
|
<input class="field-value" type="checkbox" name="system.properties.melee" {{checked item.system.properties.melee}}> {{localize "BOL.itemProperty.melee"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.ranged" {{checked data.properties.ranged}}> {{localize "BOL.itemProperty.ranged"}}
|
<input class="field-value" type="checkbox" name="system.properties.ranged" {{checked item.system.properties.ranged}}> {{localize "BOL.itemProperty.ranged"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.throwing" {{checked data.properties.throwing}}> {{localize "BOL.itemProperty.throwing"}}
|
<input class="field-value" type="checkbox" name="system.properties.throwing" {{checked item.system.properties.throwing}}> {{localize "BOL.itemProperty.throwing"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.natural" {{checked data.properties.natural}}> {{localize "BOL.itemProperty.natural"}}
|
<input class="field-value" type="checkbox" name="system.properties.natural" {{checked item.system.properties.natural}}> {{localize "BOL.itemProperty.natural"}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -21,44 +21,44 @@
|
|||||||
<label>{{localize "BOL.ui.properties"}}</label>
|
<label>{{localize "BOL.ui.properties"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.2H" {{checked data.properties.2H}}> {{localize "BOL.itemProperty.2H"}}
|
<input class="field-value" type="checkbox" name="system.properties.2H" {{checked item.system.properties.2H}}> {{localize "BOL.itemProperty.2H"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.concealable" {{checked data.properties.concealable}}> {{localize "BOL.itemProperty.concealable"}}
|
<input class="field-value" type="checkbox" name="system.properties.concealable" {{checked item.system.properties.concealable}}> {{localize "BOL.itemProperty.concealable"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.ignoreshield" {{checked data.properties.ignoreshield}}> {{localize "BOL.itemProperty.ignoreshield"}}
|
<input class="field-value" type="checkbox" name="system.properties.ignoreshield" {{checked item.system.properties.ignoreshield}}> {{localize "BOL.itemProperty.ignoreshield"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.attackBonusDice" {{checked data.properties.attackBonusDice}}> {{localize "BOL.itemProperty.attackBonusDice"}}
|
<input class="field-value" type="checkbox" name="system.properties.attackBonusDice" {{checked item.system.properties.attackBonusDice}}> {{localize "BOL.itemProperty.attackBonusDice"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.onlymodifier" {{checked data.properties.onlymodifier}}> {{localize "BOL.itemProperty.onlymodifier"}}
|
<input class="field-value" type="checkbox" name="system.properties.onlymodifier" {{checked item.system.properties.onlymodifier}}> {{localize "BOL.itemProperty.onlymodifier"}}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
|
||||||
{{#if data.properties.ranged}}
|
{{#if item.system.properties.ranged}}
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.reloadable" {{checked data.properties.reloadable}}> {{localize "BOL.itemProperty.reloadable"}}
|
<input class="field-value" type="checkbox" name="system.properties.reloadable" {{checked item.system.properties.reloadable}}> {{localize "BOL.itemProperty.reloadable"}}
|
||||||
</label>
|
</label>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if data.properties.melee}}
|
{{#if item.system.properties.melee}}
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.bashing" {{checked data.properties.bashing}}> {{localize "BOL.itemProperty.bashing"}}
|
<input class="field-value" type="checkbox" name="system.properties.bashing" {{checked item.system.properties.bashing}}> {{localize "BOL.itemProperty.bashing"}}
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.throwable" {{checked data.properties.throwable}}> {{localize "BOL.itemProperty.throwable"}}
|
<input class="field-value" type="checkbox" name="system.properties.throwable" {{checked item.system.properties.throwable}}> {{localize "BOL.itemProperty.throwable"}}
|
||||||
</label>
|
</label>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr/>
|
<hr/>
|
||||||
{{#if (not data.properties.onlymodifier)}}
|
{{#if (not item.system.properties.onlymodifier)}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.attackAttribute"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.attackAttribute"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<select class="field-value" name="data.properties.attackAttribute" data-dtype="String">
|
<select class="field-value" name="system.properties.attackAttribute" data-dtype="String">
|
||||||
{{#select data.properties.attackAttribute}}
|
{{#select item.system.properties.attackAttribute}}
|
||||||
{{#each config.attackAttributes as |value id|}}
|
{{#each config.attackAttributes as |value id|}}
|
||||||
<option value="{{id}}">{{localize value}}</option>
|
<option value="{{id}}">{{localize value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -69,8 +69,8 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.attackAptitude"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.attackAptitude"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<select class="field-value" name="data.properties.attackAptitude" data-dtype="String">
|
<select class="field-value" name="system.properties.attackAptitude" data-dtype="String">
|
||||||
{{#select data.properties.attackAptitude}}
|
{{#select item.system.properties.attackAptitude}}
|
||||||
{{#each config.attackAptitudes as |value id|}}
|
{{#each config.attackAptitudes as |value id|}}
|
||||||
<option value="{{id}}">{{localize value}}</option>
|
<option value="{{id}}">{{localize value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -82,15 +82,15 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.attackModifiers"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.attackModifiers"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<input class="field-value" type="text" name="data.properties.attackModifiers" value="{{data.properties.attackModifiers}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.attackModifiers" value="{{item.system.properties.attackModifiers}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr/>
|
<hr/>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.weaponSize"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.weaponSize"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<select class="field-value" name="data.properties.weaponSize" data-dtype="String">
|
<select class="field-value" name="system.properties.weaponSize" data-dtype="String">
|
||||||
{{#select data.properties.weaponSize}}
|
{{#select item.system.properties.weaponSize}}
|
||||||
{{#each config.weaponSizes as |value id|}}
|
{{#each config.weaponSizes as |value id|}}
|
||||||
<option value="{{id}}">{{localize value}}</option>
|
<option value="{{id}}">{{localize value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -101,8 +101,8 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.damage"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.damage"}}</label>
|
||||||
<div class="form-fields">
|
<div class="form-fields">
|
||||||
<select class="field-value" name="data.properties.damage" data-dtype="String">
|
<select class="field-value" name="system.properties.damage" data-dtype="String">
|
||||||
{{#select data.properties.damage}}
|
{{#select item.system.properties.damage}}
|
||||||
{{#each config.damageValues as |value id|}}
|
{{#each config.damageValues as |value id|}}
|
||||||
<option value="{{id}}">{{value}}</option>
|
<option value="{{id}}">{{value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -113,8 +113,8 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.damageAttribute"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.damageAttribute"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<select class="field-value" name="data.properties.damageAttribute" data-dtype="String">
|
<select class="field-value" name="system.properties.damageAttribute" data-dtype="String">
|
||||||
{{#select data.properties.damageAttribute}}
|
{{#select item.system.properties.damageAttribute}}
|
||||||
{{#each config.damageAttributes as |value id|}}
|
{{#each config.damageAttributes as |value id|}}
|
||||||
<option value="{{id}}">{{localize value}}</option>
|
<option value="{{id}}">{{localize value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -125,14 +125,14 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.damageModifiers"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.damageModifiers"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<input class="field-value" type="text" name="data.properties.damageModifiers" value="{{data.properties.damageModifiers}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.damageModifiers" value="{{item.system.properties.damageModifiers}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.damageMultiplier"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.damageMultiplier"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<select class="field-value" name="data.properties.damageMultiplier" data-dtype="String">
|
<select class="field-value" name="system.properties.damageMultiplier" data-dtype="String">
|
||||||
{{#select data.properties.damageMultiplier}}
|
{{#select item.system.properties.damageMultiplier}}
|
||||||
{{#each config.damageMultiplier as |value id|}}
|
{{#each config.damageMultiplier as |value id|}}
|
||||||
<option value="{{id}}">{{value}}</option>
|
<option value="{{id}}">{{value}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -144,17 +144,17 @@
|
|||||||
<label class="property-label">{{localize "BOL.itemProperty.damageSpecial"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.damageSpecial"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input class="field-value" type="checkbox" name="data.properties.damageReroll1" {{checked data.properties.damageReroll1}}> {{localize "BOL.itemProperty.damageReroll1"}}
|
<input class="field-value" type="checkbox" name="system.properties.damageReroll1" {{checked item.system.properties.damageReroll1}}> {{localize "BOL.itemProperty.damageReroll1"}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#if (or data.properties.throwing (or data.properties.ranged data.properties.throwable))}}
|
{{#if (or item.system.properties.throwing (or item.system.properties.ranged item.system.properties.throwable))}}
|
||||||
<hr/>
|
<hr/>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.range"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.range"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<input class="field-value" type="text" name="data.properties.range" value="{{data.properties.range}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.range" value="{{item.system.properties.range}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
@ -162,7 +162,7 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="property-label">{{localize "BOL.itemProperty.reload"}}</label>
|
<label class="property-label">{{localize "BOL.itemProperty.reload"}}</label>
|
||||||
<div class="form-fields center">
|
<div class="form-fields center">
|
||||||
<input class="field-value" type="text" name="data.properties.reload" value="{{data.properties.reload}}" data-dtype="Number"/>
|
<input class="field-value" type="text" name="system.properties.reload" value="{{item.system.properties.reload}}" data-dtype="Number"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
Reference in New Issue
Block a user