gyrosos14 Posted April 16, 2021 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 );
Moderators Patrick Posted April 16, 2021 Moderators Posted April 16, 2021 Nem létezik olyan functionod, hogy 'attemptRegister'. triggerServerEvent-et akartál használni gondolom, csak elírtad. community profile | map converters | map images | pDownloader | pAttach | model encrypter
gyrosos14 Posted April 17, 2021 Author 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
Moderators Patrick Posted April 17, 2021 Moderators Posted April 17, 2021 Nem adhat vissza true-t ha sehol nem returnolsz true-t, valahol máshol lesz vele valami. community profile | map converters | map images | pDownloader | pAttach | model encrypter
gyrosos14 Posted April 17, 2021 Author 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ó
Moderators Patrick Posted April 17, 2021 Moderators 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. community profile | map converters | map images | pDownloader | pAttach | model encrypter
gyrosos14 Posted April 17, 2021 Author 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.
gyrosos14 Posted April 17, 2021 Author 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
Moderators Patrick Posted April 17, 2021 Moderators 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. community profile | map converters | map images | pDownloader | pAttach | model encrypter
gyrosos14 Posted April 17, 2021 Author 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..
gyrosos14 Posted April 18, 2021 Author 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'
Moderators Patrick Posted April 18, 2021 Moderators 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. community profile | map converters | map images | pDownloader | pAttach | model encrypter
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