Merge from v1.5 possession fix

This commit is contained in:
sladecraven 2022-07-02 09:02:31 +02:00
commit 0d288c56d4
7 changed files with 116 additions and 124 deletions

View File

@ -369,12 +369,27 @@ export class RdDActor extends Actor {
const list = this.getDraconicList() const list = this.getDraconicList()
return duplicate(list[0]) return duplicate(list[0])
} }
getDraconicOrZero() { getDraconicOuPossession() {
const list = this.getDraconicList().filter(it => it.system.niveau >= 0); const possessions = this.items.filter(it => it.type == 'competencecreature' && it.system.ispossession)
if (list.length == 0) { .sort(Misc.descending(it => it.system.niveau));
return { name: "Aucun", system: { niveau: 0 } }; if (possessions.length>0) {
return duplicate(possessions[0]);
} }
return duplicate(list[0]); const draconics = this.getDraconicList().filter(it => it.system.niveau >= 0);
if (draconics.length> 0) {
return duplicate(draconics[0]);
}
return {
img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp',
name: 'Sans draconic',
data: {
niveau: 0,
defaut_carac: "reve",
}
};
}
getPossession(possessionId) {
return this.items.find(it => it.type == 'possession' && it.system.possessionid == possessionId);
} }
getDemiReve() { getDemiReve() {
@ -779,7 +794,7 @@ export class RdDActor extends Actor {
async combattreReveDeDragon(force) { async combattreReveDeDragon(force) {
let rollData = { let rollData = {
actor: this, actor: this,
competence: duplicate(this.getDraconicOrZero()), competence: duplicate(this.getDraconicOuPossession()),
canClose: false, canClose: false,
rencontre: duplicate(TMRRencontres.getRencontre('rdd')), rencontre: duplicate(TMRRencontres.getRencontre('rdd')),
tmr: true, tmr: true,
@ -2519,7 +2534,7 @@ export class RdDActor extends Actor {
if (rollData.competence.type == 'competencecreature') { if (rollData.competence.type == 'competencecreature') {
if (rollData.competence.system.iscombat) { if (rollData.competence.system.iscombat) {
if (rollData.competence.system.ispossession) { if (rollData.competence.system.ispossession) {
RdDPossession.managePossession(this, rollData.competence) RdDPossession.onAttaquePossession(this, rollData.competence)
} else { } else {
const arme = RdDItemCompetenceCreature.toArme(rollData.competence) const arme = RdDItemCompetenceCreature.toArme(rollData.competence)
RdDCombat.createUsingTarget(this)?.attaque(competence, arme) RdDCombat.createUsingTarget(this)?.attaque(competence, arme)
@ -2547,8 +2562,8 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
conjurerPossession(possession) { conjurerPossession(possession) {
let draconic = this.getBestDraconic(); let draconic = this.getDraconicOuPossession();
RdDPossession.managePossession(this, draconic, possession) RdDPossession.onAttaquePossession(this, draconic, possession)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -3179,7 +3194,7 @@ export class RdDActor extends Actor {
let competence = this.getCompetence(arme.system.competence) let competence = this.getCompetence(arme.system.competence)
if (arme || (competence.type == 'competencecreature' && competence.system.iscombat)) { if (arme || (competence.type == 'competencecreature' && competence.system.iscombat)) {
if (competence.system.ispossession) { if (competence.system.ispossession) {
RdDPossession.managePossession(this, competence); RdDPossession.onAttaquePossession(this, competence);
} else { } else {
RdDCombat.createUsingTarget(this)?.attaque(competence, arme); RdDCombat.createUsingTarget(this)?.attaque(competence, arme);
} }

View File

@ -71,43 +71,34 @@ export class RdDPossession {
static async onDefensePossession(attackerId, defenderId, possessionId) { static async onDefensePossession(attackerId, defenderId, possessionId) {
let attacker = game.actors.get(attackerId) let attacker = game.actors.get(attackerId)
let defender = game.actors.get(defenderId) let defender = game.actors.get(defenderId)
let possession = attacker.getPossession(possessionId) ?? defender.getPossession(possessionId) ;
let possession = attacker.items.find( item => item.type =='possession' && item.system.possessionid == possessionId)
if ( !possession ) {
possession = defender.items.find( item => item.type =='possession' && item.system.possessionid == possessionId)
if (!possession) { if (!possession) {
ui.notifications.warn("Une erreur s'est produite : Aucune possession trouvée !!") ui.notifications.warn("Une erreur s'est produite : Aucune possession trouvée !!")
return return
} }
}
possession = duplicate(possession)
// Update for draconic roll // Update for draconic roll
let rollData = { let rollData = {
possession: possession mode: "conjuration",
isECNIDefender: defender.type == "entite",
possession: duplicate(possession),
attacker: attacker,
defender: defender,
competence: defender.getDraconicOuPossession(),
selectedCarac: defender.system.carac.reve,
} }
rollData.actor = defender
if ( defender.type == "personnage") { if (rollData.isECNIDefender) {
rollData.competence = duplicate(defender.getDraconicOrZero())
rollData.competence.system.defaut_carac = 'reve-actuel'
rollData.forceCarac = { 'reve-actuel': { label: "Rêve Actuel", value: defender.getReveActuel() } }
rollData.selectedCarac = defender.system.carac.reve
rollData.isECNIDefender = false
} else {
rollData.competence = duplicate(defender.getCompetence("Possession"))
rollData.competence.system.defaut_carac = "reve" rollData.competence.system.defaut_carac = "reve"
rollData.forceCarac = { 'reve': { label: "Rêve", value: defender.system.carac.reve.value } } rollData.forceCarac = { 'reve': { label: "Rêve", value: defender.system.carac.reve.value } }
rollData.selectedCarac = defender.system.carac.reve } else {
rollData.isECNIDefender = true rollData.competence.system.defaut_carac = 'reve-actuel'
//RdDItemCompetenceCreature.setRollDataCreature( rollData ) rollData.forceCarac = { 'reve-actuel': { label: "Rêve Actuel", value: defender.getReveActuel() } }
} }
rollData.mode = "conjuration"
rollData.possesseur = attacker.name
const dialog = await RdDRoll.create(defender, rollData, const dialog = await RdDRoll.create(defender, rollData,
{ {
html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-defense-possession.html', html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-defense-possession.html',
options: { height: 400 } options: { height: 450 }
}, },
{ {
name: 'conjurer', name: 'conjurer',
@ -121,16 +112,7 @@ export class RdDPossession {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static async _onRollPossession( rollData, isSuccess ) { static async onAttaquePossession(attacker, competence, possession = undefined) {
let possession = rollData.possession
possession.isSuccess = isSuccess
this.updateEtatPossession( possession)
await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-possession.html');
}
/* -------------------------------------------- */
static async managePossession(attacker, competence, possession=undefined) {
const target = RdDCombat.getTarget() const target = RdDCombat.getTarget()
if (target == undefined) { if (target == undefined) {
ui.notifications.warn((game.user.targets?.size ?? 0) > 1 ui.notifications.warn((game.user.targets?.size ?? 0) > 1
@ -140,23 +122,16 @@ export class RdDPossession {
} }
const defender = target.actor; const defender = target.actor;
if ( !possession) { possession = duplicate(possession ?? this.searchPossessionFromEntite(attacker, defender) ??(await this.createPossession(attacker, defender)));
possession = this.searchPossessionFromEntite( attacker, defender)
if ( !possession) {
possession = await this.createPossession(attacker, defender)
}
}
possession = duplicate(possession);
this.updateEtatPossession(possession) this.updateEtatPossession(possession)
let rollData = { let rollData = {
competence: competence.data.data.niveau >=0 ? competence : RdDPossession.competenceNonHautRevant(), mode: "possession",
isECNIDefender: defender.type == "entite",
competence: competence,
possession: possession, possession: possession,
possede: defender.name, attacker: attacker,
possesseur: attacker.name, defender: defender
attackerId: attacker.id,
defenderId: defender.id,
mode: "possession"
}; };
if (attacker.isCreature()) { if (attacker.isCreature()) {
RdDItemCompetenceCreature.setRollDataCreature(rollData) RdDItemCompetenceCreature.setRollDataCreature(rollData)
@ -168,7 +143,7 @@ export class RdDPossession {
options: { height: 540 } options: { height: 540 }
}, { }, {
name: 'jet-possession', name: 'jet-possession',
label: 'Possession: ', label: rollData.isECNIDefender ? 'Conjurer la possession' : 'Possession',
callbacks: [ callbacks: [
{ condition: r => (r.rolled.isSuccess), action: async r => await this._onRollPossession(r, true) }, { condition: r => (r.rolled.isSuccess), action: async r => await this._onRollPossession(r, true) },
{ condition: r => (r.rolled.isEchec), action: async r => await this._onRollPossession(r, false) }, { condition: r => (r.rolled.isEchec), action: async r => await this._onRollPossession(r, false) },
@ -177,17 +152,11 @@ export class RdDPossession {
dialog.render(true) dialog.render(true)
} }
static competenceNonHautRevant() { /* -------------------------------------------- */
return { static async _onRollPossession(rollData, isSuccess) {
img: 'systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp', rollData.possession.isSuccess = isSuccess;
name: 'non Haut-rêvant', this.updateEtatPossession(rollData.possession);
data: { await RdDResolutionTable.displayRollData(rollData, this, 'chat-resultat-possession.html');
data: {
niveau: 0,
defaut_carac: "reve",
}
}
};
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -693,7 +693,7 @@ export class RdDUtility {
actor.tmrApp.lancerSortEnReserve(coord, sortId); actor.tmrApp.lancerSortEnReserve(coord, sortId);
}); });
// gestion bouton tchat Acheter // gestion bouton tchat Possession
html.on("click", '.defense-possession', event => { html.on("click", '.defense-possession', event => {
let attackerId = event.currentTarget.attributes['data-attackerId'].value let attackerId = event.currentTarget.attributes['data-attackerId'].value
let defenderId = event.currentTarget.attributes['data-defenderId'].value let defenderId = event.currentTarget.attributes['data-defenderId'].value

View File

@ -29,7 +29,7 @@
"url": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/", "url": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/",
"license": "LICENSE.txt", "license": "LICENSE.txt",
"flags": {}, "flags": {},
"version": "10.0.0", "version": "10.0.1",
"minimumCoreVersion": "10", "minimumCoreVersion": "10",
"compatibleCoreVersion": "10", "compatibleCoreVersion": "10",
"scripts": [], "scripts": [],
@ -500,7 +500,7 @@
"dependencies": [], "dependencies": [],
"socket": true, "socket": true,
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v10/system.json", "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v10/system.json",
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-10.0.0.zip", "download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-10.0.1.zip",
"protected": false, "protected": false,
"gridDistance": 1, "gridDistance": 1,
"gridUnits": "m", "gridUnits": "m",

View File

@ -321,6 +321,7 @@
{{!-- Liste de blessures --}} {{!-- Liste de blessures --}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor-liste-blessures-partial.html" this}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor-liste-blessures-partial.html" this}}
{{#if maladiesPoisons.length}}
{{!-- Maladies & Poison --}} {{!-- Maladies & Poison --}}
<h3 class="blessures-title">Maladies & Poisons:</h3> <h3 class="blessures-title">Maladies & Poisons:</h3>
<ul class="item-list alterne-list"> <ul class="item-list alterne-list">
@ -354,7 +355,9 @@
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
{{/if}}
{{#if possessions.length}}
{{!-- Possession --}} {{!-- Possession --}}
<h3 class="blessures-title">Possession:</h3> <h3 class="blessures-title">Possession:</h3>
<ul class="item-list alterne-list"> <ul class="item-list alterne-list">
@ -375,7 +378,7 @@
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
{{/if}}
</div> </div>
{{!-- Connaissances Tab --}} {{!-- Connaissances Tab --}}

View File

@ -1,29 +1,30 @@
<img class="chat-icon" src="{{competence.img}}" /> <img class="chat-icon" src="{{competence.img}}" />
<h4> <h4>
{{#if (eq mode "possession")}} {{#if (eq mode "possession")}}
{{alias}} tente de posséder {{possede}} {{attacker.name}} tente de {{#if isECNIDefender}}conjurer la possession de{{else}}posséder{{/if}} {{defender.name}}
{{else}} {{else}}
{{alias}} tente de conjurer la possession de {{possesseur}} {{defender.name}} tente de {{#if isECNIDefender}}résister à{{else}}conjurer la possession de{{/if}} {{attacker.name}}
{{/if}} {{/if}}
</h4> </h4>
{{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}} {{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
<hr> <hr>
<div> <div>
<span class='chat-card-button-area'> <span class='chat-card-button-area'>
<br> <br>
{{#if (eq mode "possession")}} {{#if (eq mode "possession")}}
{{#if possession.isSuccess}} {{#if possession.isSuccess}}
<a class='defense-possession chat-card-button' data-attackerId='{{attackerId}}' <a class='defense-possession chat-card-button'
data-defenderId='{{defenderId}}' data-possessionId='{{possession.system.possessionid}}'>Résister à la possession</a> data-attackerId='{{attacker.id}}'
data-defenderId='{{defender.id}}'
data-possessionId='{{possession.system.possessionid}}'>Résister à la possession</a>
</a> </a>
{{else}} {{else}}
La Tentative de Possession a échouée ! La Tentative de Possession a échouée !
{{/if}} {{/if}}
{{else}} {{else}}
{{#if rolled.isSuccess}} {{#if rolled.isSuccess}}
La Tentative de Possession a été conjurée ! {{alias}} résiste à la tentative de possession. La Tentative de Possession a été conjurée ! {{defender.name}} résiste à la tentative de possession.
{{else}} {{else}}
La Tentative de Possession n'a pas pu être conjurée ! La Tentative de Possession n'a pas pu être conjurée !
{{/if}} {{/if}}

View File

@ -1,5 +1,9 @@
<form class="skill-roll-dialog"> <form class="skill-roll-dialog">
<h2>Conjuration d'une Possession {{possession.name}}!</h2> <h2>
{{defender.name}} tente de
{{#if isECNIDefender}}maintenir{{else}}résister à{{/if}}
la possession de {{attacker.name}}
</h2>
<div class="grid grid-2col"> <div class="grid grid-2col">
<div class="flex-group-left"> <div class="flex-group-left">
<img class="chat-icon" src="{{competence.img}}" alt="{{competence.name}}"/> <img class="chat-icon" src="{{competence.img}}" alt="{{competence.name}}"/>