Advertisement
Guest User

hangman.js

a guest
Jul 3rd, 2015
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.78 KB | None | 0 0
  1. var hangedMan =
  2. "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_______&nbsp;<br />" +
  3. "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>" +
  4. "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(_)<br/>" +
  5. "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\\|/<br/>" +
  6. "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>" +
  7. "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;\\<br/>" +
  8. "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>" +
  9. "___|___&nbsp;<br/>";
  10.  
  11. exports.commands = {
  12. hang: 'hangman',
  13. hangman: function (target, room, user) {
  14. if (!this.canTalk()) return this.sendReply("You are unable to talk in this room.");
  15. if (!target) target = 'view';
  16. var cmd = (~target.indexOf(',') ? target.substr(0, target.indexOf(',')) : target).trim();
  17. var targetSplit = target.split(',');
  18. for (var u in targetSplit) targetSplit[u] = targetSplit[u].trim();
  19.  
  20. switch (cmd) {
  21. case 'help':
  22. if (!this.canBroadcast()) return false;
  23. this.sendReplyBox(
  24. "<b>Hangman commands:</b> <br />" +
  25. "- /hang command - Short alias for /hangman.<br />" +
  26. "- /hangman new/create/start, [word], [topic] - Creates a game of hangman.<br />" +
  27. "- /hangman view - Shows the current state of the hangman game.<br />" +
  28. "- /hangman topic/changetopic, [newtopic] - Changes the topic of the hangman game.<br />" +
  29. "- /hangman word - View the current word.<br />" +
  30. "- /hangman guess, [letter] - Guess a letter. Alias: /g<br />" +
  31. "- /hangman guessword, [word] - Guess the word. Alias: /gw<br />" +
  32. "- /hangman enable/disable - Enables/disables hangman in the current room."
  33. );
  34. break;
  35. case 'new':
  36. case 'start':
  37. case 'create':
  38. if (!user.can('broadcast', null, room)) return this.sendReply("/hangman create - Access denied.");
  39. if (!room.hangmanEnabled) return this.sendReply("Hangman is disabled in this room.");
  40. if (!targetSplit || !targetSplit[2]) return this.sendReply("Usage: /hangman [create], [word], [topic]");
  41. var word = toId(targetSplit[1]);
  42. word = word.replace(/[^a-z]+/g, '');
  43. if (word.length > 10) return this.sendReply("Words may not be longer than 10 characters.");
  44. targetSplit.splice(0, 2);
  45. var topic = targetSplit.join(' ');
  46. if (topic.length > 30) return this.sendReply("The topic may not be longer than 30 characters.");
  47.  
  48. room.hangman = {};
  49. room.hangman.word = word;
  50. room.hangman.topic = topic;
  51. room.hangman.hangmaner = user.userid;
  52. room.hangman.guessWord = [];
  53. room.hangman.guessedLetters = [];
  54. room.hangman.guessedWords = [];
  55. room.hangman.guesses = 8;
  56.  
  57. for (var i = 0; i < word.length; i++) {
  58. room.hangman.guessWord.push('_');
  59. }
  60. room.add(
  61. "|raw|<div class =\"infobox\"><div class=\"broadcast-green\"><center><font size=2><b>" + Tools.escapeHTML(user.name) +
  62. "</b> started a game of hangman! The word has <b>" + word.length + "</b> letters.<br />" + room.hangman.guessWord.join(" ") +
  63. "<br />Topic: " + Tools.escapeHTML(room.hangman.topic) + "</font><br>" +
  64. "Use <b>/g <i>letter</i></b> to guess a letter or <b>/gw <i>word</i></b> to guess a word</div></div>"
  65. );
  66. room.update();
  67. break;
  68. case 'view':
  69. if (!room.hangman) return this.sendReply("There's no game of hangman in this room.");
  70. if (!this.canBroadcast()) return;
  71. this.sendReplyBox(
  72. "<center><font size=2>" + room.hangman.guessWord.join(" ") + "<br />Guesses left: " + room.hangman.guesses +
  73. "<br />Topic: " + Tools.escapeHTML(room.hangman.topic) + "</font></center>"
  74. );
  75. break;
  76. case 'topic':
  77. case 'changetopic':
  78. if (!room.hangman) return this.sendReply("There's no game of hangman in this room.");
  79. if (user.userid !== room.hangman.hangmaner) return this.sendReply("You can't change the topic if you're not running hangman.");
  80. if (!targetSplit || !targetSplit[1]) return this.sendReply("Usage: /hangman [topic], [newtopic]");
  81. targetSplit.splice(0, 1);
  82. var topic = targetSplit.join(' ');
  83. if (topic.length > 30) return this.sendReply("The topic may not be longer than 30 characters.");
  84.  
  85. room.hangman.topic = topic;
  86. room.add("<div class=\"infobox\">The hangman topic has been changed to '" + Tools.escapeHTML(topic) + "'.");
  87. room.update();
  88. break;
  89. case 'word':
  90. case 'viewword':
  91. if (!room.hangman) return this.sendReply("There's no game of hangman in this room.");
  92. if (user.userid !== room.hangman.hangmaner) return this.sendReply("You're not the user who started this game.");
  93. this.sendReply("Your word is '" + room.hangman.word + "'.");
  94. break;
  95. case 'guess':
  96. if (!room.hangman) return this.sendReply("There's no game of hangman in this room.");
  97. if (user.userid === room.hangman.hangmaner) return this.sendReply("You can't guess a letter because you're running hangman.");
  98. if (!targetSplit || !targetSplit[1]) return this.sendReply("Usage: /hangman [guess], [letter]");
  99. if (targetSplit[1].length > 1) return this.sendReply("Please specify a letter to guess. To guess the word use /hangman [guessword], [word]");
  100. var letter = targetSplit[1];
  101. if (~room.hangman.guessedLetters.indexOf(letter)) return this.sendReply("Someone has already guessed that letter.");
  102. var found = false;
  103. room.hangman.guessedLetters.push(letter);
  104.  
  105. for (var u in room.hangman.word) {
  106. if (room.hangman.word[u] === letter) {
  107. room.hangman.guessWord[u] = room.hangman.word[u];
  108. found = true;
  109. }
  110. }
  111.  
  112. room.hangman.guesses--;
  113.  
  114. if (found) {
  115. if (!~room.hangman.guessWord.indexOf('_')) {
  116. room.add("|raw|<div class=\"infobox\">Congratulations! <b>" + Tools.escapeHTML(user.name) + "</b> has guessed the word, which was: <b>" + room.hangman.word + "</b></div>");
  117. room.update();
  118. delete room.hangman;
  119. return;
  120. }
  121.  
  122. room.add("|raw|<div class=\"infobox\">" + Tools.escapeHTML(user.name) + " guessed the letter '" + letter + "'<br />Word: " + room.hangman.guessWord.join(' ') + "</div>");
  123. room.update();
  124. return;
  125. }
  126.  
  127. if (room.hangman.guesses < 1) {
  128. room.add(
  129. "|raw|<div class=\"infobox\"><b>" + Tools.escapeHTML(user.name) + "</b> guessed the letter '" + letter + "', but it was not in the word.<br />" +
  130. "You have failed to guess the word, so the man has been hanged.<br />" +
  131. "The word was '" + room.hangman.word + "'.<br />" + hangedMan + "</div>"
  132. );
  133. room.update();
  134. delete room.hangman;
  135. return;
  136. }
  137.  
  138. room.add("|raw|<div class=\"infobox\"><b>" + Tools.escapeHTML(user.name) + "</b> guessed the letter '" + letter + "' but it was not in the word.<br />Guesses left: " + room.hangman.guesses + "</div>");
  139. room.update();
  140. break;
  141. case 'guessword':
  142. if (!room.hangman) return this.sendReply("There's no game of hangman in this room.");
  143. if (user.userid === room.hangman.hangmaner) return this.sendReply("You can't guess the word because you're running hangman.");
  144. if (!targetSplit || !targetSplit[1]) return this.sendReply("Usage: /hangman [guessword], [word]");
  145. if (targetSplit[1].length !== room.hangman.word.length) return this.sendReply("You can't guess a word that doesn't match the length of the hangman word.");
  146. var word = targetSplit[1];
  147. if (~room.hangman.guessedWords.indexOf(word.toLowerCase())) return this.sendReply("That word has already been guessed.");
  148. room.hangman.guessedWords.push(word.toLowerCase());
  149. room.hangman.guesses--;
  150.  
  151. if (word.toLowerCase() === room.hangman.word.toLowerCase()) {
  152. room.add("|raw|<div class=\"infobox\">Congratulations! <b>" + Tools.escapeHTML(user.name) + "</b> guessed the word, which was: " + room.hangman.word + "</div>");
  153. room.update();
  154. delete room.hangman;
  155. return;
  156. }
  157.  
  158. if (room.hangman.guesses < 1) {
  159. room.add(
  160. "|raw|<div class=\"infobox\"><b>" + Tools.escapeHTML(user.name) + "</b> guessed the word '" + Tools.escapeHTML(word) +
  161. "', but it was not the word. You have failed to guess the word, so the man has been hanged.<br />" + hangedMan
  162. );
  163. room.update();
  164. delete room.hangman;
  165. return;
  166. }
  167.  
  168. room.add("|raw|<div class=\"infobox\"><b>" + Tools.escapeHTML(user.name) + "</b> guessed the word '" + word + "' but it was not in the word.<br />Guesses left: " + room.hangman.guesses + "</div>");
  169. room.update();
  170. break;
  171. case 'on':
  172. case 'enable':
  173. if (!user.can('roommod', null, room)) return this.sendReply("/hangman on - Access denied.");
  174. if (room.hangmanEnabled) return this.sendReply("Hangman is already enabled in this room.");
  175. room.hangmanEnabled = true;
  176. room.chatRoomData.hangmanEnabled = true;
  177. Rooms.global.writeChatRoomData();
  178. this.sendReply("Hangman has been enabled.");
  179. break;
  180. case 'off':
  181. case 'disable':
  182. if (!user.can('roommod', null, room)) return this.sendReply("/hangman off - Access denied.");
  183. if (!room.hangmanEnabled) return this.sendReply("Hangman is already disabled in this room.");
  184. room.hangmanEnabled = false;
  185. room.chatRoomData.hangmanEnabled = false;
  186. Rooms.global.writeChatRoomData();
  187. this.sendReply("Hangman has been disabled.");
  188. break;
  189. case 'end':
  190. if (!user.can('broadcast', null, room)) return this.sendReply("/hangman end - Access denied.");
  191. if (!room.hangman) return this.sendReply("There is no hangman game in this room.");
  192. room.add("|raw|<b>Hangman has been ended by " + Tools.escapeHTML(user.name) + "</b>.");
  193. room.update();
  194. delete room.hangman;
  195. break;
  196. }
  197. },
  198.  
  199. g: function (target, room, user) {
  200. this.parse('/hangman guess,' + target);
  201. },
  202.  
  203. gw: function (target, room, user) {
  204. this.parse('/hangman guessword,' + target);
  205. }
  206. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement