ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/maps/perl/board.ext
(Generate patch)

Comparing deliantra/maps/perl/board.ext (file contents):
Revision 1.4 by root, Fri Aug 25 15:07:43 2006 UTC vs.
Revision 1.8 by root, Tue Sep 12 22:43:50 2006 UTC

1#! perl 1#! perl
2#CONVERSION: NONE
3 2
4sub do_help { 3sub do_help {
5 my ($board, $who, $npc) = @_; 4 my ($board, $who, $npc) = @_;
6 $who->reply ($npc, 5 $who->reply ($npc,
7 "Help for $board\n" 6 "Help for $board\n"
13} 12}
14 13
15sub do_write { 14sub do_write {
16 my ($board, $msg, $who, $npc) = @_; 15 my ($board, $msg, $who, $npc) = @_;
17 if ($msg =~ /\S/) { 16 if ($msg =~ /\S/) {
18 CFBoard::write ($board, $who->name, $msg); 17 CFBoard::put_entry ($board, $who->name, $msg);
19 $who->reply ($npc, "Added entry."); 18 $who->reply ($npc, "Added entry.");
20 } else { 19 } else {
21 $who->reply ($npc, "Usage: write <message>\n"); 20 $who->reply ($npc, "Usage: write <message>\n");
22 } 21 }
23 1 22 1
25 24
26sub do_list { 25sub do_list {
27 my ($board, $who, $npc) = @_; 26 my ($board, $who, $npc) = @_;
28 my $cont = CFBoard::get ($board); 27 my $cont = CFBoard::get ($board);
29 if (@{$cont || []}) { 28 if (@{$cont || []}) {
30 $who->message ("$board content:", cf::NDI_BROWN | cf::NDI_UNIQUE); 29 $who->reply ($npc, "$board content:");
31 my $idx = 0; 30 my $idx = 0;
32 for (@$cont) { 31 for (@$cont) {
33 $who->message ("<$idx> $_->[0]: $_->[1]", cf::NDI_BROWN | cf::NDI_UNIQUE); 32 $who->reply ($npc, "<$idx> $_->[0]: $_->[1]");
34 $idx++; 33 $idx++;
35 } 34 }
36 } else { 35 } else {
37 $who->message ("$board is empty.", cf::NDI_BROWN | cf::NDI_UNIQUE); 36 $who->reply ($npc, "$board is empty.");
38 } 37 }
39 1 38 1
40} 39}
41 40
42sub do_remove { 41sub do_remove {
43 my ($board, $idx, $who, $npc) = @_; 42 my ($board, $idx, $who, $npc) = @_;
44 43
45 my $entry = CFBoard::get_idx ($board, $idx); 44 my $entry = CFBoard::get_entry ($board, $idx);
46 unless (defined $entry) { 45 unless (defined $entry) {
47 $who->reply ($npc, "No such entry."); 46 $who->reply ($npc, "No such entry.");
48 return 1; 47 return 1;
49 } 48 }
50 49
51 if ($entry->[0] eq $who->name or $who->flag (cf::FLAG_WIZ)) { 50 if ($entry->[0] eq $who->name or $who->flag (cf::FLAG_WIZ)) {
52 my $e = CFBoard::remove_idx ($board, $idx); 51 my $e = CFBoard::remove_entry ($board, $idx);
53 $who->reply ($npc, "Removed entry $idx ($e->[0]: $e->[1])."); 52 $who->reply ($npc, "Removed entry $idx ($e->[0]: $e->[1]).");
54 } else { 53 } else {
55 $who->reply ($npc, "Access denied."); 54 $who->reply ($npc, "Access denied.");
56 } 55 }
57 56
74 } 73 }
75 74
76 1 75 1
77}; 76};
78 77
79sub on_apply { 78cf::register_attachment board =>
79 on_apply => sub {
80 my ($ev, $npc, $who) = @_; 80 my ($npc, $who) = @_;
81 $who->reply ($npc, "Hello, i'm a talking board, 'say help' to get help"); 81 $who->reply ($npc, "Hello, i'm a talking board, 'say help' to get help");
82 do_list ($npc->name, $who, $npc); 82 do_list ($npc->name, $who, $npc);
83 1; 83 cf::override;
84} 84 },
85;
85 86
86package CFBoard; 87package CFBoard;
88
87use POSIX qw/strftime/; 89use POSIX qw/strftime/;
88use CFDB; 90use CFDB;
89 91
90my $BOARDDB = CFDB->new (db_file => cf::localdir . "/crossfireboard.perl"); 92my $BOARDDB = cf::db_get "board";
91 93
92sub get { 94sub get {
93 my ($board) = @_; 95 my ($board) = @_;
94 $BOARDDB->get ($board); 96
97 $BOARDDB->{"msg_$board"} ||= []
95} 98}
96 99
97sub get_idx { 100sub get_entry {
98 my ($board, $idx) = @_; 101 my ($board, $idx) = @_;
99 $board = $BOARDDB->get ($board); 102
100 return $board->[$idx]; 103 $BOARDDB->{"msg_$board"}[$idx]
101} 104}
102 105
103sub remove_idx { 106sub remove_entry {
104 my ($boardname, $idx) = @_; 107 my ($board, $idx) = @_;
105 my $board = $BOARDDB->get ($boardname); 108
106 my $e = splice @$board, $idx, 1; 109 my $entry = splice @{ $BOARDDB->{"msg_$board"} ||= [] }, $idx, 1;
107 $BOARDDB->set ($boardname, $board); 110 cf::db_dirty;
108 $e 111 $entry
109} 112}
110 113
111sub clear { 114sub clear {
112 my ($board) = @_; 115 my ($board) = @_;
113 $BOARDDB->clear ($board); 116
117 delete $BOARDDB->{"msg_$board"};
118 cf::db_dirty;
114} 119}
115 120
116sub write { 121sub put_entry {
117 my ($board, $from, $message) = @_; 122 my ($board, $from, $message) = @_;
118 my $boardentrys = $BOARDDB->get ($board); 123
124 my $entries = $BOARDDB->{"msg_$board"} ||= [];
119 push @$boardentrys, [$from, $message]; 125 push @$entries, [$from, $message];
120 $BOARDDB->set ($board, $boardentrys); 126 cf::db_dirty;
121} 127}
122 128
1231; 1291;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines