From 553e28fb5be603f58be3957f8e56b6c3c465c75a Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Mon, 27 Feb 2017 18:54:29 -0800 Subject: [PATCH 1/5] Prevent duplicate party members - Addresses the issue in the client and server. - Keep track of which players (by name) are added to the party UI in `onGetParty()' to prevent duplicate frames for a player. - On the server side, don't add a player ID to the party if already present. --- src/client/ui/templates/party/party.js | 14 ++++++++++++++ src/server/components/social.js | 9 ++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/client/ui/templates/party/party.js b/src/client/ui/templates/party/party.js index 69afe7f3..ca42076f 100644 --- a/src/client/ui/templates/party/party.js +++ b/src/client/ui/templates/party/party.js @@ -100,6 +100,12 @@ define([ }, onGetParty: function(party) { + // Destroy invite frame if you join a party + if (this.invite) { + this.invite.el.remove(); + this.invite = null; + } + var container = this.find('.party .list') .empty(); @@ -107,6 +113,8 @@ define([ if (!party) return; + var members = {}; + party.forEach(function(p) { if (p == window.player.serverId) return; @@ -117,6 +125,10 @@ define([ var name = player ? player.name : 'unknown'; var level = 'level: ' + (player ? player.level : '?'); + // Disallow duplicate frames for players in the party + if (members[name]) + return; + var html = templatePartyMember .replace('$NAME$', name) .replace('$LEVEL$', level); @@ -135,6 +147,8 @@ define([ }); if ((memberObj) && (memberObj.stats)) this.onGetPartyStats(p, memberObj.stats.values); + + members[name] = 1; }, this); }, diff --git a/src/server/components/social.js b/src/server/components/social.js index d7b5c2fc..3077b6d0 100644 --- a/src/server/components/social.js +++ b/src/server/components/social.js @@ -181,7 +181,14 @@ define([ this.updatePartyOnThread(); } - this.party.push(sourceId); + // Only add if not yet in party + if (!this.party.find(function (id) { + return id === sourceId; + }) + ) { + this.party.push(sourceId); + } + this.updatePartyOnThread(); this.party.forEach(function(p) { From 1bdab1a4495d365bf4a7215eed98734eecf340e4 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Mon, 27 Feb 2017 22:59:12 -0800 Subject: [PATCH 2/5] Use destroyInvite() --- src/client/ui/templates/party/party.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/client/ui/templates/party/party.js b/src/client/ui/templates/party/party.js index ca42076f..ed54515f 100644 --- a/src/client/ui/templates/party/party.js +++ b/src/client/ui/templates/party/party.js @@ -101,10 +101,8 @@ define([ onGetParty: function(party) { // Destroy invite frame if you join a party - if (this.invite) { - this.invite.el.remove(); - this.invite = null; - } + if (this.invite) + this.destroyInvite(); var container = this.find('.party .list') .empty(); From e07ac73608715676cdd38f6a59dce1bb1be2402d Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Tue, 28 Feb 2017 09:03:14 -0800 Subject: [PATCH 3/5] Clean up arrow notation --- src/server/components/social.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/server/components/social.js b/src/server/components/social.js index 3077b6d0..33213f07 100644 --- a/src/server/components/social.js +++ b/src/server/components/social.js @@ -182,12 +182,8 @@ define([ } // Only add if not yet in party - if (!this.party.find(function (id) { - return id === sourceId; - }) - ) { + if (!this.party.find(f => (id === sourceId))) this.party.push(sourceId); - } this.updatePartyOnThread(); From 64c637c9a2dc7055663947aa8d6ea8e55385bddd Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Tue, 28 Feb 2017 09:55:52 -0800 Subject: [PATCH 4/5] Fix incorrect arrow notation --- src/server/components/social.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/components/social.js b/src/server/components/social.js index 33213f07..70cfa89e 100644 --- a/src/server/components/social.js +++ b/src/server/components/social.js @@ -182,7 +182,7 @@ define([ } // Only add if not yet in party - if (!this.party.find(f => (id === sourceId))) + if (!this.party.find(id => (id === sourceId))) this.party.push(sourceId); this.updatePartyOnThread(); From cb222e5db106ed1c12f7afac8237bbc16930e89d Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Tue, 28 Feb 2017 09:56:45 -0800 Subject: [PATCH 5/5] Remove duplicate check in party UI template - The server should not send a party that contains duplicate member IDs. --- src/client/ui/templates/party/party.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/client/ui/templates/party/party.js b/src/client/ui/templates/party/party.js index ed54515f..475c7429 100644 --- a/src/client/ui/templates/party/party.js +++ b/src/client/ui/templates/party/party.js @@ -111,8 +111,6 @@ define([ if (!party) return; - var members = {}; - party.forEach(function(p) { if (p == window.player.serverId) return; @@ -123,10 +121,6 @@ define([ var name = player ? player.name : 'unknown'; var level = 'level: ' + (player ? player.level : '?'); - // Disallow duplicate frames for players in the party - if (members[name]) - return; - var html = templatePartyMember .replace('$NAME$', name) .replace('$LEVEL$', level); @@ -145,8 +139,6 @@ define([ }); if ((memberObj) && (memberObj.stats)) this.onGetPartyStats(p, memberObj.stats.values); - - members[name] = 1; }, this); },