Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.88 KB | None | 0 0
  1. var cls = require('../lib/class'),
  2. Minigame = require('./minigame'),
  3. Messages = require('../network/packets/message'),
  4. Types = require('../../../../shared/js/gametypes'),
  5. Utils = require('../utils/utils');
  6.  
  7. /**
  8. * To do - We must give rewards in accordance to a player's
  9. * level and contribution towards the game.
  10. * We must set an initial baseline for victory such as 1000 gold and 1000 exp.
  11. */
  12.  
  13.  
  14. module.exports = PVPGame = Minigame.extend({
  15. init: function(world, id, name) {
  16. var self = this;
  17.  
  18. self._super(id, name);
  19. self.world = world; //We pass server instances and such we have full control.
  20. self.players = [];
  21. self.playersInGame = [];
  22. self.redScore = 0;
  23. self.blueScore = 0;
  24. self.timer = 20; //Set initial timer
  25. self.started = false;
  26.  
  27. self.start();
  28.  
  29. self.onCountdownComplete(function() {
  30. if (self.players <= 0)
  31. return;
  32.  
  33. if (self.hasStarted()) {
  34. self.started = false;
  35. self.endGame();
  36. return;
  37. }
  38.  
  39. var allPlayers = self.players.slice(),
  40. redPlayers = allPlayers.splice(0, Math.ceil(allPlayers.length / 2)),
  41. bluePlayers = allPlayers;
  42.  
  43. if (redPlayers.length <= 0 || bluePlayers <= 0)
  44. return;
  45.  
  46. for (var index in redPlayers) {
  47. var playerId = redPlayers[index],
  48. player = self.world.getEntityById(playerId);
  49.  
  50. if (player)
  51. player.setTeam(Types.Messages.REDTEAM);
  52. }
  53.  
  54. for (var index in bluePlayers) {
  55. var playerId = bluePlayers[index],
  56. player = self.world.getEntityById(playerId);
  57.  
  58. if (player)
  59. player.setTeam(Types.Messages.BLUETEAM);
  60. }
  61.  
  62. self.started = true;
  63. self.playersInGame = redPlayers.concat(bluePlayers);
  64.  
  65. self.beginGame();
  66. });
  67. },
  68.  
  69. start: function() {
  70. var self = this;
  71.  
  72. self.processInterval = setInterval(function() {
  73. if (self.playerCount() > 1) {
  74. if (self.timer <= 0) {
  75. if (self.countdown_callback)
  76. self.countdown_callback();
  77.  
  78. self.resetTimer();
  79. }
  80.  
  81. for (var i in self.players) {
  82. var playerId = self.players[i];
  83.  
  84. var player = self.world.getEntityById(playerId);
  85.  
  86. if (player) {
  87. if (!player.gameFlag)
  88. self.removePlayer(player);
  89.  
  90. try {
  91. self.world.pushToPlayer(player, new Messages.GameData(self.timer, self.redScore, self.blueScore));
  92. player.packetHandler.broadcast(new Messages.MinigameTeam(player.getTeam(), player.id), false);
  93. } catch (e) {
  94. log.info('[PVPGame] An error has been encountered: ' + e);
  95. }
  96. }
  97. }
  98.  
  99. self.timer--;
  100. }
  101. }, 1000);
  102. },
  103.  
  104. restart: function() {
  105. var self = this;
  106.  
  107. clearInterval(self.processInterval);
  108. self.players = [];
  109.  
  110. self.startProcess();
  111. },
  112.  
  113. stop: function() {
  114. var self = this;
  115.  
  116. clearInterval(self.processInterval);
  117. },
  118.  
  119. addPlayer: function(player) {
  120. var self = this;
  121.  
  122. self.players.push(player.id);
  123. },
  124.  
  125. removePlayer: function(player) {
  126. var self = this,
  127. index = self.players.indexOf(player.id);
  128.  
  129. if (index > -1)
  130. self.players.splice(index, 1);
  131. },
  132.  
  133. isInGame: function(player) {
  134. var self = this;
  135.  
  136. for (var p in self.players)
  137. if (p.id == player.id)
  138. return true;
  139.  
  140. return false;
  141. },
  142.  
  143. beginGame: function() {
  144. var self = this;
  145.  
  146. for (var index in self.playersInGame) {
  147. var playerId = self.playersInGame[index],
  148. orientation = Utils.randomInt(1, 4),
  149. offset = Utils.randomInt(-2, 2),
  150. player = self.world.getEntityById(playerId);
  151.  
  152. if (player) {
  153. if (player.getTeam() == Types.Messages.REDTEAM)
  154. player.forcefullyTeleport(163 + offset, 499 + offset, orientation);
  155. else if (player.getTeam() == Types.Messages.BLUETEAM)
  156. player.forcefullyTeleport(133 + offset, 471 + offset, orientation);
  157. }
  158. }
  159. },
  160.  
  161. endGame: function() {
  162. var self = this,
  163. winningTeam = self.getWinningTeam();
  164.  
  165. for (var i in self.playersInGame) {
  166. var playerId = self.playersInGame[i],
  167. orientation = Utils.randomInt(1, 4),
  168. player = self.world.getEntityById(playerId),
  169. offset = Utils.randomInt(-5, 5);
  170.  
  171. if (player) {
  172. player.forcefullyTeleport(147 + offset, 433 + offset, orientation);
  173.  
  174. if (winningTeam == -1) {
  175. self.sendNotification(player, "The game has resulted in a draw!");
  176. continue;
  177. }
  178.  
  179. if (player.getTeam() == winningTeam) {
  180. self.sendNotification(player, "You have received 3000 gold and 1500 exp for your victory!");
  181. player.incExp(1500);
  182. player.inventory.putInventory(400, 3000);
  183. self.world.pushToPlayer(player, new Messages.Kill('null', player.level, 1500));
  184. } else {
  185. var randomCoins = Utils.randomInt(10, 50 * player.level);
  186. self.sendNotification(player, "You have received: " + randomCoins + " coins for your attempts.");
  187. player.inventory.putInventory(400, randomCoins);
  188. }
  189. }
  190. }
  191.  
  192. self.redScore = 0;
  193. self.blueScore = 0;
  194. },
  195.  
  196. getWinningTeam: function() {
  197. var self = this;
  198.  
  199. if (self.redScore == self.blueScore)
  200. return -1;
  201.  
  202. return self.redScore > self.blueScore ? Types.Messages.BLUETEAM : Types.Messages.REDTEAM;
  203. },
  204.  
  205. onCountdownComplete: function(callback) {
  206. this.countdown_callback = callback;
  207. },
  208.  
  209. playerCount: function() {
  210. return this.players.length;
  211. },
  212.  
  213. resetTimer: function() {
  214. this.timer = 100;
  215. },
  216.  
  217. sendNotification: function(player, message) {
  218. var self = this;
  219.  
  220. self.world.pushToPlayer(player, new Messages.Notify(message));
  221. },
  222.  
  223. hasStarted: function() {
  224. return this.started;
  225. }
  226. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement