Ir para conteúdo
  • Cadastre-se

[Tutorial] Básico sobre Lua


Posts Recomendados

  • Administrador

ATENÇÃO!
Este tutorial foi feito pelo tibiaa4e, portanto os créditos são 100% dele!

Parte I – Básico do básico de Lua
Começaremos por LUA porque é uma linguagem simples, que não precisa declarar variáveis e tudo mais. Aqui não explicarei as funções do otserver e sim como montar um script.
Nessa primeira parte usarei o Português Estruturado que sinceramente não é útil
quando você aprende a sintaxe da linguagem, porém é ótimo para você que está começando aprender o que está fazendo e não só copiando e colando.

LEMBRANDO QUE PORTUGUÊS ESTRUTURADO NÃO É UMA LINGUAGEM
É APENAS UM JEITO DE VOCÊ ENTENDER A SINTAXE DAS LINGUAGENS.


Começando vamos explicar a sintaxe de um script bem básico mesmo. Aquele script que quando você da use em 100 gps ele vira 1 platinum coin

function onUse(cid, item, fromPosition, itemEx, toPosition)
if item.itemid == 2148 and item.type == 100 then
doRemoveItem(item.uid,1)
doPlayerAddItem(cid, 2152, 1)

else
return FALSE

end

return TRUE
end


Em português estruturado ele ficaria assim :

Função aoUsar (cid,item,fromPosition,itemEx, toPosition)
Se item.numerodoitem == 2148 E o item.tipo == 100 faça
RemovaItem (item.numerodoitem, 1 )
AdicioneItemAoPlayer(cid, 2152, 1)

senão
não retorne

fim
retorne
fim


Com português estruturado da para entender essa action

Agora da para explicar melhor a estrutura de um arquivo lua de actions :

Essa parte é a que diz ao servidor que essa função vai se ativar quando o player usar o item indicado no actions.xml. No caso é a função aoUsar ou seja quando o player clicar com o direito nesse item irá acontecer algo.

O SE é uma condição, se estiver tudo certo dentro dele ele faz a condição contida no caso
o id (numerodoitem) tem que ser 2148 (Gold Coin) e tem que ser do tipo 100 (No caso de itens juntáveis o tipo é a quantidade), faça remova ele e adicione UM item 2152 (platinum coin).


► Senão ou seja, se o item não for 2148 ou não ter tipo 100, não retorne ao começo do script e finalize.


Espero que essa parte tenha esclarecido um pouquinho mais sobre actions. Agora vou explicar um pouco mais sobre algumas condições e suas sintaxes.

Sintaxe do IF, Else e Elseif.

A condição if de longe é a mais importante de todas as programações e é essencial para um script um pouco mais complexo ou para evitar que você faça 200 scripts para certas funções (comida do tibia por exemplo).

Vocabulário do tio Ta4e

If - Se
else - Senão
elseif – Else + if, indica mais um if dentro de outro.


Única coisa que o lua pede é que cada item tenha um end para cada if colocado tenha um end, você também tem que entender a questão do if encadeado que será tema da próxima aula aqui.
Mais para ela se tem que saber o básico de um If normal.
Esse é o script anterior com adição de uma condição que se o player tiver 100 platinum coin ele se transforme em uma crustal coin.

function onUse(cid, item, fromPosition, itemEx, toPosition)
if item.itemid == 2148 and item.type == 100 then
doRemoveItem(item.uid,1)
doPlayerAddItem(cid, 2152, 1)

elseif item.itemid == 2152 and item.type == 100 then
doRemoveItem(item.uid,1)
doPlayerAddItem(cid, 2160, 1)
else
return FALSE
end
return TRUE
end
Você percebe que eu alinhei o if e elseif a seu end, isso chama-se Estruturação, isso é muito importante já que para achar um erro será muito mais fácil E fica mais organizado seu script

Você percebe que o IF tem um end no final da sua cadeia, pois todo IF tem que ter um end
porém o ELSEIF se enquadra dentro do IF.
O ELSEIF ajuda pois você diminui linhas de scripts e serve para outras funções mais avançadas que serão vistas nas próximas aulas.
Lembrando também que a função toda função também tem seu END, isso ajuda no caso de você querer colocar duas funções no mesmo script (muito usado em movements).

