Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 

237 rindas
5.1 KiB

  1. define([
  2. 'js/system/events',
  3. 'js/system/client',
  4. 'js/system/globals',
  5. 'js/objects/objects',
  6. 'html!ui/templates/party/template',
  7. 'css!ui/templates/party/styles',
  8. 'html!ui/templates/party/templateInvite',
  9. 'html!ui/templates/party/templatePartyMember'
  10. ], function(
  11. events,
  12. client,
  13. globals,
  14. objects,
  15. template,
  16. styles,
  17. templateInvite,
  18. templatePartyMember
  19. ) {
  20. return {
  21. tpl: template,
  22. invite: null,
  23. party: null,
  24. postRender: function() {
  25. this.onEvent('onGetInvite', this.onGetInvite.bind(this));
  26. this.onEvent('onGetParty', this.onGetParty.bind(this));
  27. this.onEvent('onPartyDisband', this.onPartyDisband.bind(this));
  28. this.onEvent('onGetConnectedPlayer', this.onGetConnectedPlayer.bind(this));
  29. this.onEvent('onGetPartyStats', this.onGetPartyStats.bind(this));
  30. },
  31. onGetConnectedPlayer: function(msg) {
  32. var party = this.party;
  33. if (!party)
  34. return;
  35. if (!(msg instanceof Array))
  36. msg = [ msg ];
  37. msg.forEach(function(m) {
  38. if (party.indexOf(m.id) == -1)
  39. return;
  40. var zone = m.zone;
  41. if (m.id == window.player.serverId) {
  42. party.forEach(function(p) {
  43. var player = globals.onlineList.find(function(o) {
  44. return (o.id == p)
  45. });
  46. var el = this.find('.member[memberId="' + p + '"]');
  47. el.removeClass('differentZone');
  48. if (player.zone != zone)
  49. el.addClass('differentZone');
  50. }, this);
  51. } else {
  52. var el = this.find('.member[memberId="' + m.id + '"]');
  53. el.removeClass('differentZone');
  54. if (m.zone != window.player.zone)
  55. el.addClass('differentZone');
  56. el.find('.txtLevel').html('level: ' + m.level);
  57. }
  58. }, this);
  59. },
  60. onGetPartyStats: function(id, stats) {
  61. var party = this.party;
  62. if (!party)
  63. return;
  64. var el = this.find('.member[memberId="' + id + '"]');
  65. if (el.length == 0)
  66. return;
  67. if ((stats.hp != null) && (stats.hpMax != null)) {
  68. var hpPercentage = Math.min(100, (stats.hp / stats.hpMax) * 100);
  69. el.find('.statHp').css('width', hpPercentage + '%');
  70. }
  71. if ((stats.mana != null) && (stats.manaMax != null)) {
  72. var manaPercentage = Math.min((stats.mana / stats.manaMax) * 100, 100);
  73. el.find('.statMana').css('width', manaPercentage + '%');
  74. }
  75. if (stats.level != null) {
  76. el.find('.txtLevel').html('level: ' + stats.level);
  77. }
  78. },
  79. onPartyDisband: function() {
  80. this.find('.party .list')
  81. .empty();
  82. },
  83. onGetParty: function(party) {
  84. // Destroy invite frame if you join a party
  85. if (this.invite)
  86. this.destroyInvite();
  87. var container = this.find('.party .list')
  88. .empty();
  89. this.party = party;
  90. if (!party)
  91. return;
  92. var members = {};
  93. party.forEach(function(p) {
  94. if (p == window.player.serverId)
  95. return;
  96. var player = globals.onlineList.find(function(o) {
  97. return (o.id == p)
  98. });
  99. var name = player ? player.name : 'unknown';
  100. var level = 'level: ' + (player ? player.level : '?');
  101. // Disallow duplicate frames for players in the party
  102. if (members[name])
  103. return;
  104. var html = templatePartyMember
  105. .replace('$NAME$', name)
  106. .replace('$LEVEL$', level);
  107. var el = $(html)
  108. .appendTo(container)
  109. .attr('memberId', p)
  110. .on('contextmenu', this.showContext.bind(this, name, p));
  111. if (player.zone != window.player.zone)
  112. el.addClass('differentZone');
  113. //Find stats
  114. var memberObj = objects.objects.find(function(o) {
  115. return (o.serverId == p);
  116. });
  117. if ((memberObj) && (memberObj.stats))
  118. this.onGetPartyStats(p, memberObj.stats.values);
  119. members[name] = 1;
  120. }, this);
  121. },
  122. showContext: function(charName, id, e) {
  123. events.emit('onContextMenu', [{
  124. text: 'whisper',
  125. callback: events.emit.bind(events, 'onDoWhisper', charName)
  126. }, {
  127. text: 'remove from party',
  128. callback: this.removeFromParty.bind(this, id)
  129. }, {
  130. text: 'leave party',
  131. callback: this.leaveParty.bind(this)
  132. }], e);
  133. e.preventDefault;
  134. return false;
  135. },
  136. onGetInvite: function(sourceId) {
  137. if (this.invite)
  138. this.destroyInvite();
  139. var sourcePlayer = globals.onlineList.find(function(o) {
  140. return (o.id == sourceId)
  141. });
  142. var html = templateInvite
  143. .replace('$NAME$', sourcePlayer.name);
  144. var el = $(html)
  145. .appendTo(this.el);
  146. el
  147. .find('[class^="btn"]')
  148. .on('click', this.destroyInvite.bind(this));
  149. this.invite = {
  150. fromId: sourcePlayer.id,
  151. fromName: sourcePlayer.name,
  152. el: el
  153. };
  154. },
  155. destroyInvite: function(e) {
  156. if (e) {
  157. if ($(e.target).hasClass('btnAccept'))
  158. this.acceptInvite();
  159. else
  160. this.declineInvite();
  161. }
  162. this.invite.el.remove();
  163. this.invite = null;
  164. },
  165. acceptInvite: function() {
  166. client.request({
  167. cpn: 'social',
  168. method: 'acceptInvite',
  169. id: this.invite.fromId
  170. });
  171. },
  172. declineInvite: function() {
  173. client.request({
  174. cpn: 'social',
  175. method: 'declineInvite',
  176. id: this.invite.fromId,
  177. data: {
  178. targetId: window.player.serverId
  179. }
  180. });
  181. },
  182. removeFromParty: function(id) {
  183. client.request({
  184. cpn: 'social',
  185. method: 'removeFromParty',
  186. data: id
  187. });
  188. },
  189. leaveParty: function() {
  190. client.request({
  191. cpn: 'social',
  192. method: 'leaveParty'
  193. });
  194. }
  195. }
  196. });