Ir para conteúdo
Entre para seguir isso  
MotoBoy

Vamos Fazer Uma Coletania de Erros

Recommended Posts

MotoBoy    0
MotoBoy

Bom pessoal.. tomei a iniciativa de criar um topico, para que nós possamos fazer nossa própria lista de erros bobos cometidos na hora do script

Vai funcionar assim:

cada um posta aqui um erro bobo que vê muitas pessoas cometendo o tempo todo em scripts..

assim quem comete um dos erros bobos contidos na lista.. deixa de cometê-los ^^

Para dar o exemplo, eu vou começar..

tentem seguir o padrão okz?

Importante: Não repitam erros postados anteriormente para o topico não ser fechado por flood!!!!

-------------------> aí vai o meu

já vi muitas pessoas colocando textos em scripts sem as "aspas"..

todo texto em script qualquer tem que estar entre aspas!

principamete nas tabelas..

 

pessoal.. não quebrem a corrente.. =P postem para que os outros possam aprender com seus erros!!:style:

Flws~~

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mock    32
Mock

Um erro super comun que ATE EU COMETO!

e direto para se ter noção XD

1º erro

Abrir um if e nao por end

2º erro

Abrir uma função: do~(cid,lol,"xD"

ou seja ja fechar o parenteses

3º erro

fazer isso:

if 1+2 == 4 then

esle

doCoisas(cid)

end

ou seja ao inves de por

if 1+2 ~= 4 then

doCoisas(cid)

end

eu fasso algo maior

3º erro (nao é um erro mais se comete demais [eu fasso isso D+++²])

if alguma_coisa1 == 7 then

doCoisasSux(cid)

else

if alguma_coisa1 == 6 then

doCoisasRox(cid)

else

if ~ e assim continua

end

end

pode ser

Mais facil assim:

if alguma_coisa == 1 then

doCoisasSux(cid)

elseif alguma_coisa == 2 then

doCoisasRox(cid)

...

end

4º erro (pode nao ser um erro mais uma MANIA ANTIGA)

eu brigo com todomund oq faz isso XD

vai la no actions.xml e poe p exeuctar o sscript AHAHA.lua no uiniqueid 1234

ai vai la no map editor poe uma alavanca com uid 1234

ai antes de iniciar o script ele poe:

if item.uid == 1234 then

COISAS(cid)

else

doPlayerSendCancel(cid,"algo esta errado")

end

isso ai e inutil pq vc define o uid no actionx.xml e o scritp so vai ser executado pelo uid 1234 n presia por. agora caso vc ponha 2 uids no mesmo script e queira usar funçoes diferentes ai e bom usar isso :P

 

Espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites
MotoBoy    0
MotoBoy

valeu a contribuição Mock =P

espero que todos ajudem o tópico ^^

 

esta é mais uma dica doque um erro..

existem muitos erros como:

ao invez de:

doCreatureAddHealth

colocam

doPlayerAddHealth

 

muitas vezes, palavrassão trocadas nas funções.. principalmente Creature e Player..

então tenha sempre um alista de funções ao seu lado para fazer scripts ^^

 

mais um: toda função tem um return x.x seja ela a função primária (onUse, onStepIn, onSay etc..) quanto as funções que você faz no script: function entregarPizza (param)..

todas tem um return..

sem exceções ^^

 

mais uma vez, obrigado Mock ^^

 

flws~~

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mock    32
Mock

todas tem um return mais tem gente que nao poe :P

se na função onuse vc por return vai executa a ação de boa, se vc NAO poe va executar d boa so q vai aparecer pro player q ele n pode executar akilo ago assim :P

 

Outro erro:

pos1 = {x=1,y=2,z=7}

efect = 2

playerpos = getPlayerpositition(cid)

level = getPlayerlevel(cid)

msg1 = "LOL"

msg2 = "XDDDDD"

msg3 = "omg"

.

.

.

ai o script so usa essas variaveis 1 vez.

ou seja pq nao inseri-las direto

doSendMagicEffect({x=1,y=2,z=7},2)

ou:

doPlayerSendCancel(cid,"XDDD")

se vc declara q X = "xD" entao X É IGUAL A "XD" SEM ESSEÇÃO!

ou seja se vc fala:

X = "XD"

doPlayerSendMessage(cid,X)

e a mesma coisa que:

doPlayerSendMessage(cid,'XD')

 

agora caso vc fassa algo assim:

 

doPlayerSendMessage(cid,'XD')

doPlayerSendMessage(cid,'XD')

doPlayerSendMessage(cid,'XD')

doPlayerSendMessage(cid,'XD')

doPlayerSendMessage(cid,'XD')

 

Ai caso vc seje economico ao EXTREMO fica melhor vc fazer isso:

X = "XD"

doPlayerSendMessage(cid,X)

doPlayerSendMessage(cid,X)

doPlayerSendMessage(cid,X)

doPlayerSendMessage(cid,X)

..

([{PS: lembrando que em lua A é difernete de a como B e diferente de B}])

 

Como sempre caso vc queira repetir a ação 45 vieses como vc faz isso o0

vc n vai fazer um script com 45 linhas e so fazer isso:

veses = 1 -- presisa disso :P

repeat

suaFunçãoAserRepetida(cid)

veses = veses-1

until veses == 0

ai se vc por veses como 45 essa função dentro do until vai ser executada 45 veses xD

so cuidado com a função repeat pq e facil criar loops interminaveis q fara seu server ficar travado p sempre ou ate q alguem va e feche ele

Compartilhar este post


Link para o post
Compartilhar em outros sites
MotoBoy    0
MotoBoy

@Mock. obrigado mais uma vez ^^

agora.. sobre esta de o script só sa-las uma vez..

isso não pode ser concertado com um local na frente da variável? x.x

 

ou seja.. se eu declarar a variavel no começo do script ela vai ser usado uma vez.. e então na segunda vez o script buga? O.o

não entendi essa de ser usada só uma vez =P

 

flws~~

Compartilhar este post


Link para o post
Compartilhar em outros sites
ultimatearmor    0
ultimatearmor

Gostei da parte do return que eu não sabia. Bom posso ser iniciante mais tamb´´em tenho dica:

 

ao abrir um if coloque end já e vá apertando enter para você não esquecer do end. Isso é boa pratica de programação ( no caso scripting) ex:

 

DICA 1 de 2

if end

 

if lol == TRUE then

end

 

if lol == TRUE then

doplayesay

end

 

Dica 2 de 2

quando for fazer scripts organize-os, de espaços para melhor entendimento da função. Não entendeu nada? Eu também não então vamos ao exemplo

 

function onStepIn(cid, item, pos)

if getPlayerPosition(cid) == {x=1000, y=1000, x=7} then

doPlayerAddHealt(cid, 2000)

doPlayerSendTextMessage(cid, 22, "Parabens ganhou vida")

end

end

Aqui é uma função comum so que mal organizada, procure da espaço apra melhor entendimento, eu explciarei como. Essee é o exemplo certo:

 

8 espaços function onStepIn(cid, item, pos)

8 espaços if getPlayerPosition(cid) == {x=1000, y=1000, x=7} then

10 espaços doPlayerAddHealt(cid, 2000)

10 espaços doPlayerSendTextMessage(cid, 22, "Parabens ganhou vida")

4 espaços end

nenhum espaço end

 

bom na função (onUse, onStepIn ou em qualquer outra) se dá 8 espaços e na estrutura de controle também( if no caso) e nos comandos do, get, set ou qualquer outro se dá 10 espaços. Se tiver dois ends o primeiro vocÊ dá 8 espaços, o segundo 4 espaços e o terceiro nenhum espaço.

Mas porque eu coloquei dois ends se so tem um if? Para fechar a função onStepIn, onUse... Espero que tenham entendido

tchau tchau e gostei da sua ideia desse topico MotoBoy.

Editado por ultimatearmor

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mock    32
Mock

@ultimate

Se eu nao me engano e um topico de erros nao de dicas o0

mais msmo assim vlw :P

 

@topic

antes de usar uma variavel nunca fassa isso:

mensagem = "lol"function onUse(cid~)

doPlayerSendMessage(cid,22,mensagem)

end

fassa assim:

function onUse(cid~)

mensagem = "lol"

doPlayerSendMessage(cid,22,mensagem)

end

ou

local mensagem = "lol"

function onUse(cid~)

doPlayerSendMessage(cid,22,mensagem)

end

 

pq ser vc n por local ou dentor da função se vc abrir um movement e poe esse mesmo mensagem so que sem declara-lo ele ira sair como o valor que contem no action :P

Compartilhar este post


Link para o post
Compartilhar em outros sites
MotoBoy    0
MotoBoy

@ultimatearmor...

brigado x.x

vou usar seu prórpio exemplo para fazer este post.. não se ofenda.. acontece ^^

 

bom.. como todos devem concordar x.x

quanto menos "end" no final do script é melhor ^^

fica menor e mais bonito =P

então para que todos saibam, os "or" e os "and" no script, devem ser usados.. podem abusar =D ex:

 

ao invéz de:

[b]if getPlayerStorageValue (1234) == 1 [color=red]then[/color][/b]
[b][color=#ff0000]if getPlayerLevel >= 30 then[/color][/b]
[b][color=black]doVáriasCoisas (cid)[/color][/b]
[b][color=red]end[/color][/b]
[b][color=#ff0000]end[/color][/b]

 

pode ser usado apenas 1 end..

em alguns casos que vi, era necessário apenas 1 end.. mais tinha 10 no fim (um script que eu vi quando eu tava começando ^^)

assim:

 

[b]if getPlayerStorageValue (1234) == 1 [color=red]and getPlayerLevel >= 30 then[/color][/b]
[b][color=black]doVáriasCoisas[/color][/b]
[b][color=red]end[/color][/b]

 

não é um erro pois o script funciona do mesmo jeito.. mais é um jeito melhor de se fazer ^^

a mesma coisa para os "or"

ao invez de:

[b]if getPlayerStorageValue == 1 then[/b]
[b]do coisas[/b]

[b]elseif getPlayerLevel >= 5 then[/b]
[b][color=red]do as mesmas coisas que o de cima[/color][/b]

 

não vai mudar nada nos ends pq elseif nao tem end!!!!!!!!!

mais fica mais organizado assim:

[b]if getPlayerStorageValue == 1 [color=red]or getPlayerLevel >= 30 then[/color][/b]
[b][color=#ff0000]do coisas uma vez só ^^[/color][/b]
[b][color=black]end[/color][/b]

 

 

brigado pela atenção pessoal ^^

 

espero que tenham intendido!!

 

Os "and" e "or" podem ser usados quantas vezes você quiserem.. mesmo em uma só função.. sem limites ex:

if PlayerDie and PlayerRessucita and PlayerViraFantasma and Todo MundoFicaComMedo then

setPlayerOutfit (ghost)

and

 

flws~~

 

MotoBoy!!

Editado por MotoBoy

Compartilhar este post


Link para o post
Compartilhar em outros sites
evolutions    0
evolutions

e tambem podemos usar o seguinte modo:

function doAddHealthByName(cid, name)

if (getPlayerName(cid) == name) then

doCreatureAddHealth(cid, 25)

else

return FALSE

end

 

function doAddHealthByName(cid, name)

return getPlayerName(cid) == name and doCreatureAddHealth(cid, 25) or FALSE

end

 

viram a diferença?

transformamos 6 linhas em 3 x)

Compartilhar este post


Link para o post
Compartilhar em outros sites
GDLib    2
GDLib

Erros que encontro só aqui nesse post:

1) Dizer que tabulação é erro e estipular um valor de espaçamento como regra 2) Não saber usar operadores ternarianos

3) Retornar funções diretamente

