Creature page overhaul

Updates the creature pages to show more information.
You will need to reload your creatures.
-modifies database with migration 31
-small customisations are allowed via config file.
-functions added, getMonsterLink, getItemRarity, getCreatureImgPath, left, right,
-added functions to twig.
-view elements, immunities, summons, voices, loot, pushables, canpush, canwalk, runonhealth,hostile,attackable,rewardboss,defense,armor
-filter bosses
-show list as picture preview or names list
This commit is contained in:
Lee
2020-12-28 16:37:03 +00:00
parent 7e0fded595
commit 8e6bc73ca6
11 changed files with 559 additions and 156 deletions

View File

@@ -5,149 +5,71 @@
* @package MyAAC
* @author Gesior <jerzyskalski@wp.pl>
* @author Slawkens <slawkens@gmail.com>
* @copyright 2019 MyAAC
* @author Lee
* @copyright 2020 MyAAC
* @link https://my-aac.org
*/
defined('MYAAC') or die('Direct access not allowed!');
$title = "Creatures";
?>
<script type="text/javascript" src="tools/js/tipped.js"></script>
<link rel="stylesheet" type="text/css" href="tools/css/tipped.css"/>
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/datatables.min.css">
<script>
$(document).ready(function () {
Tipped.create('.item_image');
});
</script>
<?php
if (empty($_REQUEST['creature'])) {
//send query to database
$monsters = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'monsters` WHERE `hidden` != 1 ORDER BY name asc');
echo '<table id="creaturestb" class=""><thead>
<tr role="row"><th>Name</th><th>Health</th><th>Experience</th>
<th>Summonable Mana</th><th>Convinceable Mana</th><th>Race</th></tr>
</thead><tbody>';
foreach ($monsters as $monster) {
echo '<tr><td><a href="?subtopic=creatures&creature=' . urlencode($monster['name']) . '">' . $monster['name'] . '</a></td>
<td>' . $monster['health'] . '</td>
<td>' . $monster['exp'] . '</td>
<td>' . ($monster['summonable'] ? $monster['mana'] : "---") . '</td>
<td>' . ($monster['convinceable'] ? $monster['mana'] : "---") . '</td>
<td>' . ucwords($monster['race']) . '</td></tr>';
}
echo '</tbody></table>';
$creatures = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'monsters` WHERE `hidden` != 1 '.(empty($_REQUEST['boss']) ? '': 'AND `rewardboss` = 1').' ORDER BY name asc');
$twig->display('creatures.html.twig', array(
'creatures' => $creatures->fetchAll(),
'preview' => config('creature_images_preview'),
));
} else {
$monster_name = stripslashes(trim(ucwords($_REQUEST['creature'])));
$monster = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'monsters` WHERE `hidden` != 1 AND `name` = ' . $db->quote($monster_name) . ';')->fetch();
if (isset($monster['name'])) {
$title = $monster['name'] . " - Creatures";
$creature_name = urldecode(stripslashes(ucwords(strtolower($_REQUEST['creature']))));
$prep = $db->prepare('SELECT * FROM `' . TABLE_PREFIX . 'monsters` WHERE `hidden` != 1 AND `name` = ? LIMIT 1;');
$prep->execute([$creature_name]);
$creature = $prep->fetch();
echo '<div style="text-align:center"><h2>' . $monster['name'] . '</h2></div>';
echo '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tr><td>
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=60%>';
$number_of_rows = 0;
echo '<tr BGCOLOR="' . getStyle($number_of_rows) . '"><td width="100"><b>Health: </b></td><td>' . $monster['health'] . '</td></tr>';
$number_of_rows++;
echo '<tr BGCOLOR="' . getStyle($number_of_rows) . '"><td width="100"><b>Experience: </b></td><td>' . $monster['exp'] . '</td></tr>';
$number_of_rows++;
echo '<tr BGCOLOR="' . getStyle($number_of_rows) . '"><td width="100"><b>Speed like: </b></td><td>' . $monster['speed_lvl'] . ' level';
$number_of_rows++;
if ($monster['use_haste'])
echo ' (Can use haste)';
echo '</td></tr>';
$number_of_rows++;
if ($monster['summonable'] == 1)
echo '<tr BGCOLOR="' . getStyle($number_of_rows) . '"><td width="100"><b>Summon: </b></td><td>' . $monster['mana'] . ' mana</td></tr>';
else {
echo '<tr BGCOLOR="' . getStyle($number_of_rows) . '"><td width="100"><b>Summon: </b></td><td>Impossible</td></tr>';
}
$number_of_rows++;
if ($monster['convinceable'] == 1)
echo '<tr BGCOLOR="' . getStyle($number_of_rows) . '"><td width="100"><b>Convince: </b></td><td>' . $monster['mana'] . ' mana</td></tr>';
else
echo '<tr BGCOLOR="' . getStyle($number_of_rows) . '"><td width="100"><b>Convince: </b></td><td>Impossible</td></tr>';
echo '</TABLE></td><td align=left>
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=40%>
<tr><td align=left>';
$monster['gfx_name'] = trim(strtolower($monster['name'])) . ".gif";
if (!file_exists('images/monsters/' . $monster['gfx_name'])) {
$gfx_name = str_replace(" ", "", $monster['gfx_name']);
if (file_exists('images/monsters/' . $gfx_name))
echo '<img src="images/monsters/' . $gfx_name . '" height="128" width="128">';
else
echo '<img src="images/monsters/nophoto.png" height="128" width="128">';
} else
echo '<img src="images/monsters/' . $monster['gfx_name'] . '" height="128" width="128">';
echo '</td></tr>
</TABLE></td></tr><tr><td>
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>';
$immunities = json_decode($monster['immunities'], true);
if (count($immunities) > 0) {
$number_of_rows++;
echo '<tr BGCOLOR="' . getStyle($number_of_rows) . '"><td width="100"><b>Immunities: </b></td><td width="100%">' . implode(', ', $immunities) . '</td></tr>';
}
$voices = json_decode($monster['voices'], true);
if (count($voices) > 0) {
foreach ($voices as &$voice) {
$voice = '"' . $voice . '"';
if (isset($creature['name'])) {
function sort_by_chance($a, $b)
{
if ($a['chance'] == $b['chance']) {
return 0;
}
$number_of_rows++;
echo '<tr BGCOLOR="' . getStyle($number_of_rows) . '"><td width="100"><b>Voices: </b></td><td width="100%">' . implode(', ', $voices) . '</td></tr>';
}
echo '</TABLE></td></tr>';
$loot = json_decode($monster['loot'], true);
if ($loot) {
echo '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tr><td style="display: block;">';
function sort_by_chance($a, $b)
{
if ($a['chance'] == $b['chance']) {
return 0;
}
return ($a['chance'] > $b['chance']) ? -1 : 1;
}
usort($loot, 'sort_by_chance');
$i = 0;
foreach ($loot as $item) {
$name = getItemNameById($item['id']);
$tooltip = $name . '<br/>Chance: ' . round($item['chance'] / 1000, 2) . '%<br/>Max count: ' . $item['count'];
echo '<img src="' . $config['item_images_url'] . $item['id'] . config('item_images_extension') . '" class="item_image" title="' . $tooltip . '" width="32" height="32" border="0" alt=" ' . $name . '" />';
$i++;
}
echo '</td></tr></TABLE>';
return ($a['chance'] > $b['chance']) ? -1 : 1;
}
echo '</td></tr>';
echo '</TABLE>';
$title = $creature['name'] . " - Creatures";
$creature['img_link']= getCreatureImgPath($creature_name);
$voices = json_decode($creature['voices'], true);
$summons = json_decode($creature['summons'], true);
$elements = json_decode($creature['elements'], true);
$immunities = json_decode($creature['immunities'], true);
$loot = json_decode($creature['loot'], true);
usort($loot, 'sort_by_chance');
$loot_list = [];
foreach ($loot as $item) {
$item['name'] = getItemNameById($item['id']);
$item['rarity_chance'] = round($item['chance'] / 1000, 2);
$item['rarity'] = getItemRarity($item['chance']);
$item['tooltip'] = ucfirst($item['name']) . '<br/>Chance: ' . $item['rarity'] . (config('loot_show_percentage') ? ' ('. $item['rarity_chance'] .'%)' : '') . '<br/>Max count: ' . $item['count'];
$loot_list[] = $item;
}
$creature['loot'] = isset($loot_list) ? $loot_list : null;
$creature['voices'] = isset($voices) ? $voices : null;
$creature['summons'] = isset($summons) ? $summons : null;
$creature['elements'] = isset($elements) ? $elements : null;
$creature['immunities'] = isset($immunities) ? $immunities : null;
$twig->display('creature.html.twig', array(
'creature' => $creature,
));
} else {
echo "Monster with name <b>" . $monster_name . "</b> doesn't exist.";
echo "Creature with name <b>" . $creature_name . "</b> doesn't exist.";
}
//back button
$twig->display('creatures.back_button.html.twig');
}
?>
<script>
$(document).ready(function () {
$('#creaturestb').DataTable();
});
</script>
<script src="<?php echo BASE_URL; ?>tools/js/datatables.min.js"></script>