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.
 
 
 

148 rindas
3.1 KiB

  1. define([
  2. 'objects/objects'
  3. ], function (
  4. objects
  5. ) {
  6. return {
  7. players: [],
  8. onHandshake: function (socket) {
  9. var p = objects.build();
  10. p.socket = socket;
  11. p.addComponent('auth');
  12. p.addComponent('player');
  13. this.players.push(p);
  14. },
  15. onDisconnect: function (socket) {
  16. var player = this.players.find(p => p.socket.id == socket.id);
  17. if (!player)
  18. return;
  19. var sessionDuration = 0;
  20. if (player.id != null) {
  21. if (player.social)
  22. player.social.dc();
  23. sessionDuration = ~~(((+new Date) - player.player.sessionStart) / 1000);
  24. atlas.updateObject(player, {
  25. components: [{
  26. type: 'stats',
  27. sessionDuration: sessionDuration
  28. }]
  29. });
  30. atlas.removeObject(player);
  31. }
  32. if (player.name) {
  33. io.sockets.emit('events', {
  34. onGetMessages: [{
  35. messages: [{
  36. class: 'q3',
  37. message: player.name + ' has gone offline'
  38. }]
  39. }],
  40. onGetDisconnectedPlayer: [player.name]
  41. });
  42. }
  43. this.players.spliceWhere(p => p.socket.id == socket.id);
  44. },
  45. route: function (socket, msg) {
  46. var player = null;
  47. if (msg.id != null) {
  48. player = this.players.find(p => p.id == msg.id);
  49. var source = this.players.find(p => p.socket.id == socket.id);
  50. if (!source)
  51. return;
  52. if (!msg.data)
  53. msg.data = {};
  54. msg.data.sourceId = source.id;
  55. } else
  56. player = this.players.find(p => p.socket.id == socket.id);
  57. if ((!player) || ((player.permadead) && (['getCharacterList', 'getCharacter', 'deleteCharacter'].indexOf(msg.method) === -1)))
  58. return;
  59. var cpn = player[msg.cpn];
  60. if (!cpn)
  61. return;
  62. if (cpn[msg.method])
  63. cpn[msg.method](msg);
  64. },
  65. unzone: function (msg) {
  66. var socket = msg.socket;
  67. var player = this.players.find(p => p.socket.id == socket.id);
  68. if (!player)
  69. return;
  70. if (player.social)
  71. player.social.dc();
  72. atlas.removeObject(player, true);
  73. var keys = Object.keys(player);
  74. keys.forEach(function (k) {
  75. var val = player[k];
  76. if ((val != null) && (typeof (val) == 'object') && (val.type)) {
  77. var type = val.type;
  78. if ((type != 'player') && (type != 'auth') && (type != 'syncer')) {
  79. delete player[k];
  80. }
  81. }
  82. });
  83. io.sockets.emit('events', {
  84. onGetMessages: [{
  85. messages: [{
  86. class: 'q3',
  87. message: player.name + ' has gone offline'
  88. }]
  89. }],
  90. onGetDisconnectedPlayer: [player.name]
  91. });
  92. //If we don't do this, the atlas will try to remove it from the thread
  93. player.zoneName = null;
  94. player.name = null;
  95. },
  96. logOut: function (exclude) {
  97. var players = this.players;
  98. var pLen = players.length;
  99. for (var i = 0; i < pLen; i++) {
  100. var p = players[i];
  101. if ((!p) || (p == exclude) || (!p.auth))
  102. continue;
  103. if (p.auth.username == exclude.auth.username)
  104. p.socket.emit('dc', {});
  105. }
  106. },
  107. getCharacterList: function (msg) {
  108. var result = [];
  109. var players = this.players;
  110. var pLen = players.length;
  111. for (var i = 0; i < pLen; i++) {
  112. var p = players[i];
  113. if (!p.name)
  114. continue;
  115. result.push({
  116. zone: p.zone,
  117. name: p.name,
  118. level: p.level,
  119. class: p.class,
  120. id: p.id
  121. });
  122. }
  123. return result;
  124. }
  125. };
  126. });