Ir para conteúdo
  • 0

Pergunta

Bem pessoal, comecei a aprender Lua essa semana e estou com dúvidas:

 

- Ainda não entendi pra que serve o comando return (sejam claros na hora de explicar por favor, não se esqueçam que sou um scripter iniciante).

- Notei que em todos os scripts, ao declarar a função tem que colocar os parâmetros dentro dos parênteses, como vou saber que parâmetros colocar?

 

Exemplo:

function onUse(cid, item, frompos, item2, topos)

 

Como o cara que fez esse script sabia que os parâmetros que ele tinha que colocar são "cid, item, frompos, item2, topos"? E se ele colocasse outros parâmetros? E se ele mudasse a ordem dos parâmetros? Afinal, pra que servem os parâmetros da função e como saber quais parâmetros colocar no script?? Obrigado!!

Editado por WillOliveira
Link para o comentário
https://xtibia.com/forum/topic/197972-d%C3%BAvida-de-scripter-iniciante/
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

CARA A FUNÇAO QUE VC CITOU function onUse(cid, item, frompos, item2, topos) É UMA FUNÇAO EXECULTADA EM QUASE TODA ACTION NO CASO FUNCTION ONUSE SIGNIFICA APOS USAR ALGUM ITEM// E CID = O PLAYER QUE ESTA USANDO O ITEM// ITEM E ITEMEX SAO OS IDS DO ITEM QUE SERAO USADOS //FROM POSOTION E TOPOSITION É AS POSIÇOES QUE A ACTION ACONTECERA.

