--- deliantra/server/utils/cfutil.in 2012/11/11 02:24:51 1.122 +++ deliantra/server/utils/cfutil.in 2012/11/11 05:53:12 1.124 @@ -1108,7 +1108,8 @@ print "processing resources...\n" if $VERBOSE; my $enc = JSON::XS->new->utf8->canonical->relaxed; - while (my ($k, $v) = each %RESOURCE) { + for my $k (sort keys %RESOURCE) { + my $v = $RESOURCE{$k}; if ($v->{meta} && $v->{meta}{datadir}) { delete $RESOURCE{$k}; @@ -1137,14 +1138,45 @@ } } - printf "writing facedata (%d faces, %d anims, %d resources)...\n", + printf "writing facedata...\n" if $VERBOSE; + + { + open my $fh, ">:perlio", "$DATADIR/facedata~" + or die "$DATADIR/facedata~: $!"; + + print $fh "FACEDATA"; + my $fofs = 8; + + my $put = sub { + my $len = length $_[0]; + my $ofs = $fofs; + + print $fh $_[0]; + $fofs += $len; + + ($len, $ofs) + }; + + for (values %FACEINFO) { + ($_->{size32}, $_->{fofs32}) = $put->(delete $_->{data32}); + ($_->{size64}, $_->{fofs64}) = $put->(delete $_->{data64}); + } + + for (values %RESOURCE) { + ($_->{size}, $_->{fofs}) = $put->(delete $_->{data}); + } + + close $fh; + } + + printf "writing faceinfo (%d faces, %d anims, %d resources)...\n", scalar keys %FACEINFO, scalar keys %ANIMINFO, scalar keys %RESOURCE if $VERBOSE; - open my $fh, ">:perlio", "$DATADIR/facedata~" - or die "$DATADIR/facedata~: $!"; + open my $fh, ">:perlio", "$DATADIR/faceinfo~" + or die "$DATADIR/faceinfo~: $!"; print $fh nfreeze { version => 2, @@ -1156,7 +1188,7 @@ print "committing files...\n" if $VERBOSE; - for (qw(archetypes facedata treasures), @COMMIT) { + for (qw(archetypes faceinfo facedata treasures), @COMMIT) { chmod 0644, "$DATADIR/$_~"; rename "$DATADIR/$_~", "$DATADIR/$_" or die "$DATADIR/$_: $!";