#!/usr/local/bin/perl require "fread.pl"; require "defaults.pl"; $filein = $ARGV[0]; if (defined($ARGV[1]) && ($ARGV[1] eq "debug")) { $debug = "yes"; } undef @Exits; open (FILE, "$filein")||die("Can't open input file\n"); $pointer = 0; $a = 0; $last = 0; print "$filein\n"; while ($last == 0) { while (fread_letter() ne '#') {fread_to_eol();} $atype = fread_word(); if ($atype eq "AREA") {fread_area();} elsif ($atype eq "MOBILES") {fread_mobiles();} elsif ($atype eq "OBJECTS") {fread_objects();} elsif ($atype eq "ROOMS") {fread_rooms();} elsif ($atype eq "RESETS") {fread_resets();} elsif ($atype eq "SHOPS") {fread_shops();} elsif ($atype eq "SPECIALS"){fread_specials();} elsif ($atype eq "\$") {$last = 1;} } close FILE; for ($i = 0; $i < 111; $i++) { $mlev{$i} = 0; } foreach $vnum (sort bynum(keys(%m_name))) { if (!defined($m_shopkeep{$vnum})) { $tmp = int($m_level{$vnum}); $mlev{$tmp}++; } } open(OUT, ">rot.levels"); for ($i = 1; $i < 111; $i+=2) { $j = $i+1; print OUT "$i\t$mlev{$i}\t\t$j\t$mlev{$j}\n"; } close OUT; print "The following external exits were found:\n"; foreach $tmp (sort(@Exits)) { print "\t$tmp\n"; } exit; sub fread_area { print "Reading AREA\n"; $areatype = fread_string(); $areafile = fread_string(); $title = fread_string(); $levels = fread_levels(); $author = sprintf("%-7s", fread_word()); fread_to_eol(); $minvnum = fread_number(); $maxvnum = fread_number(); @Filepath = split(/\//, $fileout); $outfilename = $Filepath[$#Filepath]; return; } sub fread_mobiles { print "Reading MOBILES\n"; $vnum = 1; while ($vnum != 0) { while (fread_letter() ne '#') {fread_to_eol();} $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if ($vnum == 0) { next; } if (defined($debug)) { print "\t\tname\n"; } $m_name{$vnum} = fread_string(); if (defined($debug)) { print "\t\tshort\n"; } $m_short{$vnum} = fread_string(); if (defined($debug)) { print "\t\tlong\n"; } $m_long{$vnum} = fread_string(); if (defined($debug)) { print "\t\textended\n"; } $m_extended{$vnum} = fread_string(); if (defined($debug)) { print "\t\trace\n"; } $m_rac{$vnum} = fread_string(); if (defined($debug)) { print "\t\tact\n"; } $m_act{$vnum} = fread_flag(); if (defined($debug)) { print "\t\taffects\n"; } $m_aff{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tshields\n"; } $m_shd{$vnum} = fread_flag(); if (defined($debug)) { print "\t\talignment\n"; } $m_align{$vnum} = fread_number(); if (defined($debug)) { print "\t\tgroup\n"; } $m_group{$vnum} = fread_number(); if (defined($debug)) { print "\t\tlevel\n"; } $m_level{$vnum} = fread_number(); $level = int($m_level{$vnum}); $level += $levch; if ($level > 110) { $level = 110; } if ($level < 0) { $level = 0; } $m_level{$vnum} = $level; if (defined($debug)) { print "\t\thit roll\n"; } $m_hr{$vnum} = fread_number(); if (defined($debug)) { print "\t\thit dice\n"; } $m_hdice{$vnum} = fread_word(); if (defined($debug)) { print "\t\tmana dice\n"; } $m_mdice{$vnum} = fread_word(); if (defined($debug)) { print "\t\tdamage dice\n"; } $m_ddice{$vnum} = fread_word(); if (defined($debug)) { print "\t\tdamage type\n"; } $m_dtype{$vnum} = fread_word(); if (defined($debug)) { print "\t\tAC 1\n"; } $m_ac1{$vnum} = fread_number(); if (defined($debug)) { print "\t\tAC 2\n"; } $m_ac2{$vnum} = fread_number(); if (defined($debug)) { print "\t\tAC 3\n"; } $m_ac3{$vnum} = fread_number(); if (defined($debug)) { print "\t\tAC 4\n"; } $m_ac4{$vnum} = fread_number(); if (defined($debug)) { print "\t\toffensive\n"; } $m_off{$vnum} = fread_flag(); if (defined($debug)) { print "\t\timmune\n"; } $m_imm{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tresist\n"; } $m_res{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tvulnerable\n"; } $m_vul{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tstart position\n"; } $m_pos1{$vnum} = fread_word(); if (defined($debug)) { print "\t\tdefault position\n"; } $m_pos2{$vnum} = fread_word(); if (defined($debug)) { print "\t\tsex\n"; } $m_sex{$vnum} = fread_word(); if (defined($debug)) { print "\t\ttreasure\n"; } $m_gold{$vnum} = fread_number(); if (defined($debug)) { print "\t\tform\n"; } $m_form{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tparts\n"; } $m_parts{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tsize\n"; } $m_size{$vnum} = fread_word(); if (defined($debug)) { print "\t\tmaterial\n"; } $m_material{$vnum} = fread_word(); $lastline = 0; while ($lastline == 0) { if (defined($debug)) { print "\t\tExtras:\n"; } $tmp = fread_letter(); if ($tmp eq '#') { $pointer--; $lastline = 1; next; } if ($tmp eq 'D') { if (defined($debug)) { print "\t\t\tdeath message\n"; } $m_death{$vnum} = fread_string(); next; } if ($tmp eq 'T') { if (defined($debug)) { print "\t\t\tgreet message\n"; } $m_greet{$vnum} = fread_string(); next; } if ($tmp eq 'C') { if (defined($debug)) { print "\t\t\tclan\n"; } $m_clan{$vnum} = fread_string(); next; } if ($tmp eq 'F') { if (defined($debug)) { print "\t\t\tremove flags\n"; } $pos = fread_word(); $val = fread_flag(); if ($pos eq "act") { $m_flag_act{$vnum} = $val; } elsif ($pos eq "aff") { $m_flag_aff{$vnum} = $val; } elsif ($pos eq "shd") { $m_flag_shd{$vnum} = $val; } elsif ($pos eq "off") { $m_flag_off{$vnum} = $val; } elsif ($pos eq "imm") { $m_flag_imm{$vnum} = $val; } elsif ($pos eq "res") { $m_flag_res{$vnum} = $val; } elsif ($pos eq "vul") { $m_flag_vul{$vnum} = $val; } elsif ($pos eq "for") { $m_flag_for{$vnum} = $val; } elsif ($pos eq "par") { $m_flag_par{$vnum} = $val; } } } } return; } sub fread_objects { print "Reading OBJECTS\n"; $vnum = 1; while ($vnum != 0) { while (fread_letter() ne '#') {fread_to_eol();} $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if ($vnum == 0) { next; } if (defined($debug)) { print "\t\tname\n"; } $o_name{$vnum} = fread_string(); if (defined($debug)) { print "\t\tshort\n"; } $o_short{$vnum} = fread_string(); if (defined($debug)) { print "\t\tlong\n"; } $o_long{$vnum} = fread_string(); if (defined($debug)) { print "\t\tmaterial\n"; } $o_material{$vnum} = fread_string(); if (defined($debug)) { print "\t\ttype\n"; } $o_type{$vnum} = fread_word(); if (defined($debug)) { print "\t\textra\n"; } $o_extra{$vnum} = fread_flag(); if (defined($debug)) { print "\t\twear\n"; } $o_wear{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tV0-V4\n"; } $o_v0{$vnum} = fread_word(); $o_v1{$vnum} = fread_word(); $o_v2{$vnum} = fread_word(); $o_v3{$vnum} = fread_word(); $o_v4{$vnum} = fread_word(); if (defined($debug)) { print "\t\tlevel\n"; } $o_level{$vnum} = fread_number(); $level = int($o_level{$vnum}); $level += $levch; if ($level > 110) { $level = 110; } if ($level < 0) { $level = 0; } $o_level{$vnum} = $level; if (defined($debug)) { print "\t\tweight\n"; } $o_weight{$vnum} = fread_number(); if (defined($debug)) { print "\t\tcost\n"; } $o_cost{$vnum} = fread_number(); if (defined($debug)) { print "\t\tcondition\n"; } $o_cond{$vnum} = fread_letter(); $lastline = 0; $extrapoint = 0; $applypoint = 0; $flagpoint = 0; while ($lastline == 0) { if (defined($debug)) { print "\t\tExtras:\n"; } $tmp = fread_letter(); if ($tmp eq '#') { $pointer--; $lastline = 1; next; } if ($tmp eq 'C') { if (defined($debug)) { print "\t\t\tclan\n"; } $o_clan{$vnum} = fread_string(); next; } if ($tmp eq 'G') { if (defined($debug)) { print "\t\t\tguild\n"; } $o_guild{$vnum} = fread_string(); next; } if ($tmp eq 'E') { $extrapoint++; $tmp = "${vnum}:${extrapoint}"; if (defined($debug)) { print "\t\t\textended key\n"; } $o_extkey{$tmp} = fread_string(); if (defined($debug)) { print "\t\t\textended desc\n"; } $o_extend{$tmp} = fread_string(); next; } if ($tmp eq 'A') { if (defined($debug)) { print "\t\t\tapply pos\n"; } $pos = fread_number(); if (defined($debug)) { print "\t\t\tapply value\n"; } $val = fread_number(); $applypoint++; $tmp = "${vnum}:${applypoint}"; $o_apply{$tmp} = "$pos $val"; next; } if ($tmp eq 'F') { if (defined($debug)) { print "\t\t\tflag pos\n"; } $pos = fread_letter(); if (defined($debug)) { print "\t\t\tflag apply pos\n"; } $apos = fread_number(); if (defined($debug)) { print "\t\t\tflag apply val\n"; } $aval = fread_number(); if (defined($debug)) { print "\t\t\tflag val\n"; } $val = fread_flag(); $flagpoint++; $tmp = "${vnum}:${flagpoint}"; $o_flag{$tmp} = "$pos $apos $aval $val"; } } } return; } sub fread_rooms { print "Reading ROOMS\n"; $vnum = 1; while ($vnum != 0) { while (fread_letter() ne '#') {fread_to_eol();} $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if ($vnum == 0) { next; } if (defined($debug)) { print "\t\tname\n"; } $r_name{$vnum} = fread_string(); if (defined($debug)) { print "\t\tdescription\n"; } $r_desc{$vnum} = fread_string(); if (defined($debug)) { print "\t\tarea num\n"; } fread_number(); if (defined($debug)) { print "\t\troom flags\n"; } $r_flags{$vnum} = fread_flag(); if (defined($debug)) { print "\t\tsector type\n"; } $r_sector{$vnum} = fread_number(); $lastline = 0; $extrapoint = 0; while ($lastline == 0) { if (defined($debug)) { print "\t\tExtras:\n"; } $tmp = fread_letter(); if ($tmp eq '#') { $pointer--; $lastline = 1; next; } if ($tmp eq 'C') { if (defined($debug)) { print "\t\t\tclan\n"; } $r_clan{$tmp} = fread_string(); next; } if ($tmp eq 'M') { if (defined($debug)) { print "\t\t\tmana\n"; } $r_mana{$tmp} = fread_number(); next; } if ($tmp eq 'H') { if (defined($debug)) { print "\t\t\theal\n"; } $r_heal{$tmp} = fread_number(); next; } if ($tmp eq 'E') { $extrapoint++; $tmp = "${vnum}:${extrapoint}"; if (defined($debug)) { print "\t\t\textended key\n"; } $r_extkey{$tmp} = fread_string(); if (defined($debug)) { print "\t\t\textended description\n"; } $r_extend{$tmp} = fread_string(); next; } if ($tmp eq 'D') { if (defined($debug)) { print "\t\t\tdoor #\n"; } $dir = fread_number(); $tmp = "${vnum}:${dir}"; if (defined($debug)) { print "\t\t\tdoor look\n"; } $r_doorlook{$tmp} = fread_string(); if (defined($debug)) { print "\t\t\tdoor keyword\n"; } $r_doorkeyw{$tmp} = fread_string(); if (defined($debug)) { print "\t\t\tdoor type\n"; } $r_doorlock{$tmp} = fread_number(); if (defined($debug)) { print "\t\t\tdoor key\n"; } $r_doorkey{$tmp} = fread_number(); if (defined($debug)) { print "\t\t\tdoor to_room\n"; } $r_doorto{$tmp} = fread_number(); if (($r_doorto{$tmp} < $minvnum) || ($r_doorto{$tmp} > $maxvnum)) { $temp = "${vnum} -> ${dir} -> $r_doorto{$tmp}"; push(@Exits, $temp); } } } } return; } sub fread_resets { print "Reading RESETS\n"; $rm = 0; $ro = 0; $rp = 0; $rg = 0; $re = 0; $rd = 0; $rr = 0; $inc = 0; while (fread_letter() ne 'S') { $inc++; $pointer--; $type = fread_letter(); if (defined($debug)) { print "\t$type\n"; } if ($type eq 'M') { $rm++; if (defined($debug)) { print "\t\tplaceholder\n"; } $rm_p1{$rm} = fread_number(); if (defined($debug)) { print "\t\tmob vnum\n"; } $rm_vnum{$rm} = fread_number(); if (defined($debug)) { print "\t\tmob global limit\n"; } $rm_glob{$rm} = fread_number(); if ($rm_glob{$rm} == 0) { $rm_glob{$rm} = -1; } if (defined($debug)) { print "\t\tmob to_room\n"; } $rm_room{$rm} = fread_number(); if (defined($debug)) { print "\t\tmob local limit\n"; } $rm_local{$rm} = fread_number(); if ($rm_local{$rm} == 0) { $rm_local{$rm} = -1; } } elsif ($type eq 'O') { $ro++; if (defined($debug)) { print "\t\tplaceholder\n"; } $ro_p1{$ro} = fread_number(); if (defined($debug)) { print "\t\tobject vnum\n"; } $ro_vnum{$ro} = fread_number(); if (defined($debug)) { print "\t\tplaceholder\n"; } $ro_p2{$ro} = fread_number(); if (defined($debug)) { print "\t\tobject to_room\n"; } $ro_room{$ro} = fread_number(); $ro_inc{$ro} = $inc; } elsif ($type eq 'P') { $rp++; if (defined($debug)) { print "\t\tplaceholder\n"; } $rp_p1{$rp} = fread_number(); $rp_p1{$rp} = 1; if (defined($debug)) { print "\t\tput vnum\n"; } $rp_vnum{$rp} = fread_number(); if (defined($debug)) { print "\t\tplaceholder\n"; } $rp_p2{$rp} = fread_number(); $rp_p2{$rp} = 1; if (defined($debug)) { print "\t\tput to_object\n"; } $rp_to{$rp} = fread_number(); if (defined($debug)) { print "\t\tput copies\n"; } $rp_copy{$rp} = fread_number(); $jo = $ro; $jg = $rg; $je = $re; $ko = 0; $kg = 0; $ke = 0; $found = 0; while ($found == 0) { if ($jo == 0) { $found = 1; } elsif ($rp_to{$rp} == $ro_vnum{$jo}) { $found = 1; $ko = $ro_inc{$jo}; } else { $jo--; } } $found = 0; while ($found == 0) { if ($jg == 0) { $found = 1; } elsif ($rp_to{$rp} == $rg_vnum{$jg}) { $found = 1; $kg = $rg_inc{$jg}; } else { $jg--; } } $found = 0; while ($found == 0) { if ($je == 0) { $found = 1; } elsif ($rp_to{$rp} == $re_vnum{$je}) { $found = 1; $ke = $re_inc{$je}; } else { $je--; } } $ru = 0; if ($ko > $kg) { $ru = $ko; $rp_type{$rp} = "object"; } else { $ru = $kg; $rp_type{$rp} = "give"; } if ($ke > $ru) { $ru = $ke; $rp_type{$rp} = "equip"; } if ($rp_type{$rp} eq "object") { $rp_under{$rp} = $jo; } elsif ($rp_type{$rp} eq "give") { $rp_under{$rp} = $jg; } else { $rp_under{$rp} = $je; } } elsif ($type eq 'G') { $rg++; if (defined($debug)) { print "\t\tplaceholder\n"; } $rg_p1{$rg} = fread_number(); if ($rg_p1{$rg} == 0) { $rg_p1{$rg} = 1; } if (defined($debug)) { print "\t\tgive vnum\n"; } $rg_vnum{$rg} = fread_number(); $rg_under{$rg} = $rm; if (defined($debug)) { print "\t\tgive limit\n"; } $rg_limit{$rg} = fread_number(); if ($rg_limit{$rg} == 0) { $rg_limit{$rg} = -1; } $rg_inc{$rg} = $inc; } elsif ($type eq 'E') { $re++; if (defined($debug)) { print "\t\tplaceholder\n"; } $re_p1{$re} = fread_number(); if ($re_p1{$re} == 0) { $re_p1{$re} = 1; } if (defined($debug)) { print "\t\tequip vnum\n"; } $re_vnum{$re} = fread_number(); if (defined($debug)) { print "\t\tequip limit\n"; } $re_limit{$re} = fread_number(); if ($re_limit{$re} == 0) { $re_limit{$re} = -1; } if (defined($debug)) { print "\t\tequip wear\n"; } $re_wear{$re} = fread_number(); $re_under{$re} = $rm; $re_inc{$re} = $inc; } elsif ($type eq 'D') { $rd++; if (defined($debug)) { print "\t\tplaceholder\n"; } $rd_p1{$rd} = fread_number(); if (defined($debug)) { print "\t\tdoor room\n"; } $rd_room{$rd} = fread_number(); if (defined($debug)) { print "\t\tdoor direction\n"; } $rd_door{$rd} = fread_number(); if (defined($debug)) { print "\t\tdoor state\n"; } $rd_stat{$rd} = fread_number(); } elsif ($type eq 'R') { $rr++; if (defined($debug)) { print "\t\tplaceholder\n"; } $rr_p1{$rr} = fread_number(); if (defined($debug)) { print "\t\trandom room\n"; } $rr_room{$rr} = fread_number(); if (defined($debug)) { print "\t\trandom max_direction\n"; } $rr_door{$rr} = fread_number(); } if (defined($debug)) { print "\t\tcomment\n"; } fread_to_eol(); } return; } sub fread_shops { print "Reading SHOPS\n"; $vnum = 1; while ($vnum != 0) { $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if ($vnum == 0) { next; } $m_shopkeep{$vnum} = "yes"; if (defined($debug)) { print "\t\tsell1\n"; } $sell1{$vnum} = fread_number(); if (defined($debug)) { print "\t\tsell2\n"; } $sell2{$vnum} = fread_number(); if (defined($debug)) { print "\t\tsell3\n"; } $sell3{$vnum} = fread_number(); if (defined($debug)) { print "\t\tsell4\n"; } $sell4{$vnum} = fread_number(); if (defined($debug)) { print "\t\tsell5\n"; } $sell5{$vnum} = fread_number(); if (defined($debug)) { print "\t\tbuy percent\n"; } $buyp{$vnum} = fread_number(); if (defined($debug)) { print "\t\tsell percent\n"; } $sellp{$vnum} = fread_number(); if (defined($debug)) { print "\t\topen\n"; } $open{$vnum} = fread_number(); if (defined($debug)) { print "\t\tclose\n"; } $close{$vnum} = fread_number(); if (defined($debug)) { print "\t\tcomment\n"; } fread_to_eol(); } return; } sub fread_specials { print "Reading SPECIALS\n"; while (fread_letter() ne 'S') { $pointer--; $type = fread_letter(); if ($type eq 'M') { $vnum = fread_number(); if (defined($debug)) { print "\t$vnum\n"; } if (defined($debug)) { print "\t\tspecial\n"; } $spec{$vnum} = fread_word(); if (defined($debug)) { print "\t\tcomment\n"; } fread_to_eol(); } else { if (defined($debug)) { print "\t\t\tEOL\n"; } fread_to_eol(); } } return; } sub bynum { $a <=> $b; }