Jump to content

[Ajuda] - Como dar admin em Mysql?


Recommended Posts

Olá, eu tentei dar admin pelo ACL usando login mysql, mas sem sucesso, como eu posso dar admin para um player com login mysql?

Eu preciso criar um recurso apenas para admin? tipo um painel de administração com comandos? etc...

 

Edited by MatheusCalixto
Link to comment
3 hours ago, OverKILL said:

Como este seu banco de dados? acredito que você tem que fazer uma nova coluna lá apenas para o admin. se for 1 = everyone, se for 2 Mod e assim por diante.

OBS: Posso estar errado.

Eu pensei que fazer isso, tipo criar uma nova coluna com o nome "rank" e se for 5 = admin, 4 = mod etc... mas o que eu queria saber é como posso verificar se tal jogador é admin ou não, como por exemplo, ele entra no servidor e faz uma verificação no banco de dados nessa coluna "rank" caso esteja 0 = jogador mas caso esteja 5 = admin, fazendo essa verificação eu queria saber como vou permitir os comandos, no ALC é liberado o painel pela letra "P", é possível eu liberar essa função usando MySQL? igual adicionar no ACL o serial do jogador?

2 hours ago, DNL291 said:

Não sei se entendi certo, mas você pode armazenar na database o grupo da ACL que o jogador está.

 

Estou usando essa maneira de login, apenas a fase de testes:

Mysql sistema - server.lua:

local MySQL = nil 
  
function Database(host, user, pass, database) 
    MySQL = dbConnect('mysql', ('dbname=%s;host=%s;port=%d'):format(database, host, (tonumber(port) or 3306)), user, pass) 
    if (not MySQL) then 
        outputDebugString('[DB] * Não foi possível conectar ao servidor!') 
        stopResource(getThisResource())
    else
        Query("SET NAMES utf8;")
        setTimer(Query,1000*60*2,0,'SET NAMES utf8;')    
        outputDebugString('[DB] * Conexão relizada com sucesso!')         
    end 
end 
  
function deDatabase() 
    if (MySQL) then 
        destroyElement(MySQL) 
    end 
end 
  
function Query(query, ...) 
    local queryHandle = dbQuery(MySQL, query, ...) 
    local r1, r2, r3 = dbPoll(queryHandle, -1) 
    if (not r1) then 
        outputDebugString(('Query failed: errCode: %d - errMsg: %s'):format(r2, r3)) 
        return false 
    end 
    return r1, r2, r3 
end 
  
function Exec(query, ...) 
    return dbExec(MySQL, query, ...) 
end 
  
addEventHandler('onResourceStart', resourceRoot, 
    function () 
        Database("127.0.0.1", "root", "", "db") 
    end 
) 
  
addEventHandler('onResourceStop', resourceRoot, 
    function () 
        deDatabase() 
    end 
)

 

Login sistema - server.lua

local mysql = exports.mysql --MySQL Resource

function submitlogin(name, serial, player)
    local query, result = mysql:Query('SELECT `serial` FROM `contas` WHERE `serial` = ?', tostring(serial))
    if (query) then
        if (result > 0) then
            --outputChatBox ( 'SERIAL: '..serial, source)
            triggerEvent("onPlayerLogin", getRootElement(), serial, player, source)
            outputDebugString('Jogador fez login!')
        else
            local pass = createRandomPassword (10)
            local query = mysql:Exec('INSERT INTO `contas` (`id`, `name`, `pass`, `serial`) VALUES (NULL, ?, ?, ?)', name, string.sub(md5(pass),1,24), tostring(serial))
            if (query) then
                --outputChatBox ( 'SERIAL: '..serial, source)
                triggerEvent("onPlayerRegister", getRootElement(), serial, player, source)
                outputDebugString('Jogador registrado!')
            end
        end
    end
end
addEvent("submitlogin", true)
addEventHandler("submitlogin", getRootElement(), submitlogin)


 

