Jump to content

Login from SQL? I want ACL too


Monsthers

Recommended Posts

Hello again! I just have 3 script with error! 1 Solved for community <3 and 2 with error! this time is a login system

I have a login with system sql! this login is good but i need what to login too in acl. I need add a function from login player of ACL! this login just login player in groups SQL, But I want the two login in sql and ACL. Help me!

this login use database.db just login player in database.db And i want too acl. For I be admin i need use /login name and password i need only with click in button "Login" login me in database and acl

local blockedUsernames = {["console"] = true,["admin"]= true,["moderator"]= true,["guest"]= true,["none"]= true,["sams"]= true,["[sams]"]= true,["sa agencia de casas"]= true,["sa_agencia_de_casas"] = true} 
  
function playerLogin(username,password,serial) 
    if getElementData(source,"loggedIn") then 
        return triggerClientEvent(source,"SAlogin.errorBox",source,"Ya estas logeado.") 
    end 
    local ip = getPlayerIP(source) 
    local playername = getPlayerName(source) 
    local playerQuery = executeSQLQuery("SELECT id, loggedin FROM user_data WHERE username = ? AND pwsalted = ? LIMIT 1",username,password) 
    if playerQuery and #playerQuery > 0 then 
        if (playerQuery[1].loggedin == 1) then  
            return triggerClientEvent(source,"SAlogin.errorBox",source,"Tu cuenta ya se encuentra en uso.") 
        end 
        local account = setElementData(source,"username",username) 
        local id = setElementData(source,"id",playerQuery[1].id) 
        if account and id then 
            local thetime = getRealTime() 
            local MM = thetime.month+1 
            if MM < 10 then MM = "0"..MM end 
            local DD = thetime.monthday 
            if DD < 10 then DD = "0"..DD end 
            local thedate = (thetime.year+1900).."-"..MM.."-"..DD 
            local ip = getPlayerIP(source) 
            local serial = getPlayerSerial(source) 
            executeSQLQuery("UPDATE user_data SET lastlogin = '"..thedate.."', ip = '"..ip.."', serial = '"..serial.."', loggedin = 1 WHERE username = '"..username.."'") 
            outputChatBox("Usted se a logeado con el nombre de usuario: "..username,source,0,255,255) 
            setElementData(source,"loggedIn",true) 
            triggerEvent("onPlayerLogIn",source,playerQuery[1].id,username) 
            triggerClientEvent(source,"SAlogin.clearLoginGUI",source) 
            outputServerLog(("SAlogin: %s has successfully logged in as %q. (IP: %s Serial: %s)"):format(playername,username,ip,serial)) 
            triggerClientEvent(source,"SAlogin.hideLogin",source,true) 
        else 
            triggerClientEvent(source,"SAlogin.errorBox",source,"Error de login.") 
        end 
    elseif playerQuery then 
        triggerClientEvent(source,"SAlogin.errorBox",source,"Contraseña no especificada.") 
        outputServerLog(("SAlogin: %s failed to log in as %q. Wrong password. (IP: %s Serial: %s)"):format(playername,username,ip,serial)) 
    else 
        triggerClientEvent(source,"SAlogin.errorBox",source,"Ocurrio un error, por favor intentalo de nuevo") 
    end 
end 
addEvent("SAlogin.playerLogin",true) 
addEventHandler("SAlogin.playerLogin",root,playerLogin) 
  
function registerPlayer(username,password,email) 
    if username and password and email then 
        if not blockedUsernames[username] then 
            if not username:match("[%s%p]") then 
                local accountQuery = executeSQLQuery("SELECT id FROM user_data WHERE username=? LIMIT 1",username) 
                if accountQuery and #accountQuery == 0 then 
                    if executeSQLInsert("user_data","'"..username.."','"..password.."','"..email.."',0,0,1000,0","'username','pwsalted','email','wanted','jailed','money', 'loggedin'") then 
                        triggerClientEvent(source,"SAlogin.showLogin",source)        
                        triggerClientEvent(source,"SAlogin.errorBox",source,"Registro de la cuenta terminada. Su nombre de usuario es "..username..". Recuerdalo.")      
                    else 
                        triggerClientEvent(source,"SAlogin.errorBox",source,"Error en registro de cuenta")               
                    end 
                elseif accountQuery and #accountQuery > 0 then 
                    triggerClientEvent(source,"SAlogin.errorBox",source,"Este nombre de cuenta ya esta registrado")              
                else 
                    triggerClientEvent(source,"SAlogin.errorBox",source,"Error en registro de cuenta")       
                end 
            else 
                triggerClientEvent(source,"SAlogin.errorBox",source,"El nombre de usuario que se registra no debe tener ningun espacio o puntuacion")                
            end 
        else 
            triggerClientEvent(source,"SAlogin.errorBox",source,"Esta nombre de usuario esta bloqueado")             
        end 
    end 
