Jump to content

[Help] Salvamento


Recommended Posts

Posted

Olá gente, eu acabei o meu script o que está acontecendo é que o jogador perde tudo quando o resource reinicia ou quando o jogador reloga.

Como eu posso salvar algo desse tipo?

playerCoca[player] = 0;
playerBalde[player] = 0;
playerTraficante[player] = 0;

Obrigado desde já ❤️ 

Posted
18 hours ago, Jonas^ said:

Funções:

SetAccountData

GetAccountData

Eventos:

OnResourceStop

OnResourceStart

OnPlayerLogin

OnPlayerQuit

OnPlayerLogout -- OBS: Só deve usar se você possuí o /logout ativo no seu servidor, caso contrário não é necessário.

Não consegui por a salvar, dá este erro. Obrigado pela ajuda ❤️ 

attempt to call upvalue 'playerTraficante' (a table value)
function onPlayerQuit ( )
	local playeraccount = getPlayerAccount ( source )
	if ( playeraccount ) and not isGuestAccount ( playeraccount ) then
		local trabalhotr = playerTraficante ( source )
		local ax = playerAx ( source )
		local coca = playerCoca ( source )
		local bagulho = playerBagulho ( source )
		local IngAx1 = playerIngAx1 ( source )
		local IngAx2 = playerIngAx2 ( source )
		local IngCoca1 = playerIngCoca1 ( source )
		local IngCoca2 = playerIngCoca2 ( source )
		local IngCoca3 = playerIngCoca3 ( source )
		local sementes = playerSementes ( source )
		setAccountData ( playeraccount, "trabalhotr", trabalhotr )
		setAccountData ( playeraccount, "droga.ax", ax )
		setAccountData ( playeraccount, "droga.coca", coca )
		setAccountData ( playeraccount, "droga.maconha", bagulho )
		setAccountData ( playeraccount, "droga.ingax1", IngAx1 )
		setAccountData ( playeraccount, "droga.ingax2", IngAx2 )
		setAccountData ( playeraccount, "droga.ingcoca1", IngCoca1 )
		setAccountData ( playeraccount, "droga.ingcoca2", IngCoca2 )
		setAccountData ( playeraccount, "droga.ingcoca3", IngCoca3 )
		setAccountData ( playeraccount, "droga.sementes", sementes )
		end
end

function onPlayerLogin (_, playeraccount )
      if ( playeraccount ) then
			local trabalhotr = getAccountData ( playeraccount, "trabalhotr" )
            local ax = getAccountData ( playeraccount, "droga.ax" )
			local coca = getAccountData ( playeraccount, "droga.coca" )
			local bagulho = getAccountData ( playeraccount, "droga.maconha" )
			local IngAx1 = getAccountData ( playeraccount, "droga.ingax1" )
			local IngAx2 = getAccountData ( playeraccount, "droga.ingax2" )
			local IngCoca1 = getAccountData ( playeraccount, "droga.ingcoca1" )
			local IngCoca2 = getAccountData ( playeraccount, "droga.ingcoca2" )
			local IngCoca3 = getAccountData ( playeraccount, "droga.ingcoca3" )
			local sementes = getAccountData ( playeraccount, "droga.sementes" )
            if ( trabalhotr ) then
                  setAccountData ( source, trabalhotr )
            end
			if ( ax ) then
                  setAccountData ( source, ax )
            end
			if ( coca ) then
                  setAccountData ( source, coca )
            end
			if ( bagulho ) then
                  setAccountData ( source, bagulho )
            end
			if ( IngAx1 ) then
                  setAccountData ( source, IngAx1 )
            end
			if ( IngAx2 ) then
                  setAccountData ( source, IngAx2 )
            end
			if ( IngCoca1 ) then
                  setAccountData ( source, IngCoca1 )
            end
			if ( IngCoca2 ) then
                  setAccountData ( source, IngCoca2 )
            end
			if ( IngCoca3 ) then
                  setAccountData ( source, IngCoca3 )
            end
			if ( sementes ) then
                  setAccountData ( source, sementes )
            end
      end
