This script reads spawn.xml file and list monsters sorted by spawn time. You can easily detect monsters with too low or too high spawn times.
<?php
$spawnsFile = 'ots-spawn.xml';
function element_attributes($element_name, $xml)
{
if ($xml == false) {
return false;
}
$found = preg_match(
'#<' . $element_name .
'\s+([^>]+(?:"|\'))\s?/?>#',
$xml,
$matches
);
if ($found == 1) {
$attribute_array = array();
$attribute_string = $matches[1];
$found = preg_match_all(
'#([^\s=]+)\s*=\s*(\'[^<\']*\'|"[^<"]*")#',
$attribute_string,
$matches,
PREG_SET_ORDER
);
if ($found != 0) {
foreach ($matches as $attribute) {
$attribute_array[$attribute[1]] =
substr($attribute[2], 1, -1);
}
return $attribute_array;
}
}
return false;
}
$monsters = [];
foreach (file($spawnsFile) as $lineNo => $line) {
$line = trim($line);
if (substr($line, 0, 8) === '<monster') {
$monsterAttributes = element_attributes('monster', $line);
if (is_array($monsterAttributes)) {
if (isset($monsterAttributes['name']) && isset($monsterAttributes['spawntime'])) {
$name = $monsterAttributes['name'];
$spawnTime = $monsterAttributes['spawntime'];
$monsters[] = [
'line' => $lineNo,
'name' => $monsterAttributes['name'],
'spawnTime' => (int)$monsterAttributes['spawntime'],
];
}
}
}
}
usort($monsters, function ($a, $b) {
return $a['spawnTime'] < $b['spawnTime'];
});
foreach ($monsters as $monster) {
echo $monster['line'] . ',' . $monster['name'] . ',' . $monster['spawnTime'] . PHP_EOL;
}