forked from public/foundryvtt-reve-de-dragon
Fin de gestion encaissement/recul V2
This commit is contained in:
@@ -118,8 +118,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
||||
.filter(it => it != undefined);
|
||||
}
|
||||
|
||||
|
||||
async computeArmure(attackerRoll) { return this.getProtectionNaturelle() }
|
||||
async computeArmure(dmg) { return this.getProtectionNaturelle() }
|
||||
async remiseANeuf() { }
|
||||
async appliquerAjoutExperience(rollData, hideChatMessage = 'show') { }
|
||||
|
||||
@@ -227,12 +226,12 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
||||
isEffectAllowed(effectId) { return false }
|
||||
|
||||
getEffects(filter = e => true, forceRequise = undefined) {
|
||||
const effects = this.getEmbeddedCollection("ActiveEffect").filter(filter)
|
||||
const effects = this.getEmbeddedCollection("ActiveEffect")
|
||||
const selected = effects.filter(filter)
|
||||
if (forceRequise && this.isForceInsuffisante(forceRequise)) {
|
||||
/// TODO
|
||||
effects.push(StatusEffects.prepareActiveEffect(STATUSES.StatusForceWeak))
|
||||
selected.push(StatusEffects.prepareActiveEffect(STATUSES.StatusForceWeak))
|
||||
}
|
||||
return effects
|
||||
return selected
|
||||
}
|
||||
|
||||
getEffectByStatus(statusId) {
|
||||
@@ -257,7 +256,8 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
||||
|
||||
async removeEffects(filter = e => true) {
|
||||
if (game.user.isGM) {
|
||||
const ids = this.getEffects(filter).map(it => it.id);
|
||||
const effectsToRemove = this.getEffects(filter);
|
||||
const ids = effectsToRemove.map(it => it.id);
|
||||
await this.deleteEmbeddedDocuments('ActiveEffect', ids);
|
||||
}
|
||||
}
|
||||
@@ -495,29 +495,37 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
||||
/* -------------------------------------------- */
|
||||
async encaisser() { await RdDEncaisser.encaisser(this) }
|
||||
|
||||
async encaisserDommages(rollData, attacker = undefined, show = undefined, attackerToken = undefined, defenderToken = undefined) {
|
||||
async encaisserDommages(dmg, attacker = undefined, show = undefined, attackerToken = undefined, defenderToken = undefined) {
|
||||
if (attacker && !await attacker.accorder(this, 'avant-encaissement')) {
|
||||
return;
|
||||
return
|
||||
}
|
||||
const armure = await this.computeArmure(rollData);
|
||||
if (!Misc.isOwnerPlayer(this)) {
|
||||
return RdDBaseActor.remoteActorCall({
|
||||
tokenId: attackerToken?.id ?? this.token?.id,
|
||||
actorId: this.id,
|
||||
method: 'encaisserDommages', args: [dmg, attacker, show, attackerToken, defenderToken]
|
||||
})
|
||||
}
|
||||
|
||||
const armure = await this.computeArmure(dmg)
|
||||
if (ReglesOptionnelles.isUsing('validation-encaissement-gr')) {
|
||||
await this.encaisserDommagesValidationGR(rollData, armure, show, attackerToken, defenderToken);
|
||||
await this.encaisserDommagesValidationGR(dmg, armure, show, attackerToken, defenderToken);
|
||||
}
|
||||
else {
|
||||
const jet = await RdDUtility.jetEncaissement(this, rollData, armure, { showDice: SHOW_DICE });
|
||||
const jet = await RdDUtility.jetEncaissement(this, dmg, armure, { showDice: SHOW_DICE });
|
||||
await this.$onEncaissement(jet, show, attackerToken, defenderToken)
|
||||
}
|
||||
}
|
||||
|
||||
async encaisserDommagesValidationGR(rollData, armure, show, attackerToken, defenderToken) {
|
||||
async encaisserDommagesValidationGR(dmg, armure, show, attackerToken, defenderToken) {
|
||||
if (!game.user.isGM) {
|
||||
RdDBaseActor.remoteActorCall({
|
||||
tokenId: this.token?.id,
|
||||
actorId: this.id,
|
||||
method: 'encaisserDommagesValidationGR', args: [rollData, armure, show, attackerToken, defenderToken]
|
||||
method: 'encaisserDommagesValidationGR', args: [dmg, armure, show, attackerToken, defenderToken]
|
||||
})
|
||||
} else {
|
||||
DialogValidationEncaissement.validerEncaissement(this, rollData, armure,
|
||||
DialogValidationEncaissement.validerEncaissement(this, dmg, armure,
|
||||
jet => this.$onEncaissement(jet, show, attackerToken, defenderToken));
|
||||
}
|
||||
}
|
||||
@@ -554,15 +562,37 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
||||
}
|
||||
}
|
||||
|
||||
async encaisserRecul(force, dmgArme = 0) {
|
||||
const diffRecul = this.getTaille() - force - dmgArme
|
||||
const rolled = await RdDResolutionTable.roll(10, diffRecul)
|
||||
if (rolled.isSuccess) {
|
||||
return 'encaisse'
|
||||
}
|
||||
if (rolled.isETotal || (await this.rollEquilibre(diffRecul)).isEchec) {
|
||||
await this.setEffect(STATUSES.StatusProne, true)
|
||||
return 'chute'
|
||||
}
|
||||
return 'recul'
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollEquilibre(diff) {
|
||||
// TODO: accrobatie optionnelle sur jet d'équilibre?
|
||||
if (ReglesOptionnelles.isSet('acrobatie-pour-recul')){
|
||||
diff += Math.max(0, this.getCompetence('acrobatie')?.system.niveau ?? 0)
|
||||
}
|
||||
return await RdDResolutionTable.roll(this.getAgilite(), diff);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async accorder(entite, when = 'avant-encaissement') {
|
||||
if (when != game.settings.get(SYSTEM_RDD, "accorder-entite-cauchemar")
|
||||
|| entite == undefined
|
||||
|| !entite.isEntite([ENTITE_INCARNE])
|
||||
|| entite.isEntiteAccordee(this)) {
|
||||
return true;
|
||||
return true
|
||||
}
|
||||
const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.getNiveau()));
|
||||
const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.getNiveau()))
|
||||
const rollData = {
|
||||
alias: this.getAlias(),
|
||||
rolled: rolled,
|
||||
@@ -571,11 +601,11 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
||||
};
|
||||
|
||||
if (rolled.isSuccess) {
|
||||
await entite.setEntiteReveAccordee(this);
|
||||
await entite.setEntiteReveAccordee(this)
|
||||
}
|
||||
|
||||
await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-accorder-cauchemar.hbs');
|
||||
await this.appliquerAjoutExperience(rollData, true);
|
||||
await RdDRollResult.displayRollData(rollData, this, 'chat-resultat-accorder-cauchemar.hbs')
|
||||
await this.appliquerAjoutExperience(rollData, true)
|
||||
return rolled.isSuccess;
|
||||
}
|
||||
|
||||
|
@@ -1,6 +1,4 @@
|
||||
import { Grammar } from "../grammar.js";
|
||||
import { ITEM_TYPES } from "../constants.js";
|
||||
import { LIST_CARAC_AUTRES } from "../rdd-carac.js";
|
||||
import { RdDBaseActorSang } from "./base-actor-sang.js";
|
||||
|
||||
export class RdDCreature extends RdDBaseActorSang {
|
||||
@@ -45,5 +43,4 @@ export class RdDCreature extends RdDBaseActorSang {
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user