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

Comparing deliantra/server/ext/board.ext (file contents):
Revision 1.2 by root, Thu Dec 21 22:41:34 2006 UTC vs.
Revision 1.7 by root, Mon Sep 22 06:30:31 2008 UTC

1#! perl 1#! perl
2 2
3sub do_help { 3sub do_help {
4 my ($board, $who, $npc) = @_; 4 my ($board, $who, $npc) = @_;
5 $who->reply ($npc, 5 $who->reply ($npc,
6 "Help for $board\n" 6 "Help for $board\n\n"
7 ."List of commands:\n\n" 7 . "List of commands:\n\n"
8 ."- list\n" 8 . " - list\n"
9 ."- write <message>\n" 9 . " - write <message>\n"
10 ."- remove <id>\n" 10 . " - remove <id>\n"
11 ); 11 );
12} 12}
13 13
14sub do_write { 14sub do_write {
15 my ($board, $msg, $who, $npc) = @_; 15 my ($board, $msg, $who, $npc) = @_;
23} 23}
24 24
25sub do_list { 25sub do_list {
26 my ($board, $who, $npc) = @_; 26 my ($board, $who, $npc) = @_;
27 my $cont = CFBoard::get ($board); 27 my $cont = CFBoard::get ($board);
28 if (@{$cont || []}) {
29 $who->reply ($npc, "$board content:");
30 my $idx = 0;
31 for (@$cont) { 28 if (@$cont) {
32 $who->reply ($npc, "<$idx> $_->[0]: $_->[1]"); 29 my $msg = "$board content:\n\n";
33 $idx++; 30 $msg .= "<$_> $cont->[$_][0]: $cont->[$_][1]\r"
34 } 31 for 0 .. $#$cont;
32 $who->reply ($npc, $msg);
35 } else { 33 } else {
36 $who->reply ($npc, "$board is empty."); 34 $who->reply ($npc, "$board is empty.");
37 } 35 }
38 1 36 1
39} 37}
76}; 74};
77 75
78cf::object::attachment board => 76cf::object::attachment board =>
79 on_apply => sub { 77 on_apply => sub {
80 my ($npc, $who) = @_; 78 my ($npc, $who) = @_;
81 $who->reply ($npc, "Hello, i'm a talking board, 'say help' to get help"); 79 $who->reply ($npc, "Hello, I'm a talking board, 'say help' to get help");
82 do_list ($npc->name, $who, $npc); 80 do_list ($npc->name, $who, $npc);
83 cf::override; 81 cf::override;
84 }, 82 },
85; 83;
86 84
87package CFBoard; 85package CFBoard;
88 86
89use POSIX qw/strftime/; 87use POSIX qw/strftime/;
90use CFDB; 88use CFDB;
91 89
92my $BOARDDB = cf::db_get "board"; 90my $BOARDDB = Compress::LZF::sthaw cf::db_get board => "data";
93 91
94sub get { 92sub get {
95 my ($board) = @_; 93 my ($board) = @_;
96 94
97 $BOARDDB->{"msg_$board"} ||= [] 95 $BOARDDB->{"msg_$board"} ||= []
105 103
106sub remove_entry { 104sub remove_entry {
107 my ($board, $idx) = @_; 105 my ($board, $idx) = @_;
108 106
109 my $entry = splice @{ $BOARDDB->{"msg_$board"} ||= [] }, $idx, 1; 107 my $entry = splice @{ $BOARDDB->{"msg_$board"} ||= [] }, $idx, 1;
110 cf::db_dirty; 108 cf::db_put board => data => Compress::LZF::sfreeze_cr $BOARDDB;
111 $entry 109 $entry
112} 110}
113 111
114sub clear { 112sub clear {
115 my ($board) = @_; 113 my ($board) = @_;
116 114
117 delete $BOARDDB->{"msg_$board"}; 115 delete $BOARDDB->{"msg_$board"};
118 cf::db_dirty; 116 cf::db_put board => data => Compress::LZF::sfreeze_cr $BOARDDB;
119} 117}
120 118
121sub put_entry { 119sub put_entry {
122 my ($board, $from, $message) = @_; 120 my ($board, $from, $message) = @_;
123 121
124 my $entries = $BOARDDB->{"msg_$board"} ||= []; 122 my $entries = $BOARDDB->{"msg_$board"} ||= [];
125 push @$entries, [$from, $message]; 123 push @$entries, [$from, $message];
126 cf::db_dirty; 124 cf::db_put board => data => Compress::LZF::sfreeze_cr $BOARDDB;
127} 125}
128 126
1291; 1271;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines