VI
pedido

Verificar database

Por Victor8, 19 de mar. de 2013 em Scripts

resolvido
otserv
tibia
script
24
2.4k
Victor8V
20 de março de 2013 às 13:36

Olá amigos do xtibia.

 

Odeio pedir coisas, eu sempre dou um jeito e faço eu mesmo. Mas database, não sei mesmo.

 

 

 

Seguinte, meu ot as vezes, perde a conexão com a data base (mysql).

 

Devido a querys muito grandes.

 

 

Solução:

 

Um script que tente pegar algum dado da data base e verificalo.

 

Se ele conseguir verificalo ok.

 

Se ele não conseguir.. fecha o ot.

 

 

Eu bolei uma mais ou menos aki. Mas não deu muito certo, olhem:

 

 

 

 

egua = 1

local Info = db.getResult("SELECT `id` FROM `players` WHERE `id` = " .. egua .. ";")

if info == 1 then

 

 

else

doShutdown()

end

 

 

return

end

Editado Março 20 por Victor8

LuckOakeL
21 de março de 2013 às 19:06

Adiciona em alguma lib:

 

function getInfoFromDatabase(table, column, condition, id)
local a = db.getResult("SELECT `"..column.."` FROM `"..table.."` WHERE `"..condition.."`= "..id..";")
local b = a:getDataString(""..column.."")
return b
end

 

Usando a função:

 

getInfoFromDatabase(players, resets, name, Batata)

 

Ela faz isso:

 

db.getResult("SELECT `resets` FROM `players` WHERE `name` = "Batata";")

Ai é só usar assim:

 

if getInfoFromDatabase(players, id, id, 1) == 1 then
blablabla
else
doShutdown()
end

 

Acho que vai funcionar. Se não, vê se dá algum erro e posta aqui.

Editado Março 21 por LuckOake

Victor8V
24 de março de 2013 às 15:37

Olá luck, vou testar aqui. Obrigado

 

Edit gerou um erro.

 

 

28ul6pw.jpg

Editado Março 29 por Victor8

LuckOakeL
29 de março de 2013 às 13:34

Try again:

 

function getInfoFromDatabase(table, column, condition, id)
local a = db.getResult("SELECT `"..column.."` FROM `"..table.."` WHERE `"..condition.."` = "..id..";")
local b = a:getDataString(""..column.."")
return b
end

 

Se não funcionar, me mostra como você tá usando a função.

Victor8V
29 de março de 2013 às 13:41

Deu denovo o mesmo erro.

 

To usando assim, para testar, é claro.

 

 

function onThink(interval, lastExecution)
if getInfoFromDatabase(players, id, id, 1) == 1 then
   doBroadcastMessage("k")
else
doShutdown()
end
   return true
end

 

 

E adicionei na lib functions.

LuckOakeL
29 de março de 2013 às 13:45

function getInfoFromDatabase(table, column, condition, id)
local a = db.getResult("SELECT `"..column.."` FROM `"..table.."` WHERE `"..condition.."` = `"..id.."`;")
local b = a:getDataString(""..column.."")
return b, a:free()
end

 

Rapaz, você tá perguntando o seguinte pro sistema: Retornar o ID do player que tiver ID igual a 1.

 

Não faz sentido isso, se o player tiver ID 1, vai retornar 1. Vê se você não tá usando a condição errada.

Editado Março 29 por LuckOake

Victor8V
29 de março de 2013 às 13:55

Vei, agora que fui ver.

 

Na data base nao tem player com id 1.

 

Eu coloquei assim agora:

 

 

 

function onThink(interval, lastExecution)

 

if getInfoFromDatabase(players, id, id, 3) == 3 then

doBroadcastMessage("k")

else

doShutdown()

end

return true

end

 

 

Mas mesmo assim deu a condition errada. Nill value :\

 

 

 

2wlvz3m.jpg

LuckOakeL
29 de março de 2013 às 14:02

Cara, não sei se sou eu que tô fazendo alguma bobeira, até porque eu sou meio ruim pra mexer com querys, mas ainda tá me incomodando essa verificação.

 

Olha só como tá, do jeito que você fez:

 

SELECT `id` FROM `players` WHERE `id` = `3`;

 

Selecionar o id de quem tiver id igual a 3? Estranho, não?

Editado Março 29 por LuckOake

Victor8V
29 de março de 2013 às 14:06

Pois é cara, sabe aquele primeiro script que eu fiz. Tava dando praticamente o mesmo erro.

 

Cara, só se mudar, tipo..

 

Ver a account id, ou o nome seila

 

Quem sabe esse ID seja da propria data base, e nao um valor. o_o

:\

LuckOakeL
29 de março de 2013 às 14:28

Usa assim:

 

getInfoFromDatabase(players, id, name, "Sorcerer Sample")

 

Ai vai retornar o ID do player de nome "Sorcerer Sample".

Victor8V
29 de março de 2013 às 14:32

Deu null

 

Cara, eu mysql sou 0. Mas tipo o problema ta nesse id ai.

Ele nao consegue verificar o id.

 

Ah cara, que mentira.

LuckOakeL
29 de março de 2013 às 14:35

Cara, tenta de novo:

 

function getInfoFromDatabase(table, column, condition, id)
local a = db.getResult("SELECT `"..column.."` FROM `"..table.."` WHERE `"..condition.."` = `"..id.."`;")
if a:getID() == -1 then return false end
local b = a:getDataString(""..column.."")
return b, a:free()
end

Editado Março 29 por LuckOake

Victor8V
29 de março de 2013 às 14:58

Bah cara, da nill value!

Editado Março 29 por Victor8

LuckOakeL
29 de março de 2013 às 15:14

Com a ajuda do Slicer eu acho que arrumamos uma solução:

 

getInfoFromDatabase("players", "id", "name", "Sorcerer Sample")

 

Tenta ai.

Editado Março 29 por LuckOake

Victor8V
29 de março de 2013 às 15:38

OOOOOOOOOOPA FECHOU O OT.

 

Não era pra fechar, perai vou ver.

 

Mas ja é uma grande coisa cara, nossa.

 

Perai ja edito aki.

 

 

Alterei o script para testar:

 

 

function onThink(interval, lastExecution)

 

if getInfoFromDatabase("players", "id", "name", "Sorcerer Sample") == 3 then

doBroadcastMessage("ok")

else

doBroadcastMessage("fechar")

end

return true

end

 

 

 

 

Deu esse erro.

 

 

 

1fwbgo.jpg

Editado Março 29 por Victor8