×

Langue

Fermer
Atelier 801
  • Forums
  • Dev Tracker
  • Connexion
    • English Français
      Português do Brasil Español
      Türkçe Polski
      Magyar Română
      العربية Skandinavisk
      Nederlands Deutsch
      Bahasa Indonesia Русский
      中文 Filipino
      Lietuvių kalba 日本語
      Suomi עברית
      Italiano Česky
      Hrvatski Slovensky
      Български Latviešu
      Estonian
  • Langue
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Lua] Erros Frequentes
[Lua] Erros Frequentes
Grastfetry
« Consul »
1487078160000
    • Grastfetry#0095
    • Profil
    • Derniers messages
    • Tribu
#1
  0
  • Inicio
  • Int
  • Runtime
  • Argument
  • Misc

http://i.imgur.com/MDGwUGi.jpg
Se seu script não está funcionando como esperado ou esteja tendo erros de inicialização poste ele neste tópico dentro da tag [code=lua][/code]



Este tópico descreve os diferentes erros que podem ser retornados no seu chat #lua e demonstra como pode-ser consertados com pequenos exemplos ou prevenir de acontecerem.
Algumas mensagens de erros contém a linha do código que causou o erro. Pode não ser a linha exata causadora do erro, mas está por volta da mesma.
Uma ótima dica para encontrar o causador é usar o print em variáveis e outras informações em cada estágio do código. Isso pode ser útil para verificar se uma variável não tem o valor/tipo esperado, etc. Isso não vai concertar o seu código, mas vai ajudar a encontrar o que está dando de errado.

Um error comum é redefinição de algo, como no exemplo temos um eventNewGame que era esperado mostrar no chat #lua "REST", mas ele foi redefinido para outro valor através do segundo eventNewGame e o resultado do print vai ser "BRENO".
Code Lua

1
2
3
4
5
6
7
function eventNewGame()
print("REST")
end

function eventNewGame()
print("BRENO")
end
Para corrigir basta incluir o conteúdo das duas funções em apenas uma, exemplo:
Code Lua

1
2
3
4
function eventNewGame()
print("REST")
print("BRENO")
end

Este tópico foi elaborado pela Equipe Lua BR ♥

Attempt to call nil.
  • Esse erro ocorre quando uma linha está tentando usar uma variável que seja nil/falsa.
  • Normalmente ocorre quando a variável ainda não foi criada, como no exemplo:
  • Code Lua

    1
    print(test)
    Nesse caso a variável é inexistente e por isso ocasiona o erro, para concertar basta criar essa variável no global, exemplo:
    Code Lua

    1
    2
    test = "PAULMARQUES <3"
    print(test)
  • Outro caso que pode acontecer, é pela ordem do script, como no exemplo:
  • Code Lua

    1
    2
    print(test)
    test = "PAULMARQUES <3"
    No exemplo, vemos que primeiros tentar "printar" a variável test antes de ela ser inicializada, por isso ocasionar o erro, para concertar é bem fácil, basta mudar a ordem como no exemplo:
    Code Lua

    1
    2
    test = "PAULMARQUES <3"
    print(test)
  • Outro exemplo é quando você tenta chamar uma variável incorretamente, já que lua é case sensitive digitar o nome de uma função incorretamente pode ocasionar problemas não esperados, como no exemplo:
  • Code Lua

    1
    Print("I WANT YOU BOY")
    Vemos que a função Print é tentada ser chamada, mas ela não existe na documentação original do lua, já que como é case sensitive o correto seria print, como no exemplo:
    Code Lua

    1
    print("I WANT YOU BOY")

Index expected, got nil.
  • Acontece quando você tenta definir ou chamar um item de uma tabela que não existe, exemplo:
  • Code Lua

    1
    tbl[1] = "MEOW"
    Podendo ser corrigido inicializando a tabela tbl, como é mostrado abaixo:
    Code Lua

    1
    2
    tbl = {}
    tbl[1] = "MEOW"
    Outra forma seria usar o table.insert:
    Code Lua

    1
    2
    tbl = {}
    table.insert(tbl, "MEOW")