end 
addEvent("SAlogin.playerRegisterAccount",true) 
addEventHandler("SAlogin.playerRegisterAccount",root,registerPlayer) 
  
function markAsLogOut() 
    local id = getElementData(source,"id") 
    if id then 
        executeSQLUpdate("user_data","loggedin = 0","id = "..id) 
    end 
end 
addEventHandler("onPlayerQuit", root,markAsLogOut) 
  
addEvent("onPlayerLogOut",true) 
addEventHandler("onPlayerLogOut",root,function() 
    setElementData(source,"loggedIn",false) 
    local username = getElementData(source,"username") 
    local id = getElementData(source,"id") 
    if id then 
        executeSQLUpdate("user_data","loggedin = 0","id = "..id) 
    end 
    if not username then username = "N/A" end 
    local ip = getPlayerIP(source) 
    local serial = getPlayerSerial(source) 
    if ip and serial then 
        outputServerLog("SAlogin: "..getPlayerName(source).." ha cerrado la sesion '"..username.."' (IP: "..ip.." Serial: "..serial..")") 
    end 
    setElementData(source,"username",nil) 
    setElementData(source,"id",nil) 
    triggerClientEvent(source,"SAlogin.showLogin",source) 
    killPed(source) 
    fadeCamera(source,false) 
    setElementInterior(source,0) 
    setElementDimension(source,0) 
end) 
  
executeSQLQuery("CREATE TABLE IF NOT EXISTS user_data (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, pwsalted TEXT, groups TEXT, email TEXT, money INTEGER, wanted TINYINT, jailed BOOLEAN, lastnick TEXT, lastlogin TEXT, loggedin INTEGER, ip TEXT, serial TEXT)") 
  

Link to comment
  • Moderators

You have to login the player with the internal system at the same time using the logIn function.

You will also need to register the player using the addAccount function.

And finally logout the player from the internal account system when he logs off.

Check the modification I made to playerLogin, registerPlayer and the handler of onPlayerLogOut (I added comments):

local blockedUsernames = {["console"] = true,["admin"]= true,["moderator"]= true,["guest"]= true,["none"]= true,["sams"]= true,["[sams]"]= true,["sa agencia de casas"]= true,["sa_agencia_de_casas"] = true} 
  
function playerLogin(username,password,serial) 
    if getElementData(source,"loggedIn") then 
        return triggerClientEvent(source,"SAlogin.errorBox",source,"Ya estas logeado.") 
    end 
    local ip = getPlayerIP(source) 
    local playername = getPlayerName(source) 
    local playerQuery = executeSQLQuery("SELECT id, loggedin FROM user_data WHERE username = ? AND pwsalted = ? LIMIT 1",username,password) 
    if playerQuery and #playerQuery > 0 then 
        if (playerQuery[1].loggedin == 1) then 
            return triggerClientEvent(source,"SAlogin.errorBox",source,"Tu cuenta ya se encuentra en uso.") 
        end 
        local account = setElementData(source,"username",username) 
        local id = setElementData(source,"id",playerQuery[1].id) 
         
        local internalAccount = getAccount( username, password ) -- gets the internal player account 
        local internalLoggin = logIn( source, internalAccount, password ) -- logs in the player using the internal account 
        if account and id and internalLoggin then 
            local thetime = getRealTime() 
            local MM = thetime.month+1 
            if MM < 10 then MM = "0"..MM end 
            local DD = thetime.monthday 
            if DD < 10 then DD = "0"..DD end 
            local thedate = (thetime.year+1900).."-"..MM.."-"..DD 
            local ip = getPlayerIP(source) 
            local serial = getPlayerSerial(source) 
            executeSQLQuery("UPDATE user_data SET lastlogin = '"..thedate.."', ip = '"..ip.."', serial = '"..serial.."', loggedin = 1 WHERE username = '"..username.."'") 
            outputChatBox("Usted se a logeado con el nombre de usuario: "..username,source,0,255,255) 
            setElementData(source,"loggedIn",true) 
            triggerEvent("onPlayerLogIn",source,playerQuery[1].id,username) 
            triggerClientEvent(source,"SAlogin.clearLoginGUI",source) 
            outputServerLog(("SAlogin: %s has successfully logged in as %q. (IP: %s Serial: %s)"):format(playername,username,ip,serial)) 
            triggerClientEvent(source,"SAlogin.hideLogin",source,true) 
        else 
            triggerClientEvent(source,"SAlogin.errorBox",source,"Error de login.") 
        end 
    elseif playerQuery then 
        triggerClientEvent(source,"SAlogin.errorBox",source,"Contraseña no especificada.") 
        outputServerLog(("SAlogin: %s failed to log in as %q. Wrong password. (IP: %s Serial: %s)"):format(playername,username,ip,serial)) 
    else 
        triggerClientEvent(source,"SAlogin.errorBox",source,"Ocurrio un error, por favor intentalo de nuevo") 
    end 
