ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/ext/nickmon.ext
Revision: 1.2
Committed: Sat Nov 17 09:59:44 2012 UTC (11 years, 6 months ago) by root
Branch: MAIN
CVS Tags: rel-3_1, HEAD
Changes since 1.1: +1 -1 lines
Log Message:
cough

File Contents

# User Rev Content
1 root 1.1 #! perl # mandatory
2    
3     # implements user list monitoring
4    
5     # if opted in via exti ["nickmon", 1],
6     # sends ext ["nicklist", [add/upd...], [del...]] messages
7     # where each add/upd stands for an added or changed nick:
8     # [nick, NT_PLAYER, count, uuid] - deliantra player
9     # [nick, NT_SERVICE, description] - some internal service
10     # [nick, NT_OTHER, type] - some other user (e.g. irc)
11     # and each del is simply the nickname that is gone.
12    
13     sub NT_PLAYER() { 0 }
14     sub NT_SERVICE() { 1 }
15     sub NT_OTHER() { 2 }
16    
17     # uses global variables in extvar::nickmon: %CLIENT, $NICK
18    
19     cf::register_exticmd nickmon => sub {
20     my ($ns, $enable) = @_;
21    
22     delete $ns->{nickmon};
23     delete $extvar::nickmon::CLIENT{$ns};
24    
25     if ($enable) {
26     $ns->{nickmon} = 1;
27     $extvar::nickmon::CLIENT{$ns+0} = $ns;
28     $ns->ext_msg (nicklist => [values %extvar::nickmon::NICK], [])
29     if %extvar::nickmon::NICK;
30     }
31    
32     $enable
33     };
34    
35     cf::client->attach (
36     on_client_destroy => sub {
37     my ($ns) = @_;
38    
39     delete $extvar::nickmon::CLIENT{$ns+0};
40     },
41     );
42    
43     sub msg($$) {
44     $_->ext_msg (nicklist => $_[0], $_[1])
45     for values %extvar::nickmon::CLIENT;
46     }
47    
48     # to be called by other extensions as well
49     sub upd($$@) {
50     my $nick = [@_];
51    
52     $extvar::nickmon::NICK{$nick->[0]} = $nick;
53     msg [$nick], [];
54     }
55    
56     sub del($) {
57     delete $extvar::nickmon::NICK{$_[0]};
58     msg [], [$_[0]];
59     }
60    
61     cf::player->attach (
62     on_login => sub {
63     my ($pl) = @_;
64     $pl = $pl->ob;
65     upd $pl->name, NT_PLAYER, $pl->count, $pl->uuid;
66     },
67     on_logout => sub {
68     my ($pl) = @_;
69     del $pl->ob->name;
70     },
71     on_birth => sub {
72     my ($pl) = @_;
73     $pl = $pl->ob;
74 root 1.2 upd $pl->name, NT_PLAYER, $pl->count, $pl->uuid;
75 root 1.1 },
76     on_quit => sub {
77     my ($pl) = @_;
78     del $pl->ob->name;
79     },
80     );
81    
82