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) {