Edited by MatheusCalixto
Link to comment
2 hours ago, MaligNos said:

Qual vai se a utilidade de abandonar o sistema de contas do MTA e usar esse?

Vou usar os dois, mais gostaria de usar o MySQL caso precise lá na frente de puxar algum dado para o site, como rank, jogadores online, etc.. essas coisas, ou tbm utilizar para o login do server no site.

Link to comment
17 minutes ago, MatheusCalixto said:

Vou usar os dois, mais gostaria de usar o MySQL caso precise lá na frente de puxar algum dado para o site, como rank, jogadores online, etc.. essas coisas, ou tbm utilizar para o login do server no site.

Você pode criar funções lua, e puxar esses dados do server para o site (sem usar outra database) ...

Mas no caso de trabalhar com os dois, só criar uma boa lógica capaz de manter a correspondência dos dados.

Vai ser cadastro pelo site ? Efetue uma call ao server e crie a conta lá também (addAccount)
- Bloqueie ou adapte o /chgmypass se não a senha do server será diferente da do site.
- Bloqueie ou adapte o /register
- Alterou a senha no site ? Atualize no server (setAccountPassword)
...

Dessa forma você poderá manipular as contas normalmente (adicionando na acl, setando dados, …)

Nem precisaria definir no MySQL quem é staff, mas caso queira, pode ser feito no evento login, verificando e atualizando a coluna “Rank”, pois não existe nenhum evento relacionado com mudanças na ACL

Dependendo do caso até acho melhor nem utilizar outra database, dai só trabalha com os dados no MTA e dale calls: server ↔ site

  • Like 1
Link to comment
32 minutes ago, MaligNos said:

Você pode criar funções lua, e puxar esses dados do server para o site (sem usar outra database) ...

Mas no caso de trabalhar com os dois, só criar uma boa lógica capaz de manter a correspondência dos dados.

Vai ser cadastro pelo site ? Efetue uma call ao server e crie a conta lá também (addAccount)
- Bloqueie ou adapte o /chgmypass se não a senha do server será diferente da do site.
- Bloqueie ou adapte o /register
- Alterou a senha no site ? Atualize no server (setAccountPassword)
...

Dessa forma você poderá manipular as contas normalmente (adicionando na acl, setando dados, …)

Nem precisaria definir no MySQL quem é staff, mas caso queira, pode ser feito no evento login, verificando e atualizando a coluna “Rank”, pois não existe nenhum evento relacionado com mudanças na ACL

Dependendo do caso até acho melhor nem utilizar outra database, dai só trabalha com os dados no MTA e dale calls: server ↔ site

Poderia me dar um exemplo de call?

Link to comment
46 minutes ago, MatheusCalixto said:

Obrigado, vou dar uma olhada e vou ver o que posso fazer, vou deixar o MySQL de lado e tentar fazer com SQLite!

Não digo que deva abandonar o MySQL, mas dependendo do caso não existe tanta necessidade...

Fiz um exemplo simples de como efetuar login no site a partir de uma conta existente no server:

<!-- index.html -->
<form action="/login.php" method="post">
	<input type="text" name="login">
	<input type="password" name="senha">
	<input type="submit" value="Logar">
</form>
<?
// login.php
include("mta_sdk.php" );

if ($_SERVER["REQUEST_METHOD"] == "POST") {
	$mtaServer = new mta( "localhost", 22005, "adminlogin", "adminsenha" );
	$resource = $mtaServer->getResource ( "site" );
	$returns = $resource->call ( "login", $_POST["login"], $_POST["senha"] );
	if ($returns[0]) {
		echo "logado!";
	}else{
		echo "falha no login!";
	}
}
?>
-- resource "site"
function login(user,pass)
	local acc = getAccount(user, pass)
	if (acc) then return true
	return false
end
<!-- meta.xml -->
<export function="login" type="server" http="true" />

* Não testado

Edited by MaligNos
  • Confused 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...