Mercurial > irccd
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 = {};