end

addEventHandler ( "onResourceStop", getRootElement ( ), onPlayerQuit )
addEventHandler ( "onResourceStart", getRootElement ( ), onPlayerLogin )
addEventHandler ( "onPlayerQuit", getRootElement ( ), onPlayerQuit )
addEventHandler ( "onPlayerLogin", getRootElement ( ), onPlayerLogin )

 

  • Moderators
Posted

Na sua linha 4. playerTraficante não faz sentido. Onde ele foi declarado?

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 (edited)
On 03/04/2019 at 15:15, Lord Henry said:

Na sua linha 4. playerTraficante não faz sentido. Onde ele foi declarado?

Antes de mais obrigado pela resposta  ❤️ 

Bom, eu por meu erro estava chamando uma tabela,  sendo não  possível fazê-lo. 

Troquei esta local que estava chamando a tabela

local trabalhotr = playerTraficante ( source )

Por esta local que chama a Data

local  trabalhotr = playerTraficante[source]

Mas ainda não está salvando essa data, está dando outro erro nessa linha ( Linha 2 )

local playeraccount = getPlayerAccount ( source )

ERRO >> Bad argument @ 'getPlayerAccount' [Expected player or console at argument 1, got resource]

Salvamento ( como ele está agora )

function onPlayerQuit ( )
	local playeraccount = getPlayerAccount ( source )
	if ( playeraccount ) and not isGuestAccount ( playeraccount ) then
		local trabalhotr = playerTraficante[source]
		local ax = playerAx[source]
		local coca = playerCoca[source]
		local bagulho = playerBagulho[source]
		local IngAx1 = playerIngAx1[source]
		local IngAx2 = playerIngAx2 [source]
		local IngCoca1 = playerIngCoca1 [source]
		local IngCoca2 = playerIngCoca2 [source]
		local IngCoca3 = playerIngCoca3 [source]
		local sementes = playerSementes [source]
		setAccountData ( playeraccount, "trabalhotr", trabalhotr )
		setAccountData ( playeraccount, "droga.ax", ax )
		setAccountData ( playeraccount, "droga.coca", coca )
		setAccountData ( playeraccount, "droga.maconha", bagulho )
		setAccountData ( playeraccount, "droga.ingax1", IngAx1 )
		setAccountData ( playeraccount, "droga.ingax2", IngAx2 )
		setAccountData ( playeraccount, "droga.ingcoca1", IngCoca1 )
		setAccountData ( playeraccount, "droga.ingcoca2", IngCoca2 )
		setAccountData ( playeraccount, "droga.ingcoca3", IngCoca3 )
		setAccountData ( playeraccount, "droga.sementes", sementes )
		end
end

function onPlayerLogin (_, playeraccount )
      if ( playeraccount ) then
			local trabalhotr = getAccountData ( playeraccount, "trabalhotr" )
            local ax = getAccountData ( playeraccount, "droga.ax" )
			local coca = getAccountData ( playeraccount, "droga.coca" )
			local bagulho = getAccountData ( playeraccount, "droga.maconha" )
			local IngAx1 = getAccountData ( playeraccount, "droga.ingax1" )
			local IngAx2 = getAccountData ( playeraccount, "droga.ingax2" )
			local IngCoca1 = getAccountData ( playeraccount, "droga.ingcoca1" )
			local IngCoca2 = getAccountData ( playeraccount, "droga.ingcoca2" )
			local IngCoca3 = getAccountData ( playeraccount, "droga.ingcoca3" )
			local sementes = getAccountData ( playeraccount, "droga.sementes" )
            if ( trabalhotr ) then
                  setAccountData ( source, trabalhotr )
            end
			if ( ax ) then
                  setAccountData ( source, ax )
            end
			if ( coca ) then
                  setAccountData ( source, coca )
            end
			if ( bagulho ) then
                  setAccountData ( source, bagulho )
            end
			if ( IngAx1 ) then
                  setAccountData ( source, IngAx1 )
            end
			if ( IngAx2 ) then
                  setAccountData ( source, IngAx2 )
            end
			if ( IngCoca1 ) then
                  setAccountData ( source, IngCoca1 )
            end
			if ( IngCoca2 ) then
                  setAccountData ( source, IngCoca2 )
            end
			if ( IngCoca3 ) then
                  setAccountData ( source, IngCoca3 )
            end
			if ( sementes ) then
                  setAccountData ( source, sementes )
            end
      end
