Jump to content

[Duvida/Ajuda] Corrigir SaveData


Recommended Posts

Fiz um script de pickup que usa setElementData para salvar a skin que o cara tinha quando passou em cima, funcionou tudo normal, mas caso a pessoa que passou em cima esteja com a skin que o pickup da, e o servidor cai/reinicia, o player cai/quita, o script reinicia ou algo assim, ele não salva a skin anterior do player, e quando ele passar em cima do pickup, vai salvar a skin que o pickup deixou nele.

 

Spoiler

-- SCRIPT DO PICKUP -- SERVER SIDE --


pickup = createPickup(1766.3364257813,-1788.8395996094,16.325000762939, 3, 1275, 1)


function skin(hit)

local outSkin = tonumber(getElementData(hit,"skinout")) or 0
local accName = getAccountName ( getPlayerAccount ( hit ) )
if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Mecanico") ) then
if getElementData(hit,"Servico") == "Sim" then
    setPedSkin(hit,outSkin)
    setElementData(hit, "Servico","Não")
    exports.Scripts_Dxmessages:outputDx(hit, "Você saiu de Serviço com sucesso!", "success")
    return
end
    skinatual = getPedSkin(hit)
    setPedSkin(hit, 50)
    setElementData(hit, "Servico","Sim")
    setElementData(hit, "skinout", skinatual)
    exports.Scripts_Dxmessages:outputDx(hit, "Você entrou em Serviço com sucesso, Bom Trabalho!", "success")
else
    exports.Scripts_Dxmessages:outputDx(hit, "Você não é um mecanico para poder entrar em Serviço!", "error")

end
end
addEventHandler("onPickupHit", pickup,skin)

 


Para eu não só vir aqui sem tentar algo,  eu tentei com as seguintes linhas abaixo, que peguei do script de Save que uso
 

Spoiler

-- ADICIONADO DEPOIS DO PICKUP --


function onQuit (quitType, reason, responsibleElement)
	if not (isGuestAccount (getPlayerAccount (source))) then
	  account = getPlayerAccount (source)
	  if (account) then
			local skinserv = getAccountData ( source, "skinout" ) or 0
			local servi = getAccountData ( source, "Servico" ) or "Não"
			setElementData ( source, "skinout", skinserv )
			setElementData ( source, "Servico", servi )
		end
	end
end
addEventHandler ("onPlayerQuit", getRootElement(), onQuit)

function playerLogin (thePreviousAccount, theCurrentAccount, autoLogin)
	if not (isGuestAccount (getPlayerAccount (source))) then
	  local accountData = getAccountData (theCurrentAccount, "funmodev2-money")
	  if (accountData) then
		local skinserv = getAccountData ( source, "skinout" ) or 0
		local servi = getAccountData ( source, "Servico" ) or "Não"
		setElementData ( source, "skinout", skinserv )
		setElementData ( source, "Servico", servi )
	end
end
end
addEventHandler ("onPlayerLogin", getRootElement(), playerLogin)

function ReiniciarScript ( res, thePlayer )
	if res == getThisResource ( ) then
		if not (isGuestAccount (getPlayerAccount (thePlayer))) then
			local accountData = getAccountData (theCurrentAccount, "funmodev2-money")
			if (accountData) then
			  local skinserv = getAccountData ( thePlayer, "skinout" ) or 0
			  local servi = getAccountData ( thePlayer, "Servico" ) or "Não"
			  setElementData ( thePlayer, "skinout", skinserv )
			  setElementData ( thePlayer, "Servico", servi )
		  end
	  end
	  end
	end
addEventHandler ( "onResourceStart", getRootElement ( ), ReiniciarScript )


function DesligarScript ( res, thePlayer )
    if res == getThisResource ( ) then
		if not (isGuestAccount (getPlayerAccount (thePlayer))) then
			local accountData = getAccountData (theCurrentAccount, "funmodev2-money")
			if (accountData) then
			  local skinserv = getAccountData ( thePlayer, "skinout" ) or 0
			  local servi = getAccountData ( thePlayer, "Servico" ) or "Não"
			  setElementData ( thePlayer, "skinout", skinserv )
			  setElementData ( thePlayer, "Servico", servi )
		  end
	  end
	  end
	end
