Soull_Sec Posted June 23, 2020 Posted June 23, 2020 Eu fiz um script de porte de armas que quando o cara compra ele da um SetElementData(source, PorteArmas, "Possui") mas quando ele reloga por algum motivo some, muda pra nil o valor, o que pode ser? Não tem nada conflitando, pq ja mudei o nome até pra PorteArmasausdhasd9s8a9d87ya, nada com o mesmo nome etc.. Não sei oq pode ser.
androksi Posted June 23, 2020 Posted June 23, 2020 setElementData é temporário. Assim que o jogador se desconecta do servidor, não existe mais. Use setAccountData para salvar na conta do jogador ou algum banco de dados. 1 Hello, world. Tutorial sobre interação de BOTs do Discord com o seu servidor - Visitar (Brazilian Portuguese) Tutorial sobre tabelas - Visitar (Brazilian Portuguese) Tutorial sobre banco de dados - Visitar (Brazilian Portuguese)
Soull_Sec Posted June 24, 2020 Author Posted June 24, 2020 17 hours ago, andreisrww said: setElementData é temporário. Assim que o jogador se desconecta do servidor, não existe mais. Use setAccountData para salvar na conta do jogador ou algum banco de dados. NOSSA, MUITO OBRIGADO, ISSO RESPONDEU MUIIIITA COISA QUE JA ACONTECEU LA NO SERVER, agora tudo faz sentido kkkkkkkkk !!
Soull_Sec Posted June 24, 2020 Author Posted June 24, 2020 17 hours ago, andreisrww said: setElementData é temporário. Assim que o jogador se desconecta do servidor, não existe mais. Use setAccountData para salvar na conta do jogador ou algum banco de dados. So mais uma pergunta, se eu usar o setAccountData, para eu obter oq quero de dentro dele eu preciso usar o getAccountData? Ou o getElementData funciona do msm jeito?
Moderators Lord Henry Posted June 24, 2020 Moderators Posted June 24, 2020 Pra obter os dados salvos na conta, use o getAccountData. 2 Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanks! Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment Discord Oficial do MTA: https://mtasa.com/discord Blacklist e Whitelist de Scripters: Planilha Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.
Soull_Sec Posted June 24, 2020 Author Posted June 24, 2020 2 hours ago, Lord Henry said: Pra obter os dados salvos na conta, use o getAccountData. function Porte() local Porte = getAccountData ( source, "PorteHRPArma" ) or "Nao" if ( getPlayerMoney (source) >= 10000) then if Porte == "Nao" then takePlayerMoney(source, 10000) setAccountData(source,"PorteArma",Porte + 1) setAccountData(source,"PorteHRPArma","Sim") setElementData(source,"PorteHRPArma","Sim") exports.Scripts_Dxmessages:outputDx(source,"Você Comprou Um Porte de Armas por R$:10,000 ","success",source, true) else exports.Scripts_Dxmessages:outputDx(source,"Você Ja Possui Porte","error",source, true) end else exports.Scripts_Dxmessages:outputDx(source,"Você Não Possui DInheiro suficiente Para Comprar o Porte","error",source, true) end end addEvent("Porte", true) addEventHandler("Porte", root, Porte) Não esta funcionando, eu clico para fazer o porte e simplesmente nada acontece, ele n compra e nem fala que ja tem
DNL291 Posted June 24, 2020 Posted June 24, 2020 Verifique se source é realmente o player. iprint(source) 1 Please do not PM me with scripting related question nor support, use the forums instead.
Soull_Sec Posted June 24, 2020 Author Posted June 24, 2020 8 minutes ago, DNL291 said: Verifique se source é realmente o player. iprint(source) É sim, havia testado isso em alguns testes anteriores
DNL291 Posted June 26, 2020 Posted June 26, 2020 Onde esse evento é chamado? Mostre o código. Coloque uma saída de chat para ver se a função é executada: function Porte() outputChatBox("Função 'Porte' chamada!") local Porte = getAccountData ( source, "PorteHRPArma" ) or "Nao" if ( getPlayerMoney (source) >= 10000) then outputChatBox("@Porte: dinheiro >= 10000") if Porte == "Nao" then takePlayerMoney(source, 10000) setAccountData(source,"PorteArma",Porte + 1) setAccountData(source,"PorteHRPArma","Sim") setElementData(source,"PorteHRPArma","Sim") exports.Scripts_Dxmessages:outputDx(source,"Você Comprou Um Porte de Armas por R$:10,000 ","success",source, true) else exports.Scripts_Dxmessages:outputDx(source,"Você Ja Possui Porte","error",source, true) end else outputChatBox("@Porte: dinheiro < 10000") exports.Scripts_Dxmessages:outputDx(source,"Você Não Possui DInheiro suficiente Para Comprar o Porte","error",source, true) end end addEvent("Porte", true) addEventHandler("Porte", root, Porte) Sempre use o comando debugscript 3 para ver erros/avisos. 1 Please do not PM me with scripting related question nor support, use the forums instead.
ber Posted June 29, 2020 Posted June 29, 2020 (edited) Não pode ser utilizada uma variável no accountData, você precisa primeiro pegar a conta desse elemento utilizando 'getPlayerAccount' e aí sim usar ela no accountData. Exemplo: local contaPlayer = getPlayerAccount(source) setAccountData(contaPlayer , "Porte", sim) Outra coisa, não use set/getAccountData de uma vez pois eles consomem muita memória e demoram para serem buscados. É melhor usar o set/getAccountData apenas quando o player logar/quitar do servidor, e baseado no resultado você setar o elementData no player. Exemplo: function savePorte(source) local conta = getPlayerAccount(source) if getElementData(source, "Porte") == true then setAccountData(conta, "Porte", 1) end end addEventHandler("onPlayerQuit", getRootElement(), savePorte) function restorePorte(source) local conta = getPlayerAccount(source) if getAccountData(conta, "Porte") == 1 then setElementData(source, "Porte", true) end end addEventHandler("onPlayerLogin", getRootElement(), restorePorte) Seu código corrigido: function Porte() local Porte = getElementData ( source, "Porte" ) if ( getPlayerMoney (source) >= 10000) then if Porte == false then takePlayerMoney(source, 10000) setElementData(source, "Porte", true) exports.Scripts_Dxmessages:outputDx(source,"Você Comprou Um Porte de Armas por R$:10,000 ","success",source, true) else exports.Scripts_Dxmessages:outputDx(source,"Você Ja Possui Porte","error",source, true) end else exports.Scripts_Dxmessages:outputDx(source,"Você Não Possui DInheiro suficiente Para Comprar o Porte","error",source, true) end end addEvent("Porte", true) addEventHandler("Porte", root, Porte) function savePorte(source) local conta = getPlayerAccount(source) if getElementData(source, "Porte") == true then setAccountData(conta, "Porte", 1) end end addEventHandler("onPlayerQuit", getRootElement(), savePorte) function restorePorte(source) local conta = getPlayerAccount(source) if getAccountData(conta, "Porte") == 1 then setElementData(source, "Porte", true) end end addEventHandler("onPlayerLogin", getRootElement(), restorePorte) Edited June 29, 2020 by ber
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