#!/usr/bin/perl -w package MudConvert::ZoneSet; use strict; use English; sub new { my $invocant = shift; my $class = ref($invocant) || $invocant; my @args = ( @_ ); my $self = {}; bless( $self, $class ); foreach (@args) { my $zone = $self->load($_); $self->{$zone->{'VNum'}} = $zone if (defined $zone) and (defined $zone->{'VNum'}); } return $self; } sub load { my $self = shift; my $filename = shift || $self->{'Filename'} || "world/tinyworld.zon"; print STDERR "Override me!\n"; return undef; } sub save { my $self = shift; my $filename = shift || $self->{'Filename'} || "world/tinyworld.zon"; # Be sure to open for append! print STDERR "Override me!\n"; return undef; } sub _vnum_index_file { my $cfg = shift; my $filename = shift; my $vnum_map = {}; die "No file specified!" if !(defined $filename); die "Cannot open file $filename!" if !(-r $filename); print "Indexing $filename..." if !$cfg->{'quiet'}; open FP, "$filename"; my $line = 1; my $count = 0; my $prev_pos = tell FP; while(<FP>) { chomp; if( $_ =~ /^\#(\d+)/ ) { my $vnum = $1; my $len = length "$vnum"; printf "%d%s%s", $vnum, spin($count), "\b"x($len + 1) if $cfg->{'verbose'}; $vnum_map->{$vnum}->{'VNum'} = $vnum; $vnum_map->{$vnum}->{'Filename'} = $filename; $vnum_map->{$vnum}->{'Number'} = $count++; $vnum_map->{$vnum}->{'Line'} = $line; $vnum_map->{$vnum}->{'BytePos'} = $prev_pos; } $line++; $prev_pos = tell FP; } close FP; print "done\n" if !$cfg->{'quiet'}; return $vnum_map; } 1;