Faaala pessoal, estive um pouco ausente, pois estava bem ocupado, tanto com as novidades que estão por vir no XTibia, quanto com a minha vida pessoal. Enfim, o que importa é que eu fiz esse script agora pouco, e eu acho que pode ser útil no seu OT Serv.
Como funciona: É um sistema de busca melhorado, você fala a talkaction junto com dois ou um parâmetro.
No caso de um único parâmetro é para checar quais são as possíveis buscas. Você poderá editar o script para adicionar mais buscas, mas eu fiz apenas de nome, nível e sexo. Então você fala !search check e isso aparecerá:
O que esta em negrito é o que você vai poder adicionar mais no script. Ensinarei no final como adicionar mais.
Quando você usar dois parâmetros, deve ser como o exemplo ali em cima. No exemplo acima, esta !search level,100 isso quer dizer que o script vai mostrar o nome dos jogadores que possuem o level 100.
Talkaction
function getInformation(pa)
local n = {}
local pla = tonumber(db.getResult("SELECT `id` FROM `players` ORDER BY `id` DESC;"):getDataString("id"))
local t = {}
for i = 1, pla do
info = {"name", "level", "sex"}
for a, b in pairs(info) do
local data = db.getResult("SELECT `"..b.."` FROM `players` WHERE `id` = "..i..";"):getDataString(b)
table.insert(n, data)
end
table.insert(t, n)
n = {}
end
return pa and info or t
end
function onSay(cid, words, param)
local str = nil
if param == "" then
return TRUE, doPlayerSendCancel(cid, "Wrong param.")
end
if param == "check" then
for _, da in pairs(getInformation(TRUE)) do
str = str == nil and "First param: \n\n" .. da or str .. "\n" .. da
end
str = str .. "\n\nSecond param: Match result \n\nExemple: "..words.." level,100"
return doShowTextDialog(cid, 2160, str), TRUE
end
local par = string.explode(param, ",")
if par[2] == nil or par[2] == "" then
return TRUE, doPlayerSendCancel(cid, "Wrong param.")
end
local ta = {}
for z, a in pairs(getInformation()) do
for b, c in pairs(a) do
if table.find(getInformation(TRUE), par[1]) == b and c == par[2] then
table.insert(ta, getInformation()[z][1])
end
end
end
for _, d in pairs(ta) do
str = str == nil and d or str .. "\n" .. d
end
return str and doShowTextDialog(cid, 2160, str) or doPlayerSendTextMessage(cid, 4, "No players found."), TRUE
end
Crie um arquivo .lua em data/talkactions/scripts e cole o script acima. Depois vá em data/talkactions, abra o arquivo talkactions.xml e cole esta tag:
<talkaction words="!search" script="NomeDoArquivo.lua" />
Refinando ainda mais sua busca:
Ache esta linha no script:
{"name", "level", "sex"}
Para adicionar mais quesitos para a busca, siga o exemplo:
{"name", "level", "sex", "vocation", "cap"}
Os nomes dos quesitos são de acordo com a database do seu OT Serv.
Espero que tenha ficado claro, obrigado.