Empêcher doublons sur tête/souffle #175
Lors de l'ajout de la tête présents des cités, le présent de chaque cité était ajouté par tous les joueurs connectés qui traitaient le hook
This commit is contained in:
parent
6fc8906d67
commit
f05a166d5b
@ -55,27 +55,21 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
static remoteActorCall(actorId, method, ...args) {
|
||||
game.socket.emit("system.foundryvtt-reve-de-dragon", {
|
||||
msg: "msg_remote_actor_call",
|
||||
data: {
|
||||
gmId: Misc.connectedGM(),
|
||||
toActorId: actorId,
|
||||
method: method,
|
||||
args: args
|
||||
}
|
||||
});
|
||||
static remoteActorCall(options) {
|
||||
console.log("remoteActorCall ", options)
|
||||
options.userId = options.userId ?? Misc.connectedGMOrUser();
|
||||
game.socket.emit("system.foundryvtt-reve-de-dragon", { msg: "msg_remote_actor_call", data: options });
|
||||
}
|
||||
|
||||
static onRemoteActorCall(data) {
|
||||
if (game.user.id == data.gmId) { // Seul le GM connecté choisi effectue l'appel
|
||||
const actor = game.actors.get(data?.toActorId);
|
||||
if (game.user.id == data.userId) { // Seul le joueur choisi effectue l'appel
|
||||
const actor = game.actors.get(data?.actorId);
|
||||
if (!actor) {
|
||||
console.info("RdDActor.onRemoteActorCall: Pas d'Actor disponible ", data);
|
||||
}
|
||||
else {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -3185,7 +3179,7 @@ export class RdDActor extends Actor {
|
||||
|
||||
async ajouterDeniers(gain, fromActorId = undefined) {
|
||||
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 {
|
||||
const fromActor = game.actors.get(fromActorId)
|
||||
@ -3616,6 +3610,14 @@ export class RdDActor extends Actor {
|
||||
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) {
|
||||
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) {
|
||||
switch (item.type) {
|
||||
case 'tete':
|
||||
@ -3650,29 +3645,32 @@ export class RdDActor extends Actor {
|
||||
}
|
||||
|
||||
async onCreateOwnedDraconique(item, options, id) {
|
||||
|
||||
if (Misc.isElectedUser()) {
|
||||
let draconique = Draconique.all().find(it => it.match(item));
|
||||
if (draconique) {
|
||||
draconique.onActorCreateOwned(this, item)
|
||||
|
||||
this.notifyGestionTeteSouffleQueue(item, draconique.manualMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async onDeleteOwnedDraconique(item, options, id) {
|
||||
|
||||
if (Misc.isElectedUser()) {
|
||||
let draconique = Draconique.all().find(it => it.match(item));
|
||||
if (draconique) {
|
||||
draconique.onActorDeleteOwned(this, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async onDeleteOwnedCaseTmr(item, options, id) {
|
||||
if (Misc.isElectedUser()) {
|
||||
let draconique = Draconique.all().find(it => it.isCase(item));
|
||||
if (draconique) {
|
||||
draconique.onActorDeleteCaseTmr(this, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
notifyGestionTeteSouffleQueue(item, manualMessage = true) {
|
||||
ChatMessage.create({
|
||||
|
@ -29,7 +29,7 @@ export class ChatUtility {
|
||||
static removeChatMessageContaining(part) {
|
||||
const removeMessageData = {
|
||||
part: part,
|
||||
gmId: Misc.connectedGM()
|
||||
gmId: Misc.connectedGMOrUser()
|
||||
};
|
||||
|
||||
if (game.user.isGM) {
|
||||
@ -41,7 +41,7 @@ export class ChatUtility {
|
||||
}
|
||||
|
||||
static removeChatMessageId(messageId) {
|
||||
const removeMessageData = { messageId: messageId, gmId: Misc.connectedGM() };
|
||||
const removeMessageData = { messageId: messageId, gmId: Misc.connectedGMOrUser() };
|
||||
if (game.user.isGM) {
|
||||
ChatUtility.onRemoveMessages(removeMessageData);
|
||||
}
|
||||
|
@ -114,7 +114,13 @@ export class Misc {
|
||||
return Misc.data(it)?.data ?? {}
|
||||
}
|
||||
|
||||
static connectedGM() {
|
||||
return game.user.isGM ? game.user.id : game.users.entities.find(u => u.isGM && u.active)?.id;
|
||||
static connectedGMOrUser(ownerId = undefined) {
|
||||
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();
|
||||
}
|
||||
}
|
@ -1211,7 +1211,7 @@ export class RdDCombat {
|
||||
attackerId: this.attackerId,
|
||||
defenderTokenId: defenderTokenId,
|
||||
attackerRoll: attackerRoll,
|
||||
gmId: Misc.connectedGM(),
|
||||
gmId: Misc.connectedGMOrUser(),
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user