ZnoteAAC/spells.php

255 lines
8.1 KiB
PHP

<?php require_once 'engine/init.php'; include 'layout/overall/header.php';
// Loading spell list
$spellsCache = new Cache('engine/cache/spells');
if (user_logged_in() && is_admin($user_data)) {
if (isset($_GET['update'])) {
echo "<p><strong>Logged in as admin, loading engine/XML/spells.xml file and updating cache.</strong></p>";
// SPELLS XML TO PHP ARRAY
$spellsXML = simplexml_load_file("engine/XML/spells.xml");
if ($spellsXML !== false) {
$types = array();
$type_attr = array();
$groups = array();
// This empty array will eventually contain all spells grouped by type and indexed by spell name
$spells = array();
// Loop through each XML spell object
foreach ($spellsXML as $type => $spell) {
// Get spell types
if (!in_array($type, $types)) {
$types[] = $type;
$type_attr[$type] = array();
}
// Get spell attributes
$attributes = array();
// Extract attribute values from the XML object and store it in a more manage friendly way $attributes
foreach ($spell->attributes() as $aName => $aValue)
$attributes["$aName"] = "$aValue";
// Remove unececsary attributes
if (isset($attributes['script'])) unset($attributes['script']);
if (isset($attributes['spellid'])) unset($attributes['spellid']);
//if (isset($attributes['id'])) unset($attributes['id']);
//if (isset($attributes['conjureId'])) unset($attributes['conjureId']);
if (isset($attributes['function'])) unset($attributes['function']);
// Populate type attributes
foreach (array_keys($attributes) as $attr) {
if (!in_array($attr, $type_attr[$type]))
$type_attr[$type][] = $attr;
}
// Get spell groups
if (isset($attributes['group'])) {
if (!in_array($attributes['group'], $groups))
$groups[] = $attributes['group'];
}
// Get spell vocations
$vocations = array();
foreach ($spell->vocation as $vocation) {
foreach ($vocation->attributes() as $attributeName => $attributeValue) {
if ("$attributeName" == "name") {
$vocId = vocation_name_to_id("$attributeValue");
$vocations[] = ($vocId !== false) ? $vocId : "$attributeValue";
}
}
}
// Exclude monster spells (Monster spells looks like this on the ORTS data pack)
$words = (isset($attributes['words'])) ? $attributes['words'] : false;
// Also exclude "house spells" such as aleta sio.
$name = (isset($attributes['name'])) ? $attributes['name'] : false;
if (substr($words, 0, 3) !== '###' && substr($name, 0, 5) !== 'House') {
// Build full spell list where the spell name is the key to the spell array.
$spells[$type][$name] = array('vocations' => $vocations);
// Populate spell array with potential relevant attributes for the spell type
foreach ($type_attr[$type] as $att)
$spells[$type][$name][$att] = (isset($attributes[$att])) ? $attributes[$att] : false;
}
}
// Sort the spell list properly
foreach (array_keys($spells) as $type) {
usort($spells[$type], function ($a, $b) {
if (isset($a['lvl']))
return $a['lvl'] - $b['lvl'];
if (isset($a['maglv']))
return $a['maglv'] - $b['maglv'];
return -1;
});
}
$spellsCache->setContent($spells);
$spellsCache->save();
} else {
echo "<p><strong>Failed to load engine/XML/spells.xml file.</strong></p>";
}
} else {
$spells = $spellsCache->load();
?>
<form action="">
<input type="submit" name="update" value="Generate new cache">
</form>
<?php
}
// END SPELLS XML TO PHP ARRAY
} else {
$spells = $spellsCache->load();
}
// End loading spell list
if ($spells) {
// Preparing data
$configVoc = $config['vocations'];
$types = array_keys($spells);
$itemServer = 'http://'.$config['shop']['imageServer'].'/';
// Filter spells by vocation
$getVoc = (isset($_GET['vocation'])) ? getValue($_GET['vocation']) : 'all';
if ($getVoc !== 'all') {
$getVoc = (int)$getVoc;
foreach ($types as $type)
foreach ($spells[$type] as $name => $spell)
if (!empty($spell['vocations']))
if (!in_array($getVoc, $spell['vocations']))
unset($spells[$type][$name]);
}
// Render HTML
?>
<h1 id="spells">Spells<?php if ($getVoc !== 'all') echo ' ('.$configVoc[$getVoc]['name'].')';?></h1>
<form action="#spells" class="filter_spells">
<label for="vocation">Filter vocation:</label>
<select id="vocation" name="vocation">
<option value="all">All</option>
<?php foreach ($config['vocations'] as $id => $vocation): ?>
<option value="<?php echo $id; ?>" <?php if ($getVoc === $id) echo "selected"; ?>><?php echo $vocation['name']; ?></option>
<?php endforeach; ?>
</select>
<input type="submit" value="Search">
</form>
<h2>Spell types:</h2>
<ul>
<?php foreach ($types as $type): ?>
<li><a href="#spell_<?php echo $type; ?>"><?php echo ucfirst($type); ?></a></li>
<?php endforeach; ?>
</ul>
<h2 id="spell_instant">Instant Spells</h2>
<a href="#spells">Jump to top</a>
<table class="table tbl-hover">
<tbody>
<tr class="yellow">
<td>Name</td>
<td>Words</td>
<td>Level</td>
<td>Mana</td>
<td>Vocations</td>
</tr>
<?php foreach ($spells['instant'] as $spell): ?>
<tr>
<td><?php echo $spell['name']; ?></td>
<td><?php echo $spell['words']; ?></td>
<td><?php echo $spell['lvl']; ?></td>
<td><?php echo $spell['mana']; ?></td>
<td><?php
if (!empty($spell['vocations'])) {
$names = array();
foreach ($spell['vocations'] as $id) {
if (isset($configVoc[$id]))
$names[] = $configVoc[$id]['name'];
}
echo implode(',<br>', $names);
}
?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<h2 id="spell_rune">Magical Runes</h2>
<a href="#spells">Jump to top</a>
<table class="table tbl-hover">
<tbody>
<tr class="yellow">
<td>Name</td>
<td>Level</td>
<td>Magic Level</td>
<td>Image</td>
<td>Vocations</td>
</tr>
<?php foreach ($spells['rune'] as $spell): ?>
<tr>
<td><?php echo $spell['name']; ?></td>
<td><?php echo $spell['lvl']; ?></td>
<td><?php echo $spell['maglv']; ?></td>
<td><img src="<?php echo $itemServer.$spell['id'].'.gif'; ?>" alt="Rune image"></td>
<td><?php
if (!empty($spell['vocations'])) {
$names = array();
foreach ($spell['vocations'] as $id) {
if (isset($configVoc[$id]))
$names[] = $configVoc[$id]['name'];
}
echo implode(',<br>', $names);
}
?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<h2 id="spell_conjure">Conjure Spells</h2>
<a href="#spells">Jump to top</a>
<table class="table tbl-hover">
<tbody>
<tr class="yellow">
<td>Name</td>
<td>Words</td>
<td>Level</td>
<td>Mana</td>
<td>Soul</td>
<td>Charges</td>
<td>Image</td>
<td>Vocations</td>
</tr>
<?php foreach ($spells['conjure'] as $spell): ?>
<tr>
<td><?php echo $spell['name']; ?></td>
<td><?php echo $spell['words']; ?></td>
<td><?php echo $spell['lvl']; ?></td>
<td><?php echo $spell['mana']; ?></td>
<td><?php echo $spell['soul']; ?></td>
<td><?php echo $spell['conjureCount']; ?></td>
<td><img src="<?php echo $itemServer.$spell['conjureId'].'.gif'; ?>" alt="Rune image"></td>
<td><?php
if (!empty($spell['vocations'])) {
$names = array();
foreach ($spell['vocations'] as $id) {
if (isset($configVoc[$id]))
$names[] = $configVoc[$id]['name'];
}
echo implode(',<br>', $names);
}
?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<a href="#spells">Jump to top</a>
<?php
} else {
?>
<h1>Spells</h1>
<p>Spells have currently not been loaded into the website by the server admin.</p>
<?php
}
/* Debug tests
foreach ($spells as $type => $spells) {
data_dump($spells, false, "Type: $type");
}
// All spell attributes?
'group', 'words', 'lvl', 'maglv', 'charges', 'allowfaruse', 'blocktype', 'mana', 'soul', 'prem', 'aggressive', 'range', 'selftarget', 'needtarget', 'blockwalls', 'needweapon', 'exhaustion', 'groupcooldown', 'needlearn', 'casterTargetOrDirection', 'direction', 'params', 'playernameparam', 'conjureId', 'reagentId', 'conjureCount', 'vocations'
*/
include 'layout/overall/footer.php'; ?>