summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author8chan <admin@8chan.co>2014-08-10 14:51:45 +0000
committerFredrick Brennan <admin@8chan.co>2014-08-10 15:35:11 +0000
commit1ea3da1db6c5291abfbd99aa8f5f7e28de8ed9ed (patch)
treed258f8f9c309d9cde4cc647a2dc7616195fc0277
parenteeeec608b9f785486066d37c14b50a0527652118 (diff)
Merge Barrucadu/diceroll into master
-rw-r--r--inc/config.php4
-rw-r--r--inc/functions.php61
2 files changed, 65 insertions, 0 deletions
diff --git a/inc/config.php b/inc/config.php
index 91e53a6d..802a1471 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -549,6 +549,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/inc/functions.php b/inc/functions.php
index af2136bb..24ec3863 100644
--- a/inc/functions.php
+++ b/inc/functions.php
@@ -243,6 +243,9 @@ function loadConfig() {
if (is_array($config['anonymous']))
$config['anonymous'] = $config['anonymous'][array_rand($config['anonymous'])];
+ if ($config['allow_roll'])
+ event_handler('post', 'diceRoller');
+
event('load-config');
if ($config['debug']) {
@@ -2323,3 +2326,61 @@ function shell_exec_error($command, $suppress_stdout = false) {
return $return === 'TB_SUCCESS' ? false : $return;
}
+
+/* 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.
+ */
+function diceRoller($post) {
+ if(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
+ $modifier = ($diceZ != 0) ? ((($diceZ < 0) ? ' - ' : ' + ') . abs($diceZ)) : '';
+ $dicesum = ($diceX > 1) ? ' = ' . $dicesum : '';
+ $post->body = 'Rolled ' . implode(', ', $dicerolls) . $modifier . $dicesum . '<br/>' . $post->body;
+ }
+ }
+}