3 * This file is part of IrBot, irc robot.
4 * Copyright (C) 2007 Bellière Ludovic
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 class jet
implements plugin
{
22 private $IRCConn,$formater;
26 public function __construct($main) {
27 $this->IRCConn
= bot
::GetInstance();
28 $this->formater
= text_format
::GetInstance();
29 $this->commands
= array(
30 'string2dice' => array( // !jet string2dice
33 'help' => 'some help for this method1',
39 'help' => "Jet basé sur une caractéristique.\n".
40 "Argument premier : Valeur de la caractéristique\n".
41 "Argument second : Base du jet, par défaut une base 20 (peut être mis a 100 pour calculer le poid transportable par exemple)\n".
42 "Argument troisième : ".$this->formater
->bold('[1|0]')." Spécifie si le jet doit retourner quelque chose d'aléatoire, sinon",
48 public function commands_list() {
49 return $this->commands
;
52 public function error($msg,$command) {
53 switch ($this->commands
[$command]) {
55 $this->IRCConn
->privmsg($this->message
['from'],$msg);
63 public function current_message ($message) {
64 /* gived by irc::parse_get
66 'type' => PRIVMSG|NOTICE,
67 'from' => Nick (reply to),
68 'to' => BotName / ChannelName,
69 'message' => The message
72 $this->message
= $message;
75 public function string2dice ($str) {
76 $str = strtolower($str);
78 $numbers = array(0,1,2,3,4,5,6,7,8,9);
79 $modifiers = array('+','-','*','/');
86 $len_copy = strlen($copy);
91 $modifier_nature = '';
93 while ($len_copy > $i) {
95 * Si le caractère courant n'est pas un nombre, alors quelques vérifications.
96 * Nous vérifions la partie du dé que nous créons : première (avant le 'd'), deuxième (après le 'd')
97 * et si un modifieur existe ('+','-','*','/').
99 if ($copy[$i] == 'd' ||
in_array($copy[$i],$modifiers)) {
100 // Nombre de dés a lancer manquant
102 trigger_error('Wrong dice format : "'.$copy.'". Must be [Number]d[Value][Modifier][Number]',E_USER_WARNING
);
106 if ($copy[$i] == 'd') {
108 } elseif (in_array($copy[$i],$modifiers)) {
109 // Valeur du dé manquant
110 if (empty($value_of_dice)) {
111 trigger_error('Wrong dice format : "'.$copy.'". Must be [Number]d[Value][Modifier][Number]',E_USER_WARNING
);
115 $modifier_nature = $copy[$i];
117 trigger_error('Unknown caracter \'' . $copy[$i] . '\'.',E_USER_WARNING
);
120 if ($step == 'first') {
121 $number_of_dice.= $copy[$i];
124 if ($step == 'second') {
125 $value_of_dice.= $copy[$i];
128 if ($step == 'modifier') {
129 $modifier.= $copy[$i];
136 $de = self
::dice($number_of_dice,$value_of_dice);
137 if ($modifier_nature == '') {
140 $r = eval('return abs(ceil($de'.$modifier_nature.'$modifier));');
143 if (bot
::$myBotName == $this->message
['to']) {
144 $replyto = $this->message
['from'];
146 $replyto = $this->message
['to'];
149 $this->IRCConn
->privmsg($replyto,$r);
153 * Jet basé sur une caractéristique.
155 * @param int Valeur de la caractéristique
156 * @param int Base du jet, par défaut une base 20 (peut être mis a 100 pour calculer le poid transportable par exemple)
157 * @param boolean Spécifie si le jet doit retourner quelque chose d'aléatoire, sinon
159 public function caract($caract,$base=20,$rand=true) {
160 $caract = intval($caract);
161 $base = intval($base);
163 $de = ($rand) ? self
::dice(1,20) : 0 ;
164 $result = floor(($de+
$caract) * $base / 20);
165 // (n / 20) * base => la base par défaut est 20
171 $this->IRCConn
->privmsg($this->message
['from'],$result);
177 * @param int $number nombre de dé lancé.
178 * @param int $value valeur maximale du dé.
180 private function dice($number,$value) {
181 $number = intval($number);
182 $value = intval($value);
184 // Si la valeur du dé est a 0, on retourne tout de suite 0.
190 $toreturn+
= rand(1,$value);