4) Ignorar ou omitir a existência do ";"

5) Tratar textos como strings em geral ignorando a existência de números, threads e userdatas

6) Criar condições inúteis com algorítimos nada pensados

7) Ignorar o fato de "void functions" afirmando com tanta certeza de que toda função tem retorno.

 

Lembremos então das funções recursivas. Sinceramente, se não possuem conhecimento suficiente para ensinar, não o façam, isso só irá gerar confusão entre os iniciantes que realmente querem aprender de forma correta. Entendo a proposta de vocês, mas existem milhares de erros nessa "coletânia de erros" que criaram.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Jonny249    0
Jonny249

Uma boa dica pra iniciantes que querem fazer scripts longos.

Preparem os scripts bem antes e se for fazer adicionais adicionem no inicio.

Para nao haver desorganizacao e vc soh precisar mudar em um lugar, e mesmo se for mudar em mais de um fica mais facil procurar.

Isso ajuda muito.

Falous

By Jonny~

Editado por Jonny249

Compartilhar este post


Link para o post
Compartilhar em outros sites
Nord    2
Nord

Meus erros mais comuns:

Começar um condicional (if, elseif...) e não colocar o then.

 

Trocar o do por then

Ex:

Errado: for i = 5, 10 then

Certo: for i = 5, 10 do

 

