78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
import CthulhuEternalUtils from "../utils.mjs"
|
|
|
|
export default class CthulhuEternalActor extends Actor {
|
|
|
|
static async create(data, options) {
|
|
|
|
// Case of compendium global import
|
|
if (data instanceof Array) {
|
|
return super.create(data, options);
|
|
}
|
|
// If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic
|
|
if (data.items) {
|
|
let actor = super.create(data, options);
|
|
return actor;
|
|
}
|
|
|
|
if (data.type === 'protagonist') {
|
|
let era = game.settings.get("fvtt-cthulhu-eternal", "settings-era")
|
|
const skills = await CthulhuEternalUtils.loadCompendium("fvtt-cthulhu-eternal.skills")
|
|
data.items = data.items || []
|
|
for (let skill of skills) {
|
|
if (skill.system.settings === era) {
|
|
data.items.push(skill.toObject())
|
|
}
|
|
}
|
|
}
|
|
|
|
return super.create(data, options);
|
|
}
|
|
|
|
_onUpdate(changed, options, userId) {
|
|
// DEBUG : console.log("CthulhuEternalActor.update", changed, options, userId)
|
|
if (changed?.system?.wp?.exhausted) {
|
|
ChatMessage.create({
|
|
user: userId,
|
|
speaker: { alias: this.name },
|
|
rollMode: "selfroll",
|
|
content: game.i18n.localize("CTHULHUETERNAL.ChatMessage.exhausted"),
|
|
type: CONST.CHAT_MESSAGE_STYLES.OTHER
|
|
})
|
|
}
|
|
return super._onUpdate(changed, options, userId)
|
|
}
|
|
|
|
async createEmbeddedDocuments(embeddedName, data, operation) {
|
|
let newData = []
|
|
if (embeddedName === "Item") {
|
|
for (let i of data) {
|
|
if (i.type === "skill") {
|
|
if (this.items.find(item => item.name.toLowerCase() === i.name.toLowerCase())) {
|
|
ui.notifications.warn(game.i18n.localize("CTHULHUETERNAL.Notifications.skillAlreadyExists"))
|
|
continue
|
|
}
|
|
}
|
|
newData.push(i)
|
|
}
|
|
return super.createEmbeddedDocuments(embeddedName, newData, operation)
|
|
}
|
|
return super.createEmbeddedDocuments(embeddedName, data, operation)
|
|
}
|
|
|
|
async _preCreate(data, options, user) {
|
|
await super._preCreate(data, options, user)
|
|
|
|
// Configure prototype token settings
|
|
const prototypeToken = {}
|
|
if (this.type === "protagonist") {
|
|
Object.assign(prototypeToken, {
|
|
sight: { enabled: true },
|
|
actorLink: true,
|
|
disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY,
|
|
})
|
|
this.updateSource({ prototypeToken })
|
|
}
|
|
}
|
|
|
|
}
|