… | |
… | |
53 | use Coro::Util (); |
53 | use Coro::Util (); |
54 | |
54 | |
55 | use JSON::XS 2.01 (); |
55 | use JSON::XS 2.01 (); |
56 | use BDB (); |
56 | use BDB (); |
57 | use Data::Dumper; |
57 | use Data::Dumper; |
58 | use Digest::MD5; |
|
|
59 | use Fcntl; |
58 | use Fcntl; |
60 | use YAML::XS (); |
59 | use YAML::XS (); |
61 | use IO::AIO (); |
60 | use IO::AIO (); |
62 | use Time::HiRes; |
61 | use Time::HiRes; |
63 | use Compress::LZF; |
62 | use Compress::LZF; |
… | |
… | |
3292 | while (my ($face, $info) = each %$faces) { |
3291 | while (my ($face, $info) = each %$faces) { |
3293 | my $idx = (cf::face::find $face) || cf::face::alloc $face; |
3292 | my $idx = (cf::face::find $face) || cf::face::alloc $face; |
3294 | |
3293 | |
3295 | cf::face::set_visibility $idx, $info->{visibility}; |
3294 | cf::face::set_visibility $idx, $info->{visibility}; |
3296 | cf::face::set_magicmap $idx, $info->{magicmap}; |
3295 | cf::face::set_magicmap $idx, $info->{magicmap}; |
3297 | cf::face::set_data $idx, 0, $info->{data32}, Digest::MD5::md5 $info->{data32}; |
3296 | cf::face::set_data $idx, 0, $info->{data32}, $info->{hash32}; |
3298 | cf::face::set_data $idx, 1, $info->{data64}, Digest::MD5::md5 $info->{data64}; |
3297 | cf::face::set_data $idx, 1, $info->{data64}, $info->{hash64}; |
3299 | |
3298 | |
3300 | cf::cede_to_tick; |
3299 | cf::cede_to_tick; |
3301 | } |
3300 | } |
3302 | |
3301 | |
3303 | while (my ($face, $info) = each %$faces) { |
3302 | while (my ($face, $info) = each %$faces) { |
… | |
… | |
3327 | |
3326 | |
3328 | cf::anim::invalidate_all; # d'oh |
3327 | cf::anim::invalidate_all; # d'oh |
3329 | } |
3328 | } |
3330 | |
3329 | |
3331 | { |
3330 | { |
3332 | # TODO: for gcfclient pleasure, we should give resources |
|
|
3333 | # that gcfclient doesn't grok a >10000 face index. |
|
|
3334 | my $res = $facedata->{resource}; |
3331 | my $res = $facedata->{resource}; |
3335 | |
3332 | |
3336 | while (my ($name, $info) = each %$res) { |
3333 | while (my ($name, $info) = each %$res) { |
3337 | if (defined $info->{type}) { |
3334 | if (defined $info->{type}) { |
3338 | my $idx = (cf::face::find $name) || cf::face::alloc $name; |
3335 | my $idx = (cf::face::find $name) || cf::face::alloc $name; |
3339 | my $data; |
|
|
3340 | |
3336 | |
3341 | if ($info->{type} & 1) { |
3337 | cf::face::set_data $idx, 0, $info->{data}, $info->{hash}; |
3342 | # prepend meta info |
|
|
3343 | |
|
|
3344 | my $meta = $enc->encode ({ |
|
|
3345 | name => $name, |
|
|
3346 | %{ $info->{meta} || {} }, |
|
|
3347 | }); |
|
|
3348 | |
|
|
3349 | $data = pack "(w/a*)*", $meta, $info->{data}; |
|
|
3350 | } else { |
|
|
3351 | $data = $info->{data}; |
|
|
3352 | } |
|
|
3353 | |
|
|
3354 | cf::face::set_data $idx, 0, $data, Digest::MD5::md5 $data; |
|
|
3355 | cf::face::set_type $idx, $info->{type}; |
3338 | cf::face::set_type $idx, $info->{type}; |
3356 | } else { |
3339 | } else { |
3357 | $RESOURCE{$name} = $info; |
3340 | $RESOURCE{$name} = $info; |
3358 | } |
3341 | } |
3359 | |
3342 | |
… | |
… | |
3522 | }; |
3505 | }; |
3523 | |
3506 | |
3524 | evthread_start IO::AIO::poll_fileno; |
3507 | evthread_start IO::AIO::poll_fileno; |
3525 | |
3508 | |
3526 | cf::sync_job { |
3509 | cf::sync_job { |
|
|
3510 | cf::load_settings; |
|
|
3511 | cf::load_materials; |
|
|
3512 | |
3527 | reload_resources; |
3513 | reload_resources; |
3528 | reload_config; |
3514 | reload_config; |
3529 | db_init; |
3515 | db_init; |
3530 | |
3516 | |
3531 | cf::load_settings; |
|
|
3532 | cf::load_materials; |
|
|
3533 | cf::init_uuid; |
3517 | cf::init_uuid; |
3534 | cf::init_signals; |
3518 | cf::init_signals; |
3535 | cf::init_commands; |
3519 | cf::init_commands; |
3536 | cf::init_skills; |
3520 | cf::init_skills; |
3537 | |
3521 | |