--- deliantra/server/utils/cfutil.in 2010/04/03 22:30:21 1.82 +++ deliantra/server/utils/cfutil.in 2010/04/28 20:51:58 1.83 @@ -76,6 +76,7 @@ my $FORCE; my $TMPDIR = "/tmp/cfutil$$~"; my $TMPFILE = "aaaa0"; +my @COMMIT; our %COLOR = ( black => 0, @@ -804,18 +805,31 @@ my $enc = JSON::XS->new->utf8->canonical->relaxed; while (my ($k, $v) = each %RESOURCE) { - if ($v->{type} & 1) { - # prepend meta info + if ($v->{meta} && $v->{meta}{datadir}) { + delete $RESOURCE{$k}; - my $meta = $enc->encode ({ - name => $k, - %{ $v->{meta} || {} }, - }); + $k =~ s/^res\/// or die "$k: datadir files must be in res/"; - $v->{data} = pack "(w/a*)*", $meta, $v->{data}; - } + printf "writing $k (%d octets)...\n", length $v->{data} if $VERBOSE; + open my $fh, ">:raw", "$DATADIR/$k~" + or die "$DATADIR/$k~: $!"; + syswrite $fh, $v->{data}; + push @COMMIT, $k; + + } else { + if ($v->{type} & 1) { + # prepend meta info + + my $meta = $enc->encode ({ + name => $k, + %{ $v->{meta} || {} }, + }); - make_hash $k, $v->{data}, $v->{hash}, 6; # 6 for the benefit of existing clients + $v->{data} = pack "(w/a*)*", $meta, $v->{data}; + } + + make_hash $k, $v->{data}, $v->{hash}, 6; # 6 for the benefit of existing clients + } } printf "writing facedata (%d faces, %d anims, %d resources)...\n", @@ -838,7 +852,7 @@ print "committing files...\n" if $VERBOSE; - for (qw(archetypes facedata treasures)) { + for (qw(archetypes facedata treasures), @COMMIT) { chmod 0644, "$DATADIR/$_~"; rename "$DATADIR/$_~", "$DATADIR/$_" or die "$DATADIR/$_: $!";