wileymud-1.187b/
wileymud-1.187b/attic/
wileymud-1.187b/attic/bin/
wileymud-1.187b/attic/lib/
wileymud-1.187b/attic/lib/adm/
wileymud-1.187b/attic/lib/man/
wileymud-1.187b/attic/lib/new-wld/
wileymud-1.187b/attic/lib/new-wld/default/
wileymud-1.187b/attic/lib/old/
wileymud-1.187b/attic/lib/wld/
wileymud-1.187b/attic/public_html/
wileymud-1.187b/attic/public_html/gfx/
wileymud-1.187b/attic/src/bin/
wileymud-1.187b/attic/src/etc/
wileymud-1.187b/attic/src/libauth-4.0-p5/
wileymud-1.187b/attic/src/sedna/
wileymud-1.187b/backups/
wileymud-1.187b/bin/
wileymud-1.187b/docs/
wileymud-1.187b/etc/
wileymud-1.187b/lib/
wileymud-1.187b/lib/adm/
wileymud-1.187b/lib/boards/
wileymud-1.187b/lib/log/
wileymud-1.187b/lib/man/
wileymud-1.187b/lib/ply/
wileymud-1.187b/lib/ply/a/
wileymud-1.187b/lib/ply/b/
wileymud-1.187b/lib/ply/c/
wileymud-1.187b/lib/ply/d/
wileymud-1.187b/lib/ply/g/
wileymud-1.187b/lib/ply/k/
wileymud-1.187b/lib/ply/m/
wileymud-1.187b/lib/ply/s/
wileymud-1.187b/lib/ply/t/
wileymud-1.187b/public_html/gfx/
wileymud-1.187b/src/bin/
wileymud-1.187b/src/convert/attic/
wileymud-1.187b/src/convert/obj/
wileymud-1.187b/src/convert/perl/
wileymud-1.187b/src/convert/perl/MudConvert/
wileymud-1.187b/src/convert/perl/MudConvert/DUMP/
wileymud-1.187b/src/convert/perl/MudConvert/Report/
wileymud-1.187b/src/convert/perl/MudConvert/WileyMUD/
wileymud-1.187b/src/convert/perl/output/
wileymud-1.187b/src/convert/perl/output/DUMP/
wileymud-1.187b/src/convert/perl/output/Report/
wileymud-1.187b/src/convert/perl/output/WileyMUD/
wileymud-1.187b/src/etc/
wileymud-1.187b/src/etc/init.d/
wileymud-1.187b/src/etc/rc.d/
wileymud-1.187b/src/etc/rc.d/init.d/
wileymud-1.187b/src/lib/
wileymud-1.187b/src/lib/adm/
wileymud-1.187b/src/lib/boards/
wileymud-1.187b/src/lib/log/
wileymud-1.187b/src/lib/man/
wileymud-1.187b/src/lib/ply/
wileymud-1.187b/src/lib/ply/a/
wileymud-1.187b/src/lib/ply/b/
wileymud-1.187b/src/lib/ply/c/
wileymud-1.187b/src/lib/ply/d/
wileymud-1.187b/src/lib/ply/e/
wileymud-1.187b/src/lib/ply/f/
wileymud-1.187b/src/lib/ply/g/
wileymud-1.187b/src/lib/ply/h/
wileymud-1.187b/src/lib/ply/i/
wileymud-1.187b/src/lib/ply/j/
wileymud-1.187b/src/lib/ply/k/
wileymud-1.187b/src/lib/ply/l/
wileymud-1.187b/src/lib/ply/m/
wileymud-1.187b/src/lib/ply/n/
wileymud-1.187b/src/lib/ply/o/
wileymud-1.187b/src/lib/ply/p/
wileymud-1.187b/src/lib/ply/q/
wileymud-1.187b/src/lib/ply/r/
wileymud-1.187b/src/lib/ply/s/
wileymud-1.187b/src/lib/ply/t/
wileymud-1.187b/src/lib/ply/u/
wileymud-1.187b/src/lib/ply/v/
wileymud-1.187b/src/lib/ply/w/
wileymud-1.187b/src/lib/ply/x/
wileymud-1.187b/src/lib/ply/y/
wileymud-1.187b/src/lib/ply/z/
wileymud-1.187b/src/obj/
wileymud-1.187b/src/utils/
wileymud-1.187b/src/utils/mobmaker/
#!/usr/bin/perl -w

