Jump to content

Messaggi inviati due volte nella chat!


Recommended Posts

Allora, ho fatto uno script do login/registrazione con database SQLite, ma quando mi da la conferma del login/registrazione mi invia due volte lo stesso messaggio! Per esempio quando mi loggo mi dice:

-Ti sei loggato con successo

-Ti sei loggato con successo

Ma dovrebbe inviarmelo solo una volta. Comunque, ecco la descrizione della resource:

-Database:

Tabella "info": "nome", "password", "seriale", "ip" (lo so la password non è criptata, devo ancora farlo)

-Gestore.lua (lato server):

  
-- Controlla che l'account con un determinato nome esista 
function controllaEsistenzaAccount(nome) 
    -- Codice SQL 
    local db = dbConnect("sqlite", ":mod_libera/utenti.db"); 
    local gQuery = dbQuery(db, "SELECT nome FROM 'info' WHERE nome = '" .. nome .. "';"); 
    local rs, nRighe, msgErr = dbPoll(gQuery, -1); 
     
    if (nRighe == 0) then 
        triggerClientEvent("rispostaControlloAccount", getRootElement(), 0); 
    else 
        triggerClientEvent("rispostaControlloAccount", getRootElement(), 1); 
    end; 
end; 
  
-- Fa uscire il client 
function clientEsce(giocatore) 
    kickPlayer(giocatore, "Non puoi giocare senza loggarti/registrarti"); 
end; 
  
-- Logga il client 
function loggaClient(nome, pass, giocatore) 
    -- Codice SQL 
    local db = dbConnect("sqlite", ":mod_libera/utenti.db"); 
    local gQuery = dbQuery(db, "SELECT password FROM 'info' WHERE nome = '" .. nome .. "';"); 
    local rs, nRighe, msgErr = dbPoll(gQuery, -1); 
     
    if nRighe > 0 then 
        for rs, riga in pairs (rs) do 
            for colonna, valore in pairs (riga) do 
                if (valore == pass) then 
                    -- Login avvenuto con successo 
                    spawnPlayer(giocatore, 1965, -1720, 16); 
                    fadeCamera(giocatore, true); 
                    setCameraTarget(giocatore, giocatore); 
                         
                    outputChatBox("Ti sei loggato con successo", giocatore); 
                else 
                    -- Password errata 
                    outputChatBox("Password errata", giocatore); 
                    triggerClientEvent("rispostaControlloAccount", getRootElement(), 1); 
                end; 
            end; 
        end; 
    end; 
end; 
  
-- Registra il client 
function registraClient(nome, pass, giocatore) 
    -- Codice SQL 
    local db = dbConnect("sqlite", ":mod_libera/utenti.db"); 
    local gQuery = dbQuery(db, "INSERT INTO 'info' VALUES ('" .. nome .. "', '" .. pass .. "', '" .. getPlayerSerial(giocatore) .. "', '" .. getPlayerIP(giocatore) .. "');"); 
    local rs, nRighe, msgErr = dbPoll(gQuery, -1); 
     
    -- Registrazione avvenuta con successo sempre 
    spawnPlayer(giocatore, 1965, -1720, 16); 
    fadeCamera(giocatore, true); 
    setCameraTarget(giocatore, giocatore); 
         
    outputChatBox("Ti sei registrato con successo", giocatore); 
end; 
  
-- Nuovi eventi 
addEvent("controllaAccount", true); 
addEvent("clientVuoleUscire", true); 
addEvent("loginClient", true); 
addEvent("registrazioneClient", true); 
  
-- Gestori eventi 
addEventHandler("controllaAccount", getRootElement(), controllaEsistenzaAccount); 
addEventHandler("clientVuoleUscire", getRootElement(), clientEsce); 
addEventHandler("loginClient", getRootElement(), loggaClient); 
addEventHandler("registrazioneClient", getRootElement(), registraClient); 
  

- GUI.lua (lato client):

  
-- Il client ha inviato i dati per il login 
function clientInviaLogin(bottone, stato) 
    if ((bottone == "left") and (stato == "up")) then 
        local nome = getPlayerName(getLocalPlayer()); 
        local pass = guiGetText(tLPassword); 
  
        if (pass ~= "") then 
            triggerServerEvent("loginClient", getRootElement(), nome, pass, getLocalPlayer()); 
  
            guiSetInputEnabled(false); 
            guiSetVisible(fLogin, false); 
            showCursor(false); 
        else 
            outputChatBox("Perfavore, inserisci una password"); 
        end; 
    end; 
end; 
  
-- Il client ha inviato i dati per la registrazione 
function clientInviaRegistrazione(bottone, stato) 
    if ((bottone == "left") and (stato == "up")) then 
        local nome = getPlayerName(getLocalPlayer()); 
        local pass = guiGetText(tRPassword); 
  
        if (pass ~= "") then 
            triggerServerEvent("registrazioneClient", getRootElement(), nome, pass, getLocalPlayer()); 
  
            guiSetInputEnabled(false); 
            guiSetVisible(fRegistrazione, false); 
            showCursor(false); 
        else 
            outputChatBox("Perfavore, inserisci una password"); 
        end; 
    end; 
end; 
  
-- Il client esce dal server 
function clientInviaUscita() 
    triggerServerEvent("clientVuoleUscire", getRootElement(), getLocalPlayer()); 
end; 
  