INTAO ESSA FUNÇAO SIGNIFICARIA (QUANDO O PLAYER "X" USAR "X" ITEM EM "X" POSIÇAO ACONTECERA "X" COISA.

 

NAO SEI SE EXPLIQUEI BEM MAIS É ISSO.

 

VLW SHADOWNZINHO

Link para o comentário
https://xtibia.com/forum/topic/197972-d%C3%BAvida-de-scripter-iniciante/#findComment-1378346
Compartilhar em outros sites

  • 0

Esse é o problema, já vi functios onUse com parâmetros diferentes desse... Por exemplo: function onUse(cid, item1, fromPosition, itemEx, toPosition), os parâmetros são os mesmos mas escritos de forma diferente, tipo, (???)

Editado por WillOliveira
Link para o comentário
https://xtibia.com/forum/topic/197972-d%C3%BAvida-de-scripter-iniciante/#findComment-1378360
Compartilhar em outros sites

  • 0

return acaba o a função e retorna os valores que vem depois dele

exemplo:

function getkkk()
return "sauhasuhsasahu" -- retorna essa string
end
print(getkkk())

printaria : sauhasuhsasahu

 

e quanto as funções como onUse o nome dos parametros n muda nada a ordem e sem pre a mesma,vc poderia colocar

on Use(item1,item2,item3,item4,item5)

item1 seria o cid do player

item2 seria o item(n o itemId)

item3 seria o frompos(da onde foi usado)

item4 seria o itemEx (objeto em que foi usado item ou creatura)

item5 seria o topos(a onde o player clico com aquela mirinha)

 

o nome dos parametros n importa,só onde eles estão poderia ser

onUse(qualquercoisa,kk,demonb,vodkart,ali)

vc só precisar usar com o mesmo nome depois

Link para o comentário
https://xtibia.com/forum/topic/197972-d%C3%BAvida-de-scripter-iniciante/#findComment-1378371
Compartilhar em outros sites

  • 0

primeira coisa que você precisa saber pra entender esse meu tutorialzinho, é que tudo que é antecedido por "--" (dois traços) no script é um comentário, e não é lido pelo servidor, servem apenas para auxiliar os programadores a entenderem o que o código faz

 

isso você entende quando você estuda o código fonte do seu servidor, lua é apenas um sistema de scripting, algo auxiliar que você consegue manipular sem ter que recompilar o servidor.

 

function onUse(p1, p2, p3, p4, p5)

 

percebe que chamei os parâmetros de p1 até p5, o que o código em c++ faz quando vai ler esse script, é declarar o p1 como o ID da criatura que está usando o item, p2 como as informações sobre o item usado, p3 sobre a posição e assim vai, o outro usuário postou o que cada parâmetro faz. Resumindo, o código seria lido assim:

 

function onUse()

local p1 = ID_DA_CRIATURA

local p2 = TABELA_COM_INFO_DO_ITEM

local p3 = POSICAO_DA_CRIATURA

 

você não precisa declarar todos os parâmetros, mas se não o fizer, também não vai ser declarado aquele parâmetro pra ser usado no script

 

você poderia fazer assim:

 

function onUse(_, __, ___, ____, _____)

 

o problema é que o código ia ficar difícil de ser lido por humanos, por exemplo:

 

 

  Mostrar conteúdo oculto

 

 

fica muito mais fácil de ser lido assim (o mesmo código):

 

 

  Mostrar conteúdo oculto

 

 

O fato de ser sempre "cid, item, frompos, item2, topos" ou então "cid, item, fromPosition, itemEx, toPosition" é mera convenção, o primeiro é apenas abreviação do segundo (não tem que ficar digitando as coisas com letra maiúscula e os nomes são menores e mais rápidos de se escrever)

 

cid = creature id

 

frompos = fromPosition

 

topos = toPosition

 

item2 = itemEx (itemEx é o item que você escolhe com o "use with" do tibia, por exemplo, você usa a corda, e com aquele negócio de selecionar você aperta em cima do buraco, assim o buraco é o itemEx)

 

O uso do return é o seguinte:

 

toda e qualquer função em lua retorna algum valor, mesmo se você não escrever return <algo>, a função vai retornar null.

 

primeira coisa a se entender de return, é que ele para de executar a script, um exemplo de como pode ser útil em tornar scripts mais fáceis de serem lidas:

 

Sem uso do return:

 

 

  Mostrar conteúdo oculto

 

 

 

  Mostrar conteúdo oculto

 

 

Você pode até estar pensando que isso apenas aumentou o tamanho da script, mas em scripts muito longas, em que se abre muitos ifs dentro de ifs, fica chato de ler, exemplo:

 

 

  Mostrar conteúdo oculto

 

 

Ficou chatinho de ler, certo? isso porque foi identado, agora um script sem identeção nenhuma (não há espaços que separam os blocos dentro dos ifs) fica impossível de ler, olhe dessa outra forma:

 

 

  Mostrar conteúdo oculto

 

 

Agora saber qual valor colocar após o return, é uma questão de prática. Daqui a pouco vou mostrar seu uso em funções e algoritmos, mas em eventos pré-estabelecidos no código fonte (como function onUse, onSay, onStepIn), o servidor lê o que está escrito no seu script, e dependendo do valor que você retornar para o servidor, ele vai tomar uma determinada ação.

 

Os caras que programaram o código fonte, fizeram com que se o que você retornou for uma condição verdadeira, nada vai acontecer, mas se for uma condição falsa, vai aparecer "You cannot use this object." no cliente.

 

Quando eu digo condição verdadeira/falso, você tem que ter em mente os data types:

 

strings sempre são verdadeiros, ou seja, se você escrever return "olá", não vai aparecer "You cannot use this object."

 

números são basicamente a mesma ideia, sempre são verdadeiros, a diferença é que em c++, linguagem nativa do seu server, false é a mesma coisa que 0 e true é a mesma coisa que 1, portanto return 0 = return false, e return 1 = return true, qualquer outro número (se não me engano) também será considerado como return true.

 

true é verdadeiro e false é falso.

 

Olha suas diferentes utilidades em certos eventos:

 

 

  Mostrar conteúdo oculto

 

 

o resto você vai descobrindo por conta própria, agora uma função com return ue é boa como exemplo é o doPlayerRemoveMoney:

 

 

  Mostrar conteúdo oculto

 

 

Outro exemplo de return, mas dessa vez em uma função que não foi feita em lua, mas sim em c++, a doCreateMonster:

 

essa função retorna o unique id (mesma coisa que cid) do monstro criado:

 

 

  Mostrar conteúdo oculto

 

Editado por brun123
Link para o comentário
https://xtibia.com/forum/topic/197972-d%C3%BAvida-de-scripter-iniciante/#findComment-1378516
Compartilhar em outros sites

  • 0

não, em lua, única coisa que é considerado falso é nil, null e false.

em c++, o data type boolean, vai de 0 a 1, é como se fosse um int, só que o range do int é muito maior.

0 é expressado como false e 1 é expressado como true

 

qualquer número/string em lua é considerado verdadeiro

Link para o comentário
https://xtibia.com/forum/topic/197972-d%C3%BAvida-de-scripter-iniciante/#findComment-1378641
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...