Files
2016-06-01 15:00:39 -04:00

151 lines
3.1 KiB
Perl

#!/usr/bin/perl
use POSIX;
my $sharedTemplateDir = "/c/work/swg/s7/data/sku.0/sys.shared/compiled/game/";
$planet = $ARGV[0];
print $planet."\n";
#############################################################################
sub floor
{
$value = @_[0];
if ( $value >= 0 )
{
return int( $value );
}
return int( $value ) - 1;
}
#############################################################################
sub _fmod
{
$value = @_[0];
$mod = @_[1];
if ( $value >= 0 )
{
return POSIX::fmod($value,$mod);
}
return $mod + POSIX::fmod($value,$mod);
}
#############################################################################
#
# load templates
#
open( INPUT, "templates.dat" ) || die $!;
while (<INPUT>)
{
chomp;
@row = split(' ');
$row[0] =~ s/\.tpf/\.iff/;
$templates{$row[0]} = [$row[1]];
}
open( PLANET_INPUT, "planets_with_buildout.txt" ) || die $1;
while (<PLANET_INPUT>)
{
chomp;
$planet = $_;
#
# clear existing client files
#
for ( $i = 0; $i < 64; ++$i )
{
$file = "client/" . $planet . "_" . int( $i / 8 + 1 ) . "_" . ( $i % 8 + 1 ) . ".tab";
print $file . "\n";
open( OUTPUT, ">" . $file ) || die $!;
print OUTPUT "objid\tcontainer\tshared_template_crc\tcell_index\tpx\tpy\tpz\tqw\tqx\tqy\tqz\tradius\tportal_layout_crc\n";
print OUTPUT "i\ti\th\ti\tf\tf\tf\tf\tf\tf\tf\tf\ti\n";
close OUTPUT;
$file = "server/" . $planet . "_" . int( $i / 8 + 1 ) . "_" . ( $i % 8 + 1 ) . ".tab";
print $file . "\n";
open( OUTPUT, ">" . $file ) || die $!;
print OUTPUT "objid\tcontainer\tserver_template_crc\tcell_index\tpx\tpy\tpz\tqw\tqx\tqy\tqz\tscripts\tobjvars\n";
print OUTPUT "i\ti\th\ti\tf\tf\tf\tf\tf\tf\tf\ts\ts\n";
close OUTPUT;
}
}
#
# open the exported data
#
open( INPUT, "export.dat" ) || die "unable to open " . $planet . ".tab";
while (<INPUT>)
{
chomp;
($planet,$row) = /(\S+)\s(.*)/;
# next if $planet ne $planet;
($objid,$container,$typeid,$template,$cell,$x,$y,$z,$ow,$ox,$oy,$oz,$scripts,$objvars) = split(',',$row);
$scripts =~ s/\s//g; # remove any spaces
$ax = floor( ( $x + 8192 ) / 16384 * 8 ) + 1;
$az = floor( ( $z + 8192 ) / 16384 * 8 ) + 1;
#
# compute new $x,$z
#
if ( !$container )
{
$x = _fmod( $x, 2048 );
$z = _fmod( $z, 2048 );
}
print "$ax $az\n" if $x < -8192 || $z < -8192;
$file = $planet . "_" . $ax . "_" . $az . ".tab";
if ( !$container )
{
if ( $file ne $lastFile )
{
$lastFile = $file;
open( SERVER, ">>server/" . $file ) || die $!;
open( CLIENT, ">>client/" . $file ) || die $!;
print $file . "\n";
}
}
print SERVER "$objid\t$container\t$template\t$cell\t$x\t$y\t$z\t$ow\t$ox\t$oy\t$oz\t$scripts\t$objvars\n";
## hack the row for the client
## we're searching for this pattern: portalProperty.crc|0|-770742594
($portal) = $objvars =~ /portalProperty\.crc\|0\|(-?\d+)/;
$portal = 0 if !$portal;
# if ( $templates{ $template } )
{
$radius = $templates{ $template }[0];
# fix the template name for the client
$template =~ s/\/([^\/]+)$/\/shared_$1/;
print CLIENT "$objid\t$container\t$template\t$cell\t$x\t$y\t$z\t$ow\t$ox\t$oy\t$oz\t$radius\t$portal\n";
}
}