forked from public/bol
101 lines
3.4 KiB
JavaScript
101 lines
3.4 KiB
JavaScript
/*
|
|
Init order =
|
|
10 - Legendary
|
|
9 - Heroic
|
|
8 - Success
|
|
7 - Rivals/adversary
|
|
6 - Coriaces/tough
|
|
5 - Failure
|
|
4 - Pietaille
|
|
3 - Echec critique
|
|
*/
|
|
|
|
import { BoLUtility } from "../system/bol-utility.js";
|
|
|
|
|
|
export class BoLCombatManager extends Combat {
|
|
|
|
/************************************************************************************/
|
|
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
|
console.log(`${game.system.title} | Combat.rollInitiative()`, ids, formula, messageOptions);
|
|
// Structure input data
|
|
ids = typeof ids === "string" ? [ids] : ids;
|
|
// Get initiative malus from tough/adversary
|
|
let malusInit = 0
|
|
for (let combatant of this.combatants) {
|
|
malusInit = Math.max(malusInit, combatant.actor.getInitiativeMalus())
|
|
}
|
|
// calculate initiative
|
|
for (let cId = 0; cId < ids.length; cId++) {
|
|
const combatant = this.combatants.get(ids[cId])
|
|
let fvttInit = combatant.actor.getInitiativeRank(false, true, { combatId: this.id, combatantId: combatant.id, malusInit })
|
|
fvttInit += (cId / 100)
|
|
await this.updateEmbeddedDocuments("Combatant", [{ _id: ids[cId], initiative: fvttInit }]);
|
|
}
|
|
}
|
|
|
|
/************************************************************************************/
|
|
nextRound() {
|
|
if (game.user.isGM) {
|
|
let combatants = this.combatants.contents
|
|
let autoRemoveDead = game.settings.get("bol", "auto-remove-dead") // Optionnal auto-removal of dead char.
|
|
let updates = []
|
|
for (let c of combatants) {
|
|
if (c.actor.type == "horde") {
|
|
let actor = game.actors.get(c.actorId)
|
|
updates.push({ _id: c.id, name: actor.name + " (" + actor.system.hordesize + ")" })
|
|
}
|
|
c.actor.clearRoundModifiers()
|
|
let toRemove = []
|
|
if (autoRemoveDead && c.actor.type == "encounter" &&
|
|
(c.actor.system.chartype == "tough" || c.actor.system.chartype == "creature" || c.actor.system.chartype == "base") && c.actor.system.resources.hp.value <= 0) {
|
|
toRemove.push(c.id || c._id)
|
|
}
|
|
//console.log("REM", autoRemoveDead, toRemove, c.actor)
|
|
if (toRemove.length > 0) {
|
|
this.deleteEmbeddedDocuments('Combatant', toRemove)
|
|
}
|
|
if (updates.length > 0) {
|
|
this.updateEmbeddedDocuments('Combatant', updates)
|
|
}
|
|
}
|
|
}
|
|
super.nextRound()
|
|
}
|
|
|
|
/************************************************************************************/
|
|
startCombat() {
|
|
if (game.user.isGM) {
|
|
let updates = []
|
|
let combatants = this.combatants.contents
|
|
for (let c of combatants) {
|
|
let actor = game.actors.get(c.actorId)
|
|
actor.storeVitaliteCombat()
|
|
if (c.actor.type == "horde") {
|
|
let actor = game.actors.get(c.actorId)
|
|
updates.push({ _id: c.id, name: actor.name + " (" + actor.system.hordesize + ")" })
|
|
}
|
|
}
|
|
if (updates.length > 0) {
|
|
this.updateEmbeddedDocuments('Combatant', updates)
|
|
}
|
|
}
|
|
return super.startCombat()
|
|
}
|
|
|
|
/*-***********************************************************************************/
|
|
_onDelete() {
|
|
if (game.user.isGM) {
|
|
let combatants = this.combatants.contents
|
|
for (let c of combatants) {
|
|
let actor = game.actors.get(c.actorId)
|
|
actor.clearInitiative()
|
|
actor.displayRecuperation()
|
|
}
|
|
}
|
|
super._onDelete()
|
|
}
|
|
|
|
}
|
|
|