diff plugins/hangman/hangman.js @ 462:eaec3bff1db8

Merge from stable-2
author David Demelier <markand@malikania.fr>
date Fri, 28 Jul 2017 11:41:41 +0200
parents f3c27790d0d1 c81b38ec7bd2
children 0b156b82b8c1
line wrap: on
line diff
--- a/plugins/hangman/hangman.js	Thu Jul 27 17:04:23 2017 +0200
+++ b/plugins/hangman/hangman.js	Fri Jul 28 11:41:41 2017 +0200
@@ -62,9 +62,12 @@
 Hangman.map = {};
 
 /**
- * List of words
+ * List of words.
  */
-Hangman.words = [];
+Hangman.words = {
+    all: [],        //!< All words,
+    registry: {}    //!< Words list per server/channel.
+};
 
 /**
  * Search for an existing game.
@@ -139,15 +142,15 @@
 
         while ((line = file.readline()) !== undefined)
             if (Hangman.isWord(line))
-                Hangman.words.push(line);
+                Hangman.words.all.push(line);
     } catch (e) {
         throw new Error("could not open '" + path + "'");
     }
 
-    if (Hangman.words.length === 0)
+    if (Hangman.words.all.length === 0)
         throw new Error("empty word database");
 
-    Logger.info("number of words in database: " + Hangman.words.length);
+    Logger.info("number of words in database: " + Hangman.words.all.length);
 }
 
 /**
@@ -182,14 +185,18 @@
  */
 Hangman.prototype.select = function ()
 {
+    var id = this.server.toString() + "@" + this.channel;
+
     // Reload the words if empty.
-    if (!this.words || this.words.length === 0)
-        this.words = Hangman.words.slice(0);
+    if (!Hangman.words.registry[id] || Hangman.words.registry[id].length === 0)
+        Hangman.words.registry[id] = Hangman.words.all.slice(0);
 
-    var i = Math.floor(Math.random() * this.words.length);
+    var i = Math.floor(Math.random() * Hangman.words.registry[id].length);
 
-    this.word = this.words[i];
-    this.words.splice(i, 1);
+    this.word = Hangman.words.registry[id][i];
+
+    // Erase words from the registry.
+    Hangman.words.registry[id].splice(i, 1);
 
     // Fill table.
     this.table = {};