<?PHP
function colorChanges($orginal, $changed)
{
$ret = '';
for($l = 0; $l < strlen($orginal); $l++)
if($orginal[$l] == $changed[$l])
$ret .= $orginal[$l];
else
$ret .= '<font size="6" color="blue">' . $changed[$l] . '</font>';
return $ret;
}
$monstersErrorsList = array();
$spawnsErrorsList = array();
if(isset($_FILES['monsters_file']['tmp_name']))
{
$monstersPaths = array();
$monstersZIP = new ZipArchive();;
if($monstersZIP->open($_FILES['monsters_file']['tmp_name']))
{
for($i = 0; $i < $monstersZIP->numFiles; $i++)
if(!in_array(substr($monstersZIP->getNameIndex($i), -1, 1), array('/', '\\')))
$monstersPaths[$monstersZIP->getNameIndex($i)] = $monstersZIP->getNameIndex($i);
$removeMonsterDir = true;
foreach($monstersPaths as $monsterPath)
{
if(substr($monsterPath, 0, 8) != 'monster/')
$removeMonsterDir = false;
}
if($removeMonsterDir)
{
$monstersFilePath = 'monster/monsters.xml';
foreach($monstersPaths as $key => $value)
{
$monstersPaths[substr($key, 8)] = substr($key, 8);
unset($monstersPaths[$key]);
}
}
else
$monstersFilePath = 'monsters.xml';
$monstersPathsLowercase = $monstersPaths;
foreach($monstersPathsLowercase as $key => $value)
$monstersPathsLowercase[strtolower($key)] = strtolower($value);
}
else
die('bad file monster.zip');
$monstersXML = new DOMDocument();
$monstersXML->loadXML($monstersZIP->getFromName($monstersFilePath));
$monstersList = array();
$monstersElements = $monstersXML->getElementsByTagName('monster');
for($m = 0; $m < $monstersElements->length; $m++)
{
if($monstersElements->item($m)->hasAttributes() && $monstersElements->item($m)->attributes->getNamedItem('name') && $monstersElements->item($m)->attributes->getNamedItem('file'))
$monstersList[$monstersElements->item($m)->attributes->getNamedItem('name')->nodeValue] = $monstersElements->item($m)->attributes->getNamedItem('file')->nodeValue;
}
$i = 0;
$monsterPathId = array_values($monstersPaths);
foreach($monstersList as $name => $file)
{
if(!isset($monstersPaths[$file]))
{
$doesnt_exist = '<b>' . $name . '</b> - ';
if(isset($monstersPathsLowercase[strtolower($file)]))
$doesnt_exist .= 'NOW: <i>' . colorChanges($monsterPathId[$i], $file) . '</i> - Proposition: <i>' . colorChanges($file, $monsterPathId[$i]) . '</i>';
else
$doesnt_exist .= 'Proposition: <b>NONE</b>';
$monstersErrorsList[] = $doesnt_exist;
}
$i++;
}
if(isset($_FILES['spawns_file']['tmp_name']))
{
$spawnsXML = new DOMDocument();
$spawnsXML->load($_FILES['spawns_file']['tmp_name']);
$spawnMonstersList = array();
$spawnsMonsters = $spawnsXML->getElementsByTagName('monster');
for($s = 0; $s < $spawnsMonsters->length; $s++)
if($spawnsMonsters->item($s)->hasAttributes() && $spawnsMonsters->item($s)->attributes->getNamedItem('name'))
$spawnMonstersList[$spawnsMonsters->item($s)->attributes->getNamedItem('name')->nodeValue] = $spawnsMonsters->item($s)->attributes->getNamedItem('name')->nodeValue;
foreach($spawnMonstersList as $name)
if(!isset($monstersList[$name]))
$spawnsErrorsList[] = '<b>' . $name . '</b>';
}
}
echo '<html><head><title>Monsters & Spawn files verifier</title></head><body>';
echo '<font size="5"><form action="index.php" method="post" enctype="multipart/form-data">
Monsters file: <input type="file" name="monsters_file" /> [monster.zip]<br />
Spawns file: <input type="file" name="spawns_file" /> [..-spawn.xml]<br />
<input type="submit" value="Send & verify" />
</form></font>';
echo '<font size="8" color="red">Wrong paths to monsters in monsters.xml:</font><font size="5"><br/>' . implode('<br />', $monstersErrorsList) . '</font>
<br /><font size="8" color="red">Monsters from spawns file that can\'t be loaded:</font><font size="5"><br/>' . implode('<br />', $spawnsErrorsList) . '</font></body></html>';
?>