end

addEventHandler ( "onResourceStop", getRootElement ( ), onPlayerQuit )
addEventHandler ( "onResourceStart", getRootElement ( ), onPlayerLogin )
addEventHandler ( "onPlayerQuit", getRootElement ( ), onPlayerQuit )
addEventHandler ( "onPlayerLogin", getRootElement ( ), onPlayerLogin )

 

Edited by GodKraken
Posted

Tente:


function onPlayerQuitOrResStop ( )
	if eventName == "onResourceStop" then
		for _, player in ipairs(getElementsByType("player")) do
			savePlayerData( player )
		end
		return
	end
	savePlayerData( source )
end

function onPlayerLogin (_, playeraccount )
	if eventName == "onResourceStart" then
		for _, player in ipairs(getElementsByType("player")) do
			loadPlayerData( p )
		end
		return
	end
	loadPlayerData( source )
end

function savePlayerData( p )
	local playeraccount = getPlayerAccount ( p )
	if ( playeraccount ) and not isGuestAccount ( playeraccount ) then
		local trabalhotr = playerTraficante[p] or "n/a"
		local ax = playerAx[p] or false
		local coca = playerCoca[p] or false
		local bagulho = playerBagulho[p] or false
		local IngAx1 = playerIngAx1[p] or false
		local IngAx2 = playerIngAx2 [p] or false
		local IngCoca1 = playerIngCoca1 [p] or false
		local IngCoca2 = playerIngCoca2 [p] or false
		local IngCoca3 = playerIngCoca3 [p] or false
		local sementes = playerSementes [p] or false
		
		setAccountData ( playeraccount, "trabalhotr", trabalhotr )
		setAccountData ( playeraccount, "droga.ax", ax )
		setAccountData ( playeraccount, "droga.coca", coca )
		setAccountData ( playeraccount, "droga.maconha", bagulho )
		setAccountData ( playeraccount, "droga.ingax1", IngAx1 )
		setAccountData ( playeraccount, "droga.ingax2", IngAx2 )
		setAccountData ( playeraccount, "droga.ingcoca1", IngCoca1 )
		setAccountData ( playeraccount, "droga.ingcoca2", IngCoca2 )
		setAccountData ( playeraccount, "droga.ingcoca3", IngCoca3 )
		setAccountData ( playeraccount, "droga.sementes", sementes )
	end
end

