mirror of
https://github.com/Znote/ZnoteAAC.git
synced 2025-04-26 01:09:22 +02:00
278 lines
8.7 KiB
PHP
278 lines
8.7 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']);
|
|
|
|
// Alias attributes
|
|
if (isset($attributes['level'])) $attributes['lvl'] = $attributes['level'];
|
|
if (isset($attributes['magiclevel'])) $attributes['maglv'] = $attributes['magiclevel'];
|
|
|
|
// 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";
|
|
} elseif ("$attributeName" == "id") {
|
|
$vocations[] = (int)"$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'])) {
|
|
if ($getVoc !== 'all') {
|
|
echo $configVoc[$getVoc]['name'];
|
|
} else {
|
|
$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'])) {
|
|
if ($getVoc !== 'all') {
|
|
echo $configVoc[$getVoc]['name'];
|
|
} else {
|
|
$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>
|
|
|
|
<?php if (isset($spells['conjure'])): ?>
|
|
<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'])) {
|
|
if ($getVoc !== 'all') {
|
|
echo $configVoc[$getVoc]['name'];
|
|
} else {
|
|
$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 endif; ?>
|
|
<?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', 'level', 'maglv', 'magiclevel', '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'; ?>
|