--- deliantra/server/lib/cf.pm 2007/08/19 09:14:50 1.333 +++ deliantra/server/lib/cf.pm 2007/08/20 22:09:04 1.334 @@ -2813,6 +2813,8 @@ sub load_facedata($) { my ($path) = @_; + my $enc = JSON::XS->new->utf8->canonical; + warn "loading facedata from $path\n"; my $facedata; @@ -2824,6 +2826,14 @@ $facedata->{version} == 2 or cf::cleanup "$path: version mismatch, cannot proceed."; + # patch in the exptable + cf::cede_to_tick; + $facedata->{resource}{"res/exp_table"} = { + type => FT_RSRC, + data => $enc->encode ([map cf::level_to_min_exp $_, 0 .. cf::settings->max_level]), + }; + cf::cede_to_tick; + { my $faces = $facedata->{faceinfo}; @@ -2831,8 +2841,8 @@ my $idx = (cf::face::find $face) || cf::face::alloc $face; cf::face::set_visibility $idx, $info->{visibility}; cf::face::set_magicmap $idx, $info->{magicmap}; - cf::face::set_data $idx, 0, $info->{data32}, $info->{chksum32}; - cf::face::set_data $idx, 1, $info->{data64}, $info->{chksum64}; + cf::face::set_data $idx, 0, $info->{data32}, Digest::MD5::md5 $info->{data32}; + cf::face::set_data $idx, 1, $info->{data64}, Digest::MD5::md5 $info->{data64}; cf::cede_to_tick; } @@ -2867,29 +2877,25 @@ # TODO: for gcfclient pleasure, we should give resources # that gcfclient doesn't grok a >10000 face index. my $res = $facedata->{resource}; - my $enc = JSON::XS->new->utf8->canonical; my $soundconf = delete $res->{"res/sound.conf"}; while (my ($name, $info) = each %$res) { - my $meta = $enc->encode ({ - name => $name, - %{ $info->{meta} || {} }, - }); - my $idx = (cf::face::find $name) || cf::face::alloc $name; + my $data; if ($info->{type} & 1) { # prepend meta info - my $data = pack "(w/a*)*", $meta, $info->{data}; - my $chk = Digest::MD5::md5 "$info->{chksum},$meta"; # mangle data checksum and metadata + my $meta = $enc->encode ({ + name => $name, + %{ $info->{meta} || {} }, + }); - cf::face::set_data $idx, 0, $data, $chk; - } else { - cf::face::set_data $idx, 0, $info->{data}, $info->{chksum}; + $data = pack "(w/a*)*", $meta, $info->{data}; } + cf::face::set_data $idx, 0, $data, Digest::MD5::md5 $data; cf::face::set_type $idx, $info->{type}; cf::cede_to_tick;