ayuda para codigo!! PSP

Mira, estoy haciendo un juego para psp, es como el guerrastribales, que es un juego online, i me sale un error cuando lo ejecuto en la psp con un eboot.pbp. el codigo es este:
dofile("comp.LUA")
pad = controls.read()
--contadores
comadera = Timer.new()--contador madera milisegundos
copiedra = Timer.new()--contador piedra milisegundos
cobarro = Timer.new()--contador barro milisegundos
cepp = Timer.new()-- contador edificio principal milisegundos
cuartell = Timer.new()-- contador cuartel milisegundos
cmadera = math.floor( comadera:time() / 1000 )--para conseguir en segundos madera
cpiedra = math.floor( copiedra:time() / 1000 )--para conseguir en segundos piedra
cbarro = math.floor( cobarro:time() / 1000 )--para conseguir en segundos barro
cep = math.floor( cepp:time() / 1000 )--para conseguir en segundos edificio principal
ccuart = math.floor( cuartell:time() / 1000 )--para conseguir en segundos cuartel
-----------------

function recursos()
if cmadera == tmadera then
madera = madera + 1
cmadera:reset(0)
cmadera:start
end
if cbarro == 5 then
barro = barro + 1
cbarro:reset(0)
cbarro:start
end
if cpiedra == 5 then
piedra = piedra + 1
cpiedra:reset(0)
cpiedra:start
end
if madera == almacen then
color1 = rojo
comadera:stop()
mmadera = 1
else color1 = blanco
end
if mmadera = 1 then
comadera:start()
end
if piedra == almacen then
color2 = rojo
end
if barro == almacen then
color3 = rojo
end

end
function cursosr()
if pad:up() and oldpad:up() =~ pad:up() then -- para cursor
y = y - 1
end
if pad:down() and oldpad:down() =~ pad:down() then
y = y + 1
end
if pad:left() and oldpad:left() =~ pad:left() then
x = x - 1
end
if pad:right() and oldpad:right() =~ pad:right() then
x = x + 1
end

end

while true do
screen:clear()
oldpad = controls.read()
screen:blit(0,0,fondo)
screen:blit(x,y,cursor)
screen:print(257, 44,madera, color1)
screen:print(383, 44,piedra, color2)
screen:print(321, 44,barro, color3)
screen:blit(0,262,barra)
comadera:start()--encendemos
copiedra:strat()--encendemos
cobarro:start()--encendemos
cursor()
recursos()
if pad:cross() and oldpad:cross() ~= pad:cross() and x < 100 and x > 1 and y < 38 and y > 5 then-- para entrar en el ep
ep = 1
end
if pad:cross() and oldpad:cross() ~= pad:cross() and x < 160 and x > 100 and y < 38 and y > 5 then-- para entrar en el cuartel
cuart = 1
end

-- empezamos con el edificio principal
if ep == 1 then
while true do
screen:clear()
oldpad = controls.read()
x = 240
y=172
screen:print(454,57,lvlep1,negro)
screen:print(454,118,lvlcuart1,negro)
screen:blit(0,0,iep)
screen:blit(x,y,cursor)
screen:blit(0,262,barra)
cursor()
recusos()
if pad:R() and oldpad:R() =~ pad:R() then
break
end

--construir ep
-- ¡¡CORDENADAS MAL; IMAGEN EP SIN ALGUNOS EDIFICIOS!!

if pad:cross() and oldpad:cross() ~= pad:cross() and x < 479 and x > 401 and y < 72 and y > 43 then -- para construir en ep
if lvlep = 1 and madera >= 90 and piedra >= 80 and barro >= 70 then

madera = madera - 90
piedra = piedra - 80
barro = barro - 70
cepp:reset(0)
cepp:start()
screen:print(20,268,cep,negro)
ced = 1
end
if lvlep = 2 and madera >= 113 and piedra >= 102 and barro >= 88 then
madra = madera - 113
piedra = piedra - 102
barro = barro - 88
cepp:reset(0)
cepp:start()
screen:print(20,268,cep,negro)
ced = 1
end
if lvlep = 3 and madera >= 143 and piedra >= 130 and barro >= 111 then
madra = madera - 143
piedra = piedra - 130
barro = barro - 111
cepp:reset(0)
cepp:start()
screen:print(20,268,cep,negro)
ced = 1
end
if lvlep =4 and madera >= 143 and piedra >= 130 and barro >= 111 then
madra = madera - 143
piedra = piedra - 130
barro = barro - 130
cepp:reset(0)
cepp:start()
screen:print(20,268,cep,negro)
ced = 1
end

