Compare commits
6 Commits
fvtt-avd12
...
fvtt-avd12
Author | SHA1 | Date | |
---|---|---|---|
8f9ecff285 | |||
17e8fb4aa6 | |||
2566fac378 | |||
06b605176e | |||
f73af29949 | |||
e0026adfcd |
@ -132,8 +132,14 @@ export class Avd12ActorSheet extends ActorSheet {
|
||||
|
||||
html.find('.roll-weapon').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const skillId = li.data("item-id")
|
||||
this.actor.rollWeapon(skillId)
|
||||
const weponId = li.data("item-id")
|
||||
this.actor.rollWeapon(weponId)
|
||||
});
|
||||
html.find('.roll-weapon-damage').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const dmg = $(event.currentTarget).data("damage")
|
||||
const weaponId = li.data("item-id")
|
||||
this.actor.rollWeaponDamage(weaponId, dmg)
|
||||
});
|
||||
|
||||
|
||||
|
@ -58,10 +58,13 @@ export class Avd12Actor extends Actor {
|
||||
computeHitPoints() {
|
||||
if (this.type == "character") {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rebuildSkills() {
|
||||
let armorPenalties = Avd12Utility.getArmorPenalty(this.items.find(item => item.type == "armor"))
|
||||
let shieldPenalties = Avd12Utility.getArmorPenalty(this.items.find(item => item.type == "shield"))
|
||||
|
||||
for (let attrKey in this.system.attributes) {
|
||||
let attr = this.system.attributes[attrKey]
|
||||
for (let skillKey in attr.skills) {
|
||||
@ -72,11 +75,52 @@ export class Avd12Actor extends Actor {
|
||||
for (let trait of availableTraits) {
|
||||
skill.modifier += Number(trait.system.bonusvalue)
|
||||
}
|
||||
// Apply armor penalties
|
||||
if (armorPenalties[skillKey]) {
|
||||
console.log("Found armor penalties : ", armorPenalties, skillKey)
|
||||
skill.modifier += Number(armorPenalties[skillKey])
|
||||
}
|
||||
// Apply shield penalties
|
||||
if (shieldPenalties[skillKey]) {
|
||||
console.log("Found shield penalties : ", shieldPenalties, skillKey)
|
||||
skill.modifier += Number(shieldPenalties[skillKey])
|
||||
}
|
||||
// Process additionnal bonuses
|
||||
for (let item of this.items) {
|
||||
if (item.system.bonus && item.system.bonus[skillKey]) {
|
||||
skill.modifier += Number(item.system.bonus[skillKey].value)
|
||||
}
|
||||
}
|
||||
skill.finalvalue = skill.modifier + attr.value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rebuildMitigations() {
|
||||
for (let mitiKey in this.system.mitigation) {
|
||||
let mitigation = this.system.mitigation[mitiKey]
|
||||
for (let item of this.items) {
|
||||
if (item.system.mitigation && item.system.mitigation[mitiKey]) {
|
||||
mitigation.value += Number(item.system.mitigation[mitiKey].value)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
rebuildBonus() {
|
||||
for (let bonusKey in this.system.bonus) {
|
||||
let bonus = this.system.bonus[bonusKey]
|
||||
for (let content in bonus) {
|
||||
let dataPath = bonusKey + "." + content
|
||||
//console.log("Parsing", bonusKey, content, dataPath)
|
||||
let availableTraits = this.items.filter(t => t.type == "trait" && t.system.computebonus && t.system.bonusdata == dataPath)
|
||||
for (let trait of availableTraits) {
|
||||
bonus[content] += Number(trait.system.bonusvalue)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
prepareDerivedData() {
|
||||
|
||||
@ -86,6 +130,8 @@ export class Avd12Actor extends Actor {
|
||||
this.computeHitPoints()
|
||||
|
||||
this.rebuildSkills()
|
||||
this.rebuildMitigations()
|
||||
this.rebuildBonus()
|
||||
}
|
||||
|
||||
super.prepareDerivedData();
|
||||
@ -101,7 +147,7 @@ export class Avd12Actor extends Actor {
|
||||
this.rebuildSkills()
|
||||
super._onUpdateEmbeddedDocuments(embeddedName, ...args)
|
||||
}*/
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getEncumbranceCapacity() {
|
||||
return 1;
|
||||
@ -114,10 +160,23 @@ export class Avd12Actor extends Actor {
|
||||
return comp;
|
||||
}
|
||||
getEquippedWeapons() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || []);
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || [])
|
||||
comp.forEach(item => {
|
||||
this.prepareWeapon(item)
|
||||
})
|
||||
Avd12Utility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getWeapons() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon') || [])
|
||||
comp.forEach(item => {
|
||||
this.prepareWeapon(item)
|
||||
})
|
||||
Avd12Utility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getArmors() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'armor') || []);
|
||||
@ -167,10 +226,29 @@ export class Avd12Actor extends Actor {
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getWeapons() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []);
|
||||
Avd12Utility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
addDamages(damage, bonusDamage) {
|
||||
//console.log(damage)
|
||||
if (damage.damagetype != "none" && damage.dice) {
|
||||
let fullBonus = Number(bonusDamage) + Number(damage.bonus)
|
||||
damage.normal = damage.dice + '+' + fullBonus
|
||||
damage.critical = damage.dice + '+' + Number(fullBonus) * 2
|
||||
let parser = damage.dice.match(/(\d+)(d\d+)/)
|
||||
let nbDice = 2
|
||||
if (parser && parser[1]) {
|
||||
nbDice = Number(parser[1]) * 2
|
||||
}
|
||||
damage.brutal = nbDice + parser[2] + "+" + Number(fullBonus) * 2
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
prepareWeapon(weapon) {
|
||||
weapon.attackBonus = this.system.bonus.weapon.attack + this.system.bonus[weapon.system.weapontype].attack
|
||||
let bonusDamage = this.system.bonus.weapon.damage + this.system.bonus[weapon.system.weapontype].damage
|
||||
this.addDamages(weapon.system.damages.primary, bonusDamage)
|
||||
bonusDamage = this.system.bonus.weapon.damage + this.system.bonus[weapon.system.weapontype].crits
|
||||
this.addDamages(weapon.system.damages.secondary, bonusDamage)
|
||||
bonusDamage = this.system.bonus.weapon.damage + this.system.bonus[weapon.system.weapontype].brutals
|
||||
this.addDamages(weapon.system.damages.tertiary + bonusDamage)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getItemById(id) {
|
||||
@ -352,7 +430,7 @@ export class Avd12Actor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async preprocessItem(event, item, onDrop = false) {
|
||||
//console.log('ITEM', item)
|
||||
if ( item.system.focus && item.system.focus?.isfocus) {
|
||||
if (item.system.focus && item.system.focus?.isfocus) {
|
||||
let focusItem = this.items.find(it => it.system.focus?.isfocus)
|
||||
if (focusItem) {
|
||||
ui.notifications.warn("You already have a Focus Item in your equipment.")
|
||||
@ -370,21 +448,31 @@ export class Avd12Actor extends Actor {
|
||||
let focus = this.items.find(it => it.system.focus?.isfocus)
|
||||
if (focus) {
|
||||
let focusData = Avd12Utility.computeFocusData(focus.system.focus)
|
||||
let focusBonus = this.items.filter( it => it.system.focuspointsbonus > 0).reduce((sum, item2) => sum = item2.system.focuspointsbonus, 0)
|
||||
let focusregenbonus = this.items.filter( it => it.system.focusregenbonus > 0).reduce((sum, item2) => sum = item2.system.focusregenbonus, 0)
|
||||
let burnchancebonus = this.items.filter( it => it.system.burnchancebonus > 0).reduce((sum, item2) => sum = item2.system.burnchancebonus, 0)
|
||||
console.log("FINAL BONUS", focusBonus, focusregenbonus, burnchancebonus)
|
||||
let focusBonus = this.items.filter(it => it.system.focuspointsbonus > 0).reduce((sum, item2) => sum = item2.system.focuspointsbonus, 0)
|
||||
let focusregenbonus = this.items.filter(it => it.system.focusregenbonus > 0).reduce((sum, item2) => sum = item2.system.focusregenbonus, 0)
|
||||
let burnchancebonus = this.items.filter(it => it.system.burnchancebonus > 0).reduce((sum, item2) => sum = item2.system.burnchancebonus, 0)
|
||||
|
||||
let focusPoints = focusData.focusPoints + focusBonus
|
||||
let focusRegen = focusData.focusRegen + focusregenbonus
|
||||
//console.log("Update focus", focusPoints, focusRegen)
|
||||
if (focusPoints != this.system.focus.focuspoints || focusRegen != this.system.focus.focusregen) {
|
||||
let focusData = duplicate(this.system.focus)
|
||||
focusData.focuspoints = focusPoints
|
||||
focusData.focusregen = focusRegen
|
||||
this.update({ 'system.focus': focusData })
|
||||
}
|
||||
//console.log("FINAL BONUS", focusBonus, focusregenbonus, burnchancebonus)
|
||||
return {
|
||||
focusPoints : focusData.focusPoints + focusBonus,
|
||||
focusPoints: focusPoints,
|
||||
burnChance: focusData.burnChance + burnchancebonus,
|
||||
focusRegen: focusData.focusRegen + focusregenbonus,
|
||||
focusRegen: focusRegen,
|
||||
spellAttackBonus: focusData.spellAttackBonus,
|
||||
spellDamageBonus: focusData.spellDamageBonus,
|
||||
currentFocusPoints: this.system.focus.currentFocusPoints
|
||||
currentFocusPoints: this.system.focus.currentfocuspoints
|
||||
}
|
||||
}
|
||||
return {
|
||||
focusPoints : 0,
|
||||
focusPoints: 0,
|
||||
burnChance: 0,
|
||||
focusRegen: 0,
|
||||
spellAttackBonus: 0,
|
||||
@ -581,179 +669,81 @@ export class Avd12Actor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollSpell(spellId) {
|
||||
async rollSpell(spellId) {
|
||||
let spell = this.items.get(spellId)
|
||||
if (spell) {
|
||||
spell = duplicate(spell)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "spell"
|
||||
rollData.spell = spell
|
||||
rollData.spellAttack = this.system.bonus.spell.attack
|
||||
rollData.spellDamage = this.system.bonus.spell.damage
|
||||
rollData.spellCost = Avd12Utility.getSpellCost(spell)
|
||||
rollData.title = "Roll Spell " + spell.name
|
||||
rollData.img = spell.img
|
||||
if (spell.system.spelltype != "utility") {
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "spell"
|
||||
rollData.spell = spell
|
||||
rollData.spellAttack = this.system.bonus.spell.attack
|
||||
rollData.spellDamage = this.system.bonus.spell.damage
|
||||
rollData.spellCost = Avd12Utility.getSpellCost(spell)
|
||||
rollData.title = "Roll Spell " + spell.name
|
||||
rollData.img = spell.img
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
this.spentFocusPoints(spell)
|
||||
let msg = await Avd12Utility.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-avd12/templates/chat/chat-utility-spell.hbs`, rollData)
|
||||
})
|
||||
msg.setFlag("world", "rolldata", rollData)
|
||||
}
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant spell.")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
spentFocusPoints(spell) {
|
||||
let spellCost = Avd12Utility.getSpellCost(spell)
|
||||
let focusData = duplicate(this.system.focus)
|
||||
focusData.currentfocuspoints -= spellCost
|
||||
focusData.currentfocuspoints = Math.max(focusData.currentfocuspoints, 0)
|
||||
console.log("New fovcus", this.system, focusData)
|
||||
this.update({ 'system.focus': focusData })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollWeapon(weaponId) {
|
||||
let weapon = this.items.get(weaponId)
|
||||
if (weapon) {
|
||||
weapon = duplicate(weapon)
|
||||
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
|
||||
if (skill) {
|
||||
skill = duplicate(skill)
|
||||
Avd12Utility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
rollData.mode = "weapon"
|
||||
rollData.skill = skill
|
||||
rollData.weapon = weapon
|
||||
rollData.img = weapon.img
|
||||
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged
|
||||
rollData.forceDisadvantage = this.isAttackDisadvantage()
|
||||
}
|
||||
/*if (rollData.weapon.system.isranged && rollData.tokensDistance > Avd12Utility.getWeaponMaxRange(rollData.weapon) ) {
|
||||
ui.notifications.warn(`Your target is out of range of your weapon (max: ${Avd12Utility.getWeaponMaxRange(rollData.weapon)} - current : ${rollData.tokensDistance})` )
|
||||
return
|
||||
}*/
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
|
||||
}
|
||||
this.prepareWeapon(weapon)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.modifier = this.system.bonus[weapon.system.weapontype]
|
||||
rollData.mode = "weapon"
|
||||
rollData.weapon = weapon
|
||||
rollData.img = weapon.img
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant weapon ")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollDefenseMelee(attackRollData) {
|
||||
let weapon = this.items.get(attackRollData.defenseWeaponId)
|
||||
async rollWeaponDamage(weaponId, damageType) {
|
||||
let weapon = this.items.get(weaponId)
|
||||
if (weapon) {
|
||||
weapon = duplicate(weapon)
|
||||
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
|
||||
if (skill) {
|
||||
skill = duplicate(skill)
|
||||
Avd12Utility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
rollData.defenderTokenId = undefined // Cleanup
|
||||
rollData.mode = "weapondefense"
|
||||
rollData.shield = this.getEquippedShield()
|
||||
rollData.attackRollData = duplicate(attackRollData)
|
||||
rollData.skill = skill
|
||||
rollData.weapon = weapon
|
||||
rollData.img = weapon.img
|
||||
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged
|
||||
rollData.forceDisadvantage = this.isDefenseDisadvantage()
|
||||
}
|
||||
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
|
||||
}
|
||||
} else {
|
||||
ui.notifications.warn("Weapon not found ! ")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollDefenseRanged(attackRollData) {
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.defenderTokenId = undefined // Cleanup
|
||||
rollData.mode = "rangeddefense"
|
||||
if (attackRollData) {
|
||||
rollData.attackRollData = duplicate(attackRollData)
|
||||
rollData.effectiveRange = Avd12Utility.getWeaponRange(attackRollData.weapon)
|
||||
rollData.tokensDistance = attackRollData.tokensDistance // QoL copy
|
||||
}
|
||||
rollData.sizeDice = Avd12Utility.getSizeDice(this.system.biodata.size)
|
||||
rollData.distanceBonusDice = 0 //Math.max(0, Math.floor((rollData.tokensDistance - rollData.effectiveRange) + 0.5))
|
||||
rollData.hasCover = "none"
|
||||
rollData.situational = "none"
|
||||
rollData.useshield = false
|
||||
rollData.shield = this.getEquippedShield()
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollShieldDie() {
|
||||
let shield = this.getEquippedShield()
|
||||
if (shield) {
|
||||
shield = duplicate(shield)
|
||||
this.prepareWeapon(weapon)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "shield"
|
||||
rollData.shield = shield
|
||||
rollData.useshield = true
|
||||
rollData.img = shield.img
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
}
|
||||
rollData.damageFormula = weapon.system.damages.primary[damageType]
|
||||
rollData.mode = "weapon-damage"
|
||||
rollData.weapon = weapon
|
||||
rollData.damageType = damageType
|
||||
rollData.img = weapon.img
|
||||
let myRoll = new Roll(rollData.damageFormula).roll({ async: false })
|
||||
await Avd12Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.roll = myRoll
|
||||
let msg = await Avd12Utility.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-avd12/templates/chat/chat-damage-result.hbs`, rollData)
|
||||
})
|
||||
msg.setFlag("world", "rolldata", rollData)
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmorDie(rollData = undefined) {
|
||||
let armor = this.getEquippedArmor()
|
||||
if (armor) {
|
||||
armor = duplicate(armor)
|
||||
let reduce = 0
|
||||
let multiply = 1
|
||||
let disadvantage = false
|
||||
let advantage = false
|
||||
let messages = ["Armor applied"]
|
||||
|
||||
if (rollData) {
|
||||
if (Avd12Utility.isArmorLight(armor) && Avd12Utility.isWeaponPenetrating(rollData.attackRollData.weapon)) {
|
||||
return { armorIgnored: true, nbSuccess: 0, messages: ["Armor ignored : Penetrating weapons ignore Light Armors."] }
|
||||
}
|
||||
if (Avd12Utility.isWeaponPenetrating(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor reduced by 1 (Penetrating weapon)")
|
||||
reduce = 1
|
||||
}
|
||||
if (Avd12Utility.isWeaponLight(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor with advantage (Light weapon)")
|
||||
advantage = true
|
||||
}
|
||||
if (Avd12Utility.isWeaponHeavy(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor with disadvantage (Heavy weapon)")
|
||||
disadvantage = true
|
||||
}
|
||||
if (Avd12Utility.isWeaponHack(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor reduced by 1 (Hack weapon)")
|
||||
reduce = 1
|
||||
}
|
||||
if (Avd12Utility.isWeaponUndamaging(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor multiplied by 2 (Undamaging weapon)")
|
||||
multiply = 2
|
||||
}
|
||||
}
|
||||
let diceColor = armor.system.absorprionroll
|
||||
let armorResult = await Avd12Utility.getRollTableFromDiceColor(diceColor, false)
|
||||
console.log("Armor log", armorResult)
|
||||
let armorValue = Math.max(0, (Number(armorResult.text) + reduce) * multiply)
|
||||
if (advantage || disadvantage) {
|
||||
let armorResult2 = await Avd12Utility.getRollTableFromDiceColor(diceColor, false)
|
||||
let armorValue2 = Math.max(0, (Number(armorResult2.text) + reduce) * multiply)
|
||||
if (advantage) {
|
||||
armorValue = (armorValue2 > armorValue) ? armorValue2 : armorValue
|
||||
messages.push(`Armor advantage - Roll 1 = ${armorValue} - Roll 2 = ${armorValue2}`)
|
||||
}
|
||||
if (disadvantage) {
|
||||
armorValue = (armorValue2 < armorValue) ? armorValue2 : armorValue
|
||||
messages.push(`Armor disadvantage - Roll 1 = ${armorValue} - Roll 2 = ${armorValue2}`)
|
||||
}
|
||||
}
|
||||
armorResult.armorValue = armorValue
|
||||
if (!rollData) {
|
||||
ChatMessage.create({ content: "Armor result : " + armorValue })
|
||||
}
|
||||
messages.push("Armor result : " + armorValue)
|
||||
return { armorIgnored: false, nbSuccess: armorValue, rawArmor: armorResult.text, messages: messages }
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant weapon ")
|
||||
}
|
||||
return { armorIgnored: true, nbSuccess: 0, messages: ["No armor equipped."] }
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -19,7 +19,6 @@ export class Avd12ItemSheet extends ItemSheet {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_getHeaderButtons() {
|
||||
let buttons = super._getHeaderButtons();
|
||||
|
@ -11,7 +11,11 @@ const __focusRegenBond = { "bondnone": 6, "bondeasy": 8, "bondcommon": 12, "bond
|
||||
const __bonusSpellDamageBond = { "bondnone": 0, "bondeasy": 1, "bondcommon": 1, "bonduncommon": 1, "bondrare": 2, "bondlegendary": 2, "bondmythic": 3, "bonddivine": 4 }
|
||||
const __bonusSpellAttackBond = { "bondnone": 0, "bondeasy": 0, "bondcommon": 1, "bonduncommon": 1, "bondrare": 2, "bondlegendary": 2, "bondmythic": 3, "bonddivine": 4 }
|
||||
const __spellCost = { "beginner": 1, "novice": 2, "expert": 4, "master": 6, "grandmaster": 8 }
|
||||
const __armorPenalties = {"light": { block: -2, dodge: -1}, "medium": { dodge: -3, block: -2, castingtime: 1, stealth: -2, speed: -1,
|
||||
"heavy": { dodge: -4, block: -3, stealth: -3, castingtime: 2, speed: -3 }, "ultraheavy": { dodge: -5, block: -4, stealth: -5, castingtime: 2, speed: -3 },
|
||||
"lightshield": {dodge: -1, block: +1}, "heavyshield": {dodge: -2, block: 2, speed: -1, stealth: -1} }
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class Avd12Utility {
|
||||
@ -439,6 +443,15 @@ export class Avd12Utility {
|
||||
static getSpellCost(spell) {
|
||||
return __spellCost[spell.system.level]
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getArmorPenalty( item ) {
|
||||
if (item && (item.type == "shield" || item.type == "armor")) {
|
||||
return __armorPenalties[item.system.category]
|
||||
}
|
||||
return {}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static chatDataSetup(content, modeOverride, isRoll = false, forceWhisper) {
|
||||
let chatData = {
|
||||
@ -523,6 +536,9 @@ export class Avd12Utility {
|
||||
if (rollData.skill && rollData.skill.good) {
|
||||
diceFormula += "+1d4"
|
||||
}
|
||||
if (rollData.weapon ) {
|
||||
diceFormula += "+" + rollData.weapon.attackBonus
|
||||
}
|
||||
rollData.diceFormula = diceFormula
|
||||
|
||||
// Performs roll
|
||||
@ -541,6 +557,10 @@ export class Avd12Utility {
|
||||
}
|
||||
}
|
||||
|
||||
if (rollData.spell) {
|
||||
actor.spentFocusPoints(rollData.spell)
|
||||
}
|
||||
|
||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-avd12/templates/chat/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
|
15
packs/weapons.db
Normal file
15
packs/weapons.db
Normal file
@ -0,0 +1,15 @@
|
||||
{"name":"Heavy 2-Handed Blunt Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":200,"cost":1200,"health":0,"movespeed":0,"equipped":false,"weapontype":"crush","category":"heavy2h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"2d8","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHar0Cqlcw9R","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Light 1-Handed Blunt Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":50,"cost":350,"health":0,"movespeed":0,"equipped":false,"weapontype":"crush","category":"light1h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"1d10","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHar32dCrCv2","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Heavy 1-Handed Slash Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":100,"cost":600,"health":0,"movespeed":0,"equipped":false,"weapontype":"slash","category":"heavy1h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"1d12","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHar8Juk5ks7","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Light 2-Handed Slash Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":100,"cost":600,"health":0,"movespeed":0,"equipped":false,"weapontype":"slash","category":"light2h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"3d4","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHarDxHs0eLp","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Heavy Ranged Weapon","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":120,"cost":1200,"health":0,"movespeed":0,"equipped":false,"weapontype":"ranged","category":"heavyranged","minrange":4,"maxrange":30,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"2d6","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHarFD3DmT42","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Light 1-Handed Slash Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":50,"cost":350,"health":0,"movespeed":0,"equipped":false,"weapontype":"slash","category":"light1h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"1d10","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHarH20z6Lzc","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Light 1-Handed Pierce Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":50,"cost":350,"health":0,"movespeed":0,"equipped":false,"weapontype":"pierce","category":"light1h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"1d10","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHarHuz9mQH3","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Heavy 2-Handed Slash Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":200,"cost":1200,"health":0,"movespeed":0,"equipped":false,"weapontype":"slash","category":"heavy2h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"2d8","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHarO3iVLBrZ","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Light 2-Handed Pierce Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":100,"cost":600,"health":0,"movespeed":0,"equipped":false,"weapontype":"pierce","category":"light2h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"3d4","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHarP3WA52j3","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Light 2-Handed Blunt Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":100,"cost":600,"health":0,"movespeed":0,"equipped":false,"weapontype":"crush","category":"light2h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"3d4","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHarU8V5XbYB","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Heavy 2-Handed Pierce Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":200,"cost":1200,"health":0,"movespeed":0,"equipped":false,"weapontype":"pierce","category":"heavy2h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"2d8","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHarV3eCc8Ed","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Heavy 1-Handed Blunt Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":100,"cost":600,"health":0,"movespeed":0,"equipped":false,"weapontype":"crush","category":"heavy1h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"1d12","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHarc8F58s38","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Ultra-Light Ranged Weapon","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":40,"cost":400,"health":0,"movespeed":0,"equipped":false,"weapontype":"ranged","category":"ulightranged","minrange":0,"maxrange":4,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"1d6","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHariX73eN1h","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Heavy 1-Handed Pierce Weapon [Iron]","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":100,"cost":600,"health":0,"movespeed":0,"equipped":false,"weapontype":"pierce","category":"heavy1h","minrange":0,"maxrange":0,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"1d12","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHaroH0fihZh","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
||||
{"name":"Light Ranged Weapon","type":"weapon","img":"systems/fvtt-avd12/images/icons/weapon2.webp","system":{"focuspointsbonus":0,"focusregenbonus":0,"burnchancebonus":0,"mitigation":{"physical":{"value":0},"psychic":{"value":0},"fire":{"value":0},"lightning":{"value":0},"cold":{"value":0},"dark":{"value":0},"divine":{"value":0},"arcane":{"value":0}},"bonus":{"block":{"value":0},"dodge":{"value":0},"resistance":{"value":0}},"focus":{"isfocus":false,"core":"corenone","treatment":"treatmentnone","bond":"bondnone"},"weight":80,"cost":600,"health":0,"movespeed":0,"equipped":false,"weapontype":"ranged","category":"lightranged","minrange":2,"maxrange":10,"throwrange":0,"magical":false,"blackenediron":false,"silvered":false,"damages":{"primary":{"damagetype":"physical","dice":"1d8","bonus":"0"},"secondary":{"damagetype":"none","dice":"","bonus":"0"},"tertiary":{"damagetype":"none","dice":"","bonus":"0"}},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.MOcIlHar8MM7JNm7"}},"_stats":{"systemId":"fvtt-avd12","systemVersion":"10.0.11","coreVersion":"10.288","createdTime":1671358405255,"modifiedTime":1671361680079,"lastModifiedBy":"JgmaAbvFHQvSlowN"},"_id":"MOcIlHaruSwtPJ77","folder":null,"sort":0,"ownership":{"default":0,"JgmaAbvFHQvSlowN":3}}
|
@ -222,13 +222,14 @@ table {border: 1px solid #7a7971;}
|
||||
-webkit-box-flex: 0;
|
||||
-ms-flex: 0 0 128px;
|
||||
flex: 0 0 128px;
|
||||
width: 196px;
|
||||
width: 128px;
|
||||
height: auto;
|
||||
max-height:260px;
|
||||
max-height:160px;
|
||||
margin-top: 0px;
|
||||
margin-right: 10px;
|
||||
object-fit: cover;
|
||||
object-position: 50% 0;
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
.button-img {
|
||||
@ -1293,6 +1294,11 @@ ul, li {
|
||||
max-width: 6rem;
|
||||
min-width: 6rem;
|
||||
}
|
||||
.item-field-skill {
|
||||
flex-grow:1;
|
||||
max-width: 6.8rem;
|
||||
min-width: 6.8rem;
|
||||
}
|
||||
.item-field-label-long {
|
||||
margin-top: 4px;
|
||||
flex-grow:1;
|
||||
|
13
system.json
13
system.json
@ -51,11 +51,20 @@
|
||||
"system": "fvtt-avd12",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Weapons",
|
||||
"name": "weapons",
|
||||
"path": "packs/weapons.db",
|
||||
"system": "fvtt-avd12",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"title": "AnyVenture D12 RPG",
|
||||
"url": "https://www.uberwald.me/gitea/public/fvtt-avd12",
|
||||
"version": "10.0.15",
|
||||
"download": "https://www.uberwald.me/gitea/public/fvtt-avd12/archive/fvtt-avd12-v10.0.15.zip",
|
||||
"version": "10.0.18",
|
||||
"download": "https://www.uberwald.me/gitea/public/fvtt-avd12/archive/fvtt-avd12-v10.0.18.zip",
|
||||
"background": "systems/fvtt-avd12/images/ui/avd12_welcome_page.webp"
|
||||
}
|
@ -191,7 +191,7 @@
|
||||
"focus": {
|
||||
"focuspoints": 0,
|
||||
"focusregen": 0,
|
||||
"currentFocusPoints": 0
|
||||
"currentfocuspoints": 0
|
||||
},
|
||||
"lifeline": {
|
||||
"value": 0,
|
||||
@ -438,6 +438,8 @@
|
||||
"school": "",
|
||||
"damage": "",
|
||||
"damagetype": "",
|
||||
"damagesecondary": "",
|
||||
"damagesecondarytype": "",
|
||||
"range": 0,
|
||||
"components": "",
|
||||
"reaction": false,
|
||||
@ -455,6 +457,7 @@
|
||||
"description": ""
|
||||
},
|
||||
"shield": {
|
||||
"category": "",
|
||||
"templates": [
|
||||
"commonitem"
|
||||
],
|
||||
|
@ -17,7 +17,7 @@
|
||||
</div>
|
||||
{{#each attr.skills as |skill skillKey|}}
|
||||
<div class="flexrow">
|
||||
<span class="item-field-label-medium skill-label"><a class="roll-skill" data-attr-key="{{attrKey}}" data-skill-key="{{skillKey}}">{{upperFirst skillKey}} {{skill.finalvalue}}<i class="fa-solid fa-dice-d12"></i></a></span>
|
||||
<span class="item-field-skill skill-label"><a class="roll-skill" data-attr-key="{{attrKey}}" data-skill-key="{{skillKey}}"><i class="fa-solid fa-dice-d12"></i> {{upperFirst skillKey}} {{skill.finalvalue}}</a></span>
|
||||
<input type="checkbox" class="skill-good-checkbox" name="system.attributes.{{attrKey}}.skills.{{skillKey}}.good" {{checked skill.good}} />
|
||||
</div>
|
||||
{{/each}}
|
||||
@ -64,25 +64,11 @@
|
||||
|
||||
<span class="item-name-label-header-short">Health</span>
|
||||
<input type="text" class="item-field-label-short" name="system.health.value" value="{{system.health.value}}" data-dtype="Number"/> /
|
||||
<input type="text" class="item-field-label-short" name="system.health.max" value="{{system.health.max}}" data-dtype="Number"/>
|
||||
<input type="text" class="item-field-label-short" name="system.health.max" value="{{system.health.max}}" data-dtype="Number" disabled/>
|
||||
|
||||
<span class="item-name-label-header-medium"> </span>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="item flexrow list-item">
|
||||
<span class="item-name-label-header-short">Focus Regen</span>
|
||||
<input type="text" class="item-field-label-short" value="{{focusData.focusRegen}}" data-dtype="Number" disabled/>
|
||||
|
||||
|
||||
<span class="item-name-label-header-short"> </span>
|
||||
|
||||
<span class="item-name-label-header-short">Focus Points</span>
|
||||
<input type="text" class="item-field-label-short" value="{{focusData.currentFocusPoints}}" data-dtype="Number" disabled/> /
|
||||
<input type="text" class="item-field-label-short" value="{{focusData.focusPoints}}" data-dtype="Number" disabled/>
|
||||
|
||||
<span class="item-name-label-header-medium"> </span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="grid-2col">
|
||||
@ -123,7 +109,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Combat Tab --}}
|
||||
{{!-- Modules Tab --}}
|
||||
<div class="tab modules" data-group="primary" data-tab="modules">
|
||||
|
||||
<div class="flexcol">
|
||||
@ -156,6 +142,22 @@
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item">
|
||||
<span class="item-name-label-header-short">Focus Regen</span>
|
||||
<input type="text" class="item-field-label-short" value="{{system.focus.focusregen}}" data-dtype="Number" disabled/>
|
||||
|
||||
|
||||
<span class="item-name-label-header-short"> </span>
|
||||
|
||||
<span class="item-name-label-header-short">Focus Points</span>
|
||||
<input type="text" class="item-field-label-short" name="system.focus.currentfocuspoints" value="{{system.focus.currentfocuspoints}}" data-dtype="Number"/> /
|
||||
<input type="text" class="item-field-label-short" value="{{system.focus.focuspoints}}" data-dtype="Number" disabled/>
|
||||
|
||||
<span class="item-name-label-header-medium"> </span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
@ -174,7 +176,7 @@
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{spell.img}}" /></a>
|
||||
<span class="item-name-label">
|
||||
<a class="roll-spell">{{spell.name}} <i class="fa-solid fa-dice-d12"></i></a>
|
||||
<a class="roll-spell"><i class="fa-solid fa-dice-d12"> </i>{{spell.name}}</a>
|
||||
</span>
|
||||
<span class="item-field-label-medium">{{upperFirst spell.system.spelltype}}</span>
|
||||
<span class="item-field-label-medium">{{upperFirst spell.system.level}}</span>
|
||||
@ -195,6 +197,34 @@
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header item-name-label-header-long2">
|
||||
<h3><label class="item-name-label-header-long2">Equipped Weapons</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Damage</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Critical</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Brutal</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each equippedWeapons as |weapon key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{weapon._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{weapon.img}}" /></a>
|
||||
<span class="item-name-label-long2"><a class="roll-weapon"><i class="fa-solid fa-dice-d12"></i>{{weapon.name}}</a></span>
|
||||
<span class="item-field-label-long"><label><a class="roll-weapon-damage" data-damage="normal"><i class="fa-solid fa-dice-d12"></i>{{weapon.system.damages.primary.normal}}</label></a></span>
|
||||
<span class="item-field-label-long"><label><a class="roll-weapon-damage" data-damage="critical"><i class="fa-solid fa-dice-d12"></i>{{weapon.system.damages.primary.critical}}</label></a></span>
|
||||
<span class="item-field-label-long"><label><a class="roll-weapon-damage" data-damage="brutal"><i class="fa-solid fa-dice-d12"></i>{{weapon.system.damages.primary.brutal}}</label></a></span>
|
||||
<div class="item-filler"> </div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
@ -223,7 +253,6 @@
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
34
templates/chat/chat-damage-result.hbs
Normal file
34
templates/chat/chat-damage-result.hbs
Normal file
@ -0,0 +1,34 @@
|
||||
<div class="chat-message-header">
|
||||
{{#if actorImg}}
|
||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
||||
{{/if}}
|
||||
<h4 class=chat-actor-name>{{alias}}</h4>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
{{#if img}}
|
||||
<div >
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexcol">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
|
||||
<li>Weapon : {{weapon.name}}
|
||||
</li>
|
||||
<li>Damage formula : {{damageFormula}} ({{upperFirst damageType}})
|
||||
</li>
|
||||
<li>Damage type : {{upperFirst weapon.system.damages.primary.damagetype}}
|
||||
</li>
|
||||
<li>Total : {{roll.total}}
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
@ -23,6 +23,13 @@
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if spell}}
|
||||
<li>Spell : {{spell.name}} ({{spell.system.level}})
|
||||
</li>
|
||||
<li>Focus Points Spent : {{spellCost}}
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
<li>Dice Formula {{diceFormula}} </li>
|
||||
<li>Result {{roll.total}} </li>
|
||||
|
||||
|
28
templates/chat/chat-utility-spell.hbs
Normal file
28
templates/chat/chat-utility-spell.hbs
Normal file
@ -0,0 +1,28 @@
|
||||
<div class="chat-message-header">
|
||||
{{#if actorImg}}
|
||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
||||
{{/if}}
|
||||
<h4 class=chat-actor-name>{{alias}}</h4>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
{{#if img}}
|
||||
<div >
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexcol">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
<li>Utility Spell {{spell.name}} has been casted !
|
||||
</li>
|
||||
<li>Focus Points Spent : {{spellCost}}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
@ -15,6 +15,13 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if weapon}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Weapon Attack Bonus : </span>
|
||||
<span class="roll-dialog-label">{{weapon.attackBonus}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if spell}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Spell : </span>
|
||||
@ -47,6 +54,9 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#if spell}}
|
||||
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Target check : </span>
|
||||
<select id="targetCheck" name="targetCheck">
|
||||
@ -60,6 +70,7 @@
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
|
@ -21,6 +21,15 @@
|
||||
|
||||
{{> systems/fvtt-avd12/templates/items/partial-common-item-fields.hbs}}
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Shield type</label>
|
||||
<select class="item-field-label-long" type="text" name="system.category" value="{{system.category}}" data-dtype="String">
|
||||
{{#select system.category}}
|
||||
{{> systems/fvtt-avd12/templates/items/partial-options-shield-types.hbs}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Equipped</label>
|
||||
<input type="checkbox" class="item-field-label-short" name="system.equipped" {{checked system.equipped}} />
|
||||
|
@ -69,6 +69,20 @@
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Secondary Damage</label>
|
||||
<input type="text" class="item-field-label-short" name="system.damagesecondary" value="{{system.damagesecondary}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Secondary Damage Type</label>
|
||||
<select class="item-field-label-long" type="text" name="system.damagesecondarytype" value="{{system.damagesecondarytype}}" data-dtype="String">
|
||||
{{#select system.damagetype}}
|
||||
{{> systems/fvtt-avd12/templates/items/partial-options-damage-types.hbs}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Range</label>
|
||||
<input type="text" class="item-field-label-short" name="system.range" value="{{system.range}}" data-dtype="Number"/>
|
||||
|
@ -90,15 +90,15 @@
|
||||
<label class="item-field-label-long">{{upperFirst key}}</label>
|
||||
<div class="flexrow">
|
||||
<label class="item-field-label-short">Type</label>
|
||||
<select class="item-field-label-long" type="text" name="system.damages.{{key}}.damagetype" value="{{system.damagetype}}" data-dtype="String">
|
||||
{{#select system.damagetype}}
|
||||
<select class="item-field-label-long" type="text" name="system.damages.{{key}}.damagetype" value="{{damage.damagetype}}" data-dtype="String">
|
||||
{{#select damage.damagetype}}
|
||||
{{> systems/fvtt-avd12/templates/items/partial-options-damage-types.hbs}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<label class="item-field-label-short">Dice</label>
|
||||
<input type="text" class="item-field-label-short" name="system.damages.{{key}}.dice" value="{{damage.dice}}" data-dtype="Number"/>
|
||||
<input type="text" class="item-field-label-short" name="system.damages.{{key}}.dice" value="{{damage.dice}}" data-dtype="String"/>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<label class="item-field-label-short">Bonus</label>
|
||||
|
2
templates/items/partial-options-shield-types.hbs
Normal file
2
templates/items/partial-options-shield-types.hbs
Normal file
@ -0,0 +1,2 @@
|
||||
<option value="lightshield">Light Shield</option>
|
||||
<option value="heavyshield">Heavy Shield</option>
|
@ -3,3 +3,4 @@
|
||||
<option value="blunt">Blunt</option>
|
||||
<option value="slash">Slash</option>
|
||||
<option value="pierce">Pierce</option>
|
||||
<option value="crush">Crush</option>
|
||||
|
Reference in New Issue
Block a user