114 lines
5.7 KiB
JavaScript
114 lines
5.7 KiB
JavaScript
import {ActionManager} from "../actions/action-manager.mjs";
|
|
|
|
export default {
|
|
_prepareContext: async (context, object) => {
|
|
|
|
const actorData = context.document
|
|
context.system = actorData.system
|
|
context.flags = actorData.flags
|
|
context.derived = context.document.system
|
|
context.originalName = actorData.name
|
|
context.name = context.derived.name ?? actorData.name
|
|
context.effects = actorData.effects ?? []
|
|
|
|
const findEquipmentOnSlot = (slot, setNumber, object) => {
|
|
return object.items.get(object.system.heldenausruestung[setNumber]?.[slot])
|
|
}
|
|
|
|
const am = new ActionManager(actorData)
|
|
context.actions = am.evaluate()
|
|
|
|
|
|
context.inidice = actorData.system.ini.wuerfel
|
|
context.inivalue = actorData.system.ini.aktuell
|
|
context.inimod = actorData.system.ini.mod
|
|
|
|
context.aupper = Math.min((actorData.system.aup.aktuell / actorData.system.aup.max) * 100, 100)
|
|
context.lepper = Math.min((actorData.system.lep.aktuell / actorData.system.lep.max) * 100, 100)
|
|
context.keper = Math.min((actorData.system.kap.aktuell / actorData.system.kap.max) * 100, 100)
|
|
context.aspper = Math.min((actorData.system.asp.aktuell / actorData.system.asp.max) * 100, 100)
|
|
context.lepcurrent = actorData.system.lep.aktuell ?? 0
|
|
|
|
context.aupcurrent = actorData.system.aup.aktuell ?? 0
|
|
|
|
const fernkampf = findEquipmentOnSlot("fernkampf", actorData.system.setEquipped, actorData)
|
|
const links = findEquipmentOnSlot("links", actorData.system.setEquipped, actorData)
|
|
const rechts = findEquipmentOnSlot("rechts", actorData.system.setEquipped, actorData)
|
|
context.attacks = [];
|
|
|
|
if (fernkampf) {
|
|
const fkitems = fernkampf.system.rangedSkills.map((skillInQuestion) => actorData.items.find(p => p.name === skillInQuestion))
|
|
fkitems.forEach(async skill => {
|
|
const obj = await skill
|
|
context.attacks.push({
|
|
name: obj.name,
|
|
using: fernkampf.name,
|
|
atroll: `1d20cs<${object.system.fk.aktuell + obj.system.at}`,
|
|
at: `${object.system.fk.aktuell + obj.system.at}`,
|
|
tproll: `${fernkampf.system.rangedAttackDamage}`, // TODO consider adding TP/KK mod and Range mod
|
|
tp: `${fernkampf.system.rangedAttackDamage}`,
|
|
iniroll: `(${context.inidice})d6 + ${context.inivalue + fernkampf.system.iniModifier ?? 0}`,
|
|
ini: `${context.inidice}w6 + ${context.inivalue + fernkampf.system.iniModifier ?? 0}`,
|
|
})
|
|
})
|
|
}
|
|
if (links) {
|
|
const meitems = []
|
|
links.system.meleeSkills.forEach((skillInQuestion) => {
|
|
const item = actorData.items.find(p => p.name === skillInQuestion)
|
|
if (item) {
|
|
meitems.push(item)
|
|
}
|
|
})
|
|
meitems.forEach(skill => {
|
|
const obj = skill
|
|
context.attacks.push({
|
|
name: obj.name,
|
|
using: links.name,
|
|
atroll: `1d20cs<${object.system.at.links.aktuell + obj.system.at + links.system.attackModifier}`, // TODO consider adding W/M
|
|
at: `${object.system.at.links.aktuell + obj.system.at + links.system.attackModifier}`,
|
|
paroll: `1d20cs<${object.system.pa.links.aktuell + obj.system.pa + links.system.parryModifier}`, // TODO consider adding W/M
|
|
pa: `${object.system.pa.links.aktuell + obj.system.pa + links.system.parryModifier}`,
|
|
tproll: `${links.system.meleeAttackDamage}`, // TODO consider adding TP/KK mod
|
|
tp: `${links.system.meleeAttackDamage}`,
|
|
iniroll: `(${context.inidice})d6 + ${context.inivalue + links.system.iniModifier ?? 0}`,
|
|
ini: `${context.inidice}w6 + ${context.inivalue + links.system.iniModifier ?? 0}`,
|
|
})
|
|
})
|
|
}
|
|
if (rechts) {
|
|
const meitems = []
|
|
rechts.system.meleeSkills.forEach((skillInQuestion) => {
|
|
const item = actorData.items.find(p => p.name === skillInQuestion)
|
|
if (item) {
|
|
meitems.push(item)
|
|
}
|
|
})
|
|
meitems.forEach(skill => {
|
|
const obj = skill
|
|
context.attacks.push({
|
|
name: obj.name,
|
|
using: rechts.name,
|
|
atroll: `1d20cs<${object.system.at.rechts.aktuell + obj.system.at + rechts.system.attackModifier}`, // TODO consider adding W/M
|
|
at: `${object.system.at.rechts.aktuell + obj.system.at + rechts.system.attackModifier}`,
|
|
paroll: `1d20cs<${object.system.pa.rechts.aktuell + obj.system.pa + rechts.system.parryModifier}`, // TODO consider adding W/M
|
|
pa: `${object.system.pa.rechts.aktuell + obj.system.pa + rechts.system.parryModifier}`,
|
|
tproll: `${rechts.system.meleeAttackDamage}`, // TODO consider adding TP/KK mod
|
|
tp: `${rechts.system.meleeAttackDamage}`,
|
|
iniroll: `(${context.inidice})d6 + ${context.inivalue + rechts.system.iniModifier ?? 0}`,
|
|
ini: `${context.inidice}w6 + ${context.inivalue + rechts.system.iniModifier ?? 0}`,
|
|
})
|
|
})
|
|
}
|
|
|
|
return context
|
|
|
|
},
|
|
_onRender: (context, options) => {
|
|
|
|
},
|
|
_getTabConfig: (group) => {
|
|
group.tabs.push({id: "combat", group: "sheet", label: "Kampf"})
|
|
},
|
|
template: `systems/DSA_4-1/templates/actor/character/tab-combat.hbs`
|
|
} |