15
[irbot.git] / plugins / jet-plugin.inc.php
blobfe4917f1b2daf6d19057e71f0bb2c88acf2733d5
1 <?php
3 class jet implements plugin {
4 private $IRCConn,$formater;
5 private $message;
6 private $commands;
8 public function __construct($main) {
9 $this->IRCConn = bot::GetInstance();
10 $this->formater = text_format::GetInstance();
11 $this->commands = array(
12 'string2dice' => array( // !jet string2dice
13 'accepted_args' => 1,
14 'requier_args' => 1,
15 'help' => 'some help for this method1',
16 'type' => 'private',
18 'caract' => array (
19 'accepted_args' => 3,
20 'requier_args' => 1,
21 'help' => "Jet basé sur une caractéristique.\n".
22 "Argument premier : Valeur de la caractéristique\n".
23 "Argument second : Base du jet, par défaut une base 20 (peut être mis a 100 pour calculer le poid transportable par exemple)\n".
24 "Argument troisième : ".$this->formater->bold('[1|0]')." Spécifie si le jet doit retourner quelque chose d'aléatoire, sinon",
25 'type' => 'private'
30 public function commands_list() {
31 return $this->commands;
34 public function error($msg,$command) {
35 switch ($this->commands[$command]) {
36 case 'private':
37 $this->IRCConn->privmsg($this->message['from'],$msg);
38 break;
40 default:
41 break;
45 public function current_message ($message) {
46 /* gived by irc::parse_get
47 $message = array (
48 'type' => PRIVMSG|NOTICE,
49 'from' => Nick (reply to),
50 'to' => BotName / ChannelName,
51 'message' => The message
54 $this->message = $message;
57 public function string2dice ($str) {
58 $str = strtolower($str);
60 $numbers = array(0,1,2,3,4,5,6,7,8,9);
61 $modifiers = array('+','-','*','/');
63 if ($str == '1d1')
64 return 1;
66 $copy = $str;
67 $i = 0;
68 $len_copy = strlen($copy);
70 $number_of_dice = '';
71 $value_of_dice = '';
72 $modifier = '';
73 $modifier_nature = '';
74 $step = 'first';
75 while ($len_copy > $i) {
76 /**
77 * Si le caractère courant n'est pas un nombre, alors quelques vérifications.
78 * Nous vérifions la partie du dé que nous créons : première (avant le 'd'), deuxième (après le 'd')
79 * et si un modifieur existe ('+','-','*','/').
81 if ($copy[$i] == 'd' || in_array($copy[$i],$modifiers)) {
82 // Nombre de dés a lancer manquant
83 if ($i == 0) {
84 trigger_error('Wrong dice format : "'.$copy.'". Must be [Number]d[Value][Modifier][Number]',E_USER_WARNING);
85 return false;
88 if ($copy[$i] == 'd') {
89 $step = 'second';
90 } elseif (in_array($copy[$i],$modifiers)) {
91 // Valeur du dé manquant
92 if (empty($value_of_dice)) {
93 trigger_error('Wrong dice format : "'.$copy.'". Must be [Number]d[Value][Modifier][Number]',E_USER_WARNING);
94 return false;
96 $step = 'modifier';
97 $modifier_nature = $copy[$i];
98 } else {
99 trigger_error('Unknown caracter \'' . $copy[$i] . '\'.',E_USER_WARNING);
101 } else {
102 if ($step == 'first') {
103 $number_of_dice.= $copy[$i];
106 if ($step == 'second') {
107 $value_of_dice.= $copy[$i];
110 if ($step == 'modifier') {
111 $modifier.= $copy[$i];
115 $i++;
118 $de = self::dice($number_of_dice,$value_of_dice);
119 if ($modifier_nature == '') {
120 $r = $de;
121 } else {
122 $r = eval('return abs(ceil($de'.$modifier_nature.'$modifier));');
125 if (bot::$myBotName == $this->message['to']) {
126 $replyto = $this->message['from'];
127 } else {
128 $replyto = $this->message['to'];
131 $this->IRCConn->privmsg($replyto,$r);
135 * Jet basé sur une caractéristique.
137 * @param int Valeur de la caractéristique
138 * @param int Base du jet, par défaut une base 20 (peut être mis a 100 pour calculer le poid transportable par exemple)
139 * @param boolean Spécifie si le jet doit retourner quelque chose d'aléatoire, sinon
141 public function caract($caract,$base=20,$rand=true) {
142 $caract = intval($caract);
143 $base = intval($base);
145 $de = ($rand) ? self::dice(1,20) : 0 ;
146 $result = floor(($de+$caract) * $base / 20);
147 // (n / 20) * base => la base par défaut est 20
150 if ($rand)
151 $result = $result/2;
153 $this->IRCConn->privmsg($this->message['from'],$result);
154 return $result;
158 * Lance un dé
159 * @param int $number nombre de dé lancé.
160 * @param int $value valeur maximale du dé.
162 private function dice($number,$value) {
163 $number = intval($number);
164 $value = intval($value);
166 // Si la valeur du dé est a 0, on retourne tout de suite 0.
167 if ($value === 0)
168 return 0;
170 $toreturn=0;
171 while ($number>0) {
172 $toreturn+= rand(1,$value);
173 $number-=1;
175 return $toreturn;