Hola, probando un homebrew que estoy realizando en LUA, me marca un error (attempt to index local 'archivo2' ( a nil value) ) en la siguiente funcion. La línea que me marca esta comentada en el código mediante asteriscos. Gracias de antemano.
function Terminar(fondo,img,pestanhas,jugador,oponente,torneo,partida,historial,cambiar_pantalla,turno,colores,pos_jug,pos_opo,idioma) -- Permite ver el historial de batalla y guardar el historial en un archivo de texto o volver al menú principal local oldpad = Controls.read() local color1,color2,color3 = colores[1],colores[2],colores[3] local max_opciones_historial = #historial local opcion_historial = max_opciones_historial local opcion_elegida local sonido = Sound.load('./Sonidos/hoja.wav',false) local mostrar_controles = 0 local continua_ronda local n = 125 local pantalla_controles = Image.createEmpty(480,272) pantalla_controles:clear(Color.new(0,0,0,n)) while true do InicioPantalla(fondo,img,pestanhas,cambiar_pantalla,turno,colores,idioma.turno) screen:print(pos_opo.nombre[1],pos_opo.nombre[2],oponente.nombre,color1) -- Imprime el nombre del oponente screen:blit(pos_opo.avatar[1],pos_opo.avatar[2],oponente.avatar) -- Muestra el avatar del oponente screen:print(pos_opo.vidas[1],pos_opo.vidas[2],oponente.vidas,color1) -- Imprime las vidas del oponente screen:print(pos_jug.nombre[1],pos_jug.nombre[2],jugador.nombre,color1) -- Imprime el nombre del jugador screen:blit(pos_jug.avatar[1],pos_jug.avatar[2],jugador.avatar) -- Muestra el avatar del jugador screen:print(pos_jug.vidas[1],pos_jug.vidas[2],jugador.vidas,color1) -- Imprime las vidas del jugador screen:print(150,40,idioma.historial_batalla,color2) -- Imprime ' Historial de batalla' if mostrar_controles == 1 then -- Imprime la ayuda de controles screen:blit(0,0,pantalla_controles) screen:print(40,50,'/: '..idioma.triangulo,color2) screen:print(40,70,'[]: '..idioma.cuadrado,color2) screen:print(40,90,'O: '..idioma.circulo,color2) end screen:drawLine(150,80,450,80,color1) -- Dibuja una línea horizontal screen:drawLine(250,60,250,200,color1) -- Dibuja una línea vertical screen:drawLine(360,60,360,200,color1) -- Dibuja una línea vertical screen:drawLine(370,60,370,200,color1) -- Dibuja una línea vertical screen:print(380,70,idioma.turno,color1) -- Imprime 'Turno' screen:print(170,70,jugador.nombre,color1) -- Imprime el nombre del jugador screen:print(270,70,oponente.nombre,color1) -- Imprime el nombre del oponente screen:print(90,230,idioma.ver..': '..opcion_historial,color1) -- Imprime la opción a ver if max_opciones_historial > 5 then -- Imprime las 6 últimas modificaciones de vidas de los jugadores z = 1 for i = opcion_historial-5 , opcion_historial do for j = 1 , 2 do screen:print(180+50*j,70+20*z,historial[i][j],color2) end screen:print(390,70+20*z,historial[i][3],color2) z = z + 1 end elseif max_opciones_historial <= 5 then for i = 1 , max_opciones_historial do for j = 1 , 2 do screen:print(180+50*j,70+20*i,historial[i][j],color2) end screen:print(390,70+20*i,historial[i][3],color2) end end -- ! Pad if pad:up() and oldpad:up() ~= pad:up() and opcion_historial > 6 then opcion_historial = opcion_historial - 1 snd.cambiar_opcion2:play() end if pad:down() and oldpad:down() ~= pad:down() and opcion_historial < max_opciones_historial then opcion_historial = opcion_historial +1 snd.cambiar_opcion2:play() end if pad:triangle() and oldpad:triangle() ~= pad:triangle() then -- Guarda el historial y termina la ronda if torneo.nombre ~= 'Casual' then local archivo2 = io.open('tournament.ini','w') archivo2:write(torneo.nombre..'\n') -- ########### Aquí es donde me marca el error ################## archivo2:write(jugador.nombre..'\n') archivo2:write(torneo.total_rondas..'\n') archivo2:write(partida.ronda..'\n') archivo2:close() end GuardarHistorial(jugador.nombre,oponente.nombre,torneo.nombre,partida,historial) local archivo = io.open(torneo.nombre..'.txt','a') archivo:write('\n') archivo:close() continua_ronda = 0 break end if pad:square() and oldpad:square() ~= pad:square() then -- Guarda el historial y continúa la tonda GuardarHistorial(jugador.nombre,oponente.nombre,torneo.nombre,partida,historial) continua_ronda = 1 partida.juego = partida.juego + 1 sonido:play() break end if pad:circle() and oldpad:circle() ~= pad:circle() then -- Vuelve al menú principal continua_ronda = 0 break end if pad:select() and oldpad:select() ~= pad:select() then -- Activa/desactiva la ayuda de controles if mostrar_controles == 0 then mostrar_controles = 1 else mostrar_controles = 0 end end oldpad = pad screen.waitVblankStart() screen.flip() end return continua_ronda,partida.juego,partida.ronda end
Ya he solucionado el
Ya he solucionado el problema.
En una función que se realizaba anterior a esta, comprobaba si el archivo (que pretendía modificar en esta función) existía mediante la función System.doesFileExist("ruta archivo"). La he quitado, y se ha resuelto el problema. No sé si es que hay otra parte de código que le afecta al archivo o es bug.
@xerpi: Los dos puntos (..)
@xerpi: Los dos puntos (..) son los de concatenacion, así que no se podrían eliminar, si se hace resulta error. Gracias de todas formas.
Aun sigo sin solucionar el problema...
eque en lua dev si hay una
eque en lua dev si hay una sola variable, por ejemplo screen.print(10,10,variable), si lo pones as iscreen.print(10,10..,variable..)
marca error, por eso lo decia igualmente ya me pensaba que no era eso pero para intentar no pierdes nada :)
mmm no se lo unico que se me
mmm no se lo unico que se me ocurre es que pruebalo quitando los dos .. en vez de asi: archivo2:write(torneo.nombre..'\n')
asi:archivo2:write(torneo.nombre'\n') con este y los de abajo y nos dicen que tal
LuaPlayer
Podrias decir LuaPlayer?, alomejor soy yo que toy cegato ,pero no veo la linea dnde esta el error(tu comentas que esta marcada con #)