vallejo Posted August 12, 2016 Share Posted August 12, 2016 Como puedo escribir la posición de un jugador en un archivo .txt Aquí capturo la posición pero no se como pasarlo. local x,y,z = getElementPosition(thePlayer) Link to comment
Arsilex Posted August 12, 2016 Share Posted August 12, 2016 function createPosition(player) local x, y, z = getElementPosition(player) local rx, ry, rz = getElementRotation(player) local interior, dimension = getElementInterior(player), getElementDimension(player) local position = "posX = " .. x .. ", posY = " .. y .. ", posZ = ".. z .. ", rotX = ".. rx .. ", rotY = ".. ry .. ", rotZ = " .. rz .. ", Interior = " .. interior .. ", Dimension = ".. dimension .. "\n" if fileExists ( "positions.txt" ) then local file = fileOpen("positions.txt") fileSetPos ( file, fileGetSize ( file ) ) fileWrite(file, position) fileClose(file) else local file = fileCreate("positions.txt") fileWrite(file, position) fileClose(file) end end Solo tienes que hacer algo tal que asi createPosition(jugador) No lo he probado pero debería de funcionar! Link to comment
vallejo Posted August 12, 2016 Author Share Posted August 12, 2016 como puedo asignarle la información a una tabla? Link to comment
vallejo Posted August 12, 2016 Author Share Posted August 12, 2016 Ahora quiero extraer los datos del archivo y almacenarlos en una tabla. marcadores ={} function LeerTxt(Player) local hFile = fileOpen("posicion.txt", true) if hFile then local buffer buffer = fileRead(hFile, 10000) -- ... read the next 500 bytes... for i, #buffer do marcadores[i] = split(valor, ",") outputConsole(marcadores[i], Player) end -- ... and output them to the console fileClose(hFile) -- close the file once we're done with it else outputConsole("Unable to open test.txt") end end Link to comment
Enargy, Posted August 12, 2016 Share Posted August 12, 2016 strtable = split(buffer, "\n") for i = 1, #strtable do marcadores[i] = tostring(strtable[i] outputConsole(marcadores[i], Player) end Link to comment
vallejo Posted August 12, 2016 Author Share Posted August 12, 2016 si funciona, lo que busco es que cuando yo ponga un marker tome la posición mia y luego la escriba y genere el marcador en esa posición pero obviamente la posición la quiero guardar en el .txt y extraerla de hay. Link to comment
Enargy, Posted August 12, 2016 Share Posted August 12, 2016 si funciona, lo que busco es que cuando yo ponga un marker tome la posición mia y luego la escriba y genere el marcador en esa posición pero obviamente la posición la quiero guardar en el .txt y extraerla de hay. usa onMarkerHit y cuando entres tomas la posición del player, puedes usar la función de Arsilex para hacer eso. Link to comment
vallejo Posted August 12, 2016 Author Share Posted August 12, 2016 Mira lo q tengo hasta el momento, solamente me crea la primera posición que tomo y de repeso no me muestra la GUI: marcadores ={} function Marcador(thePlayer) triggerClientEvent(thePlayer, "mostrarPanel", thePlayer) -- Utilizamos un evento Client end ----------Crear Marcador y comprobamos si es administrador--------------------- function crearMarcador(thePlayer, cmd) local obtCuent = getAccountName(getPlayerAccount(thePlayer)) -- Obtenemos el nombre de la cuenta if isObjectInACLGroup("user."..obtCuent, aclGetGroup("Admin")) then -- Comparamos si esta en el grupo de administradores LeerTxt() for i=1, #marcadores do local x, y, z = unpack(marcadores) --tipo, tamano, r, g, b, a local marc = createMarker( x, y, z, "cylinder", 2, 0 ,255, 0, 155, root ) addEventHandler("onMarkerHit", marc, Marcador) --Llamamos la funcion Marcador cuando un jugador toca el marker end end end addEvent("p", true) addEventHandler("p", root, crearMarcador) addCommandHandler("crea", crearMarcador) function crearTxt(thePlayer) ------------------- Creamos el archivo y lo escribimos ---------------------------------- local x, y, z = getElementPosition(thePlayer) -- Obtenemos la posición del jugador local position = math.floor(x) .. ", " .. math.floor(y) ..", ".. math.floor(z-1) ..",\r\n" -- Convertimos a enteros if fileExists ( "posicion.txt" ) then local file = fileOpen("posicion.txt") fileSetPos ( file, fileGetSize ( file ) ) fileWrite(file, position) fileClose(file) else local file = fileCreate("posicion.txt") fileWrite(file, position) fileClose(file) end end addCommandHandler("c", crearTxt) function LeerTxt(Player) local hFile = fileOpen("posicion.txt", true) if hFile then local buffer buffer = fileRead(hFile, 10000) strtable = split(buffer, ",") for i = 1, #strtable do marcadores[i] = tostring(strtable[i]) outputChatBox("test"..marcadores[i], Player) end fileClose(hFile) else outputConsole("Unable to open test.txt") end end Link to comment
Enargy, Posted August 12, 2016 Share Posted August 12, 2016 marker = {} function Marcador(thePlayer) triggerClientEvent(thePlayer, "mostrarPanel", thePlayer) -- Utilizamos un evento Client end ----------Crear Marcador y comprobamos si es administrador--------------------- function crearMarcador(thePlayer, cmd) local obtCuent = getAccountName(getPlayerAccount(thePlayer)) -- Obtenemos el nombre de la cuenta if isObjectInACLGroup("user."..obtCuent, aclGetGroup("Admin")) then -- Comparamos si esta en el grupo de administradores local marcadores = LeerTxt(thePlayer) for i = 1, #marcadores do local x, y, z = unpack(marcadores[i]) --tipo, tamano, r, g, b, a if not marker[i] then marker[i] = createMarker(x, y, z, "cylinder", 2, 0 ,255, 0, 155, root ) addEventHandler("onMarkerHit", marker[i], Marcador) --Llamamos la funcion Marcador cuando un jugador toca el marker end end end end addEvent("p", true) addEventHandler("p", root, crearMarcador) addCommandHandler("crea", crearMarcador) function crearTxt(thePlayer) ------------------- Creamos el archivo y lo escribimos ---------------------------------- local x, y, z = getElementPosition(thePlayer) -- Obtenemos la posición del jugador local position = tostring(x) .. ", " .. tostring(y) ..", ".. tostring(z-1) .."\n" if fileExists ( "posicion.txt" ) then local file = fileOpen("posicion.txt") fileSetPos ( file, fileGetSize ( file ) ) fileWrite(file, position) fileClose(file) else local file = fileCreate("posicion.txt") fileWrite(file, position) fileClose(file) end end addCommandHandler("c", crearTxt) function LeerTxt(Player) local marcadores = {} local hFile = fileOpen("posicion.txt", true) if hFile then buffer = fileRead(hFile, fileGetSize(hFile)) strtable = split(buffer, "\n") for i = 1, #strtable do local x = tonumber(gettok(strtable[i], 1, ",")) local y = tonumber(gettok(strtable[i], 2, ",")) local z = tonumber(gettok(strtable[i], 3, ",")) marcadores[i] = {x, y, z} end fileClose(hFile) return marcadores else outputConsole("Unable to open test.txt") end return false end Link to comment
vallejo Posted August 13, 2016 Author Share Posted August 13, 2016 marker = {} function Marcador(thePlayer) triggerClientEvent(thePlayer, "mostrarPanel", thePlayer) -- Utilizamos un evento Client end ----------Crear Marcador y comprobamos si es administrador--------------------- function crearMarcador(thePlayer, cmd) local obtCuent = getAccountName(getPlayerAccount(thePlayer)) -- Obtenemos el nombre de la cuenta if isObjectInACLGroup("user."..obtCuent, aclGetGroup("Admin")) then -- Comparamos si esta en el grupo de administradores local marcadores = LeerTxt(thePlayer) for i = 1, #marcadores do local x, y, z = unpack(marcadores[i]) --tipo, tamano, r, g, b, a if not marker[i] then marker[i] = createMarker(x, y, z, "cylinder", 2, 0 ,255, 0, 155, root ) addEventHandler("onMarkerHit", marker[i], Marcador) --Llamamos la funcion Marcador cuando un jugador toca el marker end end end end addEvent("p", true) addEventHandler("p", root, crearMarcador) addCommandHandler("crea", crearMarcador) function crearTxt(thePlayer) ------------------- Creamos el archivo y lo escribimos ---------------------------------- local x, y, z = getElementPosition(thePlayer) -- Obtenemos la posición del jugador local position = tostring(x) .. ", " .. tostring(y) ..", ".. tostring(z-1) .."\n" if fileExists ( "posicion.txt" ) then local file = fileOpen("posicion.txt") fileSetPos ( file, fileGetSize ( file ) ) fileWrite(file, position) fileClose(file) else local file = fileCreate("posicion.txt") fileWrite(file, position) fileClose(file) end end addCommandHandler("c", crearTxt) function LeerTxt(Player) local marcadores = {} local hFile = fileOpen("posicion.txt", true) if hFile then buffer = fileRead(hFile, fileGetSize(hFile)) strtable = split(buffer, "\n") for i = 1, #strtable do local x = tonumber(gettok(strtable[i], 1, ",")) local y = tonumber(gettok(strtable[i], 2, ",")) local z = tonumber(gettok(strtable[i], 3, ",")) marcadores[i] = {x, y, z} end fileClose(hFile) return marcadores else outputConsole("Unable to open test.txt") end return false end Gracias si funciono, pero quiero saber como hago para que no tenga necesidad de usar el comando si no que cuando reinicie el script automáticamente me salgan los marker, trate de implementar addEventHandler ( "onResourceStart", getRootElement(), NameFunction ) pero no me funciona genera error en el 2do argumento. Link to comment
Enargy, Posted August 13, 2016 Share Posted August 13, 2016 Haz lo que hiciste en la que inicie el script usando la función del marker hit. Link to comment
Recommended Posts