diff --git a/inc/config.php b/inc/config.php index 494ccda1..da6cf8cf 100644 --- a/inc/config.php +++ b/inc/config.php @@ -547,6 +547,10 @@ 'eu' => 'Europe' ); */ + + // Allow dice rolling: an email field of the form "dice XdY+/-Z" will result in X Y-sided dice rolled and summed, + // with the modifier Z added, with the result displayed at the top of the post body. + $config['allow_roll'] = false; /* * ==================== diff --git a/post.php b/post.php index d1c2b086..8b75a112 100644 --- a/post.php +++ b/post.php @@ -482,6 +482,60 @@ if (isset($_POST['delete'])) { wordfilters($post['body']); $post['body'] = escape_markup_modifiers($post['body']); + + /* Die rolling: + * If "dice XdY+/-Z" is in the email field (where X or +/-Z may be missing), + * X Y-sided dice are rolled and summed, with the modifier Z added on. + * The result is displayed at the top of the post. + */ + if($config['allow_roll'] && strpos(strtolower($post['email']), 'dice%20') === 0) { + $dicestr = str_split(substr($post['email'], strlen('dice%20'))); + + // Get params + $diceX = ''; + $diceY = ''; + $diceZ = ''; + + $curd = 'diceX'; + for($i = 0; $i < count($dicestr); $i ++) { + if(is_numeric($dicestr[$i])) { + $$curd .= $dicestr[$i]; + } else if($dicestr[$i] == 'd') { + $curd = 'diceY'; + } else if($dicestr[$i] == '-' || $dicestr[$i] == '+') { + $curd = 'diceZ'; + $$curd = $dicestr[$i]; + } + } + + // Default values for X and Z + if($diceX == '') { + $diceX = '1'; + } + + if($diceZ == '') { + $diceZ = '+0'; + } + + // Intify them + $diceX = intval($diceX); + $diceY = intval($diceY); + $diceZ = intval($diceZ); + + // Continue only if we have valid values + if($diceX != 0 && $diceY != 0) { + $dicerolls = array(); + $dicesum = $diceZ; + for($i = 0; $i < $diceX; $i++) { + $roll = rand(1, $diceY); + $dicerolls[] = $roll; + $dicesum += $roll; + } + + // Prepend the result to the post body + $post['body'] = 'Rolled ' . implode(', ', $dicerolls) . ' = ' . $dicesum . "\r\n" . $post['body']; + } + } if ($mod && isset($post['raw']) && $post['raw']) { $post['body'] .= "\n1";