IF Encadeado
O if encadeado ou cadeia de if, indica funções pouco mais complexas que o if solitário, porém não é nenhum bicho de 7 cabeças, se você fazer a estruturação do script.
Aqui vai o script de exemplo, é um script muito mais complexo do que os do gps

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

if item.uid == 2300 then
queststatus = getPlayerStorageValue(cid,2300)
if queststatus == -1 then

if getPlayerFreeCap(cid) >= 29.50 then
doPlayerSendTextMessage(cid,24,"You have found a demon helmet.")
doPlayerAddItem(cid,2493,1)
setPlayerStorageValue(cid,2300,1)
else
doPlayerSendTextMessage(cid,24,"You have found a demon helmet. Weighing 29.50 oz it is too heavy.")
end
else
doPlayerSendTextMessage(cid,24,"The chest is empty.")
end


end
return 1

end


Esse script é o que eu uso para minhas quest. Esse é um ótimo exemplo de if encadeado.
Perceba que ele está estruturado. Claro que colorido é muito simples identificar cada else e end
Agora vou explicar a sintaxe.

A primeira parte pede que o uniqueid (é um numero especial usado apenas uma vez no mapa inteiro), seja 2300.

Essa parte do queststatus é uma variável que será explicado a parte

►Esse If, checa se o player tem o valor da variável listada acima, senão ele manda a mensagem o “the chest is empty”.


►Esse outro if checa se o player tem a capacidade 29.50, senão ele manda a mensagem “You have found a demon helmet. Weighing 29.50 oz it is too heavy”.

►Chama-se cadeia de if porque as funções em preto só serão executados se todos os IFS forem verdadeiros, se apenas um não for ele já acusa o erro. Seria mais ou menos como tirar um RG

Se você tiver Certidão de nascimento faça
Se você tiver Foto 3x4 faça
Se você tiver o papel faça
Criar RG
Senão pegue o papel no balcão
Senão tire uma foto 3x4
Senão tirei certidão primeiro ,já que você não existe

Perceba que você terá que ter tudo isso para fazer o RG senão tiver você não consegue tirar

►Voltando ao script perceba que todos tem seu respectivo end, isso é importantíssimo

Variáveis
Variáveis é uma parte da memoria na qual se guarda um valor ou informação, em outras linguagens elas tem tipos como de números inteiros, reais ou de letras, porém em lua não existe isso.
O que facilita muito nossas vidas as variáveis são maneiras ou jeitos de você fazer scripts para outras pessoas ou por pura preguiça mesmo...
São extremamente necessárias em scripts grandes na qual um item de mesmo id é repetido muitas vezes, e talvez depois seja necessário muda-lo
Lembra do script anterior da quest a parte que da questatus

queststatus = getPlayerStorageValue(cid,2300)
if queststatus == -1 then


A quest status é uma variável, que pergunta ao servidor se o player tem o valor nele
Se não tiver faça, ou seja -1 é igual a negativo ou negação, no caso se o programador quisesse que ele tivesse colocava 1
Essa parte é bem simples de se entender, já que variáveis servem para simplificar a vida de não programadores, porém deixam seu servidor mais pesado, não é coisa grande, porém como já disse a variável ocupa memoria, em torno de 3kb cada uma, mais em um otserver básico possuem muitas variáveis
Elas podem ser indicadas em qualquer parte do script, e elas sempre recebem dados ou perguntam.
Pode se fazer cálculos nas variáveis ou usar outras variáveis dentro dela sem problema nenhum.


Sinais Matemáticos e de comparação
Aqui vai uma coisa que confunde muita gente :

►= - Faz o item anterior receber algo
Exemplo : gold = 2148

►== - Verificação. É para checar
Exemplo : if item.itemid == 2555 then

► Os sinais matemáticos são +, -, / e * .

►E como toda linguagem não existe , entre números 1,5 é 1.5 virgula é só para separar variáveis

►Para se checar pode ser usar == (igual a ), >= (maior ou igual a ), <= (menor ou igual a ) o sinal de diferente é agora com certeza é ~=.

►Pode se calcular os itens dentro de variáveis ou até dentro de funções.



IF com varias condições
Você já deve entender um pouco mais de scripts portanto agora colocarei scripts cortados
Vamos a um exemplo :

