forked from public/foundryvtt-reve-de-dragon
#42 Tchat message attaque
This commit is contained in:
@ -192,7 +192,7 @@ export class RdDCombat {
|
||||
};
|
||||
|
||||
if (this.attacker.isCreature()) {
|
||||
this._modifieRollDataCreature(rollData, competence);
|
||||
RdDItemCompetence.setRollDataCreature(rollData);
|
||||
}
|
||||
else if (arme) {
|
||||
// Usual competence
|
||||
@ -205,22 +205,6 @@ export class RdDCombat {
|
||||
return rollData;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_modifieRollDataCreature(rollData, competence) {
|
||||
competence = duplicate(competence);
|
||||
competence.data.defaut_carac = "carac_creature";
|
||||
competence.data.categorie = "creature";
|
||||
|
||||
rollData.competence = competence;
|
||||
rollData.carac = { "carac_creature": { label: competence.name, value: competence.data.carac_value } };
|
||||
rollData.arme = {
|
||||
name: competence.name, data: {
|
||||
dommages: competence.data.dommages,
|
||||
dommagesReels: competence.data.dommages
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_onAttaqueParticuliere(rollData) {
|
||||
console.log("RdDCombat.onAttaqueParticuliere >>>", rollData);
|
||||
@ -243,34 +227,15 @@ export class RdDCombat {
|
||||
/* -------------------------------------------- */
|
||||
async _onAttaqueNormale(rollData) {
|
||||
console.log("RdDCombat.onAttaqueNormale >>>", rollData);
|
||||
let explications = "";
|
||||
|
||||
rollData.dmg = RdDBonus.dmg(rollData, this.attacker.getBonusDegat(), this.defender.isEntiteCauchemar());
|
||||
|
||||
if (this.target) {
|
||||
explications += "<br><strong>Cible</strong> : " + this.defender.data.name;
|
||||
}
|
||||
explications += "<br>Encaissement à " + Misc.toSignedString(rollData.dmg.total) + " (" + rollData.dmg.loc.label + ")";
|
||||
|
||||
// Save rollData for defender
|
||||
game.system.rdd.rollDataHandler[this.attackerId] = duplicate(rollData);
|
||||
|
||||
// Message spécial pour la rapidité, qui reste difficile à gérer automatiquement
|
||||
if (rollData.particuliereAttaque == 'rapidite') {
|
||||
explications += "<br>Vous avez attaqué en Rapidité. Vous pourrez faire une deuxième attaque, ou utiliser votre arme pour vous défendre.";
|
||||
}
|
||||
|
||||
// Final chat message
|
||||
let chatOptions = {
|
||||
content: "<strong>Test : " + rollData.selectedCarac.label + " / " + rollData.competence.name + "</strong>"
|
||||
+ RdDResolutionTable.explainRollData(rollData)
|
||||
+ explications
|
||||
}
|
||||
ChatUtility.chatWithRollMode(chatOptions, this.attacker.name)
|
||||
|
||||
rollData.show = {
|
||||
cible: this.target ? this.defender.data.name : 'la cible',
|
||||
isRecul : (rollData.particuliereAttaque == 'force' || rollData.tactique == 'charge')
|
||||
cible: this.target ? this.defender.data.name : 'la cible',
|
||||
isRecul: (rollData.particuliereAttaque == 'force' || rollData.tactique == 'charge')
|
||||
}
|
||||
ChatUtility.chatWithRollMode(
|
||||
{ content: await RdDResolutionTable.explainRollDataV2(rollData, 'chat-resultat-attaque.html') },
|
||||
@ -306,7 +271,7 @@ export class RdDCombat {
|
||||
message += "<br><a class='chat-card-button' id='parer-button' data-attackerId='" + this.attackerId + "' data-defenderTokenId='" + this.defenderTokenId + "' data-armeid='" + arme._id + "'>Parer avec " + arme.name + "</a>";
|
||||
}
|
||||
// corps à corps
|
||||
if (rollData.dmg.mortalite != 'mortel') {
|
||||
if (rollData.dmg.mortalite != 'mortel' && this.defender.getCompetence("Corps à corps")) {
|
||||
message += "<br><a class='chat-card-button' id='parer-button' data-attackerId='" + this.attackerId + "' data-defenderTokenId='" + this.defenderTokenId + "'>Parer à mains nues</a>";
|
||||
}
|
||||
// esquive
|
||||
@ -327,20 +292,9 @@ export class RdDCombat {
|
||||
switch (categorie) {
|
||||
case 'tir':
|
||||
case 'lancer':
|
||||
return items.filter(item =>
|
||||
item.type == 'arme' &&
|
||||
item.data.competence.toLowerCase().match("bouclier"));
|
||||
return items.filter(item => RdDItemArme.getCategorieParade(item) == 'boucliers')
|
||||
default:
|
||||
return items.filter(item => {
|
||||
if (item.type == 'competencecreature') {
|
||||
return item.data.isparade;
|
||||
}
|
||||
if (item.type == 'arme') {
|
||||
const comp = this.defender.getCompetence(item.data.competence);
|
||||
return comp && comp.data.categorie == 'melee';
|
||||
}
|
||||
return false;
|
||||
});
|
||||
return items.filter(item => RdDItemArme.getCategorieParade(item));
|
||||
}
|
||||
}
|
||||
|
||||
@ -349,7 +303,7 @@ export class RdDCombat {
|
||||
console.log("RdDCombat.onEchecTotal >>>", rollData);
|
||||
let chatOptions = {
|
||||
content: "<strong>Echec total à l'attaque!</strong> "
|
||||
+ await RdDRollTables.getMaladresse({ arme: rollData.arme && !rollData.arme.data.sansArme })
|
||||
+ await RdDRollTables.getMaladresse({ arme: rollData.arme && rollData.arme.data.categorie_parade != 'sans-armes' })
|
||||
}
|
||||
ChatUtility.chatWithRollMode(chatOptions, this.attacker.name)
|
||||
}
|
||||
@ -400,17 +354,12 @@ export class RdDCombat {
|
||||
}
|
||||
|
||||
_findArmeParade(armeParadeId) {
|
||||
if (armeParadeId) {
|
||||
const armeItem = this.defender.getOwnedItem(armeParadeId);
|
||||
return armeItem.data;
|
||||
|
||||
}
|
||||
return RdDItemArme.mainsNues()
|
||||
return RdDItemArme.getArmeData(armeParadeId ? this.defender.getOwnedItem(armeParadeId) : null);
|
||||
}
|
||||
|
||||
_prepareParade(attackerRoll, armeParade) {
|
||||
const isCreature = this.defender.isCreature();
|
||||
const compName = isCreature ? armeParade.name : armeParade.data.competence;
|
||||
const compName = armeParade.data.competence;
|
||||
const competence = this.defender.getCompetence(compName);
|
||||
const armeAttaque = attackerRoll.arme;
|
||||
|
||||
@ -432,7 +381,7 @@ export class RdDCombat {
|
||||
carac: this.defender.data.data.carac
|
||||
};
|
||||
if (isCreature) {
|
||||
this._modifieRollDataCreature(rollData, competence);
|
||||
RdDItemCompetence.setRollDataCreature(rollData);
|
||||
}
|
||||
return rollData;
|
||||
}
|
||||
@ -444,11 +393,11 @@ export class RdDCombat {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_needResist(armeAttaque, armeParade) {
|
||||
// Manage weapon categories when parrying (cf. page 115 )
|
||||
let attCategory = RdDItemArme.getCategorieArme(armeAttaque);
|
||||
let defCategory = RdDItemArme.getCategorieArme(armeParade);
|
||||
// Epées parant une arme de bois (cf. page 115 ), une résistance est nécessaire
|
||||
let attCategory = RdDItemArme.getCategorieParade(armeAttaque);
|
||||
let defCategory = RdDItemArme.getCategorieParade(armeParade);
|
||||
|
||||
return (attCategory.match("epee") && (defCategory == "hache" || defCategory == "lance"));
|
||||
return attCategory.match(/epees-/) && defCategory.match(/(haches|lances)/);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -482,7 +431,7 @@ export class RdDCombat {
|
||||
console.log("RdDCombat._onParadeEchecTotal >>>", rollData);
|
||||
let chatOptions = {
|
||||
content: "<strong>Echec total à la parade!</strong> "
|
||||
+ await RdDRollTables.getMaladresse({ arme: rollData.arme && !rollData.arme.data.sansArme })
|
||||
+ await RdDRollTables.getMaladresse({ arme: rollData.arme && rollData.arme.data.categorie_parade != 'sans-armes' })
|
||||
}
|
||||
ChatUtility.chatWithRollMode(chatOptions, this.defender.name)
|
||||
}
|
||||
@ -550,7 +499,7 @@ export class RdDCombat {
|
||||
};
|
||||
|
||||
if (this.defender.isCreature()) {
|
||||
this._modifieRollDataCreature(rollData, competence);
|
||||
RdDItemCompetence.setRollDataCreature(rollData);
|
||||
}
|
||||
return rollData;
|
||||
}
|
||||
|
Reference in New Issue
Block a user