Adds gear and spells as items.

Adds custom roll logic, inclusing chat message.
This commit is contained in:
mstein
2022-06-19 00:18:41 +02:00
parent ca82fa119f
commit 8b6bfd2efb
33 changed files with 1334 additions and 482 deletions
+81 -6
View File
@@ -25,10 +25,12 @@ export interface M5CharacterCalculatedData {
resistanceBody: number
spellCasting: number
brawl: number
brawlEw: number
poisonResistance: number
enduranceBonus: number
}
skills: {
innate: {}
general: {}
combat: {}
language: {}
@@ -36,9 +38,11 @@ export interface M5CharacterCalculatedData {
}
gear: {
weapons: {}
defensiveWeapons: {}
armor: {}
items: {}
}
spells: {}
}
export class M5Character extends Actor {
@@ -68,7 +72,7 @@ export class M5Character extends Actor {
return -2
}
derivedData(skipSkills: boolean, skipWeapons: boolean): M5CharacterCalculatedData {
derivedData(skip: { skills?: boolean, weapons?: boolean, defensiveWeapons?: boolean, armor?: boolean, items?: boolean, spells?: boolean } = {} ): M5CharacterCalculatedData {
let ret: M5CharacterCalculatedData = {
level: 0,
attributes: {
@@ -93,10 +97,12 @@ export class M5Character extends Actor {
resistanceBody: 0,
spellCasting: 0,
brawl: 0,
brawlEw: 0,
poisonResistance: 0,
enduranceBonus: 0
},
skills: {
innate: {},
general: {},
combat: {},
language: {},
@@ -104,9 +110,11 @@ export class M5Character extends Actor {
},
gear: {
weapons: {},
defensiveWeapons: {},
armor: {},
items: {}
}
},
spells: {}
} as M5CharacterCalculatedData
const context = (this as any).data
@@ -143,10 +151,11 @@ export class M5Character extends Actor {
ret.stats.resistanceBody = ret.stats.defense + 1
ret.stats.spellCasting = (data.info.magicUsing ? M5Character.spellCastingFromLevel(ret.level) : 3) + ret.attributes.zt.bonus
ret.stats.brawl = Math.floor((ret.attributes.st.value + ret.attributes.gw.value) / 20)
ret.stats.brawlEw = ret.stats.brawl + ret.stats.attackBonus
ret.stats.poisonResistance = 30 + Math.floor(ret.attributes.ko.value / 2)
ret.stats.enduranceBonus = Math.floor(ret.attributes.ko.value/10) + Math.floor(ret.attributes.st.value/20)
if (!skipSkills) {
if (!skip.skills) {
context.items?.filter(item => item.data.type === "skill").forEach(item => {
item.prepareDerivedData()
const skillMap = ret.skills[item.data.data.type]
@@ -159,7 +168,7 @@ export class M5Character extends Actor {
})
}
if (!skipWeapons) {
if (!skip.weapons) {
context.items?.filter(item => item.data.type === "weapon").forEach(item => {
item.prepareDerivedData()
@@ -175,25 +184,91 @@ export class M5Character extends Actor {
ret.gear.weapons[item.data._id] = {
label: label,
skillId: item.data.data.skillId,
defensive: item.data.data.defensive,
magic: item.data.data.magic,
calc: item.data.data.calc
}
})
}
if (!skip.defensiveWeapons) {
context.items?.filter(item => item.data.type === "defensiveWeapon").forEach(item => {
item.prepareDerivedData()
let label = item.data.name
if (item.data.data.magic) {
label += "*("
+ (item.data.data.stats.defenseBonus < 0 ? "" : "+")
+ item.data.data.stats.defenseBonus + ")"
}
ret.gear.defensiveWeapons[item.data._id] = {
label: label,
skillId: item.data.data.skillId,
magic: item.data.data.magic,
calc: item.data.data.calc
}
})
}
if (!skip.armor) {
context.items?.filter(item => item.data.type === "armor").forEach(item => {
item.prepareDerivedData()
let label = item.data.name
if (item.data.data.magic) {
label += "*"
}
ret.gear.armor[item.data._id] = {
label: label,
magic: item.data.data.magic,
calc: item.data.data.calc
}
})
}
if (!skip.items) {
context.items?.filter(item => item.data.type === "item").forEach(item => {
item.prepareDerivedData()
let label = item.data.name
if (item.data.data.magic) {
label += "*"
}
ret.gear.items[item.data._id] = {
label: label,
magic: item.data.data.magic,
calc: item.data.data.calc
}
})
}
if (!skip.spells) {
context.items?.filter(item => item.data.type === "spell").forEach(item => {
item.prepareDerivedData()
ret.spells[item.data._id] = {
label: item.data.name,
process: "midgard5.spell-process-" + item.data.data.process,
calc: item.data.data.calc
}
})
}
return ret
}
prepareDerivedData() {
const context = (this as any).data
context.data.calc = this.derivedData(false, false)
context.data.calc = this.derivedData({})
}
override getRollData(): any {
return {
c: (this as any).data.data,
i: null,
iType: null,
rolls: {},
res: {}
} as M5RollData