function game_stones_run()
{
    global $session;
    $ret = urlencode(httpget("ret"));
    page_header("A Game of Stones");
    $stones = unserialize($session['user']['specialmisc']);
    if (!is_array($stones)) {
        $stones = array();
    }
    $side = httpget('side');
    if ($side == "likepair") {
        $stones['side'] = "likepair";
    }
    if ($side == "unlikepair") {
        $stones['side'] = "unlikepair";
    }
    $bet = httppost('bet');
    if ($bet != "") {
        $stones['bet'] = min($session['user']['gold'], abs((int) $bet));
    }
    if (!isset($stones['side']) || $stones['side'] == "") {
        output("`3The old man explains his game, \"`7I have a bag with 6 red stones, and 10 blue stones in it.  You can choose between 'like pair' or 'unlike pair.'  I will then draw out pairs of stones two at a time.  If they are the same color as each other, they go to which ever of us is 'like pair,' and otherwise they go to which ever of us is 'unlike pair.'  Whoever has the most stones at the end will win.  If we have the same number, then it is a draw, and no one wins.`3\"");
        addnav("Never Mind", appendlink(urldecode($ret), "op=oldman"));
        addnav("Like Pair", "runmodule.php?module=game_stones&side=likepair&ret={$ret}");
        addnav("Unlike Pair", "runmodule.php?module=game_stones&side=unlikepair&ret={$ret}");
        $stones['red'] = 6;
        $stones['blue'] = 10;
        $stones['player'] = 0;
        $stones['oldman'] = 0;
    } elseif (!isset($stones['bet']) || $stones['bet'] == 0) {
        $s1 = translate_inline($stones['side'] == "likepair" ? "Like" : "Unlike");
        $s2 = translate_inline($stones['side'] == "likepair" ? "unlike" : "like");
        output("`3\"`7%s pair for you, and %s pair for me it is then!  How much do you bet?`3\"", $s1, $s2);
        rawoutput("<form action='runmodule.php?module=game_stones&ret={$ret}' method='POST'>");
        rawoutput("<input name='bet' id='bet'>");
        $b = translate_inline("Bet");
        rawoutput("<input type='submit' class='button' value='{$b}'>");
        rawoutput("</form>");
        rawoutput("<script language='JavaScript'>document.getElementById('bet').focus();</script>");
        addnav("", "runmodule.php?module=game_stones&ret={$ret}");
        addnav("Never Mind", appendlink(urldecode($ret), "op=oldman"));
    } elseif ($stones['red'] + $stones['blue'] > 0 && $stones['oldman'] <= 8 && $stones['player'] <= 8) {
        $s1 = "";
        $s2 = "";
        $rstone = translate_inline("`\$red`3");
        $bstone = translate_inline("`!blue`3");
        while ($s1 == "" || $s2 == "") {
            $s1 = e_rand(1, $stones['red'] + $stones['blue']);
            if ($s1 <= $stones['red']) {
                $s1 = $rstone;
                $stones['red']--;
            } else {
                $s1 = $bstone;
                $stones['blue']--;
            }
            if ($s2 == "") {
                $s2 = $s1;
                $s1 = "";
            }
        }
        output("`3The old man reaches into his bag and withdraws two stones.");
        output("They are %s and %s.  Your bet is `^%s`3.`n`n", $s1, $s2, $stones['bet']);
        if ($stones['side'] == "likepair" && $s1 == $s2) {
            $winner = "your";
            $stones['player'] += 2;
        } elseif ($stones['side'] != "likepair" && $s1 != $s2) {
            $winner = "your";
            $stones['player'] += 2;
        } else {
            $stones['oldman'] += 2;
            $winner = "his";
        }
        $winner = translate_inline($winner);
        output("Since you are %s pairs, the old man places the stones in %s pile.`n`n", translate_inline($stones['side'] == "likepair" ? "like" : "unlike"), $winner);
        output("You currently have `^%s`3 stones in your pile, and the old man has `^%s`3 stones in his.`n`n", $stones['player'], $stones['oldman']);
        output("There are %s %s stones and %s %s stones in the bag yet.", $stones['red'], $rstone, $stones['blue'], $bstone);
        addnav("Continue", "runmodule.php?module=game_stones&ret={$ret}");
    } else {
        if ($stones['player'] > $stones['oldman']) {
            output("`3Having defeated the old man at his game, you claim your `^%s`3 gold.", $stones['bet']);
            $session['user']['gold'] += $stones['bet'];
            debuglog("won {$stones['bet']} gold in the stones game");
        } elseif ($stones['player'] < $stones['oldman']) {
            output("`3Having defeated you at his game, the old man claims your `^%s`3 gold.", $stones['bet']);
            $session['user']['gold'] -= $stones['bet'];
            debuglog("lost {$stones['bet']} gold in the stones game");
        } else {
            output("`3Having tied the old man, you call it a draw.");
        }
        $stones = array();
        addnav("Play again?", "runmodule.php?module=game_stones&ret={$ret}");
        addnav("Other Games", appendlink(urldecode($ret), "op=oldman"));
        addnav("Return to Main Room", appendlink(urldecode($ret), "op=tavern"));
    }
    $session['user']['specialmisc'] = serialize($stones);
    page_footer();
}
function appendcount($link)
{
    global $session;
    return appendlink($link, "c=" . $session['counter'] . "-" . date("His"));
}
function game_fivesix_run()
{
    global $session;
    $ret = urlencode(httpget("ret"));
    page_header("A Game of Dice");
    $prize = get_module_setting("jackpot");
    $cost = get_module_setting("cost");
    $what = httpget('what');
    if ($what == "play") {
        output("`n`@So you'd like to try your hand to rolling five sixes, would you?`n");
        output("The game is quite simple, really - you roll five dice.");
        output("If all five display sixes, you win the jackpot.`n`n");
        output("`^It only costs you %s gold to play, and the current jackpot is %s gold pieces.`n`n", $cost, $prize);
        $lastpot5 = get_module_setting("lastpot5");
        if ($lastpot5 >= 1) {
            $lastwin5 = get_module_setting("lastwin5");
            output("`@The last jackpot, worth %s gold was won by %s.`n`n", $lastpot5, $lastwin5);
        } else {
            output("`@The jackpot has never been won - you could be the first!`n`n");
        }
        $lastpot4 = get_module_setting("lastpot4");
        if ($lastpot4 >= 1) {
            output("%s`@, in a peerless display, won `^%s `@gold for rolling 4 sixes.`n`n", get_module_setting("lastwin4"), get_module_setting("lastpot4"));
        }
        $lastpot3 = get_module_setting("lastpot3");
        if ($lastpot3 >= 1) {
            output("If you need a loan, you might talk to %s`@, who won `^%s`@ gold for getting just three sixes.`n`n", get_module_setting("lastwin3"), get_module_setting("lastpot3"));
        }
        addnav("Play the Games");
        addnav("D?Roll the Dice", "runmodule.php?module=game_fivesix&what=roll&ret={$ret}");
    } elseif ($what == "roll") {
        $visits = get_module_pref("playstoday");
        $max = get_module_setting("dailyuses");
        if ($visits < $max || $max == 0) {
            $cost = get_module_setting("cost");
            if ($session['user']['gold'] < $cost) {
                output("`3The old man watches as nothing but moths and dust emerge from your coin purse.`n");
                output("He shakes his head at you then turns back to his ale as though you weren't there.");
                addnav("Return to the Main Room", appendlink(urldecode($ret), "op=tavern"));
            } else {
                debuglog("spent {$cost} gold on five-sixes game");
                $session['user']['gold'] -= $cost;
                $visits++;
                set_module_pref("playstoday", $visits);
                $prize += $cost;
                $maxpot = get_module_setting("maxjackpot");
                if ($prize > $maxpot) {
                    output("`n`@The old man slips your donation into his own change purse, muttering something about the pot being big enough already.`n`n");
                    $prize = $maxpot;
                }
                set_module_setting("jackpot", $prize);
                $almost = 0;
                $one = e_rand(1, 6);
                if ($one == 6) {
                    $almost++;
                }
                $two = e_rand(1, 6);
                if ($two == 6) {
                    $almost++;
                }
                $three = e_rand(1, 6);
                if ($three == 6) {
                    $almost++;
                }
                $four = e_rand(1, 6);
                if ($four == 6) {
                    $almost++;
                }
                $five = e_rand(1, 6);
                if ($five == 6) {
                    $almost++;
                }
                output("`n`@You gather the dice in an old leather cup, shake them, and hold your breath as you spill them onto the table.`n");
                output("Upon inspecting them, you see their values are `^%s %s %s %s `@and `^%s`@.`n`n", $one, $two, $three, $four, $five);
                if ($almost == 5) {
                    output("\"Congratulations!\", the old man exclaims.");
                    output("\"Tis rare for anybody to win this prize\"`n");
                    output("`^The old man hands you your winnings of %s gold", $prize);
                    $session['user']['gold'] += $prize;
                    debuglog("won {$prize} gold at sixes game.");
                    addnews("%s won %s gold after rolling 5 sixes in the %s.", $session['user']['name'], $prize, get_module_setting("tavernname", "darkhorse"));
                    set_module_setting("jackpot", 100);
                    set_module_setting("lastpot5", $prize);
                    $lastwin5 = $session['user']['name'];
                    set_module_setting("lastwin5", $lastwin5);
                } elseif ($almost == 4) {
                    $win = round($prize * 0.1);
                    $prize = $prize - $win;
                    set_module_setting("jackpot", $prize);
                    $session['user']['gold'] += $win;
                    debuglog("won {$win} gold at sixes game.");
                    set_module_setting("lastpot4", $win);
                    $lastwin4 = $session['user']['name'];
                    set_module_setting("lastwin4", $lastwin4);
                    addnews("%s won %s gold after rolling 4 sixes in the %s.", $session['user']['name'], $win, get_module_setting("tavernname", "darkhorse"));
                    output("`@The old man leans over the table to peer at your dice and looks thoughtful for a moment.`n");
                    output("\"Well now...four out of five sixes is darned close, my friend. I think your effort deserves %s gold in reward.\"`n`n", $win);
                    output("`^The old man hands you %s gold.", $win);
                } elseif ($almost == 3) {
                    $win = round($prize * 0.05);
                    $prize = $prize - $win;
                    set_module_setting("jackpot", $prize);
                    $session['user']['gold'] += $win;
                    set_module_setting("lastpot3", $win);
                    $lastwin3 = $session['user']['name'];
                    set_module_setting("lastwin3", $lastwin3);
                    debuglog("won {$win} gold at sixes game.");
                    addnews("%s won %s gold after rolling 3 sixes in the %s.", $session['user']['name'], $win, get_module_setting("tavernname", "darkhorse"));
                    output("`@The old man leans over the table to peer at your dice and cackles as he notes your results.`n");
                    output("\"Well now...three out of five sixes isn't a bad effort, my friend. I'll give ye %s gold for that try.\"`n`n", $win);
                    output("`^The old man hands you %s gold.", $win);
                } else {
                    output("The old man cackles.  You rolled %s %s...but that's not enough!`n`n", $almost, translate_inline($almost == 1 ? "six" : "sixes"));
                    output("Disappointed, you walk away.");
                }
            }
        } else {
            output("`@The old man looks up at you and shakes his head slowly.`n");
            output("`%\"I think you've had enough for today.  Why don't you come back tomorrow?\"");
        }
        addnav("Play the Games");
        addnav("Play again?", "runmodule.php?module=game_fivesix&ret={$ret}&what=play");
    }
    addnav("Other Games", appendlink(urldecode($ret), "op=oldman"));
    addnav("Return to the Main Room", appendlink(urldecode($ret), "op=tavern"));
    page_footer();
}
function viewcommentary($section, $message = "Interject your own commentary?", $limit = 10, $talkline = "says", $schema = false)
{
    global $session, $REQUEST_URI, $doublepost, $translation_namespace;
    global $emptypost;
    rawoutput("<a name='{$section}'></a>");
    // Let's add a hook for modules to block commentary sections
    $args = modulehook("blockcommentarea", array("section" => $section));
    if (isset($args['block']) && $args['block'] == "yes") {
        return;
    }
    if ($schema === false) {
        $schema = $translation_namespace;
    }
    tlschema("commentary");
    $nobios = array("motd.php" => true);
    if (!array_key_exists(basename($_SERVER['SCRIPT_NAME']), $nobios)) {
        $nobios[basename($_SERVER['SCRIPT_NAME'])] = false;
    }
    if ($nobios[basename($_SERVER['SCRIPT_NAME'])]) {
        $linkbios = false;
    } else {
        $linkbios = true;
    }
    if ($message == "X") {
        $linkbios = true;
    }
    if ($doublepost) {
        output("`\$`bDouble post?`b`0`n");
    }
    if ($emptypost) {
        output("`\$`bWell, they say silence is a virtue.`b`0`n");
    }
    $clanrankcolors = array("`!", "`#", "`^", "`&", "`\$");
    // Needs to be here because scrolling through the commentary pages, entering a bio, then scrolling again forward
    // then re-entering another bio will lead to $com being smaller than 0 and this will lead to an SQL error later on.
    $com = (int) httpget("comscroll");
    if ($com < 0) {
        $com = 0;
    }
    $cc = false;
    if (httpget("comscroll") !== false && (int) $session['lastcom'] == $com + 1) {
        $cid = (int) $session['lastcommentid'];
    } else {
        $cid = 0;
    }
    $session['lastcom'] = $com;
    if ($com > 0 || $cid > 0) {
        // Find newly added comments.
        $sql = "SELECT COUNT(commentid) AS newadded FROM " . db_prefix("commentary") . " LEFT JOIN " . db_prefix("accounts") . " ON " . db_prefix("accounts") . ".acctid = " . db_prefix("commentary") . ".author WHERE section='{$section}' AND " . "(" . db_prefix("accounts") . ".locked=0 or " . db_prefix('accounts') . ".locked is null) AND commentid > '{$cid}'";
        $result = db_query($sql);
        $row = db_fetch_assoc($result);
        $newadded = $row['newadded'];
    } else {
        $newadded = 0;
    }
    $commentbuffer = array();
    if ($cid == 0) {
        $sql = "SELECT " . db_prefix("commentary") . ".*, " . db_prefix("accounts") . ".name, " . db_prefix("accounts") . ".acctid, " . db_prefix("accounts") . ".clanrank, " . db_prefix("clans") . ".clanshort FROM " . db_prefix("commentary") . " LEFT JOIN " . db_prefix("accounts") . " ON " . db_prefix("accounts") . ".acctid = " . db_prefix("commentary") . ".author LEFT JOIN " . db_prefix("clans") . " ON " . db_prefix("clans") . ".clanid=" . db_prefix("accounts") . ".clanid WHERE section = '{$section}' AND " . "( " . db_prefix("accounts") . ".locked=0 OR " . db_prefix("accounts") . ".locked is null ) " . "ORDER BY commentid DESC LIMIT " . $com * $limit . ",{$limit}";
        if ($com == 0 && strstr($_SERVER['REQUEST_URI'], "/moderate.php") !== $_SERVER['REQUEST_URI']) {
            $result = db_query_cached($sql, "comments-{$section}");
        } else {
            $result = db_query($sql);
        }
        while ($row = db_fetch_assoc($result)) {
            $commentbuffer[] = $row;
        }
    } else {
        $sql = "SELECT " . db_prefix("commentary") . ".*, " . db_prefix("accounts") . ".name, " . db_prefix("accounts") . ".acctid, " . db_prefix("accounts") . ".clanrank, " . db_prefix("clans") . ".clanshort FROM " . db_prefix("commentary") . " LEFT JOIN " . db_prefix("accounts") . " ON " . db_prefix("accounts") . ".acctid = " . db_prefix("commentary") . ".author LEFT JOIN " . db_prefix("clans") . " ON " . db_prefix("clans") . ".clanid=" . db_prefix("accounts") . ".clanid WHERE section = '{$section}' AND " . "( " . db_prefix("accounts") . ".locked=0 OR " . db_prefix("accounts") . ".locked is null ) " . "AND commentid > '{$cid}' " . "ORDER BY commentid ASC LIMIT {$limit}";
        $result = db_query($sql);
        while ($row = db_fetch_assoc($result)) {
            $commentbuffer[] = $row;
        }
        $commentbuffer = array_reverse($commentbuffer);
    }
    $rowcount = count($commentbuffer);
    if ($rowcount > 0) {
        $session['lastcommentid'] = $commentbuffer[0]['commentid'];
    }
    $counttoday = 0;
    for ($i = 0; $i < $rowcount; $i++) {
        $row = $commentbuffer[$i];
        $row['comment'] = comment_sanitize($row['comment']);
        $commentids[$i] = $row['commentid'];
        if (date("Y-m-d", strtotime($row['postdate'])) == date("Y-m-d")) {
            if ($row['name'] == $session['user']['name']) {
                $counttoday++;
            }
        }
        $x = 0;
        $ft = "";
        for ($x = 0; strlen($ft) < 5 && $x < strlen($row['comment']); $x++) {
            if (substr($row['comment'], $x, 1) == "`" && strlen($ft) == 0) {
                $x++;
            } else {
                $ft .= substr($row['comment'], $x, 1);
            }
        }
        $link = "bio.php?char=" . $row['acctid'] . "&ret=" . URLEncode($_SERVER['REQUEST_URI']);
        if (substr($ft, 0, 2) == "::") {
            $ft = substr($ft, 0, 2);
        } elseif (substr($ft, 0, 1) == ":") {
            $ft = substr($ft, 0, 1);
        } elseif (substr($ft, 0, 3) == "/me") {
            $ft = substr($ft, 0, 3);
        }
        $row['comment'] = holidayize($row['comment'], 'comment');
        $row['name'] = holidayize($row['name'], 'comment');
        if ($row['clanrank']) {
            $row['name'] = ($row['clanshort'] > "" ? "{$clanrankcolors[ceil($row['clanrank'] / 10)]}&lt;`2{$row['clanshort']}{$clanrankcolors[ceil($row['clanrank'] / 10)]}&gt; `&" : "") . $row['name'];
        }
        if ($ft == "::" || $ft == "/me" || $ft == ":") {
            $x = strpos($row['comment'], $ft);
            if ($x !== false) {
                if ($linkbios) {
                    $op[$i] = str_replace("&amp;", "&", HTMLEntities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0<a href='{$link}' style='text-decoration: none'>\n`&{$row['name']}`0</a>\n`& " . str_replace("&amp;", "&", HTMLEntities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n";
                } else {
                    $op[$i] = str_replace("&amp;", "&", HTMLEntities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`&{$row['name']}`0`& " . str_replace("&amp;", "&", HTMLEntities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n";
                }
                $rawc[$i] = str_replace("&amp;", "&", HTMLEntities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`&{$row['name']}`0`& " . str_replace("&amp;", "&", HTMLEntities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n";
            }
        }
        if ($ft == "/game" && !$row['name']) {
            $x = strpos($row['comment'], $ft);
            if ($x !== false) {
                $op[$i] = str_replace("&amp;", "&", HTMLEntities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`&" . str_replace("&amp;", "&", HTMLEntities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n";
            }
        }
        if (!isset($op) || !is_array($op)) {
            $op = array();
        }
        if (!array_key_exists($i, $op) || $op[$i] == "") {
            if ($linkbios) {
                $op[$i] = "`0<a href='{$link}' style='text-decoration: none'>`&{$row['name']}`0</a>`3 says, \"`#" . str_replace("&amp;", "&", HTMLEntities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`3\"`0`n";
            } elseif (substr($ft, 0, 5) == '/game' && !$row['name']) {
                $op[$i] = str_replace("&amp;", "&", HTMLEntities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1")));
            } else {
                $op[$i] = "`&{$row['name']}`3 says, \"`#" . str_replace("&amp;", "&", HTMLEntities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`3\"`0`n";
            }
            $rawc[$i] = "`&{$row['name']}`3 says, \"`#" . str_replace("&amp;", "&", HTMLEntities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`3\"`0`n";
        }
        if (!array_key_exists('timestamp', $session['user']['prefs'])) {
            $session['user']['prefs']['timestamp'] = 0;
        }
        $session['user']['prefs']['timeoffset'] = round($session['user']['prefs']['timeoffset'], 1);
        if ($session['user']['prefs']['timestamp'] == 1) {
            if (!isset($session['user']['prefs']['timeformat'])) {
                $session['user']['prefs']['timeformat'] = "[m/d h:ia]";
            }
            $time = strtotime($row['postdate']) + $session['user']['prefs']['timeoffset'] * 60 * 60;
            $s = date("`7" . $session['user']['prefs']['timeformat'] . "`0 ", $time);
            $op[$i] = $s . $op[$i];
        } elseif ($session['user']['prefs']['timestamp'] == 2) {
            $s = reltime(strtotime($row['postdate']));
            $op[$i] = "`7({$s})`0 " . $op[$i];
        }
        if ($message == "X") {
            $op[$i] = "`0({$row['section']}) " . $op[$i];
        }
        if ($row['postdate'] >= $session['user']['recentcomments']) {
            $op[$i] = "<img src='images/new.gif' alt='&gt;' width='3' height='5' align='absmiddle'> " . $op[$i];
        }
        addnav("", $link);
        $auth[$i] = $row['author'];
        if (isset($rawc[$i])) {
            $rawc[$i] = full_sanitize($rawc[$i]);
            $rawc[$i] = htmlentities($rawc[$i], ENT_QUOTES, getsetting("charset", "ISO-8859-1"));
        }
    }
    $i--;
    $outputcomments = array();
    $sect = "x";
    $moderating = false;
    if ($session['user']['superuser'] & SU_EDIT_COMMENTS && $message == "X") {
        $moderating = true;
    }
    $del = translate_inline("Del");
    $scriptname = substr($_SERVER['SCRIPT_NAME'], strrpos($_SERVER['SCRIPT_NAME'], "/") + 1);
    $pos = strpos($_SERVER['REQUEST_URI'], "?");
    $return = $scriptname . ($pos == false ? "" : substr($_SERVER['REQUEST_URI'], $pos));
    $one = strstr($return, "?") == false ? "?" : "&";
    for (; $i >= 0; $i--) {
        $out = "";
        if ($moderating) {
            if ($session['user']['superuser'] & SU_EDIT_USERS) {
                $out .= "`0[ <input type='checkbox' name='comment[{$commentids[$i]}]'> | <a href='user.php?op=setupban&userid=" . $auth[$i] . "&reason=" . rawurlencode($rawc[$i]) . "'>Ban</a> ]&nbsp;";
                addnav("", "user.php?op=setupban&userid={$auth[$i]}&reason=" . rawurlencode($rawc[$i]));
            } else {
                $out .= "`0[ <input type='checkbox' name='comment[{$commentids[$i]}]'> ]&nbsp;";
            }
            $matches = array();
            preg_match("/[(]([^)]*)[)]/", $op[$i], $matches);
            $sect = trim($matches[1]);
            if (substr($sect, 0, 5) != "clan-" || $sect == $section) {
                if (substr($sect, 0, 4) != "pet-") {
                    $out .= $op[$i];
                    if (!isset($outputcomments[$sect]) || !is_array($outputcomments[$sect])) {
                        $outputcomments[$sect] = array();
                    }
                    array_push($outputcomments[$sect], $out);
                }
            }
        } else {
            if ($session['user']['superuser'] & SU_EDIT_COMMENTS) {
                $out .= "`2[<a href='" . $return . $one . "removecomment={$commentids[$i]}&section={$section}&returnpath=" . URLEncode($return) . "'>{$del}</a>`2]`0&nbsp;";
                addnav("", $return . $one . "removecomment={$commentids[$i]}&section={$section}&returnpath=" . URLEncode($return) . "");
            }
            $out .= $op[$i];
            if (!array_key_exists($sect, $outputcomments) || !is_array($outputcomments[$sect])) {
                $outputcomments[$sect] = array();
            }
            array_push($outputcomments[$sect], $out);
        }
    }
    if ($moderating) {
        $scriptname = substr($_SERVER['SCRIPT_NAME'], strrpos($_SERVER['SCRIPT_NAME'], "/") + 1);
        addnav("", "{$scriptname}?op=commentdelete&return=" . URLEncode($_SERVER['REQUEST_URI']));
        $mod_Del1 = htmlentities(translate_inline("Delete Checked Comments"), ENT_COMPAT, getsetting("charset", "ISO-8859-1"));
        $mod_Del2 = htmlentities(translate_inline("Delete Checked & Ban (3 days)"), ENT_COMPAT, getsetting("charset", "ISO-8859-1"));
        $mod_Del_confirm = addslashes(htmlentities(translate_inline("Are you sure you wish to ban this user and have you specified the exact reason for the ban, i.e. cut/pasted their offensive comments?"), ENT_COMPAT, getsetting("charset", "ISO-8859-1")));
        $mod_reason = translate_inline("Reason:");
        $mod_reason_desc = htmlentities(translate_inline("Banned for comments you posted."), ENT_COMPAT, getsetting("charset", "ISO-8859-1"));
        output_notl("<form action='{$scriptname}?op=commentdelete&return=" . URLEncode($_SERVER['REQUEST_URI']) . "' method='POST'>", true);
        output_notl("<input type='submit' class='button' value=\"{$mod_Del1}\">", true);
        output_notl("<input type='submit' class='button' name='delnban' value=\"{$mod_Del2}\" onClick=\"return confirm('{$mod_Del_confirm}');\">", true);
        output_notl("`n{$mod_reason} <input name='reason0' size='40' value=\"{$mod_reason_desc}\" onChange=\"document.getElementById('reason').value=this.value;\">", true);
    }
    //output the comments
    ksort($outputcomments);
    reset($outputcomments);
    $sections = commentarylocs();
    $needclose = 0;
    while (list($sec, $v) = each($outputcomments)) {
        if ($sec != "x") {
            if ($needclose) {
                modulehook("}collapse");
            }
            output_notl("`n<hr><a href='moderate.php?area=%s'>`b`^%s`0`b</a>`n", $sec, isset($sections[$sec]) ? $sections[$sec] : "({$sec})", true);
            addnav("", "moderate.php?area={$sec}");
            modulehook("collapse{", array("name" => "com-" . $sec));
            $needclose = 1;
        } else {
            modulehook("collapse{", array("name" => "com-" . $section));
            $needclose = 1;
        }
        reset($v);
        while (list($key, $val) = each($v)) {
            $args = array('commentline' => $val);
            $args = modulehook("viewcommentary", $args);
            $val = $args['commentline'];
            output_notl($val, true);
        }
    }
    if ($moderating && $needclose) {
        modulehook("}collapse");
        $needclose = 0;
    }
    if ($moderating) {
        output_notl("`n");
        rawoutput("<input type='submit' class='button' value=\"{$mod_Del1}\">");
        rawoutput("<input type='submit' class='button' name='delnban' value=\"{$mod_Del2}\" onClick=\"return confirm('{$mod_Del_confirm}');\">");
        output_notl("`n%s ", $mod_reason);
        rawoutput("<input name='reason' size='40' id='reason' value=\"{$mod_reason_desc}\">");
        rawoutput("</form>");
        output_notl("`n");
    }
    if ($session['user']['loggedin']) {
        $args = modulehook("insertcomment", array("section" => $section));
        if (array_key_exists("mute", $args) && $args['mute'] && !($session['user']['superuser'] & SU_EDIT_COMMENTS)) {
            output_notl("%s", $args['mutemsg']);
        } elseif ($counttoday < $limit / 2 || $session['user']['superuser'] & ~SU_DOESNT_GIVE_GROTTO || !getsetting('postinglimit', 1)) {
            if ($message != "X") {
                $message = "`n`@{$message}`n";
                output($message);
                talkform($section, $talkline, $limit, $schema);
            }
        } else {
            $message = "`n`@{$message}`n";
            output($message);
            output("Sorry, you've exhausted your posts in this section for now.`0`n");
        }
    }
    $jump = false;
    if (!isset($session['user']['prefs']['nojump']) || $session['user']['prefs']['nojump'] == false) {
        $jump = true;
    }
    $firstu = translate_inline("&lt;&lt; First Unseen");
    $prev = translate_inline("&lt; Previous");
    $ref = translate_inline("Refresh");
    $next = translate_inline("Next &gt;");
    $lastu = translate_inline("Last Page &gt;&gt;");
    if ($rowcount >= $limit || $cid > 0) {
        $sql = "SELECT count(commentid) AS c FROM " . db_prefix("commentary") . " WHERE section='{$section}' AND postdate > '{$session['user']['recentcomments']}'";
        $r = db_query($sql);
        $val = db_fetch_assoc($r);
        $val = round($val['c'] / $limit + 0.5, 0) - 1;
        if ($val > 0) {
            $first = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . $val;
            $first = str_replace("?&", "?", $first);
            if (!strpos($first, "?")) {
                $first = str_replace("&", "?", $first);
            }
            $first .= "&refresh=1";
            if ($jump) {
                $first .= "#{$section}";
            }
            output_notl("<a href=\"{$first}\">{$firstu}</a>", true);
            addnav("", $first);
        } else {
            output_notl($firstu, true);
        }
        $req = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . ($com + 1);
        $req = str_replace("?&", "?", $req);
        if (!strpos($req, "?")) {
            $req = str_replace("&", "?", $req);
        }
        $req .= "&refresh=1";
        if ($jump) {
            $req .= "#{$section}";
        }
        output_notl("<a href=\"{$req}\">{$prev}</a>", true);
        addnav("", $req);
    } else {
        output_notl("{$firstu} {$prev}", true);
    }
    $last = appendlink(comscroll_sanitize($REQUEST_URI), "refresh=1");
    // Okay.. we have some smart-ass (or stupidass, you guess) players
    // who think that the auto-reload firefox plugin is a good way to
    // avoid our timeouts.  Won't they be surprised when I take that little
    // hack away.
    $last = appendcount($last);
    $last = str_replace("?&", "?", $last);
    if ($jump) {
        $last .= "#{$section}";
    }
    //if (!strpos($last,"?")) $last = str_replace("&","?",$last);
    //debug($last);
    output_notl("&nbsp;<a href=\"{$last}\">{$ref}</a>&nbsp;", true);
    addnav("", $last);
    if ($com > 0 || $cid > 0 && $newadded > $limit) {
        $req = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . ($com - 1);
        $req = str_replace("?&", "?", $req);
        if (!strpos($req, "?")) {
            $req = str_replace("&", "?", $req);
        }
        $req .= "&refresh=1";
        if ($jump) {
            $req .= "#{$section}";
        }
        output_notl(" <a href=\"{$req}\">{$next}</a>", true);
        addnav("", $req);
        output_notl(" <a href=\"{$last}\">{$lastu}</a>", true);
    } else {
        output_notl("{$next} {$lastu}", true);
    }
    if (!$cc) {
        db_free_result($result);
    }
    tlschema();
    if ($needclose) {
        modulehook("}collapse");
    }
}
function game_dice_run()
{
    global $session;
    $ret = urlencode(httpget("ret"));
    page_header("A Game of Dice");
    if ($session['user']['gold'] > 0) {
        $bet = abs((int) httpget('bet') + (int) httppost('bet'));
        if ($bet <= 0) {
            addnav("Never mind", appendlink(urldecode($ret), "op=oldman"));
            output("`3\"`!You get to roll a die, and choose to keep or pass on the roll.  If you pass, you get up to two more chances to roll, for a total of three rolls.  Once you keep your roll (or on the third roll), I will do the same.  In the end, if my die is higher than yours, I win, if yours is higher, you win, and if they are a tie, neither of us wins, and we each keep our bet.`3\"`n`n");
            output("`3\"`!How much would you bet young %s?`3\"", translate_inline($session['user']['sex'] ? "lady" : "man"));
            rawoutput("<form action='runmodule.php?module=game_dice&ret={$ret}' method='POST'>");
            rawoutput("<input name='bet' id='bet'>");
            $b = translate_inline("Bet");
            rawoutput("<input type='submit' class='button' value='{$b}'>");
            rawoutput("</form>");
            rawoutput("<script language='JavaScript'>document.getElementById('bet').focus();</script>");
            addnav("", "runmodule.php?module=game_dice&ret={$ret}");
        } else {
            if ($bet > $session['user']['gold']) {
                output("`3The old man reaches out with his stick and pokes your coin purse.");
                output("\"`!I don't believe you have `^%s`! gold!`3\" he declares.`n`n", $bet);
                output("Desperate to really show him good, you open up your purse and spill out its contents: `^%s`3 gold.`n`n", $session['user']['gold']);
                output("Embarrassed, you think you'll head back to the tavern.");
                addnav("Return to the Main Room", appendlink(urldecode($ret), "op=tavern"));
            } else {
                $what = httpget('what');
                if ($what != "keep") {
                    $session['user']['specialmisc'] = e_rand(1, 6);
                    $try = (int) httpget('try');
                    $try++;
                    switch ($try) {
                        case 1:
                            $die = "first";
                            break;
                        case 2:
                            $die = "second";
                            break;
                        default:
                            $die = "third";
                            break;
                    }
                    $die = translate_inline($die);
                    output("You roll your %s die, and it comes up as `b%s`b`n`n", $die, $session['user']['specialmisc']);
                    output("`3You have bet `^%s`3.", $bet);
                    output("What do you do?");
                    addnav("Keep", "runmodule.php?module=game_dice&what=keep&bet={$bet}&ret={$ret}");
                    if ($try < 3) {
                        addnav("Pass", "runmodule.php?module=game_dice&what=pass&try={$try}&bet={$bet}&ret={$ret}");
                    }
                } else {
                    output("Your final roll was `b%s`b, the old man will now try to beat it:`n`n", $session['user']['specialmisc']);
                    $r = e_rand(1, 6);
                    output("The old man rolls a %s...`n", $r);
                    if ($r > $session['user']['specialmisc'] || $r == 6) {
                        output("\"`7I think I'll stick with that roll!`0\" he says.`n");
                    } else {
                        $r = e_rand(1, 6);
                        output("The old man rolls again and gets a %s...`n", $r);
                        if ($r >= $session['user']['specialmisc']) {
                            output("\"`7I think I'll stick with that roll!`0\" he says.`n");
                        } else {
                            $r = e_rand(1, 6);
                            output("The old man rolls his final roll and gets a %s...`n", $r);
                        }
                    }
                    if ($r > $session['user']['specialmisc']) {
                        output("`n\"`7Yeehaw, I knew the likes of you would never stand up to the likes of me!`0\" exclaims the old man as you hand him your `^%s`0 gold.", $bet);
                        $session['user']['gold'] -= $bet;
                        debuglog("lost {$bet} gold at dice");
                    } elseif ($r == $session['user']['specialmisc']) {
                        output("`n\"`7Yah... well, looks as though we tied.`0\" he says.");
                    } else {
                        output("`n\"`7Aaarrgh!!!  How could the likes of you beat me?!?!?`0\" shouts the old man as he gives you the gold he owes.");
                        $session['user']['gold'] += $bet;
                        debuglog("won {$bet} gold at dice");
                    }
                    addnav("Play again?", "runmodule.php?module=game_dice&ret={$ret}");
                    addnav("Other Games", appendlink(urldecode($ret), "op=oldman"));
                    addnav("Return to the Main Room", appendlink(urldecode($ret), "op=tavern"));
                }
            }
        }
    } else {
        output("`3The old man reaches out with his stick and pokes your coin purse.  \"`!Empty?!?!  How can you bet with no money??`3\" he shouts.");
        output("With that, he turns back to his dice, apparently having already forgotten his anger.");
        addnav("Return to the Main Room", appendlink(urldecode($ret), "op=tavern"));
    }
    page_footer();
}