gyrosos14 Posted April 16, 2021 Share Posted April 16, 2021 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
Moderators Patrick Posted April 16, 2021 Moderators Share Posted April 16, 2021 Nem létezik olyan functionod, hogy 'attemptRegister'. triggerServerEvent-et akartál használni gondolom, csak elírtad. Link to comment
gyrosos14 Posted April 17, 2021 Author Share Posted April 17, 2021 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 Patrick Posted April 17, 2021 Moderators Share Posted April 17, 2021 Nem adhat vissza true-t ha sehol nem returnolsz true-t, valahol máshol lesz vele valami. Link to comment
gyrosos14 Posted April 17, 2021 Author Share Posted April 17, 2021 2 hours ago, Patrick said: Nem adhat vissza true-t ha sehol nem returnolsz true-t, valahol máshol lesz vele valami. Ja igen, az if (#bans > 0) then -nél true-ra van állítva, de nem jó Link to comment
Moderators Patrick Posted April 17, 2021 Moderators Share Posted April 17, 2021 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
gyrosos14 Posted April 17, 2021 Author Share Posted April 17, 2021 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
gyrosos14 Posted April 17, 2021 Author Share Posted April 17, 2021 Vagyis a külön scriptet ha elindítóm / újraindítom, kiírja, hogy sikeres csatlakozás. És mind a 2 script el van indítva Link to comment
Moderators Patrick Posted April 17, 2021 Moderators Share Posted April 17, 2021 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
gyrosos14 Posted April 17, 2021 Author Share Posted April 17, 2021 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
gyrosos14 Posted April 18, 2021 Author Share Posted April 18, 2021 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' Link to comment
Moderators Patrick Posted April 18, 2021 Moderators Share Posted April 18, 2021 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now