Ir para conteúdo
  • 0

Uso De Tables


LuckOake

Pergunta

Olá. Antes de mais nada, sei que vai ter gente que só de ler o título vai querer postar isso: "mimimi já tem tutorial disso mimimi só procurar mimimi". Mas é o seguinte. Se eu to perguntando isso aqui mesmo sabendo da existência de tutoriais é porquê quero uma explicação diferencial, e não aquela mesmisse de blablabla "tables são isso e aquilo".

 

Minha dúvida é a seguinte. Como usar tables? MAAAS fazendo o favor, eu não quero explicações. Já sei muito bem o que são e etc, agora eu quero ver na prática.

 

Gostaria de que alguém fizesse dois scripts, um com e um sem tables com o seguinte:

 

Uma talk que possua parâmetros "abc", "def", "ghi". Respectivamente, elas darão o storage 1234 no valor 1 e mandarão uma mensagem escrito "Você fez isso com o parâmetro "..param.."." e para usar cada uma, o player deve ter o storage 3246 de valor 1, 2 e 3.

 

Para quê eu quero isso? Simples. Eu gosto de entender os scripts lendo e comparando eles para ver o quê e como eu devo fazer tal coisa para obter o quê desejo.. Com aquele discurso todo que tem nos tópicos de tutoriais, eu simplesmente fico entediado e não aprendo nada. PS: Não critiquem, esse é meu jeito de aprender e é esse meu ponto de vista.

 

Valendo 3 REPs +.

 

E falando em discurso, eu acho que escrevi um pedindo essas coisas nesse tópico heuaheuhuae

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

O que você tem que ter ideia é que existem 10 formas diferentes de fazer sua script sem problema algum, o que varia é o tamanho do script, facilidade em entender... enfim, varia de scripter pra scripter...

 

Com tabela:

 

 

local sua_tabela = {
["abc"] = {storage_a_checar = 3246, valor_necessario = 1},
["def"] = {storage_a_checar = 3246, valor_necessario = 2},
["ghi"] = {storage_a_checar = 3246, valor_necessario = 3},
}

function onSay(cid, words, param)
local qualquer = sua_tabela[param:lower()]

if not qualquer then
	doPlayerSendCancel(cid, "O parâmetro não está correto.")
return true
end

if getPlayerStorageValue(cid, qualquer.storage_a_checar) ~= qualquer.valor_necessario then
	doPlayerSendCancel(cid, "Você não tem o valor necessário do storage.")
return true
end

setPlayerStorageValue(cid, 1234, 1)
doPlayerSendTextMessage(cid, 22, "Você utilizou o parâmetro "..param:lower()..".")
return true
end

 

 

Sem tabela:

 

 

function onSay(cid, words, param)
local w = param:lower()
setPlayerStorageValue(cid, 1234, 1)
if w == "abc" then
	if getPlayerStorageValue(cid, 3246) == 1 then
		doPlayerSendTextMessage(cid, 22, "Você utilizou o parâmetro "..w..".")
	else
		doPlayerSendCancel(cid, "Você não tem o storage necessário.")
	end
elseif w == "def" then
	if getPlayerStorageValue(cid, 3246) == 2 then
		doPlayerSendTextMessage(cid, 22, "Você utilizou o parâmetro "..w..".")
	else
		doPlayerSendCancel(cid, "Você não tem o storage necessário.")
	end
elseif w == "ghi" then
	if getPlayerStorageValue(cid, 3246) == 3 then
		doPlayerSendTextMessage(cid, 22, "Você utilizou o parâmetro "..w..".")
	else
		doPlayerSendCancel(cid, "Você não tem o storage necessário.")
	end
else
	setPlayerStorageValue(cid, 1234, -1)
	doPlayerSendCancel(cid, "Você não usou o parâmetro correto.")	
end	
return true
end

 

 

Certamente há outras formas, inclusives mais simples de reproduzir a mesma script.

 

Uma outra forma utilizando loop e tabela:

 

 

local sua_tabela = {
["abc"] = {storage_a_checar = 3246, valor_necessario = 1},
["def"] = {storage_a_checar = 3246, valor_necessario = 2},
["ghi"] = {storage_a_checar = 3246, valor_necessario = 3},
}

function onSay(cid, words, param)

for index, value in pairs (sua_tabela) do
	if index == param:lower() then
		if getPlayerStorageValue(cid, value.storage_a_checar) == value.valor_necessario then
			setPlayerStorageValue(cid, 1234, 1)
			doPlayerSendTextMessage(cid, 22, "Você usou o parâmetro "..index..".")
		else
			doPlayerSendCancel(cid, "Você não tem o storage necessário.")
		end
	return true
	end
end  

