Jump to content

[Duvida] Player Data


Recommended Posts

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
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

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
[...]

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...