Combat initiativ
This commit is contained in:
@ -7,6 +7,7 @@ export class LethalFantasyCombatTracker extends CombatTracker {
|
||||
for (let u of data.turns) {
|
||||
let c = game.combat.combatants.get(u.id);
|
||||
u.progressionCount = c.system.progressionCount
|
||||
u.isMonster = c.actor.type === "monster"
|
||||
}
|
||||
console.log("Combat Data", data);
|
||||
return data;
|
||||
@ -107,7 +108,19 @@ export class LethalFantasyCombat extends Combat {
|
||||
let advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime;
|
||||
advanceTime += CONFIG.time.roundTime;
|
||||
let nextRound = this.round + 1;
|
||||
|
||||
|
||||
let initOK = true;
|
||||
for (let c of this.combatants) {
|
||||
if (c.initiative === null) {
|
||||
initOK = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!initOK) {
|
||||
ui.notifications.error("All combatants must have initiative rolled before the round can advance.");
|
||||
return this;
|
||||
}
|
||||
|
||||
for (let c of this.combatants) {
|
||||
if ( nextRound >= c.initiative) {
|
||||
c.update({ 'system.progressionCount': c.system.progressionCount + 1 });
|
||||
|
@ -565,8 +565,10 @@ export default class LethalFantasyRoll extends Roll {
|
||||
},
|
||||
{
|
||||
action: "cancel",
|
||||
label: "Other action, no weapon progression dice",
|
||||
callback: (event, button, dialog) => { return null; }
|
||||
label: "Other action, no progression dice",
|
||||
callback: (event, button, dialog) => {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
],
|
||||
rejectClose: false // Click on Close button will not launch an error
|
||||
@ -574,12 +576,16 @@ export default class LethalFantasyRoll extends Roll {
|
||||
|
||||
console.log("RollContext", rollContext)
|
||||
if (rollContext === null || !rollContext?.progressionDiceId) {
|
||||
let combat = game.combats.get(options.combatId)
|
||||
let combatant = combat.combatants.get(options.combatantId)
|
||||
combatant.update({ 'system.progressionCount': 1 })
|
||||
return
|
||||
}
|
||||
|
||||
// Get the weapons from the actor items
|
||||
let actor = game.actors.get(options.actorId)
|
||||
let weapon = actor.items.find(i => i.type === "weapon" && i.id === rollContext.progressionDiceId)
|
||||
let isMonster = actor.type === "monster"
|
||||
// Get the dice and roll it
|
||||
let formula = weapon.system.combatProgressionDice
|
||||
let roll = new Roll(formula)
|
||||
@ -592,7 +598,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
|
||||
if (roll.total <= max ) {
|
||||
// Notify that the player can act now with a chat message
|
||||
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionOK", { name: actor.name, weapon: weapon.name, roll: roll.total })
|
||||
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionOK", { isMonster, name: actor.name, weapon: weapon.name, roll: roll.total })
|
||||
ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: actor }) })
|
||||
// Update the combatant progression count
|
||||
let combat = game.combats.get(options.combatId)
|
||||
@ -600,7 +606,7 @@ export default class LethalFantasyRoll extends Roll {
|
||||
combatant.update({ 'system.progressionCount': 0 })
|
||||
} else {
|
||||
// Notify that the player cannot act now with a chat message
|
||||
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionKO", { name: actor.name, weapon: weapon.name, roll: roll.total })
|
||||
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionKO", { isMonster, name: actor.name, weapon: weapon.name, roll: roll.total })
|
||||
ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: actor }) })
|
||||
}
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
|
||||
let roll = new Roll("1D8")
|
||||
await roll.evaluate()
|
||||
let max = rollProgressionCount
|
||||
let msg = await roll.toMessage({ flavor: `Progression Roll for ${this.parent.name}, progression count : ${rollProgressionCount}/${max}` } )
|
||||
let msg = await roll.toMessage({ flavor: `Progression Roll for ${this.parent.name}` } )
|
||||
await game.dice3d.waitFor3DAnimationByMessageID(msg.id)
|
||||
|
||||
let hasAttack = false
|
||||
@ -181,16 +181,12 @@ export default class LethalFantasyMonster extends foundry.abstract.TypeDataModel
|
||||
let attack = this.attacks[key]
|
||||
if (attack.attackScore > 0 && attack.attackScore === roll.total) {
|
||||
hasAttack = true
|
||||
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionOK", { name: this.parent.name, weapon: attack.name, roll: roll.total })
|
||||
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionOKMonster", { isMonster: true, name: this.parent.name, weapon: attack.name, roll: roll.total })
|
||||
ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: this.parent }) })
|
||||
// Update the combatant progression count
|
||||
let combat = game.combats.get(combatId)
|
||||
let combatant = combat.combatants.get(combatantId)
|
||||
combatant.update({ 'system.progressionCount': 0 })
|
||||
}
|
||||
}
|
||||
if (!hasAttack) {
|
||||
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionKO", { name: this.parent.name, roll: roll.total })
|
||||
let message = game.i18n.format("LETHALFANTASY.Notifications.messageProgressionKOMonster", { isMonster: true, name: this.parent.name, roll: roll.total })
|
||||
ChatMessage.create({ content: message, speaker: ChatMessage.getSpeaker({ actor: this.parent }) })
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user