Jump to content

[Help] Salvamento


Recommended Posts

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á ❤️ 

Link to comment
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 )

 

Link to comment
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
Link to comment
  • Moderators

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 )

 

  • Thanks 1
Link to comment
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 ❤️ 

Link to comment
  • Moderators

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.

  • Thanks 1
Link to comment
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.

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