forked from public/foundryvtt-reve-de-dragon
Merge branch 'dev_1.1' of gitlab.com:LeRatierBretonnien/foundryvtt-reve-de-dragon into dev_1.1
This commit is contained in:
@ -32,9 +32,11 @@ export class RdDActorSheet extends ActorSheet {
|
||||
// Gestion du lock/unlock des zones éditables (carac+compétences)
|
||||
data.data.editCaracComp = this.options.editCaracComp;
|
||||
data.data.lockUnlockText = (this.options.editCaracComp) ? "Bloquer" : "Débloquer";
|
||||
data.data.lockUnlockIcon = (this.options.editCaracComp) ? "unlocked.svg" : "locked.svg";
|
||||
// Gestion de l'affichage total/partiel des compétences
|
||||
data.data.cacherCompetencesNiveauBase = this.options.cacherCompetencesNiveauBase;
|
||||
data.data.showHideCompetenceText = (this.options.cacherCompetencesNiveauBase) ? "Montrer tout" : "Filtrer" ;
|
||||
data.data.showHideCompetenceIcon = (this.options.cacherCompetencesNiveauBase) ? "no-filter.svg" : "filter.svg";
|
||||
|
||||
let compCategorieNiveau = RdDUtility.getLevelCategory(); // recup catégorie
|
||||
data.itemsByType = RdDUtility.buildItemsClassification(data.items);
|
||||
|
@ -126,9 +126,11 @@ export class RdDActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBonusDegat() {
|
||||
return parseInt(this.data.data.attributs.plusdom.value);
|
||||
return Misc.toInt(this.data.data.attributs.plusdom.value);
|
||||
}
|
||||
getProtectionNaturelle() {
|
||||
return Misc.toInt(this.data.data.attributs.protection.value);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCompetence(compName) {
|
||||
return RdDUtility.findCompetence(this.data.items, compName);
|
||||
@ -202,32 +204,34 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeDeteriorationArme( rollData ) {
|
||||
if ( rollData.arme && rollData.attackerRoll) { // C'est une parade
|
||||
async computeDeteriorationArme( rollData ) {
|
||||
const attackerRoll = rollData.attackerRoll;
|
||||
if (rollData.arme && attackerRoll) { // C'est une parade
|
||||
// Est-ce que l'attaque est une particulière, en force ou charge et que l'attaque n'en est pas une ?
|
||||
if ( rollData.attackerRoll.rolled.isPart
|
||||
&& ( (rollData.attackerRoll.particuliereAttaque && rollData.attackerRoll.particuliereAttaque == 'force') || rollData.attackerRoll.isCharge)
|
||||
&& !rollData.rolled.isPart ) {
|
||||
// Jet de résistance de l'arme de parade (p.132)
|
||||
let resist = RdDResolutionTable.roll( rollData.arme.data.resistance, rollData.attackerRoll.domArmePlusDom );
|
||||
if ( (rollData.needResist || attackerRoll.particuliereAttaque == 'force' || attackerRoll.isCharge)
|
||||
&& !rollData.rolled.isPart ) {
|
||||
const dmg = attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor;
|
||||
let resistance = Misc.toInt(rollData.arme.data.resistance);
|
||||
let msg = "";
|
||||
if (resist.isSuccess) { // Perte de résistance
|
||||
msg = "Jet de résistance de votre arme réussit !"
|
||||
// Jet de résistance de l'arme de parade (p.132)
|
||||
let resistRoll = await RdDResolutionTable.roll( resistance, - dmg );
|
||||
if (resistRoll.isSuccess) { // Perte de résistance
|
||||
msg = "Votre " + rollData.arme.name + " tient le choc de la parade. "
|
||||
} else {
|
||||
rollData.arme.data.resistance -= rollData.attackerRoll.domArmePlusDom;
|
||||
if ( rollData.arme.data.resistance <= 0 ) {
|
||||
resistance -= dmg;
|
||||
if ( resistance <= 0 ) {
|
||||
this.deleteEmbeddedEntity("OwnedItem", rollData.arme._id);
|
||||
msg = "Votre arme s'est brisée sous le coup de la parade : " + rollData.arme.name;
|
||||
msg = "Sous la violence de la parade, votre " + rollData.arme.name + " s'est brisée sous le coup!";
|
||||
} else {
|
||||
this.updateEmbeddedEntity("OwnedItem", {_id: rollData.arme._id, 'data.resistance': rollData.arme.data.resistance });
|
||||
msg = "Votre arme a perdu de la résistance : " + rollData.arme.name + " - " + rollData.arme.data.resistance;
|
||||
this.updateEmbeddedEntity("OwnedItem", {_id: rollData.arme._id, 'data.resistance': resistance });
|
||||
msg = "En parant, vous endommagez votre " + rollData.arme.name + ", qui perd " + dmg + " de résistance. ";
|
||||
}
|
||||
}
|
||||
// Jet de désarmement
|
||||
if ( !rollData.arme.includes('Bouclier') ) { // Si l'arme de parade n'est pas un bouclier, jet de désarmement (p.132)
|
||||
let desarme = RdDResolutionTable.roll( this.data.data.carac.force.value, Number(rollData.competence.data.niveau) + Number(rollData.attackerRoll.domArmePlusDom) );
|
||||
if ( !desarme.isSucess) {
|
||||
msg += "<br>De plus, vous êtes désarmé ! Votre arme " + rollData.arme.name + "tombe au sol à vos pieds";
|
||||
if (resistance > 0 && !rollData.arme.name.toLowerCase().includes('bouclier') ) { // Si l'arme de parade n'est pas un bouclier, jet de désarmement (p.132)
|
||||
let desarme = await RdDResolutionTable.roll( this.data.data.carac.force.value, Misc.toInt(rollData.competence.data.niveau) -dmg );
|
||||
if ( desarme.isEchec) {
|
||||
msg += "Vous ne parvenez pas à garder votre arme en main, elle tombe au sol à vos pieds";
|
||||
}
|
||||
}
|
||||
ChatMessage.create( { content: msg,
|
||||
@ -245,13 +249,13 @@ export class RdDActor extends Actor {
|
||||
let recul = await RdDResolutionTable.roll( 10, reculNiveau );
|
||||
let msg = "";
|
||||
if (recul.isSuccess) {
|
||||
msg = this.data.name + " - Jet de Recul réussi, aucun effet !";
|
||||
msg = " Vous ne reculez pas malgré la force du coup.";
|
||||
} else {
|
||||
let chute = await RdDResolutionTable.roll( this.data.data.carac.agilite.value, reculNiveau );
|
||||
if ( !chute.isSuccess || recul.isETotal ) {
|
||||
msg = this.data.name + " - Jet de Recul : Vous subissez le recul du coup, et vous chutez au sol ! Vous ne pouvez plus attaquer ce round.";
|
||||
msg = "Sous la violence du coup, vous reculez et chutez au sol ! Vous ne pouvez plus attaquer ce round.";
|
||||
} else {
|
||||
msg = this.data.name + " - Jet de Recul : Vous subissez le recul du coup, et vous reculez de quelques mètres ! Vous ne pouvez plus attaquer ce round.";
|
||||
msg = "La violence du choc vous fait reculer de quelques mètres ! Vous ne pouvez plus attaquer ce round.";
|
||||
}
|
||||
}
|
||||
ChatMessage.create( {content: msg,
|
||||
@ -280,7 +284,7 @@ export class RdDActor extends Actor {
|
||||
// In case of fight, replace the message per dommages + localization. it indicates if result is OK or not
|
||||
if (rollData.attackerRoll) { // Defense case !
|
||||
if (rolled.isSign || (!rollData.needSignificative && rolled.isSuccess)) {
|
||||
this.computeDeteriorationArme( rollData );
|
||||
await this.computeDeteriorationArme( rollData );
|
||||
explications += "<br><strong>Attaque parée/esquivée !</strong>";
|
||||
} else {
|
||||
explications += "<br><strong>Esquive/Parade échouée, encaissement !</strong>";
|
||||
@ -1882,15 +1886,18 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeArmure( locData, domArmePlusDom, arme = undefined ) {
|
||||
computeArmure( attackerRoll ) {
|
||||
let locData = attackerRoll.loc;
|
||||
let dmg = attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor;
|
||||
let arme = attackerRoll.arme;
|
||||
// TODO: arc ignore armure
|
||||
let protection = 0;
|
||||
for (const item of this.data.items) {
|
||||
if (item.type == "armure" && item.data.equipe) {
|
||||
let update = duplicate(item);
|
||||
protection += new Roll(update.data.protection.toString()).roll().total;
|
||||
update.data.deterioration += domArmePlusDom;
|
||||
domArmePlusDom = 0; // Reset it
|
||||
update.data.deterioration = Misc.toInt(update.data.deterioration) + dmg;
|
||||
dmg = 0; // Reset it
|
||||
if ( update.data.deterioration >= 10) {
|
||||
update.data.deterioration = 0;
|
||||
if ( update.data.protection.toString().length == 1 )
|
||||
@ -1905,6 +1912,7 @@ export class RdDActor extends Actor {
|
||||
this.updateEmbeddedEntity("OwnedItem", update);
|
||||
}
|
||||
}
|
||||
protection += this.getProtectionNaturelle();
|
||||
console.log("Final protect", protection);
|
||||
return protection;
|
||||
}
|
||||
@ -1916,7 +1924,7 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
console.log("encaisserDommages", attackerRoll )
|
||||
const armure = this.computeArmure( attackerRoll.loc, attackerRoll.domArmePlusDom, attackerRoll.arme);
|
||||
const armure = this.computeArmure( attackerRoll );
|
||||
|
||||
const rollEncaissement = new Roll("2d10 + @dmg - @armure",{
|
||||
dmg: attackerRoll.dmg.total,
|
||||
|
@ -74,6 +74,10 @@ export class RdDCombat {
|
||||
return;
|
||||
}
|
||||
let rollData = game.system.rdd.rollDataHandler[this.attackerId];
|
||||
if (!rollData) {
|
||||
ui.notifications.warn("Action automatisée impossible, le jet de l'attaquant a été perdu (suite à un raffraichissement?)")
|
||||
return;
|
||||
}
|
||||
// TODO: enlever le ChatMessage?
|
||||
switch (button) {
|
||||
case '#particuliere-attaque': return await this.choixParticuliere(rollData, event.currentTarget.attributes['data-mode'].value);
|
||||
@ -364,10 +368,7 @@ export class RdDCombat {
|
||||
/* -------------------------------------------- */
|
||||
async _onParadeNormale(rollData) {
|
||||
console.log("RdDCombat._onParadeNormale >>>", rollData);
|
||||
if (rollData.needResist && !rollData.rolled.isPart) {
|
||||
// TODO: déplacer la logique détérioration armure dans RdDCombat
|
||||
this.defender.computeDeteriorationArme(rollData);
|
||||
}
|
||||
await this.defender.computeDeteriorationArme(rollData);
|
||||
await this.defender.computeRecul(rollData, false);
|
||||
|
||||
let chatOptions = {
|
||||
|
Reference in New Issue
Block a user