TP

Tutorial Sobre Arrays

Por Tprocheira, 23 de nov. de 2008 em Tutoriais de Scripting

tibia
script
otserv
27
8.5k
TprocheiraT
23 de novembro de 2008 às 17:46

Tutorial sobre arrays -- Nível Intermediário



Proibida a cópia não autorizada! Tutorial de minha autoria!

 

Olá a todos. Neste tutorial, ensinarei o básico sobre arrays.

 

Por que utiliza-la?

Maior organização, facilitando a 'manutenção' do seu script, deixando-o 'mais limpo' e carregando menos a CPU.

Exemplo:

É melhor usarmos:

{

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

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

{x=3, y=3, z=7}

}

do que:

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

local pos2 = {x=2, y=2, z=7},

local pos3 = {x=3, y=3, z=7}

Em outras palavras, ele vai, indiretamente, utilizar menos CPU.

Agradecimentos especiais aos usuários Rento e Cayan por darem uma explicação mais profunda sobre arrays

 

-Como utilizar?

As arrays tem uma sintaxe até que fácil de se entender, ficando no meio de duas chaves ({})

Na maioria dos casos, se usa da seguinte maneira:

{

'Orc',

'Orc Spearman',

'Orc Rider'

}

Agora, vamos analisar a sua estrutura.

 

{

Esse símbolo inicia a array.

 

'Orc',

Essa é uma variável dentro da array. Chamamos de variável pois ali poderia ter um Demon, Dragon, e até mesmo posições!

Ao final de uma variável, é colocada uma vírgula (,) indicando que existe outra variável após esta. Lembre-se sempre de colocar áspas ao citar nome de monstros. ('monstro')

 

'Orc Rider'

Nesta variável, da para perceber a falta da vírgula após a mesma. Isso significa que esta é a ultima variável da array.

 

}

Esse símbolo termina a array.

 

Agora, vamos a alguns exemplos (EBAA!!)

 

local position =

{

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

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

{x=3, y=3, z=7}

}

 

function onStepIn(cid, item, item2, position, fromPosition)

if isPlayer(cid) == TRUE and isInArray(position, TRUE) then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You are inside an array!")

end

end

O que este script faz: (Script deixado em negrito para maior visualização das cores)

Se o <a href='#' onClick="hwClick1535116586397(-137805199);return false;" style='cursor: hand; color:#006600; text-decoration:underline; border-bottom:dotted 1px;' onmouseover="hw1535116586397(event, this, '-137805199'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " oncontextmenu="return false;">player</a> estiver em alguma destas posições, ele manda a mensagem "You are inside an array!".

Agora, vamos analisar as partes. (vamos dar uma de novatos agora)

 

A parte em laranja é a nossa array.

A parte em vermelho é o início da nossa função. No caso, um moveevent.

A parte em preto é o corpo do script. Ai dentro, você coloca o que quiser :)

Notem que a função function onStepIn(cid, item, item2, position, fromPosition) funciona no The Forgotten Server, ajuste a mesma para a sua distribuição.

 

--Atualização ~ Parte avançada.

Agora, vamos aprender a trabalhar com tabelas (Arrays) de verdade, utilizando comandos, e identificando formas de ser retirar informações de uma array.

--Dando valor à uma variável de acordo com uma posição na tabela.

Você pode utilizar isso de várias maneiras no mundo de Open Tibia.

Vamos começar da forma mais simples.

Quando você for retirar uma informação de sua array, você tem que saber qual a posição daquela variável.

Exemplo:

local names = {"John", "Peter", "Ralph", "Mike"}

O nome John é o primeiro nome da tabela, sendo assim, ele é o ID 1 da tabela.

Da mesma maneira, Peter é o segundo membro da tabela, tendo o ID 2.

Para retirar alguma informação da tabela, usamos a seguinte estrutura:

nomedatabela[id]

Por exemplo, se eu querer atribuir à variável var1, o nome John, eu utilizo o seguinte comando:

local var1 = names[1]

Simples assim.

Da mesma maneira, podemos utilizar um valor randomizado para atribuir um valor à variável, da seguinte maneira:

local chance = math.random(1, 4)
local names = {"John", "Peter", "Ralph", "Mike"}
local var1 = names[chance]

Simples assim.

 

--Carregando uma variável de uma tabela.

A maioria dos scripters usam isso diariamente e não sabem!

Digamos que você tem a seguinte tabela:

ids = {[2160] = "crystal_coin", [2148] = "gold_coin", [100] = "void"}

E você quer utilizar uma dessas variáveis em seu script.

Ao invés de você fazer da seguinte maneira:

local item = ids[1]

Você faz da seguinte maneira:

local item = ids.crystal_coin

Para isso utilizamos a seguinte base:

nomedatabel.nomedavariável

Simples assim. Mas você se pergunta, onde eu uso isso?

Aqui vai:

local player = getPlayerPosition(cid)
local pos = {x = [b]player.x[/b], y = 500, z = 7}

Viram? :D

--Removendo valores de uma tabela.

Para isso, usamos o seguinte comando:

