FelipeMallmann Posted February 29, 2016 Share Posted February 29, 2016 Eai pessoal, estou com umas duvidas aqui. Minha ideia é criar alguns itens nos quais precisaria salva-los para os players não perderem ao deslogarem. Por exemplo, se eu usar simplesmente um setElementData(getLocalPlayer(), "Item 1", 10) o player vai permanecer com essa propriedade até sair do jogo, mas eu quero salvar esse "Item 1". Minha duvida é qual a melhor opção de fazer isso, devo usar o executeSQLQuery e salvar dentro do registry.db, criar uma nova db ou alguma outra opção? Eu nao consigo imaginar a relação entre getElementData/setElementData e um banco de dados. Eu crio um banco de dado com as tabelas que eu preciso, ai durante todo o processo do jogo eu só vou modificando com getElementData/setElementData e quando o jogador sair do jogo eu atualizo o banco de dados, é mais ou menos assim? Obrigado. Link to comment
#RooTs Posted February 29, 2016 Share Posted February 29, 2016 setElementData não irá resolver, procure usar setAccountData Link to comment
n3wage Posted February 29, 2016 Share Posted February 29, 2016 Minha ideia é criar alguns itens nos quais precisaria salva-los para os players não perderem ao deslogarem. Por exemplo, se eu usar simplesmente um setElementData(getLocalPlayer(), "Item 1", 10) o player vai permanecer com essa propriedade até sair do jogo, mas eu quero salvar esse "Item 1".Minha duvida é qual a melhor opção de fazer isso, devo usar o executeSQLQuery e salvar dentro do registry.db, criar uma nova db ou alguma outra opção? Isso fica a sua escolha, Eu usaria as funções db* para poder trabalhar com MySQL támbem (Fora que acho mais organizado cada resource/gamemode ter seu database), Você também pode usar account datas (Que também são salvas na internal.db). Eu nao consigo imaginar a relação entre getElementData/setElementData e um banco de dados. Eu crio um banco de dado com as tabelas que eu preciso, ai durante todo o processo do jogo eu só vou modificando com getElementData/setElementData e quando o jogador sair do jogo eu atualizo o banco de dados, é mais ou menos assim? Exatamente, Quando o jogador se logar você carrega todos os dados e quando ele sair você obtêm eles usando getElementData ou getAllElementData e salva no database. Você também pode ir salvando de tempos em tempos para ter uma segurança a mais se quiser. Link to comment
FelipeMallmann Posted March 1, 2016 Author Share Posted March 1, 2016 Muito obrigado n3wage, eu concordo que fica mais limpo trabalhar cada resource com sua database, mas eu tenho pouca experiencia com banco de dados, estou priorizando mais simplicidade de codigo do que eficiência. Depois que já estiver funcionando como planejo ai sim eu tento melhorar os codigos.. function onPlayerQuit ( ) local playeraccount = getPlayerAccount (source) if (playeraccount) and not isGuestAccount (playeraccount) then local item1 = getElementData(source, "Item 1") or 0 setAccountData (playeraccount, "Item 1", item1) end end function onPlayerLogin (_, playeraccount) if (playeraccount) then local item1 = getAccountData (playeraccount, "Item 1") -- or 0 if (item1) then setElementData (source, "Item 1", item1) else setElementData (source, "Item 1", 0) end end end addEventHandler ( "onPlayerQuit", getRootElement ( ), onPlayerQuit ) addEventHandler ( "onPlayerLogin", getRootElement ( ), onPlayerLogin ) Esse codigo funcionaria? Eu digo usando ElementData durante o jogo e passando para o AccountData somente ao entrar/sair. @Edit Outra duvida, se eu tenho algumas Datas já registradas mas nao irei usa-las, segundo a wiki eu posso remover usando setAccountData(account, "myKey", false) mas tenho como eu rodar todos os players registrados e limpar de todos, ou só consigo fazer isso com os jogadores online? Obrigado. Link to comment
n3wage Posted March 1, 2016 Share Posted March 1, 2016 [...]Esse codigo funcionaria? Eu digo usando ElementData durante o jogo e passando para o AccountData somente ao entrar/sair. Sim, é exatamente assim, Claro que pode ser aprimorado para salvar outros dados também, Mas como uma base funciona. Outra duvida, se eu tenho algumas Datas já registradas mas nao irei usa-las, segundo a wiki eu posso remover usando setAccountData(account, "myKey", false) mas tenho como eu rodar todos os players registrados e limpar de todos, ou só consigo fazer isso com os jogadores online? Obrigado. Já que você precisa passar a conta no primeiro argumento da função setAccountData você pode fazer um loop de todas as contas usando a função getAccounts. Link to comment
FelipeMallmann Posted March 2, 2016 Author Share Posted March 2, 2016 Certo, muito obrigado mais uma vez n3wage! Vou postar o codigo abaixo caso alguem da comunidade esteja com as mesmas duvidas que eu. (ainda nao testei) function Accounts (thePlayer, commandName, nome) if (nome ~= "" and nome ~= nil ) then local contas = getAccounts () local contador = 0 for _,v in ipairs (contas) do local retorno = setAccountData (v, nome, false) if (retorno) then contador = contador + 1 end end outputChatBox("Contas totais: "..#contas, thePlayer) outputChatBox("Contas limpas: "..contador, thePlayer) else outputChatBox("Uso: /limpar [nome]", thePlayer) end end addCommandHandler("limpar", Accounts) Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now