As vezes eu esqueço do .uid quando quero pegar o uid de um item com getThingFromPos ou getTileThingByPos.

 

Já trocava muito o return TRUE por return true.

Titio, o que muda???

R: As vezes em script como alavanca você quer que a alavanca vire sem fazer todos os condicionais novamente, é só colocar return true.

 

Vo dar apenas uma dicazinha aqui, se eu estiver errado me corrijam.

Troque isto:

function getFarofa(cid)
if getBlaBla(cid) == TRUE then
	return TRUE
else
	return FALSE
end
end

function getFarofa(cid)
if getBlaBla(cid) == TRUE then
	return TRUE
end
return FALSE
end

Esses dois modos funcionam da mesma forma, o último modo não vai retornar FALSE caso ele retorne TRUE antes.

Editado por Nord
Corrigir um erro de português.

Compartilhar este post


Link para o post
Compartilhar em outros sites
MotoBoy    0
MotoBoy

Desculpa Nostradamus..

mais aqui, este post é ara correção de erros..

se você os apontou, por favor, ajude-nos a por esta proposta asiante, por favor, corrija-os ^^

 

muitas das coisas que você falou ae nestes erros eu não entendi x.x

outras eu não sabia..

e outra eu não tinha percebido x.x

 

a proposta disto não é ensinar a ninguém NADA..

