Postado Fevereiro 10, 2021 4 anos Olá senhores, hoje vim disponibilizar um Sistema desenvolvido por mim para o MyAAC onde a função dele é exibir os monstros do seu jogo baseado em seu Level necessário para acessar ou level indicado. Exemplo de como vai ficar: Spoiler Instalação: Spoiler Acesse system/libs/pot/OTS_Monster.php e adicione o seguinte trecho de código: /** * Returns monster Level. * * @return int Level. * @throws DOMException On DOM operation error. */ public function getLookLevel() { return (string) $this->documentElement->getElementsByTagName('look')->item(0)->getAttribute('level'); } /** * Returns monster Looktype. * * @return int Looktype. * @throws DOMException On DOM operation error. */ public function getLookType() { return (int) $this->documentElement->getElementsByTagName('look')->item(0)->getAttribute('type'); } Agora em system/libs/creatures.php você vai adicionar abaixo de: $health = $monster->getHealth(); o seguinte código: //load monster looktype $looktype = $monster->getLookType(); //load monster looktype $looklevel = $monster->getLookLevel(); Depois de ctrL+f em: $db->insert(TABLE_PREFIX . 'monsters', array( e coloque no fim desse insert o seguinte código: 'looktype' => $looktype, 'looklevel' => $looklevel Ficando assim: $db->insert(TABLE_PREFIX . 'monsters', array( 'name' => $name, 'mana' => empty($mana) ? 0 : $mana, 'exp' => $monster->getExperience(), 'health' => $health, 'speed_lvl' => $speed_lvl, 'use_haste' => $use_haste, 'voices' => json_encode($monster->getVoices()), 'immunities' => json_encode($monster->getImmunities()), 'summonable' => $flags['summonable'] > 0 ? 1 : 0, 'convinceable' => $flags['convinceable'] > 0 ? 1 : 0, 'race' => $race, 'loot' => json_encode($loot), 'looktype' => $looktype, 'looklevel' => $looklevel )); Agora em seu banco de dados você vai rodar estes 2 comando no MySQL (Ele serve para adicionar as novas colunas na tabela myaac_monsters): ALTER TABLE `myaac_monsters` ADD COLUMN `looktype` INT(11); ALTER TABLE `myaac_monsters` ADD COLUMN `looklevel` VARCHAR(30); Feito isso, agora vamos colocar o level do monstro na tag look dele no arquivo xml, acesse a pasta do seu servidor, e vá nos arquivo de monstros, dentro da tag <look> você adiciona o atributo level="1". Exemplo: Antes de adicionar o atributo: <?xml version="1.0" encoding="UTF-8"?> <monster name="Akahoshi Member" nameDescription="a Akahoshi Member" race="blood" experience="40000" speed="250" manacost="0"> <health now="15000" max="15000"/> <look type="938" head="1" body="1" legs="1" feet="1" addons="0" corpse="3061"/> Depois de adicionar o atributo: <?xml version="1.0" encoding="UTF-8"?> <monster name="Akahoshi Member" nameDescription="a Akahoshi Member" race="blood" experience="40000" speed="250" manacost="0"> <health now="15000" max="15000"/> <look type="938" head="1" body="1" legs="1" feet="1" addons="0" corpse="3061" level="350"/> Pronto, agora acesse sua conta de administrador no site, vai na aba creatures e da Reload Monsters. Se você acessar o banco de dados, e ir na tabela myaac_monsters é esperado que você veja as colunas looktype e looklevel agora preenchidas. Sistema está instalado e já está armazenando o level do monstro em seu banco de dados!! A parte a seguir é 1 tutorial extra para quem quiser 1 base de como exibir os monstros baseado no level. Spoiler Para você exibir na aba de creatures dividido por level, você pode separar os selects com a condição LIKE. Vamos lá: $monstros = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'monsters` WHERE `looklevel` LIKE "1" and `hidden` != 1'.$whereandorder); Nesse trecho de código o que fizemos foi selecionar todos os monstros na tabela myaac_monsters onde o valor da coluna looklevel tem que ser igual a 1. Abaixo vou deixar 1 trecho de código para formar 1 tabela apenas com monstros de level 1. Você pode replicar ela e fazer para vários levels distintos: No arquivo creatures.php no diretório system/pages/creatures.php e adicione esse código: ####################### Monstro Normal 1 ############################## $allowed_order_by = array('name', 'exp', 'health', 'summonable', 'race'); $order = isset($_REQUEST['order']) ? $_REQUEST['order'] : 'name'; //generate sql query $desc = ''; if(isset($_REQUEST['desc']) && $_REQUEST['desc'] == 1) { $desc = " DESC"; } if($order == 'name') { $whereandorder = ' ORDER BY name'.$desc; } elseif($order == 'exp') { $whereandorder = ' ORDER BY exp'.$desc.', name'; } elseif($order == 'health') { $whereandorder = ' ORDER BY health'.$desc.', name'; } else { $whereandorder = ' ORDER BY name'; } //send query to database $monstros = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'monsters` WHERE `looklevel` LIKE "1" and `hidden` != 1'.$whereandorder); echo '<br/><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100% BGCOLOR="#8B4513" style="font-weight: bold;"> <tr background="/templates/loleslav/imagens/bg1_06.jpg"> <td colspan="5" style="color: white;"> <center>Monstros de level 1</center> </td> </tr> <TR BGCOLOR="#8B4513" background="/templates/loleslav/imagens/bg1_06.jpg"> <td style="font-weight: bold; color: white;" width="128px"> <center>Imagem</center> </td>'; if($order == 'name' && !isset($_REQUEST['desc'])) { echo '<TD class="white" width="91px"><B><a href="?subtopic=creatures&order=name&desc=1"><font class="white"><center>Name DESC</center></a></B></TD>'; } else { echo '<TD class="white"><B><a href="?subtopic=creatures&order=name"><font class="white"><center>Name</center></a></B></TD>'; } if($order == 'health' && !isset($_REQUEST['desc'])) { echo '<TD class="white" width="66px"><B><a href="?subtopic=creatures&order=health&desc=1"><font class="white"><center>Health</center><br/>DESC</a></B></TD>'; } else { echo '<TD class="white"><B><a href="?subtopic=creatures&order=health"><font class="white"><center>Health</center></a></B></TD>'; } if($order == 'exp' && !isset($_REQUEST['desc'])) { echo '<TD class="white"><B><a href="?subtopic=creatures&order=exp&desc=1"><font class="white"><center>Experience<br/>DESC</a></B></center></TD>'; } else { echo '<TD class="white"><B><a href="?subtopic=creatures&order=exp"><font class="white"><center>Experience</center></a></B></TD>'; } echo '<td style="font-weight: bold; color: white;" width="150"><center>Loot</center></td>'; $number_of_rows = 0; foreach($monstros as $monstro) { echo '<b><TR BGCOLOR="#F4A460"> <td><center><img src="'. $config['outfit_images_url'] .'?id='.$monstro['looktype'].'.gif"></center></td> <TD><center>'.($monstro['name']).'</center></TD> <TD><center>'.$monstro['health'].'</center></TD> <TD><center>'.$monstro['exp'].'</center></TD> <td><center>'; $loot = json_decode($monstro['loot'], true); if($loot) { $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'] . '.png" class="tooltip" title="' . $tooltip . '" width="32" height="32" border="0" alt=" ' .$name . '" />'; $i++; } echo'</center></td>'; } } echo '</tr></b></table><br/>'; Pronto ele vai listar todos monstros que tiver o level 1 registrado em sua coluna, lembrando que você pode simplesmente duplicar o trecho de código anterior e alterar o valor exigido do level, exemplo alterar de 1 para 30, logo vai exibir todos monstros de level 30. PS: -> O sistema foi testado e não apresentou problemas, porém se vierem a encontrar falhas, favor reportar para que eu possa manter o tópico atualizado/corrigido. -> Eu faço correções no sistema caso esteja errado, mas não faço adaptações pro seu servidor. Caso queira variações do sistema, favor enviar seu pedido no discord da Academia de Programação, ou em meu discord privado: Endless#5410
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.