Adds gear and spells as items.
Adds custom roll logic, inclusing chat message.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user