addEventHandler ( "onResourceStop", getRootElement ( ), DesligarScript )

 

Funcionou em partes, em que testei no momento (reiniciar e dar stop no resource), mas sempre da o seguinte erro
 

Spoiler

3HmInXO.png



 

  • Thanks 1
Link to comment

Assim por cima, notei uns control C cabuloso, mas, para salvar na conta do player se utiliza setAccountData.

Fiz algumas melhorias (ou melhor, dei uma geral), e dentre disso, você verá seus erro, e te ajudará.

-- SCRIPT DO PICKUP -- SERVER SIDE --


local pickup = createPickup(1766.3364257813,-1788.8395996094,16.325000762939, 3, 1275, 1)


function skin (hit)
   local accName = getAccountName ( getPlayerAccount ( hit ) )
   if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Mecanico") ) then
      if getElementData(hit,"Servico") == "Sim" then
         local outSkin = tonumber(getElementData(hit,"skinout")) or 0
         setElementModel (hit,outSkin) --/> Alterado
         setElementData(hit, "Servico", "Não")
         exports.Scripts_Dxmessages:outputDx(hit, "Você saiu de Serviço com sucesso!", "success")
      return end
    
      local skinatual = getElementModel(hit) --/> Alterado
      setElementModel (hit, 50) --/> Alterado
      setElementData(hit, "Servico", "Sim")
      setElementData(hit, "skinout", skinatual)
      exports.Scripts_Dxmessages:outputDx(hit, "Você entrou em Serviço com sucesso, Bom Trabalho!", "success")
   else
      exports.Scripts_Dxmessages:outputDx(hit, "Você não é um mecanico para poder entrar em Serviço!", "error")
   end
end
addEventHandler("onPickupHit", pickup,skin)

 
-- ADICIONADO DEPOIS DO PICKUP --

function player_quit ( )
   local account = getPlayerAccount (source)
   if account and not isGuestAccount(account) then
      local skinserv = getElementData ( source, "skinout" ) or 0 --/> Alterado
      local servi = getElementData ( source, "Servico" ) or "Não" --/> Alterado
      setAccountData ( account, "skinout", skinserv ) --/> Alterado
      setAccountData ( account, "Servico", servi ) --/> Alterado
   end
end
addEventHandler ("onPlayerQuit", getRootElement(), player_quit)

function player_login ( )
   local account = getPlayerAccount (source)
   if account and not isGuestAccount(account) then
      local skinserv = getAccountData ( account, "skinout" ) or 0
      local servi = getAccountData ( account, "Servico" ) or "Não"
      setElementData ( source, "skinout", skinserv )
      setElementData ( source, "Servico", servi )
   end
end
addEventHandler ("onPlayerLogin", getRootElement(), player_login )

function start_resource ( ) --/> Alterado / Quase tudo...
   for i, player in ipairs(getElementsByType("player")) do --/> Adicionado
      local account = getPlayerAccount (player) --/> Adicionado
      if account and not isGuestAccount(account) then --/> Adicionado
         local skinserv = getAccountData ( account, "skinout" ) or 0
         local servi = getAccountData ( account, "Servico" ) or "Não"
         setElementData ( player, "skinout", skinserv )
         setElementData ( player, "Servico", servi )
      end
   end
end
addEventHandler ( "onResourceStart", resourceRoot, start_resource ) --/> Alterado 

function stop_resource ( ) --/> Alterado / Quase tudo...
   for i, player in ipairs(getElementsByType("player")) do --/> Adicionado
      local account = getPlayerAccount (player) --/> Adicionado
      if account and not isGuestAccount(account) then --/> Adicionado
         local skinserv = getElementData ( player, "skinout" ) or 0 --/> Alterado
         local servi = getElementData ( player, "Servico" ) or "Não" --/> Alterado
         setAccountData ( account, "skinout", skinserv ) --/> Alterado
         setAccountData ( account, "Servico", servi ) --/> Alterado
      end
   end
