Ir para conteúdo

Endless

Membro
  • Registro em

  • Última visita

Tudo que Endless postou

  1. Boa, fico feliz em ter ajudado!!
  2. A segunda tu deixou criptografando ainda, só deixar assim: $config_salt_enabled = fieldExist('salt', 'accounts'); if($account_logged->isLoaded() && encrypt($login_password) == $account_logged->getPassword() && (!isset($t) || $t['attempts'] < 5) ) { setSession('account', $account_logged->getId()); setSession('password', encrypt($login_password)); if(isset($_POST['remember_me'])) setSession('remember_me', true);
  3. Provavelmente é problema no salt. Seu jogo não deve utilizar salt, mas o site está utilizando salt na hora de criptografar sua senha. Para corrigir isso, faça 1 teste. Confira se a conta criada no site, loga no site e se loga no jogo. Se logar somente no site, é o salt que ele está aplicando. O que você precisa fazer para corrigir isso é acessar o arquivo createaccount.php no diretório system/pages/createaccount.php e dar ctrl+f nisto: $config_salt_enabled = $db->hasColumn('accounts', 'salt'); if($config_salt_enabled) { $salt = generateRandomString(10, false, true, true); $password = $salt . $password; } Altere a linha que está escrito $password = $salt . $password para $password = $password; ficando assim: $config_salt_enabled = $db->hasColumn('accounts', 'salt'); if($config_salt_enabled) { $salt = generateRandomString(10, false, true, true); $password = $password; } Basicamente retiramos a inserção de 10 caracteres aleatórios em nossa senha antes de criptografar ela, agora vamos criptografar somente o que foi digitado no campo password. Agora acesse o arquivo login.php no diretório system/login.php, de ctrl+f em $config_salt_enabled = $db->hasColumn('accounts', 'salt');, você vai encontrar isto: $config_salt_enabled = $db->hasColumn('accounts', 'salt'); if($account_logged->isLoaded() && encrypt(($config_salt_enabled ? $account_logged->getCustomField('salt') : '') . $login_password) == $account_logged->getPassword() && (!isset($t) || $t['attempts'] < 5) ) { setSession('account', $account_logged->getId()); setSession('password', encrypt(($config_salt_enabled ? $account_logged->getCustomField('salt') : '') . $login_password)); if($remember_me) { setSession('remember_me', true); } Aqui vamos remover a criptografia do salt para podermos acessar nossa conta sem utilizar o valor do salt na hora de conferir a senha com o banco de dados. Altere o trecho do código acima pelo seguinte código: $config_salt_enabled = $db->hasColumn('accounts', 'salt'); if($account_logged->isLoaded() && encrypt($login_password) == $account_logged->getPassword() && (!isset($t) || $t['attempts'] < 5)) { setSession('account', $account_logged->getId()); setSession('password', encrypt($login_password)); if($remember_me) { setSession('remember_me', true); } } Salve o arquivo, crie 1 nova conta em seu site e tente logar tanto no site quanto no jogo, se o problema era o salt, então ele estará resolvido e você irá conseguir acessar normalmente sua conta tanto no site quanto no jogo.
  4. Basicamente você precisa permitir o teu sistema do Gmail para receber acesso por Sistemas Menos Seguros. Só jogar no google como permitir acesso por app menos seguros para o serviço de emails do Gmail
  5. Qual erro está gerando? De preferência anexe fotos e o erro digitado por gentileza.
  6. Endless postou uma resposta no tópico em Suporte Tibia OTServer
    Eu não conheço o gesior bem, mas acredito que por padrão não exista essa função. O que você pode fazer é 1 script para ler o items.xml e salvar a lista de items, e depois fazer 1 select onde o id do item no BD seja igual ao id que você está chamando, se for, pede pra exibir o nome dele. Para ler 1 arquivo em php utilizando o site do gesior você pode utilizar isto: if(file_exists($config['site']['serverPath'] . '/items/items.xml')) { $items = new DOMDocument(); $items->load($config['site']['serverPath'] . '/items/items.xml'); } Para criar 1 tabela no banco de dados, você pode utilizar este comando: CREATE TABLE IF NOT EXISTS `list_of_items` ( `id` INT(11) NOT NULL, `name` VARCHAR(32) NOT NULL, `description` VARCHAR(32) NOT NULL, `slottype` VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM; Para percorrer o arquivo items.xml em php você pode fazer algo parecido com isto: foreach($items->getElementsByTagName('item') as $item) { $description = 'Without Description'; foreach( $item->getElementsByTagName('attribute') as $attribute) { if ($attribute->getAttribute('key') == 'description'){ $description = $attribute->getAttribute('value'); $desc = 1; } if ($attribute->getAttribute('key') == 'slotType'){ $db->query(" INSERT INTO `list_of_items` (`id`, `name`, `description`, `slottype`) VALUES ('". $item->getAttribute('id') ."', '".$item->getAttribute('name') ."', '". $description ."', '". $attribute->getAttribute('value') ."'); "); } else if ($attribute->getAttribute('key') == 'weaponType'){ $db->query(" INSERT INTO `list_of_items` (`id`, `name`, `description`, `slottype`) VALUES ('". $item->getAttribute('id') ."', '".$item->getAttribute('name') ."', '". $description ."', '". $attribute->getAttribute('value') ."'); "); } } } Depois, você só precisa chamar 1 função para fazer 1 select onde o ID deva ser igual ao ID do item que você deseja exibir o nome. O retorno do select vai retornar o Nome e o Atributo dele, ai só precisa exibir.
  7. Se você quiser adicionar nas opções, acesse o arquivo de menu dentro da pasta templates, templates/teutemplate/menu/main_dynamic.php ou main.php vai depender do arquivo. Pra adicionar só copiar a linha de 1 menu e colar, alterando o nome do local que vai ser chamado. Exemplo: <tr> <td> <center><a href="<?php echo getLink('auction'); ?>">Auction</a></center> </td> </tr>
  8. No banco de dados ele cria uma tabela, no site você acessar colocando /?auction.php
  9. O primeiro erro parece ser erro de permissão, ou de diretório. Confira se possui os arquivos de cache que ele está tentando acessar. O segundo erro indica que a forma de criptografia não foi setada, confira em seu config.lua se está tudo correto.
  10. Muito simples, acesse o arquivo config.php e de ctrl+f em: character_samples, dentro desse vetor (array) você somente precisa adicionar o ID(da vocação) do Sample e o nome dela, seguindo a ordem: ID => 'Name' Vale lembrar que todas linhas devem terminar com vírgula, exceto a última, pois ela é o valor final do array. Algo como isto: Nesse exemplo acima da imagem se você quisesse adicionar 1 nova vocação, você iria colocar vírgula no final da linha 164 que é referente ao Yamato Sample e iria colocar na nova linha o ID da nova vocação => 'Nome do Sample' supondo que a vocação fosse o Goku, então ficaria assim:
  11. Boa, fico feliz que funcionou!! Marca o tópico como resolvido pra quem tiver o mesmo problema achar a resposta já. Sobre site, eu indicaria 2 modelos: Gesior e MyAAC, acho que se você possui pouca experiência, o MyAAC é o que vai lhe cair melhor, visto que ele possui 1 estrutura de fácil leitura, justamente para novatos poderem utilizar sem grandes problemas. Se for optar por MyAAC, tem 1 tutorial ensinando a instalar e já possui o download do próprio MyAAC anexado no tutorial. Vou deixar o link abaixo:
  12. Testa utilizando a seguinte alteração: Vai no diretório system/application/models/guilds_models.php e da ctrl+f em $sql = $this->db->get_where e troca a linha por esta abaixo: $sql = $this->db->get_where('players', array('online' => 0, 'rank_id' => 0, 'level >=' => $level, 'account_id' => $_SESSION['account_id']))->result(); O código da função deve ficar assim: public function getCharactersAllowedToCreateGuild($level = 0) { $characters = array(); $this->db->select('id, name, level'); $sql = $this->db->get_where('players', array('online' => 0, 'rank_id' => 0, 'level >=' => $level, 'account_id' => $_SESSION['account_id']))->result(); foreach($sql as $cmd) { $characters[] = array('id'=>$cmd->id, 'name'=>$cmd->name,'level'=>$cmd->level); } return $characters; } Eu não testei, e muito menos sei se vai funcionar, pois eu nunca trabalhei com Modern, até porque ele é bem antigo, principalmente em questão de sintaxe para funções no php, eu nem recomendaria ficar utilizando ele, se fosse para optar eu optaria por 1 MyAAC da vida ou o próprio Gesior AAC, ambos recebem atualizações constantes, o Znotee volta e meia recebe 1 que outra att. Mas eu acredito que deva funcionar, basicamente coloquei na condição para retornar os players que forem maiores ou iguais ao level necessário e não somente apenas os player com level igual. Testa ae. Aguardo retorno. Abraços!!
  13. Na linha 1988 você pode fazer a seguinte alteração: Antigo: $newchar_sex = $_POST['newcharsex']; Novo: $newchar_sex = 1; Basicamente você estará definindo que por padrão o sexo do personagem será 0. Estou considerando que o valor 1 seja referente ao sexo MALE, e que o valor 0 seja referente ao sexo FEMALE. Se por ventura os valores forem inversos, basta você colocar que é = 0. Acredito que deva resolver o problema.
  14. Você deve colocar o site na pasta htdocs do seu xampp, e então instalar o site. Abre o xampp, liga o apache e o MySQL, vai no teu navegador e em localhost/phpmyadmin coloca seu banco de dados, e depois no site você instala acessando localhost
  15. Confira algumas coisas: 1° Acesse o arquivo config.php localizado na pasta raiz de seu site e vai em $config['levelToCreateGuild'], confirma qual valor está definido lá. 2° Confirma se realmente teus personagens estão deslogado, pois eu baixei o código fonte do Modern AAC, e ao tentar criar 1 guild, ele chama a função getCharactersAllowedToCreateGuild lá no arquivo guilds.php localizado no diretório: system/application/controllers/guilds.php O trecho do código é o seguinte: $data = array(); $data['characters'] = $this->guilds_model->getCharactersAllowedToCreateGuild($config['levelToCreateGuild']); $data['config'] = $config; $this->load->view("create_guild", $data); E ele passa como parâmetro o valor definido na variável levelToCreateGuild Indo atrás da função getCharactersAllowedToCreateGuild encontramos ela declarada no diretório system/application/models/guilds_models.php O trecho de código da função é o seguinte: public function getCharactersAllowedToCreateGuild($level = 0) { $characters = array(); $this->db->select('id, name, level'); $sql = $this->db->get_where('players', array('online' => 0, 'rank_id' => 0, 'level' => $level, 'account_id' => $_SESSION['account_id']))->result(); foreach($sql as $cmd) { $characters[] = array('id'=>$cmd->id, 'name'=>$cmd->name,'level'=>$cmd->level); } return $characters; } A função por padrão defini que o level de criar guild é 0, para caso ela não receba nenhum parâmetro, porém ela está recebendo o level que está definido na variável levelToCreateGuild. Se eu tivesse que chutar, diria para você testar 1° com 1 personagem com o level EXATO necessário para criar e mantenha ele OFFLINE. Mande o resultado desse teste aqui, para que eu possa continuar ajudando. Aguardo retorno, abraços.
  16. Top Menu Bar desenvolvido juntamente com o @Tottin
  17. Manda o código do arquivo create_character.php também
  18. Dos que fazem a criação da guild, não sei de cabeça pois não utilizo Modern. Da uma conferida, abre com vs code a pasta do site e da 1 ctrl+f em all por create guild, ou guild. Procura os arquivos que fazem a criação e envia aqui.
  19. Se tiver como me mandar o código fonte, eu devo conseguir lhe ajudar.
  20. Provavelmente ele está procurando por jogadores que estejam OFFLINE na conta. Se seu personagem estiver online, ele vai desconsiderar. Confira no arquivo de criar guild do seu site.
  21. Se precisar de ajuda, entra lá no discord da academia que deixei o link acima, te ajudo sem problemas.
  22. A resposta é simples. No seu código antigo você tinha a seguinte sequência de código: <?php $consulta = $SQL->query('SELECT `guild` FROM `castelo_guerra` ORDER BY `id` ASC;'); $number_of_rows = 0; foreach($consulta as $guildid){ $id = $guildid['guild']; } $consulta2 = $SQL->query('SELECT `name`, `logo_gfx_name` FROM `guilds` WHERE id = '.$id.';'); ?> No seu código novo você tem a seguinte sequência de código: <?php $guild = $SQL->query('SELECT `guild` FROM `castelo_guerra` WHERE `id`;'); foreach($consulta as $guildid){ $id = $guildid['guild']; } $consulta2 = $SQL->query('SELECT `name`, `logo_gfx_name` FROM `guilds` WHERE id = '.$id.';'); ?> Acontece que, você manteve o foreach na variável $consulta, porém ela não existe mais, quem possui agora o resultado da query é a variável $guild. O certo seria você fazer: <?php $guild = $SQL->query('SELECT `guild` FROM `castelo_guerra` WHERE `id`;'); foreach($guild as $guildid){ $id = $guildid['guild']; } $consulta2 = $SQL->query('SELECT `name`, `logo_gfx_name` FROM `guilds` WHERE id = '.$id.';'); ?> Porém você não está passando 1 condição certa em sua Query, você está dizendo: Selecione a coluna GUILD da tabela CASTELO_GUERRA onde id... E pronto, você não disse qual é a condição pro ID. Como você quer saber a última guild que foi registrado como Dominante do castelo, você deve fazer 1 seleção, ordenando pelo ID em ordem Decrescente, ou seja, o 1° valor que vai retornar é o último a ser inserido, e limitar essa seleção em 1. Logo temos: SELECT `guild` FROM `castelo_guerra` ORDER BY `id` DESC LIMIT 1; Tendo essa seleção sendo realizada, armazene o valor em 1 variável, pode ser a variável que você criou $guild. $guild = $SQL->query('SELECT `guild` FROM `castelo_guerra` ORDER BY `id` DESC LIMIT 1;'); Agora que temos o resultado da seleção salvo em 1 variável, vamos descobrir o nome dessa guild, visto que a tabela castelo_guerra somente armazena o ID da guild vencedora. foreach($guild as $guildid){ $consulta2 = $SQL->query('SELECT `name`, `logo_gfx_name` FROM `guilds` WHERE id = '.$guildid['guild'].';'); } Executamos 1 foreach (não é a melhor maneira, mas deve resolver nosso problema) passando como condição em nosso código SQL o ID da guild dominante que está armazenado na coluna guild na variável $guild, e armazenamos o resultado dessa operação na variável $consulta2. Agora podemos fazer 1 teste e conferir se existe algum valor armazenado na variável $consulta2, se sim, então fazemos um foreach e mostramos a guild dominante no site. if ($consulta2) { foreach($consulta2 as $guildDominante){ echo '<a href="guilds.php?name='.$guildDominante['name'].'"><div class="logo"><img style="max-height:100px;" src="' . logo_exists(guildDominante['name'] . '"></div><br><div class = "name">'.$guildDominante["name"].'</div></a><br>'; } } else { echo '<div class = "name"><br><br><br><p>No Have Owner</p><br></div>'; } PS: Eu desenvolvi esse foreach considerando que a função que você está chamando > logo_exists < funcione da forma que você já estava chamando antes. Como resultado final temos o seguinte código para você colocar em seu layout.php: <div class="sidebar"> <?php $guild = $SQL->query('SELECT `guild` FROM `castelo_guerra` WHERE `id`;'); foreach($guild as $guildid){ $consulta2 = $SQL->query('SELECT `name`, `logo_gfx_name` FROM `guilds` WHERE id = '.$guildid['guild'].';'); } ?> <style type="text/css" media="all"> .name { position: relative; top:40px; text-align: center; font-family: Tahoma, Geneva, sans-serif; font-size: 9.2pt; color: #FFF; font-weight: bold; } .logo { position: relative; top: 50px; text-align: center; } .CastleWarbox { position: relative; margin-top: 160px; margin-bottom: 5px; width: 200px; height: 200px; } </style> <div id="CastleWar" class="CastleWarbox" style="background-image:url(https://i.imgur.com/ASZv7fN.png);"> if ($consulta2) { foreach($consulta2 as $guildDominante){ echo '<a href="guilds.php?name='.$guildDominante['name'].'"><div class="logo"><img style="max-height:100px;" src="' . logo_exists(guildDominante['name'] . '"></div><br><div class = "name">'.$guildDominante["name"].'</div></a><br>'; } } else { echo '<div class = "name"><br><br><br><p>No Have Owner</p><br></div>'; } </div> </div> Testa e ve se vai funcionar. Espero que sim e que resolva seu problema.
  23. Se já está mostrando em seu site o nome da guild vencedora, porém não mostra a imagem da mesma. Confira no log do site o erro que retorna, ele fica localizado em var/logs/apache2/error.log caso utilize nginx o diretório é o mesmo apenas muda apache2 por nginx ficando var/logs/nginx/error.log Ao conferir o log você vai descobrir se o problema está por conta de 1 função que não está retornando o que deveria, ou 1 coluna do banco de dados que não possui um valor correto, ou algo do gênero. Qualquer novidade, poste aqui ou se eventualmente ainda tiver alguma dúvida, fique a vontade para perguntar. Considere também entrar no Discord da Academia de Programação, lá você pode tirar suas dúvidas, ajudar outros membros, trocar conhecimento e até descolar alguns freelance. Link: https://discord.gg/sH54JnMJKt

Informação Importante

Confirmação de Termo