function loadPlayerData( p )
	local playeraccount = getPlayerAccount ( p )
	if ( playeraccount ) and not isGuestAccount ( playeraccount ) then
	
		local trabalhotr = getAccountData ( playeraccount, "trabalhotr" ) or false
		local ax = getAccountData ( playeraccount, "droga.ax" ) or false
		local coca = getAccountData ( playeraccount, "droga.coca" ) or false
		local bagulho = getAccountData ( playeraccount, "droga.maconha" ) or false
		local IngAx1 = getAccountData ( playeraccount, "droga.ingax1" ) or false
		local IngAx2 = getAccountData ( playeraccount, "droga.ingax2" ) or false
		local IngCoca1 = getAccountData ( playeraccount, "droga.ingcoca1" ) or false
		local IngCoca2 = getAccountData ( playeraccount, "droga.ingcoca2" ) or false
		local IngCoca3 = getAccountData ( playeraccount, "droga.ingcoca3" ) or false
		local sementes = getAccountData ( playeraccount, "droga.sementes" ) or false
		
		if ( trabalhotr ) then setElementData( p, "trabalhotr", trabalhotr ) end
		if ( ax ) then setElementData ( p, "droga.ax", ax ) end
		if ( coca ) then setElementData ( p, "droga.coca", coca ) end
		if ( bagulho ) then setElementData ( p, "droga.maconha", bagulho ) end
		if ( IngAx1 ) then setElementData ( p, "droga.ingax1", IngAx1 ) end
		if ( IngAx2 ) then setElementData ( p, "droga.ingax2", IngAx2 ) end
		if ( IngCoca1 ) then setElementData ( p, "droga.ingcoca1", IngCoca1 ) end
		if ( IngCoca2 ) then setElementData ( p, "droga.ingcoca2", IngCoca2 ) end
		if ( IngCoca3 ) then setElementData ( p, "droga.ingcoca3", IngCoca3 ) end
		if ( sementes ) then setElementData ( p, "droga.sementes", sementes ) end
	end
end

addEventHandler ( "onResourceStop", resourceRoot, onPlayerQuitOrResStop )
addEventHandler ( "onResourceStart", resourceRoot, onPlayerLogin )
addEventHandler ( "onPlayerQuit", getRootElement ( ), onPlayerQuitOrResStop )
addEventHandler ( "onPlayerLogin", getRootElement ( ), onPlayerLogin )

 

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

Posted
On 06/04/2019 at 19:11, DNL291 said:

Tente:


function onPlayerQuitOrResStop ( )
	if eventName == "onResourceStop" then
		for _, player in ipairs(getElementsByType("player")) do
			savePlayerData( player )
		end
		return
	end
	savePlayerData( source )
end

function onPlayerLogin (_, playeraccount )
	if eventName == "onResourceStart" then
		for _, player in ipairs(getElementsByType("player")) do
			loadPlayerData( p )
		end
		return
	end
	loadPlayerData( source )
end

function savePlayerData( p )
	local playeraccount = getPlayerAccount ( p )
	if ( playeraccount ) and not isGuestAccount ( playeraccount ) then
		local trabalhotr = playerTraficante[p] or "n/a"
		local ax = playerAx[p] or false
		local coca = playerCoca[p] or false
		local bagulho = playerBagulho[p] or false
		local IngAx1 = playerIngAx1[p] or false
		local IngAx2 = playerIngAx2 [p] or false
		local IngCoca1 = playerIngCoca1 [p] or false
		local IngCoca2 = playerIngCoca2 [p] or false
		local IngCoca3 = playerIngCoca3 [p] or false
		local sementes = playerSementes [p] or false
		
		setAccountData ( playeraccount, "trabalhotr", trabalhotr )
		setAccountData ( playeraccount, "droga.ax", ax )
		setAccountData ( playeraccount, "droga.coca", coca )
		setAccountData ( playeraccount, "droga.maconha", bagulho )
		setAccountData ( playeraccount, "droga.ingax1", IngAx1 )
		setAccountData ( playeraccount, "droga.ingax2", IngAx2 )
		setAccountData ( playeraccount, "droga.ingcoca1", IngCoca1 )
		setAccountData ( playeraccount, "droga.ingcoca2", IngCoca2 )
		setAccountData ( playeraccount, "droga.ingcoca3", IngCoca3 )
		setAccountData ( playeraccount, "droga.sementes", sementes )
	end
end

