Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Pages : 1
Salut
J'ai quelques mods en stock, mais je n'ai jamais trouvé le temps pour les partager. En voilà déjà une
Mon site étant en 1.2, les mods le sont aussi. Une adaptation en 1.4 viendra prochainement.
Cette mod ajoute un bbcode qui permet de lancer des dés lors de l'envoi d'un message.
Un petit aperçu:
Cliquez ici
La syntaxe:
[dice]AdB%C+D-E[/dice]
ou
[dice=commentaire]AdB%C+D-E[/dice]A = nombre de dés lancés
B = nombre de faces du dé
%C = on supprime du résultat les C plus mauvais jets (facultatif)
+D = on ajoute le nombre D au résultat (facultatif)
-E = on soustrait le nombre E au résultat (facultatif)
Si on doit inclure un %, il doit être fait avant le + ou le -.
On peut ajouter ou soustraire des valeurs. Le code est fait de telle sorte que 3d6+1-2 soit transformé en 3d6-1 dans la base de données.
Le commentaire peut contenir du bbcode (pas tous ne fonctionnent)
Toutes les remarques sont les bienvenues.
Une table supplémentaire est à créer (remplacer PREFIXE par le préfixe utilisé).
CREATE TABLE IF NOT EXISTS `PREFIXE_dice` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`post_id` int(10) unsigned NOT NULL,
`value` text NOT NULL,
`lancers` text NOT NULL,
`resultat` int(10) unsigned NOT NULL DEFAULT '0',
`timestamp` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `post_id` (`post_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;Dans les modifications de functions .php, vous pouvez modifier les 3 variables suivantes:
$MAX_FACES : le nombre de faces maximum d'un dé (6dX)
$MAX_DES : le nombre max de dés à lancer en même temps (Xd6)
$MAX_ROLL : le nombre max de balises dice valides par message
En cas d'édition du message, les jets de dés ne sont pas réexécutés.
Si le bbcode dice est supprimé lors de l'édition, l'entrée dans la table dice n'est pas supprimée. Si on réintègre le bbcode dice (avec la même syntaxe exactement) lors d'une édition suivante, l'entrée existante sera utilisée.
Cela évite les envies de tricher
On peut toujours en ajouter d'autres différents, mais ce sera visible sur le message (le 5/5 dans l'aperçu signifie que 5 jets de dés sont affichés sur les 5 qui sont dans la table
)
Le bbcode ne génère pas de lancers de dés pour les invités. C'est un comportement voulu, pas un bug. Pour que les invités puissent les générer, il faudrait changer certains bouts de code de place et/ou en dupliquer d'autres.
L'image utilisé à mettre dans /img/:
Modifications à faire dans les fichiers:
common.php
chercher 43:
@include PUN_ROOT.'config.php';
ajouter après:
$dice_message = '';
$dice_count = 0;viewtopic.php
chercher 186:
$result = $db->query('SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id LEFT JOIN '.$db->prefix.'online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id='.$id.' ORDER BY p.id LIMIT '.$start_from.','.$pun_user['disp_posts'], true) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
remplacer:
$result = $db->query('SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online, dc.dice_val, dc.dice_res, dc.dice_throw FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id LEFT JOIN '.$db->prefix.'online AS o ON (o.user_id=p.poster_id AND o.user_id!=1 AND o.idle=0) LEFT JOIN (SELECT dc2.post_id, GROUP_CONCAT(dc2.resultat ORDER BY dc2.id ASC SEPARATOR \'/\') AS dice_res, GROUP_CONCAT(dc2.value ORDER BY dc2.id ASC SEPARATOR \'/\') AS dice_val, GROUP_CONCAT(dc2.lancers ORDER BY dc2.id ASC SEPARATOR \'/\') AS dice_throw FROM '.$db->prefix.'dice AS dc2 GROUP BY dc2.post_id) AS dc ON (dc.post_id=p.id) WHERE p.topic_id='.$id.' ORDER BY p.id LIMIT '.$start_from.','.$pun_user['disp_posts'], true) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
chercher 189:
$post_count++;
ajouter avant:
$dice_val = array();
$dice_res = array();
$dice_throw = array();
if($cur_post['dice_val'] != null)
{
$dice_val = explode('/', $cur_post['dice_val']);
$dice_res = explode('/', $cur_post['dice_res']);
$dice_throw = explode('/', $cur_post['dice_throw']);
}
chercher 298:
$cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies']);
remplacer:
$cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies'], $cur_post['id'], $dice_val, $dice_res, $dice_throw);post.php
chercher 122:
if (preg_match('#\[b\]|\[/b\]|\[u\]|\[/u\]|\[i\]|\[/i\]|\[color|\[/color\]|\[quote\]|\[quote=|\[/quote\]|\[code\]|\[/code\]|\[img\]|\[/img\]|\[url|\[/url\]|\[email|\[/email\]#i', $username))
remplacer:
if (preg_match('#\[b\]|\[/b\]|\[u\]|\[/u\]|\[i\]|\[/i\]|\[color|\[/color\]|\[quote\]|\[quote=|\[/quote\]|\[code\]|\[/code\]|\[img\]|\[/img\]|\[url|\[/url\]|\[email|\[/email\]|\[dice|\[/dice\]#i', $username))
chercher 191:
// Insert the new post
$db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.get_remote_address().'\', \''.$db->escape($message).'\', \''.$hide_smilies.'\', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
$new_pid = $db->insert_id();
ajouter après:
generate_dice($pun_user['id'], $new_pid, $message);
chercher 309:
// Create the post ("topic post")
$db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.get_remote_address().'\', \''.$db->escape($message).'\', \''.$hide_smilies.'\', '.$now.', '.$new_tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
}
else
{
// Create the post ("topic post")
$email_sql = ($pun_config['p_force_guest_email'] == '1' || $email != '') ? '\''.$email.'\'' : 'NULL';
$db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', \''.get_remote_address().'\', '.$email_sql.', \''.$db->escape($message).'\', \''.$hide_smilies.'\', '.$now.', '.$new_tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
}
$new_pid = $db->insert_id();
remplacer:
// Create the post ("topic post")
$db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_id, poster_ip, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', '.$pun_user['id'].', \''.get_remote_address().'\', \''.$db->escape($message).'\', \''.$hide_smilies.'\', '.$now.', '.$new_tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
$new_pid = $db->insert_id();
generate_dice($pun_user['id'], $new_pid, $message);
}
else
{
// Create the post ("topic post")
$email_sql = ($pun_config['p_force_guest_email'] == '1' || $email != '') ? '\''.$email.'\'' : 'NULL';
$db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', \''.get_remote_address().'\', '.$email_sql.', \''.$db->escape($message).'\', \''.$hide_smilies.'\', '.$now.', '.$new_tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
$new_pid = $db->insert_id();
}
chercher 370:
$q_message = pun_htmlspecialchars($q_message);
ajouter avant:
$q_message = gestion_dicemod($q_message);
chercher 569:
$result = $db->query('SELECT poster, message, hide_smilies, posted FROM '.$db->prefix.'posts WHERE topic_id='.$tid.' ORDER BY id DESC LIMIT '.$pun_config['o_topic_review']) or error('Unable to fetch topic review', __FILE__, __LINE__, $db->error());
remplacer:
$result = $db->query('SELECT p.id, p.poster, p.hide_smilies, p.message, p.posted, dc.dice_val, dc.dice_res, dc.dice_throw FROM '.$db->prefix.'posts AS p LEFT JOIN (SELECT dc2.post_id, GROUP_CONCAT(dc2.resultat ORDER BY dc2.id ASC SEPARATOR \'/\') AS dice_res, GROUP_CONCAT(dc2.value ORDER BY dc2.id ASC SEPARATOR \'/\') AS dice_val, GROUP_CONCAT(dc2.lancers ORDER BY dc2.id ASC SEPARATOR \'/\') AS dice_throw FROM '.$db->prefix.'dice AS dc2 GROUP BY dc2.post_id) AS dc ON (dc.post_id=p.id) WHERE p.topic_id='.$tid.' ORDER BY p.id DESC LIMIT '.$pun_config['o_topic_review']) or error('Unable to fetch topic review', __FILE__, __LINE__, $db->error());
chercher 588:
$cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies']);
remplacer:
$dice_val = array();
$dice_res = array();
$dice_throw = array();
if($cur_post['dice_val'] != null)
{
$dice_val = explode('/', $cur_post['dice_val']);
$dice_res = explode('/', $cur_post['dice_res']);
$dice_throw = explode('/', $cur_post['dice_throw']);
}
$cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies'], $cur_post['id'], $dice_val, $dice_res, $dice_throw);edit.php
chercher 127:
$db->query('UPDATE '.$db->prefix.'posts SET message=\''.$db->escape($message).'\', hide_smilies=\''.$hide_smilies.'\''.$edited_sql.' WHERE id='.$id) or error('Unable to update post', __FILE__, __LINE__, $db->error());
ajouter après:
$sql = $db->query('SELECT value FROM '.$db->prefix.'dice WHERE post_id='.$id.' ORDER BY id ASC') or error('Unable to find dice values', __FILE__, __LINE__, $db->error());
$arr_dice = array();
while($data = $db->fetch_assoc($sql))
{
$arr_dice[] = $data['value'];
}
generate_dice($pun_user['id'], $id, $message, $arr_dice);delete.php
chercher 39:
$result = $db->query('SELECT f.id AS fid, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.id AS tid, t.subject, t.posted, t.closed, p.poster, p.poster_id, p.message, p.hide_smilies FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND p.id='.$id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
remplacer:
$result = $db->query('SELECT f.id AS fid, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.id AS tid, t.subject, t.posted, t.closed, p.poster, p.poster_id, p.message, p.hide_smilies, dc.dice_val, dc.dice_res, dc.dice_throw FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') LEFT JOIN (SELECT dc2.post_id, GROUP_CONCAT(dc2.resultat ORDER BY dc2.id ASC SEPARATOR \'/\') AS dice_res, GROUP_CONCAT(dc2.value ORDER BY dc2.id ASC SEPARATOR \'/\') AS dice_val, GROUP_CONCAT(dc2.lancers ORDER BY dc2.id ASC SEPARATOR \'/\') AS dice_throw FROM '.$db->prefix.'dice AS dc2 GROUP BY dc2.post_id) AS dc ON (dc.post_id=p.id) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND p.id='.$id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
chercher 43:
$cur_post = $db->fetch_assoc($result);
ajouter après:
$dice_val = array();
$dice_res = array();
$dice_throw = array();
if($cur_post['dice_val'] != null)
{
$dice_val = explode('/', $cur_post['dice_val']);
$dice_res = explode('/', $cur_post['dice_res']);
$dice_throw = explode('/', $cur_post['dice_throw']);
}
chercher 97:
$cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies']);
remplacer:
$cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies'], $cur_post['id'], $dice_val, $dice_res, $dice_throw);functions.php
à la fin du fichier, ajouter:
function CheckDice_mod($txt1, $txt2, $user_id, $post_id, &$arr = null)
{
// $txt1 = 2d6
// $txt2 = commentaires
// $arr = les entrées dice actuels si on édite
global $db, $pun_config, $mydice_count;
$MAX_FACES = 100;//$pun_config['o_dicemod_maxface'];//100;
$MAX_DES = 10;//$pun_config['o_dicemod_maxdice'];//10;
$MAX_ROLL = 10;//$pun_config['o_dicemod_maxperpost'];//10;
$message = $txt1;
if($mydice_count < $MAX_ROLL)
{
if(($arr==null) || (($arr != null) && (!in_array($txt1, $arr))))
{
$separator = strpos($txt1, 'd');
if($separator !== false)
{
$bIsOk = false;
$count = intval(substr($txt1, 0, $separator));
$reste = substr($txt1, $separator + 1);
$sign_plus = strpos($reste, '+');
$sign_moins = strpos($reste, '-');
$sign_percent = strpos($reste, '%');
$face = 0;
$pluche = 0;
$moinche = 0;
$percentche = 0;
if(($count > 0) && ($count <= $MAX_DES))
{
$bPercent = false;
$bPlus = false;
$bMoins = false;
$bSyntaxError = false;
if($sign_percent !== false)
{
$bPercent = true;
}
if($sign_plus !== false)
{
$bPlus = true;
}
if($sign_moins !== false)
{
$bMoins = true;
}
if((!$bPercent) && (!$bMoins) && (!$bPlus))
{
$face = intval($reste);
$bIsOk = true;
}
else
if(($bPercent) && (!$bMoins) && (!$bPlus))
{
$face = intval(substr($reste, 0, $sign_percent));
$percentche = intval(substr($reste, $sign_percent + 1));
$bIsOk = true;
}
else
{
if($bPercent && ($bPlus || $bMoins))
{
if($bPlus)
{
if($sign_percent > $sign_plus)
{
$bSyntaxError = true;
}
}
if($bMoins)
{
if($sign_percent > $sign_moins)
{
$bSyntaxError = true;
}
}
}
if(!$bSyntaxError)
{
if($bPlus && $bMoins)
{
if($sign_plus > $sign_moins)
{
if($bPercent)
{
$face = intval(substr($reste, 0, $sign_percent));
$percentche = intval(substr($reste, $sign_percent + 1, $sign_moins - $sign_percent - 1));
}
else
{
$face = intval(substr($reste, 0, $sign_moins));
}
$moinche = intval(substr($reste, $sign_moins + 1, $sign_plus - $sign_moins - 1));
$pluche = intval(substr($reste, $sign_plus + 1));
}
else
{
if($bPercent)
{
$face = intval(substr($reste, 0, $sign_percent));
$percentche = intval(substr($reste, $sign_percent + 1, $sign_plus - $sign_percent - 1));
}
else
{
$face = intval(substr($reste, 0, $sign_plus));
}
$pluche = intval(substr($reste, $sign_plus + 1, $sign_moins - $sign_plus - 1));
$moinche = intval(substr($reste, $sign_moins + 1));
}
if($pluche - $moinche == 0)
{
$pluche = 0;
$moinche = 0;
}
else
if($pluche - $moinche > 0)
{
$pluche = $pluche - $moinche;
$moinche = 0;
}
else
if($pluche - $moinche < 0) // condition inutile mais bon...
{
$moinche = $moinche - $pluche;
$pluche = 0;
}
$bIsOk = true;
}
else
if($bPlus)
{
if($bPercent)
{
$face = intval(substr($reste, 0, $sign_percent));
$percentche = intval(substr($reste, $sign_percent + 1, $sign_plus - $sign_percent - 1));
}
else
{
$face = intval(substr($reste, 0, $sign_plus));
}
$pluche = intval(substr($reste, $sign_plus + 1));
$bIsOk = true;
}
else
if($bMoins)
{
if($bPercent)
{
$face = intval(substr($reste, 0, $sign_percent));
$percentche = intval(substr($reste, $sign_percent + 1, $sign_moins - $sign_percent - 1));
}
else
{
$face = intval(substr($reste, 0, $sign_moins));
}
$moinche = intval(substr($reste, $sign_moins + 1));
$bIsOk = true;
}
}
}
if($bIsOk)
{
if(($face > 1) && ($face <= $MAX_FACES))
{
if(($percentche >= 0) && ($percentche < $count))
{
$message = $count.'d'.$face;
if($percentche > 0)
{
$message .= '%'.$percentche;
}
if($pluche > 0)
{
$message .= '+'.$pluche;
}
else
if($moinche > 0)
{
$message .= '-'.$moinche;
}
if(($arr == null) || (($arr != null) && (!in_array($message, $arr))))
{
$arr_val = array();
for($i=0;$i<$count;$i++)
{
$arr_val[] = mt_rand(1, $face);
}
$str_val = implode(',', $arr_val);
while($percentche > 0)
{
$mini = min($arr_val);
$key_min = array_search($mini, $arr_val);
unset($arr_val[$key_min]);
$percentche--;
}
$sum = array_sum($arr_val);
if($pluche > 0)
{
$sum += $pluche;
}
else
if($moinche > 0)
{
$sum -= $moinche;
if($sum < 0)
{
$sum = 0;
}
}
$rgq = 'INSERT INTO '.$db->prefix.'dice (user_id, post_id, value, lancers, resultat, timestamp) VALUES ('.$user_id.', '.$post_id.', \''.$message.'\', \''.$str_val.'\', '.$sum.', '.time().')';
$db->query($rgq) or error('Unable to insert dice', __FILE__, __LINE__, $db->error());
$mydice_count++;
}
else
if(in_array($message, $arr))
{
$k = array_search($message, $arr);
$mydice_count++;
unset($arr[$k]);
}
}
}
}
}
}
}
else
if(in_array($txt1, $arr))
{
$k = array_search($txt1, $arr);
$mydice_count++;
unset($arr[$k]);
}
}
if($txt2 != null)
{
$message = '[dice='.$txt2.']'.$message.'[/dice]';
}
else
{
$message = '[dice]'.$message.'[/dice]';
}
return $message;
}
function quote_dice($txt1, $txt2 = null)
{
$retour = '';
$retour = '[Jet de dés:'.$txt1;
if($txt2 != null)
$retour .= ' - '.$txt2;
$retour .= ']';
return $retour;
}
function gestion_dicemod($message)
{
$retour = $message;
$pattern[] = '#\[dice\]([^\[]*?)\[/dice\]#e';
$pattern[] = '#\[dice=([^\[]*?)\]([^\[]*?)\[/dice\]#e';
$replace[] = 'quote_dice(\'$1\')';
$replace[] = 'quote_dice(\'$2\',\'$1\')';
$retour = preg_replace($pattern, $replace, $message);
return $retour;
}
function generate_dice($user_id, $post_id, $message, &$arr = null)
{
global $db;
$text = $message;
$mydice_count = 0;
// If the message contains a code tag we have to split it up (text within shouldn't be touched)
if (strpos($text, '[code]') !== false && strpos($text, '[/code]') !== false)
{
list($inside, $outside) = split_text($text, '[code]', '[/code]');
$outside = array_map('ltrim', $outside);
$text = implode('<&"&>', $outside);
}
$pattern = array('#\[dice\]([^\[]*?)\[/dice\]#e',
'#\[dice=([^\[]*?)\]([^\[]*?)\[/dice\]#e');
$replace = array('CheckDice_mod(\'$1\', \'\', $user_id, $post_id, $arr)',
'CheckDice_mod(\'$2\', \'$1\', $user_id, $post_id, $arr)');
$text = preg_replace($pattern, $replace, $text);
// If we split up the message before we have to concatenate it together again (code tags)
if (isset($inside))
{
$outside = explode('<&"&>', $text);
$text = '';
$num_tokens = count($outside);
for ($i = 0; $i < $num_tokens; ++$i)
{
$text .= $outside[$i];
if (isset($inside[$i]))
{
$text .= '[code]'.$inside[$i].'[/code]';
}
}
}
$text = $db->escape($text);
if($text != $message)
{
// remettre à jour le message dans la bdd
$rgq = 'UPDATE '.$db->prefix.'posts SET message=\''.$text.'\' WHERE id='.$post_id;
$db->query($rgq) or error('Unable to update post', __FILE__, __LINE__, $db->error());
}
}parser.php
chercher 73:
$a[] = '#\[code\][\r\n]*(.*?)\s*\[/code\]\s*#is';
ajouter après:
$a[] = '#\[dice\]\s*#i';
$a[] = '#\[dice=("|\'|)(.*?)\\1\]\s*#is';
$a[] = '#\s*\[/dice\]#i';
chercher 78:
$b[] = '[code]$1[/code]'."\n";
ajouter après:
$b[] = '[dice]';
$b[] = '[dice=$2]';
$b[] = '[/dice]';
chercher 99:
if (preg_match('#\[quote=("|"|\'|)(.*)\\1\]|\[quote\]|\[/quote\]|\[code\]|\[/code\]#i', $text))
message($lang_prof_reg['Signature quote/code']);
ajouter après:
elseif (preg_match('%\[/?(?:dice)\b[^\]]*\]%i', $text))
{
message('No dice in signature');
}
chercher 260:
//
// Truncate URL if longer than 55 characters (add http:// or ftp:// if missing)
//
ajouter avant:
function Dice_mod($txt1, $txt2, $post_id, &$dice_val, &$dice_res, &$dice_throw)
{
global $dice_message, $dice_count;
$retour = '';
$k = 0;
$bDone = false;
if($dice_val != null)
{
if(in_array($txt1, $dice_val))
{
$k = array_search($txt1, $dice_val);
$separator = strpos($dice_val[$k], 'd');
if($separator !== false)
{
$count = intval(substr($dice_val[$k], 0, $separator));
$throws = explode(',', $dice_throw[$k]);
if($count == count($throws))
{
$reste = substr($dice_val[$k], $separator + 1);
$sign_plus = strpos($reste, '+');
$sign_moins = strpos($reste, '-');
$sign_percent = strpos($reste, '%');
$face = 0;
$pluche = 0;
$moinche = 0;
$percentche = 0;
if(($sign_plus === false)&&($sign_moins === false)&&($sign_percent === false))
{
$face = intval($reste);
}
else
{
// syntax = yaura toujous le % avant le + ou -
if($sign_percent !== false)
{
$face = intval(substr($reste, 0, $sign_percent));
if($sign_plus !== false)
{
$percentche = intval(substr($reste, $sign_percent + 1, $sign_plus - $sign_percent - 1));
$pluche = intval(substr($reste, $sign_plus + 1));
}
else
if($sign_moins !== false)
{
$percentche = intval(substr($reste, $sign_percent + 1, $sign_moins - $sign_percent - 1));
$moinche = intval(substr($reste, $sign_moins + 1));
}
else
{
$percentche = intval(substr($reste, $sign_percent + 1));
}
}
else
{
// un +X-Y va donner + ou - Z, on fera la somme avant d'enregistrer en bdd
if($sign_plus !== false)
{
$face = intval(substr($reste, 0, $sign_plus));
$pluche = intval(substr($reste, $sign_plus + 1));
}
else
if($sign_moins !== false)
{
$face = intval(substr($reste, 0, $sign_moins));
$moinche = intval(substr($reste, $sign_moins + 1));
}
}
}
$bOk = true;
$addition = '';
foreach($throws as $val)
{
if($val > $face)
{
$bOk = false;
}
}
if($bOk == true)
{
$bDone = true;
while($percentche > 0)
{
$mini = min($throws);
$key_min = array_search($mini, $throws);
$addition .= ' <span class="dice_lost">['.$mini.']</span> + ';
unset($throws[$key_min]);
$percentche--;
}
foreach($throws as $val)
{
$addition .= ' ['.$val.'] + ';
}
$addition = substr($addition, 0, -2);
if($pluche > 0)
{
$addition .= ' <span class="dice_plus">+ '.$pluche.'</span>';
}
else
if($moinche > 0)
{
$addition .= ' <span class="dice_moins">- '.$moinche.'</span>';
}
$addition .= ' = <span class="dice_result">'.$dice_res[$k].'</span>';
$dice_count++;
$note = '<div id="dice'.$post_id.'-'.$dice_count.'"><a href="#backdice'.$post_id.'-'.$dice_count.'"><img src="img/dice.png" alt="'.$txt1.'" /></a><span class="dice_diese">#'.$dice_count.':</span> <span class="dice_comments">'.$txt2.'</span> <span class="dice_value">('.$dice_val[$k].')</span> : ';
$note .= $addition.'</div>';
$retour = '<a href="#dice'.$post_id.'-'.$dice_count.'"><img src="img/dice.png" id="backdice'.$post_id.'-'.$dice_count.'" alt="'.$txt1.'" /></a><span class="dice_diese">#'.$dice_count.'</span>';
$dice_message .= $note;
unset($dice_val[$k]);
unset($dice_res[$k]);
unset($dice_throw[$k]);
}
}
}
}
}
if($bDone == false)
{
if($txt2 != null)
$retour = '[dice error='.$txt2.']'.$txt1.'[/dice error]';
else
$retour = '[dice error]'.$txt1.'[/dice error]';
}
return $retour;
}
chercher 303:
function do_bbcode($text)
remplacer:
function do_bbcode($text, $post_id = 0, &$dice_val = null, &$dice_res = null, &$dice_throw = null)
chercher 305:
global $lang_common, $pun_user;
remplacer:
global $lang_common, $pun_user, $dice_message, $dice_count;
chercher 332:
// This thing takes a while! :)
ajouter avant:
$pattern[] = '#\[dice\]([^\[]*?)\[/dice\]#e';
$pattern[] = '#\[dice=([^\[]*?)\]([^\[]*?)\[/dice\]#e';
$replace[] = 'Dice_mod(\'$1\', \'\', $post_id, $dice_val, $dice_res, $dice_throw)';
$replace[] = 'Dice_mod(\'$2\', \'$1\', $post_id, $dice_val, $dice_res, $dice_throw)';
chercher 375:
function parse_message($text, $hide_smilies)
remplacer:
function parse_message($text, $hide_smilies, $post_id = 0, &$dice_val = null, &$dice_res = null, &$dice_throw = null)
chercher 377:
global $pun_config, $lang_common, $pun_user;
remplacer:
global $pun_config, $lang_common, $pun_user, $dice_message, $dice_count;
$dice_message = '';
$dice_count = 0;
chercher 401:
$text = do_bbcode($text);
remplacer:
$text = do_bbcode($text, $post_id, $dice_val, $dice_res, $dice_throw);
chercher 413:
$text = str_replace($pattern, $replace, $text);
ajouter après:
if($dice_message != null)
$dice_message = str_replace($pattern, $replace, $dice_message);
chercher 436:
$text = str_replace('<p></p>', '', '<p>'.$text.'</p>');
ajouter après:
if($dice_message != null)
{
$nbAttendu = $dice_count;
if($dice_val != null)
{
$nbAttendu += count($dice_val);
}
$text .= '<hr class="note" /><p><span class="dice_count">'.$dice_count.'/'.$nbAttendu.'</span></p>'.stripslashes($dice_message);
}votre_style.css
ajouter à la fin:
span.dice_diese
{
FONT-SIZE: 14px;
}
span.dice_comments
{
COLOR: #1C98F1;
}
span.dice_value
{
TEXT-DECORATION: underline;
}
span.dice_result
{
FONT-WEIGHT: bold;
}
span.dice_moins
{
COLOR: #CC0000;
}
span.dice_lost
{
TEXT-DECORATION: line-through;
}
span.dice_plus
{
COLOR: #00CC00;
}Dernière modification par PascL (08-01-2012 00:56:20)
Bouh !
StarShip Renaissance
Hors ligne
Pages : 1