package MudConvert::API;

use strict;
use English;
use base 'Exporter';

our @EXPORT_OK =  qw(
			zone_name
			room_name
			mob_name
			obj_name
			zone_span
			zone_reset_desc
			exit_name
			exit_type_desc
			exit_flag_list
			flags_value
                 );


sub _check_vnum {
  my $data = shift;
  my $id = shift;

  return undef if !(defined $data) or !(defined $id) or (length $id) < 1;
  return 1 if $id =~ /^\-?\d+$/ and (defined $data->{$id}) and (defined $data->{$id}->{'Name'});
  return undef;
}

sub _get_prop {
  my $data = shift;
  my $id = shift;
  my $field = shift || 'Name';

  return undef if !(defined $data) or !(defined $id) or (length $id) < 1;
  if( $id =~ /^\-?\d+$/ ) { #vnum
    return $data->{$id}->{$field} if (defined $data->{$id});
  } else {
    return $id if( grep { $_->{$field} eq $id } ( keys %{$data} ) );
  }
}

sub _get_name {
  my $data = shift;
  my $id = shift;

  my $name = _get_prop($data, $id, 'Name');
  return (defined $name) ? $name : 'UNKNOWN';
}

sub zone_name {
  my $data = shift;

  return 'UNKNOWN' if !(defined $data) or !(defined $data->{'Zones'});
  return _get_name($data->{'Zones'}, @_);
}

sub room_name {
  my $data = shift;

  return 'UNKNOWN' if !(defined $data) or !(defined $data->{'Rooms'});
  return _get_name($data->{'Rooms'}, @_);
}

sub mob_name {
  my $data = shift;

  return 'UNKNOWN' if !(defined $data) or !(defined $data->{'Mobs'});
  return _get_name($data->{'Mobs'}, @_);
}

sub obj_name {
  my $data = shift;

  return 'UNKNOWN' if !(defined $data) or !(defined $data->{'Objects'});
  return _get_name($data->{'Objects'}, @_);
}

sub zone_span {
  my $data = shift;
  my $vnum = shift;

  return (-1,-1) if !(defined $data) or !(defined $data->{'Zones'}) or !(defined $vnum);
  return (-1,-1) if !_check_vnum($data->{'Zones'}, $vnum);
  for( my ($i, $x) = (0, [ sort { $a <=> $b } keys %{ $data->{'Zones'} } ]); $i < scalar(@{ $x }); $i++) {
    my $vnum = $x->[$i];

    next if $vnum < $vnum;
    last if $vnum > $vnum;
    return ( ((!$i)? 0: $data->{'Zones'}->{$x->[$i-1]}->{'Top'} + 1), $data->{'Zones'}->{$vnum}->{'Top'} );
  }
  return (-1,-1);
}

sub zone_reset_desc {
  my $data = shift;
  my $vnum = shift;

  my $zone_reset_map = {
	'RESET_UNKNOWN'	=> "I do not know how it resets.",
	'RESET_NEVER'	=> "It NEVER resets.",
	'RESET_PC'	=> "It resets every %d minutes, if NO players are present.",
	'RESET_ALWAYS'	=> "It ALWAYS resets every %d minutes.",
	};

  return 'UNKNOWN' if !(defined $vnum) or (length $vnum) < 1 or !(defined $data) or !(defined $data->{'Zones'});
  if( ($vnum =~ /^\-?\d+$/) and (defined $data->{'Zones'}->{$vnum}) ) {
    my $mode = $data->{'Zones'}->{$vnum}->{'Mode'};
    my $time = $data->{'Zones'}->{$vnum}->{'Time'};
    return sprintf( $zone_reset_map->{$mode}, $time )
      if  (defined $data->{'Zones'}->{$vnum}->{'Mode'})
      and (defined $data->{'Zones'}->{$vnum}->{'Time'})
      and grep /^$mode$/, (keys %{ $zone_reset_map });
  } else {
    print STDERR "WARNING: Unknown ZONE RESET TYPE for Zone #$vnum\n";
  }
  return 'UNKNOWN';
}