a proposta real, é só mostrar quais os erros bobos de Scripting...

 

Até porque ninguem aqui da aula de Lua..

ninguem aqui fez uma faculdade de lua

(talvez seja em exceção à você)

 

então ninguem aqui tem condição de ensinar nada. só estamos corrigindo..

se não temos condições de dar aula, pelomenos nós damos um jeito de passar adiante oque no minimo sabemos..

é bem melhor doque muitos que sabem e têm condições de dar aulas (como porexemplo o _Palmares, que apesar de ser um exceçente scripter, não passa para frente quase nada..)

 

estamos em nossa razão..

e não estamos ensinando..

só estamos TENTANDO ACABAR COM ALGUNS ERROS BOBOS..

 

sem ofenças Nostradamus.. porém você fez um post que não nos ensinou nem nos previniu de erro nenhum..

você apenas citou NOSSOS erros..

 

então sem ofensa alguma, porém você fez o contrario da proposta do nosso tópico..

 

flws~~ Pessoal obrigado pelo contibuição ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mock    32
Mock
function doAddHealthByName(cid, name)

if (getPlayerName(cid) == name) then

doCreatureAddHealth(cid, 25)

else

return FALSE

end

cara isso foi um erro vc dizer q n presisava do else

p começa a função ja ta errada...

