faz comparação do meu pokemon falando
um com table e o outro sem
info
Grupo: Conde
Registrado: 03/01/12
Posts: 884
Reputação: +233
Char no Tibia: Segredo

faz comparação do meu pokemon falando
um com table e o outro sem
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

Meu jovem, não era isso que eu queria. Eu quero uma talk igual eu escrevi no meu post, pois ela é um pouco mais complexa.
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 Agosto 23 por brun123
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

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
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

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 Agosto 23 por LuckOake
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake
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