end
addEventHandler ( "onResourceStop", resourceRoot, stop_resource ) --/> Alterado 

 

Edited by Angelo Pereira
  • Thanks 1
Link to comment
Spoiler
9 hours ago, Angelo Pereira said:

Assim por cima, notei uns control C cabuloso, mas, para salvar na conta do player se utiliza setAccountData.

Fiz algumas melhorias (ou melhor, dei uma geral), e dentre disso, você verá seus erro, e te ajudará.



-- SCRIPT DO PICKUP -- SERVER SIDE --


local pickup = createPickup(1766.3364257813,-1788.8395996094,16.325000762939, 3, 1275, 1)


function skin (hit)
   local accName = getAccountName ( getPlayerAccount ( hit ) )
   if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Mecanico") ) then
      if getElementData(hit,"Servico") == "Sim" then
         local outSkin = tonumber(getElementData(hit,"skinout")) or 0
         setElementModel (hit,outSkin) --/> Alterado
         setElementData(hit, "Servico", "Não")
         exports.Scripts_Dxmessages:outputDx(hit, "Você saiu de Serviço com sucesso!", "success")
      return end
    
      local skinatual = getElementModel(hit) --/> Alterado
      setElementModel (hit, 50) --/> Alterado
      setElementData(hit, "Servico", "Sim")
      setElementData(hit, "skinout", skinatual)
      exports.Scripts_Dxmessages:outputDx(hit, "Você entrou em Serviço com sucesso, Bom Trabalho!", "success")
   else
      exports.Scripts_Dxmessages:outputDx(hit, "Você não é um mecanico para poder entrar em Serviço!", "error")
   end
end
addEventHandler("onPickupHit", pickup,skin)

 
-- ADICIONADO DEPOIS DO PICKUP --

function player_quit ( )
   local account = getPlayerAccount (source)
   if account and not isGuestAccount(account) then
      local skinserv = getElementData ( source, "skinout" ) or 0 --/> Alterado
      local servi = getElementData ( source, "Servico" ) or "Não" --/> Alterado
      setAccountData ( account, "skinout", skinserv ) --/> Alterado
      setAccountData ( account, "Servico", servi ) --/> Alterado
   end
end
addEventHandler ("onPlayerQuit", getRootElement(), player_quit)

function player_login ( )
   local account = getPlayerAccount (source)
   if account and not isGuestAccount(account) then
      local skinserv = getAccountData ( account, "skinout" ) or 0
      local servi = getAccountData ( account, "Servico" ) or "Não"
      setElementData ( source, "skinout", skinserv )
      setElementData ( source, "Servico", servi )
   end
end
addEventHandler ("onPlayerLogin", getRootElement(), player_login )

function start_resource ( ) --/> Alterado / Quase tudo...
   for i, player in ipairs(getElementsByType("player")) do --/> Adicionado
      local account = getPlayerAccount (player) --/> Adicionado
      if account and not isGuestAccount(account) then --/> Adicionado
         local skinserv = getAccountData ( account, "skinout" ) or 0
         local servi = getAccountData ( account, "Servico" ) or "Não"
         setElementData ( player, "skinout", skinserv )
         setElementData ( player, "Servico", servi )
      end
   end
end
addEventHandler ( "onResourceStart", resourceRoot, start_resource ) --/> Alterado 

function stop_resource ( ) --/> Alterado / Quase tudo...
   for i, player in ipairs(getElementsByType("player")) do --/> Adicionado
      local account = getPlayerAccount (player) --/> Adicionado
      if account and not isGuestAccount(account) then --/> Adicionado
         local skinserv = getElementData ( player, "skinout" ) or 0 --/> Alterado
         local servi = getElementData ( player, "Servico" ) or "Não" --/> Alterado
         setAccountData ( account, "skinout", skinserv ) --/> Alterado
         setAccountData ( account, "Servico", servi ) --/> Alterado
      end
   end
end
addEventHandler ( "onResourceStop", resourceRoot, stop_resource ) --/> Alterado 

 

 

Hmmm, entendi perfeitamente, obrigado por me esclarecer, thanks

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