Jump to content

Porte De Armas Sumindo


Recommended Posts

Posted

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.

Posted

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.

  • Thanks 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)
Posted
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 !! :D 

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

Pra obter os dados salvos na conta, use o getAccountData.

  • Thanks 2

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

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.

Posted
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

Posted

Verifique se source é realmente o player. iprint(source)

  • Like 1

Please do not PM me with scripting related question nor support, use the forums instead.

Posted

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.

  • Thanks 1

Please do not PM me with scripting related question nor support, use the forums instead.

Posted (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 by ber

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