Added 'any' option for uno:edition (see POD:INSTALL) and made edition update on rehash.

This commit is contained in:
Elijah Perrault committed 2011-02-23 11:55:11 -07:00
1 parent 0bbcdd7f4b
commit fdb4093ad6
1 file changed
+57 -5
+57 -5
View File
@@ -13,6 +13,7 @@ my $UNO = 0;
my $UNOW = 0;
my ($UNOCHAN, $EDITION, $ORDER, $DEALER, $CURRTURN, $TOPCARD, %PLAYERS, %NICKS);
my $DRAWN = 0;
my $ANYEDITION = 0;
# Initialization subroutine.
sub _init {
@@ -25,11 +26,14 @@ sub _init {
$EDITION = uc(substr $EDITION, 0, 1).substr $EDITION, 1;
# Check if the edition is valid.
if ($EDITION !~ m/^(Original|Super|Advanced)$/xsm) {
if ($EDITION !~ m/^(Original|Super|Advanced|Any)$/xsm) {
err(3, "Unable to load UNO: Invalid edition: $EDITION", 0);
return;
}
# If it's Any, set ANYEDITION.
if ($EDITION eq 'Any') { $ANYEDITION = 1; }
# PostgreSQL is not supported, yet.
if ($Auto::ENFEAT =~ /pgsql/) { err(3, 'Unable to load UNO: PostgreSQL is not supported.', 0); return; }
@@ -47,6 +51,8 @@ sub _init {
hook_add('on_part', 'uno.updatedata.part', \&M::UNO::on_part) or return;
# Create on_kick hook.
hook_add('on_kick', 'uno.updatedata.kick', \&M::UNO::on_kick) or return;
# Create on_rehash hook.
hook_add('on_rehash', 'uno.updatedata.rehash', \&M::UNO::on_rehash) or return;
# Success.
return 1;
@@ -65,6 +71,8 @@ sub _void {
hook_del('on_part', 'uno.updatedata.part') or return;
# Delete on_kick hook.
hook_del('on_kick', 'uno.updatedata.kick') or return;
# Delete on_rehash hook.
hook_del('on_rehash', 'uno.updatedata.rehash') or return;
# Success.
return 1;
@@ -104,6 +112,23 @@ sub cmd_uno {
}
}
# If it's ANYEDITION, do some extra stuff.
if ($ANYEDITION) {
# Require the second parameter.
if (!defined $argv[1]) {
notice($src->{svr}, $src->{nick}, "This Auto is configured with Any Edition. You must specify the edition to play with as a second parameter. \2Syntax:\2 UNO START <edition>");
return;
}
if ($argv[1] !~ m/^(original|super|advanced)$/ixsm) {
notice($src->{svr}, $src->{nick}, "Invalid edition \2$argv[1]\2. Must be original, super or advanced.");
return;
}
# Set the edition.
$argv[1] = lc $argv[1];
$EDITION = $argv[1];
$EDITION = uc(substr $EDITION, 0, 1).substr $EDITION, 1;
}
# Set variables.
$UNOW = 1;
$UNOCHAN = $src->{svr}.'/'.lc $src->{chan};
@@ -1258,9 +1283,34 @@ sub on_kick {
}
}
# Subroutine for when a rehash occurs.
sub on_rehash {
# Ensure a game isn't running right now.
if ($UNO or $UNOW) { awarn(3, 'on_rehash: Unable to update UNO edition: A game is currently running.'); return; }
# Check if the edition is specified.
if (conf_get('uno:edition')) {
# Check if the edition is valid.
my $ce = (conf_get('uno:edition'))[0][0];
$ce = lc $ce;
if ($ce !~ m/^(original|super|advanced|any)$/xsm) {
awarn(3, 'on_rehash: Unable to update UNO edition: Invalid edition \''.$ce.'\'');
return;
}
# Set new edition.
$ce = uc(substr $ce, 0, 1).substr $ce, 1;
if ($ce eq 'Any') { $ANYEDITION = 1 }
else { $ANYEDITION = 0 }
$EDITION = $ce;
}
return 1;
}
# Start initialization.
API::Std::mod_init('UNO', 'Xelhua', '1.01', '3.0.0a5', __PACKAGE__);
API::Std::mod_init('UNO', 'Xelhua', '1.02', '3.0.0a5', __PACKAGE__);
# vim: set ai sw=4 ts=4:
# build: perl=5.010000
@@ -1272,7 +1322,7 @@ UNO - Three editions of the UNO card game
=head1 VERSION
1.01
1.02
=head1 SYNOPSIS
@@ -1303,7 +1353,7 @@ See DIFFERENCES BETWEEN EDITIONS for the differences between the editions.
The commands this adds are:
UNO START|S
UNO START|S [edition]
UNO JOIN|J
UNO DEAL
UNO PLAY|P <color (or wildcard)> <card (or color if wildcard)> [player if Trade Hands card]
@@ -1328,7 +1378,9 @@ You must add the following to your configuration file:
edition "edition here";
}
Edition can be "original", "super" or "advanced".
Edition can be "original", "super", "advanced" or "any".
If any, edition must be specified per-game in START.
You may also add the reschan option to the block, like so: