3 class jet
implements plugin
{
4 private $IRCConn,$formater;
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
15 'help' => 'some help for this method1',
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",
30 public function commands_list() {
31 return $this->commands
;
34 public function error($msg,$command) {
35 switch ($this->commands
[$command]) {
37 $this->IRCConn
->privmsg($this->message
['from'],$msg);
45 public function current_message ($message) {
46 /* gived by irc::parse_get
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('+','-','*','/');
68 $len_copy = strlen($copy);
73 $modifier_nature = '';
75 while ($len_copy > $i) {
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
84 trigger_error('Wrong dice format : "'.$copy.'". Must be [Number]d[Value][Modifier][Number]',E_USER_WARNING
);
88 if ($copy[$i] == 'd') {
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
);
97 $modifier_nature = $copy[$i];
99 trigger_error('Unknown caracter \'' . $copy[$i] . '\'.',E_USER_WARNING
);
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];
118 $de = self
::dice($number_of_dice,$value_of_dice);
119 if ($modifier_nature == '') {
122 $r = eval('return abs(ceil($de'.$modifier_nature.'$modifier));');
125 if (bot
::$myBotName == $this->message
['to']) {
126 $replyto = $this->message
['from'];
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
153 $this->IRCConn
->privmsg($this->message
['from'],$result);
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.
172 $toreturn+
= rand(1,$value);