')' expected (to close '(' at line [num])
  • Ocorre quando uma função não é fechada corretamente, como o print:
  • Code Lua

    1
    print("OI
    Como é possível ver, é necessário fechar a função com ')' no final, veja:
    Code Lua

    1
    print("OI")

'??' expected.
  • Um erro que pode ser causado por vários motivos, talvez você tenha esquecido de colocar um then em uma condição ou como no exemplo usar um elseif sem ter um if definido anteriormente:
  • Code Lua

    1
    2
    3
    elseif 1 > 2 then
    print("daredevil > glados")
    end
    Sendo rapidamente concertado tirando o 'else' e deixando simplesmente 'if'.

Multiple points.
  • Só é possivel que números decimais tenham um ponto decimal, tentar usar mais de um vai ocasionar o erro, o exemplo abaixo está incorreto:
  • Code Lua

    1
    print(12.24.42)
    Mas no abaixo já está correto:
    Code Lua

    1
    print(12.24424)

Unfinished (long) comment/string.
  • Ocorre quando algum comentário usando o operador de múltiplas linhas [[..]] não está fechado corretamente, como no exemplo:
  • Code Lua

    1
    --[[ Esse é um comentário que não está fechado
    Nesse caso, você só precisa incluir o ']]' no final da linha:
    Code Lua

    1
    2
    --[[ Esse é um comentário corretamente fechado
    ]]--

Nesting of [[...]] is deprecated.
  • Strings/comentários de múltiplas linhas não pode dentro de si outras strings de múltiplas linhas, como:
  • Code Lua

    1
    --[[ 1 [[ 2 [[ 3 ]] ]] ]]

    Remova os '[[ ... ]]' do comentário principal e se for necessário apenas quebre a linha:
    Code Lua

    1
    2
    3
    4
    --[[ 1
    2
    3
    ]]

Attempt to index ? (a nil value)
  • Ocorre quando um elemento de uma tabela é chamado, mas não existe dentro do contexto da tabela, exemplo:
  • Code Lua

    1
    2
    tbl  = {}
    print(tbl[1])
    Para isso, você pode criar o elemento dentro do contexto da tabela:
    Code Lua

    1
    2
    tbl = {"ECZISTE"}
    print(tbl[1])
Attempt to concatenate [tipo de dado] and [tipo de dado]
  • Ocorre ao tentar concatenar (usando o operador ..) dois tipos diferentes de dados, exceto com strings e números.
  • Code Lua

    1
    print("olá "..{})
    Nesse caso ao tentar concatenar uma string com uma tabela, acontece esse erro.

Invalid key to 'next'
  • Ocorre ao tentar remover um valor de uma tabela enquanto você itera sobre ela.
    Code Lua

    1
    2
    3
    4
    5
    tabela = {chave = "valor", chave2 = "valor", chave3 = "valor"}

    for k in pairs(tabela) do
    tabela[k] = nil
    end

Attempt to perform arithmetic [operação] on a [tipo de dado] value
  • Ocorre ao tentar fazer operações matemáticas em tipos de dados que não são números.
    Code Lua

    1
    print("oi" + {})

Attempt to compare [tipo de dado] with [tipo de dado]
  • Ocorre ao tentar comparar tipos de dados diferentes.
    Code Lua

    1
    2
    3
    if "oi" > 12 then
    print("Erro :o")
    end

[tipo de dado] expected, got [tipo de dado]
  • Ocorre quando um determinado tipo de dado é esperado por uma função mas outro tipo é fornecido.
    Code Lua

    1
    table.insert(13, "oi")
    O table.insert espera como primeiro argumento uma tabela, mas nesse exemplo é dado um número que ocasiona esse erro.

Lua destroyed : Runtime can't exceed 40 ms in 4 seconds !
  • Ocorre quando muita coisa é feita em pouco tempo.
    Code Lua

    1
    2
    3
    4
    5
    6
    function eventLoop()
    for i 1, 10000000 do
    -- Loop muito grande que é executado
    -- a cada 500 milissegundos
    end
    end

Lua destroyed: Runtime too long!
  • Ocorre ao fazer blocos de código que demoram muito para serem executados por completo.
    Code Lua

    1
    2
    3
    for i=1,10000000000 do
    -- Isso causa esse erro
    end
Argument must be integer
  • Ocorre quando é esperado que um parametrô de uma função é esperado um número inteiro, mas recebe outro tipo de valor, como:
  • Code Lua

    1
    tfm.exec.movePlayer(name, "text", 24)
    Neste caso é esperado que o segundo parametro seja um inteiro que representaria o novo y do jogador, mas está sendo dado uma string no seu lugar.

Argument must be integer
  • Ocorre quando um argumento não é do tipo esperado.


? : argument n can't be NIL.
  • Ocorre quando você dá um valor nil ao parâmetro de uma função, exemplo:
  • Code Lua

    1
    tfm.exec.movePlayer("Brenower", 5, nil, true)
    Para corrigir é apenas atribuir um valor no lugar de nil:
    Code Lua

    1
    tfm.exec.movePlayer("Brenower", 5, -10, true)

vm error: java.lang.ArrayIndexOutOfBoundsException: 256

  • Um erro que pode ser causado por vários motivos, mas é mais comum quando algo ocorre infinitamente. Como exemplo uma função que se auto chama-se
Code Lua

1
2
3
4
function chamar()
chamar()
end
chamar()
Como podemos ver no exemplo a função chamar() vai sempre estar ser chamada e o script não vai conseguir prosseguir, já que a função não pode ser parada para dar o prosseguimento.
You don't have the right to use this function.
  • Ocorre quando você tenta rodar algum script com uma função não permitidas nos cafofos, como:
  • Code Lua

    1
    system.savePlayerData("Brenower", "mdl=0,0,I LOVE U")
  • Modules podem essas funções não permitidas mesmo no cafofo, desde que ele seja rodado usando o /module [name]


You can't call this function [função] more than once per 1 minute.
  • Ocorre quando você tenta chamar a mesma função mais de uma vez em menos de um minuto.
  • Code Lua

    1
    2
    system.loadFile(0)
    system.loadFile(0)
  • OBS: O código acima não funciona no cafofo da tribo.

You can't call this function [tfm.exec.newGame] more than once per 3 seconds.
  • Ocorre quando você tenta chamar o tfm.exec.newGame várias vezes em menos de três segundos.
  • Code Lua

    1
    2
    3
    function eventLoop(elapsed, remaining)
    tfm.exec.newGame(0)
    end

Louca
« Censeur »
1487085000000
    • Louca#2984
    • Profil
    • Derniers messages
#2
  0
Bom tópico!
Hydroper
« Citoyen »
1487110500000
    • Hydroper#0528
    • Profil
    • Derniers messages
    • Tribu
#3
  0
Solução para Invalid key to 'next' (na real esse erro nem existe)

Exemplo
Code Lua

1
2
3
4
5
6
7
8
local env_next = next;

while (true) do
local k--[=[, v]=] = env_next(tabela);
if (not k) then break end;

-- [...] Objetivo
end

Dernière modification le 1487111280000
Laagaadoo
« Citoyen »
1487117760000
    • Laagaadoo#0000
    • Profil
    • Derniers messages
    • Tribu
#4
  0
Profiver a dit :
Solução para Invalid key to 'next' (na real esse erro nem existe)

Exemplo
Code Lua

1
2
3
4
5
6
7
8
local env_next = next;

while (true) do
local k--[=[, v]=] = env_next(tabela);
if (not k) then break end;

-- [...] Objetivo
end

É só usar ipairs no lugar de pairs, e existe sim, tente usar table.remove dentro de um loop pairs.

Dernière modification le 1487117820000
Hydroper
« Citoyen »
1487118900000
    • Hydroper#0528
    • Profil
    • Derniers messages
    • Tribu
#5
  0
Laagaadoo a dit :
Profiver a dit :
Solução para Invalid key to 'next' (na real esse erro nem existe)

Exemplo
Code Lua

1
2
3
4
5
6
7
8
local env_next = next;

while (true) do
local k--[=[, v]=] = env_next(tabela);
if (not k) then break end;

-- [...] Objetivo
end

É só usar ipairs no lugar de pairs, e existe sim, tente usar table.remove dentro de um loop pairs.

O ipairs() retorna uma função que lê as chaves índices de uma tabela. table.remove() também serve para remover campo por chave indíce, ou seja, pouco irrelacionado ao caso de tabela[k] = nil (ou rawset(tabela, k)).

Dernière modification le 1487119080000
Laagaadoo
« Citoyen »
1487119980000
    • Laagaadoo#0000
    • Profil
    • Derniers messages
    • Tribu
#6
  0
Profiver a dit :
Laagaadoo a dit :
Profiver a dit :
Solução para Invalid key to 'next' (na real esse erro nem existe)

Exemplo
Code Lua

1
2
3
4
5
6
7
8
local env_next = next;

while (true) do
local k--[=[, v]=] = env_next(tabela);
if (not k) then break end;

-- [...] Objetivo
end

É só usar ipairs no lugar de pairs, e existe sim, tente usar table.remove dentro de um loop pairs.

O ipairs() retorna uma função que lê as chaves índices de uma tabela. table.remove() também serve para remover campo por chave indíce, ou seja, pouco irrelacionado ao caso de tabela[k] = nil (ou rawset(tabela, k)).

Ao rodar o código provido no tópico sobre esse erro:
http://image.prntscr.com/image/239c92c74b374d5980f87fa56fdb8783.png
Ao usar o mesmo código, porém com ipairs:
http://image.prntscr.com/image/21ce6210465a4c19bc519422fa0136fb.png
Hydroper
« Citoyen »
1487195400000
    • Hydroper#0528
    • Profil
    • Derniers messages
    • Tribu
#7
  0
Laagaadoo a dit :
Profiver a dit :
Laagaadoo a dit :
Profiver a dit :
Solução para Invalid key to 'next' (na real esse erro nem existe)

Exemplo
Code Lua

1
2
3
4
5
6
7
8
local env_next = next;

while (true) do
local k--[=[, v]=] = env_next(tabela);
if (not k) then break end;

-- [...] Objetivo
end

É só usar ipairs no lugar de pairs, e existe sim, tente usar table.remove dentro de um loop pairs.

O ipairs() retorna uma função que lê as chaves índices de uma tabela. table.remove() também serve para remover campo por chave indíce, ou seja, pouco irrelacionado ao caso de tabela[k] = nil (ou rawset(tabela, k)).

Ao rodar o código provido no tópico sobre esse erro:
http://image.prntscr.com/image/239c92c74b374d5980f87fa56fdb8783.png
Ao usar o mesmo código, porém com ipairs:
http://image.prntscr.com/image/21ce6210465a4c19bc519422fa0136fb.png

Sim, mas ipairs() é outro assunto. ipairs() retorna uma função que lê chaves "índices", começa do 1, vai para o 2, 3, 4, e assim por diante... até que o valor resultado dessa chave indíce seja nil ou -nan (valores que são ignorados como campos de tabelas).

Agora estou falando sobre o caso de chaves não indíces, fora de uma sequência. Por exemplo, ` 2 `, ` 'blah' `, ` 0 `, ` true `, etc...
Ninguem
« Consul »
1487504220000
    • Ninguem#0095
    • Profil
    • Derniers messages
    • Tribu
#8
  0
Essa tua solução vale somente para uma ocorrência na tabela. Caso seja necessário encontrar todas as ocorrências o mais correto é listar numa tabela auxiliar os índices e depois trabalhar com eles em outro loop.
Hydroper
« Citoyen »
1487508120000
    • Hydroper#0528
    • Profil
    • Derniers messages
    • Tribu
#9
  0
Ninguem a dit :
Essa tua solução vale somente para uma ocorrência na tabela. Caso seja necessário encontrar todas as ocorrências o mais correto é listar numa tabela auxiliar os índices e depois trabalhar com eles em outro loop.

Sim, essa solução é tipo para ir removendo todos os campos depois de ler. Eu não tinha pensado muito bem, mas sim, o que você fala faz total sentido.

A tabela pode ser refeita se ela não for muito referenciada, então minha solução pode não ser muito precisa.
Eletroluxxx
1491686520000
    • Eletroluxxx#0000
    • Profil
    • Derniers messages
    • Tribu
#10
[Modéré par Excasr, raison : Bom dia. Reclamações de modules devem ser levadas para os criadores do module, ao invés deste tópico.]
Pikabibi
« Citoyen »
1500591780000
    • Pikabibi#0000
    • Profil
    • Derniers messages
    • Tribu
#11
  0
Falta um erro: o Init Error: Unexpected Symbol
Ruamorangos
« Citoyen »
1502807640000
    • Ruamorangos#0000
    • Profil
    • Derniers messages
#12
  0
bad argument: number expected, got function

??
Ninguem
« Consul »
1502811000000
    • Ninguem#0095
    • Profil
    • Derniers messages
    • Tribu
#13
  0
Ruamorangos a dit :
bad argument: number expected, got function

??

Algum lugar espera que voce forneça um número, mas você está fornecendo uma função.
F0lzer
« Citoyen »
1504913280000
    • F0lzer#4502
    • Profil
    • Derniers messages
#14
  0
meu codigo nao funfa e tenho os requisitos..
Fofinhoppp
« Consul »
1505948880000
    • Fofinhoppp#0000
    • Profil
    • Derniers messages
    • Tribu
#15
  0
Trovaodouu a dit :
meu codigo nao funfa e tenho os requisitos..

Se não falar o erro também não vai ajudar em nada amigo
Fely
« Citoyen »
1522108140000
    • Fely#9117
    • Profil
    • Derniers messages
#16
  0
Fofinhoppp a dit :
Trovaodouu a dit :
meu codigo nao funfa e tenho os requisitos..

Se não falar o erro também não vai ajudar em nada amigo

Ele quis dizer que quando coloca script não entra
Bloom
« Héliaste »
1544546580000
    • Bloom#6766
    • Profil
    • Derniers messages
#17
  0
Ótimo tópico!
Ayeeelmaoooo
1569185820000
    • Ayeeelmaoooo#0000
    • Profil
    • Derniers messages
    • Tribu
#18
[Modéré par Naiyme, raison : Racismo;]
Arthur107
« Consul »
1612582980000
    • Arthur107#1925
    • Profil
    • Derniers messages
    • Tribu
#19
  0
erro Script

adm="Arthu107" --<-- Coloca teu nick em "Admin"

tfm.exec.newGame("#1")
eventKeyboard=table.foreach({32,80},function(_,k) system.bindKeyboard(adm,k,true,true) end) or function(n,k)
if cmd == "sha" then

tfm.exec.setShamanMode ( jogador, modo )
Local Map = {"@7828429"
end
end

system.disableChatCommandDisplay("sha")
Gamedroit
« Citoyen »
1614026700000
    • Gamedroit#3347
    • Profil
    • Derniers messages
    • Tribu
#20
  0
Arthur107 a dit :
erro Script

adm="Arthu107" --<-- Coloca teu nick em "Admin"

tfm.exec.newGame("#1")
eventKeyboard=table.foreach({32,80},function(_,k) system.bindKeyboard(adm,k,true,true) end) or function(n,k)
if cmd == "sha" then

tfm.exec.setShamanMode ( jogador, modo )
Local Map = {"@7828429"
end
end

system.disableChatCommandDisplay("sha")

eventKeyBoard é disparado quando um jogador pressiona uma tecla, o correto para este seria eventChatCommand.

Code Lua

1
2
3
4
5
6
7
8
9
local admin = "Arthu107#1925"

eventChatCommand = function(name, command)
if (command == "sha") then
tfm.exec.setShaman(name)
end
end

tfm.exec.newGame("#1")
Fiz pelo celular, bom, é só um exemplo, quem digitar no chat "!sha" vai se tornar um shaman.

Para ressaltar, este não me parece o tópico certo para pedir ajuda em relação a isso, o seu código contém erros nas linhas 9 e na linha 10 além disso eventKeyboard recebe (nome, chave, estaPressionada, x, y) como argumento. Também verifique as regras da linguagem, "local" é uma palavra-chave que serve para declarar uma variável local, ou seja, inacessível fora daquele escopo, "Local" é um identificador que neste caso não foi declarado e mesmo se fosse não poderia ser utilizado desta maneira.

Dernière modification le 1614026760000
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Lua] Erros Frequentes
© Atelier801 2018

Equipe Conditions Générales d'Utilisation Politique de Confidentialité Contact

Version 1.27