Adds mod management (WIP)
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user