Jump to content

Salvamento


Recommended Posts

Olá gente o meu salvamento está a funcionar ao reniciar, ligar ou desligar o resource. Mas infelizmente não está salvando quando o player sai e entra no servidor. O que poderá ser?

Obrigado por toda a ajuda ❤️

---------------------------- SALVAR

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( player )
		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, "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 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 ( 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 )

 

Link to comment

Faça assim:

 

addEventHandler("onPlayerQuit", root,
    function ()
        savePlayerData (source)
    end
)

addEventHandler( "onPlayerLogin", root,
    function ()
        loadPlayerData (source)
    end
)

E retire a linha 77 e 78 do seu código.

Edited by Jonas^
Correção de indentação,
  • Like 1
Link to comment
2 hours ago, Jonas^ said:

Faça assim:

 


addEventHandler("onPlayerQuit", root,
    function ()
        savePlayerData (source)
    end
)

addEventHandler( "onPlayerLogin", root,
    function ()
        loadPlayerData (source)
    end
)

E retire a linha 77 e 78 do seu código.

Infelizmente, ainda não salva ao relogar. ❤️ 

Link to comment
  • Other Languages Moderators
---------------------------- SALVAR

function onPlayerQuitOrResStop (prevAcc, _)
	if eventName == "onResourceStop" then
		for i, player in ipairs(getElementsByType("player")) do
			savePlayerData (player)
		end
	elseif eventName == "onPlayerQuit" then
		savePlayerData (source)
	elseif eventName == "onPlayerLogout" then -- Neste caso, só é possível salvar na conta que o jogador estava logado por meio do parâmetro de função. Se usar getPlayerAccount agora, vai retornar conta Guest.
		savePlayerData (source, prevAcc)
	end
end
addEventHandler ("onResourceStop", resourceRoot, onPlayerQuitOrResStop)
addEventHandler ("onPlayerQuit", getRootElement(), onPlayerQuitOrResStop)
addEventHandler ("onPlayerLogout", getRootElement(), onPlayerQuitOrResStop)

function loadMyData (_, currAcc)
	if eventName == "onResourceStart" then -- Foi esperto usar isso para aproveitar a mesma função para eventos diferentes.
		for i, player in ipairs(getElementsByType("player")) do
			loadPlayerData (player)
		end
	elseif eventName == "onPlayerLogin" then
		loadPlayerData (source, currAcc)
	end
end
addEventHandler ("onResourceStart", resourceRoot, loadMyData) -- Não se usa nome de função igual nome de evento, por isso troquei.
addEventHandler ("onPlayerLogin", getRootElement(), loadMyData) -- Recomenda-se colocar os eventos logo após as funções que eles vão ativar, para facilitar a leitura.

function savePlayerData (p, acc)
	local playeraccount = false -- Cria a variável local.
	if acc then
		playeraccount = acc -- playerAccount = conta que o jogador ESTAVA logado. Esta variável ainda é local, aqui apenas foi atribuido valor a ela.
	else
		playeraccount = getPlayerAccount (p)
	end
	if (playeraccount) and not isGuestAccount (playeraccount) then
		--local trabalhotr = playerTraficante[p] or "n/a"
		local ax = playerAx[p]
		local coca = playerCoca[p]
		local bagulho = playerBagulho[p]
		local IngAx1 = playerIngAx1[p]
		local IngAx2 = playerIngAx2 [p]
		local IngCoca1 = playerIngCoca1 [p]
		local IngCoca2 = playerIngCoca2 [p]
		local IngCoca3 = playerIngCoca3 [p]
		local sementes = playerSementes [p]
		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, acc)
	local playeraccount = false
	if acc then
		playeraccount = acc
	else
		playeraccount = getPlayerAccount (p)
	end
	if (playeraccount) and not isGuestAccount (playeraccount) then
		local ax = getAccountData (playeraccount, "droga.ax") -- Não precisa do 'or false' pois a função getAccountData já retornará false caso a data não exista.
		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 (ax) then setElementData (p, "droga.ax", ax) end -- Passa todas as accountDatas para elementData (isso pesa bastante no servidor, tenha certeza do que está fazendo.)
		if (coca) then setElementData (p, "droga.coca", coca) end -- Está correto em manter datas parecidas com um índice separado pelo ponto.
		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

Não testado.
Se tiver erros, mostre o /debugscript 3

  • Like 1
Link to comment
7 hours ago, Lord Henry said:

---------------------------- SALVAR

function onPlayerQuitOrResStop (prevAcc, _)
	if eventName == "onResourceStop" then
		for i, player in ipairs(getElementsByType("player")) do
			savePlayerData (player)
		end
	elseif eventName == "onPlayerQuit" then
		savePlayerData (source)
	elseif eventName == "onPlayerLogout" then -- Neste caso, só é possível salvar na conta que o jogador estava logado por meio do parâmetro de função. Se usar getPlayerAccount agora, vai retornar conta Guest.
		savePlayerData (source, prevAcc)
	end