function loadPlayerData( p )
	local playeraccount = getPlayerAccount ( p )
	if ( playeraccount ) and not isGuestAccount ( playeraccount ) then
	
		local trabalhotr = getAccountData ( playeraccount, "trabalhotr" ) or false
		local ax = getAccountData ( playeraccount, "droga.ax" ) or false
		local coca = getAccountData ( playeraccount, "droga.coca" ) or false
		local bagulho = getAccountData ( playeraccount, "droga.maconha" ) or false
		local IngAx1 = getAccountData ( playeraccount, "droga.ingax1" ) or false
		local IngAx2 = getAccountData ( playeraccount, "droga.ingax2" ) or false
		local IngCoca1 = getAccountData ( playeraccount, "droga.ingcoca1" ) or false
		local IngCoca2 = getAccountData ( playeraccount, "droga.ingcoca2" ) or false
		local IngCoca3 = getAccountData ( playeraccount, "droga.ingcoca3" ) or false
		local sementes = getAccountData ( playeraccount, "droga.sementes" ) or false
		
		if ( trabalhotr ) then setElementData( p, "trabalhotr", trabalhotr ) end
		if ( ax ) then setElementData ( p, "droga.ax", ax ) end
		if ( coca ) then setElementData ( p, "droga.coca", coca ) end
		if ( bagulho ) then setElementData ( p, "droga.maconha", bagulho ) end
		if ( IngAx1 ) then setElementData ( p, "droga.ingax1", IngAx1 ) end
		if ( IngAx2 ) then setElementData ( p, "droga.ingax2", IngAx2 ) end
		if ( IngCoca1 ) then setElementData ( p, "droga.ingcoca1", IngCoca1 ) end
		if ( IngCoca2 ) then setElementData ( p, "droga.ingcoca2", IngCoca2 ) end
		if ( IngCoca3 ) then setElementData ( p, "droga.ingcoca3", IngCoca3 ) end
		if ( sementes ) then setElementData ( p, "droga.sementes", sementes ) end
	end
end

addEventHandler ( "onResourceStop", resourceRoot, onPlayerQuitOrResStop )
addEventHandler ( "onResourceStart", resourceRoot, onPlayerLogin )
addEventHandler ( "onPlayerQuit", getRootElement ( ), onPlayerQuitOrResStop )
addEventHandler ( "onPlayerLogin", getRootElement ( ), onPlayerLogin )

 

Bom, ainda não salvou, talvez porque eu não esteja adicionando a data corretamente.

Eu uso isso para atribuir o bagulho no fim do trabalho por exemplo.

playerAx[player] = playerAx[player] + 500;

Não terei de adicionar à data de um modo diferente?

Obrigado pela resposta anterior ❤️ 

Posted

Deve funcionar assim. Mas lembre-se de usar o comando /debugscript 3 sempre que testar o código.

A propósito, eu corrigi um erro que havia no meu código, na função onPlayerLogin (linha 12) substitua :

loadPlayerData( p )

Com

loadPlayerData( player )

Indexe as tabelas corretamente, com um elemento do jogador válido para evitar erros no salvamento. Te recomendo usar outputs com os valores existentes no código ao testar o script no server.

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

Posted
10 hours ago, DNL291 said:

Deve funcionar assim. Mas lembre-se de usar o comando /debugscript 3 sempre que testar o código.

A propósito, eu corrigi um erro que havia no meu código, na função onPlayerLogin (linha 12) substitua :


loadPlayerData( p )

Com


loadPlayerData( player )

Indexe as tabelas corretamente, com um elemento do jogador válido para evitar erros no salvamento. Te recomendo usar outputs com os valores existentes no código ao testar o script no server.

No debugscript não dá qualquer erro.

Porém apenas a data "trabalhotr" apareceu na base de dados. O resto não está salvando.

Posted
7 hours ago, DNL291 said:

Mostre o seu código completo. Pode ser que tenha algo errado com essas tabelas.

Resolvido!

Alterei a atribuição da data de todo script disto

playerAx[player] = playerAx[player] + 500;

para isto

setElementData(source,"droga.ax",getElementData(source,"droga.ax")+500)

 

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