table.remove(nomedatabela.posição)

Exemplo:

local var1 = {"Carl", "Mike", "Peter"}
table.remove(var1, 2)

Isso irá remover o nome Mike da tabela.

--Adicionando valores à tabela.

Utuilizamos o seguinte comando:

table.insert(nomedatabela, posiçãodesejada, valor)

Note que o valor posiçãodesejada é opcional. Mas sem ele, a variável vai ser adicionada no final da tabela

Exemplo:

local var1 = {"Carl", "Mike", "Peter"}
table.insert(var1, "James")

Isso adiciona a variável James na ultima posição, deixando a tabela assim:

local var1 = {"Carl", "Mike", "Peter", "James"}

Se você quisesse adicionar no primeiro lugar, seria assim:

local var1 = {"Carl", "Mike", "Peter"}
table.insert(var1, 1, "James")

Isso deixaria a tabela assim:

local var1 = {"James", "Carl", "Mike", "Peter"}

Também, é possível adicionar um valor à uma tabela da seguinte maneira:

local var1 = {"Carl", "Mike", "Peter"}
var1[2] = "James"

Isso adicionaria a variável James no lugar de Mike.

Se você quiser adicionar a variável no último lugar, faça o seguinte:

local var1 = {"Carl", "Mike", "Peter"}
var1[4] = "James"

Usando a seguinte base:

nomedatabela[posiçãodesejada] = variável

 

Estarei atualizando com mais informações.

 

Tprocheira

Editado Dezembro 21 por Tprocheira

DropBloodD
23 de novembro de 2008 às 17:50

rOx

 

Apezar de não saber nada d lua entendi...

Darth SidiousD
23 de novembro de 2008 às 17:54

Putz, impecavel muito bem explicado parabéns, assim não demora muito para aprender :p

JvchequerJ
23 de novembro de 2008 às 21:21

Just Perfect~

 

 

Aprovado :thumbsupsmiley:

Editado Novembro 23 por JV Chequer

LordfireL
23 de novembro de 2008 às 21:48

Boaa

Eu nunca entendi direito arrays, vou consultar pra ver se faço algo de bom!

tibiaa4eT
24 de novembro de 2008 às 11:18

Boa iniciativa

 

Eu so ia explicar isso no ultimo tuto

 

Esse tipo de função é bom pra diminuir mesmo

 

Porém s eu fazer com isso eu me confudo todo :p

TprocheiraT
25 de novembro de 2008 às 22:04

@UP

=D

Mas isso ajuda na hora de você dar os scripts para outras pessoas, assim como as variáveis local. =D

 

@OFF~ BUMP!

Merece fixo né galera =D

 

Tprocheira

25 de novembro de 2008 às 22:08

Muito bom mesmo o tutorial Tprocheira.

Organizadinho, fácil de entender.

Parabéns!

 

:smile_positivo:

Editado Novembro 25 por Master Gm Gui

noobinhuN
25 de novembro de 2008 às 22:14

Acho que em LUA, alguém já me disse, é também conhecido como tables.

tibiaa4eT
26 de novembro de 2008 às 10:59

@Tprocheira

 

Ajuda sim

Variavel local eu uso sempre...

 

Mais me acostumei com muitos elseif e talz ahuahua

 

Mais em outras linguagens eu uso sempre

alissonlinnekerA
26 de novembro de 2008 às 11:54

Muito bom mesmo,

uso bastante array no meu ot...ate mesmo no caso onde os P.A podem acessar e os free não..

 

isso irá facilitar muito para novos scripters

TprocheiraT
26 de novembro de 2008 às 20:35
Acho que em LUA, alguém já me disse, é também conhecido como tables.

Sim, mas é mais conhecido por Arrays, já que isso tem o mesmo nome em C/C++ e outras linguagens :)

 

Tprocheira

1 mês depois...
Abacate123A
14 de dezembro de 2008 às 18:52
@OFF~ BUMP!

Merece fixo né galera =D

 

merece mesmo ;]

 

muito bom o tuto, eu tava me complicando em algumas coisinhas bestas, mas com isso ajuda bastante x]

 

Trocheira, em [*code][*/code] não é possivel usar [*b][*/b] e nenhum outro tipo de comando...

local player = getPlayerPosition(cid)
local pos = {x = [b]player.x[/b], y = 500, z = 7}

 

;]

té+

EventideE
15 de dezembro de 2008 às 12:48

ids = {2160 = ["crystal_coin"], 2148 = ["gold_coin"], 100 = ["void"]}

tá completamente errado isso... o.O

 

1° - não se pode declarar números sozinhos como variável.

2° - pra que raios você colocou [] ? poderia ter declarado com uma tabela secundaria ali ou então só a variável e o numero mesmo

 

fora isso, tá bom pro começo do conteúdo... :-D

TprocheiraT
21 de dezembro de 2008 às 23:44

@Eventide~

Na verdade, não está errado, isso é para declarar um valor da tabela, porém, acredito que eu tenha invertido os valores.

Vou arrumar o mesmo.

Obrigado pelo report.

 

Tprocheira