ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/lib/cf.pm
(Generate patch)

Comparing deliantra/server/lib/cf.pm (file contents):
Revision 1.358 by root, Fri Sep 7 18:10:52 2007 UTC vs.
Revision 1.362 by root, Mon Sep 10 12:44:06 2007 UTC

187 $msg .= "\n" 187 $msg .= "\n"
188 unless $msg =~ /\n$/; 188 unless $msg =~ /\n$/;
189 189
190 $msg =~ s/([\x00-\x08\x0b-\x1f])/sprintf "\\x%02x", ord $1/ge; 190 $msg =~ s/([\x00-\x08\x0b-\x1f])/sprintf "\\x%02x", ord $1/ge;
191 191
192 utf8::encode $msg;
193 LOG llevError, $msg; 192 LOG llevError, $msg;
194 }; 193 };
195} 194}
196 195
197@safe::cf::global::ISA = @cf::global::ISA = 'cf::attachable'; 196@safe::cf::global::ISA = @cf::global::ISA = 'cf::attachable';
1017 1016
1018 my $guard = cf::lock_acquire "io"; 1017 my $guard = cf::lock_acquire "io";
1019 1018
1020 sync_job { 1019 sync_job {
1021 if (length $$rdata) { 1020 if (length $$rdata) {
1021 utf8::decode (my $decname = $filename);
1022 warn sprintf "saving %s (%d,%d)\n", 1022 warn sprintf "saving %s (%d,%d)\n",
1023 $filename, length $$rdata, scalar @$objs; 1023 $decname, length $$rdata, scalar @$objs;
1024 1024
1025 if (my $fh = aio_open "$filename~", O_WRONLY | O_CREAT, 0600) { 1025 if (my $fh = aio_open "$filename~", O_WRONLY | O_CREAT, 0600) {
1026 chmod SAVE_MODE, $fh; 1026 chmod SAVE_MODE, $fh;
1027 aio_write $fh, 0, (length $$rdata), $$rdata, 0; 1027 aio_write $fh, 0, (length $$rdata), $$rdata, 0;
1028 aio_fsync $fh if $cf::USE_FSYNC; 1028 aio_fsync $fh if $cf::USE_FSYNC;
1078 1078
1079 undef $guard; 1079 undef $guard;
1080 $av = eval { (Storable::thaw $av)->{objs} }; 1080 $av = eval { (Storable::thaw $av)->{objs} };
1081 } 1081 }
1082 1082
1083 utf8::decode (my $decname = $filename);
1083 warn sprintf "loading %s (%d)\n", 1084 warn sprintf "loading %s (%d,%d)\n",
1084 $filename, length $data, scalar @{$av || []}; 1085 $decname, length $data, scalar @{$av || []};
1085 1086
1086 ($data, $av) 1087 ($data, $av)
1087} 1088}
1088 1089
1089=head2 COMMAND CALLBACKS 1090=head2 COMMAND CALLBACKS
1276use Coro::AIO; 1277use Coro::AIO;
1277 1278
1278=head3 cf::player 1279=head3 cf::player
1279 1280
1280=over 4 1281=over 4
1282
1283=item cf::player::num_playing
1284
1285Returns the official number of playing players, as per the Crossfire metaserver rules.
1286
1287=cut
1288
1289sub num_playing {
1290 scalar grep
1291 $_->ob->map
1292 && !$_->hidden
1293 && !$_->ob->flag (cf::FLAG_WIZ),
1294 cf::player::list
1295}
1281 1296
1282=item cf::player::find $login 1297=item cf::player::find $login
1283 1298
1284Returns the given player object, loading it if necessary (might block). 1299Returns the given player object, loading it if necessary (might block).
1285 1300
1891 1906
1892 { 1907 {
1893 my $guard = cf::lock_acquire "map_data:$path"; 1908 my $guard = cf::lock_acquire "map_data:$path";
1894 1909
1895 return unless $self->valid; 1910 return unless $self->valid;
1896 return if $self->in_memory != cf::MAP_SWAPPED; 1911 return unless $self->in_memory == cf::MAP_SWAPPED;
1897 1912
1898 $self->in_memory (cf::MAP_LOADING); 1913 $self->in_memory (cf::MAP_LOADING);
1899 1914
1900 $self->alloc; 1915 $self->alloc;
1901 1916
2073 2088
2074 return if $self->players; 2089 return if $self->players;
2075 return if $self->in_memory != cf::MAP_IN_MEMORY; 2090 return if $self->in_memory != cf::MAP_IN_MEMORY;
2076 return if $self->{deny_save}; 2091 return if $self->{deny_save};
2077 2092
2093 $self->in_memory (cf::MAP_SWAPPED);
2094
2078 $self->deactivate; 2095 $self->deactivate;
2096 $_->clear_links_to ($self) for values %cf::MAP;
2079 $self->clear; 2097 $self->clear;
2080 $self->in_memory (cf::MAP_SWAPPED);
2081} 2098}
2082 2099
2083sub reset_at { 2100sub reset_at {
2084 my ($self) = @_; 2101 my ($self) = @_;
2085 2102
2118 } 2135 }
2119 2136
2120 delete $cf::MAP{$self->path}; 2137 delete $cf::MAP{$self->path};
2121 2138
2122 $self->deactivate; 2139 $self->deactivate;
2140 $_->clear_links_to ($self) for values %cf::MAP;
2123 $self->clear; 2141 $self->clear;
2124
2125 $_->clear_links_to ($self) for values %cf::MAP;
2126 2142
2127 $self->unlink_save; 2143 $self->unlink_save;
2128 $self->destroy; 2144 $self->destroy;
2129} 2145}
2130 2146

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines