Empêcher doublons sur tête/souffle #175 #421

Merged
vincent.vandeme merged 1 commits from v1.4-fix into v1.4 2021-04-16 23:39:57 +02:00
4 changed files with 43 additions and 39 deletions

View File

@ -55,27 +55,21 @@ export class RdDActor extends Actor {
} }
} }
static remoteActorCall(actorId, method, ...args) { static remoteActorCall(options) {
game.socket.emit("system.foundryvtt-reve-de-dragon", { console.log("remoteActorCall ", options)
msg: "msg_remote_actor_call", options.userId = options.userId ?? Misc.connectedGMOrUser();
data: { game.socket.emit("system.foundryvtt-reve-de-dragon", { msg: "msg_remote_actor_call", data: options });
gmId: Misc.connectedGM(),
toActorId: actorId,
method: method,
args: args
}
});
} }
static onRemoteActorCall(data) { static onRemoteActorCall(data) {
if (game.user.id == data.gmId) { // Seul le GM connecté choisi effectue l'appel if (game.user.id == data.userId) { // Seul le joueur choisi effectue l'appel
const actor = game.actors.get(data?.toActorId); const actor = game.actors.get(data?.actorId);
if (!actor) { if (!actor) {
console.info("RdDActor.onRemoteActorCall: Pas d'Actor disponible ", data); console.info("RdDActor.onRemoteActorCall: Pas d'Actor disponible ", data);
} }
else { else {
const args = data.args; const args = data.args;
console.info(`RdDActor.onRemoteActorCall: pour l'Actor ${data.toActorId}, appel de RdDActor.${data.method}(`, ...args, ')'); console.info(`RdDActor.onRemoteActorCall: pour l'Actor ${data.actorId}, appel de RdDActor.${data.method}(`, ...args, ')');
actor[data.method](...args); actor[data.method](...args);
} }
} }
@ -3185,7 +3179,7 @@ export class RdDActor extends Actor {
async ajouterDeniers(gain, fromActorId = undefined) { async ajouterDeniers(gain, fromActorId = undefined) {
if (fromActorId && !game.user.isGM) { if (fromActorId && !game.user.isGM) {
RdDActor.remoteActorCall(this.id, 'ajouterDeniers', gain, fromActorId); RdDActor.remoteActorCall({ userId: Misc.connectedGMOrUser(), actorId: this.id, method: 'ajouterDeniers', args: [gain, fromActorId] });
} }
else { else {
const fromActor = game.actors.get(fromActorId) const fromActor = game.actors.get(fromActorId)
@ -3616,6 +3610,14 @@ export class RdDActor extends Actor {
await this.createEmbeddedDocuments('ActiveEffect', [effet]); await this.createEmbeddedDocuments('ActiveEffect', [effet]);
} }
/* -------------------------------------------- */
async onPreUpdateItem(item, change, options, id) {
const itemData = Misc.data(item);
if (itemData.type == 'competence' && itemData.data.defaut_carac && itemData.data.xp) {
await this.checkCompetenceXP(itemData.name, itemData.data.xp);
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async onCreateItem(item, options, id) { async onCreateItem(item, options, id) {
switch (item.type) { switch (item.type) {
@ -3628,13 +3630,6 @@ export class RdDActor extends Actor {
} }
} }
async onPreUpdateItem(item, change, options, id) {
const itemData = Misc.data(item);
if (itemData.type == 'competence' && itemData.data.defaut_carac && itemData.data.xp) {
await this.checkCompetenceXP(itemData.name, itemData.data.xp);
}
}
async onDeleteItem(item, options, id) { async onDeleteItem(item, options, id) {
switch (item.type) { switch (item.type) {
case 'tete': case 'tete':
@ -3650,29 +3645,32 @@ export class RdDActor extends Actor {
} }
async onCreateOwnedDraconique(item, options, id) { async onCreateOwnedDraconique(item, options, id) {
if (Misc.isElectedUser()) {
let draconique = Draconique.all().find(it => it.match(item)); let draconique = Draconique.all().find(it => it.match(item));
if (draconique) { if (draconique) {
draconique.onActorCreateOwned(this, item) draconique.onActorCreateOwned(this, item)
this.notifyGestionTeteSouffleQueue(item, draconique.manualMessage()); this.notifyGestionTeteSouffleQueue(item, draconique.manualMessage());
} }
} }
}
async onDeleteOwnedDraconique(item, options, id) { async onDeleteOwnedDraconique(item, options, id) {
if (Misc.isElectedUser()) {
let draconique = Draconique.all().find(it => it.match(item)); let draconique = Draconique.all().find(it => it.match(item));
if (draconique) { if (draconique) {
draconique.onActorDeleteOwned(this, item) draconique.onActorDeleteOwned(this, item)
} }
} }
}
async onDeleteOwnedCaseTmr(item, options, id) { async onDeleteOwnedCaseTmr(item, options, id) {
if (Misc.isElectedUser()) {
let draconique = Draconique.all().find(it => it.isCase(item)); let draconique = Draconique.all().find(it => it.isCase(item));
if (draconique) { if (draconique) {
draconique.onActorDeleteCaseTmr(this, item) draconique.onActorDeleteCaseTmr(this, item)
} }
} }
}
notifyGestionTeteSouffleQueue(item, manualMessage = true) { notifyGestionTeteSouffleQueue(item, manualMessage = true) {
ChatMessage.create({ ChatMessage.create({

View File

@ -29,7 +29,7 @@ export class ChatUtility {
static removeChatMessageContaining(part) { static removeChatMessageContaining(part) {
const removeMessageData = { const removeMessageData = {
part: part, part: part,
gmId: Misc.connectedGM() gmId: Misc.connectedGMOrUser()
}; };
if (game.user.isGM) { if (game.user.isGM) {
@ -41,7 +41,7 @@ export class ChatUtility {
} }
static removeChatMessageId(messageId) { static removeChatMessageId(messageId) {
const removeMessageData = { messageId: messageId, gmId: Misc.connectedGM() }; const removeMessageData = { messageId: messageId, gmId: Misc.connectedGMOrUser() };
if (game.user.isGM) { if (game.user.isGM) {
ChatUtility.onRemoveMessages(removeMessageData); ChatUtility.onRemoveMessages(removeMessageData);
} }

View File

@ -114,7 +114,13 @@ export class Misc {
return Misc.data(it)?.data ?? {} return Misc.data(it)?.data ?? {}
} }
static connectedGM() { static connectedGMOrUser(ownerId = undefined) {
return game.user.isGM ? game.user.id : game.users.entities.find(u => u.isGM && u.active)?.id; if (ownerId && game.user.id == ownerId){
return ownerId;
}
return (game.user.isGM ? game.user.id : game.users.entities.find(u => u.isGM && u.active)?.id) ?? game.user.id;
}
static isElectedUser() {
return game.user.id == Misc.connectedGMOrUser();
} }
} }

View File

@ -1211,7 +1211,7 @@ export class RdDCombat {
attackerId: this.attackerId, attackerId: this.attackerId,
defenderTokenId: defenderTokenId, defenderTokenId: defenderTokenId,
attackerRoll: attackerRoll, attackerRoll: attackerRoll,
gmId: Misc.connectedGM(), gmId: Misc.connectedGMOrUser(),
} }
}); });
} }