end
addEventHandler ("onResourceStop", resourceRoot, onPlayerQuitOrResStop)
addEventHandler ("onPlayerQuit", getRootElement(), onPlayerQuitOrResStop)
addEventHandler ("onPlayerLogout", getRootElement(), onPlayerQuitOrResStop)

function loadMyData (_, currAcc)
	if eventName == "onResourceStart" then -- Foi esperto usar isso para aproveitar a mesma função para eventos diferentes.
		for i, player in ipairs(getElementsByType("player")) do
			loadPlayerData (player)
		end
	elseif eventName == "onPlayerLogin" then
		loadPlayerData (source, currAcc)
	end
end
addEventHandler ("onResourceStart", resourceRoot, loadMyData) -- Não se usa nome de função igual nome de evento, por isso troquei.
addEventHandler ("onPlayerLogin", getRootElement(), loadMyData) -- Recomenda-se colocar os eventos logo após as funções que eles vão ativar, para facilitar a leitura.

function savePlayerData (p, acc)
	local playeraccount = false -- Cria a variável local.
	if acc then
		playeraccount = acc -- playerAccount = conta que o jogador ESTAVA logado. Esta variável ainda é local, aqui apenas foi atribuido valor a ela.
	else
		playeraccount = getPlayerAccount (p)
	end
	if (playeraccount) and not isGuestAccount (playeraccount) then
		--local trabalhotr = playerTraficante[p] or "n/a"
		local ax = playerAx[p]
		local coca = playerCoca[p]
		local bagulho = playerBagulho[p]
		local IngAx1 = playerIngAx1[p]
		local IngAx2 = playerIngAx2 [p]
		local IngCoca1 = playerIngCoca1 [p]
		local IngCoca2 = playerIngCoca2 [p]
		local IngCoca3 = playerIngCoca3 [p]
		local sementes = playerSementes [p]
		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, acc)
	local playeraccount = false
	if acc then
		playeraccount = acc
	else
		playeraccount = getPlayerAccount (p)
	end
	if (playeraccount) and not isGuestAccount (playeraccount) then
		local ax = getAccountData (playeraccount, "droga.ax") -- Não precisa do 'or false' pois a função getAccountData já retornará false caso a data não exista.
		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 (ax) then setElementData (p, "droga.ax", ax) end -- Passa todas as accountDatas para elementData (isso pesa bastante no servidor, tenha certeza do que está fazendo.)
		if (coca) then setElementData (p, "droga.coca", coca) end -- Está correto em manter datas parecidas com um índice separado pelo ponto.
		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

Não testado.
Se tiver erros, mostre o /debugscript 3

Sem qualquer erro, mas não salva ao relogar ainda. 

Obrigado por estar ajudando ❤️

Como estou a atribuir a data, um exemplo:

addCommandHandler("droga",
	function(player)
		local acc = getPlayerAccount ( player )
		setElementData(player,"droga.maconha", tonumber(getElementData(player,"droga.maconha") or 0) +10)
		setAccountData(acc,"droga.maconha",getElementData(player,"droga.maconha"))
		setElementData(player,"droga.coca", tonumber(getElementData(player,"droga.coca") or 0) +10)
		setAccountData(acc,"droga.coca",getElementData(player,"droga.coca"))
		setElementData(player,"droga.ax", tonumber(getElementData(player,"droga.ax") or 0) +10)
		setAccountData(acc,"droga.ax",getElementData(player,"droga.ax"))
	end
)

Como está o salvamento:

---------------------------- SALVAR

function onPlayerQuitOrResStop (prevAcc, _)
	if eventName == "onResourceStop" then
		for i, player in ipairs(getElementsByType("player")) do
			savePlayerData (player)
		end
	elseif eventName == "onPlayerQuit" then
		savePlayerData (source)
	elseif eventName == "onPlayerLogout" then
		savePlayerData (source, prevAcc)
	end
end
addEventHandler ("onResourceStop", resourceRoot, onPlayerQuitOrResStop)
addEventHandler ("onPlayerQuit", getRootElement(), onPlayerQuitOrResStop)
addEventHandler ("onPlayerLogout", getRootElement(), onPlayerQuitOrResStop)

function loadMyData (_, currAcc)
	if eventName == "onResourceStart" then
		for i, player in ipairs(getElementsByType("player")) do
			loadPlayerData (player)
		end
	elseif eventName == "onPlayerLogin" then
		loadPlayerData (source, currAcc)
	end
end
addEventHandler ("onResourceStart", resourceRoot, loadMyData)
addEventHandler ("onPlayerLogin", getRootElement(), loadMyData)

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

 

Edited by GodKraken
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...