--- cf.schmorp.de/maps/perl/schmorplog.ext 2006/03/25 04:47:56 1.4 +++ cf.schmorp.de/maps/perl/schmorplog.ext 2006/11/07 15:04:44 1.16 @@ -1,29 +1,60 @@ #! perl -sub on_login { - my ($event) = @_; +my $update_status = Event->idle (repeat => 0, min => 1, cb => sub { + my ($status, @pl) = ext::commands::who_listing; - cf::LOG cf::llevDebug, sprintf "QBERT %s logged in\n", - $event->{activator}->name, $event->{message}; -} + open my $fh, ">", cf::localdir . "/usercount"; + print $fh scalar @pl; -sub on_logout { - my ($event) = @_; - - cf::LOG cf::llevDebug, sprintf "QBERT %s left\n", - $event->{activator}->name, $event->{message}; -} - -sub on_shout { - my ($event) = @_; - - cf::LOG cf::llevDebug, sprintf "QBERT [%s] %s\n", - $event->{activator}->name, $event->{message}; -} - -sub on_player_death { - my ($event) = @_; - - cf::LOG cf::llevDebug, sprintf "QBERT %s died a quick and not very horrible death\n", - $event->{who}->name; -} + open my $fh, ">", cf::localdir . "/userlisting.html"; + for ($status, @pl) { + s/[<&]//g; + print $fh "$_
\n"; + } +}); + +cf::attach_to_players + on_login => sub { + my ($pl) = @_; + $pl->ob->set_ob_key_value (schmorplog_last_login => time); + + $pl->ob->set_ob_key_value (schmorplog_login_count => + 1 + $pl->ob->get_ob_key_value ("schmorplog_login_count")); + + (my $client = $pl->client) =~ s/\n/\\n/g; + + $pl->ob->set_ob_key_value (schmorplog_client => $client); + + ext::schmorp_irc::do_notice (sprintf "%s logged in", $pl->ob->name); + + $update_status->start; + }, + on_logout => sub { + my ($pl) = @_; + $pl->ob->set_ob_key_value (schmorplog_last_logout => time); + ext::schmorp_irc::do_notice (sprintf "%s left", $pl->ob->name); + + $update_status->start; + }, + on_birth => sub { + my ($pl) = @_; + ext::schmorp_irc::do_notice (sprintf "%s was just born", $pl->ob->name); + $pl->ob->set_ob_key_value (schmorplog_birthdate => time); + }, + on_quit => sub { + my ($pl) = @_; + ext::schmorp_irc::do_notice (sprintf "%s quit the game", $pl->ob->name); + }, + on_death => sub { + my ($pl) = @_; + ext::schmorp_irc::do_notice (sprintf "%s was killed by %s", $pl->ob->name, $pl->killer); + }, + on_load => sub { + my ($pl, $path) = @_; + $pl->ob->set_ob_key_value (schmorplog_last_load => time); + }, + on_save => sub { + my ($pl, $path) = @_; + $pl->ob->set_ob_key_value (schmorplog_last_save => time); + }, +;