コード例 #1
0
ファイル: autogen.php プロジェクト: eoserv/pubcompiler-php
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));
    }
}
コード例 #2
0
ファイル: buildpub.php プロジェクト: eoserv/pubcompiler-php
function generate_pub($filetype, $filename, $formatfile, $prefix)
{
    $entries = array();
    $format = pub_format_parse_file($formatfile);
    $pub = new PubWriter($format, $filename);
    $entries = array();
    $max_id = 0;
    foreach (glob($prefix . '*.json') as $jsonfile) {
        $entry = json_clean_decode(file_get_contents($jsonfile), true);
        if (!$entry) {
            throw new Exception("Bad JSON file: {$jsonfile}");
        }
        $entries[$entry['id']] = $entry;
        $max_id = max($max_id, $entry['id']);
    }
    $pub->writeHeader(array('type' => $filetype, 'num' => $max_id + 1));
    for ($i = 1; $i <= $max_id; ++$i) {
        // testing
        /*
        if ($filetype == 'ENF')
        {
        	foreach (array('unknown1', 'unknown4') as $k)
        	{
        		if ($entries[$i][$k] != 0)
        		{
        			echo "$i (" . $entries[$i]['name'] . ") has $k = ", $entries[$i][$k], "\n";
        		}
        	}
        }
        */
        if (isset($entries[$i])) {
            $pub->writeEntry($entries[$i]);
        } else {
            echo "{$filetype} #{$i} unused.\n";
            $pub->writeDummyEntry();
        }
    }
    $pub->writeEOFEntry();
    $rid = sprintf('%x', $pub->finish());
    $kbsize = number_format(filesize($filename) / 1024, 1);
    echo "Wrote {$max_id}+1 entries to {$filename} ({$kbsize} kB). RID={$rid}\n";
    if ($kbsize > 62.5) {
        echo "WARNING! {$filename} may be too large.\n";
    }
}