ende78ar Posted October 11, 2021 Share Posted October 11, 2021 Hola gente como va?? empese a ver algo de Base de datos y para ello hice un pequeño script de "teletransportacion" donde mediante un comando guardo la posicion del jugador en una BD sqlite y se le asigna un nombre elegido por el usuario, el cual luego sera invocado mediate comando para transportarse a dicha hubicacion, asta ahi todo bien, lo que no pude conseguir despues de googlear bastante es el limitar la cantidad de puntos de "teletransportacion", vi ejemplos similares con bucles for, tambien probe con COUNT FROM (TABLA) where campo_a_contar pero no le encuentro la vuelta y ya no se que mas probar. La tabla consta de 4 campos: nombre / x / y / z/ la idea es contar cuantas entradas hay en la columna nombre para crear un if y limitar las entradas a 5, algo que vi mucho en el juego Rust. Si me pueden tirar alguna idea de como hacer el contador seria un golazo, gracias. Link to comment
Merino Posted October 11, 2021 Share Posted October 11, 2021 Puedes usar "table.size" Useful Function de la Wiki. Aquí te dejo un ejemplo para que puedas guiarte, recuerda cambiar las variables. Saludos! function table.size(tab) local length = 0 for _ in pairs(tab) do length = length + 1 end return length end function teletransportes (player) local tabla = executeSQLQuery ("SELECT * FROM teletransportes WHERE nombre=?", getPlayerName(player)) -- Cambia el nombre de la tabla a la de tu DB local tRegistrados = table.size (tabla) if tabla then -- Comprueba si se ejecutó la consultaa if tRegistrados <= 5 then -- Si tiene 5 o menos teletransportes outputChatBox ("Tienes "..tRegistrados.." teletransportes registrados", player) else -- Si tiene más de 5 outputChatBox ("Máximo de teletransportes.", player) end end end addCommandHandler ("tp", teletransportes) Link to comment
ende78ar Posted October 11, 2021 Author Share Posted October 11, 2021 Hola Merino buen dia gracias por responder, estube viendo lo del table.size pero solo lo pude hacer funcionar si hacia una tabla dentro del mismo codigo al querer conectar con la BD no le encontre la vuelta, pero al final lo solucione tomando algo de tu codigo y del que ya tenia en otra funcion, ahora solo me queda acomodar la funcion dentro del codigo anterior y meter el if. db = dbConnect("sqlite", "posiciones.db") function contando() local coor = dbQuery(db, "SELECT nombre FROM coordenadas") local result = dbPoll(coor, -1) local length = 0 for _ in pairs(result) do length = length + 1 outputChatBox(length) end end addCommandHandler("contar", contando) Link to comment
_SAXI_ Posted October 11, 2021 Share Posted October 11, 2021 (edited) 2 hours ago, ende78ar said: Hola Merino buen dia gracias por responder, estube viendo lo del table.size pero solo lo pude hacer funcionar si hacia una tabla dentro del mismo codigo al querer conectar con la BD no le encontre la vuelta, pero al final lo solucione tomando algo de tu codigo y del que ya tenia en otra funcion, ahora solo me queda acomodar la funcion dentro del codigo anterior y meter el if. db = dbConnect("sqlite", "posiciones.db") function contando() local coor = dbQuery(db, "SELECT nombre FROM coordenadas") local result = dbPoll(coor, -1) local length = 0 for _ in pairs(result) do length = length + 1 outputChatBox(length) end end addCommandHandler("contar", contando) La sintaxis de la consulta está mal escrita. Intenta con este código: db = dbConnect("sqlite", "posiciones.db"); function contando(j) local coor = dbQuery(db,"SELECT * FROM coordenadas"); local result = dbPoll(coor,-1); outputChatBox(tostring(#result),j); end addCommandHandler("contar", contando); Edited October 11, 2021 by _SAXI_ Link to comment
ende78ar Posted October 12, 2021 Author Share Posted October 12, 2021 5 hours ago, _SAXI_ said: La sintaxis de la consulta está mal escrita. Intenta con este código: db = dbConnect("sqlite", "posiciones.db"); function contando(j) local coor = dbQuery(db,"SELECT * FROM coordenadas"); local result = dbPoll(coor,-1); outputChatBox(tostring(#result),j); end addCommandHandler("contar", contando); !!!Exelente!!!, ahora me devuelve la cantidad de registros, en mi caso 7, como lo habia escrito yo el outputChatBox devolvia 1 2 3 4 5 6 7, segurumante por el bucle esto ultimo me va a servir para ver la lista de nombres de los puntos de "teletransporte". Muchas Gracias. 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