Ir para conteúdo
  • 0

Sistema De Recovery Key Por Talk


LuckOake

Pergunta

Versão: 8.6

Infos: Olá, galera. Um tempo atrás eu tava tentando desenvolver um sistema de Recovery Key por talk, até criei um tópico pedindo ajuda, mas ninguém respondeu e já tem quase 30 dias.

 

No meu server, está bugado via Account Manager. Entããão fiz um mini sisteminha que não faz exatamente o que eu quis, mas é um bom começo. É assim: Você fala !recovery generate, e o sistema gera uma RK para você. Então, quando você perder sua conta, você digitaria !recovery recover,key. Maaaas meu sistema só tá fazendo isso para o próprio player, ou seja, você gera uma RK no seu char e só pode recuperar a senha se estiver logado nele, mas como você está logado, bem provavelmente você já sabe sua senha. Eu gostaria que o sistema recuperasse sua senha à partir do comando que já expliquei, !recovery recover,key, só que em outro character. Exemplo: Meu char se chama Ray Oake e quero recuperar a senha da conta do char Luck Oake, então uso o comando !recovery recover,123456789. Ou seja, você deve especificar sua RK da conta que você gostaria de recuperar. Outra coisa, o sistema só gera RK com números, e eu gostaria que ela também gerasse com letras, exemplo 124asv34kkao93.

 

Se precisar, posto o sistema que eu fiz. Se não, alguém por favor, faça outro.

 

PS: Se não for possível fazer esse sistema via talk, gostaria do fix pra funcionar via Acc Manager, mesmo.

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

6 respostass a esta questão

Posts Recomendados

  • 0

function setPlayerRecoveryKey(cid)
local wd,newrk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",""
for i = 0, 15 do
	tmp = math.random(1,#wd)
	newrk = newrk..string.sub(wd,tmp,tmp)
end
local newrk = string.gsub(newrk, "(....)", "%1-", 3)
local keyexists = db.getResult("SELECT * FROM `accounts` WHERE `key` = '"..newrk.."'")
if (keyexists:getID() ~= -1) then return setPlayerRecoveryKey(cid) end
return db.executeQuery("UPDATE `accounts` SET `key` = '"..newrk.."' WHERE `id` = "..getPlayerAccountId(cid)) and newrk or false
end


function getPlayerKey(n) -- by vodka
local qry,str = db.getResult("SELECT `name`,`password` FROM `accounts` WHERE `key` > 0 AND `key` = "..db.escapeString(n)),""
if (qry:getID() ~= -1) then
str = "Account: "..qry:getDataString("name").."\nSenha: "..qry:getDataString("password") 
end
return str
end

 

 

essa função "setPlayerRecoveryKey(cid)" Gera a key com números e letras, ficando assim:

 

LHW5-FFLT-MCUN-2K32

 

 

ai para recuperar a account vc faria assim a talk

 

function onSay(cid, words, param)
local param = string.upper(param)
if getPlayerKey(tostring(param)) == "" then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"está key não existe")
end
return doPlayerPopupFYI(cid,"Account Info:\n\n\n"..getPlayerKey(tostring(param)))
end

 

!comando "KEY

 

exemplo:

 

!comando lhw5-fflt-mcun-2k32

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

  • 0

Se digitar só /rk sem parâmetros, a senha do player é mostrada. E como eu uso a função para gerar a key do player?

 

PS: Meu server, como é SHA1, mostra a senha encriptada. Tem como resolver isso?

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

  • 0

sim, arrumei a função agora, porque 0 mostrava senhas de quem não tinha KEY rsrs

 

nome do seu script.lua

function setPlayerRecoveryKey(cid)
local wd,newrk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",""
for i = 0, 15 do
	tmp = math.random(1,#wd)
	newrk = newrk..string.sub(wd,tmp,tmp)
end
local newrk = string.gsub(newrk, "(....)", "%1-", 3)
local keyexists = db.getResult("SELECT * FROM `accounts` WHERE `key` = '"..newrk.."'")
if (keyexists:getID() ~= -1) then return setPlayerRecoveryKey(cid) end
return db.executeQuery("UPDATE `accounts` SET `key` = '"..newrk.."' WHERE `id` = "..getPlayerAccountId(cid)) and newrk or false
end
function getPlayerKey(n) -- by vodka
local qry,str = db.getResult("SELECT `name`,`password` FROM `accounts` WHERE `key` > 0 AND `key` = "..db.escapeString(n)),""
if (qry:getID() ~= -1) then
str = "Account: "..qry:getDataString("name").."\nSenha: "..qry:getDataString("password")
end
return str
end
function onSay(cid, words, param)
if (words == "/setkey") then
local newKey = setPlayerRecoveryKey(cid)
if newKey then
doPlayerPopupFYI(cid,"Parabéns, você recebeu uma Key! anote os seguintes digitos:\n\nKey: "..newKey) return true
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "[Error] Não foi possível gerar uma Key, tente novamente!.")
elseif (words == "/getkey") then
local param = string.upper(param)
if getPlayerKey(tostring(param)) == "" then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"está key não existe") return true
end
doPlayerPopupFYI(cid,"Account Info:\n\n\n"..getPlayerKey(tostring(param)))
end
return true
end

 

talkactions.xml

<talkaction words="/setkey;/getkey" event="script" value="nome do seu script.lua"/>

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

  • 0

Não sei... mas tenta algo do tipo:

 

trocar essa parte:

 

 

return db.executeQuery("UPDATE `accounts` SET `key` = '"..newrk.."' WHERE `id` = "..getPlayerAccountId(cid)) and newrk or false

 

por

 

return db.executeQuery("UPDATE `accounts` SET `key` = sha1(`newrk`) WHERE `id` = "..getPlayerAccountId(cid)) and newrk or false

 

ou

 

return db.executeQuery("UPDATE `accounts` SET `key` = sha1('"..newrk.."') WHERE `id` = "..getPlayerAccountId(cid)) and newrk or false

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...