if item.itemid == 2694 then
if item2.itemid == 1381 or item2.itemid == 1382 or item2.itemid == 1383 or item2.itemid == 1384 then
doRemoveItem(item.uid,1)
doPlayerAddItem(cid,2692,1)
else
return 0
end

Nesse caso o item.itemid é aqueles itens que você pode dar use with (vara de pescar por exemplo) e o item2.itemid é o local a ser clicado.
Então seria Se o item for 2694 e o segundo item for 1381 ou 1382 ou 1383 ou 1384 faça.
Ou seja qualquer um desses itens é considerado válido.
Essa é a básica desse tipo porém pode-se fazer umas mais complexas como essa debaixo que não existe em actions e é só para explicar :

if item2.itemid == 1381 and item2.itemid == 1382 or item2.itemid == 1383 and item2.itemid == 1384 then

Nesse caso o player teria que usar o item 1381 e o 1382 juntos ou o 1383 e 1384 juntos.
É usado em movements, npcs e talk actions muito frequentemente.
Parece fácil mais da para se confundir facinho ai.


Quando usar IF e quando usar ELSEIF
Essa parte é a final desse primeiro tutorial e serve apenas para dar uma idéia de como melhor seu script básico
Como eu já disse o Elseif é uma é a junção de else + if e ele só vai executado depois se o if primário for falso. Ou seja ele é usado quando apenas uma das condicionais vai ser verdadeira , eu uso muito isso em npcs para o quests de npcs, mais podemos mostrar uns exemplos em actions.
Já o if sempre será checado, bom para os ifs encadeados já que eles tem todos estarem certos ou errados.

Exemplo de If e Elseif junto

if item.uid == 2300 then
queststatus = getPlayerStorageValue(cid,2300)
if queststatus == -1 then
if getPlayerFreeCap(cid) >= 29.50 then

doPlayerSendTextMessage(cid,24,"You have found a demon helmet.")
doPlayerAddItem(cid,2493,1)
setPlayerStorageValue(cid,2300,1)
else
doPlayerSendTextMessage(cid,24,"You have found a demon helmet. Weighing 29.50 oz it is too heavy.")
end
else
doPlayerSendTextMessage(cid,24,"The chest is empty.")
end

elseif item.uid == 2301 then
queststatus = getPlayerStorageValue(cid,2301)
if queststatus == -1 then
if getPlayerFreeCap(cid) >= 26.00 then

doPlayerSendTextMessage(cid,24,"You have found a demon shield.")
doPlayerAddItem(cid,2520,1)
setPlayerStorageValue(cid,2301,1)
else
doPlayerSendTextMessage(cid,24,"You have found a demon shield. Weighing 26.00 oz it is too heavy.")
end
else
doPlayerSendTextMessage(cid,24,"The chest is empty.")
end



Perceba que nesse caso é usado o elseif porque é impossível que o mesmo bau tenha o mesmo uniqueid (Como disse anteriormente cada uniqueid é usado apenas 1 vez no mapa e um item só tem 1 uniqueid). Então ou é um ou é outro. E ELSEIF não tem end.

►Nesse caso todos tem que ser reais para poder se executar o script, então é necessários ser if e ter seus ENDS.


Comentários
Para inserir comentários na linguagem lua é necessário adicionar – 2 hifens.
Pode ser em qualquer parte do script (pelo amor de deus não coloque dentro de um if)
normalmente usado para explicar o script ou colocar créditos


Siglas e Dicionario

id – Identificador ou seja no caso de otserver é o numero do item para o tibia.
cid – Creature Id :Identificador da criatura, no caso a criatura que executa a ação, no caso o player.
uid – Unique Id : Identificador único usado uma vez no mapa (em algumas funções ele serve como para indicar um id.
actionid – Identificador de ação pode ser usado varias vezes no mapa, usado principalmente para aquele chão que afunda perto do DP.

 

dm3o5y8.png

 
Você gostou deste conteúdo!? Este conteúdo te ajudou!? Isso será realmente útil pra você!?
Então, se possível, faça uma doação (de qualquer valor) que estará me ajudando também! :P
 

TibiaKing Team- KingTópicos
www.tibiaking.com

Link para o post
Compartilhar em outros sites
  • 3 months later...
  • Administrador

Tópico movido para à área mais adequada!

TibiaKing Team- KingTópicos
www.tibiaking.com

Link para o post
Compartilhar em outros sites

Bom tutorial pra quem deseja aprender script :]'