ta mais pra

doAddHealthIfPlayerIdIsThePlayerName(cid,name)

o0

 

pq vc ta verificando se o id e igual ao player e n presisa, vc podeia ter posto assim:

function blablacla~(name)

if isPlayer(getCreatureByName(name)) == TRUE then

doCoisas...

else

return false

end

 

o return false e presiso pra:

if doFunção(cid) == TRUE then

DO coisas..

else

print("Não foi possivel")

end

se a unção da rturn em TRUE é pq ela executou perfeitamente se ela deu return en NIL (nada) ou false e pq deu algo errado com ela, cuidado pois o return o povo anula ele mais ele e asveses vital

Compartilhar este post


Link para o post
Compartilhar em outros sites
GDLib    2
GDLib

@MotoBoy

Para se corrigir um erro, deve se apontá-lo e mostrar a verdadeira circustância de como corrigir. Eu, ao corrigir seus erros, corrigi erros comuns provindos de vocês.

Se acha que eu não ajudo, que pena, isso só mostra que desconheçe a OTServ Wiki oficial. E, a propósito, dê uma olhada na seção de aulas, acabei de postar algo que foi fixado, garanto que lhe será útil.

 

Vocês podem estar acabando com erros bobos, mas quando o fazem, estão de alguma forma ensinando, e ensinando algo errado eu diria. Quando eu corrigi seus erros, eu indiretamente corrigi os erros apontados por vocês. Ao mesmo tempo em que corrigem alguns erros, geram outros. Esse foi o motivo de meu primeiro post.

Compartilhar este post


Link para o post
Compartilhar em outros sites
MotoBoy    0
MotoBoy

Desculpe Nostradamus, não quis me desfazer de nada que você disse..

eu captei tudo..

porém oque eu quis realmente dizer com este ultimo post..

é que você simplesmente apontou os nossos erros..

porém não os corrigiu..

poderia por favor fazê-lo?

pois eu não entendi e pouco conheço sobre as coisas que você falou...

se tivesse uma explicação, seria uma ótima deixa para eu aprender um pouco mais sobre scripting...

 

e eu não disse que seu post não ajudou...

ele ajudou sim.. eu gravei tudo que você deixou.. pois eu inda espero aprender spobre que você quis dizer =P

 

só esperava que houvesse algo a mais..

uma explicação..

com exemplos.. algo mais complexo

pois apenas apontar os erros.. não foi o bastante..

aposto que todos, sem exceção, ficaram boiando na maioria das coisas que você falou..

principalmente eu :S

 

só gostaria que você por favor ajudassse,, que pudesse explicar um pouco mais sobre qoue você falou..

 

desculpa.. não tive intensão nenhuma de ofender você muito menos de falar mal de seu trabalho...

até porque eu nunca vi alguem mexesse com lua melhor doque você..

se ofendi com alguma coisa que disse, eu o retiro..

obrigado ae por explicar oque ocorreu para não ficar nenhum clima de tensão entre nós..

até porque você concerteza não é alguem que se possa desprezar.. tanto seu trabaho quanto sua pessoa

espero que não tenha ficado nada sem resolução..

 

no mas.. obrigado ^^

 

@Mock..

eu procurei.. mais tpw..

com quem vc tava falando no seu ultimo postw?????? Oo

não achei quem postou essa função aew Oo

 

flws~~

Compartilhar este post


Link para o post
Compartilhar em outros sites
evolutions    0
evolutions

x) é mesmo agora que eu vi que ta errado mals aew,

eu fiz issu ai dois tempo e acabei me errando =/

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×