Jump to content

setAccountData/getAccountData e transferir isso para o lado do client


Recommended Posts

Olá estou criando um sistema de inventario que está funcionando bem, player pega o item do lado do server, e faço um trigger evento para o lado do client, entao coloco ele em uma gridlist que pode ser aberta pelo player logicamente e ver seu inventario, o problema está quando ele sai do server, queria poder pegar o item da grid list, e salvar no setAccountData, entao quando player entrar, usar um getAccountData e transferir informações para o client, e do lado do client refazer o inventario dele! não sei se isso ta certo, porem eu acredito que isso seja a solução, por enquanto parte do codigo está assim!

 

function SalvarInv()
	item1 = guiGridListGetItemText(coluna,1,1)
	item2 = guiGridListGetItemText(coluna,2,1)
	item3 = guiGridListGetItemText(coluna,3,1)
	item4 = guiGridListGetItemText(coluna,4,1)...

...
item40 = guiGridListGetItemText(coluna,40,1)
	triggerServerEvent("SalvarInventario1",localPlayer)
end
addEventHandler("onClientPlayerQuit",getRootElement(),SalvarInv)

tentei pegar  os items da grid list e mandei para o server

addEvent("SalvarInventario1",true)

function saveAccountData(localPlayer)
	if isGuestAccount (localPlayer) then
        return
    end
	setAccountData(localPlayer,"Item1",item1)
	setAccountData(localPlayer,"Item2",item2)...

... setAccountData(localPlayer,"Item39",item39)
	setAccountData(localPlayer,"Item40",item40)
end
addEventHandler("SalvarInventario1",getRootElement(),saveAccountData)

tentei isso, entao quando o player entrar pegar o elemento e mandar a informação para o client refazer sua gridlist, porem acredito que aqui esta o problema, pois fazendo alguns testes vi que nao esta conseguindo pegar os itens (talvez nem tenha salvado)

function SetandoItem( _,localPlayer )
    if isGuestAccount ( localPlayer ) then
        return
    end
    
    local accountData = getAccountData (localPlayer, "Item1")
    if (accountData) then
	item1 = getAccountData(localPlayer,"Item1")
	item2 =getAccountData(localPlayer,"Item2")...

... item38=getAccountData(localPlayer,"Item38")
	item39=getAccountData(localPlayer,"Item39")
	item40=getAccountData(localPlayer,"Item40")
	triggerClientEvent(localPlayer,"ItensCarregadosDataBase",localPlayer)
	else
		setElementData(source,"Mochila","Lancheira Escolar")--ele ta pulando para essa parte, fiz o teste com a linha de baixo
		setElementData(source,"Tamanho",10)
	end
end
addEventHandler ( 'onPlayerLogin', root,SetandoItem)

apos isso tento por ele no lado do client e colocalo na gridlist

addEventHandler("ItensCarregadosDataBase",true)
function Adicionandoitem()
	row = guiGridListAddRow(coluna)--coluna é o nome da gridlist
	guiGridListSetItemText(coluna,row,citem,tostring(item1),false,false)
	guiGridListSetItemText(coluna,row,qitem,1,false,false)
	row2 = guiGridListAddRow(coluna)
	guiGridListSetItemText(coluna,row2,citem,tostring(item2),false,false)
	guiGridListSetItemText(coluna,row2,qitem,1,false,false)...

... row40 = guiGridListAddRow(coluna)
	guiGridListSetItemText(coluna,row40,citem,tostring(item40),false,false)
	guiGridListSetItemText(coluna,row40,qitem,1,false,false)
end
addEventHandler("ItensCarregadosDataBase",getRootElement(),Adicionandoitem)

É a primeira vez que to usando o AccountData, não sei bem como funciona então o codigo tem erros, porem nao sei como consertar!

 

Link to comment

Você não precisa utilizar o toJson, para setar uma Tabela em um AccountData, você pode setar ele direto.

Exemplo

Tabela = {100,200}

function setAccount(player)
    local acc = getPlayerAccount(player)
    setAccountData(acc,"tabelaItens",Tabela)
end
addCommandHandler("set",setAccount)

 

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