2z8t5ef.jpg

p7gkt.jpg

"Quem ri por último é retardado."

"Quem cedo madruga, fica com sono o dia todo."

"Família que reza unida, é religiosa pra caralho."

Link para o post
Compartilhar em outros sites
  • 9 months later...

Foi mal por escrever essa mensagem atrasado. Mas, sem querer floodar... Eu já vi isso no XT... você pegou de lá a parte do LUA?? Era de um cara que tinha a foto de uma nota de dinheiro. Só disso que sei.

PSY-TRANCE.jpg

~PSY TRANCE FOREVER~

Link para o post
Compartilhar em outros sites

Opa! Desculpa aí gente, eu ACHO que não é do XT não... foi só o comecinho que tinha todas as cores iguais, era tudo igual. Só o começo que é o XT. Foi mal aí matheus, sou um idiota mesmo :wallbash:

PSY-TRANCE.jpg

~PSY TRANCE FOREVER~

Link para o post
Compartilhar em outros sites

Eu era bastante ativo no XT, eu nunca tinha visto ele não :X

Era uma nota de 100 reais. não sei mais o nome dele. Acho que é Tibia4e

PSY-TRANCE.jpg

~PSY TRANCE FOREVER~

Link para o post
Compartilhar em outros sites

Parte I – Básico do básico de Lua

Começaremos por LUA porque é uma linguagem simples, que não precisa declarar variáveis e tudo mais. Aqui não explicarei as funções do otserver e sim como montar um script.

Nessa primeira parte usarei o Português Estruturado que sinceramente não é útil

quando você aprende a sintaxe da linguagem, porém é ótimo para você que está começando aprender o que está fazendo e não só copiando e colando.

LEMBRANDO QUE PORTUGUÊS ESTRUTURADO NÃO É UMA LINGUAGEM

É APENAS UM JEITO DE VOCÊ ENTENDER A SINTAXE DAS LINGUAGENS.

Começando vamos explicar a sintaxe de um script bem básico mesmo. Aquele script que quando você da use em 100 gps ele vira 1 platinum coin

Em português estruturado ele ficaria assim :

Com português estruturado da para entender essa action

Agora da para explicar melhor a estrutura de um arquivo lua de actions :

Essa parte é a que diz ao servidor que essa função vai se ativar quando o player usar o item indicado no actions.xml. No caso é a função aoUsar ou seja quando o player clicar com o direito nesse item irá acontecer algo.

O SE é uma condição, se estiver tudo certo dentro dele ele faz a condição contida no caso

o id (numerodoitem) tem que ser 2148 (Gold Coin) e tem que ser do tipo 100 (No caso de itens juntáveis o tipo é a quantidade), faça remova ele e adicione UM item 2152 (platinum coin).

► Senão ou seja, se o item não for 2148 ou não ter tipo 100, não retorne ao começo do script e finalize.

Espero que essa parte tenha esclarecido um pouquinho mais sobre actions. Agora vou explicar um pouco mais sobre algumas condições e suas sintaxes.

Sintaxe do IF, Else e Elseif.

A condição if de longe é a mais importante de todas as programações e é essencial para um script um pouco mais complexo ou para evitar que você faça 200 scripts para certas funções (comida do tibia por exemplo).

Vocabulário do tio Ta4e

Única coisa que o lua pede é que cada item tenha um end para cada if colocado tenha um end, você também tem que entender a questão do if encadeado que será tema da próxima aula aqui.

Mais para ela se tem que saber o básico de um If normal.

Esse é o script anterior com adição de uma condição que se o player tiver 100 platinum coin ele se transforme em uma crustal coin.

function onUse(cid, item, fromPosition, itemEx, toPosition)

	if item.itemid == 2148 and item.type == 100 then

	doRemoveItem(item.uid,1)

	doPlayerAddItem(cid, 2152, 1)


	elseif item.itemid == 2152 and item.type == 100 then

	doRemoveItem(item.uid,1)

	doPlayerAddItem(cid, 2160, 1)

		else

		return FALSE

	end

		return TRUE