if ced = 1
while true do
screen:clear()
oldpad = controls.read()
screen:print(454,57,lvlep1,negro)
screen:print(454,118,lvlcuart1,negro)
screen:blit(0,0,iep)
screen:blit(x,y,cursor)
screen:blit(0,262,barra)
cursor()
recusos()
if cep == 60 and acep = 0 then
completado = 0
lvlep = lvlep + 1
if completado = 0
sceen:print(240,170,completado,rojo)
cep:reset(0)
while true do
if pad:cross() and oldpad:cross() ~= pad:cross() and completado == 0 then -- para quitar completado
completado = 1
break
end
screen.flip()
screen.waitVblankStart()
end

end

end

if cep = 90 and acep = 1 then
completado = 0
lvlep = lvlep + 1
if completado = 0
sceen:print(240,170,completado,rojo)
cep:reset(0)
while true do
if pad:cross() and oldpad:cross() ~= pad:cross() and completado == 0 then -- para quitar completado
completado = 1
break
end
screen.flip()
screen.waitVblankStart()
end

end

end

if cep = 120 and acep = 2 then
completado = 0
lvlep = lvlep + 1
if completado = 0
sceen:print(240,170,completado,rojo)
cep:reset(0)
while true do
if pad:cross() and oldpad:cross() ~= pad:cross() and completado == 0 then -- para quitar completado
completado = 1
break
end
screen.flip()
screen.waitVblankStart()
end

end

end

end
ced = 0
end

end

if pad:cross() and oldpad:cross() ~= pad:cross() and x < 479 and x > 401 and y < 130 and y > 101 then -- para constuir en cuartel
if lvlcuart = 0 and lvlep = 3 and madera >= 200 and piedra >= 170 and barro >= 90 then

madera = madera - 200
piedra = piedra - 170
barro = barro - 90
cepp:reset(0)
cepp:start()
screen:print(20,268,cep,negro)
ced = 1
end

if ced = 1
while true do
if cep == 60 and acuart == 0 then
completado = 0
lvlcuart = lvlcuart + 1
if completado = 0
sceen:print(240,170,completado,rojo)
cep:reset(0)
while true do
if pad:cross() and oldpad:cross() ~= pad:cross() and completado == 0 then -- para quitar completado
completado = 1
break
end
screen.flip()
screen.waitVblankStart()
end

end

end

if cep = 90 and acuart = 1 then
completado = 0
lvlcuart = lvlcuart + 1
if completado = 0
sceen:print(240,170,completado,rojo)
cep:reset(0)
while true do
if pad:cross() and oldpad:cross() ~= pad:cross() and completado == 0 then -- para quitar completado
completado = 1
break
end
screen.flip()
screen.waitVblankStart()
end

end

end

end
ced = 0
end

end

if pad:cross() and oldpad:cross() ~= pad:cross() and x < 479 and x > 401 and y < 130 and y > 101 then -- para constuir en leñador
if lvlmad = 1 and madera >= 63 and piedra >= 77 and barro >= 50 then

madera = madera - 60
piedra = piedra - 77
barro = barro - 50
cepp:reset(0)
cepp:start()
screen:print(20,268,cep,negro)
ced = 1
end
if lvlmad = 2 and madera >= 78 and piedra >= 98 and barro >= 78 then

madera = madera - 78
piedra = piedra - 98
barro = barro - 78
cepp:reset(0)
cepp:start()
screen:print(20,268,cep,negro)
ced = 1
end

if ced = 1
while true do
if cep == 120 and amad == 1 then
completado = 0
lvlmad = lvlmad + 1
tmadera = 4
if completado = 0
sceen:print(240,170,completado,rojo)
cep:reset(0)
while true do
if pad:cross() and oldpad:cross() ~= pad:cross() and completado == 0 then -- para quitar completado
completado = 1
break
end
screen.flip()
screen.waitVblankStart()
end

end

end

if cep = 180 and amad = 2 then
completado = 0
lvlmad = lvlmad + 1
tmadera = 3
if completado = 0
sceen:print(240,170,completado,rojo)
cep:reset(0)
while true do
if pad:cross() and oldpad:cross() ~= pad:cross() and completado == 0 then -- para quitar completado
completado = 1
break
end
screen.flip()
screen.waitVblankStart()
end

end

end

end
ced = 0
end

end

end

end

