Correction initiative et meilleur affichage sur jet D20
All checks were successful
Release Creation / build (release) Successful in 51s

This commit is contained in:
2026-03-10 20:50:43 +01:00
parent f0a74d5daa
commit 71b384c963
101 changed files with 287 additions and 240 deletions

View File

@@ -34,7 +34,7 @@ export default class HawkmoonActorSheet extends HandlebarsApplicationMixin(found
},
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: "form" }],
actions: {
editImage: HawkmoonActorSheet.#onEditImage,
//editImage: HawkmoonActorSheet.#onEditImage,
toggleSheet: HawkmoonActorSheet.#onToggleSheet,
editItem: HawkmoonActorSheet.#onEditItem,
deleteItem: HawkmoonActorSheet.#onDeleteItem,
@@ -335,7 +335,7 @@ export default class HawkmoonActorSheet extends HandlebarsApplicationMixin(found
* @private
*/
static async #onEditImage(event, target) {
const fp = new FilePicker({
const fp = new foundry.applications.apps.FilePicker.implementation({
type: "image",
current: this.actor.img,
callback: (path) => {

View File

@@ -75,7 +75,7 @@ export class HawkmoonActor extends Actor {
let combat = this.getCombatValues()
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
let bonusDefense = this.getBonusDefenseFromTalents()
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée") ?? {system:{niveau:0}})
arme.system.attrKey = "pui"
arme.system.totalDegats = arme.system.degats + "+" + combat.bonusDegatsTotal
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + (this.system.combat.monte ? 3 : 0)
@@ -86,7 +86,7 @@ export class HawkmoonActor extends Actor {
arme.system.isDistance = false
}
if (arme.system.typearme == "jet" || arme.system.typearme == "tir") {
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance") ?? {system:{niveau:0}})
arme.system.attrKey = "adr"
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
arme.system.totalDegats = arme.system.degats
@@ -188,7 +188,8 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */
getVitesseBase() {
return 5 + __vitesseBonus[this.system.attributs.adr.value]
const idx = Math.min(this.system.attributs.adr.value, __vitesseBonus.length - 1)
return 5 + (__vitesseBonus[idx] ?? 0)
}
/* -------------------------------------------- */
getProtection() {
@@ -305,7 +306,7 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */
checkAttribut(attribut, minLevel) {
let attr = this.system.attributs.find(at => at.labelnorm == attribut.toLowerCase())
let attr = Object.values(this.system.attributs).find(at => at.labelnorm == attribut.toLowerCase())
if (attr && attr.value >= minLevel) {
return { isValid: true, attr: foundry.utils.duplicate(attr) }
}
@@ -403,12 +404,13 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */
getAttribute(attrKey) {
return this.system.attributes[attrKey]
return this.system.attributs[attrKey]
}
/* -------------------------------------------- */
getBonusDegats() {
return 0;
const idx = Math.min(this.system.attributs.pui.value, __degatsBonus.length - 1)
return __degatsBonus[idx] ?? 0
}
/* -------------------------------------------- */
@@ -655,6 +657,9 @@ export class HawkmoonActor extends Actor {
let rollData = this.getCommonRollData(attrKey)
rollData.multiplier = (isInit) ? 1 : 2
rollData.isInit = isInit
if (isInit) {
rollData.initbonus = this.system.combat.initbonus ?? 0
}
await HawkmoonRollDialog.create(this, rollData)
}

View File

@@ -10,7 +10,14 @@ export class HawkmoonCombat extends Combat {
const c = this.combatants.get(cId);
console.log("Init for combattant", c, ids)
let id = c._id || c.id
let initValue = c.actor ? c.actor.getInitiativeScore() : 0
let initValue = 0
if (c.actor) {
const combat = c.actor.getCombatValues()
const roll = await new Roll(`1d10 + ${combat.initTotal}`).roll()
await HawkmoonUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"))
initValue = roll.total
await c.actor.setFlag("world", "last-initiative", initValue)
}
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: initValue } ]);
}

View File

@@ -89,7 +89,7 @@ export class HawkmoonCommands {
if (command && command.func) {
const result = command.func(content, msg, params);
if (result == false) {
RdDCommands._chatAnswer(msg, command.descr);
HawkmoonCommands._chatAnswer(msg, command.descr);
}
return true;
}
@@ -98,8 +98,8 @@ export class HawkmoonCommands {
/* -------------------------------------------- */
async createChar(msg) {
game.system.Hawkmoon.creator = new HawkmoonActorCreate();
game.system.Hawkmoon.creator.start();
game.system.hawkmoon.creator = new HawkmoonActorCreate();
game.system.hawkmoon.creator.start();
}
/* -------------------------------------------- */

View File

@@ -199,7 +199,7 @@ Hooks.on("chatMessage", (html, content, msg) => {
if (content[0] == '/') {
let regExp = /(\S+)/g;
let commands = content.match(regExp);
if (game.system.mournblade.commands.processChatCommand(commands, content, msg)) {
if (game.system.hawkmoon.commands.processChatCommand(commands, content, msg)) {
return false;
}
}

View File

@@ -370,7 +370,7 @@ export class HawkmoonUtility {
if (rollData.mainDice.includes("d20")) {
let diceValue = rollData.roll.terms[0].results[0].result
if (diceValue % 2 == 1) {
//console.log("PAIR/IMP2", diceValue)
rollData.isD20Impair = true
rollData.finalResult -= rollData.roll.terms[0].results[0].result // Substract value
if (diceValue == 1 || diceValue == 11) {
rollData.isDramatique = true
@@ -395,8 +395,8 @@ export class HawkmoonUtility {
/* -------------------------------------------- */
static applyCombativite(rollData, value) {
if (game.user.isGM) {
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
defender.changeEtatCombativite(value)
let defender = game.canvas.tokens.get(rollData.defenderTokenId)?.actor
defender?.changeEtatCombativite(value)
} else {
game.socket.emit("system.fvtt-hawkmoon-cyd", { msg: "msg_apply_combativite", data: { defenderTokenId: rollData.defenderTokenId, value } });
}
@@ -450,6 +450,9 @@ export class HawkmoonUtility {
rollData.diceFormula += `+${rollData.attr.value}+${rollData.attr2.value}+${rollData.modificateur}`
} else {
rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}`
if (rollData.isInit && rollData.initbonus) {
rollData.diceFormula += `+${rollData.initbonus}`
}
}
// Bonus arme naturelle en défense
@@ -535,8 +538,8 @@ export class HawkmoonUtility {
this.applyCombativite(rollData, rollData.nbCombativitePerdu)
}
if (rollData.coupBas && rollData.isSuccess && rollData.defenderTokenId) {
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
defender.incDecAdversite("bleue", -2)
let defender = game.canvas.tokens.get(rollData.defenderTokenId)?.actor
defender?.incDecAdversite("bleue", -2)
}
}
@@ -705,7 +708,8 @@ export class HawkmoonUtility {
}
// Utiliser la cible déjà enregistrée si aucune cible n'est actuellement sélectionnée
if (rollData.defenderTokenId) {
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
let defender = game.canvas.tokens.get(rollData.defenderTokenId)?.actor
if (!defender) return
console.log("updateWithTarget - Defender actor:", defender.name)
rollData.armeDefense = defender.getBestDefenseValue()
console.log("updateWithTarget - armeDefense:", rollData.armeDefense)