end
Você percebe que eu alinhei o if e elseif a seu end, isso chama-se Estruturação, isso é muito importante já que para achar um erro será muito mais fácil E fica mais organizado seu script Você percebe que o IF tem um end no final da sua cadeia, pois todo IF tem que ter um end porém o ELSEIF se enquadra dentro do IF. O ELSEIF ajuda pois você diminui linhas de scripts e serve para outras funções mais avançadas que serão vistas nas próximas aulas. Lembrando também que a função toda função também tem seu END, isso ajuda no caso de você querer colocar duas funções no mesmo script (muito usado em movements). IF Encadeado O if encadeado ou cadeia de if, indica funções pouco mais complexas que o if solitário, porém não é nenhum bicho de 7 cabeças, se você fazer a estruturação do script. Aqui vai o script de exemplo, é um script muito mais complexo do que os do gps Esse script é o que eu uso para minhas quest. Esse é um ótimo exemplo de if encadeado. Perceba que ele está estruturado. Claro que colorido é muito simples identificar cada else e end Agora vou explicar a sintaxe. ►A primeira parte pede que o uniqueid (é um numero especial usado apenas uma vez no mapa inteiro), seja 2300.Essa parte do queststatus é uma variável que será explicado a parte ►Esse If, checa se o player tem o valor da variável listada acima, senão ele manda a mensagem o “the chest is empty”. ►Esse outro if checa se o player tem a capacidade 29.50, senão ele manda a mensagem “You have found a demon helmet. Weighing 29.50 oz it is too heavy”. ►Chama-se cadeia de if porque as funções em preto só serão executados se todos os IFS forem verdadeiros, se apenas um não for ele já acusa o erro. Seria mais ou menos como tirar um RG
	Se você tiver Certidão de nascimento faça

		Se você tiver Foto 3x4 faça

			Se você tiver o papel faça

				Criar RG

			Senão pegue o papel no balcão

		Senão tire uma foto 3x4

	Senão tirei certidão primeiro ,já que você não existe
Perceba que você terá que ter tudo isso para fazer o RG senão tiver você não consegue tirar ►Voltando ao script perceba que todos tem seu respectivo end, isso é importantíssimo Variáveis Variáveis é uma parte da memoria na qual se guarda um valor ou informação, em outras linguagens elas tem tipos como de números inteiros, reais ou de letras, porém em lua não existe isso. O que facilita muito nossas vidas as variáveis são maneiras ou jeitos de você fazer scripts para outras pessoas ou por pura preguiça mesmo... São extremamente necessárias em scripts grandes na qual um item de mesmo id é repetido muitas vezes, e talvez depois seja necessário muda-lo Lembra do script anterior da quest a parte que da questatus A quest status é uma variável, que pergunta ao servidor se o player tem o valor nele Se não tiver faça, ou seja -1 é igual a negativo ou negação, no caso se o programador quisesse que ele tivesse colocava 1 Essa parte é bem simples de se entender, já que variáveis servem para simplificar a vida de não programadores, porém deixam seu servidor mais pesado, não é coisa grande, porém como já disse a variável ocupa memoria, em torno de 3kb cada uma, mais em um otserver básico possuem muitas variáveis Elas podem ser indicadas em qualquer parte do script, e elas sempre recebem dados ou perguntam. Pode se fazer cálculos nas variáveis ou usar outras variáveis dentro dela sem problema nenhum. Sinais Matemáticos e de comparação Aqui vai uma coisa que confunde muita gente : ►= - Faz o item anterior receber algo Exemplo : gold = 2148 ►== - Verificação. É para checar Exemplo : if item.itemid == 2555 then ► Os sinais matemáticos são +, -, / e * . ►E como toda linguagem não existe , entre números 1,5 é 1.5 virgula é só para separar variáveis ►Para se checar pode ser usar == (igual a ), >= (maior ou igual a ), <= (menor ou igual a ) o sinal de diferente é agora com certeza é ~=. ►Pode se calcular os itens dentro de variáveis ou até dentro de funções. IF com varias condições Você já deve entender um pouco mais de scripts portanto agora colocarei scripts cortados Vamos a um exemplo :
if item.itemid == 2694 then

	if item2.itemid == 1381 or item2.itemid == 1382 or item2.itemid == 1383 or item2.itemid == 1384 then

	doRemoveItem(item.uid,1)

	doPlayerAddItem(cid,2692,1)

	else

	return 0

