Mickey2 Posted June 13, 2020 Share Posted June 13, 2020 (edited) Quando o usuário se desconectar eu quero que isto seja feito. addEventHandler('onPlayerQuit', root, function() local account = getPlayerAccount(source) setAccountData(account, 'vehitem', true) end) isso para quando o usuário logar novamente e fazer uma ação em específico essa verificação funcionar: local accsalvo = getPlayerAccount(source) if getAccountData(accsalvo, 'vehitem') then exports._infobox:addNotification(source, 'funcionou', 'warning') else exports._infobox:addNotification(source, 'não funcionou', 'warning') end só que ela sempre retorna false, como se o setAccountData fosse ignorado, e agora? Edited June 13, 2020 by Mickey2 Link to comment
[M]ister Posted June 13, 2020 Share Posted June 13, 2020 Não me lembro como é o comportamento de booleano (true) no setAccountData, pode tentar algo do tipo: addEventHandler('onPlayerQuit', root, function() local account = getPlayerAccount(source) if ( account ) and not isGuestAccount ( account ) then setAccountData(account, 'vehitem', 1) end end ) 1 Link to comment
Other Languages Moderators Lord Henry Posted June 13, 2020 Other Languages Moderators Share Posted June 13, 2020 (edited) 29 minutes ago, [M]ister said: Não me lembro como é o comportamento de booleano (true) no setAccountData, pode tentar algo do tipo: setAccountData não aceita booleano true pois se trata de uma entrada no banco de dados, mas a função aceita false para remover essa data do banco de dados. Você pode usar string "true" ou "false" e dai no script considerar como true ou false. Ou então, como vc exemplificou, usar número 1 ou 0 e no script considerar como true ou false. Edited June 13, 2020 by Lord Henry 1 Link to comment
[M]ister Posted June 13, 2020 Share Posted June 13, 2020 Esclarecido, pensei na possibilidade dessa conversão ser feita de maneira implícita... mas pelo visto não é. 1 Link to comment
Mickey2 Posted June 13, 2020 Author Share Posted June 13, 2020 Testei com string 'true' e com número 1, mesmo assim não funcionou, não sei o por que.. vou continuar tentando, os dois codes, o primeiro do setAccount e o segundo do getAccount são de scripts diferentes, isso não muda nada né? creio que não. aqui está o code: addEventHandler('onPlayerQuit', root, function() local account = getPlayerAccount(source) if not isGuestAccount(account) then for i, vehicle in ipairs(getElementsByType('vehicle')) do if getElementData(vehicle, 'Owner') == source then weap = getElementData(vehicle, 'armasG') setAccountData(account, 'vehitem', weap) break end end end end) 2 parte do outro script: local accsalvo = getPlayerAccount(source) if getAccountData(accsalvo, 'vehitem') then exports._infobox:addNotification(source, 'funcionou finalmente caralhoo', 'warning') itemsalvos = getAccountData(accsalvo, 'vehitem') setElementData(vehicle, 'armasG', itemsalvos) else exports._infobox:addNotification(source, 'não tá funcionando maaano', 'warning') end Link to comment
Other Languages Moderators Lord Henry Posted June 13, 2020 Other Languages Moderators Share Posted June 13, 2020 Coloque isso na linha debaixo do weap. Pra saber qual o valor dele. print (weap) Me diga oq aparece no /debugscript 3 1 Link to comment
Mickey2 Posted June 13, 2020 Author Share Posted June 13, 2020 (edited) Bom na verdade não daria para ver o debugscript, pois esta função só é chamada quando o usuário sai do servidor, já tentei usar o outputConsole mas foi como se tivesse ignorado o código, mas enfim, mesmo assim iria dar erro, pois o getElementData está me retornando uma tabela de armas guardadas no veículo, e não dá pra armazenar tabelas em setAccountData certo? eu descobri isso ontem, então eu tentei ao invés de setar uma tabela na conta do usuário, simplesmente colocar uma string qualquer, e mesmo assim não funcionou, como se não estivesse armazenando nada na conta do usuário quando o mesmo quitasse, deixando de lado o meu erro de tentar armazenar uma tabela na conta do usuário, o foco aqui é descobrir o motivo deste setAccountData não estar armazenando nada na conta do usuário.. O meu objetivo neste script é que: Quando o usuário desconectar, o script irá verificar se o mesmo tem um veículo comprado na concessionaria, se houver (e se o carro estiver espawnado), seria guardado as armas do veículo do usuário com o setAccountData na conta do usuário, pra quando logar novamente as armas do carro guardado estarem lá, e quando ele spawnar o veículo, o segundo script iria fazer a verificação, se ele tem ou não armas guardadas na conta, se caso houver, iria setar as armas no carro pra quando o usuário abrir o carro as armas estiverem lá, a parte de guardar as armas na conta do usuário é o meu próximo passo, mas antes tenho que descobrir por que o setAccountData não está funcionando.. Edited June 13, 2020 by Mickey2 Link to comment
DNL291 Posted June 13, 2020 Share Posted June 13, 2020 print e outputConsole mostram a saída no console (do servidor), se não tiver mostrando algo de errado tem aí. Faça uma output com a função iprint na tabela retornada em getElementData para verificar se tá tudo certo; se tiver como deve, vá para o próximo passo. 4 hours ago, Mickey2 said: pois o getElementData está me retornando uma tabela de armas guardadas no veículo, e não dá pra armazenar tabelas em setAccountData certo? eu descobri isso ontem, então eu tentei ao invés de setar uma tabela na conta do usuário, simplesmente colocar uma string qualquer Não salva tabelas, mas você pode converter ela para JSON com a função toJSON. E quando puxar o valor com getAccountData usar fromJSON, 4 hours ago, Mickey2 said: mesmo assim não funcionou, como se não estivesse armazenando nada na conta do usuário quando o mesmo quitasse Criar outputs em todo o processo da execução irá ajudar você a descobrir onde supostamente está o problema. Se você constatar que no onPlayerQuit não há problemas, pode fazer o seguinte: Depois do quit, abra a internal.db e verifique se o valor salvo referente a essa conta está como deveria. Se tiver tudo certo, provavelmente tem um problema no carregamento dos dados (getAccountData -> setElementData). 1 Link to comment
Mickey2 Posted June 14, 2020 Author Share Posted June 14, 2020 (edited) Muito bem vou testar.. Edited June 14, 2020 by Mickey2 Link to comment
Mickey2 Posted June 14, 2020 Author Share Posted June 14, 2020 (edited) Muito bem consegui, minha solução: addEventHandler('onPlayerQuit', root, function() local account = getPlayerAccount(source) if not isGuestAccount(account) then for i, vehicl in pairs(getElementsByType('vehicle')) do if getElementData(vehicl, "ownercar") == getAccountName(getPlayerAccount(source)) or getElementData(vehicl, "Owner") == source then setAccountData(account, 'vehitem', toJSON(getElementData(vehicl, 'armasG'))) -- setAccountData(account, 'vehitem', weap) break end end end end) esta é a primeira parte, aqui está a segunda: local accsalvo = getPlayerAccount(source) if getAccountData(accsalvo, 'vehitem') then exports._infobox:addNotification(source, 'funcionou finalmente caralhoo', 'warning') setElementData(vehicle, 'armasG', fromJSON(getAccountData(accsalvo, 'vehitem'))) else exports._infobox:addNotification(source, 'não tá funcionando maaano', 'warning') end solução: retirei o ipairs da primeira parte e coloquei pairs, depois eu testei assim: addEventHandler('onPlayerQuit', root, function() local account = getPlayerAccount(source) if not isGuestAccount(account) then for i, vehicle in pairs(getElementsByType('vehicle')) do if getElementData(vehicle, "armasG") then iprint(getElementData(vehicle, 'armasG')) -- setAccountData(account, 'vehitem', weap) break end end end end) funcionou é claro, porém não era meu objetivo, e sim fazer uma verificação se o carro achado pelo getElements, é do usuário que saiu do servidor, então eu dei uma olhada no outro script de quando o usuário espawna o veículo e estava assim: -- parte do script que importa -- setElementData(vehicle, "ownercar", getAccountName(getPlayerAccount(source))) setElementData(vehicle, "Owner", source) Então eu testei desta forma: addEventHandler('onPlayerQuit', root, function() local account = getPlayerAccount(source) if not isGuestAccount(account) then for i, vehicl in pairs(getElementsByType('vehicle')) do if getElementData(vehicl, "ownercar") == getAccountName(getPlayerAccount(source)) or getElementData(vehicl, "Owner") == source then setAccountData(account, 'vehitem', toJSON(getElementData(vehicl, 'armasG'))) -- setAccountData(account, 'vehitem', weap) break end end end end) (é claro que eu podia ter escolhido entre 'ownercar' e 'owner', mas só por segurança usei os dois) e como resultado não funcionou, por que? eu não sei, porém.. Quando eu fui olhar o script da concessionaria novamente, percebi que a minha parte da verificação: local accsalvo = getPlayerAccount(source) if getAccountData(accsalvo, 'vehitem') then exports._infobox:addNotification(source, 'funcionou finalmente caralhoo', 'warning') setElementData(vehicle, 'armasG', getAccountData(accsalvo, 'vehitem')) else exports._infobox:addNotification(source, 'não tá funcionando maaano', 'warning') end ela estava quase no começo da função de espawnar o veículo, então eu mudei a posição dela e coloquei no final da função, fui testar novamente, e funcionou, mas não entendi o por que de não ter funcionado com ela no começo da função, mas o importante é que está funcionando agora, e o resultado está nos 2 primeiros codes, vou salvar este script e tentar descobrir a fundo por que não estava funcionando, muito obrigado a todos vcs! (um simples erro de lógica que meu um baita trabalho!) Edited June 14, 2020 by Mickey2 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