function dump_pub($filetype, $filename, $formatfile, $prefix) { $format = pub_format_parse_file($formatfile); $reader = new PubReader($format, $filename); $header = $reader->readHeader(); $names = new NameManager(); if ($header['type'] != $filetype) { throw new Exception("{$filetype} file is not an {$filetype} file!"); } for ($i = 0; $i < $header['num']; ++$i) { $entry = $reader->readNextEntry(); if ($entry['name'] == 'eof') { break; } $gender = null; if ($filetype == 'EIF') { if ($entry['type'] == 'Armor') { $gender = $entry['spec2']; } } $idname = $names->generateName($entry['name'], $gender); // Re-order unknowns to the bottom foreach (array_keys($entry) as $k) { if (substr($k, 0, 7) == 'unknown') { $v = $entry[$k]; unset($entry[$k]); $entry[$k] = $v; } if (substr($k, 0, 5) == 'Xdrop') { unset($entry[$k]); } } // Re-order ID and name to the top... $name = $entry['name']; unset($entry['name']); if ($filetype == 'ESF') { $shout = $entry['shout']; } if ($filetype == 'EIF') { $size = $entry['size']; } if ($filetype == 'EIF') { $weight = $entry['weight']; } if ($filetype == 'ESF') { unset($entry['shout']); } if ($filetype == 'EIF') { unset($entry['size']); } if ($filetype == 'EIF') { unset($entry['weight']); } $entry = array_reverse($entry); $entry['name'] = $name; if ($filetype == 'ESF') { $entry['shout'] = $shout; } if ($filetype == 'EIF') { $entry['size'] = $size; } if ($filetype == 'EIF') { $entry['weight'] = $weight; } $entry['id'] = $i + 1; $entry = array_reverse($entry); $cleanup = array(); foreach ($entry as $k => $v) { if ($v === 0) { $cleanup[$k] = $k; } } if ($filetype == 'EIF') { $cleanup['unknown3'] = 'unknown3'; } foreach ($cleanup as $k) { unset($entry[$k]); } $filename = "{$prefix}{$idname}.json"; echo "Dumping: {$filename}\n"; file_put_contents($filename, json_encode($entry, JSON_PRETTY_PRINT)); } }