doPlayerSendCancel(cid, "O parâmetro não está correto.")
return true
end

 

Editado por brun123
Link para o comentário
Compartilhar em outros sites

  • 0

Tambem vo dar meus tutos.

 

Como disse o brun123 a tabela e o jeito mais pratico de reduzir e aprimorar o script.

E elas guardam variaveis.

 

 

 

function onSay(cid, words, param)

local transf = {

["Morte"] = {level = 1, type = "(Dark)", health = 2222, addlevel = 10, looktype = 300, spell = exori, addmana = 2000},

["Demon"] = {level = 1, type = "(Demonio)", health = 22622, addlevel = 20, looktype = 35, spell = exori, addmana = 1800},

["Dragon"] = {level = 1, type = "(Dragon)", health = 22622, addlevel = 20, looktype = 34, spell = exori, addmana = 1222}

 

}

 

 

if (param == nil or param == '' or param == 'lista' or param == 'list'or not transf[param]) then

local str = ""

str = str .. "Transformaçoes :\n\n"

for name, type in pairs(transf) do

str = str..name.."\n"

end

str = str .. ""

doShowTextDialog(cid, 1397, str)

return TRUE

end

 

 

local name = getCreatureName(cid)

local transflevel = transf[param].level

local transfhealth = transf[param].health

local transfaddlevel = transf[param].addlevel

local transftype = transf[param].type

local transflooktype = transf[param].looktype

local transfspell = transf[param].spell

local transfmana = transf[param].addmana

local transfparam = transf[param]

if getPlayerLevel(cid) < transflevel then

doPlayerSendCancel(cid, "Voce precisa de "..transflevel.." de level para a transformação")

return true

end

if getPlayerStorageValue(cid, 26458) == 1 then

doPlayerSendCancel(cid, "Voce ja se transformo nao pode transformar")

return true

end

setCreatureMaxHealth(cid, getCreatureMaxHealth(cid)+transfhealth)

doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

doPlayerLearnInstantSpell(cid, transfspell)

doPlayerAddLevel(cid, transfaddlevel)

setCreatureMaxMana(cid, getCreatureMaxMana(cid)+transfmana)

doCreatureAddMana(cid, getCreatureMaxMana(cid))

doCreatureChangeOutfit(cid, {lookType = transflooktype})

db.executeQuery("UPDATE `players` SET `name` = '".. transftype.." "..name.."' WHERE `id` = "..getPlayerGUID(cid)..";")

setPlayerStorageValue(cid, 26458, 1)

setPlayerStorageValue(cid, 26456, transflooktype)

return true

end

 

 

 

 

Este e o sistema de transformação ele ultiliza a tabela para certificar o que o player ira ganhar se ele falar tal param de talkactions.

 

local transf = {

["Morte"] = {level = 1, type = "(Dark)", health = 2222, addlevel = 10, looktype = 300, spell = exori, addmana = 2000},

["Demon"] = {level = 1, type = "(Demonio)", health = 22622, addlevel = 20, looktype = 35, spell = exori, addmana = 1800},

["Dragon"] = {level = 1, type = "(Dragon)", health = 22622, addlevel = 20, looktype = 34, spell = exori, addmana = 1222}

 

}

 

 

Como pode observar e uma estrutura simples e de facil edição.

 

Para acessar esta tabela e os valores que estão nelas

Primeiro precisamos declarar(chamar) ela.

Vou dar o exemplo

 

local transflevel = transf[param].level

 

Primeiro eu chamo o nome da tabela chamado Transf agora para achar os valores correspondetes do param eu simplesmente coloco para verificar o param.

De tal maneira:

 

transf[param]

 

Se param fosse "Demon" ele iria acessar tal coluna:

 

["Demon"] = {level = 1, type = "(Demonio)", health = 22622, addlevel = 20, looktype = 35, spell = exori, addmana = 1800},

 

Ja que param e demon ele verificou se a tabela transf existe param que e demon e acessou.

Agora para chegar ao valor exemplo level usamos tal

 

transf[param].level

 

E pronto acessamos o valor level da tabela correspodente.

 

Se eu tivesse que fazer este script sem tabelas.

Teria que fazer verificaçoes do param se ele e tipo Demon

e depois ir colocando elseif e isto consumiria tempo e bastante linha.

 

Não e dificil e sua atitulde foi certissima de ter pedido ajuda.

 

Boa sorte

Link para o comentário
Compartilhar em outros sites

  • 0

Certim. Era exatamente isso que eu queria. Um tutorial resumido e completo. Consegui fazer um script com table que funciona 100%. Obrigado, ficarei em dívida de REP + com os dois.

 

Dúvida sanada.

Editado por LuckOake
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...