--empezamos con el cuartel
if cuart == 1 then
while true do
screen:clear()
oldpad = controls.read()
screen:blit(0,0,cuart)
screen:blit(x,y,cursor)
screen:print(257, 44,madera, color1)
screen:print(383, 44,piedra, color2)
screen:print(321, 44,barro, color3)
screen:blit(0,262,barra)
cursor()
recursos()
if pad:R() and oldpad:R() =~ pad:R() then
break
end

--hacer tropas
if pad:cross() and oldpad:cross() ~= pad:cross() and x > 426 and x < 454 and y < 114 and y > 59 then -- para lanceros

if lvlcuart = 1 and madera >= 50 and piedra >= 30 and barro >= 10 then

madera = madera - 50
piedra = piedra - 30
barro = barro - 10
cuartell:reset(0)
cuartell:start()
screen:print(163,268,ccuart,negro)
cud = 1
end
if lvlcuart = 2 and madera >= 50 and piedra >= 30 and barro >= 10 then

madera = madera - 50
piedra = piedra - 30
barro = barro - 10
cuartell:reset(0)
cuartell:start()
screen:print(163,268,ccuart,negro)
cud = 1
end

if cud = 1

if ccuart == 300 and acuart == 1 then
compltado = 0
lanceros = lanceros + 1
if completado = 0
sceen:print(240,170,completado,rojo)
cep:reset(0)
while true do
if pad:cross() and oldpad:cross() ~= pad:cross() and completado == 0 then -- para quitar completado
completado = 1
break
end
screen.flip()
screen.waitVblankStart()
end

end

end
if ccuart == 270 and acuart == 2 then
compltado = 0
lanceros = lanceros + 1
if completado = 0
sceen:print(240,170,completado,rojo)
cep:reset(0)
while true do
if pad:cross() and oldpad:cross() ~= pad:cross() and completado == 0 then -- para quitar completado
completado = 1
break
end
screen.flip()
screen.waitVblankStart()
end

end

end
cud = 0
end

end

end

end

end

el error es este: function arguments expected near elseif.

si alguien me pude ayudar, gracias de antemano.
Junto con el mensaje de error te da el número de línea que falla, lo cual es importante. Y sin saber mucho de Lua, creo que tienes que añadir paréntesis a las expresiones complejas en los IF. Por ejemplo: if a>b and b==0 then quedaría así: if (a<b) and (b==0) then. Suerte.
Hay lineas que las comienzas con if, pero no las acabas con then para devolver el valor en caso de coincidir la situación.

Aparte hay un par de errores en las variables de tu código, indicas compltado cuando supongo que debe ser completado ya que haces referencia también en otras lineas.
gracias, mi teclado es una ....., ahora lo reviso, lo de los parentesis, lo pondre a la practica, muchas gracias
botxii escribió:gracias, mi teclado es una ....., ahora lo reviso, lo de los parentesis, lo pondre a la practica, muchas gracias


No tienes que añadir paréntesis.
esta solucionado, pero me sale que en este fregmento hay error

if cmadera == tmadera then
madera = madera + 1
cmadera:reset(0)
cmadera:start
end
especialmente dice function arguments expected near end
botxii, un consejo:

No se si el programa lo tienes escrito tal y como lo has puesto en tu post, pero si es así....
Escribe el código usando tabuladores y espacios.
Molesta a la vista ;)
Tienes hasta 8 end seguidos, uno debajo de otro. Así es muy difícil revisarlo, de verdad
Debes seguir un orden, como por ejemplo:


while true do
   if pad:cross() and oldpad:cross() ~= pad:cross() and completado == 0 then -- para quitar completado
      completado = 1
      break
   end

      screen.flip()
      screen.waitVblankStart()
      end

end
ya lo ir ponieno organizadamente, y explicando que es cada end.
pero el eror prosigue, como lo soluciono?
botxii escribió:esta solucionado, pero me sale que en este fregmento hay error

if cmadera == tmadera then
madera = madera + 1
cmadera:reset(0)
cmadera:start
end
especialmente dice function arguments expected near end


Sin conocer nada del lenguaje utilizado, es posible que aunque el método start del objeto cmadera no tenga argumentos, tengas que llamarlo de la forma "cmadera:start()"
pensareis que soy un pesado, pero ahora no sale ningun error, se queda la pantalla negra, y se para.

odio la psp ratataaaa [uzi]
Bienvenido al mundo de la programación!! Ya has escrito el programa, ahora te queda la mitad del trabajo, o sea depurarlo y probarlo. Te recomiendo que pruebes trozos pequeños en la psp en vez de el código completo, poco a poco.
10 respuestas