Image Posted November 24, 2012 Posted November 24, 2012 Here's my code: function onClientLoginRequest(thePlayer, nickname, password) if (nickname) and (nickname~="") then if (password) and (password~="") then local query = mysql:query("SELECT * FROM `Accounts` WHERE `Username` = '" .. mysql:escapeString(nickname) .. "' AND `Password` = '" .. mysql:escapeString(password) .. "'") if (mysql:numRows(query) == 1) then local sourceAccount = getPlayerAccount(thePlayer) if not isGuestAccount(sourceAccount) then exports.box:showBoxS(thePlayer,"error","Már be vagy jelentkezve.") else local account = getAccount(nickname, password) if (account ~= false) then local data = mysql:fetchRow(query) local query = mysql:query("SELECT * FROM `Characters` WHERE `AccountID` = '" .. data[1] .. "'") if (mysql:numRows(query) > 0) then local peds = {} peds[i] = {} local rows = mysql:numRows(query) for i = 0, rows do peds[i][CharacterID] = data[1] peds[i][AccountID] = data[2] peds[i][Name] = data[3] peds[i][Gender] = data[4] peds[i][Age] = data[5] peds[i][Skin] = data[6] peds[i][PosX] = data[7] peds[i][PosY] = data[8] peds[i][PosZ] = data[9] peds[i][Dimension] = data[10] peds[i][Interior] = data[11] peds[i][Health] = data[12] peds[i][Armour] = data[13] end triggerClientEvent(thePlayer, "onSuccessLogin", getRootElement(), peds) logIn(thePlayer, account, password) exports.box:showBoxS(thePlayer,"info","Sikeresen bejelentkeztél.") else exports.box:showBoxS(thePlayer,"error","Nincs egyetlen karakter sem hozzárendelve ehhez az accounthoz. A játék megkezdése előtt mindenképpen szükséged van legalább 1 karakterre, melyet weboldalunkon tudsz elkészíteni. ([url=http://www.sa-stories.net]http://www.sa-stories.net[/url])") end else exports.box:showBoxS(thePlayer,"error","A MySQL adatbázisban és a szerver belső adatbázisában található jelszavak nem egyeznek!\nJavaslat: A probléma megoldásához kérlek vedd fel a kapcsolatot egy adminisztrátorral.") end end else exports.box:showBoxS(thePlayer,"error","Helytelen bejelentkezési adatokat adtál meg.") end else exports.box:showBoxS(thePlayer,"error","Nem adtál meg jelszót.") end else exports.box:showBoxS(thePlayer,"error","Nem adtál meg felhasználónevet.") end mysql:freeResult(query) end addEvent("onClientLoginRequest", true) addEventHandler("onClientLoginRequest", getRootElement(), onClientLoginRequest) And the error message: [2012-11-24 19:17:13] ERROR: account_manager\s_account_functions.lua:37: table index is nil What am i doing wrong?
Castillo Posted November 24, 2012 Posted November 24, 2012 Line 37 in the script you posted is: exports.box:showBoxS(thePlayer,"error","Nincs egyetlen karakter sem hozzárendelve ehhez az accounthoz. A játék megkezdése előtt mindenképpen szükséged van legalább 1 karakterre, melyet weboldalunkon tudsz elkészíteni. ([url=http://www.sa-stories.net]http://www.sa-stories.net[/url])") Is not the right line.
Image Posted November 24, 2012 Author Posted November 24, 2012 local peds = {} E: Here's the full code. mysql = exports.database function createAccount(username, email, password) local query = mysql:query("SELECT * FROM `Accounts` WHERE `Username` = '" .. mysql:escapeString(username) .. "'") if (username) and (username~="") then if (mysql:numRows(query) == 0) or (getAccount(username)) then if (password) and (password~="") then local query = mysql:query("INSERT INTO `Accounts` (Username, Email, Password) VALUES ('" .. mysql:escapeString(username) .. "', '" .. mysql:escapeString(email) .. "', '" .. mysql:escapeString(password) .. "')") addAccount(username, password) exports.box:showBoxS ("info","Sikeresen regisztráltál, most kérlek jelentkezz be.") else exports.box:showBoxS ("error","Nem adtál meg jelszót.") end else exports.box:showBoxS ("error","A megadott felhasználónév foglalt.") end else exports.box:showBoxS ("error","Nem adtál meg felhasználónevet.") end mysql:freeResult(query) end addEvent("createAccount", true) addEventHandler("createAccount", getRootElement(), createAccount) function onClientLoginRequest(thePlayer, nickname, password) if (nickname) and (nickname~="") then if (password) and (password~="") then local query = mysql:query("SELECT * FROM `Accounts` WHERE `Username` = '" .. mysql:escapeString(nickname) .. "' AND `Password` = '" .. mysql:escapeString(password) .. "'") if (mysql:numRows(query) == 1) then local sourceAccount = getPlayerAccount(thePlayer) if not isGuestAccount(sourceAccount) then exports.box:showBoxS(thePlayer,"error","Már be vagy jelentkezve.") else local account = getAccount(nickname, password) if (account ~= false) then local data = mysql:fetchRow(query) local query = mysql:query("SELECT * FROM `Characters` WHERE `AccountID` = '" .. data[1] .. "'") if (mysql:numRows(query) > 0) then local peds = {} peds[i] = {} local rows = mysql:numRows(query) for i = 0, rows do peds[i][CharacterID] = data[1] peds[i][AccountID] = data[2] peds[i][Name] = data[3] peds[i][Gender] = data[4] peds[i][Age] = data[5] peds[i][Skin] = data[6] peds[i][PosX] = data[7] peds[i][PosY] = data[8] peds[i][PosZ] = data[9] peds[i][Dimension] = data[10] peds[i][Interior] = data[11] peds[i][Health] = data[12] peds[i][Armour] = data[13] end triggerClientEvent(thePlayer, "onSuccessLogin", getRootElement(), peds) logIn(thePlayer, account, password) exports.box:showBoxS(thePlayer,"info","Sikeresen bejelentkeztél.") else exports.box:showBoxS(thePlayer,"error","Nincs egyetlen karakter sem hozzárendelve ehhez az accounthoz. A játék megkezdése előtt mindenképpen szükséged van legalább 1 karakterre, melyet weboldalunkon tudsz elkészíteni. ([url=http://www.sa-stories.net]www.sa-stories.net[/url])") end else exports.box:showBoxS(thePlayer,"error","A MySQL adatbázisban és a szerver belső adatbázisában található jelszavak nem egyeznek!\nJavaslat: A probléma megoldásához kérlek vedd fel a kapcsolatot egy adminisztrátorral.") end end else exports.box:showBoxS(thePlayer,"error","Helytelen bejelentkezési adatokat adtál meg.") end else exports.box:showBoxS(thePlayer,"error","Nem adtál meg jelszót.") end else exports.box:showBoxS(thePlayer,"error","Nem adtál meg felhasználónevet.") end mysql:freeResult(query) end addEvent("onClientLoginRequest", true) addEventHandler("onClientLoginRequest", getRootElement(), onClientLoginRequest)
Castillo Posted November 24, 2012 Posted November 24, 2012 peds[i] = {} local rows = mysql:numRows(query) for i = 0, rows do "i" is no where defined, it should go after the for loop, like this: local rows = mysql:numRows(query) for i = 0, rows do peds[i] = {}
Image Posted November 24, 2012 Author Posted November 24, 2012 mysql = exports.database function createAccount(username, email, password) local query = mysql:query("SELECT * FROM `Accounts` WHERE `Username` = '" .. mysql:escapeString(username) .. "'") if (username) and (username~="") then if (mysql:numRows(query) == 0) or (getAccount(username)) then if (password) and (password~="") then local query = mysql:query("INSERT INTO `Accounts` (Username, Email, Password) VALUES ('" .. mysql:escapeString(username) .. "', '" .. mysql:escapeString(email) .. "', '" .. mysql:escapeString(password) .. "')") addAccount(username, password) exports.box:showBoxS ("info","Sikeresen regisztráltál, most kérlek jelentkezz be.") else exports.box:showBoxS ("error","Nem adtál meg jelszót.") end else exports.box:showBoxS ("error","A megadott felhasználónév foglalt.") end else exports.box:showBoxS ("error","Nem adtál meg felhasználónevet.") end mysql:freeResult(query) end addEvent("createAccount", true) addEventHandler("createAccount", getRootElement(), createAccount) function onClientLoginRequest(thePlayer, nickname, password) if (nickname) and (nickname~="") then if (password) and (password~="") then local query = mysql:query("SELECT * FROM `Accounts` WHERE `Username` = '" .. mysql:escapeString(nickname) .. "' AND `Password` = '" .. mysql:escapeString(password) .. "'") if (mysql:numRows(query) == 1) then local sourceAccount = getPlayerAccount(thePlayer) if not isGuestAccount(sourceAccount) then exports.box:showBoxS(thePlayer,"error","Már be vagy jelentkezve.") else local account = getAccount(nickname, password) if (account ~= false) then local data = mysql:fetchRow(query) local query = mysql:query("SELECT * FROM `Characters` WHERE `AccountID` = '" .. data[1] .. "'") if (mysql:numRows(query) > 0) then local peds = {} local rows = mysql:numRows(query) for i = 0, rows do peds[i] = {} peds[i][CharacterID] = data[1] peds[i][AccountID] = data[2] peds[i][Name] = data[3] peds[i][Gender] = data[4] peds[i][Age] = data[5] peds[i][Skin] = data[6] peds[i][PosX] = data[7] peds[i][PosY] = data[8] peds[i][PosZ] = data[9] peds[i][Dimension] = data[10] peds[i][Interior] = data[11] peds[i][Health] = data[12] peds[i][Armour] = data[13] end triggerClientEvent(thePlayer, "onSuccessLogin", getRootElement(), peds) logIn(thePlayer, account, password) exports.box:showBoxS(thePlayer,"info","Sikeresen bejelentkeztél.") else exports.box:showBoxS(thePlayer,"error","Nincs egyetlen karakter sem hozzárendelve ehhez az accounthoz. A játék megkezdése előtt mindenképpen szükséged van legalább 1 karakterre, melyet weboldalunkon tudsz elkészíteni. ([url=http://www.sa-stories.net]www.sa-stories.net[/url])") end else exports.box:showBoxS(thePlayer,"error","A MySQL adatbázisban és a szerver belső adatbázisában található jelszavak nem egyeznek!\nJavaslat: A probléma megoldásához kérlek vedd fel a kapcsolatot egy adminisztrátorral.") end end else exports.box:showBoxS(thePlayer,"error","Helytelen bejelentkezési adatokat adtál meg.") end else exports.box:showBoxS(thePlayer,"error","Nem adtál meg jelszót.") end else exports.box:showBoxS(thePlayer,"error","Nem adtál meg felhasználónevet.") end mysql:freeResult(query) end addEvent("onClientLoginRequest", true) addEventHandler("onClientLoginRequest", getRootElement(), onClientLoginRequest)
Castillo Posted November 24, 2012 Posted November 24, 2012 The error is still the same and in this line? peds[i] = {}
Image Posted November 24, 2012 Author Posted November 24, 2012 Error is still the same. But the line, where the error is, now 41. Line 41: peds[i][CharacterID] = data[1] P.S.: Sorry for my bad english. (Sometimes i use google translator)
Castillo Posted November 24, 2012 Posted November 24, 2012 Try this and see what it outputs to chat: mysql = exports.database function createAccount(username, email, password) local query = mysql:query("SELECT * FROM `Accounts` WHERE `Username` = '" .. mysql:escapeString(username) .. "'") if (username) and (username~="") then if (mysql:numRows(query) == 0) or (getAccount(username)) then if (password) and (password~="") then local query = mysql:query("INSERT INTO `Accounts` (Username, Email, Password) VALUES ('" .. mysql:escapeString(username) .. "', '" .. mysql:escapeString(email) .. "', '" .. mysql:escapeString(password) .. "')") addAccount(username, password) exports.box:showBoxS ("info","Sikeresen regisztráltál, most kérlek jelentkezz be.") else exports.box:showBoxS ("error","Nem adtál meg jelszót.") end else exports.box:showBoxS ("error","A megadott felhasználónév foglalt.") end else exports.box:showBoxS ("error","Nem adtál meg felhasználónevet.") end mysql:freeResult(query) end addEvent("createAccount", true) addEventHandler("createAccount", getRootElement(), createAccount) function onClientLoginRequest(thePlayer, nickname, password) if (nickname) and (nickname~="") then if (password) and (password~="") then local query = mysql:query("SELECT * FROM `Accounts` WHERE `Username` = '" .. mysql:escapeString(nickname) .. "' AND `Password` = '" .. mysql:escapeString(password) .. "'") if (mysql:numRows(query) == 1) then local sourceAccount = getPlayerAccount(thePlayer) if not isGuestAccount(sourceAccount) then exports.box:showBoxS(thePlayer,"error","Már be vagy jelentkezve.") else local account = getAccount(nickname, password) if (account ~= false) then local data = mysql:fetchRow(query) local query = mysql:query("SELECT * FROM `Characters` WHERE `AccountID` = '" .. data[1] .. "'") if (mysql:numRows(query) > 0) then local peds = {} local rows = mysql:numRows(query) for i = 0, rows do peds[i] = {} outputChatBox ( "Index: ".. i ..": ".. tostring ( peds[i] ) ) peds[i][CharacterID] = data[1] peds[i][AccountID] = data[2] peds[i][Name] = data[3] peds[i][Gender] = data[4] peds[i][Age] = data[5] peds[i][Skin] = data[6] peds[i][PosX] = data[7] peds[i][PosY] = data[8] peds[i][PosZ] = data[9] peds[i][Dimension] = data[10] peds[i][Interior] = data[11] peds[i][Health] = data[12] peds[i][Armour] = data[13] end triggerClientEvent(thePlayer, "onSuccessLogin", getRootElement(), peds) logIn(thePlayer, account, password) exports.box:showBoxS(thePlayer,"info","Sikeresen bejelentkeztél.") else exports.box:showBoxS(thePlayer,"error","Nincs egyetlen karakter sem hozzárendelve ehhez az accounthoz. A játék megkezdése elott mindenképpen szükséged van legalább 1 karakterre, melyet weboldalunkon tudsz elkészíteni. ([url=http://www.sa-stories.net]www.sa-stories.net[/url])") end else exports.box:showBoxS(thePlayer,"error","A MySQL adatbázisban és a szerver belso adatbázisában található jelszavak nem egyeznek!\nJavaslat: A probléma megoldásához kérlek vedd fel a kapcsolatot egy adminisztrátorral.") end end else exports.box:showBoxS(thePlayer,"error","Helytelen bejelentkezési adatokat adtál meg.") end else exports.box:showBoxS(thePlayer,"error","Nem adtál meg jelszót.") end else exports.box:showBoxS(thePlayer,"error","Nem adtál meg felhasználónevet.") end mysql:freeResult(query) end addEvent("onClientLoginRequest", true) addEventHandler("onClientLoginRequest", getRootElement(), onClientLoginRequest)
Image Posted November 24, 2012 Author Posted November 24, 2012 1. time: Index: 0: table: 02933A48 2 time: Index: 0: table: 0282DEE0 3. time: Index: 0: table: 0290A318 4. time: Index: 0: table: 02838190 5. time: Index: 0: table: 02837120 6. time Index: 0: table: 0283CA38 It makes a new table every time when it executes.
Castillo Posted November 24, 2012 Posted November 24, 2012 That's good, it has to do that. But if that works fine, then why does it say the error you said it does?
Image Posted November 24, 2012 Author Posted November 24, 2012 That's good, it has to do that.But if that works fine, then why does it say the error you said it does? I don't know. E: Can you tell me a better way to store the mysql data in dynamic arrays? I have an account, and x characters on the database. I want to link the characters to the account, and load all of them in the same time. e.g. charData[char1]["data1"] charData[char1]["data2"] ... charData[char2]["data5"] ... charData[char6]["data1"] ... charData[char x]["data x"] Eh, my english sucks.
Castillo Posted November 24, 2012 Posted November 24, 2012 Are you sure it is the same error as before?
Image Posted November 24, 2012 Author Posted November 24, 2012 Are you sure it is the same error as before? Yes, i'm sure.
Castillo Posted November 24, 2012 Posted November 24, 2012 peds[i][CharacterID] = data[1] peds[i][AccountID] = data[2] peds[i][Name] = data[3] peds[i][Gender] = data[4] peds[i][Age] = data[5] peds[i][Skin] = data[6] peds[i][PosX] = data[7] peds[i][PosY] = data[8] peds[i][PosZ] = data[9] peds[i][Dimension] = data[10] peds[i][Interior] = data[11] peds[i][Health] = data[12] peds[i][Armour] = data[13] That's the problem, I think you wanted to do this: peds[i]["CharacterID"] = data[1] peds[i]["AccountID"] = data[2] peds[i]["Name"] = data[3] peds[i]["Gender"] = data[4] peds[i]["Age"] = data[5] peds[i]["Skin"] = data[6] peds[i]["PosX"] = data[7] peds[i]["PosY"] = data[8] peds[i]["PosZ"] = data[9] peds[i]["Dimension"] = data[10] peds[i]["Interior"] = data[11] peds[i]["Health"] = data[12] peds[i]["Armour"] = data[13]
Image Posted November 24, 2012 Author Posted November 24, 2012 [2012-11-24 22:18:14] ERROR: Client triggered serverside event onClientLoginRequest, but event is not added serverside mysql = exports.database function createAccount(username, email, password) local query = mysql:query("SELECT * FROM `Accounts` WHERE `Username` = '" .. mysql:escapeString(username) .. "'") if (username) and (username~="") then if (mysql:numRows(query) == 0) or (getAccount(username)) then if (password) and (password~="") then local query = mysql:query("INSERT INTO `Accounts` (Username, Email, Password) VALUES ('" .. mysql:escapeString(username) .. "', '" .. mysql:escapeString(email) .. "', '" .. mysql:escapeString(password) .. "')") addAccount(username, password) exports.box:showBoxS ("info","Sikeresen regisztráltál, most kérlek jelentkezz be.") else exports.box:showBoxS ("error","Nem adtál meg jelszót.") end else exports.box:showBoxS ("error","A megadott felhasználónév foglalt.") end else exports.box:showBoxS ("error","Nem adtál meg felhasználónevet.") end mysql:freeResult(query) end addEvent("createAccount", true) addEventHandler("createAccount", getRootElement(), createAccount) function onClientLoginRequest(thePlayer, nickname, password) if (nickname) and (nickname~="") then if (password) and (password~="") then local query = mysql:query("SELECT * FROM `Accounts` WHERE `Username` = '" .. mysql:escapeString(nickname) .. "' AND `Password` = '" .. mysql:escapeString(password) .. "'") if (mysql:numRows(query) == 1) then local sourceAccount = getPlayerAccount(thePlayer) if not isGuestAccount(sourceAccount) then exports.box:showBoxS(thePlayer,"error","Már be vagy jelentkezve.") else local account = getAccount(nickname, password) if (account ~= false) then local data = mysql:fetchRow(query) local query = mysql:query("SELECT * FROM `Characters` WHERE `AccountID` = '" .. data[1] .. "'") if (mysql:numRows(query) > 0) then local peds = {} local rows = mysql:numRows(query) for i = 0, rows do peds[i] = {} outputChatBox ( "Index: ".. i ..": ".. tostring ( peds[i] ) ) peds[i]["CharacterID"] = data[1] peds[i]["AccountID"] = data[2] peds[i]["Name"] = data[3] peds[i]["Gender"] = data[4] peds[i]["Age"] = data[5] peds[i]["Skin"] = data[6] peds[i]["PosX"] = data[7] peds[i]["PosY"] = data[8] peds[i]["PosZ"] = data[9] peds[i]["Dimension"] = data[10] peds[i]["Interior"] = data[11] peds[i]["Health"] = data[12] peds[i]["Armour"] = data[13] triggerClientEvent(thePlayer, "onSuccessLogin", getRootElement(), peds) logIn(thePlayer, account, password) exports.box:showBoxS(thePlayer,"info","Sikeresen bejelentkeztél.") else exports.box:showBoxS(thePlayer,"error","Nincs egyetlen karakter sem hozzárendelve ehhez az accounthoz. A játék megkezdése elott mindenképpen szükséged van legalább 1 karakterre, melyet weboldalunkon tudsz elkészíteni. ([url=http://www.sa-stories.net]http://www.sa-stories.net[/url])") end else exports.box:showBoxS(thePlayer,"error","A MySQL adatbázisban és a szerver belso adatbázisában található jelszavak nem egyeznek!\nJavaslat: A probléma megoldásához kérlek vedd fel a kapcsolatot egy adminisztrátorral.") end end else exports.box:showBoxS(thePlayer,"error","Helytelen bejelentkezési adatokat adtál meg.") end else exports.box:showBoxS(thePlayer,"error","Nem adtál meg jelszót.") end else exports.box:showBoxS(thePlayer,"error","Nem adtál meg felhasználónevet.") end mysql:freeResult(query) end addEvent("onClientLoginRequest", true) addEventHandler("onClientLoginRequest", getRootElement(), onClientLoginRequest) Line 72-73: addEvent("onClientLoginRequest", true) addEventHandler("onClientLoginRequest", getRootElement(), onClientLoginRequest)
Castillo Posted November 24, 2012 Posted November 24, 2012 You removed the 'end' before: triggerClientEvent(thePlayer, "onSuccessLogin", getRootElement(), peds)
Image Posted November 24, 2012 Author Posted November 24, 2012 My mistake. It works. Thank you very much.
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