code review: fix critical issues and improve code quality
- Fix constructor in rollDialog.mjs (spread operator for options) - Remove all console.log statements from production code - Add comprehensive JSDoc comments for all public APIs - Convert French comments to English for consistency - Use parseInt with radix parameter (10) throughout - Replace let with const where appropriate - Use Set for O(1) lookups in group-link.mjs methods - Use spread operators for array cloning - Optimize removeActorFromAllGroups with Set lookups - Improve registerHooks with better comments and Set usage - Simplify roll-message.hbs template logic - Fix duplicate VERMINE key in lang/fr.json - Add missing error translations - Add .eslintrc.js with FoundryVTT-compatible linting config Compatibility: FoundryVTT v11-v14 Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
+161
-146
@@ -1,53 +1,52 @@
|
||||
/**
|
||||
* GroupLink - Gestion des liens entre acteurs et groupes
|
||||
*
|
||||
* Cette classe permet de gérer les relations bidirectionnelles entre :
|
||||
* - Les personnages (characters) et leurs groupes/rencontres
|
||||
* - Les groupes (groups) et leurs membres/rencontres
|
||||
*
|
||||
* GroupLink - Manages bidirectional links between actors and groups
|
||||
*
|
||||
* This class handles bidirectional relationships between:
|
||||
* - Characters and their groups/encounters
|
||||
* - Groups and their members/encounters
|
||||
*
|
||||
* @author Vermine2047 System
|
||||
*/
|
||||
|
||||
export class GroupLink {
|
||||
|
||||
/**
|
||||
* Met à jour les groupes dans tous les personnages membres
|
||||
* quand un groupe est modifié
|
||||
* @param {Actor} group - Le groupe modifié
|
||||
* @param {Object} changes - Les changements effectués
|
||||
* Updates actors when a group is modified.
|
||||
* @param {Actor} group - The modified group
|
||||
* @param {Object} changes - The changes made
|
||||
*/
|
||||
static async updateActorsOnGroupChange(group, changes) {
|
||||
if (group.type !== 'group') return;
|
||||
if (group?.type !== 'group') return;
|
||||
|
||||
const groupData = group.system;
|
||||
const members = groupData.members || [];
|
||||
const encounters = groupData.encounters || [];
|
||||
const members = [...(groupData.members || [])];
|
||||
const encounters = [...(groupData.encounters || [])];
|
||||
|
||||
// Mettre à jour les membres du groupe
|
||||
if (changes.members !== undefined || changes.encounters !== undefined) {
|
||||
// Update group members and encounters
|
||||
if (changes?.members !== undefined || changes?.encounters !== undefined) {
|
||||
await this._updateMembersInGroup(group, members);
|
||||
await this._updateEncountersInGroup(group, encounters);
|
||||
}
|
||||
|
||||
// Synchroniser les données dans les acteurs membres
|
||||
// Sync data to member actors
|
||||
await this._syncGroupToMembers(group, members);
|
||||
await this._syncGroupToEncounters(group, encounters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour le groupe quand un personnage est modifié
|
||||
* @param {Actor} actor - L'acteur modifié
|
||||
* @param {Object} changes - Les changements effectués
|
||||
* Updates groups when an actor is modified.
|
||||
* @param {Actor} actor - The modified actor
|
||||
* @param {Object} changes - The changes made
|
||||
*/
|
||||
static async updateGroupsOnActorChange(actor, changes) {
|
||||
if (actor.type === 'group') return;
|
||||
if (actor?.type === 'group') return;
|
||||
|
||||
const actorData = actor.system;
|
||||
const encounters = actorData.encounters || [];
|
||||
const encounters = [...(actorData.encounters || [])];
|
||||
|
||||
// Si les rencontres de l'acteur ont changé
|
||||
if (changes.encounters !== undefined) {
|
||||
// Pour chaque groupe dans les rencontres, mettre à jour les membres
|
||||
// If actor's encounters have changed
|
||||
if (changes?.encounters !== undefined) {
|
||||
// Update each group in encounters
|
||||
for (const groupId of encounters) {
|
||||
const group = game.actors.get(groupId);
|
||||
if (group && group.type === 'group') {
|
||||
@@ -58,78 +57,84 @@ export class GroupLink {
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronise les données du groupe vers les acteurs membres
|
||||
* @param {Actor} group - Le groupe
|
||||
* @param {Array} memberIds - Liste des IDs des membres
|
||||
* Syncs group data to member actors.
|
||||
* @param {Actor} group - The group
|
||||
* @param {Array<string>} memberIds - List of member IDs
|
||||
*/
|
||||
static async _syncGroupToMembers(group, memberIds) {
|
||||
const groupId = group.id;
|
||||
|
||||
for (const memberId of memberIds) {
|
||||
const member = game.actors.get(memberId);
|
||||
if (member) {
|
||||
// Vérifier que le groupe est dans les rencontres du membre
|
||||
const memberEncounters = member.system.encounters || [];
|
||||
if (!memberEncounters.includes(group.id)) {
|
||||
// Ajouter le groupe aux rencontres du membre
|
||||
memberEncounters.push(group.id);
|
||||
await member.update({
|
||||
'system.encounters': memberEncounters
|
||||
});
|
||||
}
|
||||
if (!member) continue;
|
||||
|
||||
const memberEncounters = [...(member.system.encounters || [])];
|
||||
if (!memberEncounters.includes(groupId)) {
|
||||
memberEncounters.push(groupId);
|
||||
await member.update({
|
||||
'system.encounters': memberEncounters
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronise les données du groupe vers les acteurs rencontres
|
||||
* @param {Actor} group - Le groupe
|
||||
* @param {Array} encounterIds - Liste des IDs des rencontres
|
||||
* Syncs group data to encounter actors.
|
||||
* @param {Actor} group - The group
|
||||
* @param {Array<string>} encounterIds - List of encounter IDs
|
||||
*/
|
||||
static async _syncGroupToEncounters(group, encounterIds) {
|
||||
const groupId = group.id;
|
||||
|
||||
for (const encounterId of encounterIds) {
|
||||
const encounter = game.actors.get(encounterId);
|
||||
if (encounter) {
|
||||
// Vérifier que le groupe est dans les rencontres de l'acteur
|
||||
const encounterGroups = encounter.system.encounters || [];
|
||||
if (!encounterGroups.includes(group.id)) {
|
||||
encounterGroups.push(group.id);
|
||||
await encounter.update({
|
||||
'system.encounters': encounterGroups
|
||||
});
|
||||
}
|
||||
if (!encounter) continue;
|
||||
|
||||
const encounterGroups = [...(encounter.system.encounters || [])];
|
||||
if (!encounterGroups.includes(groupId)) {
|
||||
encounterGroups.push(groupId);
|
||||
await encounter.update({
|
||||
'system.encounters': encounterGroups
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour les membres dans un groupe
|
||||
* @param {Actor} group - Le groupe
|
||||
* @param {Array} memberIds - Liste des IDs des membres
|
||||
* Updates members in a group.
|
||||
* @param {Actor} group - The group
|
||||
* @param {Array<string>} memberIds - List of member IDs
|
||||
*/
|
||||
static async _updateMembersInGroup(group, memberIds) {
|
||||
const currentMembers = group.system.members || [];
|
||||
const groupId = group.id;
|
||||
const currentMembers = [...(group.system.members || [])];
|
||||
|
||||
// Retirer les membres qui ne sont plus dans la liste
|
||||
const membersToRemove = currentMembers.filter(id => !memberIds.includes(id));
|
||||
const membersToAdd = memberIds.filter(id => !currentMembers.includes(id));
|
||||
// Convert to Sets for O(1) lookups
|
||||
const currentMembersSet = new Set(currentMembers);
|
||||
const memberIdsSet = new Set(memberIds);
|
||||
|
||||
// Mettre à jour les acteurs qui ont été retirés
|
||||
// Find members to remove and add
|
||||
const membersToRemove = [...currentMembersSet].filter(id => !memberIdsSet.has(id));
|
||||
const membersToAdd = [...memberIdsSet].filter(id => !currentMembersSet.has(id));
|
||||
|
||||
// Update actors that were removed
|
||||
for (const memberId of membersToRemove) {
|
||||
const member = game.actors.get(memberId);
|
||||
if (member) {
|
||||
const memberEncounters = (member.system.encounters || []).filter(id => id !== group.id);
|
||||
const memberEncounters = (member.system.encounters || []).filter(id => id !== groupId);
|
||||
await member.update({
|
||||
'system.encounters': memberEncounters
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Mettre à jour les nouveaux membres
|
||||
// Update new members
|
||||
for (const memberId of membersToAdd) {
|
||||
const member = game.actors.get(memberId);
|
||||
if (member) {
|
||||
const memberEncounters = member.system.encounters || [];
|
||||
if (!memberEncounters.includes(group.id)) {
|
||||
memberEncounters.push(group.id);
|
||||
const memberEncounters = [...(member.system.encounters || [])];
|
||||
if (!memberEncounters.includes(groupId)) {
|
||||
memberEncounters.push(groupId);
|
||||
await member.update({
|
||||
'system.encounters': memberEncounters
|
||||
});
|
||||
@@ -139,35 +144,40 @@ export class GroupLink {
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour les rencontres dans un groupe
|
||||
* @param {Actor} group - Le groupe
|
||||
* @param {Array} encounterIds - Liste des IDs des rencontres
|
||||
* Updates encounters in a group.
|
||||
* @param {Actor} group - The group
|
||||
* @param {Array<string>} encounterIds - List of encounter IDs
|
||||
*/
|
||||
static async _updateEncountersInGroup(group, encounterIds) {
|
||||
const currentEncounters = group.system.encounters || [];
|
||||
const groupId = group.id;
|
||||
const currentEncounters = [...(group.system.encounters || [])];
|
||||
|
||||
// Retirer les rencontres qui ne sont plus dans la liste
|
||||
const encountersToRemove = currentEncounters.filter(id => !encounterIds.includes(id));
|
||||
const encountersToAdd = encounterIds.filter(id => !currentEncounters.includes(id));
|
||||
// Convert to Sets for O(1) lookups
|
||||
const currentEncountersSet = new Set(currentEncounters);
|
||||
const encounterIdsSet = new Set(encounterIds);
|
||||
|
||||
// Mettre à jour les acteurs qui ont été retirés des rencontres
|
||||
// Find encounters to remove and add
|
||||
const encountersToRemove = [...currentEncountersSet].filter(id => !encounterIdsSet.has(id));
|
||||
const encountersToAdd = [...encounterIdsSet].filter(id => !currentEncountersSet.has(id));
|
||||
|
||||
// Update actors that were removed from encounters
|
||||
for (const encounterId of encountersToRemove) {
|
||||
const encounter = game.actors.get(encounterId);
|
||||
if (encounter) {
|
||||
const encounterGroups = (encounter.system.encounters || []).filter(id => id !== group.id);
|
||||
const encounterGroups = (encounter.system.encounters || []).filter(id => id !== groupId);
|
||||
await encounter.update({
|
||||
'system.encounters': encounterGroups
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Mettre à jour les nouvelles rencontres
|
||||
// Update new encounters
|
||||
for (const encounterId of encountersToAdd) {
|
||||
const encounter = game.actors.get(encounterId);
|
||||
if (encounter) {
|
||||
const encounterGroups = encounter.system.encounters || [];
|
||||
if (!encounterGroups.includes(group.id)) {
|
||||
encounterGroups.push(group.id);
|
||||
const encounterGroups = [...(encounter.system.encounters || [])];
|
||||
if (!encounterGroups.includes(groupId)) {
|
||||
encounterGroups.push(groupId);
|
||||
await encounter.update({
|
||||
'system.encounters': encounterGroups
|
||||
});
|
||||
@@ -177,12 +187,12 @@ export class GroupLink {
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour un acteur dans les membres d'un groupe
|
||||
* @param {Actor} group - Le groupe
|
||||
* @param {string} actorId - L'ID de l'acteur
|
||||
* Updates an actor in group members.
|
||||
* @param {Actor} group - The group
|
||||
* @param {string} actorId - The actor ID
|
||||
*/
|
||||
static async _updateActorInGroupMembers(group, actorId) {
|
||||
const groupMembers = group.system.members || [];
|
||||
const groupMembers = [...(group.system.members || [])];
|
||||
if (!groupMembers.includes(actorId)) {
|
||||
groupMembers.push(actorId);
|
||||
await group.update({
|
||||
@@ -192,12 +202,12 @@ export class GroupLink {
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour un acteur dans les rencontres d'un groupe
|
||||
* @param {Actor} group - Le groupe
|
||||
* @param {string} actorId - L'ID de l'acteur
|
||||
* Updates an actor in group encounters.
|
||||
* @param {Actor} group - The group
|
||||
* @param {string} actorId - The actor ID
|
||||
*/
|
||||
static async _updateActorInGroupEncounters(group, actorId) {
|
||||
const groupEncounters = group.system.encounters || [];
|
||||
const groupEncounters = [...(group.system.encounters || [])];
|
||||
if (!groupEncounters.includes(actorId)) {
|
||||
groupEncounters.push(actorId);
|
||||
await group.update({
|
||||
@@ -207,30 +217,31 @@ export class GroupLink {
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne les objets Actor pour une liste d'IDs
|
||||
* @param {Array} actorIds - Liste d'IDs d'acteurs
|
||||
* @returns {Array} - Liste d'objets Actor
|
||||
* Returns Actor objects for a list of IDs.
|
||||
* @param {Array<string>} actorIds - List of actor IDs
|
||||
* @returns {Array<Actor>} List of Actor objects
|
||||
*/
|
||||
static getActorObjects(actorIds) {
|
||||
if (!Array.isArray(actorIds)) return [];
|
||||
return actorIds
|
||||
.map(id => game.actors.get(id))
|
||||
.filter(actor => actor !== undefined);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retourne les objets Actor pour les membres d'un groupe
|
||||
* @param {Actor} group - Le groupe
|
||||
* @returns {Array} - Liste d'objets Actor
|
||||
* Returns Actor objects for group members.
|
||||
* @param {Actor} group - The group
|
||||
* @returns {Array<Actor>} List of Actor objects
|
||||
*/
|
||||
static getGroupMembers(group) {
|
||||
const memberIds = group.system.members || [];
|
||||
const memberIds = group?.system?.members || [];
|
||||
return this.getActorObjects(memberIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne les objets Actor pour les rencontres d'un groupe
|
||||
* @param {Actor} group - Le groupe
|
||||
* @returns {Array} - Liste d'objets Actor
|
||||
* Returns Actor objects for group encounters
|
||||
* @param {Actor} group - The group
|
||||
* @returns {Array} - List of Actor objects
|
||||
*/
|
||||
static getGroupEncounters(group) {
|
||||
const encounterIds = group.system.encounters || [];
|
||||
@@ -238,9 +249,9 @@ export class GroupLink {
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne les groupes auxquels un acteur appartient
|
||||
* @param {Actor} actor - L'acteur
|
||||
* @returns {Array} - Liste d'objets Actor (groupes)
|
||||
* Returns groups that an actor belongs to
|
||||
* @param {Actor} actor - The actor
|
||||
* @returns {Array} - List of Actor objects (groups)
|
||||
*/
|
||||
static getActorGroups(actor) {
|
||||
const groupIds = actor.system.encounters || [];
|
||||
@@ -248,9 +259,9 @@ export class GroupLink {
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne les rencontres (PNJ/Créatures) d'un acteur
|
||||
* @param {Actor} actor - L'acteur
|
||||
* @returns {Array} - Liste d'objets Actor (PNJ/Créatures)
|
||||
* Returns encounters (NPC/Creatures) for an actor
|
||||
* @param {Actor} actor - The actor
|
||||
* @returns {Array} - List of Actor objects (NPC/Creatures)
|
||||
*/
|
||||
static getActorEncounters(actor) {
|
||||
const encounterIds = actor.system.encounters || [];
|
||||
@@ -258,25 +269,27 @@ export class GroupLink {
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprime un acteur de tous ses groupes
|
||||
* @param {string} actorId - L'ID de l'acteur à supprimer
|
||||
* Removes an actor from all groups.
|
||||
* @param {string} actorId - The actor ID to remove
|
||||
*/
|
||||
static async removeActorFromAllGroups(actorId) {
|
||||
const allGroups = game.actors.filter(a => a.type === 'group');
|
||||
|
||||
for (const group of allGroups) {
|
||||
const members = group.system.members || [];
|
||||
const encounters = group.system.encounters || [];
|
||||
const members = [...(group.system.members || [])];
|
||||
const encounters = [...(group.system.encounters || [])];
|
||||
|
||||
let needsUpdate = false;
|
||||
const newMembers = members.filter(id => id !== actorId);
|
||||
const newEncounters = encounters.filter(id => id !== actorId);
|
||||
// Use Set for O(1) lookups
|
||||
const membersSet = new Set(members);
|
||||
const encountersSet = new Set(encounters);
|
||||
|
||||
if (newMembers.length !== members.length || newEncounters.length !== encounters.length) {
|
||||
needsUpdate = true;
|
||||
}
|
||||
const hasActorInMembers = membersSet.has(actorId);
|
||||
const hasActorInEncounters = encountersSet.has(actorId);
|
||||
|
||||
if (needsUpdate) {
|
||||
if (hasActorInMembers || hasActorInEncounters) {
|
||||
const newMembers = hasActorInMembers ? members.filter(id => id !== actorId) : members;
|
||||
const newEncounters = hasActorInEncounters ? encounters.filter(id => id !== actorId) : encounters;
|
||||
|
||||
await group.update({
|
||||
'system.members': newMembers,
|
||||
'system.encounters': newEncounters
|
||||
@@ -284,7 +297,7 @@ export class GroupLink {
|
||||
}
|
||||
}
|
||||
|
||||
// Supprimer les groupes des rencontres de l'acteur
|
||||
// Remove groups from actor encounters
|
||||
const actor = game.actors.get(actorId);
|
||||
if (actor) {
|
||||
await actor.update({
|
||||
@@ -294,9 +307,9 @@ export class GroupLink {
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un acteur à un groupe
|
||||
* @param {string} actorId - L'ID de l'acteur
|
||||
* @param {string} groupId - L'ID du groupe
|
||||
* Adds an actor to a group.
|
||||
* @param {string} actorId - The actor ID
|
||||
* @param {string} groupId - The group ID
|
||||
*/
|
||||
static async addActorToGroup(actorId, groupId) {
|
||||
const actor = game.actors.get(actorId);
|
||||
@@ -304,8 +317,8 @@ export class GroupLink {
|
||||
|
||||
if (!actor || !group || group.type !== 'group') return;
|
||||
|
||||
// Ajouter l'acteur aux membres du groupe
|
||||
const groupMembers = group.system.members || [];
|
||||
// Add actor to group members using spread operator
|
||||
const groupMembers = [...(group.system.members || [])];
|
||||
if (!groupMembers.includes(actorId)) {
|
||||
groupMembers.push(actorId);
|
||||
await group.update({
|
||||
@@ -313,8 +326,8 @@ export class GroupLink {
|
||||
});
|
||||
}
|
||||
|
||||
// Ajouter le groupe aux rencontres de l'acteur
|
||||
const actorEncounters = actor.system.encounters || [];
|
||||
// Add group to actor encounters using spread operator
|
||||
const actorEncounters = [...(actor.system.encounters || [])];
|
||||
if (!actorEncounters.includes(groupId)) {
|
||||
actorEncounters.push(groupId);
|
||||
await actor.update({
|
||||
@@ -324,9 +337,9 @@ export class GroupLink {
|
||||
}
|
||||
|
||||
/**
|
||||
* Retire un acteur d'un groupe
|
||||
* @param {string} actorId - L'ID de l'acteur
|
||||
* @param {string} groupId - L'ID du groupe
|
||||
* Removes an actor from a group.
|
||||
* @param {string} actorId - The actor ID
|
||||
* @param {string} groupId - The group ID
|
||||
*/
|
||||
static async removeActorFromGroup(actorId, groupId) {
|
||||
const actor = game.actors.get(actorId);
|
||||
@@ -334,64 +347,66 @@ export class GroupLink {
|
||||
|
||||
if (!actor || !group || group.type !== 'group') return;
|
||||
|
||||
// Retirer l'acteur des membres du groupe
|
||||
const groupMembers = (group.system.members || []).filter(id => id !== actorId);
|
||||
// Remove actor from group members using spread operator and filter
|
||||
const groupMembers = [...(group.system.members || [])].filter(id => id !== actorId);
|
||||
await group.update({
|
||||
'system.members': groupMembers
|
||||
});
|
||||
|
||||
// Retirer le groupe des rencontres de l'acteur
|
||||
const actorEncounters = (actor.system.encounters || []).filter(id => id !== groupId);
|
||||
// Remove group from actor encounters using spread operator and filter
|
||||
const actorEncounters = [...(actor.system.encounters || [])].filter(id => id !== groupId);
|
||||
await actor.update({
|
||||
'system.encounters': actorEncounters
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise les hooks pour la synchronisation automatique
|
||||
* Initializes hooks for automatic synchronization between actors and groups.
|
||||
* Sets up event listeners for actor creation, updates, and deletion.
|
||||
*/
|
||||
static registerHooks() {
|
||||
// Hook sur la mise à jour d'un acteur
|
||||
// Hook on actor update - synchronize group memberships
|
||||
Hooks.on('updateActor', async (actor, changes, options, userId) => {
|
||||
if (!game.user.isGM && userId !== game.userId) return;
|
||||
|
||||
// Si c'est un groupe qui est mis à jour
|
||||
// If it is a group being updated, sync its members
|
||||
if (actor.type === 'group') {
|
||||
await this.updateActorsOnGroupChange(actor, changes);
|
||||
}
|
||||
// Si c'est un autre acteur qui est mis à jour
|
||||
// If it is another actor being updated, sync its groups
|
||||
else {
|
||||
await this.updateGroupsOnActorChange(actor, changes);
|
||||
}
|
||||
});
|
||||
|
||||
// Hook sur la création d'un acteur
|
||||
// Hook on actor creation - clean up invalid group references
|
||||
Hooks.on('createActor', async (actor, options, userId) => {
|
||||
if (!game.user.isGM && userId !== game.userId) return;
|
||||
|
||||
// Si un personnage est créé, vérifier qu'il n'a pas de groupes invalides
|
||||
// If a character is created, check for invalid group references
|
||||
if (actor.type !== 'group') {
|
||||
const encounters = actor.system.encounters || [];
|
||||
for (const groupId of encounters) {
|
||||
const group = game.actors.get(groupId);
|
||||
if (!group) {
|
||||
// Nettoyer les références invalides
|
||||
await actor.update({
|
||||
'system.encounters': encounters.filter(id => game.actors.get(id))
|
||||
});
|
||||
}
|
||||
const encounters = [...(actor.system.encounters || [])];
|
||||
const validGroups = new Set(
|
||||
encounters.filter(id => game.actors.get(id))
|
||||
);
|
||||
|
||||
// Only update if there are invalid references
|
||||
if (validGroups.size !== encounters.length) {
|
||||
await actor.update({
|
||||
'system.encounters': [...validGroups]
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Hook sur la suppression d'un acteur
|
||||
// Hook on actor deletion - clean up references
|
||||
Hooks.on('deleteActor', async (actor, options, userId) => {
|
||||
if (!game.user.isGM && userId !== game.userId) return;
|
||||
|
||||
if (actor.type === 'group') {
|
||||
// Si un groupe est supprimé, nettoyer les références dans les acteurs
|
||||
const memberIds = actor.system.members || [];
|
||||
const encounterIds = actor.system.encounters || [];
|
||||
// If a group is deleted, clean up references in its members and encounters
|
||||
const memberIds = [...(actor.system.members || [])];
|
||||
const encounterIds = [...(actor.system.encounters || [])];
|
||||
|
||||
for (const id of [...memberIds, ...encounterIds]) {
|
||||
const a = game.actors.get(id);
|
||||
@@ -403,7 +418,7 @@ export class GroupLink {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Si un acteur est supprimé, le retirer de tous les groupes
|
||||
// If an actor is deleted, remove it from all groups
|
||||
await this.removeActorFromAllGroups(actor.id);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user