Merge branch 'dev_1.1' of gitlab.com:LeRatierBretonnien/foundryvtt-reve-de-dragon into dev_1.1

This commit is contained in:
2020-12-17 09:29:14 +01:00
9 changed files with 211 additions and 183 deletions

View File

@ -170,69 +170,6 @@ export class RdDActor extends Actor {
}
}
/* -------------------------------------------- */
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.needResist || attackerRoll.particuliereAttaque == 'force' || attackerRoll.tactique == 'charge')
&& !rollData.rolled.isPart ) {
const dmg = attackerRoll.dmg.dmgArme + attackerRoll.dmg.dmgActor;
let resistance = Misc.toInt(rollData.arme.data.resistance);
let msg = "";
// 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 {
resistance -= dmg;
if ( resistance <= 0 ) {
this.deleteEmbeddedEntity("OwnedItem", rollData.arme._id);
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': resistance });
msg = "En parant, vous endommagez votre " + rollData.arme.name + ", qui perd " + dmg + " de résistance. ";
}
}
// Jet de désarmement
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,
user: game.user._id,
whisper: [game.user._id, ChatMessage.getWhisperRecipients("GM") ] } );
}
}
}
/* -------------------------------------------- */
async computeRecul( rollData, encaisser = undefined ) { // Calcul du recul (p. 132)
if ( rollData.arme || encaisser ) {
if ( (rollData.attackerRoll.particuliereAttaque && rollData.attackerRoll.particuliereAttaque == 'force') || rollData.attackerRoll.tactique == 'charge') {
let reculNiveau = Misc.toInt(this.data.data.carac.taille.value) - (rollData.attackerRoll.forceValue+rollData.attackerRoll.arme.data.dommagesReels);
let recul = await RdDResolutionTable.roll( 10, reculNiveau );
let msg = "";
if (recul.isSuccess) {
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 = "Sous la violence du coup, vous reculez et chutez au sol ! Vous ne pouvez plus attaquer ce round.";
} else {
msg = "La violence du choc vous fait reculer de quelques mètres ! Vous ne pouvez plus attaquer ce round.";
}
}
ChatMessage.create( {content: msg,
user: game.user._id,
whisper: [game.user._id, ChatMessage.getWhisperRecipients("GM") ] } );
}
}
}
/* -------------------------------------------- */
getSurprise() {
if (this.isEntiteCauchemar()) {
@ -507,12 +444,10 @@ export class RdDActor extends Actor {
message += "<br>Vous gagnez une Tête de dragon: " + tete;
}
if (roll.isEchec) {
message += "<br>Vous subissez une Queue de Dragon";
this.ajouterQueue();
message += "<br>Vous subissez une Queue de Dragon: " + await this.ajouterQueue();
}
if (roll.isETotal) {
message += "<br>A cause de votre échec total, vous subissez une deuxième Queue de Dragon !"
this.ajouterQueue();
message += "<br>A cause de votre échec total, vous subissez une deuxième Queue de Dragon: " + await this.ajouterQueue();
}
return message;
}
@ -757,7 +692,7 @@ export class RdDActor extends Actor {
let total = new Roll("1d20").roll().total;
if ( total <= refoulement.value ) {
refoulement.value = 0;
this.ajouterSouffle();
this.ajouterSouffle({chat: true});
ret = "souffle";
}
@ -766,17 +701,20 @@ export class RdDActor extends Actor {
}
/* -------------------------------------------- */
ajouterSouffle() {
async ajouterSouffle(options = {chat : false}) {
let souffle = RdDRollTables.getSouffle();
// ChatMessage.create({
// title: "Souffle de Dragon",
// content: this.name + " subit un Souffle de Dragon : " + souffle.name
// });
// this.actor.createOwnedItem(souffle);
await this.createOwnedItem(souffle);
if (options.chat){
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs( this.name ),
content: this.name + " subit un Souffle de Dragon : " + souffle.name
});
}
return souffle;
}
/* -------------------------------------------- */
async ajouterQueue() {
async ajouterQueue(options = {chat : false}) {
// TODO: Déterminer si Thanatos a été utilisé? => laisser le joueur ne pas choisir Thanatos => choisir sa voie?
let utiliseThanatos = false;
let queue;
@ -787,17 +725,14 @@ export class RdDActor extends Actor {
else {
queue = await RdDRollTables.getQueue();
}
/*
// TODO: convertir la queue obtenue en nouvel item ...
// ou bien l'ajouter à la liste spécifique => this.data.data.reve.queues
this.createOwnedItem(queue);
ChatMessage.create({
content: this.name + " subit un Queue de Dragon : " + queue.name
});
return queue.name;
*/
await this.createOwnedItem(queue);
if (options.chat){
ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs( this.name ),
content: this.name + " subit une Queue de Dragon : " + queue.name
});
}
return queue;
}
/* -------------------------------------------- */
@ -1377,6 +1312,10 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async rollCompetence( name ) {
if (name == 'queue') {
await this.ajouterQueue({chat: true});
return;
}
let rollData = {
competence: duplicate(this.getCompetence(name)),
needSignificative : !this.isEntiteCauchemar() && this.data.data.sante.sonne.value