Merge branch 'v1.4-fix-193' into 'v1.4'

#193: utiliser isElectedUser pour les défenses

See merge request LeRatierBretonnien/foundryvtt-reve-de-dragon!250
This commit is contained in:
Leratier Bretonnien 2021-05-22 06:39:26 +00:00
commit a22c435ca5
2 changed files with 23 additions and 40 deletions

View File

@ -14,40 +14,28 @@ export class ChatUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static onRemoveMessages(data) { static onRemoveMessages(data) {
if (game.user.isGM || game.user.id == data.gmId) { if (Misc.isElectedUser()) {
if (data.part){ if (data.part) {
const toDelete = game.messages.filter(it => it.data.content.includes(data.part)); const toDelete = game.messages.filter(it => it.data.content.includes(data.part));
toDelete.forEach(it => it.delete()); toDelete.forEach(it => it.delete());
} }
if (data.messageId){ if (data.messageId) {
game.messages.get(data.messageId)?.delete(); game.messages.get(data.messageId)?.delete();
} }
} }
else {
game.socket.emit("system.foundryvtt-reve-de-dragon", { msg: "msg_delete_chat_message", data: data });
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static removeChatMessageContaining(part) { static removeChatMessageContaining(part) {
const removeMessageData = { ChatUtility.onRemoveMessages({ part: part });
part: part,
gmId: Misc.connectedGMOrUser()
};
if (game.user.isGM) {
ChatUtility.onRemoveMessages(removeMessageData);
}
else {
game.socket.emit("system.foundryvtt-reve-de-dragon", { msg: "msg_delete_chat_message", data: removeMessageData });
}
} }
static removeChatMessageId(messageId) { static removeChatMessageId(messageId) {
const removeMessageData = { messageId: messageId, gmId: Misc.connectedGMOrUser() }; ChatUtility.onRemoveMessages({ messageId: messageId });
if (game.user.isGM) {
ChatUtility.onRemoveMessages(removeMessageData);
}
else {
game.socket.emit("system.foundryvtt-reve-de-dragon", { msg: "msg_delete_chat_message", data: removeMessageData });
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -146,7 +146,7 @@ export class RdDCombatManager extends Combat {
let armeData = Misc.data(arme); let armeData = Misc.data(arme);
if (armeData.data.equipe) { if (armeData.data.equipe) {
let compData = competences.map(c => Misc.data(c)).find(c => c.name == armeData.data.competence); let compData = competences.map(c => Misc.data(c)).find(c => c.name == armeData.data.competence);
armesEquipe.push(armeData); armesEquipe.push(armeData);
armeData.data.initiative = RdDCombatManager.calculInitiative(armeData.data.niveau, carac[compData.data.defaut_carac].value); armeData.data.initiative = RdDCombatManager.calculInitiative(armeData.data.niveau, carac[compData.data.defaut_carac].value);
// Dupliquer les armes pouvant être à 1 main et 2 mains en patchant la compétence // Dupliquer les armes pouvant être à 1 main et 2 mains en patchant la compétence
@ -189,8 +189,8 @@ export class RdDCombatManager extends Combat {
let competences = items.filter(it => it.type == 'competence'); let competences = items.filter(it => it.type == 'competence');
actions = actions.concat(RdDCombatManager.finalizeArmeList(armes, competences, actorData.data.carac)); actions = actions.concat(RdDCombatManager.finalizeArmeList(armes, competences, actorData.data.carac));
if (actorData.data.attributs.hautrevant.value){ if (actorData.data.attributs.hautrevant.value) {
actions.push({ name: "Draconic", data: { initOnly: true, competence: "Draconic" } }); actions.push({ name: "Draconic", data: { initOnly: true, competence: "Draconic" } });
} }
} }
@ -390,9 +390,8 @@ export class RdDCombat {
/* -------------------------------------------- */ /* -------------------------------------------- */
static combatNouveauTour(combat) { static combatNouveauTour(combat) {
let turn = combat.turns.find(t => t.tokenId == combat.current.tokenId); if (Misc.isElectedUser()) {
if (game.user.isGM) { let turn = combat.turns.find(t => t.tokenId == combat.current.tokenId);
// seul le GM notifie le status
this.displayActorCombatStatus(combat, turn.actor); this.displayActorCombatStatus(combat, turn.actor);
// TODO Playaudio for player?? // TODO Playaudio for player??
} }
@ -477,17 +476,16 @@ export class RdDCombat {
/* -------------------------------------------- */ /* -------------------------------------------- */
static onMsgEncaisser(data) { static onMsgEncaisser(data) {
let attackerRoll = RdDCombat._getAttaque(data.attackerId); // Retrieve the rolldata from the store if (Misc.isElectedUser()) {
let attackerRoll = RdDCombat._getAttaque(data.attackerId); // Retrieve the rolldata from the store
if (game.user.id === data.gmId) { // Seul le GM effectue l'encaissement sur la fiche
let attacker = data.attackerId ? game.actors.get(data.attackerId) : null; let attacker = data.attackerId ? game.actors.get(data.attackerId) : null;
let defender = canvas.tokens.get(data.defenderTokenId).actor; let defender = canvas.tokens.get(data.defenderTokenId).actor;
defender.encaisserDommages(attackerRoll, attacker); defender.encaisserDommages(attackerRoll, attacker);
RdDCombat._deleteDefense(attackerRoll.passeArme);
RdDCombat._deleteAttaque(data.attackerId);
} }
RdDCombat._deleteDefense(attackerRoll.passeArme);
RdDCombat._deleteAttaque(data.attackerId);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -498,10 +496,7 @@ export class RdDCombat {
ui.notifications.error("Le joueur " + game.user.name + " n'est connecté à aucun personnage. Impossible de continuer."); ui.notifications.error("Le joueur " + game.user.name + " n'est connecté à aucun personnage. Impossible de continuer.");
return; return;
} }
const isDefenderConnectedPlayer = defenderToken.actor.hasPlayerOwner; // TODO: tester si le joueur est pas connecté if (Misc.isElectedUser()) {
if (isDefenderConnectedPlayer
? game.user.character?._id == defenderToken.actor.data._id // TODO: vérifier le cas d'un joueur qui est owner de plusieurs personnages
: game.user.isGM) {
const rddCombat = RdDCombat.createForAttackerAndDefender(msg.attackerId, msg.defenderTokenId); const rddCombat = RdDCombat.createForAttackerAndDefender(msg.attackerId, msg.defenderTokenId);
if (rddCombat) { if (rddCombat) {
const defenderRoll = msg.defenderRoll; const defenderRoll = msg.defenderRoll;
@ -821,8 +816,7 @@ export class RdDCombat {
dmg: attackerRoll.dmg, dmg: attackerRoll.dmg,
}; };
const selfMessage = essaisPrecedents != undefined; if (!Misc.isElectedUser()) {
if (!selfMessage && (!game.user.isGM || this.defender.hasPlayerOwner)) {
this._socketSendMessageDefense(paramChatDefense, defenderRoll); this._socketSendMessageDefense(paramChatDefense, defenderRoll);
} }
else { else {
@ -1200,13 +1194,14 @@ export class RdDCombat {
this._onEchecTotal(defenderRoll); this._onEchecTotal(defenderRoll);
} }
if (game.user.isGM) { // Current user is the GM -> direct access if (Misc.isElectedUser()) {
attackerRoll.attackerId = this.attackerId; attackerRoll.attackerId = this.attackerId;
attackerRoll.defenderTokenId = defenderTokenId; attackerRoll.defenderTokenId = defenderTokenId;
await this.computeRecul(defenderRoll); await this.computeRecul(defenderRoll);
this.defender.encaisserDommages(attackerRoll, this.attacker, defenderRoll); this.defender.encaisserDommages(attackerRoll, this.attacker, defenderRoll);
} else { // envoi à un GM: les joueurs n'ont pas le droit de modifier les personnages qu'ils ne possèdent pas }
else { // envoi à un GM: les joueurs n'ont pas le droit de modifier les personnages qu'ils ne possèdent pas
game.socket.emit("system.foundryvtt-reve-de-dragon", { game.socket.emit("system.foundryvtt-reve-de-dragon", {
msg: "msg_encaisser", msg: "msg_encaisser",
data: { data: {