From c23d0caea8b845283eb89afba23eda4fe63b1cfa Mon Sep 17 00:00:00 2001 From: xrogaan Date: Tue, 27 Nov 2007 12:43:50 +0000 Subject: [PATCH] =?utf8?q?8=20"Mise=20a=20jour=20de=20l'interface=20plugin?= =?utf8?q?=20Ajout=20du=20plugin=20de=20jets=20de=20d=C3=83=C2=A9s=20(en?= =?utf8?q?=20tests)"?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- main.php | 1 + plugins/jet-plugin.inc.php | 156 ++++++++++++++++++++++++++++++++++++++++++ plugins/sample-plugin.inc.php | 8 +-- sources/IRCMain-class.inc.php | 11 ++- 4 files changed, 169 insertions(+), 7 deletions(-) create mode 100644 plugins/jet-plugin.inc.php diff --git a/main.php b/main.php index 2c40415..97b90d0 100755 --- a/main.php +++ b/main.php @@ -77,6 +77,7 @@ $MainProc = new IRCMain($server, $port, $chan, $name, '127.0.0.1','xrogaan.be'); // On charge les plugins que l'on souhaite $MainProc -> load_plugin('sample'); +$MainProc -> load_plugin('jet'); // On lance le bot $MainProc -> run(); diff --git a/plugins/jet-plugin.inc.php b/plugins/jet-plugin.inc.php new file mode 100644 index 0000000..5740765 --- /dev/null +++ b/plugins/jet-plugin.inc.php @@ -0,0 +1,156 @@ +IRCConn = IRCConn::GetInstance(); + $this->formater = text_format::GetInstance(); + } + + public function commands_list() { + $commands = array( + 'string2dice' => array( // !sample method1 + 'accepted_args' => 1, + 'help' => 'some help for this method1', + 'type' => 'mixed', + ), + 'caract' => array ( + 'accepted_args' => 3, + 'help' => "Jet basé sur une caractéristique.\n". + "Argument premier : Valeur de la caractéristique\n". + "Argument second : Base du jet, par défaut une base 20 (peut être mis a 100 pour calculer le poid transportable par exemple)\n". + "Argument troisième : ".$this->formater->bold('[1|0]')." Spécifie si le jet doit retourner quelque chose d'aléatoire, sinon", + 'type' => 'public' + ) + ); + return $commands; + } + + public function current_message ($message) { + /* + $message = array ( + 'type' => PRIVMSG|NOTICE, + 'from' => Nick (reply to), + 'to' => BotName / ChannelName, + 'message' => The message + ); + */ + $this->message = $message; + } + + public function string2dice ($str) { + $str = strtolower($str); + if ($str == '1d1') + return 1; + + $numbers = array(0,1,2,3,4,5,6,7,8,9); + $modifiers = array('+','-','*','/'); + + $copy = $str; + $i = 0; + $len_copy = strlen($copy); + + $number_of_dice = ''; + $value_of_dice = ''; + $modifier = ''; + $modifier_nature = ''; + $step = 'first'; + while ($len_copy > $i) { + /** + * Si le caractère courant n'est pas un nombre, alors quelques vérifications. + * Nous vérifions la partie du dé que nous créons : première (avant le 'd'), deuxième (après le 'd') + * et si un modifieur existe ('+','-','*','/'). + */ + if ($copy[$i] == 'd' || in_array($copy[$i],$modifiers)) { + // Nombre de dés a lancer manquant + if ($i == 0) { + trigger_error('Wrong dice format : "'.$copy.'". Must be [Number]d[Value][Modifier][Number]',E_USER_WARNING); + return false; + } + + if ($copy[$i] == 'd') { + $step = 'second'; + } elseif (in_array($copy[$i],$modifiers)) { + // Valeur du dé manquant + if (empty($value_of_dice)) { + trigger_error('Wrong dice format : "'.$copy.'". Must be [Number]d[Value][Modifier][Number]',E_USER_WARNING); + return false; + } + $step = 'modifier'; + $modifier_nature = $copy[$i]; + } else { + trigger_error('Unknown caracter \'' . $copy[$i] . '\'.',E_USER_WARNING); + } + } else { + if ($step == 'first') { + $number_of_dice.= $copy[$i]; + } + + if ($step == 'second') { + $value_of_dice.= $copy[$i]; + } + + if ($step == 'modifier') { + $modifier.= $copy[$i]; + } + } + + $i++; + } + + $de = self::dice($number_of_dice,$value_of_dice); + + echo 'return (int) abs(ceil('.$de.$modifier_nature.$modifier.'));'."\n"; + $r = eval('return (int) abs(ceil($de'.$modifier_nature.'$modifier));'); + + $this->IRCConn->privmsg($this->message['from'],$r); + } + + /** + * Jet basé sur une caractéristique. + * + * @param int Valeur de la caractéristique + * @param int Base du jet, par défaut une base 20 (peut être mis a 100 pour calculer le poid transportable par exemple) + * @param boolean Spécifie si le jet doit retourner quelque chose d'aléatoire, sinon + */ + public function caract($caract,$base=20,$rand=false) { + $caract = intval($caract); + $base = intval($base); + + $de = ($rand) ? self::dice(1,20) : 0 ; + $result = floor(($de+$caract) * $base / 20); + // (n / 20) * base => la base par défaut est 20 + + + if ($rand) + $result = $result/2; + + return $result; + } + + /** + * Lance un dé + * @param int $number nombre de dé lancé. + * @param int $value valeur maximale du dé. + */ + private function dice($number,$value) { + $number = intval($number); + $value = intval($value); + + // Si la valeur du dé est a 0, on retourne tout de suite 0. + if ($value === 0) + return 0; + + $toreturn=0; + while ($number>0) { + $toreturn+= rand(1,$value); + $number-=1; + } + $this->IRCConn->privmsg($this->message['from'],$toreturn); + } + +} + +?> \ No newline at end of file diff --git a/plugins/sample-plugin.inc.php b/plugins/sample-plugin.inc.php index 57e614a..c3d4968 100644 --- a/plugins/sample-plugin.inc.php +++ b/plugins/sample-plugin.inc.php @@ -1,14 +1,14 @@ IRCConn = IRCConn::GetInstance(); $this->formater = text_format::GetInstance(); } - function commands_list() { + public function commands_list() { $commands = array( 'method1' => array( // !sample method1 'accepted_args' => 0, @@ -30,7 +30,7 @@ class sample { return $commands; } - function current_message ($message) { + public function current_message ($message) { /* $message = array ( 'type' => PRIVMSG|NOTICE, diff --git a/sources/IRCMain-class.inc.php b/sources/IRCMain-class.inc.php index 0aac32b..c63f06f 100644 --- a/sources/IRCMain-class.inc.php +++ b/sources/IRCMain-class.inc.php @@ -192,7 +192,7 @@ class IRCMain { $query = explode(' ',$message); $query_count = count($query); - if (isset($this->commands[$plugin])) { + if (isset($this->commands[$query[0]])) { if ($query_count > 1) { if ($this->commands[$query[0]][$query[1]]['type'] == 'mixed' || $this->current_msg_info ['to'] == IRCConn::$myBotName && $this->commands[$query[0]][$query[1]]['type'] == 'private' || @@ -279,6 +279,10 @@ class IRCMain { else $the_args = $all_args; + echo "Args :\n"; + print_r($the_args); + echo "\n"; + if ($plugin == 'core') { call_user_func_array(array($this,$method_name),$the_args); } else { @@ -327,9 +331,10 @@ class IRCMain { } interface plugin { + public function __construct($main); - public function start($IRCtxt); - public function help(); + public function commands_list(); + public function current_message($message); } ?> \ No newline at end of file -- 2.11.4.GIT