85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
#!/usr/bin/perl
 | 
						|
# this will adjust the 'slaying' lines
 | 
						|
# in the current directory, and all sub-directories,
 | 
						|
# so shuffling maps to new directories is not a problem.
 | 
						|
#
 | 
						|
# This absolutely depends on each map having a unique name.
 | 
						|
# This script should be placed outside of the map directory,
 | 
						|
# but you should be inside it when you run it.  Ideally
 | 
						|
# in the top-level maps directory.
 | 
						|
#
 | 
						|
# Dupes are noted, and not adjusted.
 | 
						|
#
 | 
						|
 | 
						|
use File::Basename qw( basename );
 | 
						|
use vars qw( $MAPBASE );
 | 
						|
use strict;
 | 
						|
use warnings;
 | 
						|
 | 
						|
# this is the base directory of the maps.
 | 
						|
# The slaying linesthatpointtoothermaps,
 | 
						|
# will be re-written as $MAPBASE/filename
 | 
						|
$MAPBASE = "/mlab";
 | 
						|
 | 
						|
my %FILES = ();
 | 
						|
my %DUPES = ();
 | 
						|
open(FIND, "find ./|");
 | 
						|
while (<FIND>) {
 | 
						|
	chomp;
 | 
						|
	next unless -f;
 | 
						|
	next if $_ =~ /editor/;
 | 
						|
	my $basename = basename($_);
 | 
						|
	if ($FILES{$basename}) {
 | 
						|
		unless (exists $DUPES{$basename}) {
 | 
						|
			$DUPES{$basename} = [];
 | 
						|
			push(@{ $DUPES{$basename} }, $FILES{$basename});
 | 
						|
		}
 | 
						|
		push(@{ $DUPES{$basename} }, $_);
 | 
						|
		#warn "DUPE!: $_ => $FILES{$basename}\n";
 | 
						|
	}
 | 
						|
	else {
 | 
						|
		$FILES{$basename} = $_;
 | 
						|
	}
 | 
						|
}
 | 
						|
close(FIND);
 | 
						|
foreach my $file (keys %DUPES) {
 | 
						|
	delete $FILES{$file};
 | 
						|
	print "Dupe filename: $file Sizes:";
 | 
						|
	foreach my $x (@{ $DUPES{$file} }) {
 | 
						|
		printf " %s", -s $x; # file size
 | 
						|
		printf " %s", $x; # file path
 | 
						|
	}
 | 
						|
	print "\n";
 | 
						|
}
 | 
						|
 | 
						|
foreach my $file (keys %FILES) {
 | 
						|
	open(FILE, "<$FILES{$file}");
 | 
						|
	my $data = join("", <FILE>);
 | 
						|
	close(FILE);
 | 
						|
 | 
						|
	my $newdata = $data;
 | 
						|
 | 
						|
	$newdata =~ s/(slaying|final_map)\s+(.+)/mappath($1,$2)/eg;
 | 
						|
	if ($newdata ne $data) {
 | 
						|
		open(FILE, ">$FILES{$file}");
 | 
						|
		print FILE $newdata;
 | 
						|
		close(FILE);
 | 
						|
	}
 | 
						|
	#printf("%s => %s\n", $file, $FILES{$file});
 | 
						|
}
 | 
						|
 | 
						|
sub mappath {
 | 
						|
	my ($type,$name) = @_;
 | 
						|
	$name =~ s/\s+//g;
 | 
						|
	my $file = basename($name);
 | 
						|
	my $new = $FILES{$file};
 | 
						|
	if ($new) {
 | 
						|
		unless ($file =~ /[a-z]/) {
 | 
						|
			print "CASE?: $file\n";
 | 
						|
		}
 | 
						|
		$new =~ s/^\.\///;
 | 
						|
		return "$type $MAPBASE/$new";
 | 
						|
	}
 | 
						|
	return "$type $name";
 | 
						|
}
 |