sub exit_name {
  my $id = shift;

  my $exit_direction_map = {
	'EXIT_NONE'	=> 'NONE',
	'EXIT_NORTH'	=> 'North',
	'EXIT_EAST'	=> 'East',
	'EXIT_SOUTH'	=> 'South',
	'EXIT_WEST'	=> 'West',
	'EXIT_UP'	=> 'Up',
	'EXIT_DOWN'	=> 'Down',
	};

  return 'UNKNOWN' if !(defined $id) or (length $id) < 1;
  if( $id =~ /^\-?\d+$/ ) {
    print STDERR "FATAL: Untranslated EXIT DIRECTION\n";
  } else {
    return $exit_direction_map->{$id} if grep /^$id$/, (keys %{ $exit_direction_map });
  }
  return 'UNKNOWN';
}

sub exit_type_desc {
  my $id = shift;

  my $exit_type_map = {
	'EXIT_INVALID'			=> "a BROKEN Exit",
	'EXIT_OPEN'			=> "an Open Passage",
	'EXIT_DOOR'			=> "a Door",
	'EXIT_NOPICK'			=> "an Unpickable Door",
	'EXIT_SECRET'			=> "a Secret Door",
	'EXIT_SECRET_NOPICK'		=> "an Unpickable Secret Door",
	'EXIT_OPEN_ALIAS'		=> "an Aliased Open Passage",
	'EXIT_DOOR_ALIAS'		=> "an Aliased Door",
	'EXIT_NOPICK_ALIAS'		=> "an Aliased Unpickable Door",
	'EXIT_SECRET_ALIAS'		=> "an Aliased Secret Door",
	'EXIT_SECRET_NOPICK_ALIAS'	=> "an Aliased Unpickable Secret Door",
	};

  return 'UNKNOWN' if !(defined $id) or (length $id) < 1;
  if( $id =~ /^\-?\d+$/ ) {
    print STDERR "FATAL: Untranslated EXIT TYPE\n";
  } else {
    return $exit_type_map->{$id}
      if (defined $exit_type_map->{$id});
  }
  return 'UNKNOWN';
}

sub exit_flag_list {
  my $id = shift;

  my $exit_flag_map = {
	'EXIT_INVALID'			=> [],
	'EXIT_OPEN'			=> [],
	'EXIT_DOOR'			=> [ 'EXITFLAG_DOOR' ],
	'EXIT_NOPICK'			=> [ 'EXITFLAG_DOOR', 'EXITFLAG_NOPICK' ],
	'EXIT_SECRET'			=> [ 'EXITFLAG_DOOR', 'EXITFLAG_SECRET' ],
	'EXIT_SECRET_NOPICK'		=> [ 'EXITFLAG_DOOR', 'EXITFLAG_NOPICK', 'EXITFLAG_SECRET' ],
	'EXIT_OPEN_ALIAS'		=> [ 'EXITFLAG_ALIAS' ],
	'EXIT_DOOR_ALIAS'		=> [ 'EXITFLAG_DOOR', 'EXITFLAG_ALIAS' ],
	'EXIT_NOPICK_ALIAS'		=> [ 'EXITFLAG_DOOR', 'EXITFLAG_NOPICK', 'EXITFLAG_ALIAS' ],
	'EXIT_SECRET_ALIAS'		=> [ 'EXITFLAG_DOOR', 'EXITFLAG_SECRET', 'EXITFLAG_ALIAS' ],
	'EXIT_SECRET_NOPICK_ALIAS'	=> [ 'EXITFLAG_DOOR', 'EXITFLAG_NOPICK', 'EXITFLAG_SECRET', 'EXITFLAG_ALIAS' ],
	};

  return [] if !(defined $id) or (length $id) < 1;
  if( $id =~ /^\-?\d+$/ ) {
    print STDERR "FATAL: Untranslated EXIT TYPE\n";
  } else {
    return $exit_flag_map->{$id}
      if (defined $exit_flag_map->{$id});
  }
  return [];
}

sub flags_value {
  my $ref = shift;
  my $conversion = shift;

  return 0 if !(defined $ref) or !(defined $conversion);
  my $a = join(' + ', map { $conversion->{$_} } @{ $ref });
  $a = eval $a;
  return $a;
}

1;