Jump to content

attempt to call global 'attemptRegister'-nil value


Recommended Posts

Nem szeretném az egész scriptet iderakni, ezért csak azt a részt, ahol írja a debugscript, hogy nem jó. A hibaüzenet pedig a cím, vagyis: attempt to call global 'attemptRegister' (a nil value)

-- Kliens

function execRegister()
    
    local empty = false;
    for i, data in ipairs(accountData[2]) do
        if (data == "") then
            empty = true;
            break;
        end
    end

        if not (empty) then
            if (string.len(accountData[2][1]) >= 3) then
                if (string.len(accountData[2][2]) >= 3) then
                        if (string.len(accountData[2][3]) >= 7) then
                            attemptRegister("attemptRegister", resourceRoot, accountData[2][1], hash("sha512", accountData[2][2]), accountData[2][3]);
                        else
                            serverResponse("shortEmail");
                        end
                    end
                else
                    serverResponse("shortPassword");
                end
            else
                serverResponse("shortUsername");
            end
        if (empty) then
        serverResponse("emptyFields");
    end
end


-- Szerver

addEvent("attemptRegister", true);
addEventHandler("attemptRegister", resourceRoot,
    function (un, pass, email)
        if not (isPlayerBanned) then
            local qh = dbQuery(con, "SELECT * FROM accounts WHERE username=? OR email=?", un, email);
            local user = dbPoll(qh, 500);
            if (user) then
                if not (#user > 0) then
                    dbExec(con, "INSERT INTO accounts SET username=?, password=?, email=?", un, pass, email);
                    triggerClientEvent(client, "accountServerResponse", resourceRoot, "registerSucces");
                else
                    triggerClientEvent(client, "accountServerResponse", resourceRoot, "existingAccount");
                end
            else
                triggerClientEvent(client, "accountServerResponse", resourceRoot, "unknownError");
            end
        else
            triggerClientEvent(client, "accountServerResponse", resourceRoot, "playerBanned");
        end
    end
);

Link to comment
19 hours ago, Patrick said:

Nem létezik olyan functionod, hogy 'attemptRegister'. triggerServerEvent-et akartál használni gondolom, csak elírtad.

Igen-igen, az megoldódott. Most viszont olyan hiba van, hogy a mysql lekérdezésnél a bans táblából lekéri, hogy a localPlayer serial-ja benne van-e, és mindig true-t ad vissza. Pedig nincs benne semmi

Az a rész pedig így néz ki :

function isPlayerBanned(player)
	if (player) then -- Ha a player változó nem FALSE vagy NIL
		local serial = getPlayerSerial(player); -- A serial helyi változóba lekérdezzük a játékos serial kódját
		local qh = dbQuery(con, "SELECT * FROM bans WHERE serial=? AND expiration > CURRENT_TIME()", serial); -- A qh (mint Query Handle) változóba beküldjük az adatbázisnak a banok kiválasztását. Ez mindent kiválaszta a ban táblából, ahol egyezik a serial és a lejárati dátum valahol a jövőben lesz. 
		local bans = dbPoll(qh, 500); -- A bans változóba mentve feldolgozzuk és kicsomagoljuk a qh változóban található adatbázis lekérdezés eredményét
		if (bans) then -- Ha a bans nem FALSE vagy NIL
			if (#bans > 0) then -- Ha a bans tábla sorainak száma nagyobb mint 0, (tehát van olyan ban erre a serialra ami a jövőben fog lejárni)
				return false;
			else -- Egyébként
				return false; -- A FALSE érték visszaadása
			end
		else -- Ha a bans FALSE vagy NIL
			return false; -- A FALSE érték visszaadása
		end
	else -- Ha a player változó FALSE vagy NIL
		return false; -- A FALSE érték visszaadása
	end
end

 

Link to comment
  • Moderators
2 hours ago, gyrosos14 said:

Ja igen, az if (#bans > 0) then -nél true-ra van állítva, de nem jó

 

Akkor meg rossz a query, mindig ad vissza sorokat. iprint-el írasd ki a bans táblát és nézd meg mi van benne, vagy phpMyAdmin-ban futtasd le kézzel a SELECT-et.
Lehetséges, hogy nem jó az expiraton és olyat is visszaad amit nem kéne.

Link to comment
31 minutes ago, Patrick said:

Akkor meg rossz a query, mindig ad vissza sorokat. iprint-el írasd ki a bans táblát és nézd meg mi van benne, vagy phpMyAdmin-ban futtasd le kézzel a SELECT-et.
Lehetséges, hogy nem jó az expiraton és olyat is visszaad amit nem kéne.

Most nem ad vissza semmit. Debugscriptbe a következőt írja ki : WARNING: vg_accounts\server.lua:60: Bad argument @ 'dbQuery' [Exp]ected db-connection at argument 1, got nil]
WARNING: vg_accounts\server.lua:61: Bad argument @ 'dbPoll' [Expected db-query at argument 1, got boolean]

Gondolom itt a mysql-hez kötéssel lesz baj nem?

(Megpróbáltam hozzádani egy külön változóhoz, hátha, de nem jó ígyse)

local con = exports.mysql:connectMysql();
local playerBanned;

function checkPlayerBan(player)
	local serial = getPlayerSerial(player);
	if (player) then
		local qh = dbQuery(con, "SELECT * FROM bans WHERE serial=? AND expiration > CURRENT_TIME()", serial);
		local bans = dbPoll(qh, 500);
		if (bans) then
			if (#bans > 0) then
				playerBanned = true;
			else
				playerBanned = false;
			end
		else
			playerBanned = false;
		end
	else
		playerBanned = false;
	end
end

addEvent("attemptLogin", true);
addEventHandler("attemptLogin", resourceRoot,
	function (un, pass)
		local banSql = dbQuery(con, "SELECT * FROM bans WHERE serial=? AND expiration > CURRENT_TIME()", serial);
		iprint(banSql);
		if not (playerBanned == false) then
			local qh = dbQuery(con, "SELECT * FROM accounts WHERE username=? password=?", un, pass);
			local user = dbPoll(qh, 500);
			if (user) then
				if (#user > 0) then
					if (user[1]["password"] == pass) then
						setElementData(client, "acc:id", user[1]["id"]);
						triggerClientEvent(client, "accountServerResponse", resourceRoot, "loginSucces");
						spawnPlayer(client, 0, 0, 4, 29);
						setCameraTarget(client, client);
						fadeCamera(client, true);
					else
						triggerClientEvent(client, "accountServerResponse", resourceRoot, "wrongPass");
					end
				else
					triggerClientEvent(client, "accountServerResponse", resourceRoot, "noAccount");
				end
			else
				triggerClientEvent(client, "accountServerResponse", resourceRoot, "unknownError");
			end
		else
			triggerClientEvent(client, "accountServerResponse", resourceRoot, "playerBanned");
		end

	end
);

addEvent("attemptRegister", true);
addEventHandler("attemptRegister", resourceRoot,
	function (un, pass, email)
		iprint(banSql);
		if not (playerBanned == false) then
			local qh = dbQuery(con, "SELECT * FROM accounts WHERE username=? OR email=?", un, email);
			local user = dbPoll(qh, 500);
			if (user) then
				if not (#user > 0) then
					dbExec(con, "INSERT INTO accounts SET username=?, password=?, email=?", un, pass, email);
					triggerClientEvent(client, "accountServerResponse", resourceRoot, "registerSucces");
				else
					triggerClientEvent(client, "accountServerResponse", resourceRoot, "existingAccount");
				end
			else
				triggerClientEvent(client, "accountServerResponse", resourceRoot, "unknownError");
			end
		else
			triggerClientEvent(client, "accountServerResponse", resourceRoot, "playerBanned");
		end
	end
);

 

Igen, a csatlakozással van valami, beleírtam egy if-et, miszerint ha a con true akkor debugstringként kiírja, és sikertelent írt.

Ezek szerint akkor valamit a dbQuery-ben basztam el nem? Mert ugye külön script-re van a connectMysql írva, és ki is írja a chat-re, hogy sikeres csatlakozás.

Link to comment
  • Moderators
1 hour ago, gyrosos14 said:

Gondolom itt a mysql-hez kötéssel lesz baj nem?

Igen, ha külön resourceban van a csatlakozás, akkor azt a resource-t ("mysql") nem szabad újraindítani és elsőként kell elindítani.

 

Link to comment
17 minutes ago, Patrick said:

Igen, ha külön resourceban van a csatlakozás, akkor azt a resource-t ("mysql") nem szabad újraindítani és elsőként kell elindítani.

 

És ha úgysem jó, akkor mi lehet a probléma?

Just now, gyrosos14 said:

És ha úgysem jó, akkor mi lehet a probléma?

Még nem teszteltem, csak holnap fogom, azért kérdezem..

Link to comment
  • Moderators
33 minutes ago, gyrosos14 said:

Azon túl jutottam (végre). Most viszont a debugscript a következőt írta ki: WARNING: vg_accounts\server.lua:72: dbExec failed; (1062) Duplicate entry '0' for key 'PRIMARY'

Olyan sort próbálsz meg insertelni, aminek az elsődleges kulcsa már létezik egy másik sornál. Nem lehet két sorod azonos elsődleges kulcsal.

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