end 
addEvent("SAlogin.playerLogin",true) 
addEventHandler("SAlogin.playerLogin",root,playerLogin) 
  
function registerPlayer(username,password,email) 
    if username and password and email then 
        if not blockedUsernames[username] then 
            if not username:match("[%s%p]") then 
                local accountQuery = executeSQLQuery("SELECT id FROM user_data WHERE username=? LIMIT 1",username) 
                if accountQuery and #accountQuery == 0 then 
                    local sqlAccount = executeSQLInsert("user_data","'"..username.."','"..password.."','"..email.."',0,0,1000,0","'username','pwsalted','email','wanted','jailed','money', 'loggedin'") 
                    local internalAccount = addAccount( username, password ) -- creates the internal player account 
                    if sqlAccount and internalAccount then 
                        triggerClientEvent(source,"SAlogin.showLogin",source)       
                        triggerClientEvent(source,"SAlogin.errorBox",source,"Registro de la cuenta terminada. Su nombre de usuario es "..username..". Recuerdalo.")     
                    else 
                        triggerClientEvent(source,"SAlogin.errorBox",source,"Error en registro de cuenta")              
                    end 
                elseif accountQuery and #accountQuery > 0 then 
                    triggerClientEvent(source,"SAlogin.errorBox",source,"Este nombre de cuenta ya esta registrado")             
                else 
                    triggerClientEvent(source,"SAlogin.errorBox",source,"Error en registro de cuenta")      
                end 
            else 
                triggerClientEvent(source,"SAlogin.errorBox",source,"El nombre de usuario que se registra no debe tener ningun espacio o puntuacion")               
            end 
        else 
            triggerClientEvent(source,"SAlogin.errorBox",source,"Esta nombre de usuario esta bloqueado")            
        end 
    end 
end 
addEvent("SAlogin.playerRegisterAccount",true) 
addEventHandler("SAlogin.playerRegisterAccount",root,registerPlayer) 
  
function markAsLogOut() 
    local id = getElementData(source,"id") 
    if id then 
        executeSQLUpdate("user_data","loggedin = 0","id = "..id) 
    end 
end 
addEventHandler("onPlayerQuit", root,markAsLogOut) 
  
addEvent("onPlayerLogOut",true) 
addEventHandler("onPlayerLogOut",root,function() 
    setElementData(source,"loggedIn",false) 
    local username = getElementData(source,"username") 
    local id = getElementData(source,"id") 
    if id then 
        executeSQLUpdate("user_data","loggedin = 0","id = "..id) 
        logOut( source ) -- logs the player off from its internal account 
    end 
    if not username then username = "N/A" end 
    local ip = getPlayerIP(source) 
    local serial = getPlayerSerial(source) 
    if ip and serial then 
        outputServerLog("SAlogin: "..getPlayerName(source).." ha cerrado la sesion '"..username.."' (IP: "..ip.." Serial: "..serial..")") 
    end 
    setElementData(source,"username",nil) 
    setElementData(source,"id",nil) 
    triggerClientEvent(source,"SAlogin.showLogin",source) 
    killPed(source) 
    fadeCamera(source,false) 
    setElementInterior(source,0) 
    setElementDimension(source,0) 
end) 
  
executeSQLQuery("CREATE TABLE IF NOT EXISTS user_data (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, pwsalted TEXT, groups TEXT, email TEXT, money INTEGER, wanted TINYINT, jailed BOOLEAN, lastnick TEXT, lastlogin TEXT, loggedin INTEGER, ip TEXT, serial TEXT)") 
  

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...