… | |
… | |
1609 | return if $self->players; |
1609 | return if $self->players; |
1610 | return if $self->isa ("ext::map_per_player");#d# |
1610 | return if $self->isa ("ext::map_per_player");#d# |
1611 | |
1611 | |
1612 | warn "resetting map ", $self->path;#d# |
1612 | warn "resetting map ", $self->path;#d# |
1613 | |
1613 | |
|
|
1614 | $self->in_memory (cf::MAP_SWAPPED); |
|
|
1615 | |
|
|
1616 | # need to save uniques path |
|
|
1617 | unless ($self->{deny_save}) { |
|
|
1618 | my $uniq = $self->uniq_path; utf8::encode $uniq; |
|
|
1619 | |
|
|
1620 | $self->_save_objects ($uniq, cf::IO_UNIQUES) |
|
|
1621 | if $uniq; |
|
|
1622 | } |
|
|
1623 | |
1614 | delete $cf::MAP{$self->path}; |
1624 | delete $cf::MAP{$self->path}; |
1615 | |
1625 | |
1616 | $self->in_memory (cf::MAP_SWAPPED); |
|
|
1617 | $self->clear; |
1626 | $self->clear; |
1618 | |
1627 | |
1619 | $_->clear_links_to ($self) for values %cf::MAP; |
1628 | $_->clear_links_to ($self) for values %cf::MAP; |
1620 | |
1629 | |
1621 | $self->unlink_save; |
1630 | $self->unlink_save; |
… | |
… | |
2197 | |
2206 | |
2198 | =cut |
2207 | =cut |
2199 | |
2208 | |
2200 | our $DB; |
2209 | our $DB; |
2201 | |
2210 | |
|
|
2211 | sub db_init { |
2202 | unless ($DB) { |
2212 | unless ($DB) { |
2203 | $DB = BDB::db_create $DB_ENV; |
2213 | $DB = BDB::db_create $DB_ENV; |
2204 | |
2214 | |
2205 | cf::sync_job { |
2215 | cf::sync_job { |
2206 | eval { |
2216 | eval { |
2207 | $DB->set_flags (BDB::CHKSUM); |
2217 | $DB->set_flags (BDB::CHKSUM); |
2208 | |
2218 | |
2209 | BDB::db_open $DB, undef, "db", undef, BDB::BTREE, |
2219 | BDB::db_open $DB, undef, "db", undef, BDB::BTREE, |
2210 | BDB::CREATE | BDB::AUTO_COMMIT, 0666; |
2220 | BDB::CREATE | BDB::AUTO_COMMIT, 0666; |
2211 | cf::cleanup "db_open(db): $!" if $!; |
2221 | cf::cleanup "db_open(db): $!" if $!; |
|
|
2222 | }; |
|
|
2223 | cf::cleanup "db_open(db): $@" if $@; |
2212 | }; |
2224 | }; |
2213 | cf::cleanup "db_open(db): $@" if $@; |
|
|
2214 | }; |
|
|
2215 | |
2225 | |
2216 | my $path = cf::localdir . "/database.pst"; |
2226 | my $path = cf::localdir . "/database.pst"; |
2217 | if (stat $path) { |
2227 | if (stat $path) { |
2218 | cf::sync_job { |
2228 | cf::sync_job { |
2219 | my $pst = Storable::retrieve $path; |
2229 | my $pst = Storable::retrieve $path; |
2220 | |
2230 | |
2221 | cf::db_put (board => data => $pst->{board}); |
2231 | cf::db_put (board => data => $pst->{board}); |
2222 | cf::db_put (guildrules => data => $pst->{guildrules}); |
2232 | cf::db_put (guildrules => data => $pst->{guildrules}); |
2223 | cf::db_put (rent => balance => $pst->{rent}{balance}); |
2233 | cf::db_put (rent => balance => $pst->{rent}{balance}); |
2224 | BDB::db_env_txn_checkpoint $DB_ENV; |
2234 | BDB::db_env_txn_checkpoint $DB_ENV; |
2225 | |
2235 | |
2226 | unlink $path; |
2236 | unlink $path; |
|
|
2237 | }; |
2227 | }; |
2238 | } |
2228 | } |
2239 | } |
2229 | } |
2240 | } |
2230 | |
2241 | |
2231 | sub db_get($$) { |
2242 | sub db_get($$) { |
2232 | my $key = "$_[0]/$_[1]"; |
2243 | my $key = "$_[0]/$_[1]"; |
… | |
… | |
2285 | Event::one_event; |
2296 | Event::one_event; |
2286 | })->prio (Coro::PRIO_MAX); |
2297 | })->prio (Coro::PRIO_MAX); |
2287 | }; |
2298 | }; |
2288 | |
2299 | |
2289 | cfg_load; |
2300 | cfg_load; |
|
|
2301 | db_init; |
2290 | load_extensions; |
2302 | load_extensions; |
2291 | |
2303 | |
2292 | $TICK_WATCHER->start; |
2304 | $TICK_WATCHER->start; |
2293 | Event::loop; |
2305 | Event::loop; |
2294 | } |
2306 | } |