Maurize Posted August 25, 2011 Posted August 25, 2011 local Spieler = getRootElement() addEventHandler( "onResourceStart", Spieler, function() executeSQLCreateTable( "playerData", "name STRING, x FLOAT, y FLOAT, z FLOAT, r FLOAT, s INT" ) end ) addEventHandler( "onPlayerQuit", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local x, y, z = getElementPosition( source ) local rx, ry, rz = getElementRotation( source ) local s = getElementModel( source ) local playerTable = executeSQLUpdate( "playerData", "name = '" .. getAccountName( getPlayerAccount( source ) ) .. "', x = '" .. x .. "', y = '" .. y .. "', z = '" .. z .. "', r = '" .. rz .. "', s = '" .. s .. "'" ) end ) addEventHandler( "onPlayerLogin", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local playerTable = executeSQLSelect ( "playerData", "name = '" .. Account .. "'", "x", "y", "z", "r", "s" ) spawnPlayer( source, playerTable[3], playerTable[4], playerTable[5], playerTable[6], playerTable[7] ) end ) Hmm only shows that there is a bad argument at spawnPlayer.. And btw someone can tell me how to check if the player is new so i can spawn him somewhere without Selectings his SQL Data which can´t be found cause he don´t got any. // If I write my variable "Spieler" without "local", can it be used in every script? so i dont have to put it in to every head of every script ?
JR10 Posted August 25, 2011 Posted August 25, 2011 addEventHandler( "onPlayerLogin", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local playerTable = executeSQLSelect ( "playerData", "name = '" .. Account .. "'", "x", "y", "z", "r", "s" ) if playerTable then spawnPlayer( source, playerTable[1][3], playerTable[1][4], playerTable[1][5], playerTable[1][6], playerTable[1][7] ) else -- the player is new end ) Yes, in every server sided script.
Maurize Posted August 26, 2011 Author Posted August 26, 2011 addEventHandler( "onPlayerLogin", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local playerTable = executeSQLSelect ( "playerData", "name = '" .. Account .. "'", "x", "y", "z", "r", "s" ) if playerTable then spawnPlayer( source, playerTable[1][3], playerTable[1][4], playerTable[1][5], playerTable[1][6], playerTable[1][7] ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) else spawnPlayer( source, 100, 100, 20, 90, 285 ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) end end ) error at > spawnPlayer( source, playerTable[1][3], playerTable[1][4], playerTable[1][5], playerTable[1][6], playerTable[1][7] ) attempt to index field ? < a nil value > Maybe an idea whats wrong? BTW: There isn´t any data from the player in the database registry.db doesnt matter how often I join and quit the game ...
JR10 Posted August 26, 2011 Posted August 26, 2011 That's because you always update, and you don't insert if no rows was found. addEventHandler( "onPlayerLogin", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local playerTable = executeSQLSelect ( "playerData", "name = '" .. Account .. "'", "x", "y", "z", "r", "s" ) if playerTable and #playerTable == 1 then spawnPlayer( source, playerTable[1][3], playerTable[1][4], playerTable[1][5], playerTable[1][6], playerTable[1][7] ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) else spawnPlayer( source, 100, 100, 20, 90, 285 ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) end end ) On quit: select where name = the account name, and check if it exists and #playerTable == 1 , if so update, else insert.
Maurize Posted August 26, 2011 Author Posted August 26, 2011 something like this? : addEventHandler( "onPlayerQuit", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local x, y, z = getElementPosition( source ) local rx, ry, rz = getElementRotation( source ) local s = getElementModel( source ) local playerTable = executeSQLSelect ( "playerData", "name = '" .. Account .. "'", "x", "y", "z", "r", "s" ) if playerTable and #playerTable == 1 then local playerTable = executeSQLUpdate( "playerData", "name = '" .. Account .. "', x = '" .. x .. "', y = '" .. y .. "', z = '" .. z .. "', r = '" .. rz .. "', s = '" .. s .. "'" ) else local playerTable = executeSQLInsert( "playerData", "name = '" .. Account .. "', x = '" .. x .. "', y = '" .. y .. "', z = '" .. z .. "', r = '" .. rz .. "', s = '" .. s .. "'" ) end end )
JR10 Posted August 26, 2011 Posted August 26, 2011 Yes, but, insert syntax is wrong, should be values only, without the column. local playerTable = executeSQLInsert( "playerData", "'"..Account .. "','" .. x .. "','" .. y .. "','" .. z .. "','" .. rz .. "','" .. s .. "'" )
Maurize Posted August 26, 2011 Author Posted August 26, 2011 local Spieler = getRootElement() addEventHandler( "onResourceStart", Spieler, function() executeSQLCreateTable( "playerData", "name STRING, x FLOAT, y FLOAT, z FLOAT, r FLOAT, s INT" ) end ) addEventHandler( "onPlayerQuit", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local playerTable = executeSQLSelect ( "playerData", "name = '" .. Account .. "'", "x", "y", "z", "r", "s" ) if playerTable and #playerTable == 1 then local x, y, z = getElementPosition( source ) local rx, ry, rz = getElementRotation( source ) local s = getElementModel( source ) local playerTable = executeSQLUpdate( "playerData", "name = '" .. Account .. "', x = '" .. x .. "', y = '" .. y .. "', z = '" .. z .. "', r = '" .. rz .. "', s = '" .. s .. "'" ) else local x, y, z = getElementPosition( source ) local rx, ry, rz = getElementRotation( source ) local s = getElementModel( source ) local playerTable = executeSQLInsert( "playerData", "'"..Account .. "','" .. x .. "','" .. y .. "','" .. z .. "','" .. rz .. "','" .. s .. "'" ) end end ) addEventHandler( "onPlayerLogin", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local playerTable = executeSQLSelect ( "playerData", "name = '" .. Account .. "'", "x", "y", "z", "r", "s" ) if playerTable and #playerTable == 1 then spawnPlayer( source, playerTable[1][3], playerTable[1][4], playerTable[1][5], playerTable[1][6], playerTable[1][7] ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) else spawnPlayer( source, 1000, 1000, 50, 90, 285 ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) end end ) Nice i can find my data in database. Now only 1 problem: Every time i login, i spawn at x = 0, y = 0, z = 0 ... And he tells me: bad argument at spawnplayer. soo any idea?
JR10 Posted August 26, 2011 Posted August 26, 2011 addEventHandler( "onPlayerLogin", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local playerTable = executeSQLSelect ( "playerData", "*", "name = '" .. Account .. "'") if playerTable and #playerTable == 1 then spawnPlayer( source, playerTable[1][2], playerTable[1][3], playerTable[1][4], playerTable[1][5], playerTable[1][6] ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) else spawnPlayer( source, 1000, 1000, 50, 90, 285 ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) end end )
Maurize Posted August 26, 2011 Author Posted August 26, 2011 you forgot about one of " and btw again error : spawnPlayer addEventHandler( "onPlayerQuit", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local x, y, z = getElementPosition( source ) local rx, ry, rz = getElementRotation( source ) local s = getElementModel( source ) local playerTable = executeSQLSelect ( "playerData", "*", "name = '" .. Account .. "'" ) if playerTable and #playerTable == 1 then local playerTable = executeSQLUpdate( "playerData", "name = '" .. Account .. "', x = '" .. x .. "', y = '" .. y .. "', z = '" .. z .. "', r = '" .. rz .. "', s = '" .. s .. "'" ) else local playerTable = executeSQLInsert( "playerData", "'"..Account .. "','" .. x .. "','" .. y .. "','" .. z .. "','" .. rz .. "','" .. s .. "'" ) end end ) addEventHandler( "onPlayerLogin", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local playerTable = executeSQLSelect ( "playerData", "*", "name = '" .. Account .. "'") if playerTable and #playerTable == 1 then spawnPlayer( source, playerTable[1][2], playerTable[1][3], playerTable[1][4], playerTable[1][5], playerTable[1][6] ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) else spawnPlayer( source, 1000, 1000, 50, 90, 285 ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) end end )
JR10 Posted August 26, 2011 Posted August 26, 2011 Where? I didn't forget anything. Try: spawnPlayer( source, playerTable[1]["x"], playerTable[1]["y"], playerTable[1]["z"], playerTable[1]["r"], playerTable[1]["s"] )
Maurize Posted August 26, 2011 Author Posted August 26, 2011 take the code and try it for yourself mate You are a much better scripter. you will see whats wrong its like that it cant get the infos out of the table cause he let me spawn on x0,y0,z0,r0,s0 ... local Spieler = getRootElement() addEventHandler( "onResourceStart", Spieler, function() executeSQLCreateTable( "playerData", "name STRING, x FLOAT, y FLOAT, z FLOAT, r FLOAT, s INT" ) end ) addEventHandler( "onPlayerQuit", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local x, y, z = getElementPosition( source ) local rx, ry, rz = getElementRotation( source ) local s = getElementModel( source ) local playerTable = executeSQLSelect ( "playerData", "*", "name = '" .. Account .. "'" ) if playerTable and #playerTable == 1 then local playerTable = executeSQLUpdate( "playerData", "name = '" .. Account .. "', x = '" .. x .. "', y = '" .. y .. "', z = '" .. z .. "', r = '" .. rz .. "', s = '" .. s .. "'" ) else local playerTable = executeSQLInsert( "playerData", "'"..Account .. "','" .. x .. "','" .. y .. "','" .. z .. "','" .. rz .. "','" .. s .. "'" ) end end ) addEventHandler( "onPlayerLogin", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local playerTable = executeSQLSelect ( "playerData", "*", "name = '" .. Account .. "'") if playerTable and #playerTable == 1 then spawnPlayer( source, playerTable[1][2], playerTable[1][3], playerTable[1][4], playerTable[1][5], playerTable[1][6] ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) else spawnPlayer( source, 1000, 1000, 50, 90, 285 ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) end end )
JR10 Posted August 26, 2011 Posted August 26, 2011 Done. local Spieler = getRootElement() addEventHandler( "onResourceStart", Spieler, function() executeSQLCreateTable( "playerData", "name STRING, x FLOAT, y FLOAT, z FLOAT, r FLOAT, s INT" ) end ) addEventHandler( "onPlayerQuit", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local x, y, z = getElementPosition( source ) local rx, ry, rz = getElementRotation( source ) local s = getElementModel( source ) local playerTable = executeSQLSelect ( "playerData", "*", "name = '" .. Account .. "'" ) if playerTable and #playerTable == 1 then local playerTable = executeSQLUpdate( "playerData", "name = '" .. Account .. "', x = '" .. x .. "', y = '" .. y .. "', z = '" .. z .. "', r = '" .. rz .. "', s = '" .. s .. "'" ) else local playerTable = executeSQLInsert( "playerData", "'"..Account .. "','" .. x .. "','" .. y .. "','" .. z .. "','" .. rz .. "','" .. s .. "'" ) end end ) addEventHandler( "onPlayerLogin", Spieler, function() local Account = getAccountName( getPlayerAccount( source ) ) local playerTable = executeSQLSelect ( "playerData", "*", "name = '" .. Account .. "'") if playerTable and #playerTable == 1 then spawnPlayer( source, playerTable[1]["x"], playerTable[1]["y"], playerTable[1]["z"], playerTable[1]["r"], playerTable[1]["s"] ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) else spawnPlayer( source, 1000, 1000, 50, 90, 285 ) setCameraTarget( source, source ) fadeCamera( source, true, 1.0 ) end end ) Tested. spawnPlayer( source, playerTable[1]["x"], playerTable[1]["y"], playerTable[1]["z"], playerTable[1]["r"], playerTable[1]["s"] ) That's what I changed, same as my last post.
JR10 Posted August 26, 2011 Posted August 26, 2011 Not sure, but it's better using the SQL table the way I did, because this way, it's a guarantee you will get the data right. playerTable[1]["x"]
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