#!/usr/bin/perl -w package MudConvert::WileyMUD::Output; use strict; use English; use Data::Dumper; use MudConvert::Utils qw( vnum_index_file report_error ); use MudConvert::WileyMUD::Constants qw( $sector_types $rev_sector_types $room_flags $rev_room_flags $zone_commands $exit_directions $rev_exit_directions $zone_reset_flags $rev_zone_reset_flags ); use MudConvert::API qw( flags_value ); our ($dump_dir, $dump_zone_file, $dump_world_file) = (undef,undef,undef); use base 'Exporter'; our @EXPORT_OK = qw( dump_game dump_zones dump_rooms dump_mobs dump_objects dump_shops ); sub dump_game { my $cfg = shift; my $data = shift; my $results = {}; $dump_dir = $cfg->{'destination-dir'}."/WileyMUD"; if( !(mkdir $dump_dir) ) { #system("echo rm -rf ".$cfg->{'destination-dir'}.'/WileyMUD' $cfg->{'destination-dir'}.'/WileyMUD.old'); #system("echo mv ".$cfg->{'destination-dir'}.'/WileyMUD'." ".$cfg->{'destination-dir'}.'/WileyMUD.old'); printf STDERR "FATAL: Cannot create output directory (%s) for WileyMUD!\n", $dump_dir; #return undef; } $dump_zone_file = "$dump_dir/tinyworld.zon"; $dump_world_file = "$dump_dir/tinyworld.wld"; $results->{Zones} = dump_zones($cfg, $data); $results->{Rooms} = dump_rooms($cfg, $data); $results->{Mobs} = dump_mobs($cfg, $data); $results->{Objects} = dump_objects($cfg, $data); $results->{Shops} = dump_shops($cfg, $data); return $results; } sub dump_zones { my $cfg = shift; my $data = shift; my $zone_data = $data->{'Zones'}; if( !(open DUMP, ">$dump_zone_file") ) { printf STDERR "FATAL: Cannot create output ZONE file (%s) for WileyMUD!\n", $dump_zone_file; return undef; } foreach my $vnum (sort { $a <=> $b } keys %{ $zone_data }) { printf DUMP "#%d\n", $vnum; printf DUMP "%s~\n", $zone_data->{$vnum}->{'Name'}; printf DUMP "%d %d %d\n", $zone_data->{$vnum}->{'Top'}, $zone_data->{$vnum}->{'Time'}, $rev_zone_reset_flags->{$zone_data->{$vnum}->{'Mode'}}; foreach my $reset (sort { $a->{'Number'} <=> $b->{'Number'} } @{ $zone_data->{$vnum}->{'Resets'} }) { #printf STDERR Dumper($reset); printf DUMP "%s", $reset->{'Command'}; printf DUMP " %s", join(" ", @{ $reset->{'Args'} }) if (defined $reset->{'Args'}) and scalar(@{ $reset->{'Args'} }) > 0; printf DUMP " * %s", $reset->{'Comment'} if (defined $reset->{'Comment'}); printf DUMP "\n"; } printf DUMP "%s\n\n", "S"; } printf DUMP "%s\n", "\$~"; close DUMP; return undef; } sub dump_rooms { my $cfg = shift; my $data = shift; my $room_data = $data->{'Rooms'}; if( !(open DUMP, ">$dump_world_file") ) { printf STDERR "FATAL: Cannot create output WORLD file (%s) for WileyMUD!\n", $dump_world_file; return undef; } foreach my $vnum (sort { $a <=> $b } keys %{ $room_data }) { printf DUMP "#%d\n", $vnum; printf DUMP "%s~\n", $room_data->{$vnum}->{'Name'}; printf DUMP "%s~\n", $room_data->{$vnum}->{'Description'}; printf DUMP "%d %d %d\n", $room_data->{$vnum}->{'Zone'}, flags_value($room_data->{$vnum}->{'Flags'}, $rev_room_flags), $rev_sector_types->{$room_data->{$vnum}->{'Sector'}}; foreach my $reset (sort { $a->{'Number'} <=> $b->{'Number'} } @{ $room_data->{$vnum}->{'Resets'} }) { #printf STDERR Dumper($reset); printf DUMP "%s", $reset->{'Command'}; printf DUMP " %s", join(" ", @{ $reset->{'Args'} }) if (defined $reset->{'Args'}) and scalar(@{ $reset->{'Args'} }) > 0; printf DUMP " * %s", $reset->{'Comment'} if (defined $reset->{'Comment'}); printf DUMP "\n"; } printf DUMP "%s\n\n", "S"; } printf DUMP "%s\n", "\$~"; close DUMP; return undef; } sub dump_mobs { my $cfg = shift; my $data = shift; return undef; } sub dump_objects { my $cfg = shift; my $data = shift; return undef; } sub dump_shops { my $cfg = shift; my $data = shift; return undef; } 1;