Adds mod management (WIP)

This commit is contained in:
mstein
2022-07-05 00:10:08 +02:00
parent 8b6bfd2efb
commit c8d59588e0
18 changed files with 1181 additions and 171 deletions
+31 -67
View File
@@ -1,49 +1,5 @@
import { M5Item } from "../items/M5Item"
import { M5Attribute, M5RollData, M5Skill, M5SkillLearned } from "../M5Base"
export interface M5CharacterCalculatedData {
level: number
attributes: {
st: { value: number, bonus: number }
gs: { value: number, bonus: number }
gw: { value: number, bonus: number }
ko: { value: number, bonus: number }
in: { value: number, bonus: number }
zt: { value: number, bonus: number }
au: { value: number, bonus: number }
pa: { value: number, bonus: number }
wk: { value: number, bonus: number }
}
stats: {
armor: number
defense: number
damageBonus: number
attackBonus: number
defenseBonus: number
movementBonus: number
resistanceMind: number
resistanceBody: number
spellCasting: number
brawl: number
brawlEw: number
poisonResistance: number
enduranceBonus: number
}
skills: {
innate: {}
general: {}
combat: {}
language: {}
custom: {}
}
gear: {
weapons: {}
defensiveWeapons: {}
armor: {}
items: {}
}
spells: {}
}
import { M5Attribute, M5CharacterCalculatedData, M5RollData, M5Skill, M5SkillCalculated, M5SkillLearned } from "../M5Base"
export class M5Character extends Actor {
@@ -118,7 +74,13 @@ export class M5Character extends Actor {
} as M5CharacterCalculatedData
const context = (this as any).data
if (!context)
return null
const data = context.data
if (!data)
return null
ret.level = M5Character.levelFromExp(data.es)
ret.attributes.st.value = M5Character.attributeMinMax(data.attributes.st) // TODO item effects
@@ -155,6 +117,23 @@ export class M5Character extends Actor {
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 (!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.skills) {
context.items?.filter(item => item.data.type === "skill").forEach(item => {
item.prepareDerivedData()
@@ -164,7 +143,7 @@ export class M5Character extends Actor {
fw: item.data.data.fw,
attribute: item.data.data.attribute,
calc: item.data.data.calc
}
} as M5SkillCalculated
})
}
@@ -227,23 +206,6 @@ export class M5Character extends Actor {
})
}
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()
@@ -323,7 +285,7 @@ export class M5Character extends Actor {
attribute(name: string): M5Attribute {
const context = (this as any).data
return context.data.attributes[name]
return context?.data?.attributes[name]
}
createSkill(skillName: string): Promise<M5Item> {
@@ -334,12 +296,14 @@ export class M5Character extends Actor {
return (this as any).createEmbeddedDocuments("Item", [itemData]).then(docs => {
const item = docs[0]
return item as M5Item
return item
})
}
getSkill(skillId: string): M5Skill {
return (this as any).getEmbeddedDocument("Item", skillId) as M5Skill
getItem(itemId: string): any {
if (!(this as any).data?.items)
return null
return (this as any).getEmbeddedDocument("Item", itemId)
}
}