--- cf.schmorp.de/maps/perl/commands.ext 2006/09/29 21:59:53 1.8 +++ cf.schmorp.de/maps/perl/commands.ext 2006/12/11 02:41:26 1.14 @@ -1,5 +1,7 @@ #! perl +use POSIX (); + # miscellaneous commands sub rename_to($$$) { @@ -33,9 +35,11 @@ $ob->esrv_update_item (cf::UPD_NAME, $item); - return 1; + 1 } +sub ext::schmorp_irc::users; # HACK: TODO: replace by signal + sub who_listing(;$) { my ($privileged) = @_; @@ -56,30 +60,35 @@ ( "Total Players in The World. (" . (scalar @pl) . ") -- WIZ($numwiz) AFK($numafk) BOT(0)", - map { - my ($pl, $ob) = ($_, $_->ob); - - "* " . $ob->name . "/" . $ob->level . " " . (length $pl->own_title ? $pl->own_title : "the " . $pl->title) - . ($pl->peaceful ? " [peaceful]" : " [HOSTILE]") - . ($ob->flag (cf::FLAG_AFK) ? " [AFK]" : "") - . ($ob->flag (cf::FLAG_WIZ) ? " [WIZ]" : "") - . " [" . $pl->client . "]" - . " [" . ($pl->peaceful || $privileged ? $ob->map->path : $ob->map->region ? $ob->map->region->name : "the unknown") . "]" - . ($privileged ? " " . $pl->host : "") - } sort { $a->ob->name cmp $b->ob->name } @pl + ( + map { + my ($pl, $ob) = ($_, $_->ob); + + "* " . $ob->name . "/" . $ob->level . " " . (length $pl->own_title ? $pl->own_title : "the " . $pl->title) + . ($pl->peaceful ? " [peaceful]" : " [HOSTILE]") + . ($ob->flag (cf::FLAG_AFK) ? " [AFK]" : "") + . ($ob->flag (cf::FLAG_WIZ) ? " [WIZ]" : "") + . " [" . $pl->client . "]" + . " [" . ($pl->peaceful || $privileged ? $ob->map->path : $ob->map->region ? $ob->map->region->name : "the unknown") . "]" + . ($privileged ? " " . $pl->host : "") + } sort { (lc $a->ob->name) cmp (lc $b->ob->name) } @pl + ), + eval { "* IRC: " . join ", ", ext::schmorp_irc::users }, ) } cf::register_command who => $cf::TICK, sub { my ($ob, $arg) = @_; - $ob->reply (undef, (join "\n", who_listing $ob->flag (cf::FLAG_WIZ)), cf::NDI_UNIQUE | cf::NDI_DK_ORANGE); + $ob->reply (undef, (join "\n", who_listing $ob->may ("extended_who")), cf::NDI_UNIQUE | cf::NDI_DK_ORANGE); + + 1 }; cf::register_command rename => $cf::TICK, sub { my ($ob, $arg) = @_; - if ($arg =~ /^\s* (?: <([^>]+)> \s+)? to \s+ <([^>]+)> \s*$/x) { + if ($arg =~ /^\s* (?: <([^>]+)> \s+)? to \s+ <([^>]*)> \s*$/x) { # compatibility syntax rename_to $ob, $1, $2; } elsif ($arg =~ / @@ -96,4 +105,17 @@ } else { $ob->reply (undef, 'Syntax error. Rename usage: rename ["oldname"] to "newname"'); } + + 1 +}; + +cf::register_command uptime => 0, sub { + my ($ob, $arg) = @_; + + my $startup = POSIX::strftime "%Y-%m-%d %H:%M:%S %Z", localtime $cf::UPTIME; + my $runtime = sprintf "%.1f", (time - $cf::UPTIME) / 86400; + $ob->reply (undef, "server started $startup, uptime ${runtime}\d"); + + 1 }; +