Mercurial > irccd
annotate plugins/roulette/roulette.js @ 146:175bc5d41cc4
Plugin roulette: use new format section, #410
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 19 May 2016 22:29:15 +0200 |
parents | ce3e96deb9e4 |
children | 52affa4ade71 |
rev | line source |
---|---|
0 | 1 /* |
2 * roulette.js -- russian roulette game | |
3 * | |
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
146
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
19 // Modules. |
0 | 20 var Logger = Irccd.Logger; |
21 var Plugin = Irccd.Plugin; | |
22 var Server = Irccd.Server; | |
23 var Util = Irccd.Util; | |
24 | |
146
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
25 // Plugin information. |
0 | 26 info = { |
27 author: "David Demelier <markand@malikania.fr>", | |
28 license: "ISC", | |
29 summary: "A russian roulette for IRC", | |
30 version: "@IRCCD_VERSION@" | |
31 }; | |
32 | |
146
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
33 /** |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
34 * Formats for writing. |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
35 */ |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
36 Plugin.format = { |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
37 "lucky": "#{nickname}, you're lucky this time", |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
38 "shot": "HEADSHOT" |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
39 }; |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
40 |
0 | 41 function Gun(server, channel) |
42 { | |
43 this.server = server; | |
44 this.channel = channel; | |
45 this.index = 0; | |
46 this.bullet = Math.floor(Math.random() * 6); | |
47 } | |
48 | |
49 /** | |
50 * Map of games. | |
51 */ | |
52 Gun.map = {}; | |
53 | |
54 /** | |
55 * Search for an existing game. | |
56 * | |
57 * @param server the server object | |
58 * @param channel the channel name | |
59 * @return the hangman instance or undefined if no one exists | |
60 */ | |
61 Gun.find = function (server, channel) | |
62 { | |
63 return Gun.map[server.toString() + '@' + channel]; | |
64 } | |
65 | |
66 /** | |
67 * Create a new game, store it in the map and return it. | |
68 * | |
69 * @param server the server object | |
70 * @param channel the channel name | |
71 * @return the hangman object | |
72 */ | |
73 Gun.create = function (server, channel) | |
74 { | |
75 return Gun.map[server.toString() + "@" + channel] = new Gun(server, channel); | |
76 } | |
77 | |
78 /** | |
79 * Remove the specified game from the map. | |
80 * | |
81 * @param game the game to remove | |
82 */ | |
83 Gun.remove = function (game) | |
84 { | |
85 delete Gun.map[game.server + "@" + game.channel]; | |
86 } | |
87 | |
88 /** | |
89 * Load all formats. | |
90 */ | |
91 Gun.loadFormats = function () | |
92 { | |
146
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
93 // --- DEPRECATED ------------------------------------------ |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
94 // |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
95 // This code will be removed. |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
96 // |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
97 // Since: 2.1.0 |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
98 // Until: 3.0.0 |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
99 // Reason: new [format] section replaces it. |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
100 // |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
101 // ---------------------------------------------------------- |
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
102 for (var key in Plugin.format) { |
0 | 103 var optname = "format-" + key; |
104 | |
105 if (typeof (Plugin.config[optname]) !== "string") | |
106 continue; | |
107 | |
108 if (Plugin.config[optname].length === 0) | |
109 Logger.warning("skipping empty '" + optname + "' format"); | |
110 else | |
146
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
111 Plugin.format[key] = Plugin.config[optname]; |
0 | 112 } |
113 } | |
114 | |
115 Gun.prototype.shot = function () | |
116 { | |
117 return this.index++ === this.bullet; | |
118 } | |
119 | |
120 function onLoad() | |
121 { | |
122 Gun.loadFormats(); | |
123 } | |
124 | |
125 onReload = onLoad; | |
126 | |
127 function onCommand(server, origin, channel) | |
128 { | |
129 var kw = { | |
130 channel: channel, | |
131 command: server.info().commandChar + Plugin.info().name, | |
132 nickname: Util.splituser(origin), | |
133 origin: origin, | |
48
ce3e96deb9e4
Plugin roulette: document missing keywords and fix count, #392
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
134 server: server.toString(), |
0 | 135 plugin: Plugin.info().name |
136 }; | |
137 | |
138 var game = Gun.find(server, channel); | |
139 | |
140 if (!game) | |
141 game = Gun.create(server, channel); | |
142 | |
143 if (game.shot()) { | |
146
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
144 server.kick(Util.splituser(origin), channel, Util.format(Plugin.format["shot"], kw)); |
0 | 145 Gun.remove(game); |
146 } else { | |
48
ce3e96deb9e4
Plugin roulette: document missing keywords and fix count, #392
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
147 kw.count = (6 - game.index).toString(); |
146
175bc5d41cc4
Plugin roulette: use new format section, #410
David Demelier <markand@malikania.fr>
parents:
48
diff
changeset
|
148 server.message(channel, Util.format(Plugin.format["lucky"], kw)); |
0 | 149 } |
150 } |