-- Crea la finestra per permettere al giocatore di loggarsi e giocare 
function creaFinestraLogin() 
    -- Centra la finestra a seconda della risoluzione dello schermo del giocatore 
    local alt, lun = 200, 120; 
    local xAlt, yLun = guiGetScreenSize(); 
    local centroX, centroY = (xAlt / 2) - (alt / 2), (yLun / 2) - (lun / 2); 
     
    -- Crea la finestra 
    fLogin = guiCreateWindow(centroX, centroY, alt, lun, "Perfavore, loggati", false); 
    guiWindowSetMovable(fLogin, false); 
    guiWindowSetSizable(fLogin, false); 
     
    -- Crea delle labels 
    guiCreateLabel(10, 20, 180, 18, "Inserisci i dati per continuare:", false, fLogin); 
    guiCreateLabel(10, 40, 180, 18, "Password:", false, fLogin); 
     
    -- Crea il campo di testo e setta alcune impostazioni 
    tLPassword = guiCreateEdit(10, 60, 180, 18, "", false, fLogin); 
    guiEditSetMasked(tLPassword, true); 
    guiEditSetMaxLength(tLPassword, 16); 
     
    -- Crea il bottone di login e uscita 
    bLogin = guiCreateButton(10, 90, 85, 28, "Login", false, fLogin); 
    bLEsci = guiCreateButton(105, 90, 85, 28, "Esci", false, fLogin); 
     
    -- Rende la finestra invisibile 
    guiSetVisible(fLogin, false); 
     
    -- Gestore onClick del bottone esci e login 
    addEventHandler("onClientGUIClick", bLogin, clientInviaLogin, false); 
    addEventHandler("onClientGUIClick", bLEsci, clientInviaUscita, false); 
end; 
  
-- Crea la finestra per registrare il giocatore nuovo 
function creaFinestraRegistrazione() 
    -- Centra la finestra a seconda della risoluzione dello schermo del giocatore 
    local alt, lun = 200, 120; 
    local xAlt, yLun = guiGetScreenSize(); 
    local centroX, centroY = (xAlt / 2) - (alt / 2), (yLun / 2) - (lun / 2); 
     
    -- Crea la finestra 
    fRegistrazione = guiCreateWindow(centroX, centroY, alt, lun, "Perfavore, registrati", false); 
    guiWindowSetMovable(fRegistrazione, false); 
    guiWindowSetSizable(fRegistrazione, false); 
     
    -- Crea delle labels 
    guiCreateLabel(10, 20, 180, 18, "Inserisci i dati per continuare:", false, fRegistrazione); 
    guiCreateLabel(10, 40, 180, 18, "Password:", false, fRegistrazione); 
     
    -- Crea il campo di testo e setta alcune impostazioni 
    tRPassword = guiCreateEdit(10, 60, 180, 18, "", false, fRegistrazione); 
    guiEditSetMasked(tRPassword, true); 
    guiEditSetMaxLength(fRegistrazione, 16); 
     
    -- Crea il bottone di registrazione e uscita 
    bRegistrati = guiCreateButton(10, 90, 85, 28, "Registrati", false, fRegistrazione); 
    bREsci = guiCreateButton(105, 90, 85, 28, "Esci", false, fRegistrazione); 
     
    -- Rende la finestra invisibile 
    guiSetVisible(fRegistrazione, false); 
     
    -- Gestore onClick del bottone esci e registrati 
    addEventHandler("onClientGUIClick", bRegistrati, clientInviaRegistrazione, false); 
    addEventHandler("onClientGUIClick", bREsci, clientInviaUscita, false); 
end; 
  
function rispostaControllo(esistenza) 
    if (esistenza == 1) then 
        -- Crea una finestra di login 
        creaFinestraLogin(); 
        guiSetVisible(fLogin, true); 
    else 
        -- Crea una finestra di registrazione 
        creaFinestraRegistrazione(); 
        guiSetVisible(fRegistrazione, true); 
    end; 
     
    -- Abilita l'input dall'utente 
    showCursor(true); 
    guiSetInputEnabled(true); 
end; 
  
-- Nuovi eventi 
addEvent("rispostaControlloAccount", true); 
  
-- Gestore eventi 
addEventHandler("onClientResourceStart", getRootElement(), 
    function () 
        triggerServerEvent("controllaAccount", getRootElement(), getPlayerName(getLocalPlayer())); 
    end 
); 
addEventHandler("rispostaControlloAccount", getRootElement(), rispostaControllo); 
  

Ci sono molti passaggi tra client e server, comunque nel server locale funziona bene, ma quando carico la resource nel mio server hostato, fa quel bug descritto sopra.

Grazie per l'aiuto! :D

Link to comment

Forse (sicuro) il problema sta nel triggerServerEvent.

invece di usare : triggerServerEvent("loginClient", getRootElement(), nome, pass, getLocalPlayer())

usa : triggerServerEvent("loginClient",getLocalPlayer() , nome, pass)

Siccome è un login panel,quindi solo un player sta facendo questa azione,non cè bisogno di usare il getRootElement() su triggerServerEvent

Aggiungo che è inutile mettere quelle minchiate punto e virgola alla fine di ogni stringa :mrgreen: tipo ;

Link to comment

Anyway. . . Perche non hai usato il database default di mtasa? È la stessa cosa,solo che e molto più pratico :/

Ad ogni script che farai dovrai sempre aggiornare il database mentre con il default ti basta:

AddAccount

GetAccountData

SetAccountData

Vabe ogniuno ha le sue idee.

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