end

Nesse caso o item.itemid é aqueles itens que você pode dar use with (vara de pescar por exemplo) e o item2.itemid é o local a ser clicado.

Então seria Se o item for 2694 e o segundo item for 1381 ou 1382 ou 1383 ou 1384 faça.

Ou seja qualquer um desses itens é considerado válido.

Essa é a básica desse tipo porém pode-se fazer umas mais complexas como essa debaixo que não existe em actions e é só para explicar :

Nesse caso o player teria que usar o item 1381 e o 1382 juntos ou o 1383 e 1384 juntos.

É usado em movements, npcs e talk actions muito frequentemente.

Parece fácil mais da para se confundir facinho ai.

Quando usar IF e quando usar ELSEIF

Essa parte é a final desse primeiro tutorial e serve apenas para dar uma idéia de como melhor seu script básico

Como eu já disse o Elseif é uma é a junção de else + if e ele só vai executado depois se o if primário for falso. Ou seja ele é usado quando apenas uma das condicionais vai ser verdadeira , eu uso muito isso em npcs para o quests de npcs, mais podemos mostrar uns exemplos em actions.

Já o if sempre será checado, bom para os ifs encadeados já que eles tem todos estarem certos ou errados.

Exemplo de If e Elseif junto

Perceba que nesse caso é usado o elseif porque é impossível que o mesmo bau tenha o mesmo uniqueid (Como disse anteriormente cada uniqueid é usado apenas 1 vez no mapa e um item só tem 1 uniqueid). Então ou é um ou é outro. E ELSEIF não tem end.

►Nesse caso todos tem que ser reais para poder se executar o script, então é necessários ser if e ter seus ENDS.

Comentários

Para inserir comentários na linguagem lua é necessário adicionar – 2 hifens.

Pode ser em qualquer parte do script (pelo amor de deus não coloque dentro de um if)

normalmente usado para explicar o script ou colocar créditos

Siglas e Dicionario

id – Identificador ou seja no caso de otserver é o numero do item para o tibia.

cid – Creature Id :Identificador da criatura, no caso a criatura que executa a ação, no caso o player.

uid – Unique Id : Identificador único usado uma vez no mapa (em algumas funções ele serve como para indicar um id.

actionid – Identificador de ação pode ser usado varias vezes no mapa, usado principalmente para aquele chão que afunda perto do DP.

Matheus, Belo tutorial eu queria aprende também script, você por acaso não poderia está passando. Links de tutorial em ordem por que não sei nem por onde começar rsrs.. eu pedi uma força para o Skydangerous, ele pediu pra min lê a apostila sendo que eu nem sei por onde começar.

Agradeço Desde Já :wow:

Te Ajudei? Click em Gostei! Att: DuH HeRE. OBS: TibiaAvatar Precissando de WebDesing/WebMaster

do5u6h.jpg

Link para o post
Compartilhar em outros sites
  • 1 month later...
  • 1 month later...
  • 2 years later...

Como faz para criar uma funçao? por exemplo quero fazer que a "Funcion  CriticalHit " desse um dano um pouco maior que o normal no caso o Hit normal seria 100 e o critical subisse para 130 .

Link para o post
Compartilhar em outros sites
  • 1 year later...

Puts cara, super legal. Seria legal se você continuasse postando conteúdo de programação em lua. Tenho muito interesse em aprender a programação voltada para o tibia e garanto que muitas outras pessoas também têm, más o conteúdo é escasso.De qualquer forma parabéns !!

Link para o post
Compartilhar em outros sites
  • 3 weeks later...
Em Tuesday, December 21, 2010 at 21:56, Matk disse:

if item.uid == 2300 then

 

Não seria essa linha que deveria estar destacada em vermelho?

Editado por caiquex (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 10 months later...

Nossa cara você simplificou tudo para mim, obrigado mesmo, agora sim vou continuar estudando. :) 

Existe tutorial contínuo desse?

A vida ela é cheia de oportunidades e minha oportunidade é você

 

Link para o post
Compartilhar em outros sites
  • 1 year later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo